2010-09-29
Прогноз
2010-09-25
Mac Mini
Пишу данный пост вот на этом компьютере. Который под календарем. Mac Mini.
Штучка совершенно бесшумная, маленькая, не слишком мощная, но для маковской операционки вполне достаточная. Поставил на нее привычные программы: Picasa, Chrome. Finder мне всегда нравился, да и к юниксу у меня давние ностальгические чувства. Собрал Wine для остального (полтора часа собирался). Работает. Такого количества багов, как в Убунте, пока не видно. Все чистенько, хоть и бедненько.
В принципе, идеальный компьютер для подключения к телевизору. Но и на стол приятно поставить, и в качестве дополнения к мощному десктопу, или в качестве апгрейда десктопа древнего, как у меня. Особенно, если седьмая винда никак не приживется и после загрузки вызывает иррациональное желание ее немедленно перегрузить в XP или Убунту. Нет, я не PC, I'm Mac. Буду разбираться в Objective-C.
Закрыв книжку
2010-09-19
Сложность
Большинство систем построены по принципу "так уж исторически сложилось". Все связано со всем, чтобы что-то переделать надо все разобрать, потом все собрать. Сломалось одно - не работает ничего. Чтобы добавить фичу, надо поправить все файлы. Сложность растет как экспонента от количества фич. В какой-то момент добавить уже ничего нельзя, все ломается, мало кто понимает как оно работает, проще написать заново, чем переделать. Назовем это мултипликативной, или экспоненциальной сложностью.
Более умный подход состоит в разработке инфраструктуры, когда отдельные фичи могут добавляться независимо. Хороший пример: кодеки видео или аудио. Или приложения для iphone. Есть базовая система, а остальное - приложения. Это аддитивная или линейная сложность. Проблема приложения - это его проблема. На другие приложения это не влияет.
Гениальный подход состоит в такой продуманности структуры, что фичи получаются комбинацией неких базовых элементов, когда несколько элементов дают большое количество фич. По аналогии это можно назвать логарифмической сложностью.
Можно подумать, что последний подход самый замечательный, но это не совсем так. Его проблема в том, что базовые элементы все завязаны, причем так, что изменение их конфигурации меняет все фичи. Проблема одного создает пробему целого измерения в нашей системе. И они должны быть все продуманы одним умом, что затрудняет параллельную разработку. И добавить фичу очень сложно, увеличивая размерность, повышаем сложность, что приводит к тому же тупику, что и первый пример с экспоненциальной сложностью.
Проще всего второй, линейный подход. Пусть все пишут кодеки, фильтры, плагины, приложения. С простым интерфейсом к нашей системе. Мы даже специально можем ограничить или предотвратить взаимодействие таких плагинов-приложений. Чтобы их связи не создавали мультипликативной сложности. Пользователю тоже все понятно. Фича - приложение, видео формат - кодек.
Это в точности то, что делает Apple в iOS. Приложения никак между собой не взаимодействуют, кроме самого минимума. Эплу так проще сохранять контроль над системой, хотя нам это и не всегда удобно. А Микрософт в своем WP7 решил попробовать поиграть в логарифмические игры, которые, как мы знаем, кончаются экспонентой. Посмотрим, посмотрим.
Forest Lake
2010-09-11
Camas Land
2010-09-01
Obsidian

Обсидиан - вулканическое стекло. Внешне напоминает застывший гудрон, но необычайно твёрдое и острое. Об осколок камня можно порезаться, что мы и не преминули сделать. Целые поля обсидиановой лавы вытекли из вулкана Newberry в штате Орегон. Место довольно интересное и недавно обустроенное, сейчас там сделали новую хорошую дорогу, павильон, мостики и дорожки. В окрестностях есть пещеры в лаве и вулканический конус, на который можно подняться на машине. Жаль, что всё мы не успели осмотреть.
2010-08-30
2010-08-29
Sony Nex-5

Когда-то я сказал себе, что куплю новую камеру, когда будет очередной прорыв в технологии. Не знаю, насколько это прорыв, но в поездку я взял новый фотоаппарат Sony Nex-5, который подарил сам себе на день рождения.
Nex-5 - это небольшая по размеру камера с APS-C сенсором. Камера практически точно совпала с моими требованиями: хотелось близкого к DSLR качества, но чтобы она была максимально легкая и компактная, чтобы можно было брать с собой на прогулки и не изнывать от камня на шее. Sony выкинула из камеры почти всё, что можно: зеркала, вспышку, видоискатель. Оставила неплохую матрицу и мощный видео-процессор. Я очень доволен. Отличная камера, чтобы брать с собой в поездки. Последние снимки, опубликованные в этом блоге, сделаны этой камерой.
Кстати, камера может сама делать панорамы и HDR. Панорамы делаются так: нажимаешь спуск и ведёшь слева направо как пулемёт. А затвор делает очередь снимков (со звуком!), а затем сам их объединяет и записывает как один широкий кадр шириной примерно восемь тысяч точек (ширина обычного кадра - черыре тысячи). Если же включить режим HDR, то камера делает три снимка и делает из них один кадр с меньшим контрастом, но с большим динам-диапазоном. На фото - такая панорама.
Ожидаю, что камера не понравится любителям серьёзных камер и мощной оптики. Это не совсем DSLR. У неё нет ни вида, ни стиля управления "профессиональной" камеры. Это скорее "мыльница", которая доэволюционировала до уровня, занимаемого раньше DSLR. Что мне и хотелось.
Crater Lake
Вернулись из национального парка "Crater Lake". Очень красивое, очень глубокое, очень синее озеро в огромном кратере вулкана.
Вулкан извергся примерно семь тысяч лет назад, при этом образовался глубокий и большой кратер, который со временем заполнился талой водой. Вода очень чистая, пресная, холодная и прозрачная.
Озеро очень глубокое, почти полкилометра в самой глубокой точке. Солнце проникает сквозь такую чистую воду очень глубоко, вызывая резонансное рассеяние на молекулах воды, которое и дает озеру интенсивный синий цвет, не вполне передающийся фотоаппаратом.
По озеру запрещено плавать на частных лодках, но есть пара прогулочных катеров, на одном из которых мы и прокатились. Сначала мы планировали высадиться на остров, но тот катер сломался, и мы просто сделали круг по озеру. Озеро, кстати, немаленькое: 8 x 10 km. А остров на озере - это новый растущий вулканический конус.
Местность, где расположен кратер, тоже примечательна: это высокое и совершенно ровное плато. Можно было бы принять за обычную равнину, если не его двухкилометровая высота над уровнем моря. А в двух часах езды расположен другой вулкан "New Berry", который тоже интересен, но о нём в другой раз.
2010-08-17
Луны Юпитера.
2010-08-08
2010-08-07
2010-08-06
2010-07-30
2010-07-19
2010-07-12
КПД
КПД (Коэффициент полезного действия) — это отношение полезной работы к затраченной энергии. КПД является безразмерной величиной и часто измеряется в процентах.
В принципе, в программировании тоже можно определить КПД. Как с точки зрения энергетической, так и с точки зрения алгоритмической. Процессор работает, потребляет энергию. Доля энергии, затрачиваемой на программу вполне легко определяется. Для простоты оценки можно считать количество тактов процессора, затрачиваемых на выполнение программы. Что касается полезной работы, это сложнее, но оценка тоже возможна. Для оценки порядка величины можно взять теоретическое минимальное количество инструкций, необходимое для выполнения программы. Допустим, наша задача - повернуть изображение, записанное в формате jpeg. Значит его надо декодировать, повернуть битмап, закодировать обратно. Для каждого шага известна оценка количества операций. Количество тактов даст полезную работу. В реальной программе операций будет больше, что и даст КПД, меньшее 100%.
В около-программной науке (не путать с около-научным программированием) чаще считают другие параметры. Раньше, когда стояли в очередь "на счёт", больше беспокоились процентами загрузки процессора. Потом стали считать транзакции в секунду, мегабайты throughput и миллисекунды latency. Не отрицая этих важных параметров, КПД мне нравится тем, что является некоторым показателем эффективности, а следовательно и качества общей архитектуры программы.
Иногда возможны трюки, которые поднимают КПД на порядки, заставляя пересмотреть теоретический минимум. Например в вышеприведённом примере, поворот на 90 и 180% можно сделать очень быстро, без раскодировки и интерполяции, переставив данные непосредственно в сжатом jpeg-файле.
Чаще, однако встречаются примеры, когда КПД на много порядков ниже, чем нужно. Что интересно, это может никого и не беспокоить. Работает и ладно. Всё равно, процессор не может стоять и будет крутить idle loop. Но, в принципе, idle loop лучше. В этом режиме он экономит батарею ноутбука, позволяет крутиться другим задачам на сервере, а процессор телефона переходит в мало-потребляющий режим. Кроме того, программы с большим КПД просто лучше продуманы. Такое КПД - качество дизана программы.
В качестве примера приведу Exchange со списками рассылки. Оказывается, что в современном Exchange нет single-instance-storage. Посланное сообщение и все его приложенные файлы просто копируются в inbox каждого реципиента. Это уменьшает зависимость данных, позволяет разделить inbox-ы по разным серверам и всё такое. Казалось бы, всё логично.
Смотрю на свой корпоративный inbox средних размеров. В нём несколько тысяч сообщений. Во всех - несколько реципиентов. Большая часть получена по ссылкам рассылки, где в каждой группе - сотни и тысячи человек. Каждое такое сообщение копируется в тысячу inbox-ов. Ответ на него тоже так же копируется, причём, традиционно, текст включает сам вопрос и предыдущее обсуждение. И всё это в сложных кодировках, в HTML, который упакован в MIME, который пересылается в XML, через HTTPS, используя .NET Web-сервисы.
Простое и типичное форумное сообщение "+1", которое с точки зрения полезной работы, "как два байта переслать", превращается в гигабайты дисковой памяти и дальше, в соотвествующий сетевой трафик и фантастические компьютерные стойки, которые непрерывно что-то друг с другом синхронизируют, а затем всё это ещё и с моим компьютером.
Но и это ещё не всё. Обычно каждый пользователь настраивает правила так, чтобы списки рассылки попадали в свои отдельные папки. А затем новый Outlook в Conversation View сжимает всё обсуждение до своего логического минимума, показывая в нём ту самую единственную строчку: "+1".
Даже затрудняюсь оценить, какой у этого дизайна КПД. Какие-то бесконечно малые числа. Удивительно, что это вообще может работать на современной технике. Но как я могу осуждать архитекторов за это, если пси функция движущейся частицы тоже расширяется на всю вселенную, чтобы потом свернуться в нужную точку? Почти как в Exchange.











