2010-07-30

Чертополох

 
В нашем саду растёт чертополох! Специальный садовый сорт.

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.

2010-07-06

iPhone

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

iPad мне очень понравился и я полагал, что телефон понравится тоже. Потому я взял его на денёк поиграться. Не новый, четвёртый, а предыдущий 3GS. Сразу скажу свой вывод: телефон мне не понравился почти по всем сценариям. Хотя, мои требования к телефону несколько нестандартные: телефонная функция далеко не главная. Фактически я бы хотел маленький карманный ipad, который мог бы иногда, при случае сработать как телефон.

80 баксов, которую хочет за него AT&T в месяц явно превышает разумные пределы раза в три. Я не готов платить даже половину этой суммы. Для iPad 3G есть 15-баксовый план, но телефон на него по их правилам посадить нельзя, даже отказавшись от телефонной функции. Можно попробовать jailbreak+unlock с другим провайдером, но отказавшись при этом от данных, поскольку 3G data prepaid в нашей деревне нет.

В результате я попробовал его в хакнутом режиме с t-mobile. Сигнал у него почти везде минимальный: одна палочка из пяти. Дома - одна, а в тех местах, где особенно надо, за городом - вообще "no service". Причём десятибаксовый tracfone показывает при этом максимум - пять из пяти практически везде, кроме когда совсем уж в горах.

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

Остаётся сценарий чтения Web через WiFi. Опять неудобно. Очень мелко, хоть очки надевай. Экран на iPad вполне комфортен для чтения, а на iPhone - мелко до неразличимости. Сделать крупнее - строчки вылезают за экран, а режима, когда можно взять с сайта колонку текста и переформатировать её на весь экран крупным шрифтом - не предусмотрено. Так и двигаем влево-вправо на каждую строчку.

А корпоративная почта добавила такое неудобство, что пользоваться стало совсем невозможно. Она заставила поставить на устройство кодовое слово. Т.е. берёшь телефон, хочешь позвонить, для этого надо сдвинуть на экране нарисованный слайдер, потом ввести кодовое слово из четырёх букв, потом нажать enter, потом запустить в телефоне телефонную программу, потом набрать номер... А если ошибёшься в наборе кодового слова несколько раз, так телефон заблокируется... Ну я понимаю, корпоративные секреты, так сделали бы набор кода при входе в почту! Нет, этим уже невозможно пользоваться! Одной рукой позвонить вообще не получится! Кошмар, а не usability.

Короче, избавился от этой штуки со вздохом облегчения. Мне больше нравится мой десятибаксовый моторолловский тракфон. Вот iPad - совсем другое дело. Хотя сравнивать его до сих пор не с чем.

2010-07-01

Основной инстинкт

Инстинкт и разум относятся друг к другу как водитель и машина, как батарейка и моторчик. Разум без инстинкта работает на холостом ходу, в idle loop, иногда перебирая случайные события, гуляя по воспоминаниям, или порождая комбинации; но именно инстинкт заставляет разум крутиться в определённом направлении.

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

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

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

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

Надо учиться падать и не ломать при этом кости, поднимать груз и не надрываться. Но никто не учит. Все учат теоремам и разной полезности фактам. Вот проблема. Нет у нас основного предмета: умения жить, умения контролировать себя, умения понять себя. Никто не учит человека быть человеком. А человек - странное существо. Очень странное.