Wednesday, March 11, 2009

Anathem: Bunjo and proton decay

From Neal Stephenson's Anathem:
Bunjo was a Millenarian math built around an empty salt mine two miles underground. Its fraas and suurs worked in shifts, sitting in total darkness waiting to see flashes of light from a vast array of crystalline particle detectors. Every thousand years they published their results. During the First Millennium they were pretty sure they had seen flashes on three separate occasions, but since then they had come up empty.

Compare this to the following paragraph from Lee Smolin's book "The Trouble with Physics" that tells the story of failed attempt to detect proton decay - the effect that, if observed, would confirm a wonderful physical theory known as SU(5):

... all you had to do was surround the tank with detectors and wait. Funds were raised, and huge tanks were built in mines deep underground. The result were impatiently awaited.

Alter some twenty-five years, we are still waiting. No protons have decayed.

Add to it that Stephenson specifically lists Smolin's book among the sources for Anathem at his Acknowledgements page, while Stephenson's praise for the book is printed on its back cover, and it's easy to imagine that the former quote is a joke at the expense of the latter.

Saturday, February 14, 2009

Anathem: Iconographies

Having finished Neal Stephenson's Anathem I feel like making a few notes.

First and foremost, it's a great book.

For the rest of this post I'll try to decipher some of the iconographies from the book.

  • Temnestrian Iconography:
    It depicts us as clowns... But… clowns with a sinister aspect. [...] [Originates from] The Cloud-weaver, a satirical play by the Ethran playwright Temnestra that mocks Thelenes by name and that was used as evidence in his trial.
    This is a reference to The Clouds, a satirical play by the Athenian playwrite Aristophanes that mocked Socrates and contributed to the latter's trial. That Thelenes is Arbre's Socrates is evident from many other references.
  • Doxan Iconography:
    [Originates from] A Praxic Age moving picture serial. An adventure drama about a military spaceship sent to a remote part of the galaxy to prevent hostile aliens from establishing hegemony, and marooned when their hyperdrive is damaged in an ambush. The captain of the ship was passionate, a hothead. His second-in-command was Dox, a theorician, brilliant, but unemotional and cold.
    This must be obvious to the American audience, but took me a while to figure out. The moving picture serial is Star Trek, the ship is USS Enterprise, the passionate captain is Kirk, the unemotional and cold theorician is Spock.
  • Yorran Iconography. This one is from "an illustrated book", but "later they made moving pictures of it":
    Yorr is identified as a theorician, but if you see how he actually spends his time, he’s really more of a praxic. He has turned green from working with chemicals, and he has a tentacle sprouting from the back of his skull. Always wears a white laboratory smock. Criminally insane. Always has a scheme to take over the world.
    Must be another American pop culture reference. I am not sure, but thinking of Lex Luthor, the arch-enemy of Superman.
  • Muncostran Iconography:
    Eccentric, lovable, disheveled theorician, absent-minded, means well
    Saunt Muncoster is Arbre's Einstein, as evidenced by this depiction, as well as the more direct reference in Glossary: "A theor of the late Praxic Age, responsible for crucial advances in what is called, on Earth, general relativity".

Sunday, January 04, 2009

Наблюдение

Сейчас две основные темы новостей: газ и Газа.

Saturday, December 27, 2008

Обзоры книг

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

С. Макконнелл, "Совершенный код"

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

Мартин Фаулер. Архитектура корпоративных программных приложений

Основательный труд по систематизации типовых решений (patterns) для проектирования корпоративных приложений. Автор рассматривает общие проблемы, т.е. на что вообще нужно обращать внимание при разработке архитектуры, и затем предлагает серию типовых решений для каждой проблемы. Книга полезна и как введение в область проектирования корпоративных приложений, и как справочник. К сожалению, автор в основном рассматривает Web-based приложения, и вопросы, типичные для приложений с "толстым клиентом", не рассматривает.

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

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

Gamma, Helm, Johnson, Vlissides. Design Patterns

Классическая книга по Design Patterns, известная также как "Gang of Four". Написана в академической манере, подробно и основательно. В книге три основных части. В первой части объясняется, что такое Design Patterns и для чего они нужны. Во второй части на примере проектированя текстового редактора объясняется как Design Patterns возникают в реальной жизни. Третья часть представляет собой каталог 23-х базовых Design Patterns общего назначения. Описание каждого объясняет, откуда этот pattern взялся, когда его следует применять, как реализовывать, для пояснения используются диаграммы и примеры кода. Книгу можно использовать и как учебник, и как справочное пособие.

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

Гради Буч и др. Объектно-ориентированный анализ и проектирование с примерами приложений

Книга считается классическим трудом по объектно-ориентированному анализу и проектированию. Тем не менее, меня разочаровала. Книга состоит из трех частей: Концепции, Метод и Приложения. Первая часть содержит глубокий разбор основных концепций объектно-ориентированного анализа и проектирования: абстрация, объектная модель, классы, иерархия и т.п. Не совсем понятно, на кого ориентировано это изложение. Опытный программист уже знаком с этими концепциями, а начинающему будет сложно их понять из-за весьма тяжелого научного стиля изложения. Скорее всего, авторы ориентируются на тех, кто занимается computer science именно как science.

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

Третья часть, Приложения, описывает применение описанных ранее подходов для проектирования нескольких приложений. Эта часть наиболее интересна. Рассматриваются следующие системы:

  • Система спутниковой навигации. Проделывается очень высокоуровневое проектирование систем
  • Система контроля движения поездов. Рассматривается выработка требований
  • Криптоаналитическая система. Рассматривается более детальное проектирование. Интересно с точки зрения ознакомления с системами искусственного интеллекта
  • Система сбора данных с метеостанции. Рассматриваются вопросы embedded систем
  • Web-система планирования отпусков. Рассматриваются вопросы web-систем.

В целом, книга, безусловно, является серьезным научным трудом, но ценность ее для программиста-практика для меня не ясна. Третья часть содержит некоторые интересные моменты, да и то не вся.

Fritz Onion. Essential ASP.NET with Examples in C#

Книга последовательно и доходчиво объясняет принципы технологии ASP.NET. Мне понравилась тем, что описывает архитектуру и "как это работает внутри". Освещаются такие темы как веб-формы, конфигурация (web.config), диагностика и обработка ошибок, валидация, data binding, custom controls, кеширование, state management и безопасность.

Для понимания книги нужно знать немного C#, предварительных знаний по .NET не требуется.

К сожалению, книга посвящена ASP.NET версии 1.1, а в 2.0 уже много поменялось. Также хочу отметить, что прочтя эту книгу уже понимаешь, как работает ASP.NET, но еще не можешь писать ASP.NET-сайты сам; для этого нужно еще прочесть какую-нибудь более практическую книгу, например "ASP.NET 2.0 Website Programming" (см. ниже).

Marco Bellinaso. ASP.NET 2.0 Website Programming: Problem - Design - Solution

Книга по программированию на ASP.NET 2.0, построенная на примерах. Автор описывает создание веб-сайта для вымышленного пивного кабака (!), последовательно добавляя к нему функциональность, т.о. демонстрируя возможности ASP.NET 2.0 и как их использовать.

Помимо прочего демонстрируется использование master pages, membership (системы пользователей/групп и их прав), создание новостей, статей, опросов, email-рассылки, форумов, электронного магазина, персонализация и локализация. В завершение обсуждается deployment сайтов на ASP.NET 2.0.

Для понимания книги необходимо уметь читать код на C# и иметь базовое представление о ASP.NET.

Как Касперский тормозит почту

С некоторых пор стал наблюдать следующую картину на почтовом сервере: в очереди sendmail'а стоят письма, адресованные локальным пользователям, но не доставляются. Более того, письмо часто адресовано целой группе пользователей, но доставка затыкается на ком-то одном, и все, кто в списке после него, письмо не получают.

Посмотрим, нет ли блокировок почтовых ящиков:


# cd /var/spool/mail
# ls *.lock
lz.lock
# 

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

# fuser -v lz
                     USER        PID ACCESS COMMAND
lz:                  lz        20384 F.... pop3
                     lz        20476 F.... procmail
# 

Похоже, процесс pop3-сервера занял ящик, поэтому procmail не может открыть его на запись. Проверим:

# lsof -p 20384 
COMMAND   PID USER   FD   TYPE   DEVICE     SIZE     NODE NAME
...
pop3    20384   lz    9uR  REG    253,3 11922701 16680817 /var/spool/mail/lz

(здесь число послее опции -p команды lsof - это PID, который вывела команда fuser; и я опустил все строки в выводе lsof, кроме интересующей меня).

Действительно, файл заблокирован на чтение (о чем говорит большая буква R в колонке FD). Но с какой стати процесс pop3 это сделал? Казалось бы, он должен выдать клиенту все сообщения и "отвалить". С помощью strace'а я посмотрел, чем был занят процесс pop3 - оказалось, периодически получает от клиента команды NOOP, и все. Зачем клиент посылает эти команды и не отключается? Я проверил поведение Outlook Express'а на своем компьютере - как и ожидалось, он подключался, забирал почту и отключался, т.е. не висел и команд NOOP не посылал.

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

И черт с этим почтовым антивирусом, все равно почту проверяет ClamAV

Sunday, November 23, 2008

Forcing Sendmail to talk plain SMTP

While routinely checking out our mail queue I noticed a message stuck in it with an explanation I never saw before:

Deferred: 402 4.5.2 Error: command not recognized

Command not recognized? What is that supposed to mean? I ran sendmail -q -v manually and observed the following dialogue:

>>> 220 *******************************
<<< EHLO csltd.com.ua
>>> 402 4.5.2 Error: command not recognized
<<< QUIT
>>> 221 2.0.0 Bye

It looked like the remote mail server did not recognize Extented SMTP EHLO command. However, instead of replying with 500 error code (as it should when it does not recognize a command), it replied with 402 "temporary failure" code. Had it replied with the correct 500 code, our Sendmail would fall back to normal SMTP and retry with HELO command. But with 402 reply our Sendmail deferred the message.

Further analysis showed that the remote site deployed an overly clever Cisco firewall that filtered SMTP traffic. The firewall was configured (intentionally or not) to allow only plain SMTP commands. Anything else, including ESMTP EHLO, it replaced with XXXX. On top of that, the mail server software replied with an incorrect error code to the unknown command.

What a mess. How could I work around this? I had to force our Sendmail to talk plain SMTP to that particular remote server. This can be easily done with mailertable. Assume for the sake of example that the remote domain was brokensmtp.com. In /etc/mail/mailertable, I added the following entry:


brokensmtp.com       smtp:brokensmtp.com

The key here is that I specify smtp mailer instead of the default esmtp. Ran make in /etc/mail directory to rebuild the mailertable, and the issue was solved.

Friday, November 07, 2008

Windows 2003 Server cannot access Samba share

We migrated a certain application from a Windows XP workstation to Windows Server 2003 and faced the following issue. The Windows Server 2003 computer could not access a share on a remote Samba server that is running in security = server mode. Attempts to access the remote share resulted in this error message:

\\server is not accessible. You might not have permission to use this network resource. Contact the administrator of this server to find out if you have access permissions.

The request is not supported.

For various reasons we could not change the Samba server security mode to ADS. A workaround, however, was found here.

On Windows Server, start Local Security Policies, navigate to Local Policies --> Security Options. Open the "Network Security: LAN Manager Authentication Level" setting and set it to "Send LM and NTLM responses".

After that, remote Samba share is accessible. No reboot necessary.