четверг, 28 января 2016 г.

Легкий изврат: нерекомендованная бленда

JJC LH-60

С zoom-объективами есть одна неприятность — бленда для них рассчитывается на минимальное ФР, соответственно, для максимального оставляет желать лучшего. К счастью у моего китового объектива 18–55mm1 есть «старший брат» 55–250mm2 с тем же диаметром. Раз его минимальное ФР равно моему максимальному, бленда, рекомендованная к нему, должна подойти для фотографий на полном зуме, как минимум.

Конечно, непосредственно рекомендованную к нему фирменную я покупать не стал, а взял аналог — JJC LH-60 (LH-60C, соответствующую 18mm, тоже прикупил), на фото она и есть.

В результате эксперимента выяснилось, что использовать ее можно не только на 55mm, но на существенно меньших ФР: очевидные затемнения в уголках появляются только на 27mm примерно. Надо полагать, в случае полнокадровой камеры они бы появились раньше, но бленда-то рекомендуется для объективов с байонетом EF-S...

Под катом примеры, ни одно изображение не кадрировано.

среда, 27 января 2016 г.

Метапрограммирование в Ruby: разбор примера

Оригинал этой статьи опубликован в журнале «Системный администратор» №12 (145) за декабрь 2014.

Добавление собственных абстракций в объектную модель — это просто. И интересно.

... ... ...

Авторы книги «Programming Ruby: The Pragmatic Programmers' Guide» называют метапрограммированием расширение и изменение абстракций языка (тогда как собственно программирование пользуется теми, что есть). Конечно, можно поспорить о том, что считать такой абстракцией, а что нет, однако нельзя не заметить, что в современных динамических языках, таких как Ruby или, например, Python, легко делаются некоторые вещи, которые в классических языках находились именно на языковом уровне и жестко определялись компилятором. Тут можно вспомнить, для примера, декораторы, о которых я писал в сентябре прошлого года1. И сейчас мы рассмотрим нечто подобное. В процессе я буду делать обобщающие отступления, переходя от частного примера к общим принципам программирования в Ruby.

вторник, 26 января 2016 г.

exiftool — раскидываем raw-файлы по дате

Оказывается, сделать это не просто, а очень просто, достаточно однострочника:

exiftool -r \
  '-FileName</mnt/data/iws/media/pictures/${FileType}/${DateTimeOriginal}${SubsecTimeOriginal}_${FileIndex}%-c.${FileType}' \
  -d '%Y/%m/%d/%Y%m%d_%H%M%S' -ext CR2 .

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

Дополнительным примером — то же самое для JPEG (используется, если имеет смысл бэкапить обработанные):

exiftool -r \
  '-FileName</mnt/data/iws/media/pictures/${FileType}/${DateTimeOriginal}-${ImageSize}%-c.${FileTypeExtension}' \
  -d '%Y/%m/%d/%Hh%Mm%Ss' -ext JPG .

четверг, 14 января 2016 г.

Обновление гема wflt

Что такое wflt см. в посте почти годичной давности «Четыре простеньких гема». Изменения касаются многострочных предупреждений, которые теперь также корректно подавляются. Раньше фильтровалась только первая строчка.