2007-12-29

Экслер и фильмы

Уже не первый пишет "я давно не читаю Экслера". А я иногда читаю его рецензии. Мне нравятся его критерии и то, что он подробно и предметно объясняет своё мнение (это вообще редкость). Обычно, если он пишет, что фильм - дерьмо, то так оно и есть. Не знаю обратных примеров. С другой стороны, если он пишет, что фильм понравился, то это совсем не значит, что и мне он понравится. Чаще всего почитав рецензию я решаю, что не буду смотреть, поскольку это не моё. Например, терпеть не могу криминальные драмы. Очевидно, что я в результате смотрю меньше фильмов, чем Экслер. Он любит кино, а я - не очень. Потому мне забавно читать, как он разбирает какой нибудь дурацкий фильм. Пять минут чтения и я получил от этого фильма удовольствие. А мог бы мучиться полтора часа.

2007-12-27

Математика

Интересные проекты делаются в университетах. Завидки берут. http://www.sagemath.org/

Демократы в России

Из блога Бориса Немцова :

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

Звучит угрожающе! Хотя позже он уже пообещал сделать себе хакамаду. А я уж было надеялся на необычные дебаты.

Outlook & Lookout.

Надо попробовать: http://www.joelonsoftware.com/items/2007/12/24.html

2007-12-25

Год спустя

Просматривая мои прошлогодние итоги года замечаю, что, наметившиеся тенденции усилились, но событий не произошло. Субъективно не воспринимаю прошедший год, как приятный, хотя ничего неприятного в нём , казалось бы, тоже не произошло. Наверное нереализованные ожидания и характеризуют прошедший год. Итак снова по тем же пунктам. Первый раз в жизни: 1. Даже и не знаю, что сказать. Побывал в Сан Франциско? 2. Начал считать съеденный холестерин? Пора заводить тему "последний раз в жизни". Разочарования года: 1. Всё ещё не получил green card. Это уже не просто первое место в категории, а такое, что остальные можно уже не присуждать. Терпение иссякло. После нового года буду судиться с правительством Соединённых Штатов! А всё дело то, наверное, в Комсомоле. Всегда их терпеть не мог, так и здесь они меня достали, сволочи! 2. Работодатель надоел как больной зуб. Хотя, я в этом году поменял группу. Теперь не надо непрерывно ходить на дурацкие митинги, непрерывно переинсталлировать поломанный билд, ковыряться в .NET и заниматься прочими бессмысленными вещами. Сиди и пиши нормальный native code на нормальном (почти) C++. Но что-то не очень радостно. Скучно. Возникает чувство полной чужеродности, типа, как сидеть на стадионе, наблюдая игру, правил которой не понимаешь. Люди кричат, болеют, переживают за разные команды, а ты сидишь как дурак, совершенно безразличный к обеим командам, и не понимаешь, зачем ты здесь. 3. В результате, вдруг надоел даже дождь за окном и появилось желание снова куда нибудь уехать. Хочется нормального лета и нормальной зимы. Может, податься в Канаду? Компьютерные программы остались за порогом номинации. Да и программы всё те же и всё там же. Как, впрочем, и политики. Приятная ожиданность: 1. Сын поступил в университет (UW) не заканчивая High School. Без GC - единственный доступный вариант. 2. Отсутствие неприятных неожиданностей - самая приятная ожиданность. Покупка года: Ничего особенного не покупал. Так, по мелочи. Приятная мелочь: В номинации мелкой "приятной неожиданности", победил Nokia N800. Он теперь почти как тот компьютер, о котором мечтал в детстве. Хотя софт мог бы быть лучше. Я таскаю его везде. Завтракаю, читаю свежие RSS. Беру с собой в леса и горы, чтобы знать где нахожусь я, а где тропа. В кафе и в гостинице можно читать свежую почту. В машине можно включить навигацию голосом, а так же развлекать детей фильмами или всех вместе аудио-книжками. Вечером перед сном можно читать с экрана свежескачанную книжку. То же в очереди или в самолёте. Короче компьютерный "швейцарский нож", полезный, в отличие от своего сувенирного прототипа. Пожелание года: В жизни нужны надежды и перспективы. Не надо ждать событий, которые вы хотите произойти. Подталкивайте их, делайте их сами. И будьте здоровы, и Вы и Ваши близкие! И себе желаю того же.

2007-12-17

Free as in "free cheese".

Лицензия GPL определяет себя как "свободную". По английски свободный и бесплатный обозначаются одним словом, поэтому различие: ... you should think of free as in free speech, not as in free beer. Я бы не определил лицензию GPL, как свободную. Лицензия - это ограничение по определению. Она ограничивает вас в том, что вы можете делать с кодом. GPL v3, например запрещает использовать GPLv3 код для создания DRM, запрещает защищать код от модификации, запрещает использование проприетарных компонент, и т.д. GPLv2 в основном запрещает закрывать код или встраивать GPL код в проприетарный. Фактически обе лицензии запрещают смешивать GPL и не GPL коды. Как хотите, но это не "свобода". Это "free as in free cheese". Попытки использовать код практически, на работе, приводят к mouse trap. Современный код состоит из компонентов. В результате, многие фирмы запрещают сотрудникам не только использовать GPL код, но даже и читать его. BSD лицензия мне нравится больше. Она не навязывает то, как код будет использоваться. Всё, что требуется, это отметить оригинальное авторство, что вполне логично с точки зрения обычной этики. Жаль, что так много народу повелось на GPL, фактически закрыв свою работу для возможного практического коммерческого использования.

Тюрьма Азкабан

Alcatraz Island. Магическая тюрьма из "Гарри Поттера". Совпадает по описанию и название похожее. Знаете где это?

2007-12-12

Anyone can hack.

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

Как пользователь начинает работать с программой? Читает мануал? Нет. Он её запускает и смотрит. Дальше происходит примерно такой мысленный монолог:
... Так, тут обычное меню File с пунктами Open и New. Нажмем New.
... Ага, текстовый курсор, можно печатать. И тулбар с Bold/Italic, значит текст с атрибутами.
... Печатаю, строчка сама переносится, значит редактор не строчный, а по параграфам.
... Ага, выделеный текст можно сделать Bold, а ещё раз нажать и снова обычный.
... Снова нажал New, он спросил сохранять или нет. Значит New не открывает нового окна или закладки, а просто заменяет в том же окне.
И т.д.

Это обычный reverse engineering. Метод "научного тыка". Пользователь играется с приложением и строит у себя в сознании модель того, как эта программа работает. Причем это делает не какой нибудь крутой спец, а каждый рядовой пользователь! Часто это делается интуитивно и неосознанно. Человек даже не помнит как оно работает, но при изменении ощущает, что программа "стала работать как-то не так".

Всё это очевидно? Казалось бы очевидно, но не всем. Почему-то фразу "пользовательская логическая модель" часто воспринимается в штыки. Такая модель должна быть продумана заранее, включая терминологию, в которой и надо делать интерфейс и документацию. Эта модель должна быть проста, логична, полна и, по возможности, состоять из ортогонального набора функций. И она обязательно должна быть discoverable. Иначе будет не программа, а набор хитро запрятаных "пасхальных яиц". Никто ваш длинный readme и FAQ читать не будет, даже если его набрать с capslock.

Для того, чтобы понять нечто в первый раз нужна аналогия. Где-то было так сделано, можно предположить, что и здесь это может работать. Либо поможет "крутой спец", который поделится кусочком своей модели. Либо, конечно, книжка. Кстати, Вы читали инструкцию к вашему телевизору? А к часам на руке?

P.S. Название поймёт тот, кто смотрел Ratatouille.

2007-12-01

Есть такая партия, в шахматы

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

Есть "партия власти", которая по определению одна и которая олицетворяет путь на "сохранение завоеваний последних лет" в очередной холодной войне. Суверенитет как высшая ценность. Вероятно, она и соберёт большинство реально. Просто потому, что все остальные - партии нишевые.

Взять, к примеру, коммунистов, ЛДПР и, вероятно, Яблоко. Это партии, которые имеют шанс получить голоса определённой ниши избирателей, пройти на них в парламент (Яблоко - сомнительно), и договориться с партией власти, выторговывая себе определённые уступки. Это как компании-сайты продаются Гуглу или Микрософту за большие деньги, ибо имеют большую "пользовательскую базу", и реально за эти деньги продаются "души пользователей". Так и здесь: "голоса избирателей". Это нормально, в принципе, в политике, люди будут работать в парламенте, влиять на принимаемые законы, и т.д. и т.п.

Я бы поставил отдельно СПС сейчас, которая заявляет о том, что не будет договариваться. Вероятно именно поэтому такие нападки властей именно на неё. Фактически только СПС сейчас заявляет о реальном альтернативном пути развития. Это типичная партия западничества. Т.е. "открытая экономика", интеграция в Европу, Нато и т.д. Ну, да, и конечно, "распродажа земли и ресурсов", приватизация госкорпораций, и т.д. За ней должны бы стоять интересы международного капитала, но похоже не стоят или стоят не очень, вероятно, не надеясь на успех и предпочитая работать с существующей властью. СПС выглядит слишком радикально со своей непримиримостью.

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

"Другая Россия", претендующая на то же самое место, как уже неоднократно сказано, партия только в смысле шахмат, и не выбираема.

Есть ещё всякие "Истинные Патриоты Матери-Отчизны" с какими-то совсем непонятными нишами.

2007-11-23

The Collapse of the Middle Class

Включаю телевизор, а там лекция такая динамичная и увлекательная. По унивеситетскому каналу. О крахе среднего класса в США. Сравниваются статистические данные за 1973 и 2003 годы. За тридцать лет, америка поменялась радикально. "Средний класс" вместо сбережений имеет теперь в основном долги. Сравнивается типичная семья, двое родителей и двое детей. Раньше, в основном, один родитель не работал. Теперь работают оба. Но денег, за вычетом фиксированных расходов (кредит за дом, страховки, счета, оплата childcare), теперь остаётся меньше в абсолютном выражении. И никаких резервов в случае потери работы или проблем со здоровьем! Да, очень похоже. Даже за те семь лет, что я здесь, заметны негативные изменения. Ухудшился трафик и сильно выросли цены на жильё. Мне, конечно, скажут, что в России с жильём ещё хуже... Но эта лекция была не про Россию. Это про США. Тут свои проблемы. Если интересны подробности, наберите заголовок в Гугле.

2007-11-21

MPlayer

Наконец-то появился нормальный видео-плейер. Играет почти все возможные форматы, например FLV. Свободный. С исходными текстами. С мощной командной строкой, которая позволяет делать всевозможные преобразования. Многоплатформенный. Без назойливой рекламы, бессмысленных "защит" и ненужных "альбомов". Просто плейер, который играет. Есть версия для Windows, Linux, и для моей Nokia N800. Причем на последней он играет несравненно лучше родного плейера. Последний год я замечаю постоянно, что свободный софт, будучи найден, обычно превосходит качеством и удобством софт коммерческий. Очередное тому подтверждение.

2007-11-14

Шок капитализма

Недавно, а именно в 90-летие ВОСР, ехал я по ночному хайвею и от скуки перебирал fm-каналы. Везде был какой-то тоскливый музон, то стенож, то пилёж, и вдруг я услышал некий осмысленный текст, не рекламый, типа "just ninety-nine ninety-nine" и не "support comes from you and blah-blah-blah foundation...", а содержательный, с ощущением интеллекта, что само по себе сразу навеяло на мысль о некоторой оппозиционности и альтернативности. Оказалось Alternative Radio (см. одноименный .org). И хотя финансирование у него всё равно "comes from you", но в тот вечер журналистка Naomi Klein с презентацией своей книги "The Shock Doctrine" приятно меня поразила. Я не ожидал этого здесь: оказывается есть люди, способные подвергнуть критике процесс Всемирной Либерально-Демократической Революции. Вообще-то журналистка не здесь, а в Канаде (а не поехать ли мне в Канаду?). Услышанный текст я пересказывать не буду. Но мне очень понравилось. Всё очень убедительно ещё и потому, что я своими глазами видел многое из описанного в процессе развала СССР. Только один пример. Window of opportunity. Недавнее цунами в Азии прошлось по мелким прибрежным рыбацким поселениям лишив их не только близких, но и средств промысла. Недавно избранное правительство позаботилось о них, поселив в лагеря для пострадавших, подальше от берега. И даже поставило вооружённую охрану, не подпуская к побережью. А затем быстро провело приватизацию побережья. Те, кто мог бы предъявить свои права сидели взаперти, оплакивая родных, а крупные туристические фирмы быстро всё поделили. И вот я о чём подумал. Нам часто говорят о преимуществах либеральной экономики. Но гипотеза либерализма не доказана. Совершенно не очевидно, что население выиграет, если освободить экономику и дать ей развиваться независимо и бесконтрольно. Мой опыт говорит, что скорее наоборот, поскольку цели населения и цели экономики не совпадают. И уж совершенно не понятно, как либеральная экономика связана с "демократией". Развитые демократии обычно формируются в результате долгой борьбы различных групп за свои права, формируя некий консенсус в противоречивых интересах сторон. Возникают всякие механизмы защиты бизнесов, потребителей, культуры, населения, и пр. Эти механизмы явно противоречат "свободной экономике" в её радикальном понимании, и они сидят как ком в горле у монополий, которым бы хотелось их отменить, но они не могут, ибо общественное мнение будет против. Чтобы отменить, нужны обстоятельства чрезвычайные, и если они произойдут вдруг (или будут организованы), это window of opportunity можно использовать, чтобы быстро перетянуть одеяло на свою сторону, пока все заняты внезапно нахлынувшей проблемой. Вот читал я программу наших "правых". Чем они правые? Проголосовал бы не будь они "правые". Нет, не верю я в либерализм. Это такой очередной традиционный развод лохов. Учёное слово, за которым скрывается экономический беспредел и деньги как высшая ценность. А вот что я не понял, это связан ли факт передачи с 90-летием ВОСР. Совпадение или нет? Update: совпадение. Вчера вечером они опять вещали. 94.9 fm, после восьми.

2007-11-12

Ratatouille

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

2007-11-05

OOPs - продолжение.

Начало: 1, 2, 3, 4.

Приведу один пример на "ядро" "объектной модели". Иногда подобную конструкцию называют "провайдером". Пример, конечно, дурацкий, но простой и для иллюстрации пойдёт.

Допустим мы делаем электронную таблицу, нечто вроде "экселя". Некий PM (или как они там ещё называются? системные аналитики?) написал спек, в котором раcписал "объектную модель". И написано там, что есть объект таблица, у него есть коллекция рядов, каждая из которых есть коллекция клеток, а уж клетка хранит одно значение, которое может быть константой или формулой.

Замечательно, сказали мы, и, не мудрствуя лукаво, написали как сказано. Всё просто и тривиально. После чего пришёл PM и сказал, что заказчик просит ещё коллекцию колонок, и каждая колонка - тоже коллекция клеток. Ну ладно, сказали мы и добавили. Хотя
это в нашей модели уже не так тривиально. После чего, заказчик захотел извлекать клетку прямо из таблицы используя две координаты. Тоже можно сделать. Сделали.

После чего заказчик сказал, что всё медленно и требует много пямяти. Таблица расходует слишком много пямяти на одну клетку, даже если там просто число. Поскольку число мы храним как величину типа "object" в объекте типа "cell", и указатель на него лежит в массивах внутри объекта "строка" и объекта "столбец". Ещё у нас в каждой клетке могут быть массивы указателей на зависимые клетки.

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

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

Только мы всё это зашипили, как новая беда. Новый PM, пришедший в вашу группу, взамен старого ушедшего с повышением, сказал, что мы должны перейти на интерфейсы вместо классов и потому мы сделаем новую версию "объектной модели", причём мы будем поддерживать обе сразу, смешано и одновременно: "Вот вам challenge проявить вашу technical excellence."

И как весь этот огород сделать? Очень просто. Надо сделать "провайдер". Или "ядро". Это внутренний объект. Про который не знает ни заказчик, ни PM. Который хранит состояние вашего реального объекта. А реальный объект у вас один - таблица. Всё остальное, все эти строки, столбцы и клетки - её составные части. Как клетки вашего организма - ваши составные части. То, что заказчик просит то извлечь клетку так, то сяк - показатель, что клетка - часть таблицы.

Ключевое слово здесь - "зависимость", "dependency". Клетки зависимы, а таблицы нет. Границы между данными надо проводить по направлениям с наименьшим зависимостями.

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

Псевдокод:

internal class TableDataProvider {
  ...
  public object get_value(int x,int y);
  public void put_value(int x,int y,object value);
};

public class Table {
  private TableDataProvider data;
  public Row get_row(int y){ return new Row(data,y); }
  public Column get_column(int x){ return new Column(data,x); }
  public Cell get_cell(int x,int y){ return new Cell(data,x,y); }
};

public class Row {
  private TableDataProvider data;
  private int row;
  internal Row(TableDataProvider d,int y){ data=d; row=y; }
  public object get_cell(int x){ return new Cell(data,x,row); }
};

public class Column {
  private TableDataProvider data;
  private int column;
  internal Column(TableDataProvider d,int x){ data=d; column=x; }
  public object get_cell(int y){ return new Cell(data,column,y); }
};

public class Cell {
  private TableDataProvider data;
  private int row;
  private int column;
  internal Cell(TableDataProvider d,int x,int y){ data=d; column=x; row=y; }
  public object get_value(){ return data.get_value(column,row); }
  public void put_value(object value){ data.put_value(column,row,value); }
};


Тривиально, не правда ли? Что в этом хорошего?
  1. Мы отделили пользовательский интерфейс от внутреннего. Теперь первый можно менять или сделать их несколько с разными версиями, работающие одновременно с теми же данными. И внутреннее представление можно менять и не трогать пользовательские интерфейсы.
  2. Все многочисленные объекты объектной модели создаются и существуют только пока они нужны пользовательскому коду и после этого уничтожаются. Они все будут эффективно собраны сборщиком мусора 0-го поколения.
  3. Явно видна и понятна стоимость решения. Хотите легкой в обучении и browseable объектной модели - вот её стоимость - несколько операторов new. Хотите эффективности? Давайте добавим get_value/put_value в объект table и немножко сэкономим.
  4. Все внутренние вычисления делаются внутри провайдера, пользовательские объекты тут вообще ни при чем.
  5. Возможны любые shortcut-ы, как вниз так и вверх. Например, можно добавить метод/свойство получающий объект "таблица" из любого объекта.
Как же мы храним данные внутри TableDataProvider? В массивах и хеш-таблицах. Желательно как value-type, без создания множества объектов, и без "boxing". Это уменьшит расходы памяти и упростит работу сборщика мусора. Можно создать специальные индексы для данных, и разместить данные в соответствии с "access patterns". А если ваша таблица будет настолько большой, что вы захотите запихнуть её в базу данных, переделайте провайдер и всё.

2007-11-04

Rainy Day

Тропа на гору Si в дождливое воскресенье.

2007-10-26

FAR - open source

С BSD-подобной лицензией! Я super-excited. Жду появления версий для линукса и для мака.

Иди в баню!

Праздник какой! Надо распечатать и на двери офиса повесить. Вообще, интересный блог: A Soviet Poster A Day. Рекомендую. На английском. Умно, интересно, без мозгопромывания, как это обычно бывает в таких случаях.

2007-10-24

Куда пропала Ximeta?

Оказывается они продались некоему "Klegg". Первый раз слышу это имя. Вот почему уже год ни сайт не обновлялся, ни продуктов не выпустили, из того что обещали. Жаль. Я ждал их винтов с гигабитным интерфейсом. Собирался даже сеть под это дело проапгрейдить. По скорости бы не было им конкурентов. Вот всегда так. Всё запатентовано, а кто-то купил и в унитаз спустил. Была фирма и нету.

2007-10-23

Выборы и политика

Уже не первый чел предлагает идти и голосовать за коммунистов. Типа партия "против всех". Поскольку не нравится то, что происходит. Вот моё мнение в нескольких пунктах, и это мнение может кому-то не понравиться до степени исключения меня из френдов. Я бы не сказал, что происходящее в России мне сильно не нравится. То, что я ожидал произойти, а именно: полный крах экономики, гражданская война, непрерывные перестрелки вокруг, голод и холод, распад на многочисленные княжества, контролируемые вооружёнными бандами, высадку десанта объединенных сил на ядерные объекты с целью их контроля и т.д., не произошло. Более того, даже уже и не похоже, что это как-то приблизилось, скорее отдалилось. То, что сейчас мне сильно не нравится в Российской жизни - это всё внутренние проблемы, например быстрая персональная автомобилизация в совершенно неприспособленной к этому городской среде - совершенно другого порядка проблема. Или, например, вечные проблемы, хамство, пьянство, воровство. Вопрос: почему я ждал, что всё будет столь плохо? Не знаю. Мне казалось, что всё к этому идёт. Наверное, я не очень хорош с прогнозами. Я примеряю на себя, но я отличаюсь, вероятно, от средне-российского гражданина. Но поднимая бокал в каждый новый год в течении примерно 10 лет до отъезда в штаты, я думал, что этот год был, наверное, последний мирный год. Я искренне не понимаю, почему не было гражданской войны. Все как-то тихо и спокойно перестроились и привыкли жить в новой системе. Итак, чья в этом заслуга? Может ничья. Может тех, кто споил возможных участников беспорядков. Вот муслимы не пьют... Может тех, кто занял народ "бизнесом", и с политических тем переключил на экономические. Может тех, кто не хотел катаклизмов. Тех, кто хотел жить здесь долго, спокойно и сытно. Той самой "партии власти". Явно уж не заслуга оппозиционных политиков, не журналистов и не интеллигенции, которым чем хуже, тем лучше. "Интеллигенция", к которой и сам, типа, принадлежу, в политическом смысле ведёт себя совершенно безответственно. Это люди глобальные, которым нужны открытые границы и глобальная экономика. Как только появляется возможность отъезда, исчезает страх перед возможными катаклизмами. Дальше можно готовить революцию из Лондона. Интеллигенция сотни лет борется с властью, выискивая слабые места и раскачивая государство. Чем хуже, тем лучше, тем важнее и весомее её протест. Если появляется умеренный реформатор, его надо уничтожить, как убили Александра Второго. Не может же интеллигенция начать сотрудничать с властью! Это предательство! Надо снести всё до основания, после чего и свалить с чистой совестью. Второй момент связан с Российским "антиамериканизмом". Честно говоря, живя в России я считал антиамериканизм нашим изобретением. Типа, мы придумали "вредную америку", чтобы скрыть собственное убожество. Боже, в какие глупости я только не верил! Ну, что, сказать? Полезно пожить в разных странах, чтобы понять, а не верить. Как в Америке относятся к России и русским? Смотря кто. Обычно никак, как мы, скажем, к Нигерии. Типа есть где-то какие-то дикие страны. С пренебрежительным снисхождением. Многие помнят, как их в школе учили прятаться под стол от советских атомных бомб. Уж какие могут быть в там учёные? Конечно, же из Германии всё вывезли. Власти, естественно, подходят, как это здесь принято, совершенно прагматически. Т.е. надо, во первых, как-то с выгодой использовать то, что там, в России, есть, а во вторых, надо как-то уменьшить её потенциальную опасность для себя, и т.д. и т.п. Это не ненависть, это прагматизм плюс превосходство. Ненависть, кстати, я встречал только у наших же эмигрантов. Некоторые уехавшие просто всё ненавидят скопом, вероятно, чтобы оправдать для себя отъезд. Какие-то мы все закомплексованные, всё нам надо оправдывать. А может эмоций не хватает в связи с отсутствием трамваев. Американец бы к психотерапевту пошёл, а этот сядет в интернете, ходит по российским же сайтам и "срёт в коментах". Уж эти наголосуют! Уж им то, точно, чем хуже, тем лучше. Уехав, я не чувствую права диктовать оставшимся как им жить. Хотя, я и никогда не формулировал, что "уезжаю отсюда" или "уезжаю навсегда". Я, как папаша Гека Финна, который считал, что не грех позаимствовать, если собираешься когда нибудь отдать. Я тоже может приеду обратно когда-нибудь. Так что я лучше вообще не пойду, чем плевать в урну, типа "вот вам, подавитесь". А то, что у партии в бумажке написано, "за что они выступают" - это фигня, реклама. Надо понять, кто эти люди и что у них за интересы. Не знаю. Во всяком случае ЕР - не шиза и не за "переделить".

Похожи, жрецы!

2007-10-20

Sammamish Valley

Катались с семейством на велосипедах.

2007-10-19

Халява.

Nokia предлагает файлить заявки. N810 будут продан за 99 евриков 500 разработчикам участвующим в конкурсе. Блогеры и активисты форумов так же могут попытать счастья. Жаль я не знаком с современными технологиями. Надо бы наверстать упущенное.

Убунта

Убунта новая вышла. Поставил. Upgrade качался ну очень долго. Результат - красиво и приятно. 2D эффекты приятнее, чем 3D, мне даже понравилось. Всё довольно гладко. Хотя Radeon-овский драйвер всё тот же, с теми же проблемами. Загоняет карточку в режим, откуда только перезагрузкой можно извлечь, но зато, если лишних кнопок не нажимать, то работает быстрее опенсорсного. Можно потихоньку переползать с винды. Моя цель - переползти до завершения поддержки XP. Вообще, есть опасение, что XP могут искуственно испортить последовательными апдейтами. Она сейчас конкурирует с вистой, и её достоинства - скорость и совместимость. Если напихать всяких дотнетов, забить память, замедлить, то потом переход на висту покажется ускорением.

2007-10-17

Nokia N810

Слухи ходили уже давно, а сегодня было официально объявлено о выходе N810. Фотографии здесь. Хотя, есть и на сайте Nokia.
Это следующая версия моей N800. Из нового там встроенный GPS, более быстрый процессор, клавиатура, вся немножко меньше. С новой версии операционки, которая, впрочем будет доступна и для N800. Обещана поддержка передачи звука через bluetooth.
Менять, вероятно, не буду. Не люблю выдвижные клавиатуры. Да и вообще, дизайн мне у N800 нравится больше.

2007-10-16

Высокий штиль

Известно, что чем человек выше, тем косноязычнее. Сначала мы привыкли к нашим партийно-хозяйственным деятелям, которые этого-того сиськи-масиськи. Потом привыкли к другим, которые вещают непрерывно и безостановочно, но не менее бессмысленно. Но в Компании - то же самое. Что-либо содержательное может сказать только SDE или начинающий DevLead. Остальные будут выражать восхищение ходом проекта, в котором такие замечательные инновационные фичи. Более вышестоящие менеджеры непрерывно excited и super-excited. А совсем наверху должны бы уже задыхаться от непрерывных оргазмов. Я думаю, что менеджерам по секрету выдают специальную траву. Что-то они там делают на manager meetings. Или, может, акции пропитаны специальным составом. Молодежь, вот, без иммунитета, сразу проникается. Организм молодой, чувствительный, возбудимый. Восторги даже до LJ долетают. А мне - не судьба сделать карьеру. У меня на этот невидимый запах, вероятно, аллергия.

Осень

Eёё Моё.

Пока ещё не моеее. Вот такая штука. "Eee PC 4G". Хочу. Вместо почившего Palm Foleo. Хотя дизайн не тот, совсем не тот. Это просто маленький ноутбук. Так что даже и не очень хочу.

2007-10-15

Билл Гейтс и Нигерия

The Nigerian government initially denied the Microsoft kingpin's application on the premise that they required proof he would not reside in Nigeria indefinitely, causing a strain on social services and a general nuisance for immigration. http://gizmodo.com/gadgets/stupid/nigeria-asks-if-bill-gates-is-a-mooch-307889.php

2007-10-10

OOPs - продолжение.

Начало: 1, 2, 3.

Немного повторюсь про инкапсуляцию, поскольку это важно.

Значит, инкапсуляция. Чёрный ящик с защищённой внутренней структурой и внешними интерфейсами.  Но обычно ещё к ней же относят и локальность. Т.е. практически во всех языках объект - это некий указатель на компактную структуру данных, хранящюю состояние объекта. В принципе, в языках, где объект - это нечто неспецифицированное, это может быть не указатель, а более абстрактный handle, который может быть, например индексом во многих разных массивах. Но я такого не встречал. Чаще всего это указатель. Зачем это говорю? Cейчас подойдём.

Значит написали мы черный ящик. Мощный, удобный, защищенный. Один объект - всё замечательно работает. Два объекта, десять объектов. Сто тысяч одинаковых объектов. Начинаются проблемы. Во первых уже давно надо нам объект искать. Если десять можно было показать пользователю, для ста, тоже сойдет, колесико у мышки спасает ситуацию, то тысячу уже сложно. Надо искать по параметрам, которые у нас, наверное, выведены как свойства. Есть в программе массив объектов (или, скажем, дерево), давайте мне возможность запросов. Linq скажут гордые своей осведомленностью, молодые программисты. Sqlite, скажут пожав плечами бородатые одмины. Вам нужен SQL сервер, скажут системные интеграторы и такие же аналитики.

Можно добавить в объект интерфейс для запросов. Для тысячи будет работать. А когда подойдем к миллиону, то ещё один для построения индексов. И тут мы обнаружим, что всё работает медленно. Долго загружается, долго индексируется, долго ищется и занимает кучу памяти. Даже закрывается долго! Ещё мы обнаружим, что если всё распечатать в текстовый файл, открыть в Фаре и поискать, то всё и откроется мгновенно, и найдется быстрее. Как же так, мы использовали самые лучшие объектные технологии, а без них быстрее? Может, таки прав аналитик, и надо всё засунуть в базу?

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

С точки зрения объектной, объектом становится весь контейнер объектов, и индивидуальные объектики становятся не нужны. Начинаются всякие вырезки и наборы, методы, работающие с вырезками и т.д. Произошла векторизация API.

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

Третья проблема - locks. Замки. Это вообще отдельная долгая история, которой касаться сейчас не буду. Просто разные поля часто требуют разных локов, но, при этом, защищены должны быть несколько объектов, или даже весь контейнер.

Короче мораль: много объектов - тоже объект. Неправильно! Не "тоже"! Только! Или никто не объект. А данные.

Объект - это его состояние. Его надо хорошо продумать и нормализовать. Удалить лишние состояния, особенно всякие "недоделанные". Атомарно создать, сразу "готовый". Сделать методы модифицирующие состояние, по возможности атомарно с нужным количеством параметров. И не надо всяких лишних объектных моделей и "свойств". Сделайте ядро с данными и потом, по просьбе трудящихся, можно навесить столько объектных моделей, сколько надо (а надо будет несколько, с разными версиями API...). Навесить снаружи. Не надо размазывать данные по объектной модели. Вы потом их не найдете и не соберёте. Тогда контейнерный объект сделается изменением этого ядра. Его можно будет перевести на SQL. И т.д.

Да... Скомкано и непонятно. Долгая история. Хотел коротко объяснить, но нет, не получается. Тут каждый довод можно объяснять, целая книжка получится.

2007-10-03

Одичал

Посмотрел фотки Нью-Йорка и понял, что совсем одичал. Не хочу в город. Вообще, ни в какой. Раньше поехать посмотреть мир означало бы для меня "города и страны". А сейчас только природу означает. Хочется посмотреть большой каньон, секвойи, Австралию, и т.д. А города с даунтаунами совсем не хочется. Я даже в Сиэтл езжу только по делам и сразу обратно. А в выходные - в леса и горы. Мы, мармоты, не любим толкучки и машин.

Разное

1. Да, спутник! Всегда завидую людям, которые делали что-то первыми, причем делали такое! Всё нижеперечисленное тоже работа, но как-то мелко. По совести надо было бы мне этим первым пунктом и ограничиться.
2. Все радуются открытию .NET-овских библиотек. Как говорится, с чем вас всех и поздравляем. Полезно, нет слов. Но в Гугле это никогда не нарисуют. Нет, это совсем не спутник.
3. Joost - мелочь, но интересно.
4. Новый Windows Blinds - работает поверх Висты. Упоминаю потому, что Вистовый Гуй не переношу. А с железями можно всё настроить. Кстати, если есть любители Висты, то наоборот тоже работает. Можно сделать всё размыто и полупрозрачно. Утверждается, что на хорошей карточке XP+WB быстрее, чем Виста.


2007-09-24

OOPs - продолжение 2

Начало: 1, 2.

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

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

Хорошая идея? Очень. Поскольку знать и помнить всё невозможно. Нужно ограничить информацию, количество оперируемых понятий и состояний. Всегда можно структурировать задачу, разбить её на части, на уровни, с учётом зависимостей. Теперь кодируем эти понятия и уровни в виде объектов и их методов. И готова программа правильная, объектная, понятная и развиваемая! Вперёд!

Говорите, не получается? Тут же всё просто. Значит делаем объект клиент, объект ресторан, объект стейк, объект официант. Дальше добавляем метод "сделать заказ". Кому добавляем метод? Эээ... Официанту? Нет, клиенту? Может ресторану? О, идея! Сделаем класс "менеджер заказов". И добавим его в ресторан. И с ним пусть все общаются. И диспетчер официантов. И очередь клиентов. Так, дальше, состояние заказа. Ага, в стейке хранить не будем. Какое состояние, когда он съеден? Нужен менеджер стейков. Или диспетчер. Клиент? Подожди, тут не до клиентов. Нужен менеджер очередей и диспетчер менеджеров.

А может ну их на хрен объекты? Сейчас быстренько организуем структурку состояния заказа, функцию добавить заказ с несколькими параметрами "ресторан", "клиент", "официант", и т.д. Как просто получается! А массив структур переделаем в табличку базы, всё просто получается. Но не объектно. Ладно, один объект оставим. Ресторан.

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

Мысль вторая - некоторые действия затрагивают несколько объектов сразу. Модель черного ящика с методами изменяющими "его" состояние, не работает, когда надо согласованно изменить состояние нескольких объектов. Старая добрая функция выглядит здесь наиболее уместно.

Третье - модель черных ящиков работает плохо, когда их много. Может потребоваться построить индексы для быстрого доступа, нужно распределять ресурсы, и т.д. Вплоть до того, что состояние "объекта" может быть не локализовано в одной структуре, а размазано по различным контейнерам в зависимости от типов запросов. Совет - сделайте большой объект с открытыми данными внутри. Это будет проще, чем постоянно передвигать внутренние меж-объектные перегородки.

Четвертое. Эээ... Забыл. Завтра вспомню.

2007-09-22

OOPs - продолжение

Мир состоит из объектов. Объект "я" сел в объект "машина", поехал по объекту "дорога" в объект "ресторан", где попросил создать экземпляр класса "стейк". Мне принесли объект "стейк", я его съел, отдал объекты "деньги", получил объект "чек" и т.д. Некоторые объекты вполне реальны. Я, машина, дорога, стейк. Все они локализованы в пространстве-времени, отличаются от окружающей среды, обладают своими особыми свойствами, ведут себя своим собственным образом. Некоторые объекты есть лишь в нашем воображении. Объект "King County" (местное административное деление), вполне условен и существует постольку, поскольку мы договорились его признавать в данных границах. Так же и свойства объектов, бывают вполне объективны. Например материал стейка, вес, даже с некоторыми оговорками вкус. А есть условные, например цена стейка, марка машины, её остаточная стоимость со всеми её помятостями, престижность этой машины в различных кругах (короче, далее по Пелевину). Все это зависит не столько от самого объекта, сколько от различных субъективных факторов нашей оценки этого объекта, от наблюдателя. --- Знаете, чем данный, например, текст отличается от программы? Любой текст пишется для его читателей. Этот текст рассчитан только на на один вид читателей - homo programmaticus. А любая программа имеет двух читателей - тех же homo, плюс компьютер. Эта двойственность делает программу текстом особенным, и эту двойственность читателя постоянно надо держать в уме при написании. Бывают программы, где человеческий читатель полностью игнорируется. Лишь бы компьютер сжевал, а на остальное наплевать. Их никто и не читает, выкидывают и пишут другую. Другой полюс - наплевать на компьютер. В том плане, что надо чтобы программа была понятна любому и это будет определять всю её структуру. Работает такая программа тоже не очень, её тоже приходится переписывать. Думаю примеры того и другого всем хорошо знакомы. --- Когда-то давно, задолго до того, как впервые подошёл к компьютеру, где-то в старшей школе, я придумал для себя термин "объектное мышление", как результат чтения советской прессы. Он означал разделить понятия принадлежащие объекту и понятия навешанные на него наблюдателем. Знаете, чем отличается "очередная гнусная провокация террористов" от "неудачно проведённой операции национально-освободительной армии"? Отношением к ним. В реальности просто была перестрелка противоборствующих вооружённых группировок преследующими свои, разные, цели. Очень полезный навык в различных областях, очень рекомендую. И в частности в программировании. В стадии анализа задачи очень важно понимать что принадлежит объекту, а что есть его отражение наблюдателем. А в стадии написания кода важно понимать, что пишется для компьютера, а что для человека. --- Ну так для кого пишутся классы? --- ... продолжение следует ...

2007-09-21

OOPs

Чувствую, пора писать статью про ООП. Которое объектно-ориентированное программирование, или, иногда, проектирование. Но не сегодня. Сегодня осталось всего пять минут. А пока я собираюсь с мыслями, давайте вспомним и подумаем, что же такое ООП? * Какое отношение к объектам имеют инкапсуляция, наследование и полиморфизм? * И что, собственно, это такое и зачем они нужны? * Почему они все вместе? * Какое отношение к ООП имеют языки C++, C#, C. * Какое отношение к ООП имеют базы данных? * В чем, собственно, выигрыш от использования ООП? * А в чем ловушка? Это не вопросы из учебника по информатике. Это очень важные практические вопросы, как показывает практика. А ответы, как показывает та же практика не столь однозначны, и не совпадают с ответами из учебника.

2007-09-20

По следам предыдущей темы

То же место, другое освещение. Это Nestle. У них тут даже не ферма, а учебный центр. Простая, старая, неглобализированная Америка ниже. Это Bob's Corn Maze. Лабиринт из кормовой кукурузы. В кукурузе протоптанны дорожки в виде лабиринта. За недорого по нему можно гулять. Тут же можно покататься на тележке и купить всякую ерунду, например тыквы. Не для еды, для украшения. Потом кукурузу скашивают, и получают тот же корм, что и без лабиринта. У местных фермеров, в пригороде, развлечение посетителей - один из основных источников дохода. Некоторые почти полностью перепрофилировались на атракционы. Ещё здесь любят лошадей держать, для верховой езды. Иногда попадаются ламы, не знаю, зачем их держат, но они очень симпатичные. Моя дочка, маленькая, всегда, когда их видела в окно автомобиля, восклицала "мама мыла ламу!".

2007-09-19

Snoqualmie Valley, Nestle Farm



Это не панорама, это серединка. Снято мыльницей, которой снимал подводные кадры на Maui.

Когда проезжаю по таким пейзажам, я завидую фермерам. Какое-то всё у них осязаемое, обоняемое, свежее, живое. Не то, что у нас, программистов, где всё виртуальное, мертвое. Даже баги и те виртуальные. Мертвое люминесцентное освещение, мертвый кондиционированный воздух, мертвые фразы, мертвые письма менеджеров с фальшивыми эмоциями. Неосязаемые продукты, неосязаемые товары. Офис как ячейка матрицы. Некрофилия. Постоянно хочется вырваться, разбить это чертово стекло и вдохнуть свежий воздух, ощутить, что кроме двоичного мира есть ещё мир реальный, в котором наше время ещё не истекло. Хочется заняться настоящими делами. Вот фермер - производит настоящую еду. Которую можно есть и чувствовать вкус.

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

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

А лучше всё-таки быть фермером, ездить на тракторе, убирать кукурузу, а в воскресенье катать ребятишек по corn-maze. Хочу на волю! Где солнце, дождь и ветер!


2007-09-13

Перечитывая старые книжки ... по программированию

Когда я был школьником, компьютеры казались передним краем технологии. Ещё были физика микромира и космос. Это то, о чем было жутко интересно читать, о чем хотелось мечтать. Я мечтал и читал. Изучал Алгол и Фортран, очень был впечатлён языком APL. Прошло несколько лет "теоретической подготовки" прежде чем удалось поработать на реальном компьютере. Мой первый компьютер был советский аналог PDP-11. Даже внешний вид был похож. Оперативная память на ферритовых кольцах. Один куб - 4К. Внешняя - перфолента. Вставные модули на транзисторах и микросхемах низкой степени интеграции, вентили, пары триггеров. Начальный загрузчик вводился на пульте переключателями в двоичном виде наизусть. Интерпретатор языка "FOCAL" был дизассемблирован, изучен и переделан. И ведь всё работало!

Спустя ещё несколько лет, когда я уже вовсю писал программы и под Unix-ом, и для разных других малоизвестных сейчас платформ, я обнаружил, что старые компьютерные книжки продолжают быть интересны и содержательны. То, что только появлялось в мире мини-компьютеров, было уже давно исследовано в мире мэйнфреймов. Язык Алгол-68, графическая система Алгамс, мощная графическая библиотека Графор, куча открытого фортрановского софта для научных расчетов. Система TeX для форматирования текстов. Я всегда тщательно просматривал технические букинистические отделы книжных магазинов, на которые некоторые коллеги смотрели снисходительно, типа, что там может быть, когда всё так быстро развивается.

Так вот, господа, программисты. Парадокс в том, что ничего, собственно, не развивается. Всё, что мы видим - это развитие аппаратной базы, которая действительно скакнула поразительно. Память не 4К кубы, а 4G чипы. Не перфолента на 32К, а винчестер 1T. Такт - не единицы мегагерц, а единицы гигагерц. Связь не по RS232 с соседней комнатой, а по оптоволокну с другим полушарием. Отсюда и прогресс. Хватает памяти и скорости справляться не только с текстами, но и со звуком и с видео.

Что касается софта, то тут прогресс не столь очевиден. Тот же TeX так и остаётся лучшей системой подготовки текстов, несмотря на все свои недостатки. Старая книжка по Algol-68 как была для меня источником идей по компьютерным языкам, так и осталась. Не слишком большой прогресс в операционных системах, языках или способах взаимодействия с компьютером. Диктовать компьютеру до сих пор нельзя, проще напечатать самому. До сих пор нельзя спросить на естественном языке. Классическое "Где накладные за прошлый месяц?". Или "Сколько я потратил на еду?" Всё до сих пор вводится в формы, в бланки, и т.д.

Очевиден прогресс в области видео и музыки, но он целиком обусловлен возможностями аппаратуры. Нет ничего, чего не было бы в том или ином виде раньше. Я видел черно-белый ray-tracing выведеный на АЦПУ (алфавитно-цифро-печатающее устройство, кажется). Браузеры тоже перешли плавно от устройств ввода-вывода текстовых руководств с гипер-ссылками, которые были давно к тому же самому, но дополненому картинками и работой через сеть. Современные графические системы типа Windows проигрывают про продуманности и мощности интерфейса старым системам САПР (CAD/CAM), где можно было выполнять графические операции с несколькими объектами, определять макросы на процедурных или функциональных языках, произвольно масштабировать видимое изображение, выделять цветом интересующие информационные слои и т.д. Ничего из этого нет не в Windows ни в OSX. Да ведь в Windows до сих пор нельзя правой стрелкой сдвинуться на поле справа от текущего, надо жать tab, или дёргать мышку!

Многие верят, что идею Windows придумали либо в Microsoft либо в Apple, что сборка мусора и байт-код придуман в Java или в .NET, а програмные компоненты означают COM, которые придуман в Microsoft. BCE Y BAC HEBEPHO (кто знает - той поймёт, в чем прикол фразы). COM придуман в DEC, в той же компании, которая и сделала вушеупомянутую PDP-11, а потом выпускала компьютеры VAX. А компоненты существовали задолго до этого в разных языках. Вышеупомянутый Algol-68 (68 - это год принятия стандарта) имел встроенную сборку мусора. Большинство интерпретаторов языков используют байт-код внутри, а, например, P-система, очень распространенная в 70-е годы, имела виртуальную машину, интерпретирующую байт-код, называвшимся P-кодом, который сохранялся в виде файлов, причём мог переносится между машинами с разными системами команд. Очень похоже на Java. Я даже не буду писать про Эльбрус, который настолько обогнал своё время, что мы подойдём к его концепциям лет через двадцать, не раньше.

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

Мне кажется, что пора возвращаться к основам, переосмыслить стереотипы, отказаться от них. Только тогда возможен дальнейший прогресс. Все эти файлы, каталоги, процессы и много чего, что было придумано, есть искусственные понятия, которые мешают двигаться вперёд больше, чем помогают. Они полезны, они выполнили свою функцию, как оператор goto. Пора переходить к чему-то более защищённому и структурному. Вот сижу, смотрю на Windows и знаю, что хочется совсем другого. И я знаю, что мне хочется. Сам удивляюсь, но я знал это всегда. Я в школе знал, что мне хочется, как должен работать компьютер, а как должен выглядеть компьютерный язык. Но если попытаться рассказывать, собеседник мгновенно начинает возражать (я пробовал :-). Хочется людям разного, а многим ничего вообще не хочется. "Оставьте всё как есть и не морочьте голову". Я иногда думаю, что есть люди, кто давно понял, например, как сформулировать единую теорию поля, но их просто никто не понимает и не слушает.

P.S. А о том насколько люди разные напишу в следующий раз.

2007-09-10

Работать совсем не хочется

Перебирая старые баяны. Забавный снимок, раньше не видел. "Навстречу космической угрозе".

2007-09-07

HDTV и .NET

Наконец то нашёл программу, которая бесплатно показывает HDTV с моего тюнера. Собственно, тюнер простой и маленький. Ловит HDTV канал и гонит цифровой mpeg поток по USB2 не раскодируя его. Получается относительно небольшой поток, вычислительная мощность в тюнере не требуется, вообще мощность не требуется, у него даже питания своего нет, достаточно того, что есть в USB. Всё ложится на процессор компьютера. Купил тюнер год назад. Вот нашел, наконец, программу. Перебрал кучу вариантов. BeyondTV, SageTV. Не пробовал Media Center и Vista. Совершенно не хотелось переставлять операционку. Это совершенно простая программа, должна работать под XP. Я даже взял GraphEdit и построил работающий граф, который показывал картинку! Казалось, всё, только заскриптовать, и наслаждаться. Так нет, BeyondTV занимает сотню мегабайт, ещё требует гигабайт на диске, процессор под завязку на 100%. Что она там делает? Запущено несколько сервисов, память тоже забита. И ещё стоит всё это удовольствие около 70 баксов. Попробовал свободный Media Portal, он показывает, но компьютер при этом ни на что вообще не реагирует. Даже убить процесс не даёт. Только ресет. Кучу программ перебрал. Всем явно не хватает ни памяти, ни процессора. Несмотря на то, что декодеры я выбираю те, что пришли с видеоадаптером - они с аппаратной поддержкой и не должны занимать основной процессор вообще (ну, почти). А запись видео на диск - так даже раскодировать не надо! Бери цифру с тюнера и пиши на диск! И вот наконец WatchHDTV. Не требует инсталляции. Всё занимает 2 мегабайта. Процессор занят на треть даже при максимальном разрешении 1920x1200. Телевизор показывает, может делать timeshift, может записывать на диск, чтобы потом смотреть. UI кривоват, но это терпимо, зато ничего лишнего и всё работает. Чем отличались все программы, которые я смотрел до этого - они были на .NET. Как беру какой нибудь Супер-Пупер-Портал на .NET, так начинаются цветные разводы с полупрозрачными меню, съедающие и процессор и память, и при этом ни хрена не работает. Не в технологии дело, наверное можно написать и на .NET (я даже знаю как - написать всё на С++ и вызвать одной строчкой из С#), но люди, которые выбирают писать на C#, не умеют сделать маленькую и эффективную программу, но хотят при этом сделать "красиво", в своём понимании эстетики (всё как в Висте). Не видел ни одной программы, написанной на C#, которую захотелось бы оставить. Как, впрочем, и на Java. Kudos, WatchHDTV!

2007-09-06

Плот и оплот.

Есть такое слово "Plot". Когда-то я думал, что оно означает "чертёж". От одноимённой юниксовой программы и устройства "plotter", очень распространённого раньше в околонаучных и инженерных кругах. И лишь потом узнал, что это ещё и "заговор". Типа сидят в тёмной комнате некие люди и при тусклом свете качающейся лампочки чертят чёрными чернилами чертёж. В смысле, план.

Есть другое слово, тоже означающее заговор: "conspiracy". Оно широко известно последнее время своей устойчивой ассоциацией с паранойей. Но поверьте старой народной мудрости: "Если у Вас паранойя, это не значит, что за вами не следят!". Никакого дела нельзя сделать, чтобы не выработать план, и часто он делается в тайне! Например, представьте, что вы решили открыть с друзьями стартап. Сначала будете встречаться, договариваться, потом делать что-то не шибко это анонсируя, возможно ещё пребывая формально на старой работе. Потом будете в узком кругу придумывать как объявлять, как рекламировать, где просить денег, что при этом обещать и о чем умалчивать. Plot. Или например решили вы поиграть в избирательные игры. Опять сначала будет plot. Как чернить конкурентов, на что напирать в своей программе. Я уж не говорю о том, если вы придумали и решили провернуть нечто не вполне законное или такое, про что законы не писаны.

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

Если вы начнёте пытаться видеть приёмы в газете, в рекламе, раскладывать рекламный слоган по полочкам, то через некоторое время эти приёмы начнут бросаться вам в глаза. Всегда сомневайтесь в написанном! Правда - вообще очень большая редкость. Тем более, что исказить смысл можно просто немного умолчав. Сомневаться в предлагаемом - это не ку-ку. Ку-ку - это чтение газеты на просвет. А чтение с элементарным анализом текста - это нормально, не надо этого стесняться. Стесняться надо быть "целевой аудиторией". Хотя, в принципе, стесняться вообще вредно, это комплексы.

Так вот, короче, чтобы создать "оплот", скажем, "демократии", вначале надо создать "плот". Без этого никак, даже с самыми лучшими намерениями. Лучшие намерения - это тоже plot. И худшие - тоже. Без плота просто нельзя продержаться сколько-нибудь долго в этой мутной воде. Но мне, как стороннему наблюдателю, ни ума, ни информации не хватает понять, чей плот, кто на плоту, а кто под плотом.

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

Иначе придётся мучиться, сомневаться, взвешивать доводы сторон, и при недостатке достоверной информации, и при полной невозможности на что-то повлиять. Говорите, "Нафига?" Несомненно, вы правы, blue pill - лучший выбор, рекомендован минздравом. Но если вы всё же выбираете red pill, предпочитая мучиться сомнениями, то вам сюда.

2007-09-04

Sunrise Visitor Center - Mount Rainier National Park



Palm Foleo накрылся.

Сегодня получил e-mail о том, что foleo не будет. Жаль. Симпатичная получалась игрушка. С другой стороны я и не особенно надеялся, что они её сделают. Изначально казалось, что идея "ассистента телефона" какая-то ущербная. Даже не мой ассистент, а моего телефона! Короче, коврик для мышки, тапочки для тараканов, херня всякая. А стоит дороже самого телефона!

Но хорошая штука могла бы быть в правильных руках. Очень легкий, очень тонкий, мгновенно включающийся ноутбук без механических деталей. С малым энергопотреблением. Размера средней книжки, но тонкий. С встроенным WiFi и bluetooth. Почти как моя Nokia N800, но экран побольше и с клавиатурой. Так я его и рассматривал, как маленький и быстрый браузер-почта-редактор-книжки. Аналогичного размера ноут от Sony стоит около двух тысяч, а тут всего $400.

Мой прогноз - это конец Palm-а. Ну и хрен с ними. Сделал бы такую штуку кто-нибудь другой! Например та же Nokia. Аппаратно почти то же самое, что и N800, и софт можно было поставить тот же самый!

2007-08-23

Переведи меня...

Наконец дошли руки и я проапгрейдил свой сервер, перейдя на новый hosting-план. Вместо плана за $4/месяц, взял план за $5. Можно снова начать выкладывать фотки. Я ничего не выкладывал с весны.

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

2007-08-22

Новая коробка Микрософт

Читал блог Joel: http://www.joelonsoftware.com/items/2007/08/18.html
Рассказал одному коллеге про это, а он говорит, что да, купил знакомым, тоже долго проковырялся пытаясь открыть.
Очень похоже на нынешний Микрософт. Сейчас какая-то мода пошла на бессмысленный креатив. Innovation - ключевое слово. Кто сказал, что у нас мало Innovation? Вот коробку сделали, и это только начало!

2007-08-21

И снова всё о ней

... о Земле родимой. Вот нашёл ссылку на популярную статью на русском: http://www.equator.ru/pbl/rasshirenie_zemli.htm. Никаких комментариев не было на мой предыдущий пост. Я когда увидел видео, понял, что идея не бредовая, что смыкание континентов на сфере меньшего радиуса - факт, доказывающий правильность гипотезы. Это не может быть совпадением, оно невероятно. Дальше можно спорить, увеличивается ли масса или нет, а если увеличивается то откуда берётся, и т.д. Я пол ночи не мог заснуть, думал, насколько представления о природе переворачиваются от знания этого факта. Самый поразительный естественнонаучный факт за последние десять лет. Я даже во внутреннюю рассылку кинул ссылку. Но народу не интересно. Народу интереснее рассуждать про автомобили и отсуживание штрафов за превышение скорости. По мне - скучнейшее занятие, скучнее автомобилей только американский бейсбол. Разные мы все, иногда удивительно насколько разные. Хотя порой удивительно и насколько мы все похожие. Я иногда ошибаюсь, путая эти две удивительности.

2007-08-14

60 миллионов лет назад

Лучше один раз увидеть, чем сто раз прочитать.  Всем смотреть, видео впечатляет!

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

Update: есть на youtube.

2007-08-11

Продолжая тонкую тему...



Вот ещё какая штука: Pico ITX motherboard.

A full-sized ATX motherboard is 12″ x 9.6″ (305mm x 244mm) and Mini-ITX is 17cm x 17xcm, which makes it much smaller than the average system. Nano-ITX, which was announced in March 2004, but is mainly used for industrial and business systems, is 12cm x 12cm. Pico-ITX has cut the size down once again, and measures in at an incredible 10cm x 7.2cm, but has retained almost all of the features and functionality of the larger platforms.

2007-08-08

Пусть бегут неуклюже...

Чем дальше, тем грустнее строчки песенки. Я раньше не понимал, что такого грустного в возрасте. В сорок понимаешь с удивлением, что прожил лучшую половину жизни, приобрел ненужный опыт, не стал тем и не стал этим, заимел некие болячки, но всё это как-то обыденно. А пройдет ещё несколько и понимаешь, что на самом деле грустно от того, что опыт этот, который приобрел в мучениях физических и душевных, все эти откровения и прозрения, весь этот результат ошибок трудных, никому на хрен не нужен. Опыт не нужен на работе, где его бегут и боятся. Друзьям твоим он тем более не нужен, им свой такой девать некуда. Молодежи он тоже не нужен, поскольку непонятен. Не верят они ему, объясняя твой опыт просто "лох и неудачник". Хочется объяснить, предостеречь о тех путях, пройденых, где "коня потеряешь", где "голову сложишь". Напишешь свои откровения на камне придорожном, казалось бы, прочитай, не ходи туда, я всё расскажу, что там есть. Нет, придет новый богатырь, плюнет на твою надпись и пойдет опять.
 

2007-07-30

По улице ходила...

... большая самка deer-а.



Добавлю немного о том, что я не успел. Я не успел сфотографировать ещё трех оленей, пасущихся в кустах на другой стороне дороги. Ещё я не успел сфотографировать того колоритного бородатого старика на велосипеде, который виден нерезко в левом углу фотографии. Со своим красным мешком он выглядит в точности как летний вариант Санта-Клауса. Когда я увидел их всех вместе, я подумал, ну вот, у Санта Клауса разбежались олени, или, может, он их выгуливает. Но когда я достал фотоаппарат, то было уже поздно. Сформировавшаяся было сказка разъехалась на глазах, превратившись в будничную реальность.

2007-07-27

Стать тоньше

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

Компьютер в розетке:
http://www.buy.com/prod/chip-pc-jack-pc-efi-6800-thin-client-thin-client-amd-alchemy-128mb-ram/q/loc/101/202899573.html

Несколько ссылок внутри вот этого текста: Zonbu - $249, DecTOP - $99, Koolu - $299.

2007-07-25

Новости с тонкого фронта

Несколько лет назад Sun подняла большой шум по поводу "тонких клиентов" основанных на Java. Но никакого эффекта этот шум не возимел. Я так и не видел ни одного java-клиента. Но тонкие клиенты существовали задолго до Sun, хотя назывались несколько по разному: терминалы, X-терминалы, и "бездисковые рабочие станции".

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

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

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

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

Я уже писал недавно, что с появлением широкополосного интернета приходит пора реанимировать идею тонкого клиента. И даже описал клиент, который бы представлялся разумным. Оказалось, что такие клиенты давно и успешно выпускаются. Вот, например компания Wyse, известная в прошлом своими терминалами. Или HP, который заинтересовался этой нишей рынка. Достаточно набрать в гугле "thin client" и вылезает немало интересных ссылок.

Современные клиенты основаны на XP-embeded, Windows-CЕ или Linux. Во всех из них поддерживается протокол Windows-терминала, X-протокол и, наконец-то, новый и главный инструмент тонкого клиента - browser. Фактически - то, что надо. С встроенным WiFi - идеальное рабочее место не только в офисе, но и дома. Или вот, например, какая штука. И недорого... Мне кажется домой, в качестве второго-третьего рабочего места очень даже. А в какую-нибудь контору так просто идеальное решение. И никакой мороки с установкой  патчей на Windows!

К сожалению, никто про это не знает. Во Fry's никаких тонких клиентов купить нельзя. Все по старинке покупают тысячедолларовые компьютеры с Vista, либо те же компьютеры, но россыпью. Но через интернет - пожалуйста, даже могут прислать на пробу задешево. Заказать, что-ли штучку ради интереса?

2007-07-23

Учите олбанский

Некоторые ворчливо полагают, что феномен популярности "олбанского" основан на массовой деградации грамотности среди молодёжи. Не думаю. Точнее, думаю, что нет. Не было никакой особой грамотности, которая могла бы деградировать. Есть тому просто две объективные причины. Причина первая - интернет вообще и чаты в частности. Мы уже привыкли и не замечаем, что русский (как и любой другой) язык всегда существовал в нескольких формах. Как минимум есть письменный (книжный, официальный) язык и устный язык со своими устойчивыми грамматическими формами (не мат, просто формы: "Язык, он разный"). Не говоря уже о языке юридическом, об уставном и командном и т.д. Мат, опять же. Да... Так вот, в чатах язык письменный используется для выполнения функций разговорного. Разговорный язык, он однопроходный, без рекурсивных возвратов назад с целью замены слов и расстановки запятых. Что сказано, то сказано. Отсюда требование фонетичности. Первыми пропадают неочевидные запятые, затем сокращаются длинные слова. Кстати, в английском тоже есть типичные "разговорные" сокращения: you -> u, through -> thru, application -> app, etc. Следующие на очереди - сложные случаи правописания, которые требуют думать о правилах. В традиционной компьютерной эпистолярности всегда есть время перечитать и скорректировать текст. В чате - нет. Из двух вариантов написания проще выбрать третий, с которым не надо заморачивацца. Игра с языком типична для носителей. Русский мат - пример такой игры с корнями и суффиксами. Каламбур, господа, используемый для оживления беседы, придаст ей необычный вкус и аромат. Но игра эта никогда не одобрялась носителями "языка официального". Кто эти загадочные "академики", которым позволено вершить судьбу нашего языка и решать, что грамотно, а что безграмотно? Кто утверждал все эти правила и исключения? Кто их выбрал? Президента знаю, выбирали. Думу тоже выбирали. А этих - выбирали только другие такие же знатоки правил. Вся эта система неизвестных "академиков", выглядит сейчас слишком архаично и не демократично, напоминая тайный орден жрецов сушёных мощей "Русского Языка", которым они приносят в жертву бедных невинных первокласников. Старая книгоиздательская система вполне соответствовала этому стилю, но интернет требует большей свободы. Долой запутанные правила и исключения, существующие только для того, чтобы можно было делить аффтаров на грамотных и безграмотных и показывать на последних пальцами! Даёшь фонетичность! "Верните язык его носителям" - я бы сделал девизом новой языковой революции! Почти уверен, что язык изменится, как-то вобрав в себя новую роль. И это хорошо. Не сразу сдадутся жрецы. А меня радует факт, что создан новый стиль, фактически первый новый стиль в языке за последние 100 лет. Предыдущий создала революция с его коминтернами, совнархозами и продразверстками. Текущее изменение - не столь масштабно, и это тоже хорошо. Но оно не сгинет, не надейтесь, оно останется в какой-то форме. Учите олбанский, господа - язык интернета, язык свободы.

2007-07-17

- Как приборы? - Двести! - Что двести? - А что приборы?

Я уже писал и про свой маленький карманный компьютер и про попытку купить к нему GPS. Но я таки купил к нему GPS в другом месте на полсотни дешевле, где отшипили всё в тот же день не задав ни одного вопроса. В комплекте пришла удобное крепление для машины (на присоске к внутренней стороне ветрового стекла), автомобильный блок питания, сам модуль GPS с bluetooth и программа navicore с базой дорог по северной на 2-х гигабайтной SD карточке. Модуль оказался очень маленький и приятный. Прорезиненные полоски на корпусе позволяют просто класть его на dashboard. И если раньше я ездил просто так, то теперь можно ездить по приборам.

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

Попытка поехать по карте показала типичную тупость всех систем, претендующих на некую человекоподобность и интеллект. В реальном мире есть пробки, укладка асфальта или просто большой трафик в это время суток. Свернул на другую дорогу и начинаются советы как вернуться на старый маршрут. Хотя надо отдать должное, система реагирует на изменение и пытается выстроить новый маршрут, как умеет. К сожалению, система не знает количества полос и не может порекомендовать заранее перестроиться, хотя и советует держаться слева или справа и предупреждает о поворотах заранее и не один раз. Пару раз предлагала повернуть на несуществующий поворот. А в лесу вообще потеряла дорогу, по карте получалось, что я давно съехал в кювет или невысоко (эта штука дает 3D координаты) лечу над лесом. И из гаража не смогла выехать. Говорит: выйдите сначала на ближайшую дорогу. Но незнакомый адрес найдёт, вероятно.. Короче, можно использовать, если привыкнуть и знать все тонкости.

Кроме дорогой фирменной программы со своей базой, есть ещё бесплатная и свободная Maemo Maper. Она показывает координаты и всякие параметры, типа положения спутников, умеет запоминать прошедший маршрут, но главное, она использует карты загружаемые с Google Map или с Live Map. Можно включить дороги или аерофотосъемку, что очень наглядно. Выбрать маршрут надо в online-е и загрузить карты по маршруту, потом можно ехать без соединения с интернетом. Эта штука ничего не говорит, только показывает, и особенно удобна для пешеходных путешествий по горам и лесам.

Кстати, Sony продает GPS брелок, который запоминает пройденный маршрут и затем позволяет определить координаты фотографий по времени съёмки. Надо попробовать сделать то же самое с помощью Memory Mapper-а. Было бы интересно.

Ну и ещё одна новость, уже не про навигацию: вышел Skype для Nokia N800. Получился WiFi-телефон. Почти как iphone. Только для него, в отличие от iphone у моего есть SDK, и есть набор разных программ.

Ещё, забавно, чувствительность WiFi довольно высокая и он чует всякие окрестные WiFi сети. Оказывается около домов есть куча открытый сетей, половина которых называется linksys или netgear, которые дают довольно неплохое покрытие территории. На работе вот только нельзя использовать: нет ipsec протокола, который защищает наши корпоративные секреты.

Играюсь, короче в маленькие игрушки-погремушки. Некоторые играются в игрушки большие, самолёты покупают, летают вокруг Рейнира, а я всё в маленькие. Несерьёзно как-то. Хотя, честно говоря, во всём этом есть некая доля профессионального интереса. Мне просто хотелось испытать новую платформу. С пользовательской стороны понравилось. Надо попробовать что-нибудь написать.

2007-07-11

34°C - это жарко

Еду на скутере и набегающий воздух горячий! Даже приятно после включенных на полную мощность кондиционеров. Но дома - жарко. Делать ничего не хочется и писàть тоже.

2007-07-09

Хорошая статья про шрифты и их растеризацию.

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

http://antigrain.com/research/font_rasterization/index.html

Приятно удивляет дотошность и доказательность. С примерами и картинками.

Joel Spolsky in his article “Font smoothing, anti-aliasing, and sub-pixel rendering” [1] compares Microsoft and Apple ways of text rendering and explains why windows people don't like Safari. Text in Safari looks too blurry and that must be why. I want to go further and sum up my experience and observations about it. I'm not an expert in digital typography, but I “have something to say”. At least, some ideas may be useful for the GNU/Linux community.

Занятная цитата во второй половине статьи:

It looks like Microsoft API is a huge set of ill-considered random ad-hoc solutions, with no engineering culture and no any common idea behind. Typically you can use Microsoft software only in one rigidly straightforward way. Step to the left or step to the right — and you fail. I admit it might be good for business, but it's unfair. It prevents others from fair competition and stops the progress.

Что-ж, соглашусь. Это так и есть. Немного нестандартных настроек и всё ломается. Система, основанная на интенсивном тестировании, не может быть надежна вне стандартных сценариев. И она не. Хотя надо сказать, что с Линуксом то же самое, если не хуже. Более того, всё так же плохо вообще, со всем современным софтом.

2007-06-22

О противном

В перерыве между осознаниями божественных откровений, поведаю несколько мыслей о низменном и противном. О программировании, о багах, о процессе и о Visual Studio Team System, в разработке которого мне довелось принять.

Есть писатели программ и есть писатели книг о программах. Я привык быть первым из этих двух, но оказалось, что это малоуважаемое занятие. И действительно, код закрытый, никто твоего творчества не увидит. Что за занятие, год за годом подтачивать напильником винтики в маньячном перпетум-мобиле? Да и вообще, никто не любит читать код. Его проще переписать, а если и не проще, то приятнее, в полном согласии с инстинктами. Больше всего в Компании уважают scope of influence. Причем знак этой influence не важен. Знак зависит от точки зрения. Отрицательный результат - тоже результат и все такое. Самое неуважаемое занятие в Компании - писать код. Даже тестеры уважаются больше, ведь они стоят на страже качества! Программист в Компании - это как рядовой советской армии, понукать и унижать которого есть, кажется, единственная её функция. Ощущение армии не покидает меня все годы работы в Компании, хотя сейчас чувствуешь себя уже "дедом".

Другое дело писать книги! Область твоего влияния распространяется на всю отрасль сразу. И что же можно такое новое написать про программирование? Все коммерческие книжки должны содержать в своем названии некий новый бренд. Например Vista, или AJAX или С#. Но новый язык - это сложно. Надо лет десять раскручивать, чтобы люди начали покупать. Да и то, только гики. Да и сложно это. То ли дело бизнесс-процесс! Это можно написать, это легко продавать, Только название придумать. Например "Scrum". Ну и что, что похоже на смесь crap-а и срама. Зато звучит. Содержание процесса тоже неважно, это как новый метод лечения всех болезней. Главное - чтобы больной сразу не помер. А там, может сам выздоровеет. Лучше всего взять побольше обычного здравого смысла и добавить чуть-чуть (главное - не переборщить!) чего-нибудь модного и экстравагантного. Для вкуса. Чтобы запомнилось.

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

Но всё-таки, серьёзно, нужен программисту "процесс"? Смотря что назвать этим словом. Если ритуальные танцы с бубном, то нет. Если весёлые ежедневные митинги, коллективные тренинги на тему build team, то нет. Если свод законов, суровый и непреклонный, установленный десять лет назад, то тоже нет. Если набор разумных практик и приёмов, помогающий писать хороший код - то ДА! И практики эти надо применять с умом, когда они имеют смысл, и набраться храбрости и не применять, когда смысла не имеет. И практик этих на самом деле кот наплакал.

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

1. Иметь source control. Обязательно.
2. Тестировать код. Все написанные строчки. Именно все.
3. Сабмитить в source control оттестированный код разумными кусками. Не каждое открытие файла в редакторе, но фичи. Каждый баг-фикс отдельно, если они независимы. И писать description, что именно засабмичено.
4. Иметь место, где записываются все баги. Не обязательно база данных, об этом ниже. Но хранить баги, как исходный код.
5. Очень хорошо, если source control хранит всё, чтобы построить проект. Т.е. добавьте туда компилятор, заголовки и библиотеки. Это позволит восстановить в точности любую версию продукта, воспроизвести и исследовать баг.
6. Сделайте 2 branches: первый будет содержать текущую рабочую версию, а второй - релизы и хотфиксы к ним.
7. Если есть спеки - положите их рядом с исходным текстом в source control. Пригодится.
8. Не надо писать неиспользуемый код. Не надо делать супер-пупер систему классов на все случаи жизни с кучей методов. Половина будет не нужна, только зря потратите время и потом будет непонятно, что работает, а что нет. Сделайте то, что надо, остальное напишете, когда понадобится. Если написали ненужное, засабмитьте куда-нибудь, но не в рабочий код.
9. Можно написать unit-тесты, но главное - напишите скрипты, которые проверяют основную функциональность всей системы. Потом достаточно будет запустить, чтобы увидеть, что не поломалось.
10. Я не сторонник стайл-гайдов с подробным перечислением количества пробелов, но некий разумный стиль необходим. Код должен быть читабельным. И не только компилятором.
11. Не увлекайтесь самыми последними технологиями. Быстро сделать продукт можно на системе, которая хорошо известна, которая имеет документацию, блоги по недокументированному и куча всяких инструментов. Новые технологии имеют кучу багов и подводных камней. То, что красиво на картинке с 5 квадратиками - не работает, когда квадратиков 1000.
12. Пишите на том, что ваши программисты знают и понимают. Не понимает народ как писать с exceptons - не используйте их.
13. Неплохо, если ваш код посмотрит ещё один человек. Не первый встречный, а тот, кто понимает и может дать дельный совет.
14. Зависимости - вот что должно определять и менеджмент и архитектуру.
15. Не надо делать всё первым пришедшим в голову способом. Подумайте, как ещё можно сделать и выберите лучший вариант из возможных.
16. Программирование - процесс итерационный. Сделайте хотя бы пару итераций перед выпуском первой версии.
17. Задача первой версии - сделать хороший стабильный прототип, обкатать принцип и сформировать API. Вторая версия - никаких новых фич, но то, что есть работает быстро и надежно. Фичи можно добавлять в третьей. И т.д.
18. Во время написания первой версии вы поняли как это надо было писать. Не бросайте и не начинайте переделывать сразу как поняли. Выпустите первую версию. Потом сделаете, то, что поняли во второй. Если перепахивать каждый день - ничего не вырастет.
19. Заведите FAQ и форум для пользователей. Возник у пользователя вопрос - впишите ответ в FAQ. Потом можно просто сслылаться на готовый ответ.
20. Вместо сложных систем баг-трекинга можно просто завести внутренний форум с несколькими правилами. Возник баг - завели тред. Первый пост - описание проблемы (способ воспроизведения или цитата из внешнего форума). Тред активный. Дальше разработчики могут добавлять свои комментарии, потом, когда проблема понята, кто-то принимает решение исправить или отложить. После этого решение записывается в треде. Когда проблема исправлена - это тоже записывается в треде и тред переводится в архив. Всегда видно, что происходит и каков статус. Старые треды тоже можно поднять и посмотреть. Ничего не стирайте!

Хватит на сегодня. Продолжение последует. Как-нибудь.

2007-06-19

Ответ на вопрос смысла жизни и всего вообще.

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

Начнем с генетических алгоритмов. Знаете, такая компьютерная штука, по Дарвину. Вносим некие случайные изменения и смотрим не стало ли "лучше". Если стало, то изменения закрепляем. Ну и далее, можно скрещивать изменения, отсеивать худшие разными методами, можно модифицировать критерий "лучшести" со временем, итд итп. (Ну мы почти так уже и пишем софт практически, куча народу делает всякие разные изменения в коде, а тестеры проверяют результат на живучесть. Пардон, отвлекся.)

Так вот, недавно ссылочку прислали. Исходник типа. Наш. В смысле, нас. Хотя скорее екзешник, чем исходник. Ну, генетический код человеческий. Open Source, хакерствуй, если понимаешь.

Ну, никто, конечно почти ничего не понимает, но перспективы поражают воображение. Стругацкие бы сказали, что модификации кода должны быть запрещены, как неэтичные. Утопия. Будут модификации. Никуда не денемся. На это наводят три соображения:

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

На самом деле у всех есть дефекты! Посмотрите на окружающих, на себя. У одного очки с детства, у другого волосы седеют рано или лысина в тридцать, у третьего зубы ни к черту. Пофиксим? Так и поехало. А заодно и кудри златые и глаза изумрудные, и, как ни странно, похож и на маму и на папу. Такой мощный рынок открывается!

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

Ну и в третьих - жить подольше хочется. Эволюция не сможет продлить жизнь дольше среднего детородного возраста. Эти изменения не смогут закрепиться в потомстве. Только intelligent design может помочь жить дольше. И рынок здесь совсем уж немеряный.

Я уж и не говорю про выход в космос и прочие фантастические проекты, для которых наш организм вовсе не предназначен.

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

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

И какой же это может быть закон? Полагаю, что сложностный. Запросто может оказаться, что нельзя вот так просто взять и написать новую программу для DNA. Может оказаться, что нельзя предсказать какую форму примет молекула при добавлении новой цепочки и какими она будет обладать свойствами, кроме как сделать эту молекулу и посмотреть, что получится. Это как в криптографии. Обратная задача невычислима за разумное время. Т.е. может оказаться, что нельзя вычислить какой генетический код приведет к определенным заранее заданным изменениям организма. Вероятно можно комбинировать независимые части кода, но сильно-зависимые части - неразрешимы.

И что тогда делать? Это же конец! Прогресс остановился, микробы победили, все умерли. Но природа же как-то всё это делает! Идет эволюция! Если миллионы лет делать миллиарды попыток генетическим алгоритмом, можно хакнуть невычислимое.

Сделать кучу зондов. Засеять жизнью вселенную. Дать ей развиваться независимо на разных планетах, потом собирать образцы, выбирать удачные находки, встраивать в себя. Как идея?

Вот мы и подошли к смыслу жизни. Земля, как супер-компьютер, где обитатели находят генетические решения по борьбе с новыми вирусами для некоей суперцивилизации. Поняли, о чем писал Адамс? (Для тех, кто читал: вопрос не должен быть раскрыт - суперцивилизации проще уничтожить планету, чем признать, что они затеяли на окраине галактики!) Можно сделать несколько планет-черновиков. Со сходным генетическим кодом. Заразить их новым вирусом и позволить жителям умирать от него. Выжившие будут нести решение, которое можно внедрить в себя. Интересная возникает этика и практика суперцивилизаций. Поняли, чем занимаются странники? И почему тагоряне не стали инициировать саркофаг? Они, вероятно, просто знали о подобной практике. Мысли разбегаются объясняя факты реальные и вымышленные.

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

Бог создал человека по образу и подобию своему. А затем создал себя по образу и подобию человека. Годится для новой религии? Нет? А если я скажу, что всё это прочитал на позавчерашнем камне, посланном мне с неба?

2007-06-12

Fire foxes

http://thrillingwonder.blogspot.com/2007/06/rare-red-panda-or-fire-fox.html Забавный сайт. Мне так же понравилась коллекция дорожных знаков.