В разделах программирование и софт
Андрей Баксаляр  :: 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 и через конвейер сравниваем это с аналогичным локальным файлом.

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


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

Порой случается такое, что нужно проверить вывод какого-то API в консоли. Запрашиваешь у сервера информацию (возьмем для примера API OpenWeather) и тебе вываливается что-то подобное:

Нечитаемый JSON

И это еще в лучшем случае, т.к. здесь иерархия не такая ветвистая и мало узлов. Бывают случаи, где вывод совершенно нечитаем человеком. И вот в таких случаях можно использовать какой-то инструмент для того, чтобы «причесать JSON» (еще это называют термином pretty print).

Один из нескольких вариантов — замечательная утилита jq, делающая JSON вполне удобочитаемым и визуально структурированным:

Легко читаемый JSON в консоли

Как видно, запрос curl-лом мы отправили по конвейеру в jq ., в данном случае точка после команды является аргументом, означающим, что от jq требуется выдать все узлы, находящиеся в корне иерархии. Вместо точки можно указывать конкретный путь, состоящий из ключей, разделяемых точками — например:

Вывод отдельной ветки иерархии JSON при помощи jq

В данном примере мы попросили вывести jq лишь необходимую часть JSON, а именно — раздел weather со всем содержимым. Можно фильтровать и дальше по дереву. Например, jq .person.name.surname.

Информация об установке (например, в Ubuntu jq уже есть в репозитариях — sudo apt install jq) и примеры фильтров доступны на официальном сайте jq.


В разделах программирование и софт
Андрей Баксаляр  :: 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 на умных часах и в умных очках (шутка).


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

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

...можно установить приложение 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-го ряда». После этого типографская клавиатура должна заработать.


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

Сервис, расшифровывающий правил в cron-е — crontab.guru

Crontab.guru — очень удобный сервис для проверки/составления правил планировщика cron. Вбиваете в пять полей цифры и смотрите по описанию сверху — совпадает ли «формула» с желаемым поведением.


В разделе программирование
Андрей Баксаляр  :: 7 ноя 2015, в 08:52

Небольшая памятка для себя + кому-то может пригодиться.

Иногда требуется «засечь» время и посмотреть, сколько выполняется та или иная «тяжелая» задача в Linux'овом терминале (для этого подходит встроенная команда time). Но если time по каким-то причинам не подходит, то может пригодиться такой метод подсчета времени выполнения команд и блоков кода в bash-скриптах:

START=$(date +%s.%N)

# здесь блок кода, время выполнения которого считаем

END=$(date +%s.%N)
DIFF=$(echo "$END - $START" | bc)

echo Начало выполнения задачи — $START
echo Задача выполнена — $END
echo Итоговое время выполнения задачи — $DIFF

В начале в переменную START складывается текущее время (форматированный вывод команды date, количество секунд + наносекунд с начала эпохи Unix), затем выполняется блок кода или «тяжелая» задача, далее в переменную END снова записывается текущее время. Ниже обе временные метки выводятся в консоль, плюс выводится разница между START и END, сложенная в DIFF.


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

Пингвины смотрят на север

OpenNET пишут (цитирую наиболее интересное для меня):

Организация Linux Foundation опубликовала ежегодный отчёт (PDF, 360 Кб, 17 стр.) с анализом прогресса развития ядра Linux и оценкой вклада индивидуальных разработчиков и коммерческих компаний в разработку и рецензирование кода...

Темп развития Linux продолжает увеличиваться: в среднем каждый час в ядро принимается 7.71 изменений (год назад фиксировалось в среднем 7.14 изменений в час, два года назад — 6), в день — 185 (год назад 171) изменений, в неделю — 1300 (1200). На подготовку нового выпуска ядра в среднем уходит 66 дней, год назад этот показатель составлял 70 дней, два года назад — 80 дней.

С момента выпуска 3.11 наибольший вклад в развитие ядра внесли корпорации Intel, Red Hat, Linaro, Samsung, IBM, SUSE, Texas Instruments, Vision Engraving Systems и Google. На первое место в рейтинге впервые вырвалась компания Intel, c 7 на 4 место переместился Samsung. Oracle занимает 14 место, AMD — 15, NVIDIA — 16, ARM — 19, Cisco — 21.

По число новых разработчиков лидирует компания Intel, из которой к работе над ядром подключилось 147 новых участников. Далее следуют Samsung — 48 новых участников, IBM — 47, Google — 43, Huawei Technologies — 37, Red Hat — 32

80% всех вносимых в ядро изменений сделаны разработчиками, которые получили оплату за данную работу. В прошлом году доля оплачиваемых разработчиков также составляла 80%, а в позапрошлом — 75%. Только 11.8% (в прошлом году — 13.6%, в позапрошлом 14.6%) изменений созданы на голом энтузиазме и не имеют принадлежности к корпорациям.

Пингвины смотрят на север

Причины участия компаний в разработке Linux-ядра:

  • Компании, подобные IBM, AMD, ARM, Intel, SGI, MIPS, Freescale, HP, Broadcom, NVIDIA и Fujitsu, заинтересованы в достойной работе Linux на их оборудовании;
  • Дистрибьюторам, таким как Red Hat, Novell, Oracle и MontaVista, важно, чтобы Linux-ядро было как можно более функциональным;
  • Такие компании как Sony, Cisco и Samsung поставляют Linux в виде компонента своей продукции, такой как видеокамеры, телеприставки и мобильные телефоны. Участие в разработке Linux-ядра позволяет обеспечить дальнейшее использование Linux в качестве базиса для своих продуктов.

Наиболее значительный вклад среди индивидуальных разработчиков привнес H Hartley Sweeten, совершивший 1.1% от всех изменений в ядре. На втором месте Al Viro с 1% изменений. На третьем Takashi Iwai с 0.9% изменений.… На 10 и 30 самых активных разработчиков в сумме приходится 8.2% и 17% изменений.


В разделах юмор и софт
Андрей Баксаляр  :: 25 апр 2013, в 00:42

Логотип дистрибутива Pidora

Любопытная такая новость вышла на опеннете:

В списке рассылки разработчиков Fedora Linux объявлено о возобновлении подготовки сборок дистрибутива, оптимизированных для устройств Raspberry Pi. Примечательно, что не обошлось без конфуза для русскоязычных пользователей дистрибутива, вместо ранее используемого имени Raspberry Pi Fedora Remix проект теперь развивается под новым именем — Pidora (официальный сайт — pidora.ca).

Сборка основана на новом репозитории Fedora для архитектуры ARMv6 с поддержкой «hard float», который позволит добиться оптимальной производительности за счёт сборки с учётом особенностей Raspberry Pi.

Opennet.ru

Смешное из комментариев к статье:

Ещё и домен .ca — pidora.ca. Ужасно.

сайт с одноименным названием проекта обязан быть в домене .su!

Нужно было в доменной зоне Азербайджана регистрировать...

«В Pidor-е обнаружен backdoor». «В Pidor-е обнаружены новые дыры, необходимо срочно наложить заплатки чтобы избежать проникновения».

Тут же представил, как будучи в общественном транспорте, говорить кому-то это название и испытывать неловким момент ловя взгляды окружающих, делаеких от той темы. Главное не забыть про ударение на «О» :-|

Они в гуглоплюсе объявили День Pidora.

«Скачайте на сайте pidora.ca, дистрибутив pidora» — отличный слоган…

Но и это еще не все! «Hosting courtesy of Bluehost» — они там все упоролись))

Интересно, а как будет называться порт Amarok для Пидоры?


Логотип Online Compiler

Открыл сегодня для себя такую штуку, как онлайн-компиляторы. Вот этот вот - поддерживает компиляцию кода pascal, C++, Fortran, Java и Basic. Просто вставляете код в окошко - нажимете Compile и забираете exe-шник под Windows или исполняемый бинарник под Linux.

Может кому-то пригодится.

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


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

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


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

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