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

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


В разделах технологии , наука и общество
Андрей Баксаляр  :: 26 июн 2016, в 13:32

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

Сим играет в шахматы со смертью

Так к чему это я все? Жду не дождусь, когда нейронки доберутся до «симуляторов жизни», например, до Sims! Конечно, перед этим в Sims было бы неплохо добавить взятки, несовершенство законов, коррупцию, семейные кланы, религии и секты, человеческую глупость, отмывание денег, воровство, фальшивые диссертации и прочие документы, доработать такую составляющую, как понты, добавить проституцию и сутенерство, возможность собирать компромат и продавать/принимать наркоту, а также надо бы увеличить цену добычи новых знаний (там все слишком уж легко сделано — потусовался у книжного шкафчика, и поднял скилл за вечер). Чтобы больше приблизить идеализированный мир к настоящему. Ну, к счастью, такие немаловажные факторы, как неугомонная социализация и неуемное спаривание уже есть.

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


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


В разделе происшествия
Андрей Баксаляр  :: 4 мар 2016, в 17:54

Отличная история из мира систем безопасности, я считаю. Один из пользователей видеохостинга Vimeo, публикующий на своем канале видео про «аналоговый взлом», выложил ролик, в котором он вскрывает бронированный стальной сейф со сканером отпечатков пальцев — GunVault GVB1000 — при помощи обычной канцелярской скрепки.

GunVault GVB1000

Несмотря на то, что сейф выполнен из прочных материалов, оснащен электронным замком с круто выглядящим датчиком, предназначен для хранения потенциально опасного оружия, и стоит 400 долларов уже 340 $, производители зачем-то оставили на боковине перфорацию («пищалка» или вентиляция?) — отверстия рядом с замком, в которые можно вставить кусок правильно изогнутой проволоки или скрепку, и поддеть язычок запирающего механизма. При этом владелец никогда не узнает, что кто-то побывал в сейфе, ведь взломщик не оставит никаких следов взлома.


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


Случается иногда такая необходимость, выдернуть все нужные ссылки со страницы в браузере, а ссылок тысяча и вручную это делать, мягко говоря, нерационально. Задачу легко автоматизировать, используя возможности JavaScript и метода map. Как это работает:

  1. Жмем F12, чтобы увидеть консоль разработчика в современном браузере (Chrome / Firefox). Или запускаем эту самую консоль другим методом, который нравится лично вам.

  2. Затем пишем в консоли следующую команду:

<Array.prototype.slice.call(document.querySelectorAll('a')).map(function (el) { return el.href })

Если на странице подключен JQuery, то команда упрощается до:

$.map($('a'), function (el) { return el.href })

Жирным выделено место, куда мы вставляем необходимый селектор. Например, в моем случае с выдиранием большого количества ссылок на ютубе, селектор был таким: .yt-lockup-title > a (выбор всех непосредственных дочерних элементов h3 с классом yt-lockup-title). Вот что получается в итоге:

Получение всех ссылок со страницы

Для более удобного вывода можно дампить все прямо в консоль, а не возвращать элементы массивом:

Array.prototype.slice.call(document.querySelectorAll('.yt-lockup-title > a')).map(function (el) { console.log(el.href) } )

Потом удобно закинуть этот список в текстовый файл и скормить какому-нибудь консольному youtube-dl командой:

youtube-dl --batch-file='links.txt'

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


Довольно интересную и гениально простую идею для запоминания сложнейших паролей предлагает стартап qwertycards.com. Суть идеи в том, чтобы всегда держать при себе одну секретную карточку или, скажем, ее фотографию в мобильнике и генерировать и запоминать очень сложные и разные пароли для сайтов, никуда их не записывая.

Карточка для упрощенного запоминания паролей

На карточке нарисована простая QWERTY-клавиатура, рядом с каждой буквой на которой имеются другие парные буквы и символы. По сути, это — главный ключ к идее. А сценарий применения может быть таким:

  1. Для создания нового пароля вы берете префикс — началом вашего нового шифра будет надпись на «пробеле» карточки. В случае с приведенной выше картинкой, это sh(/J3Hq.
  2. Далее вы добавляете свое секретное слово, пусть это будет MURGAB ;) — каждую букву этого слова вы кодируете в соответствии с виртуальной клавиатурой. То есть, MURGAB превращается в u92s. — эту белиберду добавляем к *sh(/J3Hq, получается — sh(/J3Hqu92s.***.
  3. Затем добавляем к нашему итак уже непростому паролю окончание — название сайта. Кодируем его точно так же, в соответствии с виртуальной клавиатурой. Например, сайт для которого создаем пароль — vk.com, который через «аналоговое кодирование» превращается в M1.mqu — этим и завершаем созданный пароль: sh(/J3Hqu92s.*M1.mqu.

sh(/J3Hqu92s.*M1.mqu — готовый пароль для ВКонтактика

Расшифровать такой пароль при наличии карточки или ее фотографии на смартфоне, будет очень даже просто — вбиваете код с карточки, вбиваете свое секретное слово, а затем название сайта, на который хотите зайти. При этом все, что нужно помнить для захода на ЛЮБОЙ сайт с суперсложным паролем — это ваш простейший секретный код.

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


Информация о любопытном, но опасном эксперименте из Куйбышева:

В Куйбышевском районе Ростовской области в частном гараже произошел пожар, в результате которого погиб мужчина. Возгорание произошло при попытке жителя хутора Крюково разобрать боеприпас времен Великой Отечественной войны.

Распиловка гранаты

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

Имейте ввиду, если будете разбирать гранату в гараже, лучше используйте не болгарку а ножовку по металлу.


В разделах юмор , космос и наука
Андрей Баксаляр  :: 6 сен 2014, в 01:18

Самоубийство в космосе

Если же выстрелить из пистолета… в сторону горизонта, стоя на Луне, то теоретически вы можете выстрелить себе в спину.

...пишет «Популярная Механика», ссылаясь на LifeScience.

Хотя, согласно той же «Механике», есть иные опции оригинального космического суицида. Скажем:

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

Если прыгнуть в вулкан, высокая плотность лавы и ее низкая вязкость не дадут вам утонуть. Они оставят вас плавать на поверхности, перед тем вы сгорите.

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

Короче, имейте ввиду, если надумаете.


В разделах юмор , животные и мир
Андрей Баксаляр  :: 29 июн 2014, в 20:33

Ничего необычного.

Просто коза. Просто на мужике, который просто на велосипеде.

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


В разделах мобильные гаджеты и общество
Андрей Баксаляр  :: 12 июн 2014, в 04:13

Вообще, классная идея. Надо в обязательном порядке такое в каждую парикмахерскую!

Парикмахерская инновация, прошедшая мимо


В разделе софт
Андрей Баксаляр  :: 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 не полезет проверять свои обновления в Сеть и не будет потреблять драгоценные мегабайты. В некоторых странах воды уже достаточно, а вот «капля трафика — крупица золота»! Правда, если все же есть возможность обновляться, категорически не рекомендуется функцию автоапдейта отключать — в устаревшем дырявом софте радости мало на самом деле, кошернее всегда иметь свежие версии.


Идея просто гениальная.

Самодельный домашний кинотеатр


В разделе кулинария
Андрей Баксаляр  :: 7 июл 2013, в 13:59

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

Чеснок

Особенно мучительно чистить большое количество чеснока — иногда это занятие вообще отбивает желание что-то готовить. А как же без чеснока? Мясо, рыба, птица, салаты — без чеснока становятся постными и неинтересными. Хотя тут уж как у кого. Но не будем уходить от темы. Вчера обнаружил, что есть способы упрощенной чистки как чесночных зубчиков, так и целых чесночных головок! Опробовал сам, трюк прекрасно работает.

Бьем по чесноку

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

Разбиваем чесночную головку

Чесночная головка легко разделилась на зубья

Головка без приложения особых усилий рассыпается на зубья.

Далее складываем зубчики с шелухой в большую металлическую чашу. Закрываем эту чашу сверху точно такой же чашей (как куполом). Трясем что есть сил образовавшуюся конструкцию на протяжении 10-30 секунд. Вуаля, чеснок почищен.

То же самое в форме видео:

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

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


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

Популярное


Путешествия Макса Майорова во времени 21 фев, в 00:53

Cool-ибин 19 фев, в 09:00

Неоновый Китай 8 фев, в 06:32

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

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

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


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

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