пятница, 13 мая 2011 г.

Железотворительность

Подарил:
- кучку флешек, флеш-карточек
- две планки памяти
- видеокарточку
- устаревшие телефоны

Продал:
- два мертвых винта
- сломанный ЭЛТ-монитор
- потрохи от умершей машины (проц, блок, видео)

Разобрал на части:
- 3 cdrom-a

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

Полтора ящика все равно забиты железным хламом. Хлам - это не мусор, его еще не выбросишь. Подарить что ль?

четверг, 12 мая 2011 г.

Идентификация

При рождении нам дают имя и фамилию. В тех случаях, когда отцовство установлено, тогда еще дают и отчество. Ну, или там ищут того, кого пропишут в свидетельстве о рождении (математики говорят: назовем данного человека "отцом").

Всякие извраты с индийским наименованием не рассматриваем. Из серии "А знаете ли вы что...?": некто Вишванатан Ананд - это не просто имя и фамилия крутого индийского шахматиста. Оказывается, Ананд - это имя, Вишванатан - имя отца, а фамилий в нашем понимании у них (него) нет. В крайнем случае каста и город. Сошлемся на википедию.

В древней Греции, как сейчас помню, к имени добавляли город. В связи с развитием интернета, к имени сейчас добавляется логин/ник. Далее несколько замечаний о никах.

Понятно, что есть требование к уникальности (нетривиальности). Если назваться избито "Alex"... Хотя в некоторых кругах ник "Petr" - это очень круто, это реально имя собственное.

Если вас тоже зовут Петр, а ник уже занят, то можно добавить суффикс, префикс, инфикс(?). Можно взять производную по имени, фамилии, профессии. Можно всякие "гламурные_кошечки", но это сложно указывать в реальных никах (почта, например).

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

Проблема в том, что:
- почти никто не может его запомнить с точностью до знака. Только я и Артем В.
- не везде он валиден. Хотя, насколько я помню, согласно RFC email может начинаться с цифры. Но конкретную систему не убедишь что ей стоит почитать RFC. Поэтому приходится добавлять префикс, или другое.
- увы, и даже это не уникально. По крайне мере #.blogspot.com занят китайцем, еще на каком-то ruBoard-e это тоже оказалось занято.

В окружении (друзья и знакомые) есть те, кто в качестве суффикса выбрали двузначное число. 10/13/52/etc. Причем никто не может обосновать выбор. Это не возраст, не год рождения, не квартира, и не школа. Если увидите ник *239, то это скорее всего с Питера(школа), если *57 - с мск, если 30/40/41 - хоть откуда.

Поэтому я перешел на фамилию. Тут есть тоже плюсы и минусы.

+ Почти уникальность. В городе не более 10 человек, во всех соцсетях порядка одной/двух сотен.
+ По алфавиту в начале.
+ В большом неотсортированном списке в глаза бросается, ибо вторая буква.

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

ЗЫ.
Сложнее противоположному полу: есть некоторые особенности с постоянством/временностью фамилии.

Кстати, есть предложение переходить от отчества к матриархальной сущности (мочество? матринство?). Ибо если рождается девочка, то родители могут сказать что "внуки точно их будут".

среда, 11 мая 2011 г.

Знаменитость

Однажды на матче еще неизвестного Аршавина присутствовал Диего Марадона. После матча Марадона подходит к Андрею и говорит: "Ты круто играешь. Можно твой автограф?". Аршавин офигел: "Конечно!" На следующее утро Аршавин проснулся знаменитым, но уже не в своей квартире, и без машины...
(С) анекдот.

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

Знать бы чем я выделяюсь из толпы? Кроме чуть повышенной скорости движения - ничем не должен. Так какого они кидаются на меня? Даже идя с краю дороги, они вдвоем с проводами так, что в крайний раз пришлось их обходить по газону. При том, что я только меняю направление движения, скорость у меня постоянна.

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

пятница, 6 мая 2011 г.

Избыточность воспитания

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

Новый роутер держит все, но ИМ-чаты глючат. Сообщения иногда приходят с недельным опозданием, иногда не доходят. Если голосом общаться, то бывает тупо падает после получаса и пару минут не доступен.

Поэтому сообщение от меня в виде "подтверди" не стоит рассматривать как признак дурного воспитания. И если я не ответил на вопрос, то тут есть вероятность что я его не получал.

ЗЫ.
И в шахматы во "вконтакте" играть невозможно, после двух ходов соперник не отвечает. Хотя, единственное что там осталось - музыка, играет без проблем. Какие-то проблемы на уровне поддержки коннекта.

четверг, 5 мая 2011 г.

низкоуровневость

c++ такой...

За последний год я программировал не более 5 раз, все остальное время я отношу к понятию "разработка". 3 раза можно с полной уверенностью назвать "программированием", остальное - с натяжкой. Да, я конечно же каждый рабочий день хожу на работу и пишу код, но это "разработка".

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

Выжимаю что могу, даже переписал на плюсах. На решетке (С#) пробил построение динамического суффиксного массива в 100кб/с (на первых ста килобайтах :) , дальше сказывается log^2(n)). Предыдущие алгоритмы жирноваты, там чуть ли не 3/4 времени вычисляю lcp (DRMQ). А сейчас даже lcp вычислять не обязательно, только добровольно. По константе раз 5-6 лучше.

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

Низкоуровневость и отсутствие инструментов бесит. Хотя я на это сознательно шел - это про первое. Приходится мыслить терминами "кусок памяти" и указатель. На чистый С не буду переходить, ибо у меня сплошные массивы деревья, их довольно много и объектность с виртуальностью позволяют это как-то целостно видеть. Иначе будет ад.

Дайте мне нормальную строку - мне много не надо, всего лишь: индексный доступ, возможность удаления/вставки/замены в любой позиции. Все за O(log(n)). (С) рекламный слоган. Вроде бы немного хочу, ан нету. Видимо, максимум что нужно остальным - это stringBuilder с потоковой записью в конец. А мне надо все и сразу и везде.

Год назад я "жаловался" на отсутствие простых массивов. Ну нету нигде нормальных. А нужно мне опять немого: индексный доступ, удаление/вставка/замена в любом месте и опять же за логарифм. Правда, еще нужно пару плюшек.

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

Конечно, воняет велосипедизмом. Но почему-то приходит осознание, что это круче велосипеда и местами на 4-5-6 и более колесах с термоядерным двигателем и крыльями - можно лишь подсматривать на другие транспортные средства.

Несколько дней избавлялся от ошибки. На маленьких строках все работает, на баааальших падает с полной фигней. Если бы в языке было понятие выхода за границы массива, или хотя бы что я не пишу в "получужую" память, то мне бы хватило и 5 минут. А так как выделение памяти для переменных/объектов есть кусок памяти, то случайный выход за границы можно уловить только через пару дней. Или я совсем не знаю ключей компиляции.

А если использовать всякие stl и прочее непонятное типа boost, то мы похоже ничего кардинального не выиграем. Ну, будет некоторая константа по скорости, но по всему остальному преимуществ уже не будет. Тогда стоит и переходить на более высокоуровневые инструменты.

Поэтому у меня всего один #include < string > , в одном не критичном месте, и никакого использования даже stl-я.

четверг, 28 апреля 2011 г.

Язык

Ничто так не ограничивает мысль программиста, как компилятор.
(С) точно не я.

С естественными языками относительно просто - просто надо обладать большим словарем (запасом). "Субъект-объект-отношение" и ваш ломанный итальянский поймут даже в Канаде. Грамматики знать не надо, ибо ломанная ваша понимать иногда языка всегда.

С языками программирования по-другому. Здесь все однозначно.

Если естественный языки пошли, по неоригинальной версии, от Вавилонской башни, то программные языки пошли от различных моделей вычислений.

Тьюринг породил имперосятину, Чёрч, Карри и Шейнфинкель породили функциональщину. Марков породил марковские алгорифмы. Из популярного другое малоизвестно (по крайне мере мне).

Сделаем небольшой оффтопик: меня, оказывается, можно считать "внуком" Маркова, ибо учитель одного из двух моих научруков и был Марков мл. Для справки, Марков мл. являлся зав. кафедрой мат. логики и теории алгоритмов на мехмате МГУ в 70-х. У меня есть какое-то врожденное уважение к этой кафедре :) . А все результаты Маркова в тервере и близких вещах относятся к Маркову ст.

Итак, имперосятина. Сначала машинные коды, затем ассемблеры, затем нечто похожее на языки программирования, процедурщина, массовые расстрелы за goto, зачатки типизации, модульность, пакетность, и другие зачатки объектности, элементы параллельности, объектность.

С детства в нас формируют императивное мышление: скажи "мама", ложечку за папу, вымой руки и ложись спать. Выразить это декларативно понятное для ребенка затруднительно. Затем в школе будут показывать какую-нибудь процедурщину, так что к студенчеству в вас сидит закоренелый императивщик.

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

Рекурсия божественна.

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

Далее несколько слов о чистоте и нечистоте.

Чистых вещей очень мало. Если сложить две чистые вещи, то мы не получим чистую вещь. Поэтому есть с десяток чистых вещей, а все остальные десять тысяч языков - нечисть.

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

Если не рассматривают пару пятен, то идеалом является smalltalk и self. Последний почти канул в реке, я лишь скачал/запустил образ машины и немного поигрался. С ST же можно полноценно играться, мне понравилось. Так вот - есть лишь понятие объекта, и ничего более. Даже Оккама с бритвой тоже нет. Объекту можем послать сообщение. Как я уже говорил, больше ничего нет. Просто, не так ли?

Послать сообщение - значит по слоту (объекту) передать какой-то другой объект. 2 + 3 - это вам не сложение двух интов, это объекту 2 посылается сообщение + (это объект), с параметром 3(это объект). Вместо +, можно кинуть другой объект, который не захардкоден, а получается в результате вычислений.

Исходный код - это объект. Его можно откомпилировать (послать сообщение), и запустить (послать сообщение). Классов нет - это тоже объекты (прототипная/акторная(?) модель, в js что-то такое же). Есть объект Boolean и еще два объекта True и False. Это все объекты. Нет даже циклов и условий - это все посылка сообщения.

Короче, можно поставить какой-нибудь dolphin ST и наслаждаться, наслаждаться и четыре раза.

Если взять любое г из ++/#/java и иже с ними, то там все сложнее и наслаждаться не хочется.

С чистотой у функциональщиков попроще, достаточно выкинуть всю г имперосятину из языка (мутабельность и внешний мир).

Элементы модульности/пакетности проникают и в ФП: какой-нибудь Typeclasses в haskell и какой-нибудь behavior в erlang можно рассматривать как интерфейсы. Проблема в том, что проникновение ФП в процедурщину меня все время толкает только на ха-ха.

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

Конечно, нужны языки работающие на разных уровнях абстракции. В тех редких случаях, когда нужно выжать 10-20% скорости программы вам придется работать с чем-то низкоуровневым; с чем-то большим - то желательно типизированным; с чем-то маленьким - нетипизированным; но всегда хочется высокоуровневым.

Стоит сказать, что сейчас понятие язык слилось с понятием платформы/framework-a/среды_разработки/документирования/etc. И выбирать язык не приходится, приходится выбирать все остальное.

воскресенье, 24 апреля 2011 г.

Отложенный мармелад



Уже раза три за последние полгода натыкаюсь на одну и ту же вещь. Теперь, вроде, почти дошел до первоисточника.

Детям дает сладость/мармелад/шоколадку. И говорят, что если они сдержатся и не съедят ее в течение 15 минут, то они получат еще одну. Их оставляют наедине.

Проходит 10-20..50 лет, и те кто сдержался - тот успешен в жизни, а те кто наоборот - наоборот.

Независимо от пола/возраста/уровня интеллекта/национальности.

Даже на знаю, как бы я повел себя в четырехлетнем возрасте... Почему-то с шести лет я в себе уверен, а в более раннем сомневаюсь.

Это не значит, что надо бить детей, в случае если они не сдержались. Другой вопрос - воспитуемо ли это? И следующий нетривиальный вопрос: можно воспитать во взрослом состоянии, изменить(ся)?

И еще важный вопрос риска. Готовы ли рисковать?

Пусть вы очень упорно трудились в течение 5 лет и заработали миллион (мало) 5 миллионов рублей. И вы можете поставить все средства и удвоится. Или потерять все. Что бы вы стали делать?

ИМХО, категорический ответ "нет" так же ущербен как и категорическое "да". Правильный ответ должен быть во встречном вопросе "А какова вероятность? Возможные исходы." Ответ при отсутствии информации является главной ошибкой.

Тут во мне есть некоторое противоречие. С одной стороны я в школьные и студенческие годы трижды был в гипсе с ногой + 2-3 раза тоже серьезно (не без гипса, и тоже с ногой). Это довольно сильно выбивает из статистики.

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

А с третьей стороны - я слышал себя в звуковой записи, там было 18-20 минут непрерывного текста. И если бы я не знал себя и текст, то я бы просто офигел (на самом деле, и правду, чуток офигел). Я и не знал, что я могу так быстро говорить.

четверг, 21 апреля 2011 г.

Зачем?

Опять некоторая интроспектива... Таки зачем я сюда пишу. А зачем вообще люди пишут?

Ну, у некоторых, наверное, талант есть. А остальные, за исключением этих трех человек, зачем? Я - в остальных.

У меня есть такая особенность, что я не читаю того, что я пишу :) . В unix-ах этого легко добиться, можно разрешить писать, и запретить читать. Есть во мне что-то от unix-a.

Преследую чисто эгоистические основания. Около половины постов составляют "личные сопли", и я понимаю, что это никому не интересно (походу и рефлексивно тоже). Так зачем же?

Все таки хочется немного сохранить текущее состояние. Я не фанат фотографии, видеосъемок и прочих вешей. По статистике, в голове среднего человека в течение дня проскакивает около 3000 мыслей корректных предложений. Я ж тут стараюсь раз в неделю делать небольшой снапшот, который позволяет отобразить состояние электрического заряда в голове в набор текстовых символов. В общем, нечто одно из 21000 отрывков.

Собственно, и этот пост прочитают человека полтора, максимум корень из трех.

Вот пройдет еще пятьдесят (или более) лет, будет откуда пару цитат на плиту кинуть (блог и некролог посимвольно не очень далекие слова). Не из СМС/твиттера же.

Эпик фэйл: постом "зачем же я пишу?" так и не суметь объяснить, "зачем же я пишу". Опять что-то из Гёделя.

понедельник, 18 апреля 2011 г.

Квадратная абстракция

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

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

Алфавит конечен, но каждый следующий бор строится на основе предыдущего, где в качестве узла выступает некоторый путь в боре. И так на 3-4-5-6 и более уровней. Даже не квадрат.

Какой же чай курил Рамануджан? И мне 100 гр.

понедельник, 11 апреля 2011 г.

Как женщина

Потерял 15 минут. Искал в гардеробе летние брюки, отвалился по таймуату.

Ладно бы гардероб был большой. Не люблю я новые вещи/одежды. Оказалось 4 белые рубашки с коротким рукавом, штук 15 футболок (все, кроме 2-х, однотонные), 2 свитера (основной и запасной), летний и зимний комплект брюк, пара шорт, нижнее и носки.

*Риторически* Куда можно было засунуть брюки?

суббота, 9 апреля 2011 г.

Кто кого порождает

В интернете полно рекламы про увеличение размера груди или длины полового члена.

Но совершенно нет рекламы по увеличению мозга.

Видимо, совсем нет спроса.

пятница, 25 марта 2011 г.

Временные проблемы

Хьюстон...

Проблему 2000 я не заметил, так как персональная машина у меня появилась только летом 2000 года. На "компаньоне" это не было проблемой.

Много ли знает о проблеме 2038 года? Знаковое переполнение int-a. Таки, наверное, это не будет большой проблемой. Успеем везде перейти на int64. Только в музеях будет 32-битная архитектура. Ну, может еще на некоторых старых ядерных станциях.

А вот про проблему 2100 года в википедии пока не нашел. Проблема в том, что большая часть программистов не знает как определяется высокосность в Григорианском календаре. Точнее, не знает, что есть Юлианский календарь, что есть Григорианский календарь, и какой используется во всем мире. С большой вероятностью нас с Вами к этому времени не уже не будет, так что это уже не наша проблемы.

Хуже всего обнаруживать у себя в базе данных записи с часовым поясом (+5:45). Существуют извраты с (+4:51), но их выставить не так тривиально. А вот непальский часовой пояс - это было в реальности.

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

А еще больше пугает проблема президента. В википедии про нее тоже ничего нет. Но я думаю, все догадались. К счастью, это временная проблема. Или проблема 2012, или 2018, или 2024.

четверг, 24 марта 2011 г.

Не кинокритик

Просидел неделю на больничном. Ввиду наличия свободного времени дочитал бумажные (!) из очереди. Внезапно их оказалось целых три. Это у нас на текущей работе внезапно есть бюджет на литературу.

Заказывать можно только из местных *озонов* - поэтому ничего путного там нет. Армстронг (erlang) полгода в очереди на покупку, из классики только нашелся Майерс, но как-то он не впечатляет. Коллега (уже полгода ушел в другую компанию) по приколу заказал "The Haskell road to logic, maths and programming" (от доступных русскоязычных вариантов/переводов от Р. Душкина я отговорил, ибо видел. Хотя там главка про полиморфизм мне понравилась). Пришлось мне прочитать.

На второй странице есть подряд два предложения:

As a functional programming language, Haskell is a member of the Lisp family. Others family members are Scheme, ML, Occam, Clean.

Нельзя убивать сразу же на второй странице. Ладно, хрен с ним, что haskell отнесен к лиспанутому семейству. Даже хрен с ним, что во втором предложении они настолько круты, что отличают scheme от lisp-а (я тоже смогу отличить). Но какого, б*, они пишут Ocaml с двумя ошибками? После этого пропадает вера в адекватность.

Все таки я пересилил и дочитал до конца. Далее перлов не оказалось.

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

Единственное, что вспомнил/узнал нового, так это что целые числа как классы эквивалентности на паре натуральных.

Единственное, что не понял - это в конце главка про производящие функции. Я их понимаю, максимум на два хода. Только люди с мехмата МГУ их понимаю полноценно. По крайне мере, всех кого я видел, кто понимает в производящих функциях - это с ММ МГУ.

понедельник, 14 марта 2011 г.

! 2\pi

Ребус.
Отгадка: не тупи

пятница, 11 марта 2011 г.

Группа

С неделю назад понял, что мне действительно не хватает. Что объединяет суффиксный массив (как работает классическое BWT я, примерно, в курсе. Как работает динамическое BWT - пока не осилил), какой-нибудь изоморфизм графов, и мои интересы в теории чисел.

Если копнуть чуть глубже - везде упираюсь в отсутствие знаний в теории групп. Минимальный курс алгебры в универе включает определение и пару тривиальных теорем. На один-два шага я и сам могу закопаться. А вот дальше пройти не могу. Пока...

Одну достойную книжку (Ноден, Китте) я дочитал до первого барьера. Первые страниц 100 зашли хорошо, но затем я споткнулся на фразе "так как здесь инволютивный автоморфизм, то ...".