Суббота, 04.05.2024, 00:46
Приветствую Вас, Гость | RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум » Форум разработчиков » Приложения » Дневник разработки GamesBook
Дневник разработки GamesBook
wester2Дата: Воскресенье, 06.03.2011, 00:43 | Сообщение # 1
Рядовой
Группа: Пользователи
Сообщений: 15
Репутация: 0
Статус: Offline
Доброго времени суток.
Решил вести дневник разработки, о том какие задачи я ставил перед разработкой и как преодолевал некоторые проблемы.

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

ну что ж начнем
Для начала инструментарий
Visual Studio 2010
Resharper
StyleCop (как плагин для решарпера)

ORM выбрана BlToolkit, ибо удобно и быстро

http://pastebin.com/sAVS17US нынешний код проекта. Ничего примечательно нет, но некоторые особенности присутствуют.
1) перед самым первым вызовом этого класса необходимо вызвать метод StartUp() для того, что бы он смог произвести начальную настройку данных подключения к базе. Далее в работе программе, его нет необходимости вызывать
2) в строке 34 я использую using , в который кладу filestream. Почему ?
Здесь вскрылась интересная особенность. Если вызвать метод File.Create(), а после него, сразу же вызывать методы доступа к БД, то файл банально не мог освободиться и возбуждалось исключение, связанное с отказом доступа к файлу.
поэтому пришлось воспользоваться таким экзотическим способом.

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

Сообщение отредактировал wester2 - Воскресенье, 06.03.2011, 00:47
 
jqДата: Среда, 09.03.2011, 13:43 | Сообщение # 2
Сержант
Группа: Администраторы
Сообщений: 26
Репутация: 1
Статус: Offline
Думаю, стоило бы еще тогда более подробно описать саму программу(может даже с картинками), или выложить ее демо-версию.
 
wester2Дата: Суббота, 12.03.2011, 15:00 | Сообщение # 3
Рядовой
Группа: Пользователи
Сообщений: 15
Репутация: 0
Статус: Offline
выкладываю первый скрин прототипа
http://img15.imageshack.us/i/28477453.png/
по клику на cover - открывается форма со скриншотами игры, по клику на название игры - открывается страничка в интернете об этой игре ( пока не решил, какую именно надо открывать страничку)

Добавлено (10.03.2011, 00:17)
---------------------------------------------
Продолжаю работу над своим каталогизатором,
пока сделал набросок парсера Gamespot.com.
на данном сайте необходимо выбрать первую букву имени игры и он предложит все игры - вышедшие, отменные и предполагаемые.
я буду грабить только игры, которые уже вышли и имеют дату релиза.Для этого я пишу простой LINQ запрос для получения таких игр http://pastebin.com/yMqtJ7VU из всего этого запроса интересна только часть включающая в себя регулярное выражение, где проверяю на ненужный мне статус игры.

также возникла следующая задача. к примеру для игр начинающихся на букву A
http://www.gamespot.com/games.h....mes%3BA
как по этой ссылке, мы видим внизу что есть еще страница, которую необходимо пропарсить.
Без проблем,
создаем еще один LINQ запрос
http://pastebin.com/FS2qS6Rm
далее, встает задача, как это а) удобно б) быстро обработать,
решил, что самое простое - это использовать многопоточность ( вернее двупоточность biggrin )
http://pastebin.com/g0p4bn6Z и вышло вот такое

Добавлено (12.03.2011, 15:00)
---------------------------------------------
а я тем временем начинаю отказываться от парсинга HTML спец либами, и возвращаюсь к моим любимым регуляркам....
вечером сегодня или завтра напишу почему я отказываюсь от всеми любимых SGMLReader и HTML Agility Pack

 
wester2Дата: Воскресенье, 13.03.2011, 21:27 | Сообщение # 4
Рядовой
Группа: Пользователи
Сообщений: 15
Репутация: 0
Статус: Offline
итак, как и обещал, рассказываю почему я отказываюсь от специальных либ по парсингу веб-страничек и перехожу к регулярным выражениям.
основная причина заключается в том, что я получаю огромный оверхед при парсинге нужной ноды
к примеру
вот LINQ запрос что бы вытащить основные данные.
Code
var gamesInfo = from elem in source.Descendants()
                     where elem.Name.LocalName == "tr" && elem.Parent.Name.LocalName == "tbody"
                     let elemCollection = elem.Descendants()
                     where elemCollection.ElementAt(7).Value != "TBA" && elemCollection.ElementAt(7).Value != Сanceled"
                     select new
                     {
                    title = elemCollection.ElementAt(1).Value,
                    url = elemCollection.ElementAt(1).FirstAttribute.Value
                     };

первое что мы делаем - получаем коллекцию всех узлов ( на 4/5 не нужных)
второе мы обращаемся к различным проперти что бы уточнить за узел мы сейчас перебираем ( 2 подзапроса)
потом когда мы уточнили что узел МОЖЕТ БЫТЬ нужным для выборки мы возвращаем новую коллекцию для этой ноды и проверяем одно из значений. Если не подходит - отбрасываем. опять таки маленький оверхед в памяти. потом мы выбираем два значения и причем только из одного элемента ( ElementAt(1) ) коллекции. А куда девать оставшиеся 6 элементов, которые возвращаются ? .
Основное недовольство связано именно с тем, что я получаю элементы которые мне не нужны в данный момент.

Сообщение отредактировал wester2 - Воскресенье, 13.03.2011, 23:13
 
wester2Дата: Четверг, 17.03.2011, 22:52 | Сообщение # 5
Рядовой
Группа: Пользователи
Сообщений: 15
Репутация: 0
Статус: Offline
в связи с тем, что сделал свой первый коммит приложения на свой репозиторий
публикую здесь альфа версию программы

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

так как это очень ранняя бета, то очень многое не реализовано
вот часть что надо реализовать
ядро программы
! оптимизация скорости выборки игр из интернета
! оптимизация сохранения игр в БД

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

так же, наткнулся на интересную багофичу, что драйвер SQLite не может прочитать запись если она содержит NULL.

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

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

собственно все.
в дальнейшем планирую доделать графическую часть и потом начать допиливать логику

http://rghost.ru/4816086

 
wester2Дата: Воскресенье, 20.03.2011, 15:28 | Сообщение # 6
Рядовой
Группа: Пользователи
Сообщений: 15
Репутация: 0
Статус: Offline
Дописал модуль для отображения обложки игры
так как такая обложка - огромна http://image.gamespotcdn.net/gamespo....ont.jpg
то сделал пропорциональное изменение обложки на форме, Клик левой кнопкой мышки - увеличиваем, правой - уменьшаем ковер. Само собой все кэшируется, для большей производительности. Ну и так же сделал простенькую проверку, что бы юзер не мог уменьшить ковер в бесконечность и ограничил процент уменьшения в 20 единиц.

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

пока не выкладываю, ибо хочу доделать отображение скриншотов

Сообщение отредактировал wester2 - Воскресенье, 20.03.2011, 15:34
 
wester2Дата: Воскресенье, 27.03.2011, 22:22 | Сообщение # 7
Рядовой
Группа: Пользователи
Сообщений: 15
Репутация: 0
Статус: Offline
проект пока пилится)
завтра - послезавтра выложу еще одну альфу,
задержка связана с тем, что хочу убрать всякое упоминание SGMLReader из проги,

публикую список фич.
+просмотр обложки игры
+просмотр скриншотов игры
+копирование игр, которые добавил юзер в БД на игровую приставку
+немного переработан внешний вид программы

 
wester2Дата: Понедельник, 28.03.2011, 20:58 | Сообщение # 8
Рядовой
Группа: Пользователи
Сообщений: 15
Репутация: 0
Статус: Offline
http://rghost.ru/4972513 вторая альфа
 
Форум » Форум разработчиков » Приложения » Дневник разработки GamesBook
  • Страница 1 из 1
  • 1
Поиск: