Pull to refresh
-2
0
Михаил Котельников @wolandtel

GNU/Linux: администрирование и разработка ПО

Send message

Абсолютный минимум об Unicode на 2023 год (всё ещё — никаких оправданий!)

Level of difficulty Medium
Reading time 18 min
Views 14K

Двадцать лет назад Джоэл Спольски написал: «Не существует такой штуки, как «обычный текст». Если имеется строка, но неизвестно, какую кодировку символов она использует — смысла в этой строке нет. Больше нельзя спрятать голову в песок и притвориться, что «обычный» текст имеет кодировку ASCII.»

Многое изменилось за 20 лет. В 2003 году главный вопрос звучал так: «Что это за кодировка?». В 2023 году такой вопрос больше не стоит: с вероятностью в 98% это — UTF-8. Наконец то! Можно снова спрятать голову в песок!

Читать далее
Total votes 53: ↑52 and ↓1 +51
Comments 46

Кто такой Балмер, и почему у него есть Пик? Алкоголь и продуктивность программиста — и миф, и правда одновременно

Reading time 11 min
Views 31K

Пятничный вечер, уютная домашняя атмосфера, интересный сериал на ноутбуке, рифленые чипсы и большая кружка пива. Вы уже расслабились в ожидании отличных выходных, как вдруг вспоминаете, что забыли добавить пару важных компонентов к рабочему проекту и «замерджить» несколько веток.

Гештальт ломается — вы ставите на паузу ваши «острые козырьки», открываете редактор и начинаете методично править код. На удивление, состояние потока мгновенное окутывает ваш разум и вы как никогда продуктивны, даже несмотря на поздний час.

Виной всему — пиво! ... Стоп, что, пиво?! Эм, ну, вообще-то, да. Вы что, не слышали про Пик Балмера?

Читать далее
Total votes 28: ↑24 and ↓4 +20
Comments 30

Самый крутой бесплатный ресурс по обучению программированию с нуля

Reading time 3 min
Views 83K
image


Куинси Ларсон, основатель бесплатной образовательной платформы для программистов freeCodeCamp

Куинси Ларсон


Путь Куинси Ларсона в программирование был замысловатым. Он 6 лет был директором школы и вдруг ему захотелось повысить эффективность системы образования, поэтому стал учиться программированию. Куинси Ларсон проанализировал, какие были учебные программы (буткэмпы) на тот момент и понял, что ни о какой доступности и открытости нет речи, и тогда решил сделать свой инклюзивный-диверсити-бесплатный образовательный лагерь в 2014 году. Куинси Ларсон хотел помочь начинающим программистам, чтобы те не шли таким корявым путем как он сам. Благодаря freeCodeCamp теперь никто больше не должен есть стекловату и смотреть в бездну. Узнав про мотивацию Куинси Ларсона, я обрадовался, ибо не один я такой странный и хочу собрать концентрат, Ontol, самых полезных бесплатных материалов в одном месте.

Помимо работы над freeCodeCamp, Куинси Ларсон борется за свободный интернет, контрибьютит в open-source и играется со своими двумя детишками.

freeCodeCamp


Образовательной платформой FreeCodeCamp пользуются 350 000 студентов в день из 160 стран. За 2021 год студенты провели за обучением 2,1 млрд минут или 4000 лет. 217 000 учеников считают себя выпускниками этой школы, 40 000 получили работу ИТишника впервые, после обучения тут.

А еще, говорят, что можно зайти на этот сайт с полным 0, а выйти уже трудоустроенным (дело за малым — разрешение на работу). Ах да, надо же знать английский (или очень хотеть его выучить).

На русском языке про FreeCodeCamp нет странички в Википедии (хотя есть на сербском, албанском, португальском, манипури, румынском, малаяльском языках), зато есть сотни более кривых «пересказов» их курсов на русском языке, но не бесплатно, а за 150к+
Читать дальше →
Total votes 31: ↑21 and ↓10 +11
Comments 11

100 ватт по USB или как работает Power Delivery

Reading time 9 min
Views 165K
Почитав вот этот пост и сопутствующую ему дискуссию, я решил попробовать внести ясность в то, что такое USB Power Delivery и как это работает на самом деле. К сожалению у меня сложилось впечатление, что большинство участников дискуссии воспринимают 100 ватт по USB слишком буквально, и не до конца понимают что за этим стоит на уровне схематики и протоколов.

Итак, кратко – основные пункты:

  • USB PD определяет 5 стандартных профилей по электропитанию – до 5V@2А, до 12V@1.5А, до 12V@3А, до 12-20V@3А и до 12-20V@4.75-5А
  • Кабели и порты для Power Delivery сертифицируются и имеют дополнительные пины в разьеме
  • Тип кабеля и его соответствие профилю определяются автоматически через дополнительные пины и определение типа USB коннектора (микро, стандарт, A, B и т.д.)
  • Обычные USB кабели (не Power Delivery) сертифицируются только по первому профилю до 5V@2A
  • При подключении распределяются роли, между тем кто дает ток (Source / Источник ) и кто потребляет (Sink / Приемник)
  • Источник и Приемник обмениваются сообщениями по специальному протоколу, который работает параллельно традиционному USB
  • В качестве физического носителя протокол использует пару – VBus / GND. Именно поэтому Power Delivery не зависит от основного USB протокола и обратно совместим с USB 2.0 и 3.0
  • Используя сообщения, источник и приемник могут в любой момент времени меняться ролями, изменять силу тока и/или напряжение, уходить в спячку или просыпаться, и т.д.
  • По желанию устройства могут поддерживать управление PD через традиционные USB запросы, дескрипторы и т.д.

Под катом — детали.
Читать дальше →
Total votes 77: ↑76 and ↓1 +75
Comments 36

Почему нам кажется, что инфляцию считают неправильно?

Reading time 7 min
Views 26K
image

В апреле этого года, спустя месяцы колебаний в районе 0-1%, официальный уровень инфляции в США резко подскочил до 2,8%. Для многих людей это стало давно ожидаемой ситуацией. Они долгие годы подозревали, что официальный уровень инфляции не отражает данные «реального мира» — хотя инфляция оставалась низкой, настоящая стоимость жизни росла.
Total votes 38: ↑33 and ↓5 +28
Comments 58

Как Airbnb скрывает преступления при помощи тайной команды «чистильщиков»

Reading time 20 min
Views 54K

Наверняка вам приходилось слышать о нелёгкой работе модераторов видеохостингов, вычищающих многие терабайты запрещённого контента. Но есть ещё одна категория работников, службу которых вряд ли можно назвать простой, — это сотрудники секретной службы безопасности Airbnb.

Журналисты Bloomberg выяснили, что компания постоянно сталкивается с преступлениями в арендованных квартирах и разбирается с этими случаями особая команда численностью в 100 человек, многие из которых раньше служили в армии или работали в полиции. Когда во время пребывания в арендованной квартире что-то идёт не так, как надо, в дело вступают эти парни, чтобы убрать трупы успокоить гостей и хозяев, замыть кровь помочь семьям и предотвратить PR-катастрофу.

Читать далее
Total votes 74: ↑60 and ↓14 +46
Comments 141

Сервис для случайных встреч с незнакомцами, но не дейтинг. История стартапа Random Coffee

Reading time 7 min
Views 39K
image

Несколько лет назад в ИТ индустрии стала популярна инициатива Random Coffee (иногда слитно, иногда с хэштегом). Суть в том, что людям из разных команд, департаментов и компаний рандомно назначаются встречи за чашкой кофе — просто поговорить о чем угодно. Это помогает выбраться из своего «пузыря», когда забываешь, что за пределами узкого круга коллег и друзей на самом деле есть целый мир, полный разных людей.

А в ИТ давно существует свое негласное «Правило 34» — если существует идея, значит ее давно оформили в продукт и уже развивают стартап. Константин Шубин и Павел Козлов вместе работали в Яндексе, увидели там подобную инициативу, взяли идею на вооружение и решили сделать из этого самостоятельный бизнес.

Random-coffee.ru в цифрах: 5000 интересных собеседников из более чем 30 сообществ, почти 15000 состоявшихся встреч.
Читать дальше →
Total votes 30: ↑26 and ↓4 +22
Comments 9

Управление Яндекс.Станцией и другими колонками с Алисой из Home Assistant

Reading time 4 min
Views 111K

Мы привыкли называть умными устройства, которыми можем управлять, не вставая с дивана. Включить лампочку, вентилятор, кофеварку или стиральную машину.


Колонки с Яндекс Алисой хоть и называются умными, но вы не можете изменить громкость не находясь рядом с колонкой (орать через всю комнату не считается). Вы не можете перемотать песню из мобильного приложения Яндекса. Или остановить сказку, запущенную на колонке в детской, из своей кровати в спальне.


В январе 2020 кто-то обнаружил, что Яндекс.Станция поддерживает некий локальный протокол. На GitHub начали появляться проекты по управлению Яндекс.Станцией. Мне хватило пару часов, чтоб разобраться и выпустить первую версию компонента для Home Assistant. Это достаточно популярная система домашней автоматизации, написанная на языке Python.


На сегодняшний день компонент поддерживает управление всеми колонками с Яндекс Алисой и при желании может выглядеть так:


Читать дальше →
Total votes 24: ↑23 and ↓1 +22
Comments 42

Объясняя необъяснимое. Часть 5

Reading time 13 min
Views 22K
Мы продолжаем готовиться к PG Day’16 и знакомить вас с интересными возможностями PostgreSQL.

В предыдущих постах этой серии я говорил о том, как читать вывод EXPLAIN и что означает каждая строка (операция/узел).

В заключительном посте я постараюсь объяснить, почему Постгрес выбирает «Операцию X», а не «Операцию Y».


Читать дальше →
Total votes 30: ↑28 and ↓2 +26
Comments 3

Объясняя необъяснимое. Часть 4

Reading time 8 min
Views 21K
Конференция PG Day’16 с каждым днем всё ближе, а мы продолжаем публиковать серию статей Hubert Lubaczewski об анализе explain и его основных операциях.

В этом, надеюсь, предпоследнем посте серии я расскажу об оставшихся наиболее распространенных операциях, которые вы можете встретить в выводе explain.


Читать дальше →
Total votes 16: ↑15 and ↓1 +14
Comments 4

Объясняя необъяснимое. Часть 3

Reading time 16 min
Views 43K
В рамках подготовки к конференции PG Day’16 мы продолжаем знакомить вас с интересными аспектами PostgreSQL. И сегодня предлагаем вам перевод третьей статьи из серии об explain.

В предыдущих постах этой серии я писал о том, как интерпретировать отдельно взятую строку в выводе анализа explain, его структуру, а также описал базовые операции получения данных (узлы дерева explain).

Сегодня мы перейдем к более сложным операциям.


Читать дальше →
Rating 0
Comments 0

Объясняя необъяснимое. Часть 2

Reading time 8 min
Views 68K
Регистрация на конференцию PG Day’16 в разгаре, а мы продолжаем публиковать перевод статей Hubert Lubaczewski об explain и его основных компонентах.

В прошлый раз я писал о том, что показывает вывод explain. Теперь я хочу больше поговорить о разных типах «узлов» / операций, которые вы можете встретить в планах explain.

Читать дальше →
Total votes 28: ↑27 and ↓1 +26
Comments 4

Объясняя необъяснимое

Reading time 11 min
Views 60K
Друзья, мы с радостью продолжаем публикацию интересных материалов, посвященных самым разнообразным аспектам работы с PostgreSQL. Сегодняшний перевод открывает целую серию статей за авторством Hubert Lubaczewski, которые наверняка заинтересуют широкий круг читателей.



Одна из первых вещей, которую слышит новоиспеченный администратор баз данных – «используй EXPLAIN». И при первой же попытке он сталкивается c непостижимым:

                                                        QUERY PLAN
---------------------------------------------------------------------------------------------------------------------------
 Sort  (cost=146.63..148.65 rows=808 width=138) (actual time=55.009..55.012 rows=71 loops=1)
   Sort Key: n.nspname, p.proname, (pg_get_function_arguments(p.oid))
   Sort Method: quicksort  Memory: 43kB
   ->  Hash Join  (cost=1.14..107.61 rows=808 width=138) (actual time=42.495..54.854 rows=71 loops=1)
         Hash Cond: (p.pronamespace = n.oid)
         ->  Seq Scan on pg_proc p  (cost=0.00..89.30 rows=808 width=78) (actual time=0.052..53.465 rows=2402 loops=1)
               Filter: pg_function_is_visible(oid)
         ->  Hash  (cost=1.09..1.09 rows=4 width=68) (actual time=0.011..0.011 rows=4 loops=1)
               Buckets: 1024  Batches: 1  Memory Usage: 1kB
               ->  Seq Scan on pg_namespace n  (cost=0.00..1.09 rows=4 width=68) (actual time=0.005..0.007 rows=4 loops=1)
                     Filter: ((nspname <> 'pg_catalog'::name) AND (nspname <> 'information_schema'::name))

Что бы это могло значить?
Читать дальше →
Total votes 33: ↑31 and ↓2 +29
Comments 23

Активация discard (TRIM) на Linux для SSD

Reading time 6 min
Views 78K

Современные накопители данных такие как SSD нуждаются в команде TRIM интерфейса ATA и для этого в ОС построенных на базе ядра Linux предусмотрено два метода управления на уровне файловых систем:


  • discard — устанавливается как опция монтировании файловой системы. Позволяет ядру Linux сразу отправлять команду TRIM на устройство, как только об этом сообщит файловая система.
  • fstrim — утилита которая запускается вручную или по расписанию как сервис ОС, отправляет список удаленных блоков с ФС для зачистки их на устройстве.

Для включения fstrim достаточно активировать сервис fstrim.service в systemd, но лучше вместо сервиса, который будет висеть в памяти, использовать таймер fstrim.timer который будет запускать еженедельный TRIM.


Пример включения сервиса:


# Включение, старт и вывод статуса сервиса:
systemctl enable fstrim.service && \
systemctl start fstrim.service && \
systemctl status fstrim.service

Но этих мер недостаточно, если у вас файловые системы располагаются на томах LVM, а LVM в LUKS игла в яйце, яйцо в утке, утка в зайце:



Читать дальше →
Total votes 29: ↑28 and ↓1 +27
Comments 15

Аудио через Bluetooth: максимально подробно о профилях, кодеках и устройствах

Reading time 26 min
Views 611K
Комикс XKCD про 14 конкурирующих стандартов: Надпись: СИТУАЦИЯ: есть 14 конкурирующих стандартов. Гик: 14?! Абсурд! Нам необходимо разработать один универсальный стандарт, на все случаи жизни. Спутница гика: Да! Надпись: Скоро: СИТУАЦИЯ: Есть 15 конкурирующих стандартов.

This article is also available in English

Из-за массового выпуска смартфонов без аудиоразъема 3.5 мм беспроводные Bluetooth-наушники для многих стали основным способом прослушивания музыки и общения в режиме гарнитуры.
Производители беспроводных устройств не всегда пишут подробные характеристики товара, а статьи о Bluetooth-аудио в интернете противоречивы, местами некорректны, не рассказывают о всех особенностях, и часто копируют одну и ту же не соответствующую действительности информацию.
Попробуем разобраться с протоколом, возможностями Bluetooth-стеков ОС, наушников и колонок, Bluetooth-кодеков для музыки и речи, выясним, что влияет на качество передаваемого звука и задержку, научимся собирать и декодировать информацию о поддерживаемых кодеках и других возможностях устройств.

TL;DR:
  • SBC — нормальный кодек
  • У наушников есть свой эквалайзер и пост-процессинг на каждый кодек отдельно
  • aptX не настолько хорош, как о нём говорят рекламные анонсы
  • LDAC — маркетинговое фуфло
  • Качество звука в режиме разговора всё ещё низкое
  • В браузер можно встроить аудиоэнкодеры на C, скомпилировав в WebAssembly через emscripten, и они не будут особо тормозить.

Total votes 175: ↑171 and ↓4 +167
Comments 180

Проблемы автономных СКУД — Там, откуда не ждали

Reading time 3 min
Views 29K
Всем доброго времени суток. Начну с предыстории, о том, что меня побудило провести данное исследование, но прежде предупрежу: все практические действия были выполнены с согласия управляющих структур. Любая попытка использовать данный материал в целях проникновения на закрытую территорию без права там находиться — является уголовным правонарушением.

Началось все с того, что убираясь на столе, я случайно поместил RFID ключ от подъезда на NFC-считыватель ACR122 — каково же было мое удивление, когда Windows воспроизвела звук обнаружения нового устройства, а светодиод загорелся зеленым. Я до этого момента полагал что эти ключи работают исключительно в стандарте Proximity.
image
Читать дальше →
Total votes 47: ↑47 and ↓0 +47
Comments 36

Нормализация отношений. Шесть нормальных форм

Reading time 8 min
Views 1.4M
В данной теме я затрону 6 нормальных форм и методы приведения таблиц в эти формы.

Процесс проектирования БД с использование метода НФ является итерационным и заключается в последовательном переводе отношения из 1НФ в НФ более высокого порядка по определенным правилам. Каждая следующая НФ ограничивается определенным типом функциональных зависимостей и устранением соответствующих аномалий при выполнении операций над отношениями БД, а также сохранении свойств предшествующих НФ.
Читать дальше →
Total votes 37: ↑22 and ↓15 +7
Comments 14

Пасхалки на топографических картах Швейцарии

Reading time 5 min
Views 26K


Возможно, вы слышали, что в Швейцарии есть ЦОД, расположенный в старом военном бункере. Это чуть ли не самый защищённый дата-центр в мире, а его расположение много лет оставалось секретной информацией. Его просто не было видно на картах Швейцарии. Которые, между прочим, весьма подробные. Но сегодня Cloud4Y расскажет вам не про ЦОД, используемый облачными провайдерами, а про карты и картографов.

На протяжении десятилетий картографы прятали небольшие картинки на официальных топографических картах Швейцарии. Они старались перехитрить одну из самых строгих в мире организаций по созданию карт, чтобы оставить память о себе.
Читать дальше →
Total votes 35: ↑35 and ↓0 +35
Comments 26

Некоторая неудобная правда об LDAC

Reading time 12 min
Views 161K


Эта статья – продолжение обсуждения, зарождённого в предыдущей статье.

Как показала практика, работа команды маркетологов Sony дала свои плоды – и кодек LDAC в своей Bluetooth-реализации набирает популярность и даже завоевал некоторое количество фанатов.

Разберём, действительно ли всё так великолепно?
Читать дальше →
Total votes 13: ↑12 and ↓1 +11
Comments 93

PHP: array_key_exists ищет быстрее чем in_array в 500 раз

Reading time 3 min
Views 14K
В 2014 уже писали про обыск массива, но вряд ли кто понял.

C тех пор вышло много версий PHP и не исправили значит обратная связь плохая и об этом мало кто знает. На питоне так же, и в 3* хуже чем в 2.7.

Иногда нужно найти строку в массиве строк — очень частая операция в разных алгоритмах и если массив небольшой и искать немного и не в цикле, то in_array нормально, на общую скорость не влияет, но если big data и искать надо массиве из миллиарда строк и миллиард раз, то это уже критично: лучше час вместо недели.

Простой тест показывает:

in_array ищет за 6-9 сек ideone.com/Yb1mDa 6600ms
а array_key_exists ищет тоже самое, но быстрее в 250(php5.6/py3.*) в 400+ раз (php7.3/py2.7) ideone.com/gwSmFc (цикл увеличен в 100 раз) 12ms (6600/12=550раз +-10% разброс из-за нагрузки и кеша)

Почему же такое происходит? Рассмотрим подробно:
Читать дальше →
Total votes 44: ↑18 and ↓26 -8
Comments 50

Information

Rating
Does not participate
Location
Пермь, Пермский край, Россия
Date of birth
Registered
Activity