Ignite http://alexbard.org.ua software development Fri, 07 Jun 2013 22:42:02 +0000 ru-RU hourly 1 http://wordpress.org/?v=3.4.2 Nancy Framework http://alexbard.org.ua/2013/nancy-framework/ http://alexbard.org.ua/2013/nancy-framework/#comments Fri, 07 Jun 2013 22:42:02 +0000 Alex http://alexbard.org.ua/?p=2121 Nancy – это легковесный веб-фреймворк для .net. Я уже имел возможность использовать этот фреймворк для написания нескольких коммерческих проектов и могу сказать, что работать с ним – одно удовольствие. Причем он подходит не только для начинающих веб-разработчиков, но и для профессионалов своего дела.

Начнем по-порядку.

Установка Nancy

PM> Install-Package Nancy

или с сайта  http://nancyfx.org/

Пишем первый сайт


public class SampleModule : Nancy.NancyModule
{
    public SampleModule()
    {
        Get["/"] = _ => "Hello World!";
    }
}

Готово!

Сайт на Nancy готов.

]]>
http://alexbard.org.ua/2013/nancy-framework/feed/ 0
Aurora.js – аудио фреймворк для web http://alexbard.org.ua/2013/aurora-js-audio-frejmvork-dlya-web/ http://alexbard.org.ua/2013/aurora-js-audio-frejmvork-dlya-web/#comments Fri, 07 Jun 2013 21:21:45 +0000 Alex http://alexbard.org.ua/?p=2116 Aurora.js – фреймворк, который позволяет значительно упростить написание аудио декодера средствами JavaScript. Фреймворк берет на себя организацию низкоуровневых процессов: работу с бинарными данными, декодирование и работу с оборудованием, создавая собственную абстракцию над этими процессами. Aurora.js имеет два высокоуровневых API для считывания информации и проигрывания аудио. Фреймворк легко расширяется для поддержки других форматов, декодеров и аудио-устройств.

Демо

Исходники

]]>
http://alexbard.org.ua/2013/aurora-js-audio-frejmvork-dlya-web/feed/ 0
Планы и всякое http://alexbard.org.ua/2013/plany-i-vsyakoe/ http://alexbard.org.ua/2013/plany-i-vsyakoe/#comments Wed, 24 Apr 2013 13:15:50 +0000 Alex http://alexbard.org.ua/?p=2109 Я давно не писал в блог “просто так”, о жизни. Этот пост будет посвящен этому. Я расскажу о том, чем я живу в последнее время, о прогрессе в разработке Ignite и о своих планах на будущее.

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

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

Я пошел работать на должность web developer`a и разрабатываю сейчас интересное web-приложение для своей компании. Она не занимается аутсорсом (как 99% компаний в Украине) и это первое, что меня радует. Второе – то что мне удалось совладать с собой и стресс с депресняком, которые преследовали меня при поиске работы и получении отказов, не заставили меня сменить ни род деятельности, ни даже язык программирования.. хотя конечно акцент с десктопов сместился на веб. Я все также продолжаю совершенствовать свои знания C# и .net framework.

От работы перейдем к личным проектам: работа над Ignit’ом опять застопорилась – за последние три недели я не написал ни строчки кода(ну может быть несколько). Если честно, мне просто надоело его писать. И, вероятно, это будет концом его разработки. В ближайшие дни я соберу версию, пригодную для публикации, и выдам ее на гора. Возможно, исходные коды уедут на github, но, если честно, мне стыдно за некоторые(многие) места времен hello world моего обучения языку C#. Возможно, публичный (сырой) релиз подстегнет мой интерес.. если же нет, то в задумке крутится новая (и совершенно не похожая на предыдущую) игра:

Игра будет написана с использованием MonoGame и будет поддерживать Windows/Linux из коробки и MacOS/iOS/Android в перспективе. Рабочее название Into the Void. Тематика: первое освоение далекого космоса.

]]>
http://alexbard.org.ua/2013/plany-i-vsyakoe/feed/ 0
C# Отложенное получение данных http://alexbard.org.ua/2013/c-otlozhennoe-poluchenie-dannyx/ http://alexbard.org.ua/2013/c-otlozhennoe-poluchenie-dannyx/#comments Sat, 13 Apr 2013 12:17:30 +0000 Alex http://alexbard.org.ua/?p=2099 Иногда при программировании сталкиваешься с задачей, которая выполняется длительное время. Обычно такие операции выполняют в отдельном потоке, чтобы не мешать ходу работы программы – таким образом решается проблема недоступности потока программы во время выполнения длительной операции, однако тут же возникает проблема синхронизации полученных в результате длительных вычислений данных с данными программы. Тут не работает привычная присваивания:


var a = someAction();

В моей программе, я использую BackgroundWorker’ы для выполнения длительных вычислений. BackgroundWorker асинхронно выполняет поставленную ему задачу (в событии DoWork), а после ее выполнения может сделать еще какие-нибудь действия (событие RunWorkerCompleted):


public static void someAction()
{
   var worker = new BackgroundWorker();
   //действие
   worker.DoWork += (sender, args) => {};
   //результат
   worker.RunWorkerCompleted += (sender, args) => {};
   //запускаем асинхронный процесс
   worker.RunWorkerAsync();
}

К сожалению, если мы передадим переменную, которая должна измениться в результате выполнения асинхронного запроса с модификаторами out или ref следующим образом:


public static void someAction(ref int i)
{
   var worker = new BackgroundWorker();
   //действие
   worker.DoWork += (sender, args) => {};
   //результат записываем 
   worker.RunWorkerCompleted += (sender, args) => {
      i = 1;
   };
   //запускаем асинхронный процесс
   worker.RunWorkerAsync();
}

, то это приведет к ошибке на этапе компиляции, т.к. передача ref/out переменных в анонимные методы запрещена.

Обойдем это с использованием собственного класса:


class Interfaced<T>
    {
        private T _value;
        public T Value {
            get { return _value; }
            set
            {
                if (value.Equals(_value)) return;
                _value = value;
                ValueChanged.Invoke(this, null);
            }
        }

        public EventHandler ValueChanged;
    }

Класс очень простой: он состоит из свойства Value типа Т (т.е. любого, заявленного заранее, типа) и события, которое срабатывает, когда Value изменяется.

Пример использования класса:


class Main
{
    string[] strings;
    public Main()
    {
         var iValue = new Interfaced<string[]>();
         iValue.ValueChanged += (sender, args) => 
             strings = ((Interfaced<String[]>) sender).Value;
         Helper.AsyncAction(iValue);
    }
}

class Helper
{
    public static void AsyncAction(Interfaced<string[]> iValue)
    {
         var worker = new BackgroundWorker();
         worker.DoWork += += (sender, args) => {};
         worker.RunWorkerCompleted += (sender, args) 
             => {iValue.Value = new string[5];};
         worker.RunWorkerAsync();
    }
}

В данном случае, strings перестанет равняться null в момент завершения асинхронной операции.

]]>
http://alexbard.org.ua/2013/c-otlozhennoe-poluchenie-dannyx/feed/ 0
http://alexbard.org.ua/2013/2091/ http://alexbard.org.ua/2013/2091/#comments Wed, 10 Apr 2013 08:21:24 +0000 Alex http://alexbard.org.ua/?p=2091

]]>
http://alexbard.org.ua/2013/2091/feed/ 0
Управление свободной камерой http://alexbard.org.ua/2013/upravlenie-svobodnoj-kameroj/ http://alexbard.org.ua/2013/upravlenie-svobodnoj-kameroj/#comments Mon, 11 Mar 2013 18:02:51 +0000 Alex http://alexbard.org.ua/?p=2088

]]>
http://alexbard.org.ua/2013/upravlenie-svobodnoj-kameroj/feed/ 0
http://alexbard.org.ua/2013/2086/ http://alexbard.org.ua/2013/2086/#comments Fri, 08 Mar 2013 21:22:33 +0000 Alex http://alexbard.org.ua/?p=2086

]]>
http://alexbard.org.ua/2013/2086/feed/ 0
Ignite pre-Alpha gameplay: New Interface http://alexbard.org.ua/2013/ignite-pre-alpha-gameplay-new-interface/ http://alexbard.org.ua/2013/ignite-pre-alpha-gameplay-new-interface/#comments Mon, 04 Mar 2013 13:26:47 +0000 Alex http://alexbard.org.ua/?p=2082

]]>
http://alexbard.org.ua/2013/ignite-pre-alpha-gameplay-new-interface/feed/ 0
http://alexbard.org.ua/2013/2080/ http://alexbard.org.ua/2013/2080/#comments Mon, 25 Feb 2013 10:11:25 +0000 Alex http://alexbard.org.ua/?p=2080

]]>
http://alexbard.org.ua/2013/2080/feed/ 0
Ignite – Fire Damage http://alexbard.org.ua/2013/ignite-fire-damage/ http://alexbard.org.ua/2013/ignite-fire-damage/#comments Mon, 18 Feb 2013 19:38:25 +0000 Alex http://alexbard.org.ua/?p=2077 Сегодня добавил в игру первый элементальный эффект от урона – огонь. На данный момент он встречается только на факелах или при выпадении соответствующего аффикса при генерации редкого предмета:

В Игнайте огненный урон вешает на персонажа дебаф “Горение”, который сработает на следующем ходу и причинит часть уже нанесенного урона. Некоторые таланты будут увеличивать урон и продлевать время действия горения для его синергии с активными талантами. Наличие этого эффекта является базовой механикой для класса “Пиромант”.

]]>
http://alexbard.org.ua/2013/ignite-fire-damage/feed/ 0