Комментирование в markdown и однострочниках bash файлов

2015-10-21

LUKE: Is Perl better than Python?
YODA: No… no… no. Quicker, easier, more seductive.
LUKE: But how will I know why Python is better than Perl?
YODA: You will know. When your code you try to read six months from now.

(c)

Хороший код (и хороший текст) всегда должен быть откомментирован. В последнее время я много пишу на markdown’не, который по ходу дела обрабатывается pandoc’ом и sed’ом, причем все это сведено в один makefile, который со временем разрастается до довольно больших размеров. Читать далее…


FBReader — чтение и допиливание

2015-07-05

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

Неудобств у этой софтины пока всплыло два.

Первое — она категорически не хочет открывать .fb2.zip файлы, считая их прерогативой CoolReader. К счастью, есть человек, который не поленился сделать костыль к этому, что сильно облегчило работу с системой.

Второе — скачивая книги из флибусты по OPDS (или вообще из любой сетевой библиотеки), она складывает их в отдельные каталоги не называя по имени-названию, а просто нумеруя.

Скажем Кутузов Лидии Ивченко выкачивается не как Ivchenko_Zhizn-zamechatelnyh-lyudey_1372_Kutuzov.335158.fb2.zip, а как целое дерево вложенных папок: <родная папка fbreader'а>/flibusta.net/b/335158.zip, что ужасно неудобно.

Моя система хранения книг опирается в первую очередь на файловую систему — осмысленные названия файлов и иерархия папок по которым эти файлы тасуются. Ничего более удобного пока нет и, скорее всего, не будет придумано в ближайшее время. Иерархия “папка-файл” выглядит скучновато в отличие от всяческих all-inside хранилищ типа Calibre или той же встроенной библиотеки FBReader, зато надежна, минимальна по занимаемому месту, вообще не требует стороннего софта для упорядочивания, хорошо упорядочивается дельта-итерациями (тема отдельного разговора) и — как я начинаю понимать — нейрологически обоснованна (очень рекомендую такую книгу, как Daniel J. Levitin “The Organized Mind Thinking Straight in the Age of Information Overload” — написано хорошо, не заумно, без утомляющего выпендрежа и по делу).

Поэтому 335158.zip меня не устраивал категорически, хотя сам OPDS-доступ к сетевой библиотеке (т.е. скачивание книги через FBReader) оказался вполне удобным. Первым делом я попробовал переименовывать файлы вручную и раскладывать их по своим папкам — меня хватило файла на два.

К счастью, быстро выяснилось, что внутри у скачанного 335158.zip лежит вполне приличный по названию Ivchenko_Zhizn-zamechatelnyh-lyudey_1372_Kutuzov.335158.fb2 — дальше дело заключалось в написании простенького скрипта:

#!/bin/bash
# основная идея избавиться от закачки безымянных файлов с флибусты

# находит и раззиповывает в корень файлы в каталогах
find . -type f -name "*.fb2.zip" -exec unzip {} \;

Простенький однострочник на самом деле — find спускается вниз по дереву папок, находит файлы (-type f), которые заканчиваются на .fb2.zip (-name "*.fb2.zip") и запускает unzip, который над ними операцию распаковки (-exec unzip {} \; — вместо {} подставляется имя найденного файла). Разумеется, чтобы это работало, в системе должен быть установлен unzip (у меня он стоит по умолчанию — если его нет надо сделать что-нибудь типа sudo apt-get install unzip)

Этот файл (unzipper.sh) был положен в корень (то, что выше названо <родная папка fbreader'а>) и — дррррр! — тридцать файлов, которые к тому времени скопились в дереве папок, оказались найдены, раззипованы и аккуратно сложены в папке со скриптом.

На этом можно было бы остановиться — FBReader в принципе читает и раззипованный .fb2, но почему бы не упаковать все назад в зип? Для этого нужен примерно такой однострочник:

find . -type f -name '*.fb2' -exec zip '{}'.zip '{}' \;

Находим файлы, которые оканчиваются на .fb2 и зипуем их. -exec zip '{}'.zip '{}' \; выполнит операцию zip (он тоже должен быть в системе — sudo apt-get install zip) и подставит в нее найденные название файла ({}) и имя новосоздаваемого архива ({}.zip — старое имя + расширение .zip).

Итого:

#!/bin/bash
# основная идея избавиться от закачки безымянных файлов с флибусты

# находит и раззиповывает в корень файлы в каталогах
find . -type f -name "*.fb2.zip" -exec unzip {} \;

# зипует их обратно
find . -type f -name '*.fb2' -print -exec zip '{}'.zip '{}' \;

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


Cleanup is automatic

2015-06-24

Еще немного о информационной перегрузке и о работе с информацией. Больше двух лет назад (в ноябре 2012-го) я натолкнулся на совет — делать большую часть временных вещей в папке /tmp. Эта папка доступна отовсюду, к ней удобно доступаться из командной строки и — самое главное — она очищается при перезагрузке машины. Я последовал совету и настроил /tmp, как дефолтную папку для загрузки файлов из firefox. Сначала меня одолевали сомнения — как это так, компьютер будет удалять мои загрузки без моего ведома, кто в конце концов тут хозяин — человек или машина? И так далее и тому подобное. После первых пары дней практики я изменил свое мнение.

Оказалось это — не только чертовски удобно, но и меняет подход к проблеме. До этого мне приходилось ежемесячно расчищать завалы в папке ~/Downloads — времязатратное, выматывающее занятие. Если кто-то расчищал подобный хлам — он меня поймет. Теперь же приходилось принимать решение сразу — если загруженный файл не скопировать куда-нибудь еще — при перезагрузке система его сотрет. Когда начинаешь копировать файл — решение о том, куда его определить приходит само и файл ложится не в папку «посмотреть_позже_когда_нибудь_в_долгом_ящике_с_котом_за_хвост», а строго на отведенное ему место. Кроме того, как оказалось, в 90% случаев файл загружается не для того, чтобы его куда-то сохранить, а для того, чтобы его просмотреть или прослушать. Если раньше при разборе таких файлов у меня срабатывал «Внутренний хомяк» («может стоит оставить его на всякий случай, а вдруг эта накладная еще пригодится… в будущем… моим потомкам»), то в этом случае проще предоставить файл самому себе и очищающей перезагрузке.

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

Max Tabs, который я себе поставил, работает аналогичным образом. Лимит на количество открытых вкладок заставляет сразу принимать решение — чтобы открыть одиннадцатую вкладку, какую-то из десяти нужно закрыть. Просто закрыть? Добавить в закладки? Сохранить для чтения? Словом тот же подход — «решай или закрывай». Дополнительным бонусом — быстрая работа браузера.
Вот еще бы было расширение, которое бы очищало «неподшитые закладки» скажем раз в месяц — было бы совсем здорово.


Max Tabs и концентрация

2015-06-23

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

Об этом всем я подумывал давно — сейчас после статьи Почему мы больше не можем читать? решил заняться информационной гигиеной вплотную. После этой же статьи выкачал себе «The Organized Mind» Дэниэла Левитина. Штудирую. Плюс к этому (как-то оно все сходится, когда начинаешь изучать вопрос) — хороший обзор Никласа Карра у Москалюка (хотя с «разоблачениями» Талеба и Гладуэлла я не согласен :) и — заметка на австралийском Лайфхакере зачем ограничивать количество вкладок.

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


2015-02-03

(ворчливо) Дуров верни стену Яндекс-читалка rss переехала на Яндекс новости. Ну вы поняли? Интерфейс плиткой, что-то не работает, что-то глючит — пользоваться неудобно, но выглядит вебдванольно. Вот не знаю. У меня одного ощущение, что чем дальше, тем больше упарываются софтописатели становится красивого, но абсолютно неудобного софта — или это объективная реальность? Даже в дебиан умудрились запилить совершенно жуткого родственника Ктулху, который спустя некоторое время таки зохаваит. Пойду настрою newsbeuter в облаке :)


Not so open source

2015-01-31

Отключение служб гугла в Крыму — наглядный пример того, почему нельзя полагаться на корпорации, даже если они обещают бесплатный сыр, что не будут сильно evil. Программное обеспечение должно быть не просто бесплатным, но и свободным — не как пиво, а как GNU GPL. Иначе, какой-нибудь дяденька в лице Главменеджера Корпорации Добра решит в один прекрасный день порулить и лишит вас рабочего инструмента.

Поэтому — Firefox (реакция на скандал со Сноуденом, кстати, была очень характерной), поэтому Libre Office и Linux. И поэтому — по возможности сободная прошивка на андроидофон, плюс использование софта в основном из свободного репозитария F-Droid — там есть практически все, что необходимо для жизни (во всяком случае мне) под андроидом.


лекарство одно — открытые форматы хранения и open source софт. Это требует некоторого ума и некоторого приложения сил (трудности обычно сильно преувеличены), зато потом окупается сторицей — можно быть уверенным, что после «часа $» мои данные не превратятся в труху, а софт — в тыкву.

(c)


Openshot, ImageMagick и красноглазая магия…

2014-11-30

На днях осваивал программу для нелинейного видеомонтажа под Debian GNU Linux. Требовалось смонтировать простенькое слайд-шоу плюс несколько видеофайлов.

Из всех программ выбор пал на OpenShot — как лучший компромисс и аналог Movie Maker’а фирмы M$.

Все хорошо, однако на over 100 фотографиях OpenShot начал тормозить. Непродолжительный поиск подсказал, что проблемой может быть то, что все эти фотки грузятся в трек as is (а там фотографии на десяток мегабайт каждая) и OpenShot’у приходится каждый раз прокручивать все это богатство в памяти.

В теории фотографии можно уменьшить чем-нибудь типа ImageMagick — причем сделать это «одним чохом» в командной строке, но как? То есть я помню что в «Магике» есть утилита convert, но вопрос в том в какой размер конвертировать файлы и как быть с тем, что фотографии в моей подборке разной ориентации?

Ответ нашелся достаточно быстро. Где-то на ЛОРе на аналогичный вопрос советовали использовать связку bash+ffmpeg+imagemagick (что мне не подходило категорически — поскольку подборка требовала еще некоторой подгонки в ручном режиме). После чего я нашел ссылку на скрипт конверсии. Сам скрипт не понадобился — я извлек из него следующие строки:

RESOLUTION=1920x1080
mogrify -resize $RESOLUTION *.JPG

И тупо вбил их в комстроку в моей директории. mogrify — еще одна утилита пакета ImageMagick и она прекрасно справилась с конверсией. Фотографии стали весить порядка пары сотен килобайт, OpenShot перестал тормозить, а клип получился хорошего качества

Разрешение можно было задать и вот так:

mogrify -resize "1920x1080" *.JPG

И скорее всего уменьшить еще. Но это было часа три ночи и для вникания в детали у меня не было настроения.


%d такие блоггеры, как: