В разделах программирование и софт
Андрей Баксаляр  :: 25 янв, в 20:19

Как правильно сравнить содержимое вывода какой-то команды с содержимым текстового файла? Например, у нас есть requirements.txt, в котором содержится информация о зависимостях проекта. По сути, содержимое этого файла является записанным выводом команды pip freeze. И вот, по прошествии какого то времени, нам надо сравнить содержимое этого файла с актуальным выводом все той же команды.

Для этого достаточно просто воспользоваться конвейерным механизмом (unix pipes):

$ pip freeze | diff requirements.txt -
3c3
< django-extensions==1.7.1
---
> django-extensions==1.7.4

Что здесь происходит? Во-первых, сначала выполняется pip freeze, вывод которого подается дальше по конвейеру, передача обозначается символом |. Во второй части команды diff принимает первым аргументом файл requirements.txt, а вторым аргументом, обозначенным дефисом -, принимает стандартный ввод, в котором содержится переданная по конвейеру информация из левой части команды (т.е. вывод pip freeze). Программа diff сравнивает два текста и выдает найденную разницу.

Любопытно, что в Linux-е файл тоже может иметь название "-", и тут есть вероятность небольшой путаницы. Из этой ситуации можно выйти элегантным образом, явно указывая bash-у, что это файл, а не stdin:

$ cat ./-
Wow, very strange! Such pipy!

Где вместо точки интерпретатор подставляет текущую директорию. Естественно, можно просто указать полный путь — например, cat /home/andrey/-.

Та же самая техника применяется в тех случаях, когда bash должен отличить название файла от опций, например, ./-e будет рассматриваться именно как название файла -e, а не как опция -e.

К слову, первый пример с конвейером можно реализовать немного по-другому:

$ diff requirements.txt <(pip freeze)
3c3
< django-extensions==1.7.1
---
> django-extensions==1.7.4

Здесь при выполнении интерпретатором сначала «раскрываются скобки», а потом вывод передается по конвейеру в левую часть команды.

Кстати, через конвейеры удобно сравнивать вывод команд и/или файлы не только локальные, но и удаленные. Например, сравнить два файла (локальный и удаленный) можно примерно так:

$ diff requirements.txt <(ssh -A user@host.com "cat /www/project/requirements.txt")

Здесь мы подключаемся к удаленному серверу (естественно, все это должно быть настроено заранее), там выводим содержимое requirements.txt и через конвейер сравниваем это с аналогичным локальным файлом.

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


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

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

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

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

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

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

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

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

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

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

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


В разделе софт
Андрей Баксаляр  :: 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  ]};

В качестве второго варианта

...можно установить приложение dconf-editor (в смысле, sudo apt-get install dconf-editor, sudo dnf install dconf-editor и т.д.), и в нем уже задать необходимые параметры, пройдя по пути org/gnome/desktop/input-sources/xkb-options:

Окно dconf-editor для изменения параметров раскладок клавиатуры xkb-options

В поле Custom value будет что-то вроде ['grp:alt_shift_toggle'], дописываем в квадратные скобки свои параметры, чтобы стало так — ['grp:alt_shift_toggle', 'lv3:ralt_switch', 'misc:typo']

Вариант с Gnome Tweak Tool

...наиболее простой. Устанавливаем программу (в пакетных менеджерах это gnome-tweak-tool).

Окно настроек клавиатуры в программе Gnome Tweak Tool

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


В разделах программирование и софт
Андрей Баксаляр  :: 23 апр 2015, в 13:06

...то отца русской демократии спасет простая команда:

a2enmod php5

Элементарно, но потратил впустую некоторое количество времени, чтобы найти где косяк. Видимо, из каких-то соображений безопасности модуль PHP в Apache не включается автоматически после установки первого. Надеюсь, данная заметка сэкономит вам 10 минут.

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


В разделах сделай сам и софт
Андрей Баксаляр  :: 26 мар 2015, в 16:56

Многие пользуются альтернативной типографской раскладкой Ильи Бирмана в среде Windows — ей удобно быстро и эффективно вставлять необходимые символы, недоступные в простой раскладке, как то: стрелки (← ↓ ↑ →), кавычки-елочки, тире, английские двойные и одинарные кавычки (« » — “” ‘’), знаки валют (€ ¥ £), параграфы, градусы, знак приблизительного равенства, знак бесконечности, знак неравенства (§ ° ≈ ∞ ≠), знаки копирайтов и торговых марок (© ® ™), надстрочные индексы ¹ ² ³, и так далее.

В среде современных дистрибутивов GNU/Linux (точнее, в свежих версиях оконных менеджеров Gnome/KDE, исключая Gnome 3) раскладка Бирмана, что любопытно, поставляется уже из коробки — достаточно поставить галочку и выбрать клавишу для вставки альтернативных символов (у Бирмана это традиционно правый альт).

Типографская раскладка Бирмана

Делается это так:

  1. Заходим в настройки раскладок клавиатуры, клацаем на кнопку Options («Параметры раскладки»):

    Настройка типографской раскладки Бирмана

  2. Разворачиваем пункт списка Key to choose 3rd Level («Клавиша для выбора 3-го уровня»), там выбираем необходимую клавишу, в моем случае — это правый альт (Right Alt):

    Настройка типографской раскладки Бирмана

  3. Затем в пункте “Miscellaneous compatibility options” («Разные параметры совместимости») выставляем “Enable extra typographic characters” («Включить дополнительные типографские символы»).

    Настройка типографской раскладки Бирмана

На этом все, типографская раскладка активирована. Над пошаговой инструкцией можно увидеть ее карту.

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


В разделе софт
Андрей Баксаляр  :: 3 фев 2014, в 07:28

Обновление от сентября 2016 года: по некоторым сообщениям, данный способ может не действовать в некоторых новых версиях Google Chrome. Но попытаться стоит, если очень надо.

Мургаб в Google Chrome

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

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

Полное отключение обновлений производится немного нестандартным методом — через изменение групповых политик Windows (рассмотренный здесь способ должен работать для всех современных Окон). Итак, поехали:

  1. Скачиваем мелкий (250 килобайт) файлик GoogleUpdate.adm (с сервера Google, либо с сервера Murgab.net) и кладем его куда-нибудь в легкодоступное место (типа рабочего стола).

  2. Открываем меню «Пуск» и вводим в поиск «групповой» (к сексу отношения не имеет).

Изменение групповой политики

Или просто в командной строке «Выполнить» вбиваем «gpedit.msc». И нажимаем Enter.

Выполнить → gpedit.msc

  1. В открывшемся окошке находим раскрывающийся список «Конфигурация компьютера», внутри него будут «Административные шаблоны». Кликаем правой кнопкой и в выпадающем меню выбираем «Добавление и удаление шаблонов...».

Редактор локальной групповой политики → Добавление и удаление шаблонов

  1. В появившемся диалоге нажимаем «Добавить» и находим скачанный файл GoogleUpdate.adm:

Добавление шаблона GoogleUpdate.adm в локальные групповые политики

Шаблон добавится, можно жать «Закрыть».

  1. Теперь нужно найти добавленный шаблон. В Windows XP, 2000, Server 2003 новый раздел «Google» находится прямо в «Административных шаблонах», в остальных ОС (Vista, 7 и т.д.) раздел можно найти в подразделе «Административных шаблонов» — «Классические административные шаблоны (ADM)». Выглядит примерно так:

Классические административные шаблоны Google Chrome

  1. Отключаем нафиг автоматическую проверку обновлений, кликая на параметр «Auto-update check period override» и выбирая опцию «Отключить», как на скриншоте:

Задаем Auto-update check period override и отключаем автоматические обновления в Chrome

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

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


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

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


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

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