В разделе юмор
Андрей Баксаляр  :: 9 июн 2016, в 02:00

На сайте BBC News опубликовали довольно занимательную статью про индуса Санала Эдамаруку, регулярно обгаживающего малину индийским религиозным фанатикам, разоблачая «божественные чудеса» и прочее колдовство. Отличное юмористическое чтиво и показательная история.

Чудесный Иисус

Например, в Индии появилась чудо-статуя Иисуса, ставшая местом паломничества местных религиозных фриков: со стоп статуи внезапно начала капать «святая вода» или даже «кровь Иисуса», которую паломники собирали для ритуалов или пили. Чувак послал на местность своего друга-инженера, который нашел источник жидкости — им оказалась лопнувшая труба из соседнего сортира (ой...).

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

Итог не такой радостный и смешной — разъяренная толпа фанатиков обвинила чувака в богохульстве и начала жестко преследовать обидчика, в результате чего, опасаясь расправы и ареста (по закону об «оскорблении чувств верующих»), ему пришлось уехать с родины в более развитую страну Финляндию. Санал ни о чем не сожалеет и считает, что ему не за что извиняться — еще бы!

Вот уж воистину, это мракобесие отлично иллюстрирует мысль: «вера — означает считать достоинством свою неразумность»...


Частотный словарь от mc.hertzbeat.ru

Для собственных небольших исследований сделал частотный словарь из базы статей агрегатора mc.hertzbeat.ru. Было обработано около 600 МБ очищенного текста (~130 тысяч новостных статей), в основном — это срез избранных и самых популярных статей российской прессы (с уклоном в IT-издания) за последние два года. Общий размер словаря — 840 тысяч слов.

Оказалось, что по «популярности» в прессе Android (10 692 упоминания) превосходит iOS (4 664 упоминания) и iPhone (9 431 упоминание), а Google (18 045) заборола Apple (17 080), но всех, конечно же, победил Путин (20 878 упоминаний). При этом Обама (3 783) конкурирует с Песковым (3730), а Навальный (3 443 упоминания) затмил wi-fi (3 109) и ИГИЛ (1037).

Подумалось, что такой частотный словарь (своего рода свежий срез СМИ) может кому-то пригодиться, поэтому наслаждайтесь:

В несжатом виде (~10 МБ)
В сжатом виде (~3 МБ)
То же самое на github-е, плюс там, возможно, будут появляться обновления...


В разделах программирование и софт
Андрей Баксаляр  :: 1 май 2016, в 05:55

Скриншот Termux

Приложение Termux — настоящая находка для сисадмина или разработчика, привыкшего к окружению Linux, имеющего свежее Android-устройство и компактную беспроводную bluetooth-клавиатуру. Теперь можно устроить рай в шалаше, с родной средой, ssh, apt-get-ом, Grep-ом по SMS-кам (и контактам), Emacs-ом, Vim-ом, Python-ом, Perl-ом, Node.js, Ruby, полноценным башем, fish-ем или zsh, и прочей тяжелой артиллерией без «большого компьютера».

Скриншот Termux

Очень и очень круто, телефоны уже умеют практически 100% того, что умеют десктопы — с ростом производительности полным ходом подтягивается и десктопный софт. Вообще, не перестаю удивляться, в какое интересное время живем! Ждем Termux на умных часах и в умных очках (шутка).


В разделе программирование
Андрей Баксаляр  :: 21 апр 2016, в 22:05

При использовании jQuery (или подобной JavaScript-библиотеки) мы часто сталкиваемся с необходимостью проверить — существует ли элемент или узел DOM в документе? Конечно, для этого удобнее было бы использовать еще и привычные CSS-селекторы.

Первое, что приходит на ум - это проверять, возвращает ли jQuery объект при попытке выбрать его селекторами. Например, так:

if ($("#mydiv")) {
    // полезный или бесполезный код
}

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

Однако, благодаря тому, что объект возвращается пустым, появляется и элегантное решение проблемы. Ведь можно банально получить длину объекта через его свойство length:

if ($("#mydiv").length > 0){
    // полезный или бесполезный код
}

Можно еще немного упростить решение:

if ($("#mydiv").length) {
    // полезный или бесполезный код
}

Теперь условие будет работать корректно, потому что когда jQuery возвращает пустой объект, его длина будет равна нулю.

Пока комментариев нет, будь первым!


Исследователи из университетов Беркли и Джорджтауна (США) разработали звуковые команды для Siri и Google Now, нераспознаваемые для человеческого слуха. Эти команды звучат как белый шум с примесями человеческого голоса и могут использоваться для взлома и заражения телефонов, сообщает Popular Science.

Вредоносный шум для устройств под Android и iOS различается. Услышав команду, браузер загружает определенную страницу или вредоносную программу без ведома владельца устройства. В ходе экспериментов устройства распознали 90% таких команд. Эти сигналы, незаметные для человеческого слуха, можно передавать даже через радиопередачи.

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


В разделах интернет и языковое
Андрей Баксаляр  :: 25 мар 2016, в 21:05

Инструменты для пыток

Базовые пыточные принадлежности:

Аддресс
Аккустика
Алладин
Андронный коллайдер
Анимэ
Асвальт
Безплатно
Болелемение
В крации
В купе
Вкурсе
Броется
Вообщем
Вротарь
Всмысле
Впринцепи
Врятле
Выйграл
Делема
Дёшего
Дибил
Едит
Завтро
Зделать
Извени
Ихний
Какуето
Касяк
Канечно
Конешно
Касатка
Киллограм
Координально
Лудше
Низнаю
Ньюанс
Однёрка
Пасспорт
Пачему
Прасти
Пожалуйсто
Помойму
Правельно
Пробывать
Ризетка
Симпотичный
Скаченный
Сосиська
Спосибо
Траффик
Тубаретка
Удолить

Уф, все, это уже через чур!


В разделах технологии, будущее и наука
Андрей Баксаляр  :: 25 мар 2016, в 02:11

История изобилует случаями, когда перспективная и крутая технология из научно-фантастических романов грозилась ворваться в быт, уже вот-вот практически врывалась, а после некоторого периода эйфории все понимали, что шумиха поднята рановато, и технология пока представляет собой лишь непрактичный, но хорошо разрекламированный proof-of-concept, облепленный компаниями и людьми, стремящимися на этой теме нажиться.

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

Вспомните электрокары, «бум доткомов», 3d-кино. Примеров на самом деле очень много.

И вот главные вопросы поста, касательно этой мысли — в какой фазе находятся нейронные сети, создающие сейчас хайп на фоне AlphaGo (но не могущие распознать наличие человека на определенных фотографиях)? И на какой стадии сейчас находятся человекообразные роботы (с учетом, что Google вроде как купила Boston Dynamics, но вроде как уже продает за ненадобностью)?

Пока комментариев нет, будь первым!


Как гласит недавний отчет Stack Overflow (а также отчеты GitHub), самый популярный язык программирования в мире на данный момент — JavaScript. Отчасти язык популярен своей небывалой распространенностью в браузерах, отчастью он обязан своей популярностью и серверной платформе NodeJS, позволяющей писать программы, выполняемые не только в браузерах клиентских машин, но и на серверах.

И обе реализации на данный момент прочно сплелись к пакетным менеджером NPM, с помощью которого можно получить гигантский выбор разнообразных модулей, написанных на JS, и подключаемых буквально одной командой. При подключении модуля пакетный менеджер NPM автоматически разрешает все зависимости, и если скачиваемый модуль использует в своей работе другой модуль, то NPM выкачивает и его, а также, соответственно, и все связанные модули модулей модулей модулей.

Как правильно перевозить грузы

Такая модульность стала своего рода традицией экосистемы NPM. Модули стали писать по случаю и без. На каждый чих — свой модуль, и вряд ли еще остались слова английского (и не только) языка, не занятые под название модуля с модной припиской “JS” на конце.

И вот эта страсть к высокодробной модульности и вышла NPM и его обитателям боком. На неделе разгорелся небольшой скандал на почве обрушения части NPM из-за смешного инцидента. Некий Азер Кочулу (Azer Koçulu), автор более 250 модулей к NodeJS, являвшийся владельцем модуля под названием kik, получил письмо от сотрудников мессенджера Kik, попросившего его уступить им «кошерное» название в NPM. Азер отказался пойти навстречу, и сотрудники мессенджера Kik отправили аналогичное письмо руководству платформы NPM. NPM решила отнять у Азера красивое имя для модуля и отдать его мессенджеру Kik. Тут Азер, по понятным причинам, негодуя от такой несправедливости, выпилил весь свой зоопарк модулей с NPM (напомню, это более 250 наименований)...

И тут главный прикол всего цирка: оказалось, что от его модулей зависит куча крупных проектов, в числе которых такие монстры, как Фейсбуковский React, JavaScript-транскомпилятор Babel и, по цепочке, огромное количество других модулей и программ. А так как Азер отозвал свои поделия, то вся эта инфраструктура рухнула как карточный домик. И что еще более смешно в этой непростой ситуации, модуль под названием leftpad, от которого зависило множество других крупных проектов, состоял из… 11 строчек кода! И ладно бы в этих 11 строках кода были бы заключена вселенская мудрость или хотя бы результат большой научной работы, сконцентрированный в лаконичную формулировку (E = mc²). Нет, модуль делал довольно тупую и банальную вещь — добавлял нули или пробелы в левой части заданной строки или числа!

module.exports = leftpad;
function leftpad (str, len, ch) {
  str = String(str);
  var i = -1;
  if (!ch && ch !== 0) ch = ' ';
  len = len - str.length;
  while (++i < len) {
    str = ch + str;
  }
  return str;
}

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

'{0:06d}'.format(6)

То есть, крупнейшие и сложнейшие проекты включили в себя модуль из десятка строк тупого кода, который можно было бы оформить буквально за две минуты самостоятельно (без создания лишних зависимостей). И в среде NPM такое на каждом шагу — это часть культуры! Прекрасным примером этому может послужить небольшое исследование Дэвида Хейни (David Haney), который прошерстил NPM на предмет наличия подобных «модулей».

Трюк с байками

Например, оказалось, что есть такой замечательный модуль, как isArray. Этот модуль скачало 880 000 человек за один день, кроме того, он был загружен 18 миллионов раз только в одном феврале этого года! От этого модуля напрямую зависят 72 пакета в NPM. И что же это за чудесный модуль такой?

return toString.call(arr) == '[object Array]';

А модуль этот состоит из одной. ОДНОЙ! Строчки дурацкого кода, приведенного выше. И призван проверять — не массив ли перед нами…

Есть еще один чудесный модуль с говорящим названием is-positive-integer (GitHub), до смешного банальный — он проверяет, положительное ли целое число ему передано. Состоит из целых четырех строк кода (!!!) и (внимание!) требует три зависимости для своей работы! То есть требовал, недавно автор «отрефакторил» свой код, и теперь его важнейший модуль не требует зависимостей вообще (вот он — подвиг программиста)!

Индийский мотоциклетный парад

А вот еще один пример, приведенный в комментариях на Хабре — очередной модуль «для проверки типа» — isnumber. Одна тупая строчка:

return !isNaN(parseFloat(n)) && isFinite(n);

И вот такая вот развесистая система приводит к тому, что какой-нибудь Babel включает в себя 41 000 файлов (и это свежеустановленный пакет!), а также генерирует чистый шаблонный проект (jspm/npm) с… более чем 28 000 файлов! Эта, вроде бы неплохая изначально идея компактных модулей, была доведена до полнейшего, абсолютного, феерического абсурда. Мало того, что с каждой такой дурацкой зависимостью вы добавляете еще одну точку отказа в своем коде (которую нельзя потом оперативно отладить), так еще и автоматически полагаетесь на качество кода горе-программистов (типа упомянутого выше, что проверял положительность целого числа тремя зависимостями).

Индийский мотоциклетный парад

P.S. Кстати, теперь уже печально известный модуль leftpad, удаленный Азером, в итоге восстановили без его одобрения, в качестве экстренной меры, чтобы не «поломать систему».


В разделе софт
Андрей Баксаляр  :: 23 мар 2016, в 18:42

Самый замечательный в плане функционала, а также наиболее симпатичный и удобный в плане интерфейса двухпанельный файловый менеджер в Linux на данный момент — это Double Commander. Я перепробовал много всяких поделок, 99% из которых не то чтобы далеки от идеала, а даже близко к нему не приближаются. То это уродливый кривой монстр с диким интерфейсом, могущий все-все-все, и тянущий с собой миллион зависимостей KDE, то это унылая программа, в которой ничего нет, и которая отличается от банального примитивного однооконного менеджера только своей двухпанельностью (но этого явно недостаточно).

Скриншот файлового менеджера Double Commander под Linux

В общем, до того, как я наткнулся на Double Commander (Википедия), для меня в природе не существовало хорошего аналога для каноничного™ Total Commander'а — а он является ярким образчиком (почти) идеального двухпанельного менеджера, который может кучу всего, имеет лаконичный интерфейс, а также быстр и компактен.

Double Commander же максимально приблизился к этому идеалу. Он даже разрабатывается в той же среде — Free Pascal (в IDE Lazarus, что является прямой наследницей старого доброго Delphi), что интересно, в том же ФриПаскале скомпилирована 64-разрядная редакция Total Commander'а. Создан Александром Кобловым (и сообществом — это открытое ПО) в начале 2008 года. Продукт пока находится в активной стадии разработки и не добрался до первого релиза, на данный момент крайняя версия — 0.7.

Однако уже сейчас он прекрасно работает и отлично выполняет все свои функции, и без него уже никак не обойтись — DC стал настоящим инструментом, который активно применяется ежедневно. Я не буду перечислять то, что он умеет — привыкшие к Total Commander'у в Windows и затем перешедшие на Linux, лишившись любимого инструмента, оценят и все поймут, опробовав Double Commander в деле. К слову, о Windows — DC есть и под эту платформу (а также под Mac OS X и FreeBSD).

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

Увы, пока Double Commander сложно найти в репозиториях популярных дистрибутивов, поэтому придется подключать PPA и прочие сторонние репозитории (в 23-й Федоре, например, Коммандер нашелся в «русском репозитории Fedora»). Официальный сайт Double Commander'а находится по данной ссылке, страница загрузки.


В разделе софт
Андрей Баксаляр  :: 23 мар 2016, в 03:52

Если у вас в качестве Desktop Environment используется Gnome2 или аналог (а также если это перелицованный Gnome3 в форме какого-нибудь Cinnamon), то включить типографскую раскладку Бирмана не проблема — я уже довольно детально описывал способ ранее.

Раскладка Бирмана

Однако, если у вас Gnome 3, или другая среда рабочего стола, где типографской раскладки «из коробки» попросту нет, то задача может оказаться слегка нетривиальной. Типографская раскладка в работе (и вообще) пригождается довольно часто, и перейдя на Fedora 23, где по умолчанию включен Gnome 3, пришлось немного повозиться. С результатами возни делюсь с читателем:

Раскладки, как таковые, не привязаны к конкретной DE — интерпретацией ввода с клавиатуры занимается подсистема xkb, встроенная в оконную систему X Window System (X11, или те самые «иксы»). И все раскладки, банально, лежат в директории X11, в виде текстовых конфигов. Типографская раскладка в 23-й Федоре, например, обнаружилась по адресу /usr/share/X11/xkb/symbols/typo, в других дистрибутивах она может располагаться аналогичным образом, но в подкаталогах /etc/X11/xkb/.... Заголовок обнаруженного конфига гласит:

// Typographic Keyboard
// Sergei Stolyarov <sergei@regolit.com>

// Initial contribution by Alexey Ten <alexeyten+deb@gmail.com>
// Additional contribution and code cleanup by Artur Dryomov <artur.dryomov@gmail.com>

// Mainly based on the layout proposed by Ilya Birman
// http://ilyabirman.ru/projects/typography-layout/

Итак, раскладка найдена, теперь ее необходимо подключить. Как оказалось, делается это довольно просто, командой в терминале:

setxkbmap -option "lv3:ralt_switch,misc:typo"

Синтаксис команды, в принципе, прост: программа setxkbmap с ключом -option меняет лишь дополнительные настройки клавиатуры не затрагивая остальное, а именно — в данном случае устанавливает правый альт (ralt_switch) в качестве модификатора для клавиш третьего уровня (lv3), а также подключает типографскую клавиатуру в качестве своеобразной «маски», добавляющей третий слой поверх любой вашей раскладки (будь то английская, русская или таджикская).

Опции устанавливаются на время сессии (или до того момента, как Gnome не решит их переписать своими), поэтому после перезагрузки или перелогина установленные настройки пропадут. И именно поэтому можно включить вышеупомянутую строку в какой-нибудь $HOME/.bashrc, чтобы опция устанавливалась при старте системы, но лучше так не делать.

Самым правильным вариантом будет воспользоваться механизмом инициализации X11, и поместить такой текст:

-option "lv3:ralt_switch,misc:typo"

...в текстовый файл .Xkbmap, расположенный прямо в домашней директории пользователя ($HOME/.Xkbmap). Скрипты инициализации (конкретнее — xinitrc-common) найдут его там при старте X11 и применят лежащие в нем настройки.

К слову, вышеупомянутый конфиг typo можно скопировать, обозвать его, например, mytypo и изменить по своему вкусу (изменения раскладки ограничены лишь фантазией), подключив свой вариант, формат объявлений там весьма простой:

key <код клавиши> {[ NoSymbol, NoSymbol, результат применения модификатора Level3 (обычно AltGr), аналогично для Shift+Level3  ]};

Войти через...


Это даст читателю возможность голоса, комментария, создания закладки, и даже написания поста, не говоря о множестве других мелких ништяков.

Популярное


Шоу Дружко 1 май, в 11:16

Пара иллюстраций от Томми Уошбуша 30 апр, в 12:35

По США на товарняках 2 апр, в 14:12

Новое Оно на подходе 30 мар, в 15:45

Пообщался со Стивом Джобсом 10 апр, в 15:41

Соациализируемся


Также найти меня можно в других злачных местах:

Все еще использую электронную почту:
andreybaksalyar@ya.ru