суббота, 13 февраля 2010 г.

[life.travel] Путешественник Глеб Травин – на велосипеде вокруг Родины

Недавно попалась ссылка на статью Глеба Травина “Без скидки на время” (опубликована в “Вокруг Света” в ноябре 1975). Очень интересно. Глеб Травин в 1930-х проехал на велосипеде вдоль границ СССР. Эта статья – небольшой рассказ о том, как путешествие проходило на Севере.

Для заинтересовавшихся еще несколько ссылок:

Еще раз о «человеке с железным оленем» – статья о Глебе Травине в “Вокруг Света” (сентябрь 1984).

Вызов, брошенный Травиным – статья в “Вокруг Света” о попытке повторения путешествия на велосипедах по Северу (май 1988).

Человек с железным конем – повесть Александра Харитановского о Глебе Травине.

[life] Цитаты из “Оружия победы”: сила руководителя

Цитирую “Оружие победы” В.Г.Грабина, глава “Тринадцать энтузиастов”:

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

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

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

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

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

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

Имхо, очень похоже потом писали ДеМарко и Листер в “Человеческом факторе” про организацию работы программистов.

пятница, 12 февраля 2010 г.

[comp.prog] Amazon’s Dynamo: распределение объектов по узлам системы

Продолжение рассказа о статье Dynamo: Amazon's Highly Available Key-value Store. Начало можно найти здесь.

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

Dynamo рассматривает ключи и значения сохраняемых объектов как непрозрачные блоки данных, структура которых Dynamo не интересует. Получив ключ объекта Dynamo строит его MD5 хеш и этот хеш потом используется для распределения объекта по узлам Dynamo.

Распределение ключей между узлами выполняется с помощью несколько модифицированной схемы consistent hashing. Все “адресное пространство” MD5 значений разбивается на диапазоны. И каждому узлу Dynamo случайным образом выделяется номер диапазона. Когда для какого-то конкретного ключа вычисляется MD5 хеш, то по значению хеша устанавливается номер диапазона, к которому принадлежит ключ. И запрос на обработку этого объекта передается соответствующему узлу.

Узлы провязываются в кольцо. Т.е. узел, обслуживающий первый диапазон, связывается с узлом, обслуживающим второй и последний диапазоны (второй узел связывается с первым и третьим узлами и т.д.). Т.е. если последовательно двигаться от одного узла к другому, то можно вернуться к самому первому узлу.

Каждый узел в кольце хранит значения объектов с (N-1) предшествующих ему узлов кольца. Например, пусть N=3 и есть часть кольца с узлами A, B, C, D. Узел D будет хранить объекты с ключами, попадающими в диапазон (C,D], а так же будет хранить копии объектов с ключами из диапазонов (A,B], (B,C]. Таким образом, значения объектов реплицируются на N узлов.

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

В Dynamo введено так же понятие виртуального узла. Т.е. в действительности каждый физический узел обслуживает не один диапазон из глобального адресного пространства, а несколько. Поэтому каждый физический узел выглядит как несколько виртуальных узлов. Такое отличие от схемы consistent hashing по мнению разработчиков более выгодно, поскольку позволяет эффективнее распределять нагрузку при добавлении или изъятии узла. И, что очень важно, количество виртуальных узлов, которые будет обслуживать физический узел, может определяться мощностью физического узла. Т.е. мощная машина может обслуживать 10 виртуальных узлов, а более слабая - всего 5.

Список узлов, отвечающих за хранение конкретного ключа, называется списком предпочтений (preference list). Благодаря тому, что по ключу можно определить номер диапазона, а узлы, обслуживающие соседние диапазоны провязаны в кольцо, каждый узел способен построить список предпочтений для своего диапазона.

Со списком предпочтений связана маленькая деталь. Список предпочтений содержит N элементов. Но из-за наличия виртуальных узлов может оказаться так, что количество физических узлов в списке предпочтений будет меньше. Поэтому список предпочтений строится так, чтобы в нем находились только разные физические узлы.

Для обеспечения согласованности и надежного хранения данных Dynamo использует схемы на основе кворума. При конфигурации системы задаются параметры N (количество реплик), R (минимальное количество узлов, которые должны участвовать в операции чтения данных) и W (минимальное количество узлов, которые должны участвовать в операции записи данных). Для обеспечения кворума значения R и W выбираются так, чтобы (R+W)>N. При этом, однако, слишком большие значения будут отрицательно влиять на отзывчивость системы.

Узел, на который Dynamo адресует запрос put или get, называется узлом-координатором. Обычно в качестве узла-координатора выбирается один из первых узлов в списке предпочтений для ключа.

Получив запрос get, узел-координатор адресует его первым живым N узлам из списка предпочтений. Затем ожидает R первых ответов. Получив их, узел-координатор возвращает ответ клиенту. Если же координатор получает несколько независимых версий объекта, то он возвращает клиенту все полученные версии, чтобы клиент сам выполнил их слияние.

Получив запрос put, узел-координатор модифицирует временную метку объекта и сохраняет ее локально. После чего передает эту версии первым живым N узлам из списка предпочтений и ожидает подтверждений от них. Получив W-1 подтверждение, координатор считает запись успешной.

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

[life.photo.cruelty] Правой пяткой в левое ухо!

Никогда не видел петушиных боев. Похоже, жестокое дело:

Этот бой – часть празднования приближающего Нового Лунного Года в Китае.

Найдено в очередном выпуске WSJ’s Pictures of the Day.

[life.humour] Богомол хочет поймать курсор мыши

Вроде бы, жук настоящий. Несколько дней прожил в доме, оголодал настолько, что стал охотиться на “мышиный” курсор. Лает, правда, не он, а соседская собака ;)

Найдено здесь.

четверг, 11 февраля 2010 г.

[life] Цитаты из “Оружия победы”: самодурство начальства

Цитирую “Оружие победы” В.Г.Грабина, глава “Директора меняются, недостатки остаются”.

Как-то в цехе я обратил внимание на то, что щит пушки что-то уж очень легко поддается рихтовке, то есть правке. Мне это показалось странным: не может закаленная броневая сталь быть такой податливой. Подумал: может быть, щит не закален? Попросил принести паспорт и обнаружил грубейшее нарушение: щит был изготовлен не из броневой стали, а из углеродистой. Еще больше я поразился, когда увидел, что контролер ОТК подписал этот паспорт. Попросил пригласить контролера и от него услышал, что директор лично приказал пустить на броневой щит углеродистую сталь. Я не мог поверить ему: углеродистый лист никогда не заменит броневого, а директор хорошо знает назначение щита — укрывать орудийный расчет от вражеского огня.

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

На мой вопрос Дунаев ответил вопросом.

— Я на заводе хозяин или вы? Я могу давать любые указания, которые считаю нужными, и никому не разрешу их отменять. Никто на заводе не имеет права их отменить!

— Вы директор, это всем известно,— сказал я после небольшой паузы,— но это не дает вам права не выполнять требований чертежа, который утвержден заказчиком. Не выполнять эти требования — значит поставлять армии некондиционную продукцию. За конструкцию пушки отвечает КБ. Поэтому без ведома КБ и без согласования с военпредом вы не можете делать никаких изменений. Ваше распоряжение о замене материала для щита незаконно. Прошу вас отменить это распоряжение и приказать все щиты, изготовленные из углеродистой стали, изъять из производства и снять с пушек как некондиционные.

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

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

— А я еще раз предупреждаю вас, что не позволю и не советую вмешиваться в распоряжения директора.

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

— Не вам судить и не вам заботиться о моем авторитете на заводе

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

— По долгу службы я обязан о вашем неправильном решении письменно сообщить по двум адресам: военпреду, чтобы он не принимал пушки с некондиционным щитом, и в высшие инстанции. Знайте, что этим я вас не пугаю, а избавляю от гораздо больших неприятностей, которые безусловно возникнут. А теперь пойду на свое место заниматься своими делами.

Я повернулся и направился к выходу.

Дунаев среагировал сразу.

— Подождите! — крикнул он.— Вопрос еще не решен. Я остановился.

— Значит, вы напишете?

— Обязан написать. И сегодня же.

Он задумался.

— А если я отменю свой приказ, все равно напишете?

— Тогда в этом не будет нужды. Дунаев сказал, что сейчас же отменит приказ. Я напомнил: надо еще снять те некондиционные щиты, которые уже поставлены. При мне Дунаев по телефону сделал все необходимые указания. Помня, как он вот так же по телефону давал одно распоряжение о моей командировке в Москву (когда уволил меня), а затем за моей спиной позвонил вторично и распорядился выдать мне деньги на проезд только в один конец, я на этот раз проверил: не последует ли другое указание. Нет, не было. Некондиционные щиты с пушек сняли, заготовленные детали щитов из углеродистой стали выбросили.

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

Кстати, когда в твоих руках появляется хотя бы какая-то власть, очень сложно не скатиться на аргументы “Потому что я так сказал!”

среда, 10 февраля 2010 г.

[comp.prog] Пример собственного синтаксического оверхеда ;)

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

/*!
* Вспомогательная функция для проверки наличия TLV и размера данных в TLV.
*
* \retval 0 если TLV не найдено или если длина его данных не совпадает
* с указанной в \a expected_length.
 */
const smpp_pdu_1::opt_param_t *
check_tlv_presence_and_value_length(
   //! Хранилище TLV, в котором нужно выполнять поиск.
   const smpp_pdu_1::opt_params_holder_t & tlv_holder,
   //! Идентификатор искомого TLV.
   const smpp_pdu_1::opt_param_t::tag_type_t tag,
   //! Ожидаемый размер значения TLV.
   const smpp_pdu_1::opt_param_t::length_type_t expected_length )
   {
      const smpp_pdu_1::opt_param_t * tlv = tlv_holder.opt_params().find( tag );

      if( tlv && expected_length == tlv->length() )
         return tlv;

      return 0;
   }

Сам смотрю и ужасаюсь – двадцать две строки, из которых полезных всего шесть! Но и заставить себя выбросить что-нибудь отсюда не могу, ДНК не позволяет.

Похоже, что я даже в Haskell-е за счет своего стиля писал бы код в 2-3 раза длиннее необходимого ;)))

[comp.prog] Tango 0.99.9

Приятная довость для D-шников: вышла очередная версия библиотеки Tango – Tango 0.99.9 (полный список изменений можно посмотреть здесь, а здесь список изменений, нарушающих совместимость с предшествующими версиями). Основные усилия при выпуске этой версии были направлены на подготовку к предстоящему релизу версии 1.0. Данная версия доступна как для DMD, так и для LDC (она расчитана на DMD 1.056).

Да, давненько Tango не обновлялась. Большое событие для D-шного сообщества, однако.

[life] Цитаты из “Оружия победы”: план мы выполнили, а остальное не наша забота

Цитирую “Оружие победы” В.Г.Грабина, глава “Тринадцать энтузиастов”.

КБ выдало в цехи чертежи полууниверсальной пушки А-51 для изготовления опытного образца. Я решил проверить в кузнечно-прессовом цехе, как идет дело с заготовками. Долго ходил от молота к молоту, от пресса к прессу, но не мог найти ни одной заготовки. Подумал, что они, видимо, уже отправлены отсюда в механический, но на всякий случай решил зайти к начальнику цеха Г. Н. Конопасову, спросить у него. Тот. подтвердил, что действительно большинство заготовок пошло дальше, а в кузнечно-прессовом остались только заготовки для ободьев колес. Объяснил, где они лежат. Я поблагодарил его, затем долго ходил вокруг да около указанного мне места и опять не нашел. Вернулся к Конопасову. Тот любезно предложил проводить меня. Мы пришли туда, где я только что был, и он, улыбаясь, указал:

— Вот они, лежат как миленькие.

Я не мог поверить: обод должен весить около 40 килограммов, а заготовки были приблизительно килограммов по 1200-1300.

— Вы не ошибаетесь? — спросил я.— Может быть, это заготовки для иных деталей?

Но начальник цеха твердо ответил: это и есть заготовки для ободьев колес.

В других цехах я повидал заготовки остальных деталей и опять был крайне поражен их гигантскими размерами. Вилка станины должна весить приблизительно 17 килограммов, а заготовку для нее сделали килограммов на 140. Выбрасыватель (это деталь затвора) по чертежу не должен превышать 700 граммов, а заготовка — около 15—17 килограммов. Жуткие заготовки! Чтобы получить из них готовые детали, нужно было чуть ли не девять десятых металла выбросить в стружку. Мало того, что это очень понижает производительность труда и повышает себестоимость, это снижает и качество деталей, так как при ковке металл уплотняется к периферии больше, чем внутри, и при термической обработке он также лучше прокаливается на периферии. Следовательно, при механической обработке в стружку уходит лучшая часть металла, а детали изготавливаются из худшей.

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

Мне кажется, что при разработке ПО разделение труда на архитекторов, программистов, тестировщиков и т.д., временами провоцирует точно такие же эффекты. Написал программист кусок кода, даже не озаботился его более менее полной проверкой – сразу же передал на тестирование. Он свой кусок работы сделал. А то, что потом этот же кусок вернется назад с N-ным количеством баг-репортов… Ну так это же совсем другая история.

вторник, 9 февраля 2010 г.

[comp] iLet Mini – iPad killer?

Вот какая вот штуковина, Haleron’s 7” iLet Mini, всего за $150:

Параметры:

CPU: VIA VT8505 (ARM926EJ-S) 300 MHZ
OS: Microsoft Windows CE 6.0
Screen: 7-inch LCD touch panel, WVGA wide-screen
Resolution ratio: 800 x 480 pixels
Memory: 128MB DDR II
Storage device: 2GB NAND flash, supports external 250GB portable HDD and 16GB SD card
Ethernet: 10/100M
Wi-Fi: Wi-Fi 802.11 b/g/n
Keyboard: software screen keyboard
Supports external keyboard
USB port: USB2.0 x 2
Card port: SD/MMC card slot, supporting 16G
Bluetooth wireless transceiver (optional)
GPS interface (optional)
Audio/Video: MP3/WMA/AAC/AAC+/CAT/WMV/AVI/YouTube files and more
Software Package:Word, Excel, PowerPoint, supports ANSI, UNICODE TXT, DOC,PDF,HTML,FB2 ,PDB, EPUB (non DRM).
Dimensions 188 x 114 x 24mm
12V DC power input
Sound effect: stereo speaker, external microphone
Battery with use extender: 2200mAh lithium, 4 to 6 hours. Optional 3300mAh lithium, 8 to 10hours

Процессор, правда, жидковат и оперативки мало. Да и экран хотелось бы 1024x768, как минимум. Но, блин, $150 за нормальный самостоятельный девайс с Ethernet-ом, WiFi-ем, двумя(!) USB разъемами и SD/MMC слотом – это ни в какое сравнение не идет с $500 за самую младшую модель iPad-а.

И, что хорошо, это всего лишь первая ласточка в подобных устройствах. Будем посмотреть дальше ;)

[comp.prog] Amazon’s Dynamo: версионность объектов

Так вот о статье Dynamo: Amazon's Highly Available Key-value Store (о которой я неделю назад говорил). Статья большая. Для меня оказалась интересной. Информации в ней много, всего не перескажешь. Так что, если кому-то эта тема интересна, то советую прочитать статью целиком. Я же у себя в блоге перескажу только то, что сам из нее запомнил.

Amazon Dynamo является быстрым, высоконадежным, распределенным хранилищем информации, представленной в виде пар ключ-значение. Это хранилище используется такими требовательными к быстродействию и надежности сервисами Amazon, как списки бестселлеров, корзины покупок, предпочтения пользователей, каталог продуктов и пр. Для этих сервисов не нужны сложные реляционные модели данных. Им вполне хватает всего двух операций, предоставляемых Dynamo: put для (пере)записи данных и get для чтения.

Главной особенностью Dynamo является отношение к целостности данных. Известная четверка свойств транзакции в БД - ACID (Atomicity, Consistency, Isolation, Durability) - в Dynamo обеспечивается своеобразно. Поскольку невозможно обеспечить высокую производительность и высокую надежность (смотрим на CAP-теорему), то подход к согласованности данных в Dynamo свой собственный.

Например, пусть приложение A выполняет обновление значения для ключа K и приложение B в тот же самый момент выполняет обновление значения для того же самого ключа. Оба эти изменения будут приняты Dynamo. Каждое изменение объекта приводит к сохранению нового, неизменяемого значения. Этому значению будет приписана временная метка в виде вектора (см. vector clock). Элементами в векторе являются номера версий и имена узлов, которые сохраняли новую копию.
Например, пусть на узле S1 зафиксировали первую версию объекта D - временная метка для него будет иметь вид [[S1,1]] - т.е. первая версия на узле S1. Затем на этом же узле объект D перезаписали, и у него метка изменилась, приняла значение [[S1,2]] - получилась вторая версия на узле S1. Затем объект D модифицировало приложение A, но модификация пошла не через узел S1, как раньше, а через узел S2. Новое значение объекта получило метку [[S2,1],[S1,2]] - т.е. первая версия на узле S2 после второй версии на узле S1. В это же время объект D перезаписало приложение B, но запись пошла через узел S3. Так получилась еще одна, независимая, копия D с временной меткой [[S3,1],[S1,2]].

Так вот главная особенность Dynamo в том, что когда приложение запросит последнюю версию объекта D, то оно (при нормальной работе Dynamo), получит сразу две копии объекта - одну с меткой [[S2,1],[S1,2]], а вторую с меткой [[S3,1],[S1,2]]. И вот тут возникает вопрос: кто и как будет делать согласование этих версий?

Dynamo позволяет ответить на этот вопрос двумя способами:

  • такое согласование выполняет само Dynamo. Это очень негибкий способ, самым разумным выбором в котором будет оставление самого последнего изменения и выбрасывание всех предыдущих (т.н. last write win);
  • такое согласование выполняет запросившее данные приложение. Т.е. приложение создается так, чтобы быть способным получить несколько версий одного и того же объекта, после чего "слить" изменения из разных версий в одну согласованную версию.

Так вот, самым удивительным для меня оказалось то, что такой сервис Amazon, как "корзина покупок" как раз умеет сливать "параллельные" версии корзинки в одну.

Но вернемся к временным меткам. У нас оказался объект D с двумя разными значениями и разными временными метками. Приложение, которое такой объект получило, должно создать и сохранить его новую согласованную версию. Пусть оно это значение сделало и записало через узел S1. Тогда временная метка нового значения примет вид [[S1,3],[S2,1],[S3,1]]. Если же новое значение было сохранено через узел S4, то временная метка, подозреваю, примет вид [[S4,1],[S2,1],[S3,1],[S1,2]] (тут я не уверен на 100%, т.к. такого примера в статье не было, но думаю, что должно быть так).

Наличие имен серверов и версий во временной метке позволяет приложениям отслеживать отношения между версиями, скажем, находить общие корни (так, в приведенном выше примере было видно, что для [[S2,1],[S1,2]] и [[S3,1],[S1,2]] был общий предок - версия [S1,2]). Но, с другой стороны, временные метки могут расти в случае сбоев в сети, когда обновление версии объекта все время выполняется разными серверами. Поэтому в Dynamo используется простая схема ограничения роста временной метки: когда какой-то узел достигает определенного порога (например, во временную метку добавляется пара [Si,10], т.е. на узле Si объект модифицировался уже 10 раз), то самый старый элемент временной метки выбрасывается вообще. Потенциально, такая схема может создать сложности при слиянии версий, но на практике эта проблема ни разу не проявилась (или о ней решили не говорить ;).

Нужно еще сказать, что одна из основных целей, которые преследуются Dynamo - это высокая доступность для записи (т.н. always writable). Т.е. если приложение желает сохранить свои данные, то оно должно это сделать. Всегда. По определению ;) Именно поэтому разрешение конфликтов Dynamo выполняет не во время записи (поскольку из-за сбоев не все узлы, хранящие реплики объектов могут быть доступны для записи), а во время чтения. Поэтому-то приложения, запросив значение объекта, могут получить несколько значений с разными временными метками.

Из-за этого, как я понимаю, может произойти следующая ситуация: приложение прочитало объект D с узла S1, обновило его и попыталось записать обратно. Но узел S1 уже недоступен. Запись пошла на узел S2. После чего приложение вновь запросило объект D, но на этот раз узел S2 уже не доступен, а доступен S3, на котором лежит старая реплика с узла S1. Т.е. приложение вычитало старое значение после того, как успешно записало новое!

В принципе, если подумать, в подобной распределенной системе это вполне нормальное дело. Все довольно логично. Что меня в этом всем удивляет, так это то, что Amazon-овская "корзина покупок" работает с Dynamo. Ведь что может получиться: положил я себе в корзину книгу по Ruby (запись на S1), потом книгу по Java (запись на S2), только-только собрался класть книгу по C# (чтение объекта с S3) - глядь, а у меня в корзине только книга по Ruby. А где Java, спрашивается? ;) Вот это для меня оказалось очень и очень неожиданным, что "корзина покупок" в Amazon допускает такие коллизии (как раз они и разрешаются приложением посредством слияния параллельных веток объекта). Если бы я его проектировал, то я бы счел подобное поведение неприемлимым (и, вероятно, был бы не прав).

Пожалуй, пока на этом стоит остановиться. В следующий раз расскажу, как в Amazon Dynamo поддерживается распределение объектов между узлами и как выполняется репликация значений объектов.

Disclaimer: все вышеизложенное может являться следствием моих искренних заблуждений из-за неверного восприятия текста оригинальной статьи ;)

[life] Цитаты из “Оружия победы”: транспорт для иностранных специалистов

Цитирую “Оружие победы” В.Г.Грабина, глава “Мы — артиллерийские конструкторы”.

В 1931-м году Грабина переводят в КБ-2, в котором работают советские и немецкие инженеры. Немцев советская сторона наняла на контрактной основе, они занимались проектированием новых артиллерийских систем. Советские инженеры были на вторых ролях, насколько на вторых можно понять отсюда (Фохт – это начальник немецкой группы инженеров):

На советских инженеров Фохт не обращал внимания, для него эти люди в коричневых халатах почти не существовали. Да и о чем ему было с ними разговаривать? Заняты они были копировкой, изредка — отработкой самых второстепенных деталей, что называется "осмысленной деталировкой",— очевидно в отличие от "неосмысленной", которая с успехом могла быть проделана обыкновенным чертежником, но к которой из месяца в месяц были прикованы русские конструкторы. Считалось, что будущий конструктор должен вычертить от 3 до 5 тысяч деталей, прежде чем его можно допустить к проектированию мелких узлов. Если принимать эту программу всерьез, то для ее осуществления потребовалось бы от шести до десяти лет. Следовательно, непосредственно проектированием русские инженеры стали бы заниматься не ранее 1937 или даже 1941 года. Эти правила были установлены только для русских конструкторов. На юнцов, приехавших из Германии вместе с опытными конструкторами, эта система не распространялась. И что поразительнее всего: люди, на которых была возложена задача представлять в конструкторском бюро интересы Советского государства, безропотно подчинялись этим порядкам.

Удивительно, но до перевода Грабина в КБ-2 такое положение дел многих устраивало. По крайней мере, серьезные попытки переломить ситуацию начались (если верить автору книги) с публикации Грабиным статьи в стенной газете КБ-2. Интересна реакция на ее появление:

Как тихо было прежде в конструкторском бюро, и как бурно стали развиваться события с этого дня! У стенгазеты постоянно толпился народ, шли горячие споры. Немцы, естественно, были против. Что касается русских, то почти все поддерживали мои предложения, лишь немногие стали оспаривать их. Ведь при распорядке, установленном немцами, от советского конструктора фактически ничего не требовалось. Если он не хотел, он мог вообще ничего не делать. Путь же, который предлагал я, требовал от нашей молодежи напряженной работы и полной отдачи сил. Некоторым это не понравилось.

После чего Фохт попытался задавить наших специалистов авторитетом, а когда это не удалось, то устроил “ход конем” – собрал вещи и уехал (хотя и не мог этого сделать по условиям контракта). Естественно, для Грабина это не могло закончится просто так:

…Он ничем не мотивировал своего отъезда и ничего о нем не сообщил заранее, но это было истолковано некоторыми как следствие моей "грубой" и "неделикатной" манеры обращения с иностранными специалистами. Меня уже обвиняли "в уклоне" и пытались наклеивать на меня всевозможные ярлыки…

…Среди моих противников были и люди честные, но слабохарактерные,— на них демарш Фохта произвел паническое впечатление.

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

Однако меня не хотели слушать, и на следующий день стенную газету с моей статьей сняли…

Грабина хотели в приказном порядке перевести из КБ-2 в другое место, но он дошел до заместителя начальника Вооружения, комкора Ефимова и приказ о переводе был отменен. А затем в КБ-2 вернулся и Фохт.

Ну а теперь обещанная цитата, которая сильно меня зацепила:

Публикуя статью в стенгазете, я, конечно, знал, что она далеко не всем придется по вкусу, но не ожидал, что среди наших товарищей найдутся люди, которым безразлично будущее советской конструкторской мысли, люди, рабски подчиняющиеся иностранцам не только на работе. От общежития до места работы сотрудников Фохта возил специальный автобус — это было оговорено в условиях контракта. Наши инженеры, командированные в Москву из других городов, в их числе и я, жили в этом же доме. Нам, конечно, было удобно пользоваться "немецким" автобусом, и нам это разрешалось, но при условии, что мы не будем занимать сидячих мест, предназначенных для немцев, а будем стоять в проходе. Я проехался таким образом один раз, это показалось унизительным. Я предложил своим товарищам ездить на работу городским транспортом. Большинство согласилось со мной, но нашлись и такие, кто продолжал ездить в автобусе, давая "хозяевам автобуса" пищу для всевозможных шуточек и попросту оскорбительных замечаний.

Классно! Немцам транспорт, а наши – это же наши, им транспорт не нужен, перетопчутся. Хотя и барскую милость проявить можно – пусть с немцами ездят, но только чтобы господские места не занимали, а то ведь рылом не вышли. Трындец, о таком отношении к иностранцам я то ли у Салтыкова-Щедрина, то ли у Радищева читал. Ничего на Руси не меняется – уверен, сейчас было бы то же самое.

PS. Еще один штришок. Когда Грабин появился в КБ-2, начальником КБ был некто Шнитман:

По знакам различия Шнитман — высокое должностное лицо, но постоянная угодливая улыбка на его холеной физиономии совсем не соответствует его воинскому званию. Шнитман бесшумно скользит по паркету и всем своим видом старается показать, что для Фохта он готов на все. Молодые советские конструкторы прозвали его "дипломатом". Он действительно раньше бывал за границей с какими-то поручениями Внешторга, в артиллерии же ничего не понимал, что, впрочем, его не беспокоило.

[life] Читаю книгу В.Г.Грабина “Оружие победы”

В очерке В.М.Чунихина “Зачем Сталину была нужна власть” встретил упоминание книги Василия Гавриловича Грабина “Оружие победы”. Заинтересовался, нашел ее на militera.lib.ru. Сейчас читаю с большим интересом и удовольствием, практически “запоем”.

Биографическая справка: ГРАБИН Василий Гаврилович (1899/1900–1980), конструктор артиллерийского вооружения, генерал-полковник технических войск (1945), доктор технических наук (1941), Герой Социалистического Труда (1940). Член КПСС с 1921. Окончил военно-техническую академию им. Ф. Э. Дзержинского (1930). Под руководством Грабина созданы 76-мм пушки образца 1936 (Ф-22), образца 1939 (УСВ) и 1942 (ЗИС-3), 57-мм пушка образца 1943 (ЗИС-2), 100-мм полевая пушка образца 1944 (БС-3), которые широко применялись в войну. Депутат Верховного Совета СССР в 1946-1954. Государственная премия СССР (1941, 1943, 1946, 1950). Награжден 4 орденами Ленина, орденом Октябрьской Революции, 2 орденами Красного Знамени, орденами Суворова 1-й и 2-й степени, Трудового Красного Знамени, Красной Звезды. (Великая Отечественная война 1941-1945. Энциклопедия. Москва, "Советская Энциклопедия". 1985. Стр. 221.)

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

понедельник, 8 февраля 2010 г.

[management] Цитата о полезности отсрочки объявления тяжести наказания

Цитата из беседы Константина Симонова с адмиралом И.С.Исаковым:

В прусском уставе еше бог весть с каких времен, чуть ли не с Фридриха, в уставе, действующем и сейчас в германской армии, в обоих — восточной и западной, между прочим, есть такое правило: назначать меры дисциплинарного взыскания нельзя в тот день, когда совершен проступок. А надо сделать это не ранее, чем на следующий день. То есть можно сказать, что вы за это будете отправлены на гауптвахту, но на сколько суток — на пять, на десять, на двадцать, — этого сказать сразу нельзя, не положено. Это можно определить на следующий день. Для чего это делается? Для повышения авторитета командира, для того, чтобы он имел время обдумать свое решение, чтобы не принял его сгоряча, чтобы не вышло так, что он назначит слишком слабое или слишком сильное наказание, не выяснив всего и не обдумав на холодную голову. В результате всем будет ясно, что это неверное приказание, а отменить он уже не сможет, потому что оно, это взыскание, будет Уже наложено.

Насколько все разумно! Блин, самому бы теперь научиться следовать этому правилу.

[life.photo] Классный зимний снимок птички на ветке с ягодами

воскресенье, 7 февраля 2010 г.

[life] Скажу и я свое фи в адрес гомельского Гаранта

Есть у нас в городе провайдер кабельного телевидения и Интернета под названием Гарант. Про качество евоного Инета сам судить не могу, но слышал в свое время немало нареканий, поэтому подключился на ByFly. А вот клиентом кабельного телевидения от Гаранда мне пришлось стать, поскольку выбора не было.

До вчерашнего дня претензия была одна – каналы они меняют сами по каким-то своим соображениям. Не часто, к счастью, но бывало. Транслировали ОРТ российский – потом “бах!” и нет его. Были каналы TV1000, потом что-то где-то перемкнуло и нетути их.

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

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

Приходит мужик к врачу:
-Вы знаете, мне кажется что я - гей!
-Та-ак, давайте разберёмся. Вы артист?
-Нет!
-Значит вы - художник?
-Нет!!
-Ну тогда 100 пудово вы - писатель!!
-Нет, доктор, я - сантехник!
-Хе! Тогда какой же вы - гей? Вы просто напросто - ПИДОР*С!!!

[life.humour] Медицинские анекдоты и байки

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

Приходит ко мне сегодня женщина и говорит: “У вас вчера иногородняя кровь сдавала на анализ, мне нужно результаты забрать”. А я ей: “У нас каждый день по 50 иногородних анализы сдают, вы мне ее фамилию скажите!” А она: “Иногородняя – это фамилия.”

А теперь ссылка на большое собрание медицинских баек, о степени достоверности которых я не имею ни малейшего понятия (местами используется ненормативная лексика): http://dpmmax.livejournal.com/2010/01/16/

Вот одна, коротенькая для затравки:

На обходе в Институте им. Бакулева дежурный врач докладывает, стоя рядом с кроватью свежепрооперированнного больного:
Дежурный врач: - "Мы утром пописали".
Профессор: - "Это за*бись! А больной?"

И в дополнение еще большой сборник медицинских анекдотов из того же “блога добрых психиатров”: http://dpmmax.livejournal.com/2010/01/14/

Несколько коротеньких оттуда “на пробу”:

-Доктор, у меня х*й не стоит?
Доктор с опаской оглядывается по сторонам.
-А кого это ты здесь е*ать собрался?

- Доктор, меня постоянно преследуют скинхеды.
- А зачем же вы их ко мне привели?

Сидит психиатр в пустом кабинете и говорит:
- Итак, расскажите, с какого времени у вас появились эти видения?..

[life.photo] Фотографии Юрия Бондера: работы в жанре “ню”

Заключительная серия снимков фотохудожника Юрия Бондера. На этот раз из очень скользкого жанра “Ню”.

депрессия
«депрессия»

ЗНОЙ
«ЗНОЙ»

WEB
«WEB»

F O R M S
«F O R M S»

Широкополое НЮ
«Широкополое НЮ»

Поскольку на photoline.ru нет простого способа вставлять снимки в блог, то дам просто ссылки на понравившиеся мне фото оттуда:
Лето
Холодно
Forms...

Другие работы Юрия Бондера в этом жанре можно просмотреть на photosight.ru или photoline.ru.