Убунтариум → Открыт репозиторий с играми для Ubuntu 10.04, 10.10, 11.04, 11.10
Вчера на сайте UALinux появилась новость о том, что они подготовили репозиторий с играми для Убунты. Репозиторий содержит 250 игр разного жанра: их можно установить кнопочкой на сайте, или же привычно добавить репозиторий и ставить пакеты. Сами игры в большинстве своем довольно примитивные: в мире есть уже много чего гораздо круче восстаний антропоморфных кроликов, или шариков в лабиринте, но есть игры из детства, портированные с консоли, аналоги старых добрых Worms, несколько «гоночек» и еще много чего интересного. Ну и, самое главное, что все игры доступны бесплатно: подключай репозиторий, ставь и играй.
Несколько игрушек, кстати, уже есть есть в дистрибутиве самой убунты, но в репозитории версии новее.
В общем, удачного убивания времени.
PS: Судя по комментам к моим предыдущим постам, на Хабре живут люди из UALinux. Поэтому, думаю, можно оставить в комментариях названия игр, которых не хватает в репозитории, но хотелось бы их там видеть.
Разработка под Android → Шаблоны проектирования при разработке под Android. Часть 4 — Сохранение данных. Domain Model, Repository, Singleton и BDD
Сразу хочу сказать, что в статье я не буду описывать как надо работать с Data Provider-ом. Это можно найти и в документации и в многочисленных статьях в интернете.
Здесь я расскажу про шаблоны проектирования Domain Model, Singleton, Repository, про подход Behavior Driven Development (BDD) и как я их использовал в своей программе.
Шаблон Domain Model используется в тех случаях когда разработка ведется от предметной области, в таких случаях есть понятная предметная область и ее термины просто воплощаются в байтах.
Например, в моей программе предметная область состоит из данных расписания, заданного в виде нескольких будильников, для будильника можно задать дни недели и время, а также признак «будильник включен». Так же есть несколько алгоритмов, например получить будильник, который сработает следующим и дату и время его срабатывания. Поскольку будильник может дремать, получается что у одного будильника есть несколько срабатываний с разными действиями: первое срабатывание, дремание, и последнее дремание, когда кнопка дремать уже не доступна. Поэтому есть еще алгоритм поучения ближайшего абсолютного времени и действия.
Так же есть алгоритмы для создания нового будильника и редактирования/удаления существующих.
То есть в моей предметной области есть данные в виде нескольких будильников и несколько алгоритмов, которые реализуют логику предметной области.
Почему я вообще решил использовать этот шаблон проектирования. В альтернативу я бы мог сделать отдельный класс, который создает/редактирует будильники и сохраняет их в БД, а алгоритмы вычисления ближайшего будильника можно было сделать в другом классе.
Во-первых, в терминах предметной области мы работаем с одним списком будильников, в него же добавляем новые будильники и его же спрашиваем о том какой будильник следующий. То есть это удобно выглядит с точки зрения инкапсуляции данных и алгоритмов. Такая модель удобнее для восприятия человеком.
Во-вторых, в таком случае, когда я тестирую модель я могу протестировать обычное поведение пользователя. Например создать будильник, задать ему расписание, проверить что модель выдает правильное следующее время, потом я добавляю новый будильник, а старый отключаю и проверяют что и на этот раз время следующего срабатывания правильное.
Такой подход называется Behavior Driven Development. Его достоинство в том, что я могу тестировать модель в терминах предметной области, то есть в модульных тестах я имитирую обычное поведение пользователя. Благодаря тому, что это реализовано через механизм модульных тестов, я перед каждым релизом могу эти тесты прогнать и быть уверенным, что моя программа программа нормально отрабатывает основные действия пользователя.
Если бы я использовал отдельный класс для редактирования/сохранения будильников и отдельный класс для вычисления ближайшего будильника, то я конечно бы протестировал их по отдельности, но не смог бы проверить их вместе и не смог бы проверить основные действия пользователя.
Здесь я расскажу про шаблоны проектирования Domain Model, Singleton, Repository, про подход Behavior Driven Development (BDD) и как я их использовал в своей программе.
Шаблон Domain Model используется в тех случаях когда разработка ведется от предметной области, в таких случаях есть понятная предметная область и ее термины просто воплощаются в байтах.
Например, в моей программе предметная область состоит из данных расписания, заданного в виде нескольких будильников, для будильника можно задать дни недели и время, а также признак «будильник включен». Так же есть несколько алгоритмов, например получить будильник, который сработает следующим и дату и время его срабатывания. Поскольку будильник может дремать, получается что у одного будильника есть несколько срабатываний с разными действиями: первое срабатывание, дремание, и последнее дремание, когда кнопка дремать уже не доступна. Поэтому есть еще алгоритм поучения ближайшего абсолютного времени и действия.
Так же есть алгоритмы для создания нового будильника и редактирования/удаления существующих.
То есть в моей предметной области есть данные в виде нескольких будильников и несколько алгоритмов, которые реализуют логику предметной области.
Почему я вообще решил использовать этот шаблон проектирования. В альтернативу я бы мог сделать отдельный класс, который создает/редактирует будильники и сохраняет их в БД, а алгоритмы вычисления ближайшего будильника можно было сделать в другом классе.
Во-первых, в терминах предметной области мы работаем с одним списком будильников, в него же добавляем новые будильники и его же спрашиваем о том какой будильник следующий. То есть это удобно выглядит с точки зрения инкапсуляции данных и алгоритмов. Такая модель удобнее для восприятия человеком.
Во-вторых, в таком случае, когда я тестирую модель я могу протестировать обычное поведение пользователя. Например создать будильник, задать ему расписание, проверить что модель выдает правильное следующее время, потом я добавляю новый будильник, а старый отключаю и проверяют что и на этот раз время следующего срабатывания правильное.
Такой подход называется Behavior Driven Development. Его достоинство в том, что я могу тестировать модель в терминах предметной области, то есть в модульных тестах я имитирую обычное поведение пользователя. Благодаря тому, что это реализовано через механизм модульных тестов, я перед каждым релизом могу эти тесты прогнать и быть уверенным, что моя программа программа нормально отрабатывает основные действия пользователя.
Если бы я использовал отдельный класс для редактирования/сохранения будильников и отдельный класс для вычисления ближайшего будильника, то я конечно бы протестировал их по отдельности, но не смог бы проверить их вместе и не смог бы проверить основные действия пользователя.
Linux для всех → Сборочная среда для проекта Midnight Commander — продолжение
Начало
В первой части я представил новый сервис сборки бинарных пакетов файлового менеджера Midnight Commander для Debian/Ubuntu. В комментариях справедливо указали на недостаток технического описания самой среды и я пообещал, что выложу подробности как только код будет приведен в божеский вид. Прошло две недели, появилось немного времени, чтобы стабилизировать функционал и причесать код (он все еще ужасен, но вроде работает как задумано), так что пора выполнить обещанное.
В первой части я представил новый сервис сборки бинарных пакетов файлового менеджера Midnight Commander для Debian/Ubuntu. В комментариях справедливо указали на недостаток технического описания самой среды и я пообещал, что выложу подробности как только код будет приведен в божеский вид. Прошло две недели, появилось немного времени, чтобы стабилизировать функционал и причесать код (он все еще ужасен, но вроде работает как задумано), так что пора выполнить обещанное.
ASP.NET MVC → NerdDinner. Шаг 3: Построение модели
Это третий шаг бесплатного руководства «NerdDinner», которое показывает, как построить маленькое, но полноценное веб-приложение, используя ASP.NET MVC.
Во фреймворке типа модель-представление-контроллер термин «модель» ссылается на объекты, которые представляют данные приложения, как и соответствующую логику предметной области, которая интегрирует проверку и бизнес правила. Модель во многих случаях является «сердцем» MVC-приложения и, как мы увидим позже, управляет его основным поведением.
ASP.NET MVC фреймворк поддерживает использование любой технологии доступа к данным, следовательно разработчики могут выбирать разные варианты реализации своей модели включая: LINQ to Entities, LINQ to SQL, NHibernate, LLBLGen Pro, SubSonic, WilsonORM или прямой доступ через ADO.NET DataReader и DataSet.
Для нашего NerdDinner приложения мы будем использовать LINQ to SQL для создания простой модели, которая почти аналогична структуре базы данных, а также добавим некоторую логику проверок и бизнес правила. Позже мы реализуем класс-хранилище, который поможет абстрагировать постоянную реализацию хранения данных от остальной части приложения и позволит легко производить с ним юнит-тесты.
Во фреймворке типа модель-представление-контроллер термин «модель» ссылается на объекты, которые представляют данные приложения, как и соответствующую логику предметной области, которая интегрирует проверку и бизнес правила. Модель во многих случаях является «сердцем» MVC-приложения и, как мы увидим позже, управляет его основным поведением.
ASP.NET MVC фреймворк поддерживает использование любой технологии доступа к данным, следовательно разработчики могут выбирать разные варианты реализации своей модели включая: LINQ to Entities, LINQ to SQL, NHibernate, LLBLGen Pro, SubSonic, WilsonORM или прямой доступ через ADO.NET DataReader и DataSet.
Для нашего NerdDinner приложения мы будем использовать LINQ to SQL для создания простой модели, которая почти аналогична структуре базы данных, а также добавим некоторую логику проверок и бизнес правила. Позже мы реализуем класс-хранилище, который поможет абстрагировать постоянную реализацию хранения данных от остальной части приложения и позволит легко производить с ним юнит-тесты.
Персональные блоги → nginx magento ssl postfix — сервер и магазин своими руками
Прошлая заметка была о сборке сервера из исходников.
многие сказали, что нынче такое не катит, пакеты им подавай.
Но в основном было нытье, типа — я умнее тебя ты работаешь не правильно, конфиг не пацанский… никто так и не сказал как и что поправить, где сделать правильнее и по другому, какие еще есть возможности конфигурации, и тд. да и heck с ним, у всех свои взгляды, я это принимаю.
Все же кто то взял себе на заметку, ну а кто-то прошёл мимо.
Почему я пишу об этом? Есть сайты, форумы со списками рассылок, есть много мануалов, но, люди продолжают сходить с ума в поисках нормального пояснения установок и настроек. Платят другим горе специалистам, а те ставят все криво и не полные конфиги, без оптимизации. А если нет разницы — зачем платить больше (с)??? Любой человек хотел бы настроить свой сервер и поставить магазин, и для начала ему нужен старт, показать, что это очень просто, что можно сэкономить на начале, потом, когда все заработает, уже задуматься — а всели так сложно? а могу ли я дальше все делать сам? сделать еще лучше поднабравшись опыта? Да все можно сделать самому. Не даром старая мудрость гласит — хочешь чтобы было хорошо, сделай все сам!
Чтобы не писать порожняком, будем конкретно делать установку и запуск сервера для магазина, под управлением — МАГЕНТО 1.4.0.1
многие сказали, что нынче такое не катит, пакеты им подавай.
Но в основном было нытье, типа — я умнее тебя ты работаешь не правильно, конфиг не пацанский… никто так и не сказал как и что поправить, где сделать правильнее и по другому, какие еще есть возможности конфигурации, и тд. да и heck с ним, у всех свои взгляды, я это принимаю.
Все же кто то взял себе на заметку, ну а кто-то прошёл мимо.
Почему я пишу об этом? Есть сайты, форумы со списками рассылок, есть много мануалов, но, люди продолжают сходить с ума в поисках нормального пояснения установок и настроек. Платят другим горе специалистам, а те ставят все криво и не полные конфиги, без оптимизации. А если нет разницы — зачем платить больше (с)??? Любой человек хотел бы настроить свой сервер и поставить магазин, и для начала ему нужен старт, показать, что это очень просто, что можно сэкономить на начале, потом, когда все заработает, уже задуматься — а всели так сложно? а могу ли я дальше все делать сам? сделать еще лучше поднабравшись опыта? Да все можно сделать самому. Не даром старая мудрость гласит — хочешь чтобы было хорошо, сделай все сам!
Чтобы не писать порожняком, будем конкретно делать установку и запуск сервера для магазина, под управлением — МАГЕНТО 1.4.0.1
НЛО прилетело и опубликовало эту надпись здесь.
Разработка → Введение в Rich Domain Model
В последнее время можно услышать много аббревиатур, которые оканчиваются на DD: TDD, BDD, FDD, etc. Меня заинтересовал один из представителей «DD-семейства» — DDD, Domain Driven Development. Я не стану описывать здесь все тонкости этой методологии, ведь всю необходимую информацию можно легко найти в сети. Моя цель — рассказать о наиболее важной концепции DDD, о Rich Domain Model и на небольшом примере показать основные нюансы реализации.
.NET → 5я встреча Петербургской группы ALT.NET
5я встреча Петербургской группы ALT.NET пройдет в четверг, 7го Мая в 19:00.
Встречи группы проходят по адресу Биржевая Линия дом 14, офис 409 (4й этаж).
Программа 19:00 – 21:00 — Паттерны Repository и Specification.
Применение Linq2xxx (на примере Linq to NHibernate), Артем Смирнов
Встречи группы проходят по адресу Биржевая Линия дом 14, офис 409 (4й этаж).
Программа 19:00 – 21:00 — Паттерны Repository и Specification.
Применение Linq2xxx (на примере Linq to NHibernate), Артем Смирнов
Убунтариум → Пакеты с getdeb.net теперь доступны в качестве неофициального репозитория
Я люблю когда стоит последняя версия любимого пакета, но к сожалению официальный репозиторий не всегда их содержит, поэтому часто приходится пользоваться getdeb.net. Сегодня набор зависимостей оказался таким, что руками не получилось с ними разобраться, после гугления было обнаружено зеркало:
deb http://ubuntu.org.ua getdeb/
deb http://ubuntu.org.ua getdeb/
Персональные блоги → Репозиторий пакетов программ от Google для Linux
Google поддерживает репозиторий пакетов программ Picasa и Google Desktop для Linux-дистрибутивов.
Репозиторий Google.
На данный момент доступны только два продукта:
Также имеется подробная инструкция по подключению репозитория к различным дистрибутивам.
Репозиторий Google.
На данный момент доступны только два продукта:
- Picasa for Linux 2.7
- Google Desktop Linux 1.2
Также имеется подробная инструкция по подключению репозитория к различным дистрибутивам.