Андроид мания

Уже месяц не расстаюсь с андроидом - Samsung Galaxy Ace. Бюджетно, но всего хватает. Железом доволен, разве что Angry Birds подтормаживает на некоторых уровнях. По софту. Набор смс-ок при помощи Swype - это супер круто. Милая шутка от локализаторов swype: вместо "андроид" предлагает "ведроид". Google talk, игры, Яндекс карты, синхронизация контактов в GMail-овое облако, виджет с погодой, покупка приложений в маркете - тоже круто. Отсутствие оффлайн-режима и переформатирования страниц после pinch-to-zoom в браузерах; отсутствие кирилицы в линейке прокрутки контактов, если в настройках UI телефона стоит английский - не круто. По этому поводу скачал Intellij IDEA и установил SDK для андроида, хотя джава мне внутренне противна. Буду изучать, преодолевая рвотные рефлексы.

P.S. При установке Android SDK R12 в умолчательную директорию в Program Files эмулятор девайсов не работает - ему не нравятся пробелы в пути. Лечится созданием симлинка через mklink. Видимо, в гугле у всех программеров стоит линукс.

Подставка для ноутбука

Не знаю кто как, а я очень люблю работать, лежа в кровати, особенно если поспать удалось мало. Но с ноутбуком на животе особо не поработаешь - он греется, давит, и его не получается расположить в нормальном положении. Поэтому я давно раздумывал о покупке столика-подставки для ноутбука. И вот наконец я решил сделать себе любимому подарок. Выяснилось, что такие столики - не очень ходовой товар, выбор среди них небольшой, и есть они только во всяких неизвестных интернет магазинах. Вот несколько ссылок:
Laptop desk
Shop carry
Mini stolik

Понравившиеся мне модели с раскладными ножками везде сделаны по одной схеме, и, как я подозреваю, на одной и той же китайской фабрике. Поэтому выбор производился по критерию цены, и в итоге в магазине Smile Gifts была куплена вот эта модель. Краткий обзор:

Негатив:

  • Подставка для мыши не фиксируется ни в закрытом, ни в открытом положении, постоянно ездит туда-сюда при наклонах подставки. Зато ее можно отвинтить (что я в итоге и сделал, т.к. тачпада мне вполне хватает) или перевесить на другой край, если вы левша или если хотите пользоваться другой стороной.

  • У столика на гладкой стороне есть ограничитель (чтобы ноут не сползал с него), но у него резкие (нескругленные) края и сам ограничитель слишком высокий, из-за чего с тачпадом работать неудобно . А если его закрыть, то ноут сползает. К счастью, у столика вторая сторона тоже рабочая, на ней посередине есть широкая углубленная полоса, на которой ноубук закрепляется и не сползает.

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

  • Чорный цвет - это не совсем позитивно. Но это уже придирки


Позитив:

  • Сам столик металлический (кроме ножек), и сделан вроде на совесть.

  • Ножки трехзвенные, каждое соединение вращается на 360 градусов и фиксируется на любой угол с шагом 15 градусов, механизм удобный и вроде бы надежный. Так что при желании от столика можно добиться удобной высоты, уровня наклона и даже добиться устойчивости, но приготовьтесь немного повозиться с этим.


Итого: продукт годный, покупкой в принципе доволен, обломовщина процветает :)

Как Facebook выпускает код

Статья о том, как в Facebook пишут код. Краткое содержание:

  • У них 500 разработчиков, 500 сисадминов и еще 1000 человек непонятно чем занимается

  • Но разработчики все-таки главные. Они сами придумывают, чем бы им заняться, в каком порядке и зачем это все делать.

  • Зачем там менеджеры, не понятно. Поэтому их в 10 раз меньше, чем разработчиков, и разработчиками они не командуют, а уговаривают. Типа Вася, не сиди в инете, лучше сделай такую фичу, а я тебя за это поцелую. Ну вдруг разработчики их послушаются. Если же менеджер предложит тупую или технически нереализуемую хрень, то его немедленно убивают, зажаривают и съедают на торжественном обеде в честь миллиардера Цукерберга.

  • Тестеров нет. Поскольку все сотрудники Facebook-а и так в секте, то изменения сначала обкатывают на них, но это несколько часов и без всякой системы.

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

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

  • Любой разработчик может исправить и закоммитить изменение к любой не угодившей ему части Facebook-а. Но Большой брат смотрит на его коммиты, а за изменениями к ленте новостей наблюдает лично миллиардер Цукерберг.

  • Если у нескольких разработчиков выходит спор о том, как должна быть реализована фича, то они устраивают зловещие опыты над 1% пользователей Невады, а потом бросают монетку. Почему Невады? Потому что там только бордели и казино. Их не жалко. Не зря же и ядерный полигон обустроили именно там.

  • Раз в месяц происходит собрание секты, где разработчики делятся деталями совершенных зловещих опытов над пользователями. Если не дай бог на этих встречах маркетинг или менеджеры произнесут более трех слов, то секретные агенты тут же донесут об этом лично миллиардеру Цукербергу, и виновного постигнет суровая порка.

  • Каждый вторник проводится сакральная церемония еженедельного релиза. Все подписавшиеся на нее разработчики обязаны присутствовать во вторник лично или хотя бы в IRC. В ходе церемонии скрипты изменений последовательно накатываются на сервера в девяти концентрических кругах. В первом круге к тайному знанию приобщаются два сервера для работников Facebook, во втором круге - несчастные 1% пользователей Невады, и так далее, пока под страшным заклятьем не окажутся все 500 миллионов пользователей Facebook-а во всем мире. За ходом церемонии наблюдают особо опытные сисадмины, они же зорким взглядом следят за поведением пользователей. Если на каком-то этапе пользователи начнут вести себя неадекватно, то церемония приостанавливается до выяснения причин. Если же вдруг обнаруживается Баг, то церемония срочно закатывается обратно со всех девяти кругов и разработчики начинают срочную отладку сломавшегося заклинания.

  • За баги разработчиков не ругают. Но если они не присутствовали на великой вторничной церемонии или не смогли срочно ответить сисадмину, то их публично ставят в угол. Тех, кто не вписался в секту, выгоняют через 6 месяцев.

Code First - новая идеология работы с базой данных

Прошлый пост про прожекты баз данных я написал, еще не зная, что в Microsoft тоже задумываются об этих проблемах. Между тем, тихо и незаметно вышла уже пятая бета новой технологии Code First. Она является дополнением к Entity Framework 4, но позволяет использовать совершенно другой процесс разработки.

В классической Entity Framework мы сначала разрабатываем таблицу при помощи средства разработки баз данных, потом пишем кучу xml-ек для описания мэпинга таблиц к объектам (или используем визуальный дизайнер для этого), потом запускаем генератор кода, который делает нам кошмарно навороченные ORM классы, а потом повторяем этот процесс для внесения изменений.

В технологии Code First мы просто пишем один обычный класс (который представляет собой запись из таблицы) и один специально унаследованный класс и запускаем приложение. Все. База данных, таблицы, схема мэпинг генерируются автоматически. Далее мы можем работать с классом при помощи LINQ, который фактически преобразует код на C# в SQL. При необходимости внесения изменений мы меняем класс и снова перезапускаем приложение - база пересоздается (если мы разрешили соответствующую опцию).

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


Collapse )

Об умном софте

На моей новой работе мы делаем плагин к Visual Studio, называется ReSharper. Он умный. Он умеет показывать, откуда в результате сложной цепочки вызовов берется значение какого-либо поля, даже если это значение создается не в этом классе и передается в результате сложной цепочки вызовов. Он знает, как циклы foreach можно преобразовать к LINQ, даже если программист об этом не догадывается. Он знает, что если я добавил в конструктор параметр field, то его можно присвоить полю myField (или как-там у вас в проекте принято именовать поля) или свойству Field, и предлагает создать такие поля или свойства, если их нет. Естественно, при переименовании свойства Field он также предложит переименовать и поле myField, и параметр конструктора field. Более того, он знает, что результат вызова функции GetHashCode() можно присвоить переменной hashCode или code. Он еще много чего умеет, я и половины всего не знаю. Но самое главное, что он все это не навязывает. Все это можно настроить и отключить. Если у вас в проекте поля именуются _Field, а константы - CONST_FIELD, то его можно этому научить. Если предупреждения типа virtual method call from constructor вы считаете излишними, то их можно пристрелить в первом же месте, где ReSharper их покажет, и они больше у вас в проекте не воскреснут. Все это осваивается в течение одного дня.

А теперь сравним это с другим умным софтом под названием Oracle Database. Он сам знает, какие индексы нужно использовать в каком запросе. Он умеет менять план запроса по мере изменения количества данных. Он умеет кэшировать результаты выполнения пользовательских функций. И еще много чего. Короче, он подменяет собой неплохого программиста. Но если программисту вы можете объяснить, где он неправ, можете попросить изучить новые методики оптимизации и сверхурочно применить их к своему коду за соответствующую премию, а если он сошел с ума, то можете отправить его на больничный и взять на его место другого, то с Ораклом такие фишки не пройдут. Если Оракл решил изменить план какого-то запроса и ваша процедура внезапно вместо 3 минут стала работать 15, то вам остается лишь достать бубен и устраивать вокруг этого запроса шаманские пляски. Потому что на тестовой базе с теми же данными процедура продолжает работать 3 минуты. Потому что объяснить Ораклу на нормальном языке, как именно стоит выполнять этот запрос, где закэшировать, в каком порядке выполнять вложенные запросы и т.п. - не возможно. Потому что один и тот же запрос с одними и теми же параметрами выполняется разное время в зависимости от фазы луны, и очистка кэшей не помогает. Потому что специалисты компьютерной психиатрии, которые умеют общаться с Ораклом, а также сертифицированно звенеть в бубен для его успокоения - учатся этому несколько месяцев. Но иногда можно добиться поразительных результатов методом научного тыка. Например, можно создать индекс, который не используется ни в одном запросе, и все равно получить ускорение в 3 раза. Почему - знает только великий бог компьютерного вуду.

Мне больше не надо общаться с Ораклом. Я счастлив :)

Прожекты по среде разработки для баз данных

Кто-нибудь помнит, какую революцию в свое время совершили DBase и потом Microsoft Access в области разработки баз данных? Даже не очень квалифицированный программист мог написать бизнес-приложение с использованием этих средств. Сейчас эти приложения устарели. Для того, чтобы разрабатывать с использованием современных технологий, разработчику необходимо знать SQL, какой-либо язык промежуточного сервера (PHP, C#, Java и т.п.), HTML+CSS, JavaScript, jQuery или другую библиотеку. Даже добавление одного поля в таблицу приводит к необходимости править кучу мест в разных слоях на разных языках. Именно поэтому бизнес-приложений на современных технологиях пишется очень немного.

На моей старой работе мы постарались написать свой инструментарий для разработки подобных приложений, однако ресурсов для реализации всех красивых идей не было. Поэтому здесь я постарался собрать свои и чужие мысли о том, что нужно, чтобы превратить современную разработку с использованием баз данных из скучной и сложной рутины в простое и относительно интересное занятие. Критикуйте. Если знаете, где и что из этого реализовано – тоже пишите, потому что мы люди темные, Ruby on Rails не изучали.

 

Collapse )

 

Agile

10 лет Agile-манифесту (agilemanifesto.org/). Статья на infoworld, обсуждение на slashdot.
На slashdot отзывы неоднозначные. Попытка внедрения методологий, таких как scrum или xp, не всегда приводит к хорошему результату. Мой опыт как PM: любая формальная методология по определению не гибкая, потому что не учитывает конкретные реальности.

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

Тесты? Отлично для сложных алгоритмов, но тестировать каждый класс и каждую функцию - потеря времени.

Спецификации? Обязательны, когда есть контрактные обязательства перед заказчиком или просто когда в проекте разработчики разного уровня. В остальных случаях - можно обойтись списком желательных доработок в багтрекере.

Документирование процессов? Желательны, когда есть реальные организационные проблемы (например, в случае support-а конфликтных заказчиков - каждый должен знать, за что он отвечает). В остальном ИСО 9000 - бесполезная потеря времени.

Приветствование изменения требований? В случае заказной разработки нужно понимать, как за это можно брать деньги. Без денежнего или еще какого-то противовеса нельзя разрешать произвольное изменение требований.

И т.д. и т.п. Вроде очевидно, но почему-то не до всех удается донести, что из всякой методики есть исключения и не везде оно работает.