суббота, января 20, 2007

И немного про LaTeX

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

Спасибо LaTeX-у за то, что я теперь реже ругаюсь матом.

пятница, января 19, 2007

Небольшой обзор персональных wiki-систем

На работе давно пользуюсь wiki, входящей в состав Trac. Wiki — это дико удобная вещь для создания заметок и их дальнейшего связывания друг с другом. Можно начать с маленького черновика, и дорасти до настоящей проектной документации. Или даже до чего-то большего, например, до Wikipedia.

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

Конечно, можно завести себе доменное имя, сервак, и установить на него Trac, а лучше MediaWiki, но возиться не хочется. И решил я поискать — что же мне предложит старик интернет?

И вот, что я нашел и попробовал:

  • http://stikipad.com/ — выделяет 30 MB для фришного аккаунта, что для обычного текста без картинок более чем достаточно; позволяет делать приватные вики (вход только по паролю); форматирование textile или markdown или WYSIWYG, т.е. не такое, как привычное мне форматирование в Trac или форматирование в MediaWiki (см. также тут); позволяет делать примитивные TODO-шки (не Trac, конечно); есть теги.


  • http://pbwiki.com/ — простая, как peanut butter sandwich — утверждает сайт; действительно простая; выделяет 10 MB для фришного аккаунта; также позволяет приватность; лично мне не очень понравился внешний вид; формат pbwiki тоже простой (не такой как у всех остальных wiki, нечто среднее).


  • http://serversidewiki.com/ — очень своеобразная штука — все прыгает и бегает (ajax & ruby on rails, основан на TiddyWiki), стоит посмотреть поприкалываться, может кому-нибудь понравится (я сам прикололся, но потом подумал, что для меня статичные сайты лучше — на этом даже ссылку не сделаешь); в сентябре станет платным, и фришным аккаунтам будет выделяться не более 10-ти страниц-tiddler-ов, т.е. система только на посмотреть; есть мега-удобные TODO-шки; теги; приватность делается постранично, через тег private (который неудобно вставлять каждый раз); форматирование textile.


  • http://wikispaces.com/ — выдают 2 GB и говорят, что можно расширить (Just drop us a line); приватным делается за 5$/мес; форматирование WYSIWYG или как у pbwiki; поиск почему-то через google, а не свой (как у всех остальных wiki); теги.


  • http://wetpaint.com/ — симпатичный сайт; есть только WYSIWYG редактор; система заточена на community и соответственно никакой приватной wiki; ограничения на объем пока нет; пожалуй, самая простая wiki — для домохозяек :).


  • http://wikia.com/ — все прелести википедии (MediaWiki), но надо делать открытый, идейный коммьюнити-проект, т.е. это вообще не персональная wiki-система.


  • http://www.google.com/notebook/ — очень простая система, даже не вики, а так просто раскидывать текстовые заметки по блокнотикам. Стоит посмотреть — возможно вам будет достаточно.


  • http://www.wiki-site.com/ — персональная MediaWiki; никакой приватности — ваши страницы могут смотреть и изменять (хотя можно защищать отдельные страницы от правки); сайт открылся где-то полгода назад и несколько сырой; ограничений на объем нет, но советуют швырять всякую мультимедию на youtube.com и imageshack.us. Т.к. это единственная персональная MediaWiki-система, которая мне попалась, я забил на открытость и пока остановился на ней.


Практически все эти системы живут за счет рекламы. См. сюда, чтобы узнать, как от нее избавиться.

Дополнительную информацию по некоторым из этих wiki-систем можно узнать в статье Сделай собственную Wiki.

Надеюсь, обзор вам хоть чуть-чуть помог, и вы сможете быстрее попробовать и выбрать себе wiki-систему. Рекомендую выбирать между stikipad, wikispaces, wetpaint и wiki-site.

PS: Если вы знаете какой-нибудь еще бесплатный wiki-хостинг (особенно, если это MediaWiki-хостинг), напишите мне. Буду благодарен.

понедельник, ноября 20, 2006

Эпиграммы в программировании

Натолкнулся на сборник цитат Алана Перлиса Epigrams in Programming. Ну очень понравились. Не смотря на то, что написаны они были еще в 1982-м году, почти все они актуальны и сегодня. Всячески рекомендую для прочтения программистам.

среда, ноября 08, 2006

Структура и интерпретация компьютерных программ

Сбылась мечта идиота ;) Наконец-то приобрел эту потрясающую книгу.

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

Для тех, кто совсем не в курсе: SICP — одна из лучших книг по программированию из когда либо изданных. Прочесть ее от корки до корки — абсолютный MUST для любого уважающего себя программера.

Потрясает то, что эта книга — изначально всего лишь вводный курс по информатике в MIT. Метода для первокурсника, так сказать. Однако материал, который она охватывает, далеко не всегда вообще преподается в ВУЗе. Книга начинается с описания абстракции процедур и данных (рассматриваются функции высших порядков и даже символьная алгебра), плавно переходит к рассмотрению модульности, объектов и состояния (в частности: параллелизм, имитация цифровых схем, распространение ограничений). Затем начинается описание металингвистических абстракций (например, строится интерпретатор пролога, имитация ленивых вычислений, недетерминистское вычисление). А заканчивается книга вообще чудесно — строится эмулятор регистровой машины и пишется компилятор под нее.

Вот так надо учить программированию!

Безумно жалко, что 12 лет назад, когда я только начинал изучать программирование, я тратил время на всякую ерунду и на горьком опыте или путем долгих ковыряний в инете находил то, что в этой книге описывается „на пальцах“.

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

PS: также доступны видеозаписи лекций.

PPS: после того как прочту книгу для первокурсников, закажу себе книгу для второкурсников :)

UPD: можно попробовать купить SICP в издательстве.

вторник, октября 31, 2006

Клевые комиксы :)

Случайно наткнулся на архив комиксов Hackles. Ну очень порадовали.

А когда дошел до этого, то вообще прикололся - буквально пару дней назад втирал нашему "пингвину", что емакс мощнее, чем gvim :)

среда, октября 25, 2006

Про культы языков программирования

Заметил интересную вешь. Практически вокруг любого языка программирования имеется свой культ. "С++ rulezzz", "LISP rulezz", "Haskell rulezzz", и т.д. Однако после продолжительного использования любого из "культовых" языков ощущение его культовости у меня проходит.

Каждый раз, сталкиваясь с культом, я вижу как люди торчат от того, что на некоем языке можно делать что-то, что было невозможно раньше. Я сам торчал от плюсовых темплейтов, лисповских макросов, хаскельной красоты (а также ассемблерной крутизны, окемловских first class functions, питоновского форматирования кода, Tk-ного описания интерфейсов, erlang-овского межпроцессного взаимодействия и много от чего еще).

Но со временем понимаешь, что бесплатного сыра не бывает. За любые фичи приходиться платить: остутствие типизации в лиспе, низкая производительность хаскела, связывание с legacy кодом, и т.д. Тут-то культ и торч проходит, а взамен ему приходит здравое понимание того, что для каждой задачи нужен свой инструмент (причем выбирать его надо в контексте проекта, а не одной задачи).

Интересно только, почему у многих людей культ и торч не проходят? Смотришь на некоторые посты и думаешь... пока еще думаю... :)

Ну мега понт

Почитал тут мега пафосный пост про то, что Хаскел - это Роллс-Ройс языков программирования.

Красиво, конечно. Хаскел - аристократический язык. Он не будет опускаться до серых нужд обычных людей :) Пока серые люди возятся со своими серыми языками, хаскел третий раз подряд выигрывает самое сложное соревнование в мире.

Смех сквозь слезы. Ведь действительно хороший язык. Только вот беда в том, что его действительно используют "аристократы" программирования. И мало что делается, чтобы превратить его в мейнстрим.

Для окемла есть потрясающая книжка Developing Applications With Objective Caml. А где такая книжка для хаскела? Куча введений в ФП c примерами a-la сферический конь в вакууме, описаний монад с очень "нужными" обычному программеру monad laws, куча разрозненных статей для Ph.D. people. А вот конкретного тьюториала для среднего программиста, с описанием разработки реальных приложений нет.

В итоге мы знаем, что хаскел крут, но не знаем как на нем сделать что-нибудь настоящее. С такими понтами хаскел рискует навсегда остаться уделом "аристократов". А ведь хочется применения его в мейнстриме.

Про окемл я могу сказать человеку, чем он крут и знаю, куда отослать человека для дальнейшего изучения. А как внедрять в массы хаскел? Как его самому-то изучать в конце концов :)

суббота, октября 21, 2006

Пара полезных ссылок для разработчиков игр

Возможно, многие уже видели и знают. Но приведу пару ссылок:

Записи докладов на КРИ - огромная куча очень интересных докладов.

Семинары на Chaos Constructions'2006 - кучка заметно меньше, но не менее интересна.

четверг, октября 19, 2006

Впечатления человека, ушедшего из WoW

Наткнулся тут на очень интересный рассказ человека, ушедшего из MMORPG World of Warcraft.

Пара выдержек:
...Why did I leave? Simple: Blizzard has created an alternate universe where we don't have to be ourselves when we don't want to be. From my vantage point as a guild decision maker, I've seen it destroy more families and friendships and take a huge toll on individuals than any drug on the market today, and that means a lot coming from an ex-club DJ...

...Blizzard created a game that you simply can not win. Not only that, the only way to "get better" is to play more and more. In order to progress, you have to farm your little heart out in one way or another: either weeks at a time PvPing to make your rank or weeks at a time getting materials for and "conquering" raid instances, or dungeons where you get "epic loot" (pixilated things that increase your abilities, therefore making you "better"). And what do you do after these mighty dungeons fall before you and your friend's wrath? Go back the next week (not sooner, Blizzard made sure you can only raid the best instances once a week) and do it again (imagine if Alexander the Great had to push across the Middle East every damn week)...

Мне и до этого особенно не нравились все эти MMORPG. Теперь я понимаю, что производство таких игр имеет очень много общего с производством наркотиков.

Любая интересная игра захватывает и отнимает кучу времени. Но стоит задуматься: может ли человек выиграть, играя в твою игру? Получит ли он удовольствие или красные глаза?

Позиция Blizzard понятна - им невыгодно, чтобы человек прошел игру. Только вот человечно ли это?

вторник, октября 17, 2006

Через тернии к звездам

На работе пришел к немного странному, на первый взгляд, решению: из окемловского приложения вызываю питовский код, который, в свою очередь, вызывает плюсовый. Казалось бы - что за изврат? Ан нет.

Логика игры, которую мы сейчас делаем (равно как и предыдущей игры) пишется на ocaml. Низкоуровневая работа с OSG, OpenGL, OpenAL и пр., ведется на С++. Окемловских байндиногв для OSG нет, есть питоновские. А писать окемловкие байндинги для С++ гимор тот еще.

В итоге, все плюсовые дела через boost::python (очень удобная библиотека, кстати) выводятся в питон. В питоне пишется тонкий слой, переводящий работу с объектами в примитивные функции. А в кемле написан небольшой код на полстранички, который позволяет легко и type-safe-но вытаскивать функцию из питона. Например:

  let fun1 = f "module" "fun1"
(type1 **-> type2 **-> ret_type)
благодаря написанному ручками оператору
  (**->)
определяет функцию
  (f : type1 -> type2 -> ret_type)
Ну где вы еще такое напишите, кроме окемла или хаскела :)

За счет этого, я с минимальными усилиями получаю из ocaml доступ к плюсовому коду.

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