Набор наблюдений, которые я вынес из второй поездки.
1. Чехол для сноуборда решает. Чем он больше, тем лучше. В большой чехол, помимо борды, можно упрятать ботинки, штаны, перчатки, наколенники, черепаху. Жаль только каска не влезает, но её можно везти на голове, как и куртку.
Пришлось несколько часов ехать в поезде рядом с ноющими детьми, сосредоточиться не было никакой возможности, но и тупо пулять злоптиц быстро надоело. На глаза попалась давным-давно скаченный через совершенно уебанскую систему рассылки сабж. Сгруппированный в несколько категорий набор постов и камментов из блога/форума. Специально скачивать ради откровений нет смысла, хотя несколько очевидных, но интересных мыслей есть.
Когда-то давным давно, читал баш и меня дичайше прибил комикс, нарисованный Neod-ом (он там еще несколько рисовал). Полез на сайт автора, там оказалось целое коммьюнити начинающих художников.
Neod рисовал две истории: Angels of Starlights - иллюстрация к диску музыкальной группы и Speedmaster - для себя. Обе так и не были закончены, оборвавшись на самом интересном месте - форум тихо канул в лету.
У меня синдром утенка: видимо, с тех пор у меня манга ассоциируются исключительно с будущим, хайтеком, мегакорпорациями, киберпанком. Матрица, Deus Ex, Джонни Мнемоник - в этом духе. Хотя некоторые знакомые прибиваются по Наруто, читая очередную шестисотую главу.
Недавно наткнулся на Digimortal. Две главы, дух киберпанка, рисовка - всё есть. Но что-то не то - возможно первый контакт слишком задрал планку качества. Решил упороться и накачал себе несколько тайтлов. Буду читать, когда на серьезное чтение не будет хватать мозга.
Поздняя ночь, читаю я значит Голодного и тут мне попадается пост про то, какое ему офигенное устройство подарили. Тут я понимаю, что мне вставать через несколько часов и весь день ходить как зомби. Заказать его можно только с амазона, а с ним у меня давняя нелюбовь - но тут они, внезапно, согласились заслать девайс в Россию.
Убунта (хотя, пожалуй,
это свойственно почти всем дистрибутивам) похожа на лоскутное одеяло,
состоит из кучи софта, разрабатываемого разными людьми. Стандарты?
ЛолШТО? Есть, конечно, FHS,
но всем плевать. Без интернетов под рукой восстановить систему после
нетривиального падения не реально. Куча файлов со своим уникальным
именованием, куча ключиков и параметров.
Самый
эпичный момент был при обновлении до 12.04: из-за проблем с
оборудованием, Космонавты выпилили режим гибернации из-за проблем с
некоторыми версиями материнок. Включается он эпичнейше: не
переключателем (как сделали бы разумные люди), не раскомментированием
строк в каком-нибудь конфиге (как сделали бы разумные, но ленивые люди),
а воссозданием конфига. Когда я это прочитал, единственная мысль была: НО? КАК? БЛЯДЬ? Я должен был бы его воспроизвести без интернета???
Хотя есть и положительные моменты: нет черного ящика и магии, система состоит из отдельных компонентов, которые кое-как слеплены во что-то цельное сумеречными гениями,
компоненты можно вынимать и рассматривать, благо половина - скрипты на
баше и петоне, а для второй половины есть сырцы (хотя тут уже надо
сильно хотеть покопаться), можно вынимать и вставлять другие, иногда
шестеренки заедают и хрустят, потом приходится перебирать весь движок. Самое поразительное здесь живучесть - даже деградировав или лишившись многих функций система продолжает работать.
При разработке иногда часто хочется иметь под рукой доменную модель со всеми сервисами и доступом к актуальной базе, чтобы можно было нагенерить нужных данных и положить их в базу, замерить производительность выборок, простестировать работоспособность отдельного куска кода. Это особенно удобно, если контейнер долго запускается. Впервые я это увидел в Django: dbshell, что весьма удобно. Мы имитировали этот шелл, положив запускабельный класс в папку с тестами, который инициализировал доменную модель и необходимый набор сервисов.
POC веб-консоли
Но хочется большего. В серверных приложения за время работы может накопиться невоспроизводимое состояние, либо в целом приложение начинает вести себя неадекватно. Основной способ борьбы - выводить подробные логи, а потом вдумчиво курить стектрейсы, строя гипотезы, как исключение могло возникнуть. А потом перезапустить приложение. Но что если доступаться к живому приложению? Возможности по съему телеметрии стали бы неограниченными: нам доступно для чтения и изменения все состояние живого приложения (правда неосторожными действиями можно его легко убить).
Нужно сформировать отчет, содержащий 100к строк и фильтрацию по нескольким полям. Выборка объективно не укладывается в отведенные рамки: годовая выборка - 30 секунд. Приходится грузить данные на клиента маленькими чанками по сто записей. При этом мы столкнулись с тем, что один чанк загружается в течении 2 секунд, помножив на 1000 чанков получаем более получаса на получение отчета. Вся выборка ведется по двум таблицам в отношении One-to-Many, причем Many часть почти на 100% состоит из 1 записи, но СЦУКО могут встречаться > 1.
Сегодня увидел статью How not to talk with your kids в которой прекрасно решительно всё. Пока читал, сразу вспомнилась Talent is overrated. Цитата из статьи про шокирующие результаты: Dweck had suspected that praise could backfire, but even she was surprised by the magnitude of the effect. “Emphasizing effort gives a child a variable that they can control,” she explains. “They come to see themselves as in control of their success. Emphasizing natural intelligence takes it out of the child’s control, and it provides no good recipe for responding to a failure.”
In follow-up interviews, Dweck discovered that those who think that innate intelligence is the key to success begin to discount the importance of effort. I am smart, the kids’ reasoning goes; I don’t need to put out effort. Expending effort becomes stigmatized—it’s public proof that you can’t cut it on your natural gifts.
Repeating her experiments, Dweck found this effect of praise on performance held true for students of every socioeconomic class. It hit both boys and girls—the very brightest girls especially (they collapsed the most following failure). Even preschoolers weren’t immune to the inverse power of praise.
Очередная книга Розова из цикла про Меганезию. 7 мегабайт, 2600 страниц. Оказалось, что эта книга на самом деле состоит из пяти книг объединенных одними действующими лицами и непрерывным сюжетом. Интересными являются первая и последние две книги, а середина крайне уныла: на протяжении тысячи страниц читать как герои в стопицотый раз плавают, едят, летают, танцуют, трахаются становится крайне не интересно. Зато примерно с середины начинается рассказ про гуманитарные операции с плацдарма в Африке, подготовленного в первой книге, все это проглатывается на одном дыхании - если на первую половину книги ушло два месяца, то вторую половину, не отрываясь, проглотил за два дня.
Итог: читатель скорее всего не осилит. Тройка с минусом за дичайшую многословность. Я молчу про две книги Астарты, которые втрое больше Чужой - дропаю цикл, почитаю что-нибудь другое.
Открываю цикл постов про MQ и API. Прежде всего стоит определиться с терминологией: RMI или RPC. Method Invocation подразумевает за собой объекты и состояние, мы же будем рассматривать stateless вызовы, поэтому логичней это называть RPC. Лет пять назад Umputun рассказывал в одном из своих подкастов про то, как он спрашивал своих бойцов как бы они сделали RMI и для них это была вещь в себе, но ведь не "боги горшки обжигают".
Ехал я как-то в междугороднем автобусе, ехать было 4 часа. Так неудачно совпало, что ехать мне пришлось с простыми и чоткими парнями. И все бы ничего, но они решили послушать музончик-шансончик. Опять же, пофиг, у всех вкусы разные, но они решили его послушать на хрипяще-пердящем динамике на батарейках, очень громко, так чтобы весь автобус насладился вечными хитами. Обычно я в наушниках и мне пофиг, но тут это было особенно громко. На первое предложение сделать тише они согласились, но потом уснули и сделали максимально громко, чтобы даже во сне не расставаться с любимыми исполнителями, наверное им снились вышки, запретка, осень и воля. Рядом оказался еще один любитель послушать музыку в наушниках и мы таки смогли убедить простых парней вырубить музон.
- Ну а чо йоба, я хочу музыку слушать
- А я мы не хотим, нам не нравится твоя музыка
- У нас свободная страна, че хочу то и делаю
- Вот одень наушники и слушай
Хорошо, что эти меломаны вышли на пол пути. Вообще динамик это такой маркер, размером с маяк о том, что этого неадеквата стоит обходить за километр.
Возвращаясь к сабжу, казалось бы, что общего? А общего то, что the right to swing my fist ends where the other man's nose begins.
P.S. сюда же: такое событие можно и потерпеть чуток, терпи пожалуйста, но не вынуждай терпеть тех, кто не хочет. Даже если их меньшинство, не говоря уж про случай большинства.
Сначала ты не знаешь, что нельзя делать то-то
Потом знаешь, что нельзя делать то-то
Потом ты понимаешь, что иногда таки можно делать то-то
Ну а потом ты понимаешь, что помимо того-то существует еще шестьдесять
шесть способов добиться желаемого, и все из них практически равноправны.
Когда тебя спрашивают "как мне добиться желаемого", ты быстро
перебираешь в уме эти шестьдесять шесть способов, прикидываешь то общее,
что в них есть, вздыхаешь и говоришь: "вообще-то, главное — гармония."
На вопрос обиженных учеников: "а как ее добиться?", ты говоришь: "никогда не делайте то-то".
Бывают такие моменты инсайта, когда внезапно последний элемент паззла встал на место и все стало просто и понятно. Такие яркие впеатления надолго остаются в памяти. Наблюдаю за изучением баз данных и как раз вспомнился один из таких моментов, как это происходило у меня.
Между седьмым и восьмым классом два наших информатика написали систему тестирования на VB, вопросы же хранились в базе Access. В то время мы с другом активно увлекались программированием, собирая диски с бейсиками и коллекции OCX компонентов. Access я ковырял, даже подключался из бейсика, рассматривал Борей, понимал что есть таблицы, представления, формы, отчеты, скрипты же были магией. SQL не трогал - хватало построителя запросов.
Так вот, та самая база хранилась на Самом Главном Компе, желтом от сигаретного дыма. Комп назывался GOUROU. Мы мечтали на него попась, но шара с базой подключалась только на время тестирования либо забивания вопросов, поскольку Access был файловой базой. В один прекрасный момент, возможно на перемене между тестированием групп, мы увидели, что база доступна. Дискету с базой я нес домой прижав дрожащими руками к груди, как самую большую ценность.
Так повезло, что пароля на базе не было. Я быстро распечатал таблицы с говорящими именами test, question, answer. Распечатал аксесную ER-диаграмму. И долго пытался понять, как же они между собой связаны. Нашел вопрос, нашел варианты ответов, нашел правильный и то, чем он отличался от неправильных - булеву пометку. Увидел внешние ключи и в этот момент все стало на свои места - паззл сложился. Быстро накидал отчет с правильными ответами и отдал распечатки подружке.
Ближе к выпуску, я заметил, что со всех компов был удален Access - видимо просекли эту фишку. Проблема была в том, что на всех компах был установлен VB 6.0, с которым поставлялся DataViz, в котором можно было быстро накидать SQL запросец с ответами на нужный тест. Замуровали дверь, но оставили открытым окно.
В итоге, все же инорматики смогли перехитрить нас. Директор перед экзаменом сказал: мы тут придумали супер защиту и особо хитрожопые, не будем показывать пальцем, могут не напрягаться с утаскиванием базы вопросов. Естественно, мы опять сперли базу, но, вместо вопросов и ответов, в полях находились ссылки на RTF файлы - тысячи их. Тесты по английскому и русскому легко вмещались в текстовые поля, но физика и математика требовали формул и рисунков. Писать прогу не было времени (тем более, что все файлы весили какие-то дикие мегабайты и утащить все это дискетами не было никакой возможности). Пришлось сдавать самостоятельно.
З.Ы. Еще один момент из того же времени. Олимпиада по физике, задача, для лобового решения которой не хватит математического аппарата восьмиклассника. Это последняя задача, мы сидим и тупим. Видя, что дела плохи нам всем озвучивается подсказка (аналогия между объемом тонкостенного полого шара и объемом крышки стола). Пара человек говорит АГА!!!111, дичаеше начинает дичайше строчить и считать на калькуляторе. Остальные негодуют. Учительница по физике говорит: вы в равных условиях, поскольку слышали подсказку все, но семена понимания не взойдут без почвы знания.
Продолжая хроники. Давно хотел включить эту дисциплину в список увлечений, но меня всегда останавливал объем необходимой экипировки. И пусть говорят, что кататься можно даже в джинсах, всё же спецштаны удобнее мокрых и вставших колом джинсов и которых приходится выгребать снег. Год назад чуть было не пошел закупаться, но неясные переспективы меня остановили. В этом сезоне я понял, что хватит это терпеть и пошел закупаться.
Давно была идея визуализировать impact человека на продукт. Мощные визуализаторы типа codeswarm (активность и совместная работа) и gource (процесс работы) показывали не совсем то, что хотелось - текущее состояние. При помощи hg log -u username -p | grep "^+" | wc -l можно посчитать добавления и удаления, но опять же в динамике не увидеть. Хотелось увидеть как росла доля пришедшего человека, насколько быстро она затухала с уходом и какое наследие осталось.
Сначала я полез курить физические движки типа box2d, но какой-то он был скучный и неинтересный - хотелось получить результат за один день. Пришлось отказаться от физического моделирования и вывести данные для простой временноОй диаграммы с накоплением.
Полез курить Mercurial API, заодно накидал ссылок в вики-статью и скачал бесплатный PyCharm. На проект не тянет, поэтому сохранил в gist (derived work требует назначить лицензию GPL). Программа последовательно в каждой ревизии аннотирует текстовые файлы и считает, количество строк для каждого коммитера. Тестировал на маленьком репозитории, и не заметил нескольких улучшений. Пока работал на нашем основном - успел внести несколько правок.
Процесс запуска
1. Запускаем первый раз python participation.py - у нас появится шаблон конфига
2. Отключаем подсчет calculate=false и прописываем репозиторий repo=~/path/to/repo
3. Запускам еще раз и получаем на выходе пользователей
4. Прописываем им алиасы в разделе [Alias] - часто один пользователь попадает под разными именами, а мы не хотим портить статистику
5. Наконец включаем подсчет и запускаем
6. Ждем результат, открываем в Excel и рисуем график
Статистика
На серьезных репозиториях работает ОЧЕНЬ долго.
Проанализировано 164.564.370 строк в 1135 коммитах (только ветка default) за 8 часов на Atom N550, потребление памяти в пике 75мб, диск был SSD, но IO был неизмеримо мал.
График очень резкий, поскольку разработка зачастую ведется в отдельных ветках, а мощный рефакторинг не сохранял исходного владльца файлов март 2012 (хехе, прямо война правок).
В нашем проекте для большинства сущностей их количество не превышает сотни, а там где начинаются проблемы, хватает индексов - поэтому можно не заморачиваться. Но тут внезапно появилась дичайшая просадка производительности - клиент отваливался по таймауту на старте при попытке запросить один справочник. Быстро выяснилось, что справочник содержал 1000+ сущностей, на каждую из которых приходилось по пятку дочерних на трех уровнях (да, это всё нужно было), в итоге это давало несколько тысяч запросов при попытке сериализовать все это добро. Спойлер: в общем проблему за несколько часов удалось решить сократив количество запросов меньше чем до десяти.
Если специально не заниматься оптимизацией, то ORM зачастую приводит к проблеме, называющейся "N+1": у нас имеются две связанные сущности (не важно 1-*, *-1 или 1-1) и дочерняя загружается лениво, то, при итерации по родительским сущностям и обращении к дочерним, будет в сумме N+1 обращений к базе, чтобы инициализировать ленивые прокси. Главное препятствие для лобового решения (вытянуть всё в один запрос) - то, что из-за пустых коллекций и null-ов некоторые или все джойны должны быть внешними, а разложить после этого результат по сущностям не получится. При маппинге мы разово указываем поведение коллекции LAZY или EAGER и тонко тюнинговать не получается. Разухабистая глава в документации Hibernate про оптимизацию не очень помогает. Вообще, проблема крайне распространенная, может еще еще одно проявление impendace mismatch. Давно уже писал про ORM, ничего не поменялось, хотя уже почти не напрягает, за исключением отдельных случаев типа N+1.
У меня никогда не приживались todo-листы, GTD Аллена мгновенно вырубал меня в глубочайший сон, гугло-календарь использовался только для самых важных событий. Да и зачем все это? Все рабочие задачи остаются на работе в корпоративной JIRA - не стоит их нести домой.
8 часов работы, 2 часа на дорогу, 2 часа на еду, 8 на сон, 4 часа личного времени, за которое можно сделать что-то полезное. Можно конечно взять взаймы у других этапов, в основном - сна, но тогда будешь залипать на работе. В выходные появляется в три раза больше свободного времени и можно либо
сделать в три раза большее дело, либо в три раза мощнее бездельничать. Втрое больше дел, требующих ментальных усилий сделать не получится.
Основные дела в порядке ментальных усилий делятся на: вырубиться спать, погулять или покататься, позалипать в интернетах, посмотреть кинцо, почитать книгу или статью (зависит от книги), написать пост (который аккурат укладывается во временное окно, если не считать фоновых размышлений), написать код для поста или пуллреквеста (это уже не влезает в будни, приходится задействовать выходные), программерский транс (от 12 часов непрерывного кодинга и дальше, если это не сделать за раз, то, с большой вероятностью, уже никогда не сделать).
Занятия не декомпозируются. Занятие как транзакция: если это нельзя сделать за раз в отведенный промежуток времени, то оно надолго зависает в лимбо-беклоге, где тихо отмирает с потерей актуальности (книги являются некоторым исключением, хотя они тоже могут надолго зависать), либо пересматривается и соединяется с другими мыслями, как, например, этот пост, который я думал больше года, что позволяет в одно временное окно запустить сразу несколько дел.
Потенциальная яма. Нужно прямо-таки колоссальное волевое усилие, чтобы после выполнения первого дела, не пойти тупо спать или фтыкать в интернеты, а заставить себя начать делать что-то второе. Сюда же может попадать и работа - если сделал что-то очень мощное, что-то понял или узнал, то на это может расходоваться ментальные ресурсы и на что-то полезнее кинца уже может не хватить.
Столько хочется написать, попробовать и сделать (более того, беклог пополняется гораздо быстрее, чем опустошается), но на все не хватает энергии. Хуже всего то, что большие выходные или отпуск не приносят желаемого удовлетворения: сложно заставить себя заниматься чем-то полезным, а не зависать в местных барах.
Встает вопрос самореализации. С одной стороны я занимаюсь любимым делом, с другой стороны это ментальный онанизм - знанятие ради занятия, главный результат - знания о том как еще более круче программировать (сюда же и чтение книг, прослушивание подкастов, просмотр выступлений) и так до бесконечности. Есть еще приятные побочные результаты в виде продукта, пользователей, денег, но заапрувленный пуллреквест в опенсорс проекте мне приносит не меньшее удовлетворение, чем новый стабильный релиз продукта. Ощущаю фундаментальное противоречие, хотя и не нащупал его.
Main problem with this extension on Windows OS was external dependency Markdown and unlike on Ubuntu you cannot execute apt-get python-markdown in your shell. TortoiseHG has bundled python and you cannot simply add egg inside dist-packages. I look at source and find out, that original way for Windows user was uncomment and edit line sys.path.append("c:/python27/Lib/site-packages/markdown-2.2.0-py2.7.egg") but nothing was in documentation about it.
So I decide to rewrite this mechanism in fallback style: first we try to load markdown package and if failed, lookup using path from config (python can transparently lookup files in zip archives): try:
from markdown import Markdown except ImportError: dir = os.path.dirname(os.path.realpath(__file__))
md = ui.config("web", "markdown.egg", "Markdown-2.3.1")
ui.debug("Markdown not found search for egg in local dir %s for %s.zip\n" % (dir, md))
sys.path.append(os.path.join(dir, "%s.zip\%s" % (md, md)))
try:
from markdown import Markdown
except ImportError:
ui.error("Unable to locate markdown in path %s" % sys.path)
global Markdown
this is final version corrected by Chris Eldredge. Now you can download markdown package and put it in extension folder.
Relative paths
Rendering comparison BitBucket vs hgext.markdown
Second big improvement is relative paths in markdown files. We massively use crossreferences in the docs we store in our repository, and quickly find out some problems with relative links in which used parent (..) directory and hash (#). I fixed this and update demo page with picture and relative navigation. Unfortunately BitBucket incorrectly render this markdown because of the bug.
Preview
Also now you can navigate to preview of uncommited files with one click in menu. Not a big deal but usability improvement.
Summary
Chris already merged this patches to his repo. So if you want to see beautiful doc instead of raw markdown, even on Windows it is good time to install or update extension.
Freeswitch умеет при помощи mod_curl забирать с определенного урла диалпланы и пользователей. Это очень чуствительная информация, поэтому очень захотелось ограничить доступ к служебным урлам только с localhost.
Обновился на Saucy Salamander. С Maverick Meerkat это самый скучный релиз, обновилось 2000 пакетов, но абсолютно ничего нового. Обновили линзы, которые у меня отключены, интерфейс наутилуса, которому я предпочитаю mc.
Даже на LOR-е какой-то скучный забег без огонка, без задора. Уже какой день, а даже нет десяти страниц. Традиционно, уже который релиз подряд, ломают переключало раскладки. На космодроме выяснил, что можно забиндить переключение на ctrl+space.
Пока больше проблем не заметил. Итог: смысла обновляться нет, спокойно можно ждать Trusty Tahr LTS.
P.S. Interpid Ibex 08.10 - был моим вторым релизом убунты. Так вот Ibex подвид Tahr, или наоборот, или вообще одно и то же. Короче, Шаттлворт мог бы быть чуточку по-оригинальнее.
IDEA from JetBrains is the first choice tool for me since our team migrated to it year and a half ago and there no way back to Eclipse or NetBeans. Everyting is perfect except one flow which turns into major for experienced user: shortcuts tailored for Windows developers and on Ubuntu it turns into hell: lock screens, tty changes, crazy window movement, e.c. for almost all shortcuts. There many keymaps available in IDEA (gnome, kde), but not for Unity. The last drop was master-class from one of developer. So I decided to retrofit Ubuntu: single IDE experience for me more important then single OS experience (especially concider usage of multiple different OSes).
Following recommendations are for Ubuntu 12.04 LTS. Shortcuts and tools may change. I will update this post whenever I configure new shortcut.
CCSM
Fist of all you should install compizconfig-settings-manager, most of customizations could be done in this tool. Launch ccsm.
Find Unity menu turn Hide launcher - autohide (mouse experience), then disable Key to execute command (alt + f2) and Key to show HUD (alt) - both annoying.
Next open Grid menu and disable both Put left and Put right it will free (control+win+arrow) which we will remap later.
At General options disable Toggle window shaded (frees settings shortcut).
At Move window menu disable Initiate window move (alt+f7 or find usages).
Open Desktop wall and remap next bindings: Move within wall from control+alt+arrow to contol+super+arrow, Move with window within wall from control+alt+shift+arrow to control+shift+super+arrow. It will free source code and tab navigation.
Keyboard layout
Locate keyboard layout in system preferences. Find Miscellaneous compatibility and turn on Special keys handled in server. It will turn off virtual terminal change with control+alt+f*, you can remap it in. Frees ctrl+alt+f12.
Keyboard
In system preferences open keyboard (why we need two different dialogs). At Launchers bind launch terminal to alt+f2. At System tab bind Lock screen to super+L (oh, you can finally autoformat code now).
Terminal
Open terminal (alt+f2 now), open Keyboard shortcuts in Edit menu and turn off Enable the menu access key and Enable the menu shortcut key (no more mess with base midnight commander shortcuts). At Profile preferences turn on Unlimited scrolling.
Я искренне верю, что все люди по-умолчанию разумны, по крайней мере вокруг меня, откровенные идиоты мне встречались крайне редко, а про вредителей я только слышал рассказы. Возможно, это некое проявление эффекта Даннинга-Крюгера.
Когда я вижу какой-то вотзефак в коде, дикое решение, выбор технологии, вотэва - я уверен, что человек выбрал лучшее решение на тот момент. Даже если в итоге получился дичайший монстр, который, как памятник, служит предостережением будущим поколениям. Этому может быть три причины.
Давно уже ничего не писал, зато, наконец, собрался с силами и заслал пачку пуллреквестов, которые не давли мне покоя последние пол года. Как заапрувят - расскажу подробнее.
Виды систем
Я разделяю два вида черных ящиков (BB). BB первого рода - классическая, закрытая система. ВВ второго рода - настолько сложная система, что даже заглянув внутрь ничего не будет понятно, эдакий корабль пришельцев, функционирующий на технологиях вне нашего понимания (вспоминаются подарки Техно-Центра из вселенной Гипериона), с такими системами можно ставить эксперименты, можно сломать, но хотя бы есть надежда понять и разобраться.
Книга Розова - продолжение Депортации. Действие происходит в той же вселенной. На этот раз действие крутится вокруг наноботов: мировой фармацевтичское лобби ради спасения трилионных прибылей готово пойти на всё: терроризм, военное вторжение, религия, комиссию по этике, масс-медиа. А все потому, что наноботы чрезвычайно эффективны, но компания разработчик вынуждена их продавать только как лекарства для животных. Поскольку клонировать людей запрещено, компания решила сделать ход конем и клонировать эректусов, чтобы на них доказать эффективность лекарственных средств. На протяжении полутора тысяч страниц делается все, чтобы не допустить рождения эректусов. Первая половина скучна, но с середины повествование переключается с суррогатных матерей на военные действия и читается на одном дыхании.
В любой уважающей себя IDE есть ctrl+click-to-go, когда можно щелкнуть на переменной и перейти к объявлению, щелкнув на методе - перейти в его реализацию, щелкнув на классе перейти в это класс. Тривиальнейшая и очевиднейшая вещь воспринимается как должное, пока не сядешь за какой-нибудь Visual Studio Express, где её почему-то нет поправка: в VS есть F12 (Eclipse и NetBeans это умеют, но зачем ездить на жигулях, если есть бесплатный кадиллак). Но мы не будем рассматривать отщепенцев.
Зачастую положительные изменения не происходят, пока не преодолен некий болевой порог. Неудобство воспринимается как должное. Когда наконец происходит СУКАБЛЯЗАЕБАЛОАЖБЕСИТ начинаешь что-то думать. Наступает эдакий момент откровения.
Бывает, решаешь какую-то проблему, копаешь вглубь и находишь костыль (в том числе собственный) быстро решающий какую-то локальную проблему, но вносящую еще несколько в других местах. Каждый раз смотрю и думаю, что же мешало решить проблему, ведь это очевидно. Это как темная комната и светлая улица: видно только с одной стороны.
Отличный справочник по технологии для которой очень небогато литературы (всего 3 книги). Книга разбита на 4 части: введение в JMS вообще и конкретную реализацию ActiveMQ в частности, Конфигурация, Использование, Продвинутые фичи.
Настало время подведения итогов, год назад было не густо. Но этот год был сильно насыщеннее и прошел под знаком поездок и туризма: Германия (черт возьми, я могу общаться с иностранцами и перемещаться из точки А в точку Б расстояние в чужой стране), Поднебесные Зубья, Кия, Казыр, Омский трип на 9-е мая, поездки в Сиб уже можно не считать - планировалось, но не срослось еще с несколькими походами типа велопохода по Хакассии и Ulcamp-а. На Казыре мы весьма удачно попробовали сплав, что добавляет еще одно спортивное развлечение и необходимость новой экипировки.
Год юбилеев: 25 лет вообще и 5 лет работы в частности.
Чуть было не сменил работу и город проживания, буквально на волоске висело, но волны вероятностей схлопнулись и я остался. Тем не менее, сам процесс, принес весьма интересный опыт: полезно ходить по собеседованиям - это позволяет адекватизировать самооценку. С этим же косвенно связана цепь поступков, на которую пошел осознавая последствия, хотя, ретроспективно это оказалось бессмысленным.
Победы. Опенсорс уже не воспринимается как чудо и пуллреквесты проходят с первого раза: раз и два. Заплыв на два километра и пробежка полумарафонской дистанции. Велосипед в этом сезоне чуть-чуть не добил до 1000 км, хотя, если погода позволит таки сделаю это. 33 книги - пяток крайне полезных типа Dependency Injection, Unit Testing и Effective Java.
Самые яркие неудачи с халтурой (окончание истории). Затею со студентами тоже считаю неудачной: наиболее интересное и полезное, что можно было бы рассказать, на мой взгляд, адекватно можно воспринимать имея хотя бы год опыта - без этого все воспринимается как бессмысленный изврат.
Планы. На следующий сезон опять предстоит поездка в Омск - в этот раз всё пойдет по плану, более того есть знакомые и можно будет затусить. Очень надеюсь скататься с другом в Грецию. В том году меня задушила жаба со сноубордом, но в этот раз еще раз сражусь с ней - уж больно много народу набралось.
Очень много людей вокруг, активно используют Mercurial, но при этом ограничиваются базовыми вещами типа push/pull/commit/update да и те выполняются через tortoisehg. Я в начале августа выступал с рассказом о чрезвычайно полезных фичах, про которые, когда начал пользоваться, думаешь: как же я жил без этого раньше. Слайды оформлю в виде шпаргалки.
Небольшая книга, от современного автора Александра Александровича Розова. Введение в цикл книг о Конфедерации Меганезии. Странное образование на полинезийских островах, с акваторией больше Африки, признанное ООН и многими государствами экстремистским режимом. На островах нет государства, но есть правительство, нет конституции, но есть Великая Хартия, нет полиции, а есть военные образования, которые содержатся на равные взносы от каждого гражданина (налогов тоже нет), судьи выбираются по жребию. А наружение положений Хартии карается высшей мерой гумманитарной самозащиты - смертной казнью либо депортацией. В этой странной, но чрезвычайно интересной, вселенной эвфемизмов и происходит действие - обсуждение судебного решения приговорившего группу людей к той самой высшей мере, рассмотрение прецедентов. Читая книгу невольно проецируешь ситуацию на законодательные инициативы по регулированию, запрету и непущанию. Не смотря на критику, очень интересно, обязательно прочитаю весь цикл.
Так совпало, что на 25-й день рождения мы внезапно решили отправились на Казыр. Изначальный план включал поездку с четвера до воскресенья, но после всех перипетий мы разбились на две группы: одна, из пяти человек, выехала таки в четверг, а мы, втроём и почти налегке, выехали в ночь с пятницы на субботу. Из семи человек помимо меня, я знал только коллег Женю и Машу.
Настало время менять свой "болотный огонёк" (ох уж эти затейники из HTC), не смотря на то, что его жизнь продлилась на пару лет благодаря прошивкам от Cyanogen, он все чаще начал тупить и глючить: первым протух GPS, потом начал отваливаться модуль связи в самый неподходящий момент. Я понял что хватить сиськи мять и нужно идти брать новый девайс.
Главной целью был Nexus 4 либо SGS 3, обе модели - лопаты. Нексус привлекал своей стоимостью в 12999. Мы пошли с Иваном смотреть его в магазин. В этот момент выяснились две вещи: 8-ми гиговых моделей не осталось, есть 16-ти гиговые на 3к дороже, и что нужна micro-sim. А вот это - засада.
Тут нужно лирическое отступление. Я приехал на учебу и другой страны, а бесправным нелегалам иметь сотовую связь не полагалось. Сначала мне взяли билайн, но когда я начал закидывать 30р в день и тратить все на смс-ки, а потом посчитал, что студенческой стипендии не хватит даже на связь. В этот момент я понял: хватит это терпеть. Подруга зарешала симку на себя и я подключил пакет смс. Расходы на связь сразу снизились раз в 10. С тех пор прошло почти 8 лет, а я так и не поменял номер, а с той подругой перестал общаться. В общем, резать симку было очень очково. Попытка поменять симку в офисе не увенчалась успехом.
На следующий день я пришел на работу и поделился своей болью. Совершенно случайно Макс сказал, что заказанный из Америков нексус с беспроводной зарядкой его устраивает всем кроме того, что там одна симка, а менять очень неудобно. Поэтому он готов продать телефон. А симку он может разрезать с закрытыми глазами. Мы распечатали шаблон, разрезали, вставили и нексус определил симку. После чего я смог впихнуть симку в WildFire так, чтобы она заработала и мы началаи обсуждать сделку. В этот момент случилось непоправаимое: раздетого нексуса (без бампера) смахнули с зарядки на пол и расколотили заднюю панель.
На ибее продавалась куча крышек, как с зарядкой, так и без нее за какие-то несколько тысяч рублей. Поскольку функция беспроводной зарядки не пострадала я забил и таки взял его себе. Зарядка, кстати, оказалась достаточно мощной, чтобы заряжать Nook. Не смотря на то, что она американская, расположение вилки удобнее, чем на нуке. Видимо в поход я буду таскать именно её.
Макс вайпнул телефон, я ввел свой аккаунт. Сразу же залились все приложения, которые были на старом, что оказалось очень удобным. Из неудобств - приходится держать двумя руками, большим пальцем не удобно дотягиваться до кнопок управления. По фронтальной камере общался по скайпу. Опять же по совету Макса поставил WhatsApp, который нашел кучу людей. Беспроводную зарядку оставил на работе. Чтобы не перетыкать USB, поднял на девайсе FTP-сервер и закидываю через него. Хватает в экономном режиме на два дня. Полностью разрядил только один раз. Разрещения экрана хватает чтобы читать PDF-ки формата А4.
Продолжение перипетий: телефоном я был доволен ровно две недели, пока у меня по необъснимым причинам сдохла симка и телефон преваратился в мини-планшет. Тут уже не было вариантов, как искать владелицу. У одногрупницы я выснил телефоны, вбил в контакт, чтобы не потерять. И каково же было моё удивление, когда я увидел её в WhatsApp-е, при этом контакт был активен меньше суток назад. Это была удача. Мы пересеклись в том же салоне, где оформляли симку 8 лет назад и переписали контракт на меня с сохранением всего: от услуг до бонусных баллов. Сотрудница салона выдала мне микросимку с надписью LTE. На вопрос: а чо? Ответила, что ближе к новому году должно появиться покрытие. Хотя, телефон все равно не поддерживает официально.
Effective Java, second edition. Joshua Bloch. Книга - однозначный маст-рид и маст-хэв для любого явиста. 78 советов, сгруппированные в 11 разделов покрывают общирнейший кусок java версии 6. Книга посвящена практикам написания безоопасного и сопровождаемого кода.
Каждая глава дает детальное обоснование какой-либо практики, подробно разбираются положительные и отрицательные примеры. Пока читал, сделал очень много заметок, которые нет смысла приводить здесь. Сформулирую только несколько мыслей, пришедших в процессе чтения.
Помнится в студенчестве, более-менее освоившись с платформой, начал задавать себе вопросы из разряда "как правильно делать что-то". Формулировал проблему, записывал вопросы, искал решение, пробовал варианты. Если бы эта книга попала ко мне года три-четыре назад, я бы сэкономил себе огромную кучу времени.
Прежде всего узнал и углубил понимание нескольких моментов. Узнал новые термины. Пару глав не понял ввиду отсутствия практики, поставил закладки, они ждут своего часа.
Эта книга может стать настольным инструментом любого сеньер-девелопера, делающего ревью кода: на типичные проблемы можно просто давать ссылки - например, смотри раздел 2, главу 5.
Ява прошла десятилетия эволюции, при этом сохранив совместимость кода. Некоторые вещи были неясны создателям языка на заре платформы. Даже питонисты постепенно удаляют deprecated код. В яве же, все архитектурные ошибки двадцатилетней давности до сих пор живут, как памятник совместимости. В книге автор подробно разбирает такие моменты: например мутабельность Date, несоответствие собственным стандартам и прочее - очень много.
Книга отличная. Настольный справочник. Недеюсь, третье издание будет покрывать восьмерку.
“I sure wish I had this book ten years ago. Some might think that I don’t need any Java books, but I need this one.” —James Gosling, fellow and vice president, Sun Microsystems, Inc., and inventor of the Java programming language
Месяц назад ходили в поход, а я ни слова про него не написал. Нужно исправлять это упущение.
Подготовка
В начале июля Аня начала собирать пати на Кию, на какой-то водопад в поселке Макаракском (который затмевает небо, а Ниагара всего лишь чай выливающийся из переполненной кружки. А еще, идти до него километры и километры по опасным джунглям). Сама она хотела пофотать, остальные забухать, искупаться и покормить насекомых. В итоге набралась неслабая толпа в 17 человек на 4 машинах. Прчем в нашей сидело 5 человек, остальные ехали с комфортом.
Технично. Системно. Методично.
Сначала мы переписывались смс-ками, по аське, звонили. За несколько дней до отправления мы решили встретиться лично, обсудить основные моменты похода: состав участников и рассадку по машинам, объем еды и питья, размер финансирования. Вроде бы все порешили, но постоянно возникали какие-то вопросы.
Первым не выдержал этого хаоса Евгений и сказал: все в скайп, план в гуглодок. Мы быстро создали конфу и вкинули всех заинтересованных. Пошла бурная дискуссия на 1 КПост/день, где мы наконец-то решили все вопросы.
День 0
За день до отправления съездили и закупили нехитрую еду, которую оставили в машине у Ивана, чтобы не таскаться с ней. Я поехал домой и начал упаковываться.
Палатка заняла основной отдел рюкзака, спальник и коврик - нижний. После этого места почти не осталось и вещи пришлось распихивать по дополнительным отделам. Помятуя прошлый опыт взял с собой трекинговые ботинки, которые оказались оверкилом, хватило бы и тапочек.
День 1
Выехали утром по плану, встретились с основной группой и решили ехать по сокращенному маршруту. В пути развлекались разговорами за мотивацию и чтением двух полосок по-ролям. Встретили в Тисуле отряд Дениса и поехали на водопад. Доехали до места, запарковались среди полудюжины машин и потопали.
Водопад
Топать оказалось пару километров по несложной тропе, даже ни разу не делали привал. Водопад оказался вполне себе, высотой метров 20. Барабанил ощутимо, хотя вода была не холодной. Тут я пожалел, что не взял с собой сандалии: дно в озерке было очень каменистое. Традиционно искупались, Артем бегал вокруг с GoPro и снимал решительно отовсюду. Главная проблема была с насекомыми: столько слепней вокруг я еще никогда не видел - атаковали нещадно.
Лагерь
Вернулись назад, погрузились на машины и поехали непосредственно на Кию. Почти все ровные места были заняты, тем не менее мы нашли довольно ровную площадку и стали разворачивать лагерь. Долго выясняли кто с кем будет спать, в итоге разделились по признаку храпа (Бу-Го-Га, храп нехрапящих было слашно аж в десяти метрах). Быстро поставили палатки (тут я сделал ошибку: нужно было ставить ногами к реке, а не боком, в итоге спать было не очень удобно из-за уклона).
Неудача
Перешли вброд Кию, хотя воды было всего-лишь по пояс, течение сбивало с ног, пришлось браться за руки и идти шеренгой. Пока остальная часть народа батонилась, мы выяснили у Дениса (как у самого бывалого-местного), что в пяти километрах по течению есть еще один водопад, но проходибельность летом неизвестна. По рассчетам мы должны были вернуться за 3-4 часа. Обрызгались рифтамидом и выдвинулись.
Шли по высокой траве, преодолели два небольших препятствия, пока не уперлись в скалу. Женя отправился на разведку, но брода не нашел. Пришлось топать назад.
Клещи
Пока шли назад, снаяли с Ани клеща. Затем нашли впившегося клеща у Ивана. Ольга бежала впереди и не боялась каких-то насекомых. Пришли в лагерь, Аня, как самая трезвая, повезла Ивана в местный травмпункт, где местная шаманка выдернула клеща ногтями. Я осмотрелся, осмотрел одежду и успокоился. Сел к костру (в следующий раз не забыть складной стул) и почуял что у меня что-то щекочет живот - поднимаю, оп-па, приехали, уже впился. Народ, который не видел клеща ни разу пришел смотреть. Вика вызвалась оперировать будучи самой опытной (она с отцом часто удаляла клещей с собаки), чтобы опять не мотаться, что и было успешно реализовано. Затем при осмотре нашли что-то дохлое, но похожее на клеща у Жени в плече.
Ночевка
Сидели до поздней ночи, угадывая историю. Кончилось пиво, пришлось одевать ботинки и топать по холодной воде (зачем его было так далеко от берега ставить охлаждаться), особенно обидно было то, что его там не оказалось. (всё выпили). Когда село солнце выпала дичайшая роса и ботинки я так и не смог просушить. Всю ночь было слышно, как капает конденсат на внутреннюю палатку. После клеща не оставляло ощущение, что кто-то ползает (по крайней мере дважды это оказалось правдой: клоп провонявший всю палатку и какой-то здоровенный кузнечик). Под утро стало совсем холодно и сыро, спальник с ковриком отработали на отлично - максимально завернулся и утянул капюшон, оставив только нос.
День 2
Утро
Утро было тяжелым. Меееееедленно вставало солнце, все вокруг было сырым и холодным. Ботинки стали еще более мокрыми, чем после похода за пивом, а главное тяжелыми. Сушить возле костра я их не рискнул. Разожгли костер. К тому времени, как Аня приготовила классичскую гречку, все уже встали. Мы пошли сушиться и собираться: в программе было еще два пункта.
Первым шел Берчикуль, или Малый Берчикуль. Мы приехали на высоченный холм, пофотались, съели арбуз и поехали дальше. Спуститься к реке не было никакой возможности.
Затем приехали на озеро Пустое. Там был пляж, толпа народу и помост с которого все ныряли. Мы тоже поныряли и поплавали. Вода была мутноватой, но очень теплой. Когда накупались, пошли играть в волейбол. Домой мы выдвинулись самыми первыми.
По пути туда, видели перевернувшуюся фуру в кювете, по пути назад от фуры остался только каркас.
Травматология
В травму решили ехать сразу. В дороге изучали болезни и симптомы. Ходили слухи, что за иммуноглобулин нычне дерут втридорога. Врач заполняя анкету спросил род деятельности, а когда получил ответ, глядя на лохматость, бородатость и общее состояние, сказал что мог бы и догадаться в приципе. Прививка оказалась бесплатной, клещ сдох поэтому на исследование его не взяли. Жене тоже вкатили укол, на всякий случай. Медсестра долго шутила по поводу кодирования от алкоголя. Затем мы пошли в аптеку и вкинули по убойной дозе антибиотика, который в 85% случаев предупреждал развитие бореллиоза.
Посмотрел тут видео про эффективную работу с IntelliJ IDEA, узнал несколько новых полезных возможностей. Productivity guide - это вообще уберфича, такое я видел только в Идее, хотя ничего волшебного, тот же Eclipse давно собирает статистику использования и периодически предлагает загрузить к ним на сервера.
В любом случае подобных видео over 9000 для любого, достаточнопродвинутогоредактора. Смотреть как работает мастер можно бесконечно. И прямо таки физическую боль вызывает наблюдение человека совершающего монотонную ручную работу, особенно если её можно оптимизировать, особенно, если есть официальный способ, и достаточно просто заглянуть в справку.
Попытка номер один. Читалка, которая, внезапно, позволила удобно работать с книгой: делать закладки (это, в принципе, и раньше делал), выделять фрагменты, добавлять комментарии. Но самая крутая фича, конечно, - встроенные оксфордские словари (Oxford English и New American English) позволили, просто наведя слово на курсор, видеть определение слов, что качественно повысило понимание книг при чтении в оригинале.
Денис, помня про мою тягу к фантастике и интересу к ЕВЕ, посоветовал книгу Тони Гонзалеса. Новеллизацию по вселенной игры. Прочитал за пару дней на одном дыхании, добротнейшая фантастика даже для не фаната. Четыре расы слестнувшиеся в отчаянной битве всами доступными средствами: от дипломатических до военных. Могущественные незнакомцы тайно дергающие за нити, наследие потерянной Терры.
Некоторые фрагменты, кстати, напоминают Дюну, есть даже свой барон Харконен.
Всё, жду продолжения. Сражаться с дикой тягой загамать становится все труднее.
Великолепная книга от Roy Osherove. Однозначно попадает в категорию 'И почему она не попалась мне пять лет назад?', однозначный мастрид. Не смотря на то, что все примеры идут для .NET, польза будет и для явистов, поскольку принципы работы отличаются только деталями.
Книга состоит из 4 разделов: базовые принципы, моки и стабы, тестируемый код, внедрение тестирования в легаси среде. И если первые два раздела я уже освоил, достаточно натанцевавшись по граблям (читал чтобы убедиться, что ничего не пропустил), то последние дали богатую пищу для размышлений.
A unit test should have the following properties: ❂ It should be automated and repeatable. ❂ It should be easy to implement. ❂ Once it’s written, it should remain for future use. ❂ Anyone should be able to run it. ❂ It should run at the push of a button. ❂ It should run quickly. These are the FICC properties: fast, isolated, configuration-free, and consistent. If it’s hard to write such a test, or it takes a long time to write it, the system isn’t testable.
Противоречие между инкапсуляцией и тестируемостью решается очень легко: Some people feel that opening up the design to make it more testable is a bad thing because it hurts the object-oriented principles the design is based on. I can wholeheartedly say to those people, “Don’t be silly.” Object-oriented techniques are there to enforce some constraints on the end user of the API (the end user being the programmer who will use your object model) so that the object model is used properly and is protected from unforeseen ways of usage. Object orientation also has a lot to do with reuse of code and the single-responsibility principle (which requires that each class has only a single responsibility). When we write unit tests for our code, we are adding another end user (the test) to the object model. That end user is just as important as the original one, but it has different goals when using the model.
Ну и, в заключение, совет от Мастера: Finally, as a friend once said, a good bottle of vodka never hurts when dealing with legacy code.
Интересное интервью как-то запостил Голодный. Скачал, несколько месяцев валялось, пока наконец не посмотрел. Очень понравились идеи осознанного выбора и принятия ответственности; про группу, которая не группа а набор людей с общественным договором; про мониторинг и коррекцию; про засучить рукава и сделать лучше всех.
Случайные совпадения
Буквально через пару дней после просмотра, разговор с другом (тот самый успешный троечник из интервью, который, по словам учителей, умрет под забором от голода) зашел о бизнесе, принятии ответственности. Он сказал, что сотрудники безинициативные, их нужно постоянно пинать, чтобы они начали что-то делать и хорошо бы им сходить в армию, дескать, их бы там научили, как его в свое время. После этого почти дословно повторил описание армейского опыта Гандапаса – я про себя очень удивился этим множественным совпадениям. Хотя и не согласился с другом: модель поведения изначально была правильно сформированная – армия лишь позволила ей проявиться.
Книга от начинающей писательницы Madeline Ashby. Недалекое будущее, рядом с человеком живут синтеты. Ранее они создавались для определенных целей: восстановление лесов, ухаживание за больными после разрушительного землетрясения – каждая модель обладала определенными навыками. Серия моделей с одинаковой функцией называлась клайдом.
"What are you doing?" Amy asked. "My job." Javier picked up one pinecone with his good hand and screwed it into the sand until it stood upright. "Planting trees."
Синтеты обладают возможностью размножаться, если в наличии достаточно материала. Всех их объединяет одно: failsafe, механизм блокирующий причинение вреда человеку.
Весь сюжет завязан на сбое этого механизма у одной из таких моделей, девочки, живущей в смешанной человеко-синтетической семье. Морально-этические проблемы и противоречия, не уступают аналогичным у Азимова в цикле Я робот, хотя и более "человечны".
Понравилось описание процесса итерации: "It's just the stemware copying itself. First my search engine clones itself in him, then it just goes hunting for relevant data and imports it."
Интересные отсылки на другие фантастические произведения: Like the Rusty Innards, all the items on the menu had goofy names that somehow related to robots, although Amy sometimes didn't understand the references. There was a cocktail called Tears in the Rain, for example, that she had no clue about. But it was meant for humans, so it didn't matter. Даже на игры: "Let me check into it," Amy said, and returned a moment later with the last slice of opera cake and a crowd of her fellow servers, all of whom sang the Electric Sheep's birthday song: This cake is for you This cake is for you This cake is no lie And it's just for you. Происхождение синтетов весьма оригинально: "It's total bullshit, is what it is. This whole culture, it doesn't give a good goddamn about women." Shari pointed at Amy. "There are only two industries in this world that ever make any kind of progress: porn, and the military. And when they hop in bed together with crazy fundamentalists, we get things like you." She rested her elbows on her knees and grinned at Amy. "I'm telling you. Big men with their little heads. You know?" Синтетов создала церковь: The angel investor supporting the development of von Neumann humanoids was not a military contractor, or a tech firm, or even a design giant. It was a church. A global megachurch named New Eden Ministries, Inc, that believed firmly that the Rapture was coming any minute now. It collected donations, bought real estate, and put the proceeds into programmable matter, natural language processing, and affect detection – all for the benefit of the few pitiful humans regrettably left behind to deal with God's wrath. They would need companions, after all. Helpmeets. And those helpmeets couldn't ever hurt humans. That was the Horsemen's job.
Итог: весьма интересно, хоть и на любителя. Когда выйдет вторая книга, обязательно прочитаю.
Мехи. Большие мехи для драки с большими тварями. Когда была заруба, кресла в кинотеатре дрожали. Концентрация экшона зашкаливала, не уступая трансформерам.
Всё остальное вызывало кучу вопросов. Начиная от тактики, почему мощное вооружение (типа меча) достается, когда пол руки откушено? Продолжая управленческими: странное взаимоотношение с учеными, непонятная субординация. И кончая стратегическими: почему базы располагались на побережье, а не рядом с разломом, почему стену начали возводить в самом конце, когда осталось 4 Егеря?
Непонятные твари лезли на нас в Евангелионе, пилоты синхронизировались в Эврике 7. Мехи вообще отдельный жанр, раскрытый и изъезженный вдоль и поперёк. В фильме же эта богатая тема совсем не раскрыта, синхронизация, чужая память - вот это всё.
Вердикт: экшон кино, действие захватывает и не отпускает, всего остального нет. Пойду зарублюсь в X-COM.
После того как два моих друга начали успешно вести купи-продай на сабже, я подумал: хватит терпеть дома весь этот хлам, который работает, но жалко выбросить. Нашел 4 вещи, которые можно толкнуть: 3G Huawei 1550 (который я проапгрейдил) и CDMA EVDO (кому этот стандарт сейчас нужен), аккумы от раций (почему-то подумал, что в комплекте нет) и ноутбучный жесткий диск. Прошло 4 дня и тут мне пришла смс с вопросом о модеме. Оно работает, подумал я.
Целый день переписывались, чел выяснял всякие подробности. Особо его интересовал вопрос разлочки. До первой прошивки, я точно помню что проверял и модем был разлочен. Симка от мегафона подходила. Я решил таки вставить и убедиться, чтобы не было неожиданностей. Видимо оно залочилось, когда я обновлялся. Когда я вставил симку от мегафона, он предложил ввести мне код. Всего 10 попыток. Тут я резко начал искать калькулятор кодов, нашел и со второй попытки снял разлочку.
Или System on a Chip. Впервые прочитал у Алекса и не смог сдержаться. PQI AirCard выглядит как SD карточка, в которую вставляется microSD (16G версия стоила 60 баксов). Вставленная в устройство начинает раздавать содержимое по WiFi - после чего можете забыть про датакабели. Стартует и поднимает WiFi меньше чем за пол минуты. После чего всё что внутри становится доступным на 192.168.1.1. Главная проблема - выключение самого девайса по неиспользованию, которое рекомендуется сильно увеличить либо вообще убрать. Управлять с фотоаппарата можно удаляя 3 специальных фотографии: включить хотспот, подключиться к первому доступному хотспоту из списка, сбросить устройство. Для безопасности можно задать пароль на WPA2 (на работе спокойно подключился, но дома начались какие-то гоны и пришлось сбросить устройство). В маркете или сторе можно скачать приложение с функциональностью аналогичной веб-интерфейсу.
Решаем сходить в поход с палатками на неделю в сабжевый район. Я активно инвентаризуюсь, как оказывается позже - по большей части зря; бегаю, а вот это - не зря.
День -7
На работе завал дичайшего дедлайна, отваливается примерно половина народа. Переигрываем: идем на 4 дня, ночевать будем в одном из приютов.
День -1
Пошли вечером закупать еду в Палату, в Я центре, которая внезапно начала закрываться на ремонт. Полки были пусты, тем не менее закупили 4 полных пакета еды. Остальное должен был закупить наш инструктор Вадим из Междуреченска.
Иэн Бэнкс. Алгебраист. Книга в жанре космооперы. В результате череды войн, в том числе с искусственным разумом было уничтожено много искусственных порталов-червоточин. Главный герой случайно натыкается на информацию, которая возможно откроет доступ к параллельной сети порталов. В солнечную систему одновременно двигаются разные силы, которые желают захватить эту информацию, шифр, ключ,инопланетную алгебру или преобразование. В это время герой отправляется на газовый гигант к расе насельников, чтобы добыть эту информацию
Я всегда буду сравнивать книги этого жанра с тетралогией Дэна Симмонса - Гиперион, Падение Гипериона, Эндемион, Рассвет Эндемиона, по количеству неразгаданных загадок, Алгебраист тихо курит в сторонке (основная загадка раскрыта, остальные крайне поверхностны). Трилогия John C. Wright: The Golden Age, The Phoenix Exultant,The Golden Transcendence - в свою очередь опережает по чуждости технологий (технологии не вызывают восхищения), в частности полностью раскрыта тема искусственного разума и нанотехнологий, которых Иэн Бэнкс в своем произведении просто "запретил". Итог - средне.
Beautiful Teams. Вдохновляющие и предостерегающие рассказы ветеранов тимлидинга
Долгая книга, приобретенная мной на распродаже от books.ru, которую я читал полтора месяца. 600 страниц, 31 история, среди авторов Тим О'Рейли, Гради Буч, Кори Доктороу, Стив Макконнелл. Каждая глава представлена в виде истории от одного лица, интервью или коллективного потока сознания, некторое читаются на одном дыхании, некоторые скучные. Эта книга напоминает "Хакеры. Герои компьютерной революции", только про менеджеров, руководителей, тимлидеров. Темы необычайно широки: марсианская программа и исследование дальнего космоса, военные технологии, Боинг 777, 9/11, бум доткомов, экономические кризисы, киноиндустрия, музыка, игры, Microsoft, Google,. Сами истории сгруппированы в 5 разделов: люди, цели, методы, препятствия и заключительный - музыка.
Очень часто идет разговор про правильное планирование, как минимум трижды в контексте Agile, хотя многие ошибочно считают, что это синоним "мы не планируем".
В мае появилась задача подумать над хранением документации. Где мы только не пытались хранить документацию: и в Dropbox, и в Google Docs. Последнее, где мы остановились, это - Confluence. Совершенно наркоманская система редактирования, потребовалось ставить отдельный плагин, чтобы можно было редактировать чистый HTML. Главная проблема всех этих подходов - рассинхронизация. Документация не соответсвует коду. На втором месте - невозможность автоматической генерации документации в процессе сборки проекта. От системы документации не требуется многого: вставка изображений и кросс-ссылки - более чем достаточно.
Все серьезные проекты хранят документацию в коде. Концепция портабельного билда: клонировав репозиторий, пользователь должен получить абсолютно всё, что нужно для сборки проекта, и, желательно, в текстовом формате, чтобы не пришлось ставить никакого дополнительного софта для редактирования.
Mercurial + Markdown
Хотя README встречались и раньше, а wiki хранилась в репозитории еще на Google Code, но именно с приходом GitHub README.md стало обязательным требованием. Краткое описание проекта, в wiki-стайл разметке markdown. После знакомства с возможностями этой системы на github.io любые сомнения в возможностях разметки пропадают. Приятным бонусом является плагин для IntelliJ IDEA.
Очень хотелось получить это на локальном репозитории. Поиск вывел на относительно молодой проект (не первый раз ищу) hgext.markdown от Chris Eldredge. Плагин для mercurial, покрывающий требования к встроенной системе документации на 100%. Когда я его поставил, выснилось, что разметка применяется только к readme, плагин не умеет работать с кодировками (пришлось вспомнить эпичнейший доклад про кодировки), с картинками (необходимое требование), ну и несколько проблем шаблонами вообще и с разметкой в частности.
Pull request or GTFO
В общем все это я пофиксил и заслал Крису толстенный пуллреквест, пару дней назад он принял его. Линуксоиды могут спокойно качать плагин, виндузятники в пролёте, поскольку требуется библиотека а у mercurial встроенный python, и как подсунуть одно в другое, еще не разбирался. Как выкурю - зашлю еще один пуллреквест с инструкцией.
Пока ждал - пошел на IRC канал, чтобы найти кого-нибудь с правами на запись в wiki-страницу со списокм плагинов. Оказалось, что особых прав не нужно и достаточно зарегистрироваться (порадовала каптча, которая требует ответить на вопрос про команды mercurial). Вооружившись руководством, создал по фэн-шую страничку плагина.
Темы для mercurial
В процессе ковыряния плагина набрел на встроенную систему шаблонов и тем для hgweb. Внутри крайне разухабистый движок, с доступом ко внутреннему API, позволяющий изобразить решительно всё. Заскриншотил каждую тему и добавил на страницу со списком, чтобы было понятно как каждая выглядит. Кстати, сам mercurial размазан по файловой системе: бинарники лежат в /usr/share/mercurial/templates, а основной код в /usr/lib/python2.7/dist-packages/mercurial.
Пять стандартных тем и Markdown, идущий в комплекте с плагином