Линуксы — это хорошо

# apt-get build-dep nginx
Reading package lists... Done
Building dependency tree
Reading state information... Done
Note, selecting 'liblua5.1-0-dev' instead of 'liblua5.1-dev'
The following packages will be REMOVED:
libgd2-xpm php5-gd

(c) [info]alexkuklin

Правильные конфигурационные файлы

Несколько соображений относительно того, как должны быть устроены конфигурационные файлы.

Во-первых, обязательно надо использовать xml-подобный синтаксис. Желательно глотать не любой файл с расширением xml, а только в одной из юникодных кодировок с добавлением трех «нечитаемых» байт в начале (это называется BOM, Byte Order Mark) — чтобы его нельзя было редактировать простыми текстовыми редакторами.

Во-вторых, я не зря сказал «подобный». Просто необходимо сделать результат чтения файла зависимым от наличия в нем табуляции (конечно, она дублирует xml, но…). При этом надо различать символ табуляции и четыре подряд стоящих пробела.

В третьих, для окончательного запутывания тех, кто решит «разбирать» эти файлы — сделайте набор команд в них полным по Тьюрингу.

Я ничего не забыл?

Новости экономики

По тель-а-визору рассказывают о том, что рейтинговое агентство Standart & Poor’s снизило кредитный рейтинг США и теперь-то Америке точно хана! Не сегодня-завтра простые техасские реднеки загонят Обаму обратно на дерево, пошлют всех на три буквы и введут амеро! Впрочем, я увлекся цитированием.

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

Еще про школьный Линукс

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

Так как новое начальство предрекает скорый и неминуемый вендекапец (а также повсеместный переход на МСВС), я решил в добавление к установленной по умолчанию Windows 7 поставить еще и Linux. К сожалению, в своем выборе я был несколько стеснен — одна важная по работе софтина существует только в версиях для древнего RedHat (он же МСВС), древнего ASP Linux и древнего ALT Linux. Последняя, правда, работает и в ALT Linux пятой версии, которую можно легко достать в виде «школьного Линукса».

Я с этим поделием немного работал и не очень обрадовался. С версией «ALT Linux Школьный Мастер» (название радует отдельно, почему-то представляется полупьяный трудовик дядя Вася) все получилось куда веселее — она просто не устанавливается, доходит до настройки иксов и при смене разрешения экрана падает с kernel panic, причем весьма качественно — то, что упало все, можно понять только по веселому миганию лампочек клавиатуры. Если че, то используется графика, встроенная в Intel Core i5.

Согласитесь, что даже сделанный укуренными голландцами Minix 3 в сравнении с ЭТИМ — просто образец стабильности.

На наступающий через пятнадцать минут понедельник планирую линуксосрач.

Байка

Кстати, перечитал пост с цитатой из Хайнлайна и вспомнилась одна давно слышанная история. Рассказываю по методу «испорченного телефона», так что считайте все совпадения выдумкой автора.

Есть некая фирма, занимается всяким дачно-коттеджным строительством по Подмосковью. Работают так: получили с клиента заказ и предоплату, завезли на объект бригаду строителей, материалы и т. п., затем убеждают клиента в том, что построенная халупа — это то, о чем он мечтал и получают оставшуюся сумму (исходя из логики «а куда он денется»). Строят «под ключ», то бишь даже с полной отделкой. Так вот, однажды на объект завозили плитку, причем завезли двумя «заездами». Строители углядели, что плитка слегка разных оттенков и позвонили клиенту, что им строго запрещено — все общение должно происходить через сидящего в уютном офисе «менеджера», и некоторые клиенты так и поступают, но… как говорил Хайнлайн, специализация — удел насекомых. (Не)нормальный клиент ездит на стройплощадку два раза в неделю, вникает во все детали и ругается с менеджером не тогда, когда объект уже сдан, а во время всех «скрытых работ». Разумеется, что он просит строителей предупреждать о любой мелочи, типа завоза материалов. Клиент примчался на объект, сравнил цвета плитки из разных партий и рванул в офис фирмы, где устроил дебош с метанием кафеля в гендира и прочими милыми развлечениями. Фирма офигела, гендир спрятался от летящей плитки и поднял белый флаг из трусов. Было достигнуто соглашение о безоговорочной капитуляции — т. е. гендир признал ошибку и согласился на то, что некошерную плитку вывезут, а вместо нее привезут правильную.

Интересна здесь судьба рабочих, которые предупредили клиента о возможном косяке. Фирма их «оштрафовала», то есть выплатила не все причитающиеся деньги — объект бы и так сдали, может быть, никто ничего бы и не заметил (а если бы и заметил — то не стал бы ломать свежеуложенную плитку), а тут пришлось гонять за 100 километров «Газель».

Миникс и USB

Кстати, говорят, что в Миниксе версии 3.2.0 появилась поддержка libusb. Надо будет поставить и попробовать собрать JZboot. Были бы драйвера для какого-нибудь USB-RS232 адаптера — было бы совсем хорошо.

Клеим кораблики

[info]vanchez подписался на набор для сборки модели крейсера «Варяг» в масштабе 1:200. Будет прихожить по четыре выпуска раз в месяц, а пока — разгребаем уже вышедшие 15 номеров. За первые два дня мы почти закончили сборку набора корпуса и с ужасом смотрим на предстоящую его обшивку березовыми планочками.

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

Кстати, вопрос к знающим людям. В этих моделях очень мало пластиковых деталей, в вышедших номерах «Варяга» их не так много — нос, корма и поддоны орудийных портиков в 17 номере. Надстройка и трубы, например, с большим гемором собираются из вырезанных с помощью лазерной резки деталей из ХДФ (это что-то типа древесно-волокнистой плиты). Неужели лазерная резка дешевле, чем изготовление деталей из пластика?

А ты БОЛЬШОЙ красный флаг видел?

[info]infomaker написал сегодня интересную запись «Работать клиентом» про одну из особенностей российской жизни — если хочется, чтобы что-то сделали хорошо, то недостаточно просто заплатить деньги — надо лично проконтролировать каждую мелочь. А в комментариях к записи про Computer Science на мехмате [info]aldanur высказал схожую мысль:

“Работа на ЭВМ”, конечно, местами мрачная, но правильно товарищ выше говорит, что при желании можно было получить внятное CS-образование на мехмате (если самому искать правильных людей и спецкурсы)

Понятно, что [info]aldanur обитает сейчас в Швейцарии и ему кажется интересным «искать правильных людей» — но российская реальность состоит из этого «искания правильных людей» почти полностью. Вот, например, на одном из автомобильных форумов некий счастливый уазовод описывал свои впечатления о работе дилерского сервиса. В общем, приехал он для того, чтобы поменять масло, прошприцевать шарниры карданного вала и рулевых тяг (в рамках планового дилерского техобслуживания), ну и заодно помыть машину. Оказалось («на выходе») что машину помыли, и все! Масло не меняли, шарниры не шприцевали — оказывается, у дилера (!) нет нужного масла и нет пресс-масленки.

Какой совет нам дают Алдануры и иже с ними? Надо искать «правильный сервис» и «правильного механика». Для того, чтобы более-менее комфортно жить в России, надо немного разбираться (для того, чтобы найти «правильных людей») во всем — от строительства до устройства и ремонта автомобилей. Для того, чтобы научиться чему-то на мехмате МГУ, надо заранее, при поступлении знать всю ту математику, которую придется учить — и с этими знаниями целенаправленно искать «правильные спецкурсы».

Наверное, девизом жизни в России должна быть эта фраза Хайнлайна:

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

Согласитесь, хорошая замена красному флагу на границе (из анекдота про иностранца в СССР)?

Вейсманистам-морганистам на заметку

Сегодня обсуждали успехи истинно мичуринского садоводства на фазенде. Я в разговоре раздвигал руки, показывая длину выращенных кабачков и показывал ладошкой высоту укропа. Минут за 20 кабачки «выросли» с 15-20 сантиметров до метра, а укроп — выше человеческого роста. Вот она, истинная сила мичуринской агробиологии!

Аналогичные достижения вейсманистов-морганистов мне неизвестны. [info]hirou, может, расскажешь?

О цене на водку

Или «какую страну просрали». Навеяно последней записью [info]shoei1980.

Разные люди независимыми методами пришли к мнению, что курс советского рубля середины 80-х к нынешнему российскому составляет примерно 1:100 — то есть один советский рубль равен ста нынешним. Советская водка времен начала антиалкогольной кампании Горбачева стоила 4 рубля 12 копеек получше или 3 рубля 62 копейки похуже — то есть 412 и 362 российских рубля соответственно. Средняя советская зарплата составляла 200 рублей, средняя российская — около 20 тысяч.

Сейчас идут разговоры о том, что хорошо бы продавать «социальную водку» для конченых алкашей рублей по 70-80. Разумеется, «социальное пойло» должно быть настолько отвратительным (из-за специальных вкусовых добавок), что пить его сможет только полностью опустившийся человек (но при этом оно должно быть более «привлекательным», чем стеклоочиститель или тормозная жидкость). Так вот, возникает вопрос: за что боролись? С 1985 года «потребительская стоимость» водки упала более, чем вчетверо. Можно предположить, что и алкашей стало много больше (так как напиться до поросячьего визга стало вчетверо легче).

Удивительно, что все разговоры о повышении цены на алкоголь заканчиваются ссылками на «исторический опыт» — якобы если самая гнусная водка станет стоить больше 100 нынешних рублей, то население перейдет на всякую косорыловку, как случилось после 1985 года. Интересно, как любители косорыловки обходились в СССР, когда водка стоила намного дороже, чем 1 рубль?

Собираем toolchain для MIPS

Как конченый китаефоб, я попросту не доверяю тем toolchain-ам, которые можно скачать с сайта Ingenic. А как вымирающий миниксовод, просто-таки обязан использовать для разработки Minix.

На самом деле, правда, я решил использовать ноутбук с миниксом как машину для разработки по одной простой причине — Minix 3 сейчас представляет собой довольно странную систему с точки зрения набора средств разработки. Например, make в миниксе — это вариация на темы BSD make, а входящий в Cygwin (под которым я хотел работать сначала) GNU make не понимает «позаимствованные» из NetBSD makefile-ы ядра Minix. Собрать BSD make в Cygwin у меня не получилось, там есть какие-то нюансы, так что я решил портированием миникса заниматься на нем самом.

Естественно, что фирма Ingenic не подозревает о существовании такой ОС и «готовый» toolchain для него не выкладывает. Тем хуже для них, потому как компилятор и утилиты для MIPS ничего особо страшного не представляют. Я решил действовать по инструкции с linux-mips.org. Пока что я собрал только binutils и GCC, перспективы использования отладчика пока туманные (так что все дальнейшее превращается в некую авантюру). Успокаиваю себя тем, что в Minix 3 приличного отладчика тоже никогда не было, и ничего, живут люди.

Итак, для начала скачиваем рекомендованные на сайте версии binutils (2-16.1) и GCC (3.4.4). Думаю, что binutils можно и посвежее, а вот с выбором GCC лучше не торопиться. То, что другие называют «бета-версией», разработчики компилятора GNU считают самостоятельным релизом. Например, в магистерской работе Ингмара Альтинга про портирование Minix 3 на PowerPC специально обращается внимание, что GCC 3.4.6 нормально компилирует MinixPPC, а 4 версия (4.x.x) жестко косячит.

Перед сборкой определим некоторые переменные окружения.

export WDIR=/tmp
export TARGET=mipsel-unknown-linux-gnu
export PREFIX=/usr/local/mipseltools
export PATH="${PATH}":${PREFIX}/bin

Говорят, что в качестве $TARGET можно безболезненно использовать сокращенную запись того же самого — а именно, mipsel-linux, но я не проверял. Вообще, эта строка строится по правилу архитектура-компания-ядро-ОС или иногда — архитектура-компания-ОС, например, mips-sgi-irix6.

Для начала собираем binutils. Тут все без сюрпризов. Распаковываем, конфигурируем, собираем, устанавливаем.

tar xjf binutils-2.16.1.tar.bz2
mkdir build-binutils && cd build-binutils
../binutils-2.16.1/configure --target=$TARGET --prefix=$PREFIX
gmake
gmake install
cd ..

Обращу внимание, что вместо make надо вызывать gmake, в случае с binutils все прокатывает, а с gcc возможны ошибки из-за различия синтаксиса Makefile-ов.

C gcc придется немного повозиться. Во-первых, configure неверно определяет возможности системы, во-вторых, встроенные типы Minix конфликтуют с некоторыми локальными для gcc определениями. Итак, распаковываем и конфигурируем.

tar xjf gcc-3.4.4.tar.bz2
mkdir build-gcc-bootstrap && cd build-gcc-bootstrap
../gcc-3.4.4/configure --target=$TARGET --prefix=$PREFIX --enable-languages=c --without-headers --with-gnu-ld --with-gnu-as --disable-shared --disable-threads

В файле gcc/auto-host.h убираем определения HAVE_GETRLIMIT и HAVE_MMAP_FILE. Кроме того, надо временно закомментировать в файле /usr/include/minix/types.h определение типа block_t. В одном из модулей gcc определяется собственный тип с таким же названием, не имеющий никакого отношения к блокам файловой системы Minix. После этого —

gmake
gmake install
cd ..

Работоспособность всей получившейся хрени можно проверить, собрав u-boot. Все очень просто — скачиваем его с VoGeeky (а можно, кстати, поставить git). Правда, придется поправить Makefile. Вместо конструкции

ifeq ($(ARCH),mips)
CROSS_COMPILE = mipsel-linux-
endif

пишем

ifeq ($(ARCH),mips)
CROSS_COMPILE = mipsel-unknown-linux-gnu-
endif

Теперь можно собирать (естественно, не забыв, что путь к тулчейну был добавлен в $PATH):

gmake volans_nand_config
gmake

После этого компилятор поработает-поработает и выплюнет вполне работоспособный загрузчик. Правда, придется перекинуть его на другую машину, чтобы засунуть в плату — дело в том, что в Minix то ли нет поддержки USB, то ли она в зачаточном состоянии. Соответственно, jzboot запустить не удастся. Ну а как перекидывать файлы — прекрасно написано в руководстве по сетевым возможностям Minix 3.

Валим из этой страны

Все пропало, средний чек в московском макдаке составляет 8,92 $, а в американском — всего лишь 6,50.

http://www.nytimes.com/2011/08/04/business/global/russia-becomes-a-magnet-for-american-fast-food-chains.html?_r=3&pagewanted=1&ref=business

Пока наши СМИ в один голос твердят, что бизнес в России невозможен, к нам лезут американские сети быстрого питания. Почему-то они СЭС не боятся.

Джойстик от Денди

Кстати, нашел схему джойстика Dendy. Оказывается, это всего лишь восьмибитный статический регистр (микросхема 4021) с соответствующим количеством кнопок, а схему вполне можно вписать в габариты отсека для клавиатуры Playstation. В общем, можно попробовать превратить вогоплеер в гибрид плеера и Dendy. Ничуть не хуже Playstation :)

Необходимые пояснения

Запись про обучение программированию на мехмате МГУ почему-то сегодня привлекла внимание общественности. Так как запись, в общем-то, провокационная, необходимо дать некоторые разъяснения.

Во-первых, по поводу того, что на «профильных» кафедрах (вычислительной математики, математической теории интеллектуальных систем и т. п.) читается несколько более полный курс. Если заметите, то основные претензии я предъявляю к «Программированию и работе на ЭВМ». Этот курс растянут на четыре семестра и читается на первом и втором курсах, еще до распределения на кафедры. Соответственно, он и представляет (должен представлять) собой то, что требуется знать математику, этакое «введение в Computer Science». Даже некий «идеальный» курс программирования для мехмата (я его не буду озвучивать, чтобы не вызывать холиваров — у меня есть некие предположения, что там должно было бы быть, но я считаю себя не вполне компетентным, чтобы выдавть своих личных «тараканов в голове» за ту необходимую часть CS) будет содержать лишь некоторые из пунктов, озвученных [info]sharpc под заголовком «Теоретический минимум для программиста«.

«Практикум на ЭВМ» третьего и четвертого курсов, на мой взгляд — вполне разумное дополнение к курсу «Численные методы», а его растягивание на четыре семестра связано исключительно с тем, как (плохо и медленно) умеют писать программы студенты, успешно сдавшие «Программирование и работу на ЭВМ».

Во-вторых, к вопросу о том, нужно ли программирование на мехмате вообще. Здесь я солидарен с человеком, подписывающимся ником Гастрит ([info]__gastrit), который на старом-престаром форуме мехмата написал следующее в ответ на аналогичную по содержанию реплику (по поводу второй части можно с Гастритом и поспорить, но делать это в отсутствии оппонента как-то глупо):

Смотрю на календарь. Вижу там число: 2 сентября 2005 года. Отвечающее этой дате основное вычислительное (т.е. математическое) средство — электронно-вычислительная машина. Следовательно, человек, получающий в обсуждаемую эпоху квалификацию «математик» (тем паче — «математик-прикладник») обязан иметь элементарные навыки работы с ЭВМ. Не имеете таковых — вперёд за записью «философ, философ-трепач»

Сегодня — 5 августа 2011, но актуальность эта фраза не потеряла. К сожалению, для математика «элементарные навыки работы с ЭВМ» оказываются довольно обширными. Универсальных средств, позволяющих в произвольной форме, допустим, преобразовывать к нужной форме любые выражения или же доказывать теоремы, на сегодняшний день не существует. Следовательно, математик должен уметь заставлять ЭВМ делать то, что ему нужно, то есть писать программы. Это требует некоторых знаний в области Computer Science.

Есть и другое соображение. Разработка информационных систем в терминах отечественных ГОСТов подразумевает разработку так называемого «математического обеспечения» — в современном понимании это алгоритмы, которые реализуются в программном обеспечении. Например, должностная инструкция математика, опубликованная в одном из ходящих в интернете «справочников кадровика» содержит следующие пункты:

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

< … >

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

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

Следующее. По поводу того, что программа мехмата сравнивается с программами факультетов Computer Science. Последние намного шире, чем та «идеальная» программа мехмата, которую мне хотелось бы видеть. Более того, я говорю о той области CS, которая незаслуженно «обходится» на мехмате. Вычислительная геометрия все-таки для математика важнее, чем теория операционных систем (которая излагается в трех словах: «Ядра — чистый изумруд!»). На мехмате вместо, допустим, изучения важных алгоритмов из этой области, студентов учат рисовать картинки в Wolfram Mathematica. Дело тоже полезное, но на «Практикум по компьютерной геометрии» не тянет.

Наконец, последнее. Говорят, что выпускники непрограммистских факультетов американских университетов «умеют писать только на фортране и знать не знают про ООП». Американских университетов существует довольно много, наряду с MIT или Беркли есть и «университеты штатов» — какой-нибудь Michigan State University. Там действительно программы — на уровне МГУшной. Вообще, в красивом дипломе, который с 2010 года выдает Московский Университет, большими латинскими буквами написано Moscow State University — как перевел бы американец, «Университет штата Москва». Как ни странно, во всяких международных рейтингах ВУЗов МГУ находится среди всех этих «Nord Wyoming State University», так что название вполне соответствует.

Кстати, недавние выпускники мехмата назвали ту запись «чересчур мягкой» :)

Про хаброидов

На днях видел на хабре две записи, можно либо смеяться, либо плакать.

Первая — «как правильно писать на Javascript». Первый же совет звучал примерно так:

Никогда-никогда не используйте eval()! Даже если очень надо — все равно не используйте! eval() позволяет порождать код, а это очень-очень нехорошо! Так делать нельзя, потому что так делать нельзя никогда!

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

Доводя это до абсурда, скажу, что самые true-программисты никогда не используют операторы цикла, а обходятся только goto и if в виде

if(condition) goto somewhere;

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

Вторая — чувак для понтов реализовал в C++ вычисления, как он сам сказал, «с плавающей точкой» на этапе компиляции (с использованием шаблонов, разумеется). Я не буду придираться к тому, что на постсоветском пространстве вместо точки «плавает» запятая, потому как заголовок неправильный с самого начала. Число с плавающей запятой — это представление числа в виде мантиссы с фиксированным количеством знаков и порядка. У автора реализовано представление в виде отношения двух целых чисел, это несколько другое «решение». Обычно в программировании это называют «рациональными числами», не заботясь, правда, о полной корректности этой формулировки. Подходы эти принципиально разные и путать одно с другим не надо.

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