четверг, 29 ноября 2012 г.

Ух ты!

А вы помните свое первое "ух ты!"? Я - да.

Мне было 3, а может и 2. Но точно не 4. Меня взяли на огород, а назад мы возвращались на автобусе. Точно не помню, ехал ли я впервые в жизни на автобусе. Я слабо представлял как оно ездит. Меня посадили в правой части автобуса, может почти у кабины водителя.

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

И ведь даже не спросишь ни у кого. Просто еще вопросы формулировать не умеешь, только показывать пальцем, и говорить как Эллочка тридцатью словами. В грамматике еще не было вопросительных фраз. И вот, я догадался подойти к окну в левой части автобуса, видимо залез на сиденье. У тут было мое первое в жизни "ух ты!" причем не wow Одна из следующий мыслей была: "вот же люди придумали". Там просто дорога, где по левой части ехали встречные машинки, а по правой ехал автобус.

Таки это ближе к двум.

А где-то уже в 4 уже зарождались рекурсивные философские вопросы. В детском саду были популярны диалоги и фразы уровня: "а у меня сто; а у меня мильон; а у меня сто питсот мильонов: а у меня мильон мильон мильонов; а у меня больше чем у тебя на один; а у меня больше чем у тебя на мильон". Тут уже в последних двух фразах чувствовалось противоречие. "Да как же так, я же первый сказал что у меня больше чем у тебя на один!" Потом даже использовали понятие о бесконечности, но там тоже прав, кто первый скажет.

Но это еще ничего. Дальше в голове была какая-то мини-модель вселенной, понятие о причинно-следственных связях и детерминированности. Вся вселенная состояла из микробов, они были маленькие. То что мы употребляли в пищу - это тоже микробы, но они полезные. Если руками копаться в земле - то поймаешь вредных микробов и надо мыть руки. Сам ты тоже состоишь из микробов, а думаешь ты мозгом, который тоже состоит из микробов. И так, твое мышление определяется состоянием микробов в мозгу. А то, что ты думаешь о микробах в мозгу, это же микробы как-то по-хитрому "работают". И далее, что ты думаешь о том, что ты думаешь о микробах в мозгу - это вообще какие-то хитрые микробы! Так вот уже чувствовалась рекурсия на 1-2 ход. Дальше, естественно, понимаешь, что тут мильон раз можно думать, о том что думаешь, что думаешь ... и понимаешь, что тут та самая бесконечность. А как она тут бесконечность, ведь мозг состоит из конечного числа микробов. Как оно там все помещается?

Это точно в 4. Я уже в другой садик ходил, переехали когда мне 3 было.

Нет, куайнов в 5 я не писал, что то первое, похожее на компьютер ("компаньон"), появился только в 7. Об существовании куайнов классе в 8..9-ом узнал, но это уже глубокая старость. 

среда, 28 ноября 2012 г.

scala

Год назад МТИ и Принстон запустили по курсу. Прошел год, теперь на coursera их чуть более 200 (программистских штук 40-50, лично мне интересных - менее десятка). Не смог пройти мимо scala. Все остальные курсы я видел в названии и меня не цепляло. Иногда я даже смотрел содержание и внутренности, все равно не цепляло. Других источников полно...

И так - scala. Язык как язык. Но с прикольными фенечками. Функционально краток, с нормальной нетривиальной типизацией, ковариантностью и медсестрами.

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

Одно из самых долгих было первое задание - поставить все среды разработок, систему сборки и отправки задания. Сделал я это за 2 вечера, потом сдал первое задание за 5 минут. Все задания понравились, было их 6 штук. Классический Хафман заходит в 5-6 килобайт, помню еще про классику - задача о переливаниях.

Пусть у нас есть два сосуда, вместимости 9 и 4 литра соответственно. Необходимо набрать 6 литров воды, неважно в какой сосуд. Мартин раза два эту фразу повторил.
Я останавливал плеер и ржал минуты по 3. Математический юмор со стороны кажется, наверно, вообще диким!"; но вы попробуйте набрать 6 литров в емкость вместимости 4. Может это не задумывали как шутку...

В итоге у scala оказался очень приятный REPL, во всяких python/ruby/etc оно тоже есть по определению, но тут все типизированно!

IO без всяких монад, которые я увы пока не понимаю. На haskell-е я как-то пробовал скрестить тривиальную БД + web-морда. Отдельно сходить в БД получилось - получаю какую-то монаду. Отдать в морде строку тоже получилось - там другая монада. Как это скрестить я за два дня не разобрался, плюнул, вытер монитор, пошел жить дальше. Отдельные вещи, как State/Rand, части  IO я понимаю, но в целом картину не вижу. Но это оффтопик.

Можно синтаксически в сигнатуре у функции указывать стратегию вычисления аргументов. Или лень, или активно. Мелочь, а приятно.

Еще есть некоторая (пока) странность. Как во всем цивилизованном мире в качестве параметра у функции можно подать подтип. Это пока не странность. Но зачем-то можно указать минимальный тип, менее которого подавать нельзя. Тут я пока не понял практической значимости этого.

Еще я было подписался на курс по python. Но после того, как они 15 минут рассказывали как устроены числа, я таки решил больше этого не слушать.

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

А так, я обычно lektorium.tv смотрю. Домашних заданий и практик конечно нет, но выбор огромен и крутые люди. Тот же компиляторный курс крут - где вы еще про проекции Футамуры услышите, и адекватно про семантику? Обычно компиляторный курс - это баян про синт анализ, с небольшим введением во внутренность машины и оптимизации кода. Так и на coursera сейчас, согласно описанию компиляторного курса.

На coursera курсы непонятного уровня. Есть курс про автоматы, читает сам Ульман. Но смотришь содержимое и понимаешь, что по большей части уже все знаешь. Всякие IR/ML курсы состоят из 75% терВера (по рассказам очевидцев), и тоже непонятного уровня. Остерегайтесь подделок.

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

четверг, 15 ноября 2012 г.

64-битное

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

Я второй год сижу на третье доске. Тут реально скучно, я собираю все. На второй я тоже сидел два года, там есть один нормальный соперник, но я что-то очень сильно нервничаю и роняю еще где-нибудь 1.5 очка, причем все время из выигрышной. Поменялись с 3-ей доской (он там тоже на 3-ей все собирал), он и на второй все (или -1) собирает.

В прошлом году было вообще жестоко. У нас женщина уронила 2.5(?), еще на первой доске мы потеряли одно. В итоге командно мы заняли 2-ое (!!!) место. За девять туров потерять 3.5 очка из 36. Разрыв в одно очко в последнем туре. Если бы женщина не уронила последнюю партию, то по коэффициенту мы бы даже обошли.

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

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

На третье реально скучно. Ходу на втором уже виден уровень соперника, к десятому иногда есть фигурка, или в развитии ты уже ходов на 5 впереди. И тут есть засада, что когда ты играешь с более слабым соперником, то начинаешь ждать ошибки. Нехорошо это, я по интернету насобачился, и сейчас менее торможу. Скучнее всего, наверное, было международному гроссмейстеру. Но это командное-внутреннее. Тут 3 почти равных команды и 6 халявных. Драйва тут немного по определению, но просто так ронять нельзя, ибо на финише может не хватить в сумме.