nuclight: (Default)
Давно собираю, но всё как-то забывал выложить дальше, чем локальный сервер с видимостью только по Томску. Подборка разных сохраненных из инета статей по сравнению различных языков программирования и технологий "около того". Вот:

http://antigreen.org/vadim/ProgLanguageComparison/index.html

Там, например, можно найти материалы, которые из Интернета уже исчезли (а из http://web.archive.org выковыривать не очень удобно, да), в частности, список литературы к моей старой (однако ж до сих пор комментят) статье насчет PHP, в котором те же вопросы освещены более подробно, и разные другие материалы. Надеюсь, кому-нибудь пригодится.

P.S. Да, и с днем рождения дедушки Ленина всех.
nuclight: (Default)
Попалась в руки интересная статья по преподаванию у нас информатики (помянули и индусов), математики, логики и развитию критического мышления. Материал, быть может, спорный, но в любом случае интересный.

Какая математика нужна информатикам?


Николай Николаевич Непейвода, доктор физико-математических наук, профессор

Read more... )


Окончание статьи в следующей записи.
nuclight: (Default)
Пролетело тут в сендере (читал архивы, чего понаписали за время моего пребывания в Москве). Обращаю внимание, это сеть компьютерного факультета, далеко не самого худшего вуза страны.

Наткнулся тут на несколько строчек описания характеристик языка программирования:
===
возможность использования лямбда-абстракции;
функции высшего порядка;
недопустимость побочных эффектов (чистота языка);
ленивые вычисления (lazy evaluation);
сопоставление по образцу, функциональные образцы (pattern matching);
параметрический полиморфизм и полиморфизм классов типов;
статическая типизация;
автоматическое выведение типов (основано на модели типизации Хиндли — Милнера);
алгебраические типы данных;
типы данных с параметрами;
рекурсивные типы данных;
абстрактные типы данных (инкапсуляция);
списочные включения (list comprehensions);
использование охраны (guards);
возможность писать программы с побочными эффектами без нарушения парадигмы функционального программирования с помощью монад;
возможность интеграции с программами, реализованными на императивных языках программирования посредством открытых интерфейсов.
===
Люди, а мы вобще кто, типа программисты???

Ответом ему было молчание. Из всего факультета таким вопросом задался только один человек (регулярно меня выспрашивает по всякой всячине в программировании). Даже не знаю, как это расценивать, в контексте нынешней системы образования и состояния IT. Наверное положительно, потому что такие люди пока еще есть.
nuclight: (Default)
Я уже писал о том, как Microsoft стали покидать талантливые программисты. Всё, оказывается, обстоит гораздо хуже. Moishe Lettvin, бывший сотрудник Microsoft, ныне работающий в Google, описал процесс разработки одной из фич Windows Vista - меню завершения работы. На её разработку ушел примерно год, в процесс были вовлечены примерно 24 человека, три группы по 8 человек от ядра, интерфейса и шелла. В группе Moishe непосредственно программистом был только он сам - остальные дизайнеры, менеджеры, etc. Так вот, за весь этот год фактически было написано всего 200 (!) строк кода - то, что можно было сделать за неделю. Описание тут: http://moishelettvin.blogspot.com/2006/11/windows-shutdown-crapfest.html (много комментов).
Непосредственно перед этим по этой фиче проехался Джоэль. Он, конечно, перегнул палку (ребут выкинуть вознамерился), но в общем-то по делу - а иначе и быть не могло, когда столько человек над этим спорили (в противоположность можно посмотреть, как аналогичное делалось разработчиками Mac OS X).
Причины таких ужасов выяснилась в комментах, где засветилось еще несколько сотрудников Microsoft.
Во-первых, это организационная структура - слишком много менеджеров и подразделений. Те три группы, которые работали над этой фичей, находились на значительном удалении от "корня дерева" подразделений, и были связаны только через корень, а не где-то поближе. Тут вспоминается "Мифический человеко-месяц" Брукса и закон Конвея: "Any piece of software reflects the organizational structure that produced it" (есть другая формулировка из законов Мерфи: "В любой организации всегда найдется человек, знающий, что происходит. Его-то и надо уволить").
Во-вторых, сама структура исходного кода Windows достаточно хреновая для разработки. Поскольку очень много компонентов, много и перекрестных зависимостей между ними, и общий билд всего очень часто может быть поломан чьим-то кодом. Microsoft пошла по наиболее простому пути, и просто разделила код на множество независимых репозиториев (кстати, разработчик их VCS, именуемой SourceDepot, тоже ушел в Гугль - это в него тогда Балмер швырялся стулом). В результате, между группами тех же разработчиков этого меню, изменения в коде могли распространяться от одного до трех месяцев (!). А ведь можно было просто реорганизовать исходный код для устранения перекрестных зависимостей, как это делают в опенсорсных проектах - там зависимости обычно идут разве что на редко изменяемые стабильные компоненты.
И показательно замечание Джоэля в ответ на всё это:
Every piece of evidence I've heard from developers inside Microsoft supports my theory that the company has become completely tangled up in bureaucracy, layers of management, meetings ad infinitum, and overstaffing. The only way Microsoft has managed to hire so many people has been by lowering their hiring standards significantly. In the early nineties Microsoft looked at IBM, especially the bloated OS/2 team, as a case study of what not to do; somehow in the fifteen year period from 1991 - 2006 they became the bloated monster that takes five years to ship an incoherent upgrade to their flagship product.

Впрочем, как отметили в комментах, более удивительно другое - как они вообще при всём при этом смогли выпустить Висту. Да уж... учитывая, что Гейтс покидает компанию, Microsoft видимо таки ожидает печальный итог...
nuclight: (Default)
Читаю заметку http://peterwright.blogspot.com/2006/09/good-bye-microsoft-pete-has-now-left.html и комменты к ней. Автор, Pete Wright, автор многих книг по программированию (к примеру, The Beginners Guide To Visual Basic 3, Beginning Visual Basic 4, Beginning VB5, Beginning VB6, Beginning VB5 Objects, Beginning VB6 Objects, Beginning Delphi 2.0, Beginning GTK+/Gnome, ADO.NET: From Novice To Professional, Beginning Visual C# Express, Beginning Visual Basic 2005 Express), описывает свой разрыв с Microsoft. Занятное чтение.
Среди комментов попался один интересный: "Im sure Bill Gates felt the disturbance in the force...". Да уж, вполне вероятно. Можно еще вспомнить Джоэля с его "Как Microsoft проиграла войну API". В общем, валить надо с винды, пока переход на Висту не принял повальный характер...
nuclight: (Default)
Наткнулся на отчет с ICFPC-2006, International Conference on Functional Programming Contest.
Каждый год случается международная конференция ICFP - International Conference on Functional Programming. К этой конференции приурочен програмерский contest под названием ICFPC. Несмотря на название конференции, участвовать в контесте может любой желающий, и пользоваться можно любыми языками, не только функциональными, кроме того - участники могут объединяться в команды. Contest отличается от соревнований типа ACM и topcoder тем, что он менее "заточен" под какие-то конкретные языки или наборы навыков, а задачи в нем прикольные и позволяют получить удовольствие не только от победы, но и от участия.

Это, скорее, набор головоломок, причем очень интересных, в том числе тем, что её необязательно должна решать программа - она может быть лишь инструментом. А может быть, таких инструментов понадобится не два и не три, а больше, и на каждом "уровне" решения откроется что-то новое. Чего стоит только раз про слоеную виртуализацию - внутри вирутальной машины запущена игра, в которой тоже можно программировать :)

Очень интересно, настоятельно рекомендую к прочтению. Сам рассказ в трех частях:
http://users.livejournal.com/_adept_/24049.html#cutid1
http://users.livejournal.com/_adept_/24313.html#cutid1
http://users.livejournal.com/_adept_/24321.html#cutid1
nuclight: (Default)
Сабж новую нетграф-ноду ng_tag. Выполняет роутинг пакетов внутри нетграфа по наличию указанных mbuf_tags(9), а также может их навешивать. Теги используются в сетевой подсистеме ядра много где, но на текущий момент наиболее интересным, имхо, является взаимодействие с недавно добавленной в ipfw функциональностью tag/tagged - анализ пакетов выполняется в нетграфе, потом проверяем это дело в ipfw (или наоборот, метим в ipfw для дальнейшей обработки в нетграфе). Это позволяет сделать, например, анализ содержимого пакетов (фактически L7 filtering) полностью в ядре.
В качестве proof-of-concept в мане приведен пример фильтрации соединений данных P2P-трафика системы DirectConnect (как и многие другие, отличается тем, что по портам не зафильтруешь, надо в payload пакета лезть), в сочетании с нодой ng_bpf(4) (вот блин, в системе с 4.0 в ядре анализатор трафика имеется, а мло кто и внимание обращал). То, что делает сторонний линуксовый iptables-модуль ipp2p, сможем гибче делать штатно ;)

Для теста необходим CURRENT от 25 мая или новее - MFC в RELENG_6 патчей tag/tagged к ipfw будет в районе 24 июня. Можно впрочем и на 6-ке их сейчас накатить, или из CVS, или наложить патчи с http://butcher.heavennet.ru/patches/kernel/ipfw_tags/ - только в CVS оно всё же доправлено/дофикшено (плюс к тому, поменялось значение MTAG_IPFW, т.е. конфигурять ng_tag надо будет чуть иначе).

Брать тут: http://antigreen.org/vadim/freebsd/ng_tag/
Сборка:
  make
  kldload ./ng_tag.ko

Ман читать так:
  cat ng_tag.4 | /usr/bin/tbl | /usr/bin/groff -S -Wall -mtty-char -man \
    -Tascii | /usr/bin/col | more -s

Просьба поддержать это дело в current@ и в net@ (я туда письма отправил, желательно на них отвечать) - дабы закоммиттили в дерево, хочется-таки в 6.2 это заиметь.

P.S. Сегодня удачный день у меня в плане BSD выдался... ng_tag заработал, багу в ufs2tools совместно с автором починили... Хорошо, однако.
nuclight: (Default)
Октябрьское обсуждение у [livejournal.com profile] potan, перевалившее за три сотни комментов, состоит в основном из флейма. Да, конечно, там много интересных реплик, ссылок, и рассуждений о том, "как оно должно быть", но более-менее систематизированного перечисления недостатков PHP нет (разные "невинные" мелочи вроде отсутствия вменяемого DBMS API или приколов типа setlocale(LC_ALL,"ru_RU.KOI8-R"); echo (float)(string)(float)"1.5"; не в счёт).
Можно долго спорить о том, каким должен быть язык web-разработки ([livejournal.com profile] mauhuur выразил претензию, что PHP слишком низкоуровневой язык общего назначения, и я вполне согласен, что DSL - лучше). Вместо это я рассмотрю PHP, главным образом, в сравнении с Perl'ом, поскольку оба претендуют на примерно одну и ту же нишу (на PHP можно и обычные скрипты писать, не для Web), оставив в стороне другие языки (и так слишком много получилось). Дальше будет преимущественно изложен переведенный и обработанный материал документа PHP in contrast to Perl и ссылок из него. не без своих мыслей, разумеется )
nuclight: (Default)
Интересная статья: http://rsdn.ru/article/philosophy/languages.xml
Повествует об эзотерических языках программирования, т.е. о языках, предназначенных не для написания полезных практически программ, а скорее наоборот, ставящих целью это всячески затруднить, в общем, народ развлекается, попутно исследуя возникающие интересные проблемы. При этом, естественно, почти все такие языки - Тьюринг-полные.

Началось это в 72 году созданием языка INTERCAL, но расцвело по-настоящему буйным цветом после создания в 93 году языка BrainFuck, состоящего всего из 8 инструкций. Вот "Hello world!" на нём:
++++++++++[>+++++++>++++++++++>+++>+<
<<<-]>++.>+.+++++++..+++.>++.<<++++++
+++++++++.>.+++.------.--------.>+.>.

Собственно, он практически полностью саму машину Тьюринга и моделирует. Зато компилятор размером всего в 240 (!) байт :) Энтузиасты даже создали для него IDE и компьютер, нативно исполняющий brainfuck-код (см. иллюстрации к статье).

Создавались языки самые разные, и графически моделирующие, и поэтические (вроде Shakespeare, где надо написать пьесу, или Haifu - программа выгялдит как хокку). Но и цель "затруднить написание программы до невозможности" не оставалась в стороне, а скорее стала идеалом, в результате чего появился язык Malbolge (от Malebolge, название восьмого круга Ада Данте - автор так и говорит, что хотел сделать максимально Infernal язык программирования). Задача удалась - первая программа на этом языке (разумеется, "Hello World") появилась спустя всего каких-то 2 (!) года. Причем она была не написана, а найдена с помщью специальной исследовательской программы на Лиспе. Вот код:
(=<`:9876Z4321UT.-Q+*)M'&%$H"!~}|Bzy?=|{z]KwZY44Eq0/{mlk**
hKs_dG5[m_BA{?-Y;;Vb'rR5431M}/.zHGwEDCBA@98\6543W10/.R,+O<


Эта цель была не единственной, создавались и просто пародии. Например, стремление языка Ada к максимальной безопасности доведено до смешного в языке paranoid - вот пример кода с синхронным переводом:
//типы данных:
х: сомнительное целое;
а: мало_похоже_на массив [x..y а_может_быть z] каких_нибудь символов;
L: безнадежно_поврежденный список слишком_маленьких целых;
//присвоение значения переменной:
x ТОЧНО 3;
x ЧЕСТНОЕ_СЛОВО 3;
x МАМОЙ_КЛЯНУСЬ 3;
//условия:
ЕСЛИ y ЧТО_ТО_ОКОЛО 8 ...
ПРИ_МАЛЕЙШЕМ_ПОДОЗРЕНИИ_ЧТО
x < 100...
//вызов процедуры:
СБЕГАЙ_КА_ПОИЩИ имяпроцедуры;


Однако не все такие языки - Тьюринг-полные. Например, язык HQ9+ имеет всего 4 инструкции, соответствующие стандартным тестам, предъявляемым к языкам: H печатает "Hello, World!", Q реализует тест Квайна (программа, печатающая свой собственный исходник), 9 реализует "99-бутылочный тест" (на арифметику и циклы, должно печатать «99 бутылок пива стоят на стене. Одна упала. 98 бутылок пива стоят на стене. Одна упала. 97 бутылок...»), и операция + инкрементирует значение внутренней переменной (а просто так, доступа к ней все равно нет).

Стоит, однако, прочитать статью целиком (я привел совсем немного) - там описано гораздо больше интересного (и смешного).
nuclight: (Default)
Увидел тут у [livejournal.com profile] metaclass ссылку на статью "Крах иллюзий" Роба Пайка (того самого, соавтора первого Unix'а, Plan 9 и других концептов), повествующую о кризисе научного развития IT в области системного ПО (исследования нафиг никому не нужны, интересуются финансовой отдачей).
Автор намеренно рассматривает проблему с пессимистической стороны. Не последним тормозом, кстати, является (по его мнению) Open Source (т.е. главным образом Linux, в рассматриваемой сфере).

Читать.
nuclight: (Default)
Таки наконец написал, сдал и защитил летнюю практику. Темой я себе выбрал написание клиент-серверной системы с unix-сервером. Чтобы, значится, научиться программировать под юниксы (ну в общем-то так и есть...) и все такое. Ну вот стало быть, летом я сначала колотил балду, потом три недели сочинял протокол ("может сегодня перевыполнить план и написать 2 абзаца?"), потом за 6 дней настрочил клиента на Delphi, без тестирования, ибо нечем. В процессе оценил удобства редактора Delphi, вроде autocompletion. Потом неспеша принялся за сервер.. опаньки, а тут в Томск пора ехать.
В Томске к этому делу изъявил желание подключиться сосед-линуксоид. Положили под CVS и поехали. Впрочем, писал он совершеннейшую чушь (в commands.c), пришлось переделывать.
В процессе, как водится, выловили огромное количество багов. Начиная от смешных, когда & вместо && в if вываливал сервер в корку сразу при старте, продолжая "невозможными", когда сервер терминировала проверка указателя на NULL там, где он казалось бы, ну никак не может попасть в этот кусок кода, если этот указатель равен NULL, и заканчивая вообще странными проблемами с портабельностью. Например, инициализацию демона с вызовами отадочных syslog() в процессе:
openlog(...);
//daemonize here
for (i=0; i < 20; i++) /*we guaranted to have at least 20 descriptors */
  close(i);            /* close them as W.R.Stevens suggests */
...
socket(); bind(); listen();
...
select(); //in endless loop

С этим куском обнаружились интересные вещи - сервер порт то слушал, то не слушал! Причем в зависимости от уровня записи отладочной инфы в syslog было разное поведение, тестировалось на FreeBSD 4.11 и Linux 2.6.11 (Slackware 10.2). В процессе разборок, когда уже пришлось спрашивать у опытных товарищей ([livejournal.com profile] netch'у привет, ага), выяснилось, что это тут трюки в syslog - он этот дескриптор перехватывал, а на разных системах разная реализация - тут глюки есть, там нет. Мораль: не закрывайте в демоне дескрипторы, кроме 0,1 и 2 (эти лучше открыть на /dev/null).

Итак, под конец этот простенький чат (многоканальный, а-ля IRC) заработал нормально. Качество кода, имхо... э-э-э... среднеопенсорсное :) Точнее, оставил на закуску один специфический race condition, с подробным описанием бага и путей решения в последнем commit'е.

Архив с этой поделкой (исходники клиента, сервера, CVS-репозиторий сервера, протокол и отчет по практике) выложен тут. Вполне может пригодиться кому как курсовая, например. Или просто поизучать на простом примере, как пишется сетевой сервер по модели однопроцессной FSM (FAQ fido7.ru.unix.prog, appendix 1, п. 2) - в этом случае также полезно посмотреть изменения от ревизии к ревизии для изучения ошибок :)

P.S. Программу в работе у меня никто не смотрел. Даже не спрашивали толком :)

February 2017

S M T W T F S
   1 234
567891011
12131415161718
19202122232425
262728    

Syndicate

RSS Atom

Style Credit

Expand Cut Tags

No cut tags
Page generated Jul. 25th, 2025 02:36 pm
Powered by Dreamwidth Studios