Про паскаль

Если считать, что паскаль вымирает, то вымирать он умудряется с огоньком. У нас есть Delphi, который при всех проблемах управления постоянно вводит крутые возможности в язык. Он компилируется под win-x32, win-x64 и маки. Есть FreePascal, которые поддерживает большую часть вводимых Дельфи фич и компилируется подо всё на свете, в том числе под linux-x32, linux-x64 и native-android (с помощью этой штуки компилятор FPC можно встроить в интерфейс дельфи, если не нравится Lazarus). И есть Oxygene, который компилируется под .NET, Android и iPhone, и тоже вводит в язык много крутого. (И в нём вместо VCL используются нативные формы каждой платформы, типа Windows Forms).

То есть, в общем-то, покрыта вся мыслимая разработка для локальных компилируемых языков. Кроме интерпретируемых языков, единственный язык с таким покрытием – это C/C++. И кстати, если пользоваться только паскалём уровня Delphi 7, стандартной библиотекой вместо винапи, и ограничиться консольным или сервисным приложением, то программу можно будет скомпилить на любом из этих компиляторов. Интересно, пробовал ли кто-нибудь?

Аристономия

Ну и где тут результат изысканий всей Акунинской жизни, точнее, в чём он, этот результат? Трактатная часть, не считая первой главы, похожа на скучный школьный доклад: Платон считал так, Декарт считал так. Я старательно прочёл все главы, но до сути своих мыслей Акунин так и не дошёл. Краткая сводка о мнениях исторических персон (подогнанных под Акунинское мировоззрение) – это не содержание. И если, кроме первой главы, ничего нового Акунин сказать не собирался, то зачем дальше всю книгу эта вводная?

Мне очень понравилось, что всем сторонам в революции дали высказаться, и все говорили убедительно – кого не читаешь, с тем соглашаешься. (Только русский народ получился зверями). Но метания бесхребетного главного героя понемногу задалбывают. Он же должен взрослеть, наверное? Ну как, вот как он опять перешёл к коммунистам под конец книги? Флюгер 70-го уровня.
Идиллия нейтралитета нарушилась только на последней странице, когда отчаявшись как-нибудь подвести к правильным выводам сошедший с рельс паровоз сюжета, Акунин просто прерывает книгу на середине и подытоживает: те плохие, эти хорошие, вдруг понял главный герой.

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

Читаю Акунинскую “Аристономию”. Один герой говорит другому:
– Они как раковые клетки, их нужно вырезать, выжечь, пока они не заразили всё вокруг.
– Рак не заразен, кто-то-там кто-то-тамыч…
– Ах да… Забыл, что говорю с доктором.

Вообще-то, первый герой всё правильно сказал. Раковые клетки обычно бесконтрольно делятся и разбредаются по организму – так образуются метастазы. Раковая опухоль – это как одуванчик, который сыплет по всему организму семенами, и рано или поздно какие-то приживутся. Поэтому её надо обезвреживать и вырезать как можно скорее.

Пока, Окономи

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

Недавно оно закрылось.

Вот что они об этом пишут:
Дорогие гости. После закрытия нашего кафе многие спрашивают, почему мы закрылись. Хотелось бы ответить на этот вопрос.
Первая причина закрытия – это слишком большая аренда за помещение. Арендная плата в Москве примерно в 2-3 раза дороже, чем в Токио. Даже если выбрать помещение в жилом районе, то рядом с метро цена будет примерно такая же. При этом арендодатели проявляют безразличие, с таким отношением с ними трудно работать. Помещение кафе коммерческое, но находится в жилом доме. И жители, недовольные тем, что в их доме открылось кафе, оказывали давление ради получения денег.
Вторая причина – угрозы со стороны гос органов. Они проводят слишком жесткие проверки и маленькие компании не могут их выдержать. Проверки нужны, но сначала нужно создать упорядоченный закон и проводить проверки не коррумпированными гос органами.
Ксожалению мы поняли, что с такими условиями маленькое кафе существовать не может. В Москве рестораны слишком дорогие, у нас была идея открыть кафе, чтобы каждый человек мог прийти и недорого покушать. Но мы не смогли добиться такого результата. Мы искренне желаем процветания общества России.

Такие дела.

– Но как такое возможно! Вы же учёные, вы цивилизованные люди, вы из будущего… вы притворяетесь богами, изучаете их – ладно! Но зачем?! Зачем вам человеческие жертвы?
– Строго говоря, жертвы нужны не нам. Египтяне их хоронят, обработав ритуальной мазью. Особой мазью. Ещё не понимаете? Человеческое тело быстро разлагается. Людям будущего – историкам – потребуются находки…

Homing missile

По-английски самонаводящаяся ракета – это homing missile. А почтовый голубь – “homing pigeon”. Правильно: потому, что возвращается домой (“home”). Вот откуда, оказывается, это слово произошло.

Про регэксы

Регэксы – это офигенное средство, не только потому, что с их помощью легко записывать формат строки. Его легко преобразовывать и быстро парсить!

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

Но регэксы ужасны – стоит попытаться написать что-нибудь достаточно сложное, как выясняется, что:
– повторяющийся набор групп матчится только один раз
– наоборот, два одинаковых набора подряд матчатся как разные группы (следовало бы ожидать…)
– группам можно задать имена, но они должны быть уникальными (нафига тогда имена?)
– указать “если есть блок А, должен быть блок Б” крайне сложно, а уж “должен быть блок Б здесь либо чуть позже” вообще нельзя
И так далее.

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

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

Приватный hg-репозиторий в интернете

Задача: поднять для личного hg-репозитория постоянный (приватный) адрес в интернете.

Для публичных репозиториев это легко сделать на Google Code или github или SourceForge. Как быть, если кодом делиться не хочется?

UPD. Инструкция верна, но есть путь проще – см. в конце.

1. Регистрируемся на BitBucket (можно зайти через гугл-аккаунт). Подтверждаем почту, выбираем пароль для доступа к репозиториям.
BitBucket позволяет сделать сколько угодно частных репозиториев, но к каждому доступ не больше пяти человек. Бесплатно.

2. Запускаем командную строчку. Если меркуриал не в %PATH%, делаем cd C:\Program Files\TortoiseHg (например) и set PATH=%CD%;%PATH%.

3. Переходим в папку с репозиторием cd C:\Path\Repo и запускаем hg serve.

Приложение А. Если у компа нет постоянного адреса в интернете, регистрируйтесь на DynDNS и полученные логин с паролем засуньте в рутер – почти все рутеры сейчас умеют сами обновлять DynDNS.

4. Пробросьте порт 8000 на рутере на свой компьютер. Убедитесь, что http://your-pc-name:8000 открывается.

5. В BitBucket сделайте “Импорт репозитория” и укажите этот адрес. Подождите немного. Ура, репозиторий со всеми правками сдублирован на битбакет.

UPD. Как показал в комментариях korrshun, гораздо проще создать пустой репозиторий и сделать из домашнего туда push. Оказывается, в репозиторий меркуриала можно пушить сколько угодно независимых веток 0__0, то есть, можно в один репозиторий слить несколько.

Tell me what I’m going to use it for

For those who didn’t know, there’s a new pascal-based compiler on a market for a while, and a pretty cool one at that. Enter RemObjects Oxygene.

It’s Visual Studio-based, compiles to .NET, Android Java and iPhone Cocoa, resembles Pascal and implements the majority of its cool features like generics. Parts of language are redesigned, some for better, some for worse.

Cool feature. Even the main unit now has the interface/implementation sections.

namespace Application1;
interface
implementation
begin
  Console.WriteLine("The magic happens here.");
end.

Uncool feature. initialization/finalization sections are no more. I guess you can kinda replace them with class constructors, but they were so much better.

Anyway.

The language is indeed pretty fresh, with support even for WinRT while Delphi has yet to convince Microsoft to let everyone else have a part of the cake. Turns out, the only way to do native WinRT applications is through using Microsoft Visual C++ Runtime. Ha-ha, funny joke Microsoft, you.

So I thought about playing with it for a change.
No, I’m not betraying Delphi just yet. It’s still pretty cool, compiling to 64 bit and not being afraid of anything.

But sitting before the empty Oxygene project, I have found myself at loss at what to do.
Okay, it runs. It compiles Hello World, alright.
What next?

Turns out, when you encounter a new language, you have to have a few use cases for it. And since you usually don’t know what this langage can do, it’s better if someone suggests those for you.

Есть в мире постоянство!

Решил посмотреть “Хацукой Лимитед”. Скачал первую серию. Включил.

На пятой секунде вдруг вспомнил:
“А-а!”
“Да это же тот самый сериал, который я дропнул на пятой секунде!”