вторник, ноября 22, 2011

Stanford снова организует онлайн курсы

Статья на хабре про это:
http://habrahabr.ru/blogs/elearning/132793/

Анонсированы ещё несколько онлайн курсов стенфордского университета, стартующих в январе/феврале 2012 года.

Computer Science:
Entrepreneurship:
Записываться лучше заранее, перед началом курса напомнят по почте. Всем советую.

вторник, ноября 08, 2011

Adsence отнял у меня трудовую копейку

На этом блоге последние 3 года его существования стоял Google Adsence - фиг его знает зачем, скорее просто в качестве эксперимента. За 3 года с него накапало что-то в районе $13, а учитывая то, что Google высылает деньги только после накопления $100 мне светило получить свой первый чек на 100 баксов где-то через 20 лет. Но даже этих сугубо теоретических денег подлый Google меня лишил. Сегодня мне пришло письмо, что мой аккаунт на Adsence заблокирован, потому что
Просмотрев данные, мы обнаружили, что Ваш аккаунт представляет угрозу создания недопустимой активности. Поскольку мы отвечаем за защиту своих рекламодателей AdWords от завышения расходов из-за недопустимой активности, мы сочли необходимым закрыть Ваш аккаунт AdSense. Ваш непогашенный остаток и доля доходов Google будут полностью возвращены пострадавшим рекламодателям.
Я лично никаких накруток не делал, так что со стороны Google это просто отъём конфетки у ребенка. Причем, судя по всему, они регулярно так поступают - блокируют аккаунты и забирают деньги себе без всяких видимых причин и никогда не отвечают на апелляции.

Вот вам и корпорация добра.

Ну и ладно, все равно монетизация блогов это зло, так что спасибо Google что они с ней борются :)

понедельник, октября 24, 2011

Онлайн курсы стэнфордского университета

Если вы читаете хабр, то возможно в курсе, что Stanford University экспериментирует с бесплатным онлайн обучением. Есть 3 курса, которые можно пройти онлайн:

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

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

P.S. Ну и до кучи есть еще просто лекции курсов прошлых лет по computer science и связанным с этим вещам: http://habrahabr.ru/blogs/elearning/126527/

среда, августа 31, 2011

Путь программиста :)

Нашел несколько статей для медитации:


Из той же оперы : Python koans - Python Koans is an interactive tutorial for learning Python by making tests pass. Скачиваются по ссылке из статьи, при первом запуске выводится текст:

Thinking AboutAsserts
  test_assert_truth has damaged your karma.
You have not yet reached enlightenment ...
  AssertionError: False is not True
Please meditate on the following code:
  File "C:\gregmalcolm-python_koans\python 2\koans\about_asserts.py", line 12, in test_assert_truth
    self.assertTrue(False) # This should be true


You are now 0/291 koans and 0/36 lessons away from reaching enlightenment
Beautiful is better than ugly.

По мере решения задачек счетчик просветления растет. В конце концов попадаешь в нирвану для программистов.

вторник, августа 23, 2011

Книжка про архитектуру open source приложений

Книжка про архитектуру 25 популярных open source приложений (на английском):
http://www.aosabook.org/en/index.html

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

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

Книжка пытается помочь решить эту проблему за счет приложений с открытым исходным кодом.

Содержание:
Introduction
1. Asterisk - программа для создания телефонной станции.
2. Audacity - запись/редактирование звука.
3. The Bourne-Again Shell - bash Unix shell
4. Berkeley DB - высокопроизводительная нереляционная БД
5. CMake - кроссплатформенная система автоматизации сборки программного обеспечения из исходного кода.
6. Eclipse - популярный IDE (конкурент MS Visual Studio)
7. Graphite - система для построения графиков
8. The Hadoop Distributed File System - распределенная, масштабируемая и компактная файловая система, написанная на Java
9. Continuous Integration - система для построения и тестирования программ.
10. Jitsi - приложение, позволяющее делать видео/аудио звонки, расшаривать свой десктоп, обмениваться файлами и сообщениями
11. LLVM - цитата с википедии: "универсальная система анализа, трансформации и оптимизации программ, реализующая виртуальную машину с RISC-подобными инструкциями. Может использоваться как оптимизирующий компилятор этого байткода в машинный код для различных архитектур либо для его интерпретации и JIT-компиляции (для некоторых платформ). LLVM позволяет компилировать программы написанные на языках Си, C++, ObjC, Fortran, Ada, Haskell, Java, Python, Ruby, JavaScript, GLSL или любом другом, для которого реализован front-end."
12. Mercurial - популярная система контроля версий
13. The NoSQL Ecosystem - ряд подходов к интерфейсам БД без использования SQL.
14. Python Packaging - система питоновских пакетов.
15. Riak and Erlang/OTP - распределенная отказоустойчивая БД для больших масштабируемых систем на Erlang/OTP
16. Selenium WebDriver - фреймворк для тестирования веб приложений
17. Sendmail - первый и все еще существующий Mail Transfer Agent
18. SnowFlock - монитор виртуальных машин для облачных вычислений
19. SocialCalc - электронные таблицы в интернете
20. Telepathy - фреймворк для создания программного обеспечения мгновенного обмена сообщениями, IP-телефонии или видеоконференций.
21. Thousand Parsec - фреймворк для создания космических стратегий.
22. Violet - простой UML редактор
23. VisTrails - система для визуализации научных данных
24. VTK - Visualization Toolkit - система для обработки и визуализации данных
25. Battle For Wesnoth - пошаговая стратегическая игра

воскресенье, июля 31, 2011

Моя система для тайм-менеджмента в стиле GTD

В прошлую пятницу я читал на работе маленький тренинг - введение в Getting Things Done - популярную систему тайм-менеджмента.
Слайды я, кстати, в google docs рисовал - это удобнее, чем в PowerPoint, править можно из дома и с работы, не заботясь о синхронизации.
Заметки для себя которые я писал при подготовке мне в основном не понадобились - как то все другими словами сказать получилось. Тем не менее выкидывать их жалко, пусть тут лежат.

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

Разные системы тайм менеджмента.
Систем тайм менеджмента существует много, от простейших стикеров на холодильнике или мониторе до запутанных супер сложных программ, коих существует over 9000. Я спрашивал у нашего американского менеджера, когда он приезжал, какой системой тайм-менеджмента он пользуется. Он мне показал программу в ipad, с системой в стиле канбан - доска с 4-мя колонками to-do, in progress, verify, done. Задачки попадают сначала в первую колонку и последовательно перетаскиваются на следующую, пока не попадают в последнюю. На работе мы используем тот же метод для планирования задач для команды на итерацию, только вместо ipad'а используется реальная доска. Для разных типов задач можно использовать стикеры разных цветов, приоритеты можно задавать просто - самое важное в вверху колонки. В принципе весьма симпатичная и визуально наглядная система, хотя и не без своих недостатков.

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

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

Работающая система.
В принципе большой разницы какой системой пользоваться нет, главное пользоваться. Типичные проблемы у людей, когда они пытаются внедрить какую-либо систему - задачи забиваются в аутлоок\google task\word\ etc, 2-3 дня система используется, потом в нее перестают заглядывать\ заглядывают раз в месяц, ужасаются, что все просрочено и перестают этим пользоваться.

Решение - помимо того, чтобы регулярно вносить задачи каждый день, раз в неделю выделять час-два для полного просмотра всех задач. В хорошо отлаженной системе тайм менеджмента может храниться 30-100 проектов, это требует некоторых инвестиций времени при внедрении, но в дальнейшем типичное использование заключается в кратком просмотре текущих задач\внесении новых и занимает порядка 5-10 минут в день. Но раз в неделю необходимо более глубоко посмотреть на ваши списки задач\проекты, возможно более глубоко все обдумать, в книжке-первоисточнике по GTD Дэвид Аллен использовал метафору "обзор с 10000 фунтов", с высоты птичьего полета.

Устройство системы GTD.

  • Корзинка (Inbox). У вас должно быть одно место, в которое сыпятся все ваши не разобранные вещи, задачи, статьи, все, что можно отнести к термину "прочее". Для обычных не ИТ-шных людей это может быть лоток для бумаги, в который кидается все - счета, документы, бумажки, заметки, рекламные проспекты, и т.д. Для нас это должно быть нечто компьютерное, какая либо программа. Я лично в настоящее время использую Evernote - в него можно кидать нужные письма из outlook, интересные статьи из интернета, фотографии с телефона, аудио-записи с него же, просто все, что в голову приходит.
    Фишка в том, чтобы вещи в этом inbox'е не оставались надолго\навсегда. Нужно стремиться к тому, чтобы как можно быстрее эту корзинку опустошить. Причем это не подразумевает что нужно все ваши дела, попавшие в inbox сделать сразу же во время ее разбора.
  • Алгоритм здесь простой - берете документ из корзинки, оцениваете можно ли с этим что-то сделать. Вполне возможно, что делать с этим ничего не надо. Это может оказаться либо:
    - мусором - тогда его сразу стираем\выкидываем,
    - либо справочной информацией - тогда ее нужно поместить в вашу систему хранения справочной информации - я опять же использую в этом качестве evernote, можно хранить информацию в MS OneNote, просто в файлах в определенной папке, в каком-то облачном сервисе - это уже как фантазия сработает;
    - либо это может оказаться задача - в этом случае вы решаете можно ли ее выполнить меньше чем за 2 минуты. Если да - то просто делаете ее. Если нет - то решаете сами вы ее будете делать либо поручите кому-то. В зависимости от этого вносите эту задачу либо в to-do list, либо в список поручений для других людей. По этому второму списку вы будете отслеживать статус.
  • Списки дел (To-do lists). Их у вас может быть несколько - например задачи по работе, список того, что вы хотите прочитать, список внерабочих активностей и т.д. Так же хорошо иметь список под названием "когда-нибудь потом", в который можно вносить все ваши прожекты, идеи и т.п. - то чем в ближайшее время вы явно заниматься не будете, но в отдаленной перспективе при наличии свободного времени - почему бы и нет. Например в него может попасть спасение китов, спасение вселенной, покупка мотоцикла и т.п.
  • Также неплохо иметь список ваших проектов. Проект в данной терминологии - это все, для завершения чего нужно 2 или больше действия. Причем в любой момент вы должны иметь для этого проекта как минимум одно следующее действие. Не обязательно иметь полный законченный план, хотя в этом ничего плохого и нет, но как минимум вы должны придумать с чего начать - следующее простейшее действие. 

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

Как я уже писал, я использую Evernote для хранения справочной информации и для ведения списков дел. Это удобно потому что сокращает количество используемых программ. Но в последнее время я думаю, что evernote все же не слишком удобен для списков дел. Они в нем получаются не слишком наглядными. Тут уж издержки универсальности - нельзя хорошо делать все. Например, можно было бы вести списки дел в виде mind-map'ов.

Вообще одна из моих главных претензий к evernote - он недостаточно красив. Можно создавать списки с галочками, можно как то выделять цветом, но все это несколько топорно получается. Хотя многие предпочитают суровую простоту. Система нашего менеджера с доской задач в ipad'е более визуально наглядная. Впрочем, для GTD существует миллион и маленькая тележка различных программ, есть из чего выбрать, и у многих с визуальной стороной все обстоит неплохо.

вторник, мая 17, 2011

Отчет о поездке на КРИ 2011

13-14 мая был на КРИ 2011.
Список лекций, на которых я успел сходить:
  1. Интерфейсы "Аллодов Онлайн" изнутри.
    Это было в 10 утра, проектор в этом зале еще не работал, так что слайдов не было. Лекция была довольно странная, про языки программирования, взаимодействие клиента и сервера, систему аддонов, виджетов и скриптов, репликацию данных, внутреннее устройство классов - и все за 20 минут. Я кстати, видео на фотоаппарат снимал и выложил то, что вышло на youtube - 1/2, 2/2.
  2. Игровая механика, управляемая данными.
    Проектор все еще не работал, лекция без слайдов, так что тоже не слишком понятная вышла. Посвящена была data-driven подходу в грядущей игре Prime World от Nival. Цель - передать как можно больше работы от программистов гейм-дизайнерам. А именно - передать настройку взаимодействия различных игровых объектов, таких как игроки, NPC и прочее, между собой. Грубо говоря, кто кого и с какой силой имеет право бить файрболом по башке. Все это реализовано через систему аппликаторов и функций. Функции кодируются в строки, передаются на клиент в виде закодированных в base64 данных и на клиенте распаковываются и компилируются, если я правильно уловил идею.
  3. Мир танков: проблемы роста
    Лекция про проблемы масштабирования, с которыми столкнулись в wargaming.net при увеличении популярности World of Tanks. Как устроена раздача патчей (CDN/torrents), проблемы, связанные с ростом команды на 100% за год, немного про отдел тестирования и про необходимость отдельного отдела для deployment'а.
  4. Портируем с iPhone на Windows Phone 7 за 24 часа.
    Лекция была посвящена переносу одной игры с iOS на Win Phone 7, вели ее двое - Михаил Черномордиков из Microsoft и парень из проекта этой игры. Я фотографировал слайды, так что пока не найдется нормальная презентация, можно посмотреть на них. В том числе там был любопытный слайд про доли рынка мобильных ОС. Я вытащил данные с него в google docs:


    Диаграмма, которая говорит о планируемых продажах мобильников с конкретными ОС с 2010 по 2015. Мораль: в 2015 половина новых смартфонов будет под андроидом. Также актуальными будут iOS и Windows Phone 7.

    А на этой диаграмме показаны доли уже существующих на руках у людей смартфонов в 2010 и 2014 году. Хоть Nokia и перестала поддерживать Symbian, но в 2014 эта ОС все еще будет установлена на трети мобильников. Значительно (до четверти рынка) вырастет доля андроидов, прибавит Windows Mobile. BlackBerry с iOS стагнируют.
  5. CPU спешит на помощь.
    Лекция Intel'а про обратный перенос вычислений с GPU на CPU с целью оптимизации FPS в графических приложениях.
  6. Постмортем King's Bounty: Legions
    Странный пост-мортем про не вышедшую игру от KranX. Игра планируется к выходу в виде беты (альфы?) летом. Первой платформой для выхода назначен facebook, то есть это будет социальная игра. Клиент будет сделан на Unity engine. Поскольку это довольно новая технология, разработчики столкнулись с некоторыми подводными камнями, из которых я запомнил сложности для дизайнеров и то, что владельцы Unity внезапно для KranX'а захотели процент от прибыли за включение кэширования. Язык программирования клиента - C# Mono, сервера тоже на С# с использованием Photon Socket Server.
  7. Архитектура и процессы разработки серверной части Prime World.
    Судя по зоопарку языков программирования, упомянутых докладчиком, поддерживать это будет очень сложно. Это сложно сделанная социальная игра, в которой имеются разные части - мирная (для девочек) и dota подобная (для мальчиков и пацанок). Еще есть замок, в котором строятся разные здания. Клиент сделан тоже на Unity, язык программирования C#, сервер замка написан на python, сервер боевой части на C++, в клиенте для этой части используются C++ и Lua. Еще кое-где используется PHP. Для разных целей используются разные базы данных - упоминали MongoDB и связку Python+Jungo SQL DB для обработки отчетов об ошибках.
    Рассказали также про сбор игровых метрик (весьма ценная вещь для поддержки и оптимизации нагрузки на сервера). Для отчетов по метрикам используют Pentaho.
  8. Unity pipeline в Nival Network
    Рассказывали про организацию workflow между гейм дизайнерами, разрабатывающими 3D модели в Maya и программистами, использующими их в Unity. Докладчик ужасно торопился рассказать все что можно, так что если кто-то в дальнейшем не выложит видео, разобраться довольно сложно. Я фотографировал слайды, но из них одних понять этот pipeline будет трудно.
  9. Prime World
    Высокоуровневая лекция в философском ключе про игру Prime World. Сергей Орловский рассказывал про то, как Nival несет счастье людям :) А также показывал трейлеры игры. Слайды здесь. Самый интересный слайд:
    Распределение рынка игр по различным платформам. Видно, что рынок PC игр хоть и остается самым крупным сегментом, в общей массе занимает уже совсем небольшую часть.


  10. Игры для массовой аудитории: мультиплатформенная гонка.
    Александр Лысковский из Alawar'а рассказывал об игровом бизнесе. Мораль лекции - платформы меняются, а игровая индустрия будет стоять вечно :) Слайды здесь.

суббота, апреля 30, 2011

Bitcoin rally


Кстати, с Bitcoin'ами в настоящее время творится безумие, если кто не в курсе. За последние дней десять цена биткойна выросла с 77 центов до 4-х долларов. Интересно этот пузырь будет и дальше так надуваться? Потенциал то у этой валюты есть, но в данный момент это что-то вроде паники наоборот, все хотят купить пока не поздно. MMM какой-то. Рано или поздно все захотят прибыль зафиксировать и цена может обратно улететь.


Presentation skills

Коллега прислал кучку ссылок про то, как готовиться к презентациям. Чтобы не потерялись:

среда, марта 02, 2011

Настоящая киберпанковская валюта


Вчера читал про Bitcoin - первую денежную систему, основанную на true cyberpunk подходе P2P. Система разработана и поддерживается по большей части крипто-анархистами, чем и интересна.
Цитата с сайта:

Bitcoin - это основанная на системе peer-to-peer цифровая валюта. Использование системы peer-to-peer (P2P) обозначает, что в данной системе нет центральной власти, которая выдает новые деньги или записывает все транзакции. Вместо этого, эти задачи выполняются коллективно всеми узлами сети. Выгоды этого подхода:
  • Простая передача денег через интернет, без необходимости доверять посредникам.
  • Третьи лица не могут предотвратить или контролировать ваши транзакции.
  • Переводы денег посредством Bitcoin практически бесплатны
  • , в то время как кредитные карты и системы онлайновых платежей обычно требуют комиссию в 1-5% суммы каждого перевода + дополнительные торговые затраты, (которые могут достигать несколько сот долларов).
  • Отсутсвтие нестабильности, которую вызывают банковская мультипликация (fractional reserve banking) и политика центральных банков. Ограниченная инфляция денежной поддержки в системе Bitcoin распределяется поровну (по мощности процессора) через всю сеть, а не монополизируется банками.
Bitcoin - это проект с открытыми исходниками (open source), созданный Сатоши Накамото. Данный проект сейчас находится в стадии beta. Разработка Bitcoin обеспечивается сервисом SourceForge.

Существует теоретическая возможность получить 50 bitcoin монет, если запустить на своем компе программу для генерации. Но эта вероятность с течением времени всё уменьшается и уже сейчас время до успеха на среднем компе будет от нескольких недель до нескольких лет. Поэтому нынче проще купить эти деньги на одной из бирж за PayPal, Webmoney или yandex money. За последние полгода курс обмена вырос в несколько раз и сейчас составляет порядка 1$ за 1 bitcoin.

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

Обсуждения на хабре:
http://habrahabr.ru/blogs/crypto/114642/
http://habrahabr.ru/blogs/crypto/113569/
http://habrahabr.ru/blogs/eCommerce/104682/#comments