понедельник, 31 октября 2011 г.

2000

Справа в челюсть — вроде рановато,
Неудобно — первая игра
(С) Володя.

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

Раньше играл (бывали периоды когда работало при полувключенных торрентах) вконтакте, сейчас перешел на chesscube.com. Там гораздо прикольнее. И фишки всякие, и народу больше, и все лучше. Вконтакте просто какое-то флеш приложение, а тут можно кучу режимов времени, фишеровские, порядка 3000 человек в сети.

Пробил рейтинг в 2000, для меня это показатель. Хотя если собрать всех местных, я вряд ли войду в топ-200 (тут вся сложность собрать всех). У нас в республике есть почти гроссмейстер, все говорят что ей почти дали. Она -6 по возрасту относительно меня, и похоже в школе училась с слабо-симметрично-знакомым-мне-человеком.

В общем я сильно не крут даже на местном масштабе, а в мировом я очень сильно не крут. Но все-таки горд, что пробил 2000. Когда выполняешь первый разряд, то вроде бы дают 1900 по умолчанию. Так как первый у меня давно сняли за не-игру, то хочется верить, что я вырос за последние лет 10 не-игры.

Для тех, кто слабо в теме: что за 2000, 1900 и прочие натуральные числа. Вы смотрели фильм "Социальная сеть"? Единственный технический момент там был, когда главный герой пришел к себе в общагу и говорит соседу: мне нужна формула (для сравнения фоток девушек). И ему что-то пишут на оконном стекле. Так вот, это был рейтинг Эло (не Зло, а Эло), который используется в шахматах.

Разница в 50 по рейтингу ощутима, а в 100 - велика. У топ-3 игроков Эло = 2800+. Рекорд был у Каспарова в 2850+. У программок уровня Рыбки и Гаудини рейтинг в 3200, правда в своей системе рейтинг имеет недостаток завышаться. Рыбку дисквалифицировали, но все равно можно понять что человек уже ничто в игре в шахматы с машиной.

Конечно, я иногда обыгрываю и в 2100+. В блиц по 5 зевают все. Но в предложении ключевое слово "иногда". Прикольно, что жизненный рейтинг коррелирует с рейтингом людей в сети. Люди же те же.

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

пятница, 28 октября 2011 г.

Книги

Не нравился мне век,
И люди в нем
Не нравились,
- И я зарылся в книги
(с) Гамлет

Худ. лит. лично для меня уже давно перешел в электронную форму. Тех. лит. пока полностью не перешел, поэтому в различных городах я хожу по книжным магазинам. Это, кстати, показывает уровень образования в городе. Соответственно, меня интересуют некоторые направления математики и cs.

За последние лет пять уровень книжных упал. И это печалит. В моем городе всегда все было плохо (я тут и не хожу), падает и в других.

В Екб. был неплохой книжный на Малышева (недалеко от пр. Ленина), сейчас там банк.

В Питере был нормальный Зингер у Казанского (выше сидит Вконтакт) и ТехКнига недалеко у Невского и площади Восстания. Зингер сейчас торгует худлитом и ничего вкусного там нет. ТехКнига выглядит как после рейдерского захвата в после перестроечный период - голые полки.
Внезапно обязательно надо ехать на книжную ярмарку на м. Елизаровская.

В Москве на Новом Арбате осталось совсем чуть-чуть, на Лубянке в БиблиоГлобусе тоже чуть, но чуть больше, в МГУ вообще ничего нет (только корочки студ. билетов и часть математики). Надо ехать в МЦНМО, в городе это единственное адекватное место.

В Москве еще есть часть сдвинутых букинистов, которые всякий хлам продают пытаются продать за космические суммы. Желать им успеха не буду, ибо бессмысленно, ибо хлам за космос. В городах поменьше можно рублей за 50 взять какую-нибудь классику из математики, cs вряд ли будет в букинистических местах. Хотя классику по Прологу/Шапиро я взял у синяка на площадке перед УрГУ. Ему каким-то неведомым образом в наследство от ушедшего профессора досталось.

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

Понятно, что уже лет как 6-7-8 существует Колхоз в более чем 100 тыс. электронных книг, у 2 из 3 человек есть планшет и читалка. И покупать бумажные книги выглядит немного нерационально. Я беру часть классики, и для меня покупка это выражение благодарности авторам. То же самое что покупать музыку. Да, можно тупо скачать с торрентов, а можно скачать и выразить свою благодарность.

воскресенье, 16 октября 2011 г.

erlang

Так и не понял, куда надо ставить ударение. Erlang или erlAng? Импортные и я ставим на первый слог, москвичи и часть русских на второй. Хотя в русской вики четко стоит на первый слог.

Москвичи вообще ставят ударение на второй слог, везде. Будучи летом на школе, я заметил у человека на бейджике знакомую фамилию. Спрашиваю, не приходится ли он родственником Роме Ж.? Он не в курсе о таком, но внезапно из того, что я правильно поставил ударение "ЖУйков", предположил что я из того же региона, совпало до республики. Тесно в мире, из 70 участников - 30 импортных, и чисто по ударению в фамилии можно определить регион. В Москве его все заколебали с "ЖуйкОв".

Когда у Армстронга и коллеги просили, "если бы вы начинали сначала, много ли бы поменяли?". Они ответили, "Да... Многое. (Пауза в 10 секунд.) Возможно у нас были бы даже типы. (дикий ржач)". В этом месте меня тоже порвало.

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

Довольно много сахара для разбора побитово потока данных, пока нигде сахарнее не видел. Все так круто, что в 5 строчек можно разобрать практически любой формат. Все еще круче и высокоуровневее, что в следующие 5 строчек можно записать устойчивую распределенную систему. В 10 строчек можно вообще что угодно записать.

Все довольно просто и лаконично, так что понятие среда разработки редуцируется до текстового редактора. Дебажить функциональщину пока не приходилось, ибо оно работает так, как написано. А пишется все чисто и ясно.

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

Внутренне - своя ВМ, что довольно легко разбирается с миллионом потоков, управлением памяти и прочими гадостями. Хвастаться девятью девятками по устойчивости могут лишь единицы. Они могут.

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

erlang стоит того, чтобы его посмотреть. А еще лучше использовать. Жалко, что типов нет.

четверг, 6 октября 2011 г.

Эмоции

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

Можно сказать, что был чистый С, плюс с пяток сущностей-объектов. Для основного объекта потребовался кусок памяти, непрерывный (гигов 5), оказалось просто нужно скомпилять под 64 и все работает.

А если вам нужен стек несколько миллионов раз, то не используйте STL. Сразу все тормозит. memset + a[0]++;a[a[0]] = value вас спасет.

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

Задача не спортивная, алфавит из 4 букв. Хотя любой спортсмен ее реализует, просто ограничения в гигабайты (и памяти, и вход) и по времени сколько влезет (пока там везде линия, а чтение/запись с винта занимает львиную часть, в итоге пара минут). Может еще потребуется что-то пописать.

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

вторник, 4 октября 2011 г.

Параллельность

Пень-пень-дикуляр.
Евгений М.

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

Сначала несколько слов про последовательный код. Я всего лишь месяц назад узнал, что код (a < 0 ? -a : a) не всегда возвращает положительное число в 32-битных целых. Всю коротко прожитую жизнь был уверен(!) что все хорошо. Но фишка в том, что для -MAXINT возвращается оно же (в с++). В .нете если вызвать Math.Abs(), то получим эксепшн; если же вручную напишем, то можно получить CE.

На днях заказчик прислал excel, с фразой что у вас в приложении числа расходятся. Посмотрел - не нашел расхождений. Спрашиваем. Отвечают, да вот же. Смотрим, расхождение в 10 знаке. Физически, это 0.2 грамма на месторождение! Вот если заправляетесь на бензозаправке, то там нальют с точностью до 30 грамм. А тут 0.2 ГРАММА НА МЕСТОРОЖДЕНИЕ. Очень сильно захотелось послать читать стандарт IEEE754, но там все равно не поймут. Пришлось найти числа, где в приложении считается до 14 знака, в эталоне до 15. Потом зачем-то идут логарифмы и очень длинным путем это вылазит в 10 знак. Ладно, что они сейчас более спокойны, а то было что промежуточные вычисления были в 1e-129, и там сильнее расходилось. А то что масса электрона где-то в 1e-38 (?) их не волнует. Они настолько суровы, что могут делить электроны более чем на 1e81 частей.

А с параллельностью все становится интереснее. Поймать (определить) багу - +5 к опыту, -3 дня к жизни. Потом понять что-где-зачем и ее править. Хотя, с одной стороны все довольно просто, когда знаешь как оно работает. В противном случае, когда что-то не работает - начинаешь говорить в трубку в душе "сошла с ума". На 4-ый день приходит просветление, и находишь мутабельный объект.

Всего нашли пока около 5 багов с параллелизмом. Есть кусок с mapReduce (там все тривиально), и есть кусок, по шаблонам это называется Реестр/Акторы (там не все тривиально, и даже местами все не тривиально). Хотя все решается простыми lock-ами. DeadLock пока в принципе возникнуть нигде не должен, а dataRace-ы вылазят. Если успели понаписать 20Мб кода в однопоточном стиле, и потом воткнули параллельность, то потом обнаружите кучу удивительных вещей.

Ленивая загрузка есть зло. Надо сейчас все проходить и оборачивать lock-ом с дабл-чеком. Нечто похожее, если где-то возвращается дефолтное значение, если оно отсутствовало в хранилище (и добавляется после) - аналогично. Lock с двойной проверкой стоит, но где-то проверка была написана ранее коммутативно, то есть выставление флага производилось до операции - та же фигня.

Постепенно, это все находится и правится. Проблема в том, что понять что наличие параллельной ошибки - нетривиально. После того, как понял - ну поставил ты брекпойнт, поймал что-то. И чё? И так 4 дня сидишь, и втыкаешь. А потом - Эврика! В последовательном коде фаза "И чё - Эврика!" длится минут 20 максимум. В противном случае, пишешь еще кучу кода, чтобы понять что же там происходит. А когда что-то пишешь, ты уже меняешь систему, это может и не повториться.

А мутабельность - зло, на уровне с goto, object-type, делегатами и out параметрами. Только ж надо вспомнить, что она еще где-то в коде осталась...

И никакие юнит-тесты не спасают, они почему-то все работают. Хотя когда я писал первые, они падали. Потом зачем-то заработали, хотя ошибка легко вручную воспроизводится. В итоге все тесты работают однопоточно.

Для deadlock-ов в теории есть формализмы и верификаторы и прочий modelChecking, для dataRace - кроме головы я пока ничего не знаю. Надо было идти на лекцию Кости С., но там ПАРАЛЛЕЛЬНО шла другая крутая лекция :) .

суббота, 1 октября 2011 г.

Шара, твиттер и все-все-все


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

N лет назад на паре философии зачем-то обсуждали схожие вопросы. Так как N достаточно велико, что не было никаких фейсбуков, твиттеров и вконтактов. Интернет был, и были дискеты, флешек не было. Из всего "социального" максимум была аська, и можно было писать там статус и выбрать иконку (ограниченный набор из туалетной бумаги, гамбургера и спящего человечка). Все остальные базовые понятия уже были. Если у вас был ЖЖ, либо вы могли менять аватарки на каком-нибудь форуме, то вы - гуру 14 уровня. Это круче, чем поменять стандартный нокиевский рингтон на кастомный (13 уровень).

Так вот, девочка проводила биекцию между иконкой в аське и настроением. Что, это типа как одежда, показывает настроение человека. Вот посмотрите на Пашу (Паша - это я), одел белый свитер - значит у него хорошее настроение. Если бы одел черный - мрачное. (Тут надо закрыть прямую речь, но так как не открыл). Блин, думаю про себя: если она в чем-то права, то настроение у меня должно меняться раз в два года, когда свитер истирается до дыр и покупается новый. Картинка на рабочем столе меняется раз в жизни, не было компьютера -> появился компьютер. И аватарка так же.

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

Теперь расшарить личную жизнь стало еще проще. Тестировал фотокамеру на планшете, лежа на кровати. Сделал снимок: нога левая, волосатая - 1 шт., шкаф - 1/3, часть стены (то что осталось). Секунд через 20 вылазит сообщение, что файл уже залит в пикассу. Я тебя просил? Ладно хоть в приватный альбом. Я ничего не тыкал, автоматом заливается в g+, там уже можно (не нужно) дальше.

Я так и не могу понять некоторые вещи в твиттере. Физиологически и умственно себя старым не считаю, но где-то запаздываю. Твиттер - это все тоже продолжение с настроением/статусом/одежды.

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

В чем смысл чата? Пользуйтесь другими клиентами. А так мы имеем публичную переписку в веках.

Из-за первых двух непоняток я использую только списки. Там не видно ни ретвитов, ни чатов; видны только оригинальные сообщения. Весь поток за неделю я могу прочитать за 3 минуты. Я всех поделил на два списка: люди и нелюди. Вторая - рассылки/подписки.

Понятие флуда. Свои менее 100 твитов за 2 года я интерпретирую как "белка-истеричка" (пойти купить что ли успокоительного). А есть какие-то нелюди, кто генерирует 200 сообщений в год, а есть в тысячи. Им, видимо, вообще поговорить не с кем. Правда, это не проблема твиттера. Флудить можно хоть в телевизор с первых каналов, будучи псевдо-президентом.

Не понимаю людей, которые пишут через веб. Пиши через телефон, флуда точно меньше будет.

Единственно, чем хорош твиттер - реальное время. Смотрел прямую трансляцию финала спорта, так почему-то в твиттере секунд на 30 результаты шли быстрее, чем в прямой трансляции. Только что Китай обойдет Мичиган спортсмены не смогли высчитать. Интрига все-таки была.

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

И главное, пост писать долго, чем твит. И это не хорошо или плохо, это факт.

Все-Все-Все.

PS. Есть сервис, который рандомно клеит твиты. Получается сюр:

Не может быть. Позитивная сторона кризиса - брать взятки кредитками Увидел, собрал, не рассказывали.
Не называйте людей 'Буридановыми ослами' - до 120 Температура - это сугроб.
Машины научились проходить тест Тьюринга. Пройдет еще несколько лет, и я знаю и микроволновка После меня!

Выход зависит от входа. Видимо, на входе тоже сюр.