среда, 29 июня 2011 г.

Итоги весеннего семестра 2011

Наконец-то закончился второй семестр. И наконец-то я собрался о нем написать.
Семестр, пожалуй, получился очень неоднозначным. С одной стороны отличные курсы по плюсам и высоконагруженным сервисам. С другой - 2,5 предмета-фейла. Но обо всем по порядку

C++

Саша С. – повелитель C++
Смешанные чувства. Вроде не так уж и много нового узнал. Но преподавалось все на уровне. Порадовали задания лаб. Реализация подобных заданий, на мой взгляд, позволяет довольно неплохо разобраться в шаблонах. 
Также, как обычно, студенты публиковали записи лекций. Их можно посмотреть тут. А задания практик - тут. 
Экзамен немного разочаровал. В прошлом семестре было сложнее. А в этом - неприлично легко.




Спецкурс по высоконагруженным сервисам

Смотрим exorg

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

Практика

Про практику мне чего-то совсем не хочется рассказывать... Скажу только, что она была про мою любимую компьютерную графику. Однако, на OpenGL. Совершенно разочарован данным API. Видеть его более не хочу. Никогда.
Летом займусь переписыванием проекта на DirectX.

Алгоритмы 

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



Машинное обучение

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

Теория формальных языков
Худший предмет семестра. Посетив первые пару лекций и офигев от преподавателя, читающего слайды слово в слово. Я решил на сие не ходить. И правильно сделал, как выяснилось. А еще, эти слайды товарищ Герасимов не менее слово-в-слово переписывал из учебника. Не, это конечно похвально. Трудолюбивый преподаватель и все такое. Но вот слушать это было решительно невозможно. А еще, он как-то так сделал, что мне поначалу предмет показался очень сложным. Но стоило только начать читать книгу - как оказалось, что это чуть ли не самый простой предмет семестра.
Отдельного упоминания заслуживают контрольные. Очень тупые задания. В основном - на применение пройденных алгоритмов. Глупо и скучно. Да еще и придирался невероятно. Пример задания: дана грамматика, задающая арифметические выражения в постфиксной записи с операциями сложения, умножения и чего-то там еще. Построить LL, ПП/СП, (S)LR(?) - автоматы для этой грамматики. В каждом привести пример, распознаваемой цепочки и ПРОГНАТЬ автомат на бумажке. Блин. Просто дух захватывает.
Что смешно - на контрольной можно было пользоваться всем, чем угодно. Но нельзя было, например, разговаривать с соседом. Мне вот интересно, преподавателя не насторожило то, что на его контрольной студенты вместо написания собственно работы сидят уткнувшись в мониторы ноутов и громко стучат клавишами?))) Короче, кто хотел - тот списал =)


Технологический семинар

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

Семинар по скриптовым языкам 

Проблема та же, что и с предыдущим семинаром. Скучно. Только тут не нашлось преподавателя, которому не пофигу. Который попытался бы что-то изменить. В результате и студентам стало пофигу. Короче, получился отстой.
Я уж молчу про дурацкие темы. Ну как можно на новый язык программирования отводить одну лекцию? Мы за семестр рассмотрели что-то около 7 языков программирования. И в итоге, я смогу написать что-то осмысленное только на JavaScript и ruby. И то, потому что готовил презентацию по node.js и писал веб-сервер на руби.

Введение в программную инженерию
Обзорный предмет по умным словам из мира разработки. Больше сказать особо нечего.

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

вторник, 14 июня 2011 г.

struct vs class

Какое ключевое слово вы используете для классов? Или лучше так: В каких ситуациях вы используете struct, а в каких class?
Если вы случайно попали в этот блог, и не знаете чем отличаются эти ключевые слова, то подскажу - ничем, кроме моидификатора доступа/наследования по-умолчанию.

Раньше я всегда для "вумных" объектов писал class, а для всяких мелких "контейнеров" struct.
Потом лень меня победила и я стал использовать struct везде. И вот мои аргументы:

1 Наследование
Вы часто используете приватное наследование? А защищенное?
Нет? А чо так?
Я тут прикинул, что не использовал приватное наследование осмысленно ниразу. Соответственно почему оно является наследованием по-умолчанию для меня загадка. Отсюда первый довод в пользу struct: Используя ключевое слово struct вам не придется лишний раз писать "public" при наследовании.









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











Вы не находите, что здесь что-то лишнее?

Итог
А в итоге часто имеем такой код:

В приведенном листинге 3 раза написано ключевое слово public. И все три раза оно нафиг не нужно при использовании struct.









P.S. Не то чтобы я считал это все очень важной проблемой C++. Просто захотелось что-нибудь запостить в блог =) Не принимайте близко к сердцу

понедельник, 16 мая 2011 г.

КРИ 2011

Гостиница Космос. Основное место действия

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

Началось все как-то грустно - приехав в Москву в пол седьмого утра я что-то совсем не выспался и уже начал предвкушать тяжелую борьбу со сном на конференции.
Я когда-то слышал, что на КРИ бывают огромные очереди на регистрацию, но реальный масштаб меня таки удивил - очередь на весь зал). К счастью, я приехал рано и прошел регистрацию минут за 20. Ну а потом началось...

10:00 Петр Камышников, Mail.Ru. - Интерфейсы "Аллодов Онлайн" изнутри

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

11:00 Александр Винников, Nival Network -  Игровая механика, управляемая данными, в проекте Prime World

Проектор принесли, но компьютер, предназначенный для демонстраций не заработал. В общем, еще один косяк. НО. На этот раз автору таки удалось донести до аудитории что-то интересное. Хотя и не очень понятно. Запомнился рассказ о "формулах" в проекте.
В геймдеве, обычно, намешано множество людей различных специальностей - программисты, художники, композиторы, дизайнеры итп. Понятно, что люди, разрабатывающие игровую логику, пилящие баланс итп не всегда знакомы с программированием. И уж совсем точно не стоит ожидать от них глубоких познаний в этой области. Поэтому, для них и придумали систему, когда человек пишет некую формулу(например, для вычисления урона при ударе). Формула пишется на очень простом языке, который потом регулярнми выражениями(!!) трансилруется в C++, компилируется и вставляется в проект как ресурс O_o. В общем, неплохо. Но со слайдами было бы лучше)

12:00 Виталий Видмиров, Gaijin Entertainment - Оптимизация графического конвеера на платформе PS3

Все, начиная с этого доклада никаких проблем с проектором более не было. Что касается доклада - у меня нет PS3. И я никогда с ней не работал. Так что не особо то я там все понял) Рассказывали уж об очень специфичных для PS техниках. SPU там всякие...

13:00 Евгений Заякин, Creat Studios - Не зарастет к нему народная тропа

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

15:00 Кирилл рогожин, Intel - Threading Building Blocks: новые возможности для разработчиков игр

Если кратко, то TBB - это кроссплатформенная C++ библиотека для упрощения работы с многопоточностью. Смотрим презентацию
Рекоммендую ознакомиться с сабжем всем программистам.

16:00 Сергей Сидоров, Intel - CPU спешит на помощь. Перенос вычислений с GPU на CPU

Ниочем

17:00 Евгений Городецкий, Intel - Верните эффект глубины резкости на CPU!

Развитие идей предыдущего доклада. Но с конкретными алгоритмами и цифрами. Получилось очень интересно. Обязательно попробую что-нибудь из этого, когда обзаведусь дофига-ядерным CPU ;)

18:00 Владимир Яцукевич, Vizor Interactive - Эффект зомби. Игры с вниманием человека.

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

В целом. Первый день мне очень понравился. Но предстоял еще второй...
Однако сначала, о том, где мы жили. Мы жили в общежитии повышенной комфортности МФТИ в городе Долгопрудном. Всего лишь за 300 рублей/ночь. При этом, условия были почти царские - это была самая настоящая двухкомнатная квартира со всеми удобствами. (Холодильника только не было). Короче, отдохнули отлично там.

Пока все.

вторник, 5 апреля 2011 г.

Семинары

Как вы относитесь к методу проведения занятий типа семинар?
Я вот, похоже, отрицательно. Просто наблюдая их эффективность для себя.
Конечно, пока готовишься к семинару - перечитываешь кучу материала. Разбираешься со всем, что нужно. И эффект получается солидный. Тема усвоена отлично. Но постойте! Это же всего одна тема из курса! А что с остальными? А они отданы на откуп одногруппникам. И вот тут эффективность страдает. Ибо, в нашей группе, приемлемо(ну опять же, по каким-то моим критериям) подать материал могут очень не многие. Что получается в итоге, думаю, вы итак знаете.

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

Возвращаясь к изначальному вопросу. А что по этому поводу думаете вы? Интересны ли вам семинары? Эффективны ли?

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

Альфа

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

По сути - стартап с внешним контролем. Я поучаствовал уже в некотором количестве стартапов и могу сказать - этот мы точно доведем до конца. Причина - в организации. Но обо всем по-порядку.
Напомню, что моя основная роль в этом проекте - менеджмент. Организовать процесс, поставить задачу. Проследить за выполнением. Но, по понятным причинам, не писать код я не могу))

Изначально, в команде было 7 человек. И было очень трудно заставить кого-то работать. Сейчас то я более-менее с этим справился. А тогда....
После некоторых событий, размер команды сократился до 4х человек. И вот тут то поперло. Жить стало намного проще. Проще контролировать происходящее, проще распределять задачи, -  потому что знаешь - задания выполнят, ибо все(ну почти) разгильдяи выпилены. Сейчас в проекте остались люди, которым действительно интересно сделать продукт, а не получить оценку в зачетку. Важная мысль, которую я отсюда вынес - нужно не заставлять людей работать, а избавляться от тех, кто не работает. 

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

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

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

Но везде есть недостатки... Главный, у нас -  на картинке. И он, видимо, все же по моей вине)

вторник, 15 марта 2011 г.

Еще раз про АУ

Недавно на хабре вновь разместили рекламу СПбАУ) Чем не повод написать что-нибудь развернутое про университет?

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

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


На самом деле, я уже сказал основное отличие, из которого вытекают все остальные - людям не пофигу. Если есть дельные предложения по изменению учебного процесса - тебя внимательно выслушают и, может даже, что то сделают. В конце семестра проводят анонимное анкетирование по прошедшему семестру. И анкеты таки читают и делают выводы. В общем, в этом университете, я чувствую себя активным участником собственного образования, а не пассивным наблюдателем))

Если вас вдруг заинтересовала информация о поступлении, добро пожаловать сюда.
Если же вы сомневаетесь - я бы советовал попробовать. Хуже точно не будет. Ну просто нет у нас в стране таких ВУЗов, чтобы АУ на их фоне был плохим))

суббота, 12 марта 2011 г.

Го и компьютеры

В мае 1997 года шахматный компьютер Deep Blue победил действующего чемпиона мира Гарри Каспарова. Тем самым уничтожив иллюзии о человеческом превосходстве в шахматах.
Произойдет ли тоже самое с го? Скорее да, чем нет. Но, видимо, не так скоро. На днях состоялся интересный матч. 10 профессиональных игроков в го сыграли по 2 партии(один сыграл 3) с программой MoGoTW на доске 9x9. Итоговый счет 14-7 в пользу людей.
Бесспорно, относительно предыдущих результатов впечатляет. Но компьютер все так же далеко от победы над чемпионом мира как и был. Ведь доска 9x9 не идет ни в какое сравнение со стандартной доской для го - 19 на 19 пересечений. Если провести очень(очень очень) грубую оценку количества возможных ходов, то на маленькой доске это "всего" 81! = 5,80E120. Тогда как на большой... эм.. очень много. Слишком много.
В общем, удачи программистам ИИ. Будем ждать...

P.S.
По ссылке можно ознакомиться с недавними матчами компьютерных программ с людьми.
Число после имени человека означает уровень его игры. Уровни в порядке возрастания крутости:
1d, 2d ...7d, 1p, 2p...9p