Кошке
А ты подписался на rss?

Конкурс программных продуктов на третьем курсе

by Игорь Лизунов 19.01.2009 19:04

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

— Так вы говорите, что вся логика по работе со всеми устройствами собрана в этом классе?

— Да. Это паттерн медиатор.

 

 

— За интерфейс пользователя у меня отвечает класс CUserInterface.

 

 

— Ну что ж, давайте посмотрим на вашу замечательную программу.

— Ой, я ее дома оставила.

 

 

— Таким образом, все объекты игры можно поворачивать вокруг опорной точки.

— А можно пример?

— Хм. К сожалению, в игре ни один объект не поворачивается.

 

Первое место - игра.

Что-то в духе дендевской убивалки кучи космических кораблей, движущихся косяком. Два человека в команде.

Человек шарил в программировании, нормально выделил подсистемы, попрятал их за интерфейсами.

Довольно строгая иерархия. В общем все как-то хорошо.

Человек выступал первым, даже страшно стало дальше судить.

Что не понравилось — не понятно, чем занимался второй человек из команды. Сдавал электронику?

Единственное замечание — обычно идет разделение логики, которая генерирует структуры для отрисовки, от логики, которая их рисует на 2 потока.

 

Второе место — оффлайн клиент для айтема.

Шесть человек! Не совсем понятно чем они все занимались.

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

 

Третье место — железный проект.

Управление холодильной установкой, кажется. Два человека.

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

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

 

Респект двум девушкам, которые стали интересно рассказывать про систему моделирования выкроек, но так и не показали ни программу, ни диаграм :-(

 

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

 

Трудности, которые есть у всех проектов:

1) UI. Потому что надо делать интерфейс на WinAPI. Причем у тех, кто делает игры - все получается гораздо лучше. Почему?

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

Посему предложение. Предлагаю в рамках курсовых по ТП объединять 2 или 3 людей и предлагать сделать им совместную оконную библиотеку. Это будет их общая часть и работа в команде. Далее эту библиотеку все трое берут и используют в своих основных проектах. Так народ поймет, как действуют рад-контролы, которые потом будут использовать направо и налево.

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

Так студенты поймут отличие инфраструктуры от конкретного проекта, и будут потом легче разбираться с особенностями сторонних библиотек (зачем тут этот метод?!).

2) Время. Не секрет, что в программировании каждый год устаревает 50% твоих знаний :-) Посему чем дальше от появления дотнета, тем древнее выглядит программирование на винапи. При этом хочется сделать чего-то интересное. По сему у меня предложение. Накопленные за 1-2 года такие библиотеки можно сложить в стопочку, и использовать в дальнейшем как данность. К примеру, для курсового по поводу моделирования одежды совершенно не повредит уже написанный кем-то хмл-парсер. Учитывая, что там обязательно найдутся баги, все равно с ним придется немного разбираться.

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

 

Интересно отметить, что все студенты пользовались субвершин контролем, поднятым на кафедре. Также часть студентов занималась проектом на современных платформах. Жаль, что они не были представлены на конкурсе.

Очень жаль, что многие не успевают завершить проект в срок. Учитывая, что народ на третьем курсе, понятно, что они не могут адекватно оценить сложность проекта. Ну а раз это курсовой со строгим сроком сдачи, естественно, что время является самым большим риском. Как известно, программистское сообщество, в попытке отойти от этого риска, особенно проявляющегося в тяжеловесных методиках разработки (70% времени проекта прошло — business value 0), перешло к легковесным аджайл методикам (70% времени проекта — ~70% business value). Может быть стоит и этот курсовой перевести на них?

За такой подход выступает аргумент, что проектирование без знания технологической части (а так оно и есть), это практически проектирование вслепую. Поэтому у большинства и возникает пресловутый класс UserInterface.

Хотя, я вот подумал, а как перевести на аджайл, например, курсовой по автоматам?

Tags: , , ,

Комментарии

19.01.2009 20:09:12 #

Павел

Я бы еще добавил возможность юзать/писать опенсорс. Мне кажется гораздо полезнее для последующей реальной работы понимать чужой код и архитектурные решения. Можно было бы в качестве эксперимента дать разобраться в какой-нибудь библиотеке, например реализации ICQ-протокола (благо их много), чтобы студент понял как следует писать и поддерживать код, как принимать архитектурные решения. Реверс-инженеринг опять же - очень полезная вещь. Помню как самому пришлось помучаться со сниффером чтобы разобраться с теми же XStatuses в ICQ.

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

Павел | Reply

19.01.2009 20:30:45 #

ilizunov

Да. Более того, вот те либы, про которые я говорил, надо, безусловно, сводить к уже существующим. Более чем уверен, что таких масса. Заодно можно будет снять риск: если кто-то не успеет написать какую-то либу, он может просто взять готовую из хранилища.

ilizunov | Reply

19.01.2009 21:13:48 #

na1s

Насчет проекта, выигравшего 1 место. Код я эго видел, но не в конечном варианте. Так как тот вариант кода, который он принес на конкурс не совпадал с вариантом на SVN.
1.  Вот , например, класс Interface:
class Interface
{
private:
  int Flag;
  HWND MainWnd;
  HINSTANCE hInst;
  HWND BtnStart;
  HWND BtnHotst;
  HWND BtnMult;
  HWND BtnOpt;
  …
public:
  Interface();
  ~Interface();
  void Create(HWND, HINSTANCE);
  void ShowMainMenu();
  void HideMainMenu();
  void ShowMultiplayer();
  void ShowOptions();
  void DrawButton(LPDRAWITEMSTRUCT lpInfo);
  void DrawBitmap(HDC hDC, int x, int y, HBITMAP hBitmap);
  int   GetFlag() {return Flag;};
  void SetCursor(HWND wParam);
};
Чем он отличается от UserInterface других не понятно.
2.  
#include <string.h>
struct SNode
{
  char command[1024];
  SNode* NextElement;
};

class Stack
{
private:
  SNode* LastElement;//указатель на последний элемент стека
  SNode* FirstElement;//указатель на первый загруженный элемент в стек
public:
  Stack();//конструктор
  ~Stack();//деструктор
  void Push(char* str);//помещает переданную команду в вершину стека
  int Peek(char* str);//сравнивает строку с командой на дне стека если совпала - 0, если нет -1
  void Pop();//удаляет команду со дна стека
};
Парень не знает ни что есть стек, ни что есть строки. Пишет все сам. Качество отдыхает. Но он к тому же знает круто English,  а значит надо этим блеснуть и написать часть комментариев на английском, часть на русском.
3.  Парень заюзал Boost только для BOOST_FOREACH( Object* pObj, _vObjects )
4.  Насчет паттернов:
Есть Синглетон, причем не многопоточный, а простейший.
Больше не видел, большинство кода, это Directx код (по стилю чистый MSDN).
5.  Написано около метра исходников.  Думаю для 2D игры показывающими картинки кораблей это немного многовато. Мне кажется парень заигрался в программиста –драйвериста. Ничего прекрасного я не увидел.
Итоги:
1.  Я думаю всё -таки не стоит полагаться на слова участников.  Думаю стоит людям показывать на презентации участки кода с комментированием.  А то парень сказал, что он заюзал 200 паттернов, показал их Uml-диаграммы. А как доказать, что он по-настоящему написал. Жюри должно требовать продемонстрировать реализацию интерестных моментов.
2.   Время. Не секрет, что в программировании каждый год устаревает 50% твоих знаний Smile Посему чем дальше от появления дотнета, тем древнее выглядит программирование на винапи. При этом хочется сделать чего-то интересное. По сему у меня предложение. Накопленные за 1-2 года такие библиотеки можно сложить в стопочку, и использовать в дальнейшем как данность. К примеру, для курсового по поводу моделирования одежды совершенно не повредит уже написанный кем-то хмл-парсер. Учитывая, что там обязательно найдутся баги, все равно с ним придется немного разбираться.
Этот пункт не понятен. Все существующие в проектах подпроекты  ты хочешь выложить в открытый доступ, чтоб люди могли копировать его в свои проекты.  Думаю, не покатит. Только если выбирать лучшие, и то думаю люди не будут брать оттуда.  Лучше пусть пишут сами.  К тому же примеры которые ты привел (файловый менеджмент, хранилище информации а-ля бд, хмл-парсинг) давно уже реализованы в Booste. Людям надо лишь показать как его установить. Вот как раз пусть и выложат уже скомпилированный Boost в сеть, чтоб каждый мог его скачать.
3.  Правильные решения.  В чем различия между целым проектом, и его частями. Если брать Gof, то там как раз показано на примерах реальных приложений. Что еще надо, чтоб понять. Непонятно.
А вот как предлагаю я.
Берем сложный программный комплекс.  
И на его примере разрабатываем вместе со студентами его.  Вот так и научат работать в команде, думать, находить правильные решения. Причем думаю стоит делить между студентами(заинтересованными в реализации Gui, сеть, база данных) части проекта, таким образом к середине семестра у всех студентов уже будут понятия о создание нормальной архитектуры, уже будут практические знания по реализации многих, и остальную часть семестра легко дописываются недостающие части проекта.

na1s | Reply

19.01.2009 21:24:01 #

ilizunov

1) Ну где жюри и где код. Понятно, что это все далеко не производственный код, и никто от них не требует его. Просто человек создал впечатление что он в этом разбирается.
2) Я не хочу выкладывать в доступ. Я хочу чтобы части шарились между тремя параллельно идущими проектами. Главным образом меня заботят оконные либы. Остальное — я плохо помню что там можно, а что нельзя. Наверное все таки найдутся какие-то интересные части, которые можно шарить. Да и кто мешает самих студентов заставить 1 раз что-то написать? Главное, чтобы не надо было писать весь проект.
3) Минусов сложного программного комплекса 2, и они плохо преодолимы. Первый — слишком большие риски, если кто-то чего-то недореализует. Необходимо постоянное управление сверху, иначе вообще ничего не получится. Второй — студенту надо попробовать кучу всего, а в большом проекте он будет делать одну часть (доступ к хранилищу данных, к примеру), и никогда не сунется в остальные (окна). Непонятно кто и на каком этапе должен писать инфраструктуру. Так что задумка интересная, но не для всей толпы однозначно.

ilizunov | Reply

19.01.2009 22:10:48 #

Павел

class Interface уже мощно, хотя сам на 3м курсе писал не лучше.

Нет, на самом деле Игорь прав - нужно:

1. чтобы человек разработал программу с нуля. Пусть криво, пусть мерзопакостно но хоть раз и снуля.

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

Причем мне кажется второе должно быть раньше первого. Может есть смысл давать работать с хорошим кодом на парах?


А вообще я вижу главный недостаток таких конкурсов/задач - это когда человек толком не умеет проектировать и кодировать но хочет выебнуться (ссори мой французский). Т.е. каждый мнит себя (да и мы себя мнили) мегапроектировщиком, тем более за лишние (зачастую ненужные) паттерны дают баллы - чем плохо. В итоге и получается "гладко было на бумаге, да забыли про овраги". Спроектированно все "круто" (не хорошо, а именно "круто"), все паттерны из знаменитой книги, кто-то может даже IoC заюзал. Но когда доходит дело до кода - оппа, а нам и электронику делать и еще кучу всего. В итоге получается то, что получается. Мне кажется было бы лучше, если бы студенты разрабатывали программку попроще, но получше. Т.е. надежнее, юзабельнее, с пониманием, что важно не то, сколько у тебя там паттернов, а то, как легко ты добавишь туда новую фичу или как легко ты перенесешь прогу под Unix, или как легко несведующий человек разберется в твоем коде и проектных решениях. Это гораздо важнее.

Павел | Reply

19.01.2009 22:17:36 #

Павел

Дайте ссылку на SVN чтоли, если конечно она открыта наружу. А то захотелось код посмотреть. Или вышлите код на samolisov@gmail.com.

Павел | Reply

20.01.2009 9:18:05 #

na1s

Второй — студенту надо попробовать кучу всего, а в большом проекте он будет делать одну часть (доступ к хранилищу данных, к примеру), и никогда не сунется в остальные (окна). Непонятно кто и на каком этапе должен писать инфраструктуру.
А как ты думаешь это сейчас происходит, так же делится проект на части. Все равно вместе они писать не будут. Каждый придумает велосипедов и потом они как-нибудь их соединять вместе.

Насчет жюри и кода.

Пусть заставляет показать код на конкурсе. Вот потому что человек умел наболтать и выиграл, а другие люди  не умели и из-за этого проиграли. Конечно, навык представления  проекта нужен, но не он же оценивается в этом конкурсе. Как же быть?


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

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


А вообще я вижу главный недостаток таких конкурсов/задач - это когда человек толком не умеет проектировать и кодировать но хочет выебнуться (ссори мой французский). Т.е. каждый мнит себя (да и мы себя мнили) мегапроектировщиком, тем более за лишние (зачастую ненужные) паттерны дают баллы - чем плохо. В итоге и получается "гладко было на бумаге, да забыли про овраги". Спроектированно все "круто" (не хорошо, а именно "круто"), все паттерны из знаменитой книги, кто-то может даже IoC заюзал. Но когда доходит дело до кода - оппа, а нам и электронику делать и еще кучу всего. В итоге получается то, что получается. Мне кажется было бы лучше, если бы студенты разрабатывали программку попроще, но получше. Т.е. надежнее, юзабельнее, с пониманием, что важно не то, сколько у тебя там паттернов, а то, как легко ты добавишь туда новую фичу или как легко ты перенесешь прогу под Unix, или как легко несведущий человек разберется в твоем коде и проектных решениях. Это гораздо важнее.

И как будут определять простоту? Кто ее определит. Чем вам 2-х мерная игры (а там их было 3) не простые. Мне кажется или надо вводить серьезные санкции против нарушения сроков, либо очень часто их контролировать(кто их будет контролировать? Преподаватель? Старшекурсники?). Ведь  то и другое в серьезной работе встречается.




na1s | Reply

20.01.2009 9:21:02 #

na1s

Игорь, хочешь, чтоб лог стал популярным. У Алены++ одни из самых  популярных постов, посты о книгах по С++ для начинающих и профессионалов. Напиши пост про книги по проектированию (архитректуре ПО)) и будет тебе слава и почет.

na1s | Reply

20.01.2009 9:22:12 #

na1s

А комменты почему нельзя править?

na1s | Reply

20.01.2009 9:58:05 #

ilizunov

А что за Алена? Посты можно удалять.

ilizunov | Reply

20.01.2009 10:57:17 #

Самолысов Павел

О ты че, Алена C++ - мегаблог, сам его иногда почитываю. http://alenacpp.blogspot.com/

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

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

Самолысов Павел | Reply

20.01.2009 11:04:04 #

Самолысов Павел

Сроки может контролировать преподаватель. Идею мэлстоунов еще никто не отменял, не в этом проблема. Проблема в том, что у нас за семестр изучают более 10 предметов. Это не плохо, плохо то, что необходимо ставить адекватные времени и навыкам задачи и учить студентов опять же адекватно их решать. Ну и чтобы интерес был, а не желание сделать "отписку".

Впрочем Павел Леонидович давно хочет (как он говорил) пробить 2 семестра под этот курс. И это правильно, потому что на данном этапе развития общества и IT в нашей стране, данный курс можно назвать чуть ли не основным в профессии.

Просто для контраста (на хабре была статья) в тех же штатах за семестр изучают не более 4х предметов, соответственно там людей и мучают программированием весь семестр, т.е. вместо одного курсача получается 3 и есть четкие сроки: этот за 2 недели, этот за 4 недели и этот за 4 недели, остальное время - теория, семинары, курсачи по другим предметам.

Самолысов Павел | Reply

22.07.2010 7:28:39 #

wow gold

Thanks for posting such good information, will bookmark and share with friends!

wow gold | Reply

22.07.2010 7:54:02 #

wow mage macros

I'll gear this review to 2 types of people: current Zune owners who are considering an upgrade, and people trying to decide between a Zune and an iPod. (There are other players worth considering out there, like the Sony Walkman X, but I hope this gives you enough info to make an informed decision of the Zune vs players other than the iPod line as well.)

wow mage macros | Reply

22.07.2010 7:55:58 #

chinese military history

Gran post Me gustó mucho el tema, tienen un estilo de escritura impresionante y parece muy versado en el tema.

chinese military history | Reply

22.07.2010 8:09:03 #

Free WoW Gold

Its like you read my mind!  You seem to know so much about this, like you wrote the book in it or something.  I think that you could do with some pics to drive the message home a bit, but other than that, this is great blog.  A great read.  Ill definitely be back.

Free WoW Gold | Reply

25.07.2010 0:30:01 #

wow gold

Your blog is fine.  I just want to comment on the design.  Its too loud.  Its doing way too much and it takes away from what youve got to say --which I think is really important.  I dont know if you didnt think that your words could hold everyones attention, but you were wrong.

wow gold | Reply

25.07.2010 1:23:53 #

ps best selling games

Jean introduced a 16-boot footwear collection and with every purchase of these boots, $2 will benefit the Yele Haiti Foundation, a grassroots movement he founded to support reforestation in his homeland, Haiti. In 2005, Jean founded Yele Haiti to build global awareness for Haiti and helping the country through education, sports, arts and environment programs.

ps best selling games | Reply

25.07.2010 2:33:16 #

travel guide

Im not going to say what everyone else has already said, but I do want to comment on your knowledge of the topic.  Youre truly well-informed.  I cant believe how much of this I just wasnt aware of.  Thank you for bringing more information to this topic for me.  Im truly grateful and really impressed.

travel guide | Reply

28.07.2010 16:53:31 #

wow gold

Awesome post thank you. I will be back to read more tuesday.

wow gold | Reply

28.07.2010 17:32:16 #

ugamegold

This article gives the light in which we can observe the reality. this is very nice one and gives indepth information. thanks for this nice article

ugamegold | Reply

28.07.2010 18:15:32 #

love quotes

Good read. I surely liked every bit of it. I have you bookmarked and will be reading more.

love quotes | Reply

02.09.2010 17:11:25 #

wow gold sale

hey great post, will forward this to my friends, thought it really touched base!

wow gold sale | Reply

02.09.2010 18:44:46 #

wow emblem

Nice article, thanks! Could you tell me about the first paragraph more?

wow emblem | Reply

03.09.2010 20:22:22 #

Free WoW Gold

Thanks, truly nice article. Such insighful writing is rare these days. I'll certainly be visiting your site again.

Free WoW Gold | Reply

02.12.2010 9:01:36 #

DKA

[url=www.videoconverterfactory.com/.../]Free 3GP to FLV Converter[/url]
[url=www.videoconverterfactory.com/.../]Free FLV to 3GP Converter[/url]
[url=www.videoconverterfactory.com/.../]HD Video Editing Software[/url]
[url=www.videoconverterfactory.com/.../]Free AVI to MP4[/url]
[url=www.videoconverterfactory.com/.../]Free FLV to 3GP[/url]
[url=www.videoconverterfactory.com/.../]Free FLV to AVI[/url]
[url=www.videoconverterfactory.com/.../]Free AVI to FLV[/url]
[url=www.videoconverterfactory.com/.../]Free AVI to 3GP Converter[/url]
[url=www.videoconverterfactory.com/.../]Converting FLV to MP4[/url]
[url=www.videoconverterfactory.com/.../]Free MP4 to FLV[/url]

DKA | Reply

03.12.2010 12:19:28 #

dd

/post/2009/01/19/http://www.blu-ray-software.net/blu-ray-ripper/" rel="nofollow">http://www.blu-ray-software.net/blu-ray-ripper/ blu ray ripper, /post/2009/01/19/www.blu-ray-software.net/blu-ray-ripper-for-mac/" rel="nofollow">www.blu-ray-software.net/blu-ray-ripper-for-mac/ mac blu ray ripper, /post/2009/01/19/http://www.blu-ray-software.net/blu-ray-creator/" rel="nofollow">http://www.blu-ray-software.net/blu-ray-creator/ blu ray burner, /post/2009/01/19/http://www.blu-ray-software.net/blu-ray-copy/" rel="nofollow">http://www.blu-ray-software.net/blu-ray-copy/ blu ray copy, www.blu-ray-software.net/blu-ray-video-converter/ blu ray converter and /post/2009/01/19/http://www.blu-ray-software.net/blu-ray-player/" rel="nofollow">http://www.blu-ray-software.net/blu-ray-player/ best blu ray player offer the best solution for blu-ray videos
Duplicate /post/2009/01/19/http://www.blu-ray-software.net/blu-ray-ripper/" rel="nofollow">http://www.blu-ray-software.net/blu-ray-ripper/ blu ray dvd with /post/2009/01/19/http://www.blu-ray-software.net/blu-ray-copy/" rel="nofollow">http://www.blu-ray-software.net/blu-ray-copy/ blu ray dvd copy, /post/2009/01/19/www.blu-ray-software.net/blu-ray-ripper-for-mac/" rel="nofollow">www.blu-ray-software.net/blu-ray-ripper-for-mac/ blu ray ripper mac for Mac OS and /post/2009/01/19/http://www.blu-ray-software.net/blu-ray-creator/" rel="nofollow">http://www.blu-ray-software.net/blu-ray-creator/ blue ray burner are good /post/2009/01/19/http://www.blu-ray-software.net/blu-ray-player/" rel="nofollow">http://www.blu-ray-software.net/blu-ray-player/ blu ray player software

dd | Reply

Добавить комментарий




biuquote
  • Комментарий
  • Предпросмотр
Loading



Спасибо BlogEngine.NET за основу блога.

Комментарии

Comment RSS