Archive for the ‘Размышления’ Category.

Ещё одна причина, почему OpenID хорош

Настраивал сейчас SSL для того, чтобы поиграть с HTTPS и, постоянно напарываясь на предупреждения браузера типа «сертификат сайта — полная туфта», подумал вот о чём.

Большие хорошие сервисы, предоставляющие OpenID уже давным давно авторизуют пользователей по HTTPS, купив у того же Verisign-а нормальные дорогие сертификаты. То есть, если мы используем для авторизации такие сервисы, то мы способствуем тому, что пользователь меньше рискует: ему не нужно входить в систему по небезопасному HTTP-протоколу, передавая логины-пароли в открытом виде.

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

Правильный OpenID

Немного об IKEA

Знаете, в последнее время я почти каждый день пишу что-то в софтюниковскую почтовую рассылку. Оставим в стороне вопрос о том, зачем я это делаю, сегодня я хочу показать одно из таких писем. Кажется, оно может быть интересно не только моим коллегам.

Всем привет.

Собирал сегодня небольшой комод. Очень красивый, кстати.

Представьте себе куб светлого дерева со стороной около полуметра. Поставьте второй такой же сверху, в нижнюю половину поставьте один синий ящик, а в верхнюю — два. Прикрутите три красивых полу-металлических ручки и вы поймёте, что я имею ввиду.

Увы, этот комод был спроектирован и сделан не на заводах IKEA. Направляющие пришлось немного «подкручивать», в пакете с крепежом было 2 лишних деревянных колышка (у них какое-то мудрёное название, которое я не запомнил), зато никто не положил болты для ручек (дырки есть, а вот болтов нет), которые, похоже, покупались вообще отдельно.

Инструкция по сборке представляет собой лист А4, где на одной половине большая таблица со списком всего крепежа (он навален в пакет скопом, поэтому его ещё нужно было рассортировать) и некоторых других деталей. Ниже инструкции «рекомендуемая последовательность сборки», изобилующая непонятными специальными терминами. Вторую половину инструкции занимает типичная одинокая картинка, в которой многие детали сборки непонятно или попросту скрыты поверхностями деревянных панелей.

Сами панели скроены так, что я (собрав за свою жизнь довольно приличное количество мебели) в конце концов всё-таки поставил верхнюю крышку задом-наперёд, из-за чего всю конструкцию пришлось опять раскрутить. О том, как я ставил одну из боковых стенок, какой-нибудь бард вполне мог бы спеть целую героику. Дело в том, что панели раскроены так, что одна или две из них стоят не «в торец», а уголок к уголку. Конечно, функциональность от этого никак не пострадала, но вот собрать это в две руки (у меня больше нет, проверял) было делом непростым — они же друг друга не держат, поэтому заваливаются в стороны, чуть не ломая колышки, на которых стоят.

Кстати о колышках. Их диаметр и длина всегда известны. Ещё раз повторю: всегда. И если с диаметром на заводе худо-бедно разобрались, то вот с длиной дела чуть по-хуже. Фрезеровщик, нарезающий отверстия в торцах панелей, вероятно обожает свою работу, поэтому клинья практически утопают в той панели, куда их вставляют. Вы пробовали закрепить две деревяшки с помощью клина, от которого остался «пупырышек»? А так, чтобы эта конструкция ещё и держалась?

Ну и, наконец, задняя стенка порадовала и напомнила самый первый эпизод «Равшана и Джумшута». Тот, который про «пакалотник ровна выпирать насяльника». Снизу стенка миллиметра на три оказалась выпирающей, а сверху ровно на эту же величину утоплена.

И всё же, тумбочку я собрал. Она — прекрасна! =)

Так причём же здесь IKEA, спросите вы. А вот причём:

Икейские направляющие практически идентичны тем, что использованы в вышеописанном изделии мебельной промышленности. Во всяком случае, я не нашёл отличий. Но когда ты их прикручиваешь, всё вставляется и ездит без каких бы то ни было дополнительных ухищрений.

Крепёж рассортирован и упакован в отдельные небольшие пакеты или связан каким-нибудь другим образом. Его ровно столько, сколько нужно. Стяжные саморезы вместо креста на голове имеют звёздочку, чтобы их легко и приятно было закручивать приложенным тут же специальным ключом с грамотно большим плечом (физику помним? плечо больше — усилие меньше). Для сборки икейской мебели обычно хватает этого ключа и молотка, чтобы прибить заднюю стенку.

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

О крое деталей этого шведского мебельного магазина я готов рассказывать часами. Вы в курсе, что одна и та же панель может быть использована в целой куче их моделей? Если вы имеете дома мебель IKEA, то наверняка это заметили. Да, они используют универсальные панели, чтобы упростить себе и другим жизнь. При этом все отверстия, углубления и пазы расположены таким образом, что редкую деталь можно поставить «не так». А если вы и поставите ещё задом-наперёд, то произойдёт, либо вы этого никогда не узнаете (деталь универсальна и ей всё-равно), либо заметите, что декоративный шпон приклеен к заднему торцу и его там никто никогда не увидит.

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

Причём IKEA известна своими минимальными издержками, стратью к экономии на всё, на чём можно экономить. А также огромной транснациональной сетью магазинов, стоящих исключительно за земле, принадлежащей самой IKEA (они никогда ничего не арендуют) и производящей все свои товары исключительно на полностью контролируемых заводах.

А начиналась империя IKEA с одного молодого человека по имени Ингвар, живущего в глухой холодной деревушке, который продавал ручки и прочую мелочь по почте.

В какой компании вы бы хотели работать? В той где дырки нормально не могут просверлить, или в той, продукция которой есть почти в любом современном доме?

Давайте будем помнить, что компанию делают именно те, кто в ней работает. И что от каждого из нас зависит то, в какую часть вот такого вот рассказа мы когда-нибудь попадём. Лично мне хотелось бы быть во второй.

Цензура им. Халявина

Имел нескромность в недавно развязавшейся дискуссии о спаме в жж Никиты Халявина (Профессионалы.ру) задать прямой и честный вопрос о том, как удалиться нафиг из сервиса.

Халявин даже ответил, но вопрос вместе с ответом стёр. Привожу его тут:

Вот теперь сижу и пытаюсь понять, зачем удалять вопрос и ответ? Нежто боится, что народ ломанётся пользоваться предложенным способом?

По ком звонит __call-окол

К сожалению, сегодня у меня в коде довольно много строк вида

public function load($guid) {
	return $this->loadAndExec('load_user', array('guid' => $guid), false);
}

Раньше, конечно, всё было ещё страшнее, но мой хороший и старый друг Денис Озеров, который работает сейчас в Крабице, натолкнул меня на мысль о том, что это тоже можно изменить.

В php у каждого класса существует возможность перехватывать обращения к несуществующим методам класса и обрабатывать их так, как вздумается. Для этого достаточно определить в классе метод __call(), в который передаются два аргумента — имя вызываемого метода и массив аргументов.

Таким образом, если мы научимся по имени метода строить имя запроса, передавая ему массив аргументов, то всю работу с базой данных в Natea можно сократить до метода __call, лишь изредка по необходимости описывая нетривиальные алгоритмы работы с данными.

Процесс работы на веб-сайтом в одно рыло

Дано: один разработчик и проект «с нуля».

Задача: формализовать процесс работы, чтобы на это больше не отвлекаться и не думать, что делать дальше в произвольный момент времени.

Попытка решения

1. Фиксация требований и пожеланий заказчика (как внешнего, так и внутреннего). Составить список функций продукта (feature set). Описать зависимости между функциями. Для каждой функции определить критерии её завершения.

2. Фиксация видения. Записать произвольным текстом своё личное видение проекта, отразив все требования, зафиксированные на предыдущем этапе.

3. Составление плана вех (итераций). Определить трудоёмкость и ценность (score) каждой функции. Распределить функции по вехам, учитывая из зависимость.

4. Исполнение. Создание ветки версионного хранилища. Последовательно исполнение вех.

4.1. Реализация функции. Выполнить работы по производству конкретной функции. Функция считается реализованной, когда все критерии завершения выполнены.

4.2. Фиксация изменений. Примененить изменения в версионное хранилище, включая актуализацию дампа БД.

4.3. Рефлексия. Оценка и фиксация реальной трудоёмкости и проблем, возникших при работе над функцией.

4.4. Пересмотр плана разработки. Отмена или перенос функций (если требуется).

5. Фиксация вехи. Фиксация ветки версионного хранилища. При необходимости, склеивание ветки с главной (merge в trunk). Веха считается достигнутой при завершении всех функций этой вехи.

Чего забыл?

Фреймворк для админок

Делаю сейчас систему управления для одного не очень большого, но слегка заковыристого сайта.

Сначала делал по-старинке, используя голову, руки, формы и проверки. Некрасиво получалось.

Потом попробовал делать на ext-js. Красиво, но очень уж монструозно и методология большого фреймворка начала сильно влиять на код.

Наконец, взял jQuery и соединил с первым подходом, но предварительно очень много поработал на бумаге. Думал, записывал, прототипировал. Получилось куда лучше первого и удобнее второго. На этом практически закончил.

Теперь терзает мысль: а ведь наверняка есть фреймворки, которых я не знаю, предназначенные именно для такой работы — делать интерфейсы управления. Не идиотские конструкторы форм (да, в них есть автопроверки, но это не делает их хорошими), не интегрированные в универсайльные сайто-фреймворки типа Code Igniter-а. Именно фреймворки для разработки интерфейсов управления.

Ведь, если до сих пор нет, то надо такой сделать. А вы как думаете?

Если делать, то какие задачи он должен решать? Какую меру кастомизируемости должен содержать?

Внутренний блоггинг

Сегодня корпоративные блоги используются, в основном, для «связи с потребителями». Конечно, этот инструмент пиара с нами теперь навсегда, однако я думаю, что есть область, в которой блоги могли бы быть существенно эффективней.

Я говорю о внутреннем блоггинге. Давайте представим себе пару кейсов.

Первый

У вас средней величины компания, в которой активно используются компьютеры, интернет и прочие блага цивилизации. На внутреннем сайте компании, который не доступен снаружи, есть многопользовательский блог. Авторизация по ActiveDirectory, автоматические уведомления и всё такое. Каждый сотрудник может написать в блог заметку на любую волнующую его тему: от жалобы на курение в туалете до похвалы отделу маркетинга за отлично продающийся продукт.

Подписавшись на уведомления по конкретной теме, директор, может целенаправленно и, что немаловажно, в удобное ему время, посмотреть, чем дышит компания, какие у неё трудности, а так же принять участие в обсуждении дизайна новой курилки.

Конечно, всё это можно сделать с помощью рассылки, форума или тупого совещания. Но блог подойдёт лучше всего по очень простой причине: формат «главного поста» и комментариев к нему подразумевает продуманность первого и удобство последнего.

Кейс второй

У вас нет офиса. Вы — распределённая по всему миру команда разработчиков. Конечно, все свои знания вы складируете в Wiki. Однако, вики-разметку нужно учить, да и для обсуждаений эта штука годится сильно с натяжкой. Имея блог вы можете жить синхронно, получая новости, идеи и обмениваясь опытом тогда, когда это своевременно и, опять же, удобно.

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

В общем, я считаю, что блоггинг в деловой сфере нужен не столько для пиара, сколько для работы. Что, кстати, вполне подтверждается словами Билла Гейтса, которые только что были опубликованы в блоге издательства «Манн-Иванов-Фербер».