вторник, 9 марта 2010 г.

[comp.thoughts] Какой мобильности мне хочется

Хорошая вещь – ноутбук! Сам уже лет семь подряд работаю только на ноутбуках. За это время у меня их сменилось четыре штуки – сначала какой-то RoverBook на Celeron-е (гадость редкая, не советую никому покупать Rover-ы), затем Asus M3700N (вот была классная тачка!), затем Asus A8H00Sc, теперь здоровенная бандура Acer Aspire 8920.

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

Однако, не все хорошо с ноутбуками. Пятнадцатидюймовая матрица даже с разрешением 1440x900 – это слишком мало для комфортной работы. Я сейчас работаю на 18” экране с FullHD разрешением – вот это, имхо, самый необходимый минимум. Но большая матрица – это автоматически большой и тяжелый ноутбук. Скажем, мой Aspire 8920 сам по себе больше 4кг весит, плюс блок питания, плюс сумка с кучей разной мелочевки. Вот и таскаешь с собой здоровенный баул весом более 5кг. Мне-то еще ничего, я сам не маленький :)

Вес и размер ноутбука – это критически важные характеристики. Некоторые мои коллеги работают вообще на маленьких и легких 13” ноутбуках. А для того, чтобы не слепиться из-за маленького экрана, подключают свои ноутбуки к одному или двум нормальным мониторам (и полноразмерной внешней клавиатуре, при желании).

В принципе, это уже вполне хорошее решение – ставишь себе на работе и дома 20-22” мониторы, и используешь с ними какой-нибудь 12-13” ноутбук (вроде HP ProBook 4310s).

Но почему бы не пойти еще дальше? Ведь ноутбук – это т.н. single point of failure. Залипнет в нем кнопка на клавиатуре или перестанет звук работать – и что? Отвози в сервисный центр и жди пока его приведут в чувства. Тем временем все эти мониторы на рабочем месте и дома будут стоять мертвым грузом. И если уж мы сократили вес ноутбука с 4кг до 2кг, то почему бы не уменьшить его еще в несколько раз? Скажем, грамм до 500-600.

Т.е. чтобы возить только переносной винчестер.

В принципе, решение с винчестером вполне осуществимо уже сейчас. Покупаются две одинаковые машинки (два неттопа, к примеру), система устанавливается на внешний винт и загружается через USB. Поработал дома – заглушил систему, приехал на работу – воткнул USB шнурок и пошел работать дальше.

Плохо то, что машины должны быть полностью одинаковые – со всей одинаковой аппаратной начинкой, чтобы система одни и те же драйвера использовала. Было бы круче, если бы загрузчик ОС при старте считывал из BIOS-а какой-нибудь ID машины и в зависимости от его значения запускал бы ОС в той или иной конфигурации. Вот это была бы лепота!

Но можно пойти и дальше. А зачем, собственно, USB шнурок? Пусть вообще коробочка с внешним винтом вставляется в корпус неттопа как компакт-диск в привод :) Т.е. пришел на работу, воткнул в разъем коробочку и всех делов.

А проблему single point of failure можно решать так же как с ноутбуками сейчас – тотальным или выборочным backup-ом. С внешним винчестером даже проще будет, имхо. Там в одну коробочку сразу два винта можно засунуть – пускай они автоматом зеркалируются. Или по другому – в каждом неттопе стоит один резервный винт. Когда ты приходишь и вставляешь в неттоп переносной винт, неттоп автоматически (или по приказу) начинает его backup-ить на резервный. Выходит из строя переносной – информация восстанавливается с резервного.

Ну и возврат к истокам – к ноутбукам. Все таки ноутбуки – классная вещь! Даже дома мобильность ноутбука – это страшная сила ;) Захотел, взял с собой в кресло, захотел – улегся с ним на диване, зашипели на тебя домашние – пошел с ним на кухню. Не говоря уже о поездках в командировку и на отдых. Т.е. ноутбук нужен. А значит, он должен работать по той же схеме с внешним винчестером: коробочка с винчестером просто вставляется в соответствующий отсек ноутбука (как аккумуляторная батарея сейчас) и все. Вставил, включил и работай себе на кухне. Потом выключил, вытащил и поехал на работу. Лепота!

воскресенье, 7 марта 2010 г.

[life.photo] Макро-фотографии Вячеслава Зайковского

Качественные макро – это что-то на грани фантастики и волшебства. Вот как на работах Вячеслава Зайковского:

Корона Росистой Империи
«Корона Росистой Империи»

Встречая Солнышко
«Встречая Солнышко»

И почему в чистой росе столько мусора...
«И почему в чистой росе столько мусора...»

Отодвинтесь от моника!?... Подальше... — засмущали....
«Отодвинтесь от моника!?... Подальше... — засмущали....»

Ромашковая настойка на росе
«Ромашковая настойка на росе»

Неизвестный науке зверь. Называется муха.
«Неизвестный науке зверь. Называется муха.»

Переходное состояние капельки росы
«Переходное состояние капельки росы»

Опять подвеска
«Опять подвеска»

Слёзы радости новому дню
«Слёзы радости новому дню»

Подвеска
«Подвеска»

Ну а эта фотография как будто специально к приближающемуся празднику :)

Подарил любимой цветочек - и мне есть что пофотать :)
«Подарил любимой цветочек - и мне есть что пофотать :)»

Другие работы Вячеслава Зайковского в жанре “Макро” можно посмотреть на photosight.ru и photoline.ru.

суббота, 6 марта 2010 г.

[life.sport.photo] Фотографии с прошедшей Олимпиады 2010 в Ванкувере

Первая подборка из 45 снимков:

И вторая (так же из 45 фотографий):

[work] Впечатления после первого раунда собеседований

Читатели моего блога могли заметить, что описание вакансий и требования к соискателям изменились. Сделано это было под впечатлениями от первой волны собеседований. Точнее, от одного самого сильного впечатления – хорошие программисты работу не ищут. Поскольку прособеседованные мной соискатели хорошими программистами, к сожалению, не были. Это нормальные ребята, вполне вменяемые, но кому-то не хватало опыта, кому-то способностей. И всем сильно не хватало знаний C++.

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

Однако, ни одно из полученных мной решений не было работающим. Т.е. даже на простых обязательных операциях программы либо падали, либо чего-то не делали, либо делали неправильно. Не говоря уж о поведении во вполне предсказуемых некорректных условиях (пропущенный аргумент командной строки, неверные имена исходных файлов) – для таких очевидных вещей в программах даже не было предусмотрено проверок.

Низкое качество тестовых решений отражается и в низком качестве самого кода программ. Все(!) решения страдали одними и теми же проблемами:

  • отсутствие устоявшегося стиля кодирования (различные виды именования сущностей в одном и том же исходном файле);
  • использование глобальных переменных;
  • хардкодинг, иногда очень и очень жестокий хардкодинг;
  • очень большие по объему функции (нет нормальной функциональной декомпозиции);
  • дублирование кода (нет вынесения явно повторяющихся последовательностей действий в повторно используемые функции/методы).

Временами мне казалось, что если бы разработчик просто внимательно посмотрел на распечатку своей программы, он бы мог объединить 4-5 одинаковых фрагментов в одну функцию и сократил бы тем самым объем программы, как минимум, вдвое.

Может я слишком сурово отношусь к соискателям, но я убежден, что все вышеупомянутые проблемы – это как раз признаки плохого программиста и даже больше – признаки отсутствия способностей к программированию. Особенностям и тонкостям языка C++ можно научить, в конце-концов, это всего лишь обычный процесс набивания шишек. Но вот научить распознавать повторяющиеся фрагменты кода, имхо, невозможно. Человек либо их видит, либо нет.

Еще один критерий – может ли человек объяснить почему он написал именно так или не может. Даже объяснение “я не смог придумать ничего другого” гораздо лучше характеризует разработчика, чем “ну я не знаю” или “мне так захотелось”. Программирование – это такая профессия, которая требует от человека составления детального и подробного плана выполнения поставленной перед ним задачи (чем и является код программы). И если программист не может объяснить, почему в этом плане оказались те или иные пункты, то это опасный сигнал.

Какие еще впечатления? Вот, коротко:

  • тестовое задание перед собеседованием – это must have. Я много читал на форумах высказываний “Мол, почему я за бесплатно буду что-то кому-то писать” и боялся столкнуться с такими заявлениями. Теперь людей с такими заявлениями я буду посылать фтопку сразу. Когда цирк нанимает жонглера, вполне нормально, если жонглер покажет свое умение до первого представления. Вот так и здесь – покажи, что ты умеешь до того, как писать код для реальных систем;
  • активно общаясь на форумах я привык к тому, что большинство разработчиков находятся в русле современных тенденций (проникновение функциональщины в мейнстрим, начало many/multicore эры и т.д.). Ёптыть, как же это все далеко от реальности!

Такие дела в нашей центрально-европейской провинции. Надеюсь, что в крупных городах (Киев, Минск, Питер, Москва, Новосибирск и т.д.) получше.

пятница, 5 марта 2010 г.

[work; prog.c++] Ищу людей в свою команду (С++ программистов, в Гомеле)

Я рад сообщить, что в моей команде появилась открытые вакансии. Хотим взять нескольких толковых C++ разработчиков. Вот более формальное описание:

Работодатель

ЗАО Интервэйл – поставщик решений для электронной коммерции (например, системы “Мобильный Банк”). Занимается разработкой и внедрением собственных систем. Головной офис компании находится в Москве. Разработкой ПО занимается филиал в Гомеле, где и открыта вакансия.

Позиция

Ведущий C++ программист

Обязанности

Разработка ПО для телекоммуникационных задач и для задач, связанных с электронными платежами.

Занятость

Полный рабочий день. Возможно совместительство на время испытательного срока.

Требования

Высшее профильное образование.
Хорошее знания языка C++ (уверенное использование исключений, шаблонов, STL).
Умение писать простой и хорошо документированный код.
Умение работать с Subversion (или аналогичной системой контроля версий).
Опыт разработки кроссплатформенных приложений.
Опыт работы с реляционными СУБД.

Дополнительные плюсы:

  • опыт написания 24x7 приложений на C++;
  • опыт работы с библиотеками типа ACE, POCO, Qt;
  • опыт работы с динамическими языками вроде Ruby и Python.

Размер оплаты

Устанавливается по результатам испытательного срока. От 1000у.е. и выше, в зависимости от способностей, ответственности и самостоятельности.

Испытательный срок

Обязательный испытательный срок до одного месяца. Размер оплаты на время испытательного срока определяется по результатам собеседования.

Порядок прохождения собеседования

Присылаете свое резюме на адрес eao197 собака intervale точка ru (и копию на eao197 собака gmail точка com). Вам высылается тестовое задание, которое вы должны выполнить за два дня. Если тестовое задание выполнено, то вам назначается собеседование.

Условия работы

Гибкий рабочий график.
Офис в центре Гомеля.
Занятия английским языком для желающих.
Бассейн для желающих за счёт фирмы.
Ежегодные выезды на природу ("день здоровья"), корпоративы за счёт фирмы.
Дружный молодой коллектив.
Ежегодные походы на байдарках для желающих (это за свой счёт).
Турник и брусья в офисе.

Контактная информация

Евгений Охотников, eao197 собака intervale точка ru

Теперь менее формально. Указанная в официальном объявлении зарплата – это базовый уровень для нормального C++ника. Для опытных и самосоятельных разработчиков размер оклада будет обсуждаться в более широком диапазоне :)

Я ищу толковых, нормальных, вменяемых людей, которые хотят учиться и могут работать. Особенно людей, которые хотят сами создавать новые вещи.

Под катом небольшие рекомендации по составлению резюме ;)

[prog] ACE обновилась до версии 5.7.7

Вышла новая версия библиотеки ACE – 5.7.7. Из основных изменений:

  • добавлена поддержка atomic-инструкций GCC (версий старше 4.1) для платформ PPC32/PPC64/IA64;
  • добавлена поддержка флагов –mcpu и –mtune, что может существенно улучшить производительность на процессорах IBM Cell;
  • улучшена производительность для таймера при работе с малыми временными интервалами;
  • для ACE_Time_Value добавлен оператор сдвига в C++ stream-ы.

Плюс еще несколько улучшений и багфиксов.

Соответственно, до версий *.7.7 обновились TAO и CIAO.

Скачать можно отсюда: http://download.dre.vanderbilt.edu/

Disclaimer: мопед не мой, я только дал объяву.

[life.humour] Подборка юмористических рекламных фотографий

Вот здесь: http://freshpics.blogspot.com/2010/03/hilarious-print-advertisements.html

Для затравки: