1 апреля 2013 г.

Мои впечатления о последнем CodeFest

Организаторы и докладчики были на высоте, примерно на уровне прошлой конференции. В этот раз впервые были англоязычные докладчики, подробнее ниже. Как всегда, было много стендов разных компаний, ребята из JetBrains даже соблазнили меня попробовать PyCharm, но после пяти минут я плюнул и вернулся к старому доброму Vim — очень уж давно я с ним работаю, всё настроено под себя, и с клавиатурой работать гораздо быстрее, чем с мышкой.

Теперь немного о запомнившихся докладах.

День первый

Аксель Раушмайер выступил с докладом о будущем JavaScript — ECMAScript 6. Обещается много нового и полезного, большую часть из чего можно обеспечить уже сейчас в ECMAScript 5 с помощью CoffeeScript, underscore и CommonJS.

Майкл Палотас из eBay в Цюрихе (привет аборигенам!) рассказал о QA в его компании, как их развивают, холят и лелеют, ну хоть прям щас в eBay, менять специализацию.

Окончание докладов я пропустил, нужно было торопиться на ДР дочери. День вышел насыщенным.

День второй

Харизматичный Денис Шергин из томской компании Unigine заставил испытать гордость за отечественных программистов — команда из 25 человек успешно конкурирует с крупнейшими конторами из сотен и тысяч людей в области 3D-движков.

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

Вадим Макеев из Opera рассказал, почему же они бросили свой браузерный движок и переключились на Webkit. Вкратце — из-за проблем совместимости сайтов, игнорировании Оперы западными программистами и т.п. Теперь Опера тоже будет вносить патчи в код Webkit.

Никита Прокопов зажигательно поведал о Clojure, сразу захотелось попробовать ClojureScript в деле.

Денис Бесков рассказал о том, как создавать новый продукт. Доклад был интересным, но многое (если не всё) из этого освещено в знаменитой книжке 37signals «Getting Real».

И в заключение Глеб Кудрявцев весело и живо сделал доклад о том, как PM найти общий язык с программистами к взаимному удовлетворению.

Мораль

В очередной раз убедился, что не так важна тема доклада, как личность докладчика. Нужно тренироваться делать доклады, снимать себя на видео, смотреть, анализировать и учиться.

CodeFest очень вдохновляет. Я понял, как соскучился по работе с людьми offline, в одном офисе. Всё-таки два года удалёнки дают о себе знать. Погрел самооценку осознанием своей востребованности для многих компаний, в том числе интересных мне. Нужно больше общаться. :)

11 ноября 2012 г.

Типографика в Kindle

Status quo

Давным-давно я работал верстальщиком, а последние 10 лет — программистом, но любовь к красиво оформленному тексту осталась. Ещё я заядлый библиофил, львиную долю книг поглощаю в электронном виде, последний год с помощью Amazon Kindle.

Kindle, к сожалению, не поддерживает переноса текста по слогам; при этом выравнивание у него не левое и даже не полное, а «недополное» (обратите внимание на предпоследнюю строчку первого абзаца):

«Недополное» выравнивание

Слева

Бесплатные или платные книги, скаченные с самого Amazon, можно привести к левому выравниванию. Правда, способ этот работает не для всех книг, а только для тех, где явно не указывается выравнивание текста. Для этого нужно закрыть текущую книгу, подключить Kindle через USB к компьютеру и отредактировать там скрытый файл system/com.amazon.ebook.booklet.reader/reader.pref, добавив строчку ALLOW_JUSTIFICATION_CHANGE=true. После чего файл сохраняем, книжку отключаем и перезагружаем её. Для этого нужно зайти в меню Settings, а там уже выбираем меню Restart. Вуаля! — появился новый элемент меню «Justification»:

Меню «Justification»

Этот финт ушами, к сожалению, не работает с книжками, купленными в Литрес или скаченными в русскоязычных пиратских библиотеках — там выравнивание в файлах mobi указано явно. Нам поможет программа для конвертации форматов электронных книг Calibre. Она содержит набор программ для командной строки (для Mac OS их нужно дополнительно установить).

Скачиваем/покупаем нужную книгу в формате FB2 и обрабатываем с помощью простой команды:

ebook-convert book.fb2 book.mobi --change-justification left
Выравнивание слева

PDF

Другой вариант — преобразовывать FB2 в PDF с помощью кросс-платформенного проекта на Java fb2pdf. Можно достаточно гибко настроить форматировать, текст будет поддерживать буквицы, переносы, висячие строки и прочие вкусности.

Минусы:

  • размер и тип шрифта нельзя менять после создания книги;
  • размер файла PDF в несколько раз больше аналогичного mobi;
  • аннотации не работают. Впрочем, поиск по файлу и просмотр слова в словаре доступны.

«Мягкие» переносы

В Kindle 3 (aka Keyboard) и новее в последних версиях прошивки появилась поддержка нового формата K8. Это значит, что доступны многие теги HTML5 и атрибуты CSS3, вдобавок к ним и мягкие переносы. Они предназначены для разбивки слов по слогам и становится видимы только на правой границе строки — программа использует их для переноса текста по слогам, т.е. то, что нам и нужно.

Минус: размер подготовленного файла незначительно больше «сырого»;

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

Для создания таких книг я создал небольшую программку под *nix, расставляющую переносы в FB2-файле. Для конвертирования в AZW3 (это формат для Kindle, который собственно и поддерживает K8), можно использовать в качестве образца прилагаемый скрипт.

Переносы

Для счастливых обладателей Windows есть более удобный вариант.

1 апреля 2012 г.

CodeFest

Очень долго ничего не писал, а тут такой повод появился — CodeFest! Вообще это вторая IT-конференция в моём ленивом опыте, она же крупнейшая. Более 1300 человек, три зала, куча интересных людей, энергия так и пышет. Организаторы на высоте, единственный минус — душно. Но это, наверное, больше проблема помещения.

В первый день на web-секции больше всего запомнился полный харизмы и оптимизма доклад Ивана Евтуховича из «Evil Martians» «Как мы делали Групон». У такого человека я бы хотел работать. Автор — явно многосторонняя личность, первый дан по айкидо среди прочего.

Ещё отжёг весёлый матерщинник Андрей Аксёнов из Sphinx. Но у него я бы работать не хотел. :)

Во второй день в секции PM + HR блеснули Александр Орлов и Вячеслав Панкратов из Стратоплана. Тема доклада — конструктивная обратная связь в менеджменте — мне была не очень близка, но мастерство докладчиков позволяет красиво донести любую инфу, наверное.

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

25 апреля 2011 г.

Соглашение о вызовах

Интересная статья о всевозможных вариантах вызова и использования функций: сопрограммы (coroutines), рекурсия, хвостовая рекурсия (tail call optimization), каррирование и многое другое.

http://jjinux.blogspot.com/2011/04/call-me-crazy-calling-conventions.html

14 марта 2011 г.

Делимся Питоном с миром

Когда питоновские скрипты приобретают какую-то готовую форму, и ими хочется поделиться с другими, возникает вопрос: как это правильно и красиво сделать?

Стандартом для распространения программ на Python является Python Package Index, своего рода центральный Python-репозиторий. О процессе публикации много написано, покажу, как это делается, на своём примере.

7 марта 2011 г.

Реанимация данных

Жена с дочкой используют внешний USB-винт для хранения видео и всего такого. На днях прикупил новый, стал копировать данные со старого, и — бац! — I/O error! Битые сектора, они же бэд-блоки.

В итоге не удалось скопировать 4 видеофайла. Тут на помощь приходит старая добрая утилитка ddrescue — при ошибке ввода-вывода продолжает копировать посекторно, пропуская плохие участки, в итоге удаётся бóльшую часть данных вытащить; позволяет копировать как целое устройство, так и отдельный файл. Видео спасти получилось, благо небольшая доля мусора внутри файла не мешает его воспроизводить.

К сожалению, ddrescue не позволяет копировать целые директории рекурсивно. Тогда я написал простой скрипт на Python, rddr (Recursive DDRescue), копирующий каталог целиком с помощью того же ddrescue.

Но этот эпизод с винтом меня смутил — ведь есть же SMART, почему Ubuntu мне не сказал о непригодном состоянии диска? Оказалось, что состояние его "хорошее", но есть несколько плохих секторов. Есть у SMART такой атрибут, показывающий количество секторов, ожидающих замены из специальной дисковой зоны "хороших" секторов, причём замена происходит при попытке записи, а не чтения. Теперь на помощь приходит программа badblocks — она позволяет прогонять тесты чтения/записи по всему устройству. Тесты записи на винт заняли около одиннадцати часов, данные при этом затёрлись. 19 секторов из 20 восстановились из резервной области.

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

P.S. Прекрасное руководство для восстановления данных с помощью Linux можно здесь почитать.

4 марта 2011 г.

Скоро выйдет Django 1.3

3 марта вышел кандидат в релизы Django 1.3. Я не вытерпел и полюбовался на внушительный список изменений будущей версии.