Показаны сообщения с ярлыком программирование. Показать все сообщения
Показаны сообщения с ярлыком программирование. Показать все сообщения

пятница, июля 01, 2011

Странный код

На работе наткнулся вот на такой Java-код:
    boolean flag = false;
    assert flag = true;
    if (flag) {
        // ...
    }
У кого есть идеи, зачем так писать?

суббота, января 29, 2011

Отмечание просмотренных серий на MyShows.ru

Оригинал с дополнениями, обсуждением и прочим здесь

Постановка задачи

Задача: автоматизировать рутинные действия по отмечанию просмотренных эпизодов на сайте myshows.ru. Поясню, после просмотра очередной серии Теории Большого Взрыва я открываю свой профиль, нахожу сериал, нахожу просмотренный эпизод и отмечаю его как «просмотренный».

После обнаружения api.myshows.ru сразу зародилась идея серьезно упростить этот процесс. Хотелось бы, чтобы это выглядело так: вызываем контекстное меню файла с только что просмотренной серией и выбираем «Отметить на myshows.ru».

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

API

Сначала было решено сделать обертку поверх их API на Ruby. Получилась ничем не примечательная библиотека myshows, использующая httparty для общения с сайтом. В силу общей занятости меня, в библиотеке реализован не весь функционал сайта, а только поиск сериалов/эпизодов и их отмечание, так как именно это необходимо для решения поставленной задачи. Вот пример использования:


Стоит заметить, что метод Profile#show, который ищет сериал по имени среди ваших сериалов, оптимизирован для поиска именно имен сериалов. Он может находить сериалы по аббревиатуре названия, по части названия, по названию без пробелов и так далее. Это сделано в связи с тем, что названия сериалов в имени файлов зачастую сильно коверкаются: lietome.s03e01.webdl.rus.novafilm.tv.avi вместо lie.to.me.s03e01.webdl.rus.novafilm.tv.avi, House.M.D.s07e01.rus.LostFilm.TV.avi вместо House.s07e01.rus.LostFilm.TV.avi и так далее.

Парсинг имени файла

Скрипт должен уметь, получив имя файла с серией, распознать в нем имя сериала, номер сезона и эпизода. Everybody stand back. I know regular expressions. Поискав по локальной сети форматы записи этой информации в имени файла, выделил два основных и написал соответствующие регулярные выражения:
  • title.s01e01.blah.blah.avi;
  • Title - 1x01 - Episode Title.avi.
Существуют так же вариации с другими разделителями или без них, это не сильно усложняет регулярные выражения. Они получается совсем нехитрые, Вы можете найти их в конечном коде скрипта в функции parse_filename.

Скрипт

Объединив парсинг имени файла и использование библиотеки myshows получается простой скрипт, который получив в качестве аргументов имена файлов, пытается отметить их в Вашем профиле и сообщает в stdout об успехе этого действия:


Имя пользователя и md5 пароля скрипт пытается вытащить из файла ~/.myshows, лучшего способа я не придумал.

Интеграция в файловый менеджер

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

Тут необходимо сказать, что я являюсь пользователем Mac OS X, и поэтому дальнейшие слова будут именно об интеграции ранее написанного скрипта с этой ОС. Если Вам это не интересно, можете перейти сразу к заключению.

Будем использовать Automator. Необходимо создать новую Службу, которая будет получать «выбранные файлы фильмов» в «любой программе».

Добавляем действие «Запустить shell-скрипт», выбираем в качестве языка «/usr/bin/ruby» с передачей ввода «как аргументов». Затем вставляем ранее написанный скрипт в поле для ввода скрипта, заменив то, что там было (для красоты можно удалить первую строку "#!/...").

Добавляем действие «Запустить AppleScript». Необходимо в каком-либо виде вывести информационные сообщения, которые печатал скрипт. Было решено воспользоваться функцией display dialog, получается примерно такой AppleScript:


Должно было получиться что-то похожее на это:


Служба готова к использованию, остается только сохранить и придумать имя. Теперь в Finder можно ее вызвать:


Заключение

Оно работает, это радует.

Измерения показали что среднее время работы скрипта 2-5 секунд на отмечание серий одного сериала, то есть отметить один эпизод сериала и десять займет примерно одинаковое время, а вот отметить пилотные серии десяти разных сериалов займет 20-50 секунд, что, в принципе, никому не нужно. Самое узкое место всей системы — это запросы к сайту и выкачивание больших списков эпизодов. Служба созданная Automator'ом работает по-дольше, есть постоянная добавка.

А теперь у меня есть обращение к тем, кого заинтересовала эта идея. Наверняка есть люди, которые отмечают сериалы на myshows.ru и пользуются Windows, KDE, Gnome, …. Сам Ruby-скрипт является кросс-платформенным, но вот интеграция с конкретным файловым менеджером — нет. В связи с этим ищутся люди, которые смогли бы рассказать, как интегрировать подобный Ruby-скрипт в их любимый файловый менеджер.

вторник, декабря 14, 2010

Google?

Этим летом меня удивило письмо с темой «Hello from Google Zurich», оказывается меня через GitHub нашел гугл, точнее один из сотрудников по поиску кадров. Был небольшой телефонный разговор, сошлись на том, что до конца 4-го курса я точно учусь и никуда не поеду, а потом со мной может когда-нибудь и свяжутся (я так до конца и не понял, но возможно по окончании 4-го курса), чтобы позвать на стажировку.
И вот несколько недель назад мне пришло «from Google Russia», в Московском и Питерском офисе открыты вакансии на инженеров-стажеров. Я опять сказал, что никуда пока не хочу, хочу учиться. Предложили прособеседоваться, так, на будущее.. Я был не против, и вот, на 13 декабря договорились провести со мной телефонное собеседование.
(история гораздо длиннее и интереснее, но я хочу рассказать именно о собеседовании)

Ровно в два часа дня, как и договаривались, позвонил Костя, программист из московского офиса. Собеседование состояло из трех частей: введение (по-русски, объяснили что щас будет происходить), собственно собеседование (по-английски, я должен был отвечать на вопросы) и свободный разговор (по-русски, я мог задавать вопросы). Предварительно для меня расшарили текстовичок в Google Docs, в котором происходил весь обмен письменной информацией, вполне удобно.

So let's start. Дан массив X[n] и число Y, найти такие i ≠ j, что X[i] + X[j] = Y. Гавно вопрос! За O(n²) полным перебором. Костя захотел чего-нибудь более.. Быстрого. Я решил, что O(n) все равно недостижимо (я был так наивен), и тогда не грех и отсортировать массив за O(n log(n)). Отсортированный массив это хорошо, напрашиваются два индекса, идущие с разных сторон, пусть i слева, j справа. Тут я немного затупил, но Костя попросил медленно вслух повторить мысль и затуп разрешился. Смотрим текущую сумму X[i] + X[j], если она равна Y, то разговор окончен, если она меньше Y, то двигаем i вправо, ибо j двигать влево бесполезно, если она больше Y, то двигаем j влево. Повторяем сие действо, пока i < j. Иначе решения нет. Костя согласился с алгоритмом, попросил определить скорость — O(n), попросил доказать — доказал. (Уже после собеседования я смог строго доказать корректность алгоритма, Костя не прикапывался). Получаем в итоге O(n log(n)), я решил что неплохо, но меня так между делом спросили: "А за O(n) слабо?!" Задумался минут на 5... Предложили подсказку: какие контейнеры в Java я знаю. List, vector, hash map, .. Меня остановили, спросили, что я знаю про hash map. Я начал лечить что у него время доступа линейное, точнее почти линейное.. Понял что несу чушь, поправился, время доступа константное. "So could you use hash map here?" YES — крикнул я, не скрывая ощущения полного офигевания от простоты алгоритма, который уже понял. Идем по массиву, и добавляем каждый элемент X[i] в хэш таблицу следующим образом {ключ: x[i], значение: i}, и также проверяем в таблице наличие элемента с ключом (Y-X[i]), если он есть, то берем соответствующее ему значение j и пара i,j является искомой. Линейное время, память конечно покушается в некотором количестве, но как я понял тут было важно время.
So another task. Есть функция int foo(int x) { return x*100; }, реализовать эквивалентную ей, не используя операцию умножения. Гавно вопрос! x << 6 + x << 5 + x << 2. Костя согласился и предложил обобщить: написать алгоритм, которой для произвольного N будет генерировать выражение равное x*N. Написал алгоритм нахождения максимальной степени двойки, непревосходящей N (двигаем вправо, пока число положительно; считаем сдвиги). Дальше повторяя этот алгоритм получаем конечное разложение N на сумму степеней двойки: x << k₀ + x << k₁ + ... . Костя хитрым голосом предложил продемонстрировать работу алгоритма при N = 15. Вышло стремно: 8 + 4 + 2 + 1, можно ли как-нибудь по-лучше? Да, (x << 4) - x. Написал алгоритм для нахождения и этой степени, в итоге вышло  x << k₀ - x << k₁ + x << k₂ - x << k₃ + ... . Этот алгоритм вроде не является лучше, ибо очень много зависит от начального числа, но Костя сказал ОК и сообщил, что 40 минут отведенные на собеседование кончились.

Фуух, я очень волновался, и эти 40 минут пролетели нереально быстро. Костя оказался выпускником МехМата МГУ, уже более трех лет работает в гугл, как я понял ему очень нравится. Оказалось, что они не gmail на русский переводят, а деляет вполне секретные и интересные проекты вместе с зарубежными коллегами. Поинтересовался, действительно ли их офисы такие клевые.. Да, клевые, но вот он уже привык и гораздо больше акцентировал внимание на том, что работа интересная. Пожелали друг другу удачи и все.

Никаких результатов, как я понимаю, не узнать, ну что ж, будем ждать писем ближе к лету. Работать в гугл не уверен, что хочу, но от стажировки точно не откажусь.

p.s. К собеседованию никак не готовился, проходил по большей части для себя.

четверг, июля 29, 2010

Стиль "прямоугольник"

Нашел в одном style-guid'е, очень красивый пример:

Форматирование исходного текста в стиле "прямоугольник", например
crlf    = (String) java.security.AccessController 
          .doPrivileged(new sun.security.action   
          .GetPropertyAction("line.separator"));  
есть неуважение к людям, которые вынуждены будут этот текст читать.

суббота, марта 13, 2010

The Time Tracking

Уже давно мы разрабатываем сервис TTT (The Time Tracker) - система учета времени. Реализована в виде веб-приложения, консольного клиента и кроссплатформенного GUI-клиента.. Но сейчас не об этом.
А о том, что же дает нам подобная система? Вот что она дает!

Это моя активность по разным проектам за последние полгода, с комментариями. :)

воскресенье, сентября 27, 2009

Bored with rebooting

Уже год и два месяца я являюсь "линуксоидом", пользователем опереционной системы Kubuntu. Но учась на кафедра Автоматизации Физ-Тех Исследований Физического факультета порой приходится сталкиваться с технологиями, которые очень не дружат с линуксом.

Полгода назад нам рассказывали про MFC и пришлось-таки установить голую винду с visual studio. Сейчас у нас читается курс 3D графики, где мы прогаем только на Direct3D (OpenGL типа устарел, покрайней мере так сказали)..

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

В связи с этим было решено-таки завести какую-нить VM под кубунтой. После короткого поиска остановился на Sun VirtualBox (выбирал наугад среди нескольких кандидатов), скачал deb-пакет с локального зеркала Sun (или можно по этой инструкции), поставилось без проблем. Запустил..

Все по-русски, понятно. Создаю вирт.машину, windows, xp (хотя поддерживает все от 95-ой до семерки), отдал ей под вирт.винтчестер 10 Гб (динамических - то есть реально файл будет весить столько, сколько используется).

Скачал образ WinXP, получил ключ по программе MSDN AA. Через диспетчер вирт.устройств смонтировал образ винды и начал установку... Потом аналогичным образом установил Visual Studio 2008.

В итоге с включенной интеграцией дисплеев и мыши получаем на отдельном рабочем столе свой "маленький" windows :) Скриншот и твит здесь

p.s. Для любителей гамать в Virtual Box, начиная с версии 3, появилась аппаратная поддержка D3D через OpenGL хост-системы в линуксе. Чтобы заполучить это, нужно установить "Guest Additions" в гостевую систему в безопасном режиме и включить поддержку D3D в настройках машины.

p.p.s. в версии 3.0.6 по сравнению с 3.0.2 в режиме интеграции дисплеев пропадает всплывающая панель внизу, из-за чего все настройки машины недоступны, сделал понижение версии обратно к 3.0.2

воскресенье, июля 19, 2009

19 years old

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

Встретился с другом, поел там, где всегда хотел поесть (grill master), выпил то, что всегда интриговало (махито, безалкогольный) - это вроде бы уже необычно. Получил классный подарок в виде подушки с нарисованным сурком и надписью "Don't Repeat Yourself" - тоже очень здорово. Потом мама уговорила меня сходить в магазин, купили майку, желтую, буду на пары ходить в ней; а затем я поехал покупать себе подарок из своего вишлиста (http://www.wishlistr.com/cypok/), то есть первое что там было - велоочки. Сначала меня очень разочаровал велосипед, задний переключатель вообще не работал, а велокомп утверждал что я на месте стою, блин. Очень понравились очки в Твоей Стихии, с тремя линзами (темно-красными, желто-оранжевыми и прозрачными) для разной погоды - полезная вещь, купил. Хотел еще посмотреть гидраторы, но их в Триале не оказалось, кончились. Велокомп чудом починился, переклюк с горем попалам выполнял свои обязанности, на бордюры запрыгивалось легко - это хорошо. Приехал домой довольный.

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

Что мы имеем? Мне 19 лет, я студент третьего курса кафедры АФТИ, увлекающийся программированием и самыми разными видами езды на велосипеде и сноуборде, не верящий в бога и альтруизм, у меня есть хороший друг и много приятелей. Все хорошо, живем дальше.

вторник, мая 05, 2009

web2.0 (мой взгляд на некоторые сервисы)

facebook - социалка, жрет время... Просто поедает... Огромное количество!
last.fm - время не жрет, просто очень удобный сервис
vkontakte - смотреться несколько уныло на фоне фейсбука, но там много друзей, морально не готовых переходить на фейсбук. Поэтому времени сейчас много не требует
habrahabr - ад, детище дьявола. Стоит зайти, и на час ты точно потерян для общества: огромное количество актуальной, интересной информации.
twitter - время не жрет, позволяет осозновать и записывать интересные вещи
youtube - ну... Можно зайти на полчасика, но т.к. много фигни, быстро надоедает
bash.org.ru - давно не открывал, разве только в что почитать в маршрутке

А теперь немного о жизни.
так же катаюсь на велосипеде - времени отнимает не много, зато очень приятно и полезно
пишу сайты - если сажусь - то часа на 4-5. Главная проблема - оторваться от Хауза
M.D.House - сериал, хороший, умный и интересный. Сейчас смотрю второй сезон. В среднем - полторы серии в день.

Так вот куда все мое время тратиться.... :(

суббота, апреля 04, 2009

BDD rocks! Cucumber rocks!

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

Студенты обычно тестируют так: написали функцию суммирования, проверили, что работает "2+2" - все! А потом оказывается, что на "3+0" она падает, а через некоторое время (когда что-то в коде менялось) вообще перестает даже "2+2" складывать. Человек не может после каждой модификации кода проверить все предельные и стандартные поведения программы - это просто очень трудоемко.

Но есть решение! Мы создаем тесты, которые будут проверять работу каждой функции в отдельности - в нашем примере это проверка, что "2+2=4" и "3+0=3". И каждый раз, мы запускаем тесты и убеждаемся, что все по прежнему работает.
Так же возможно мы придумаем, как улучшить алгоритм работы нашей функции, и тогда мы просто перепишем функцию и запустим тесты - если все OK, то мы молодцы, иначе откатываемся к предыдущей версии и думаем над улучшением работоспособности нового, более хорошего алгоритма.

Теперь поговорим о реализации этих тестов.. Ведь mix'овый калькулятор я бы рад протестировать, но абсолютно нет средств и инструментов для этого. С современными языками и фреймворками дела обстоят гораздо лучше: есть очень много этих самых средств и инструментов. Приведу пример лучших для Ruby (субъективное мнение):
  • rspec - BDD фреймворк, весьма удобен, вот пример
    Как можно увидеть, код вполне читаем на родном english'е, мы тестируем наш список в разных ситуациях и ожидаем определенного поведения.
    Этот фреймворк мне нравится больше всего именно для тестирования разных функции, моделей
  • cucumber - и опять фреймворк, девиз которого "BDD with elegance and joy". Это просто супер - вот вам нравится идея написания тестов на русском языке. Мне - очень!
    Это пример комплексного тестирования форума. Вы подумаете, что тут где-то обман (!), как система догадывается, что я имею ввиду? Ведь ИИ еще не доведен до юзабельного состояния :( Да, есть дополнительные расходы, которые заключаются в объявлении пары правил для обработки выражений специфичных для форумов, но это всего 10 строчек с регулярными выражениями, зато что мы получаем взамен!
    Тест пишется за несколько минут, даже меньше, и он очень удобен для демонстрации людям, не знакомым с программированием, например, дизайнерам и заказчикам!
Тесты писать надо, главное выбрать правильный инструмент, чтобы это доставляло удовольствие - иначе вам это надоест!

пятница, марта 20, 2009

Опять то, опять сё..

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

Но есть в каждом разделе интересные моменты...

  • Прогаю я теперь "по науке": так как щас довольно напряженный семестр в плане учебы, то на все остальное времени не хватает вечером, поэтому придумали... Вот такой план по написанию сайта группы (который за месяц учебы с места не сдвинулся): мы с Ваней ("партнер") обязуемся прогать хоть по чуть-чуть каждый день, вне зависимости от количества дел. Эта схема уже приносит плоды, так как за три дня мы уже написали (оценим сверху..) половину форума! С сегодняшнего дня еще обязуюсь уделять часть времени bookez (потому что на него времени ну совсем не хватает).
  • И да, я на протяжении месяца катаюсь на сноуборде каждые выходные! Это офигенно круто, в связи с этим уже купил шлем, очки и даже штаны хорошие - думаю, что обязательно продолжу в следующем сезоне.
  • Учусь на самом деле не так хорошо, как хотелось бы. Да, со всеми мат.дисциплинами у меня все хорошо, лучше не бывает. А вот с лабами по оптике и с теми же семинарами - все-таки не физик я, но будем бороться - прямо сейчас я оформляю месячное задание по оптике.. :)

вторник, февраля 24, 2009

Ruby vs C#, или Знакомство с Си-Шарп

Сегодня на паре я услышал сильно много хорошего от одногруппника про C#. Решил и я посмотреть на это детище Microsoft!

Поставил Mono, MonoDevelop, который ну очень сильно похож на VisualStudio - на сайте mono-project, так и сказано, что среда разработана специально для тех, кто хочет портировать свои .NET проекты в unix-системы. Человек, знакомый с VisualStudio легко разберется с MonoDevelop. Там присутвствует и хваленый intellisense, и все прочие фишечки..

Начал писать, сразу напрягло количество необходимых ключевых слов для объявления методов, и вообще, HelloWorld не в одну тут строчку... Ладно, бог с ним. Intellisense подсказал мне, как распечатать текст - ну и пошло..
В итоге решил написать двусвязный список только с push{front, back}. Написал.. Получилось много, громоздко... 91 строчка кода. Чувствовал, что что-то не так..
Открыл vim, написал на ruby... Элегантнее, короче, яснее и без лишних буков - 43 строчки идентичного по функционалу кода.

Оба исходных кода здесь.

Для меня победил Ruby. Хотя возможно я просто "не умею готовить" Си-Шарп.

четверг, февраля 12, 2009

О процессорах и ассемблере

Начался новый семестр и появились новые предметы: в понедельник был семинар по цифровой схемотехнике и архитектуре ПК. Там нам показали, как рисовать и симулировать схемы на компьютере, пообещали, что к концу семестра мы создадим процессор и напишем для него какую-нибудь простую программку. Кажется будет весело! :)
Так же была пара дискретной математики: на лекции на показывали слайды про три вида сортировки массивов и про avl-деревья, которые мы знаем еще с первого семестра - лектор искренне этому удивился... Потом был семинар, перед которым мы гадали, чем же будем там заниматься - неужели будем сортировать массивы?! И вы не поверите, мы полпары сортировали массив тремя разными способами и затем нас отпустили... Было довольно скучно, но зато появилась мысль, что я хочу пописать на mix'е... Какую-нибудь сортировочку...
Подумав что mix - это не очень серьезно, решил взглянуть на ассемблер для linux - gas. Зная mix, реальный ассемблер не показался сложным, довольно-таки понятно, только команды по другому называются... :) В итоге написал сортировку пузырьком, коряво конечно, но это моя первая программа - http://gist.github.com/62739

вторник, февраля 03, 2009

base_russian_app_with_auth

Вот писал я маме сайт на rails, сначала прикручивал туда аутентификацию (authlogic), а потом russian - дополнение к модулю I18n, который был представлен в Rails2.2, для улечшенного перевода на русский язык (там кстати уже переведены все стандартные ошибки)... Сейчас хочу начать еще один проектик - и надо опять делать тоже самое... Бе... Тут я решил, что эти две основы очень часто используются, и решил создать простое приложение на русском, с аутентификацией и авторизацией, которое потом я буду использовать для всех своих будущих приложений на Rails - base_russian_app_with_auth! Вот так вот, если кому-нибудь это пригодится кроме меня - будет здорово! :)

воскресенье, января 11, 2009

Промежуточный итог

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

Приступим.

  1. Mix-Machine - ассемблер и виртуальная машина (кстати в блоге много сообщений насчет этого проекта)
    Написан на Python, gui на Qt4.
    Описание со скриншотами тут, код с тестами можно посмотреть тут.
    Этой вещью я реально горжусь, ибо это большой и полезный проект, который писался 2 месяца, в тоже время обладающий колоссальной интеллектуальной массой.
    Планируется использовать во втором семестре у первокурсников.

  2. 737@NSU - сайт нашей группы. (сейчас основная разработка ведется Ваней Новиковым)
    Написан на чистом php без использования фреймворков + mysql.
    Собственно вот 737.at.NSU.ru
    Эта вещь реально работает и действует, особенность в том, что ВСЕ написано своими руками.
    Аудитория - вся наша группа.

  3. PlotIt! - графико-построитель (проект первого семестра)
    Python опять же, gui на PC - библиотека Tcl/Tk, на Symbian - его родной API.
    Имеется возможность задавать свои функции и константы, рисовать графики в декартовых и полярных координатах, рисовать параметрически заданные функции и многое другое. Можно еще загружать скрипты и сохранять картинки в файлы (кажется png). Причем все это работает на компах (win, linux, mac) и на телефонах под управлением Symbian 8,9. (для отрисовки используются два написанных враппера).
    Скриншоты
    Пользователь даже есть постоянный - Ваня, ибо его не устравивает то, что Maple долго грузится.

  4. Parallel Solving - библиотека для параллельных вычислений (проект второго семестра)
    Написана на C, использовались лишь библиотеки winsock для сокетов - у линукс они аналогичны, т.е. гипотетически легко перенести на линукс и маки.
    Так, ну это библиотека, которая значительно упрощает "распараллеливание" программ. В качестве примера был написан решатель судоку (примерный алгоритм): то есть программа-сервер посылала части судоку клиентам, каждый решал свою часть и отсылал ответ обратно серверу, причем все это работает через сокеты - то есть поддерживается и сетевой режим. Зачем же нужна библиотека - она брала на себя все операции по синхронизации, соединению сервера и клиента, добавлению и получению ответов на подзадачи.
    Это был первый опыт написания прикладной библиотеки.

  5. OOPacMan - реализация классической игры (проект третьего семестра, выполнен в духе ООП и парного программирования вместе с Ваней).
    Написан на C++, консольный, кросплатформенный.
    Исходники pacman'а и mds'а.
    Используется написанная нами же MDS - Message Driven System - то есть система позволяющая хранить набор объектов, с реализованным функциями отправки сообщений между ними. На основе этого сделано все внутриигровое взаимодействие. Много прикольных фич. Много сил было вложено в кроссплатформенность.
    Увлекательная и красивая игрушка получилась.

  6. Все что связано с Rails...
    Читать раньше в блоге.

  7. Был также опыт олимпиадного программирования
    Есть Сертификат участника Поттосинской командной олимпиады и какая-то грамота с внутренней личной олимпиады НГУ.
    Не зацепило, больше не учавствую, ибо считаю не сильно полезной тратой времени.

четверг, января 08, 2009

Сайт блока и о web'е вообще

Предисловие. Как вы можете прочитать ранее, летом я занималься написанием MixMachine (виртуальная машина такая) с Олегом Дашевским. Это закончилось тем, что в середине сентября она была написана с довольно-таки большим количеством реализованного функционала, оставались мелкие вещи, но их оставили (если будут реальные пользователи программы, то все будет доведено до идеала).

Вступление. Потом меня направили на изучение языка ruby, написав одну учебную программку мы подошли к главному, ради чего все это начиналось - Ruby on Rails.

О главном. RoR - это такой, ну наверное можно сказать фреймворк, для разработки web-приложений. Он позволяет легко, изящно и красиво писать довольно-таки сложные вещи. Если интересно - посмотрите примеры на просторах интернета, а пока поверьте наслово... :) И вот мы с Олегом втроем (к нам в начале года присоединилась одногруппница моя - Арина Нешляева) начали писать сайт - bookez.

О bookez. Задумывался он как портал для обмена книгами, то есть если тебе очень нужна редкая книга и она есть у пользователей сайта (и он не против поделится) - то здесь ты сможешь прочитать отзовы и поинтересоваться о возможности взять ее. В частности похожая ситуация обстоит с новыми книгами по программированию, которые либо не найдешь, либо очень дорогие.. А так мне ее могут дать почитать на недельку.
Этот проект сейчас еще развивается, есть основа: возможность регистрироваться и создавать новые книги - сейчас надо прописывать именно все взаимоотнешия между пользователями..

О будущем. Это меня зацепило, мне понравился и руби, и рельсы (ruby on rails - просто "рельсы"), там мало того меня заинтересовал интеренет не просто как ресурс, но и как машина, которая всегда работает, заинтересовало потом и как именно она работает. На данный момент я уже купил себе домен cypok.info, сейчас в совсем скором времени появится еще и хостинг, тогда начну воплощать идеи личные - блог (может будет просто редирект на blogspot), учет моих расходов (на компе неудобно - не мобильно) и некотрые другие ресурсы..

p.s. А еще мы тут как-то подумали, что нам нужен сайт моего блока - то есть сервис исключительно для трех человек с графиками дежурства, форумом для флуда и многое другое! :)

среда, октября 01, 2008

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

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

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

пятница, августа 15, 2008

Mix..

А микс машина все продолжает развиваться.. :) Здесь можно посмотреть скриншоты того, что сейчас уже есть. Мне нравится, но надо еще многое сделать!.. Вчера написал Леха Кузнецов (так же учавствовал в проекте) и сказал, что больше учавствовать не может, так что "минус один". На днях постараюсь написать инструкцию по установке PyQt на windows, а то уже некоторые просят бета-версию на тестирование... :)

вторник, августа 05, 2008

vm2

Вот и закончились тесты виртуальных машин. Но обо всем по-подробнее.
я спокойно себе писал тесты на все свои интсрукции (благо к прошлым выходным у меня было реализованно практически все), Леху видно не было - это нормально, должен был скоро появиться. Но вот прошла неделя и он появился в тот момент, когда уже вся моя виртуальная машина была готова полностью - так и по решали, Леха сдался - его позвали отдыхать на остров на неделю, вот и не было его, а жалко...
Дальше будем работать уже над гуем (graphical user interface) - Олег завтра настяпает главное окно, от него и будем плясать! Удачи мне!
p.s. главное на Гарри Поттера сильно не отвлекаться... :)

среда, июля 30, 2008

VM1, VM2, VM3...

А проект по написанию виртуальной машины Кнута продолжает жить и существовать, в предыдущие выходные собирались всей командой обсудить насущную проблему - какую VM(виртуальную машину) выбрать...
Дело было так, ассемблер я успешно закончил писать и... Следующим логическим этапом было создание виртуальной машины - но проблема была в том, что Леха Кузнецов, ответственный за это дело, куда запропостился. Недолго думаю, обязанности по созданию vm были возложены на меня, попытавшись понять Лехин код я пару раз запутался, да и объем был небольшой - решил, что проще написать заново, с нуля. Вот тогда я и создал папочку vm2 (Лехина лежала в /vm). Написал ввод, основы машины... И появился Алексей! Две машины - два хозяина... Каждому нравилась только своя машина... Я вообще сразу хотел писать vm, но так получилось, что достался мне ассемблер, у меня было много идей по поводу vm, и я хотел их реализовать. В итоге у нас к выходным было две недоделанных виртуальных машины, очевидно дальше так продолжать было нельзя. Олег предложил - пусть один заканчивает свою машину, а второй примется за гуй (GUI - graphical user interface), но мы оба хотели довести свой "деток" до конца. В итоге было решено просто, когда доделаем полностью все тесты на все инструкции mix'а, вот тогда по результатам тестов и решим, чья лучше. Чтобы тесты были универсальным для обоих машин - создали vm3 с фиксированным интерфейсом (затем я и Леха писали врапперы)... И вот в данный момент тестируем пока мою машину, у Лехи еще нет всех команд, и враппер вроде не отлажен. Когда останется только одна машина - обязательно об этом напишу!

вторник, июля 15, 2008

MixMachine продвигается

Сегодня я практически закончил писать ассемблер для проекта, остались только литералы (это те штуки в миксе, когда пишут LDA =1000000= чтобы загрузить в rA сразу число 1000000). Завтра думаю их напишу. Вот, я очень рад этому факту, довольно приятно на душе :)
А потом наверное надо будет Лехе помагать писать вирт.машину, она у него как-то по-моему не очень, то есть не много написано. Эх, не нравится мне его подход к проге, мое желание, не был бы с ним в команде...

А еще все наверное знают про "СОЛО на клавиатуре" - это такой тренажер слепому набору, я его проходил во время учебы, прошел 55 из 100 заданий на пятерки, потом сессия и было не до него - думал летом продолжу. А щас вот поставил линух, а он под wine'ом не идет, обидно. И теперь пытаюсь совершенствоваться во время общения с тобой, мой блог, да в аськах всяких. Причем раньше я не тренировал английскую раскладку, и прогал переменным числом пальцев - вообщем, как получится, но быстро. Щас пытаюсь прогать тоже по "науке", но в этом случае появляется противостояние между скоростью набора (ведь охота побыстрее написать все и стучишь шестью пальцами) и желанием научиться слепому методу: вот щас уже знаю расположение всех клавиш и пытаюсь прогать по "науке" - пожелай мне успеха...