Сообщения

Not Just My Code: How to debug third party libraries without decompiling them

Изображение
Intro So I'm back... writing another blogpost. Hope this would be good one. Problem If you are using any third party library you probably know the pain you are getting if something works not as you expected... Imagine the most common scenario - you have a website which uses third party library. Basically it's DLL which provides some integration points for you. You try to integrate with it, it doesn't work but you have no idea why. If it was your code you could have debugged it, but what if you don't have the code? Usually in my case this meant reverse engineering and decompiling using tools like ILSpy, and replacing OOTB code to be able to debug it step by step.... But is it really the only way to do it? Solution Fortunately there is a better way. Step 1 - Generate symbols using decompiling tool dotPeek. When library is built in Visual Studio it's it's also supplied with *.PDB files which contains all the information about how...

Graffity for Windows Phone

Изображение
I would like to advertise an application that I done in my spare time. The idea behind the app is to create painting using the phone and share them on the web. Currently the number of features is limited, but if the user base will grow I'll extend the functionality. There are a lot of ideas how to make app more useful. Video:  If you have Windows Phone I'll be happy to recieve feedback, if not please share :) You can learn more about the app here: http://graffity.cloudapp.net

Backbone.JS + ASP.NET WebAPI

Изображение
Introduction Backbone.js is a powerful JS library built on top of Underscore.js library. It enables to create one page javascript applications using MVC pattern. Backbone.js could be downloaded from  http://backbonejs.org/ , also there exists plenty of examples and tutorials. ASP.NET WebAPI is newest Microsoft framework, which is a part  of ASP.NET MVC 4 . It provides developers with abilitity to quickly create REST services, which could be available from any device and client. More information about WebAPI could be found on  http://www.asp.net/web-api/overview Goal In this post I would like to describe how to create basic Backbone.js application, which is using WebAPI as a storage. Step 1 Create WebAPI REST service First lets create a REST service which will provide and modify all data in our app. Our service will be able to provide a list of skills, which we'll be defined by id, title and description. Also service will be able to ad...

6 interesting facts about garbage collection.

1. Don't create big objects with short lifetime Any object in CLR that is more than 85 000 KB in size are stored in the special heap for big objects. Also they are marked as 2nd generation objects from the start. Creating big objects with small lifetime is bad practice. Why? Garbage collector will need to collect 2nd generation objects more often, and this could lead to performance issues. 2. When GC collects garbage it pauses all managed threads When garbage collection starts CLR hijacks all managed threads and pauses them. But in fact it doesn't affect coding, so... nevermind :) 3. You can predict OutOfMemoryException  In some cases if application consume a lot of resources there is a probability of OutOfMemoryException. Not good, yeah? But... you can predict for operations with big memory consumption by using MemoryFailPoint. Usage example: try {    using(MemoryFailPoint mfp = new MemoryFailPoint(1500))    { ...

Мой год c Sitecore CMS

Изображение
Более года я не писал в блог не одного поста. В основном из-за отсутствия времени или желания, или просто от банальной лени. В этом посте я хочу написать о Sitecore CMS. Это та система с которой я работал более года, по которой получил сертификацию и по которой теперь думаю могу составить осмысленный обзор. О Sitecore Sitecore(www.sitecore.net) - датская компания с главным офисом в Копенгагене и центром разработке в Украине (Днепропетровск). Sitecore занимается разработкой своего продукта - Sitecore CMS, а также сопутствующих к нему расширений: Sitecore Intranet Portal - решение для созданий Интранет-вебсайтов Sitecore Azure - расширение для публикации Sitecore CMS в облако Web Forms For Marketeers - упрощает создание опросников и форм в Sitecore CMS Sharepoint Integration - расширение для интеграции с Microsoft Sharepoint Sitecore CMS Sitecore CMS основывается на следующих технологиях: ASP.NET MSSQL - используется для хранения данных и может быть заменено...

MongoDB + NoRM - первые впечатления

Решил сегодня разобраться с MongoDB. Т.к. ставить локально сервер не хотелось начал издалека. Нашёл бесплатный сервер MongoDB - MongoHQ. Хостинг обладает вполне адекватными ценовыми планами(16 МБ данных отдаётся в полном распоряжение разработчику бесплатно). Итого после регистрации я получил полнофункциональный instance MongoDB. Начал с поиска удобных GUI для просмотра БД. Вначале скачал MongoExplorer, однако тот наотрез отказался подключатся к удалённому серверу, поэтому выбор пал на MongoVUE. Последний подключился вполне успешно. Далее я следуя советам статьи: http://weblogs.asp.net/shijuvarghese/archive/2010/04/16/nosql-with-mongodb-norm-and-asp-net-mvc.aspx Скачал NoRM, добавил в солюшн. Впрочем это было необязательно, т.к. в  NuGet уже есть пакет с последней версией NoRM. Итак, написав скромненький сайтик я решил поэксперементировать с Mongo, и какое же было моё разочарование, когда NoRM не захотел подключатся к MongoHQ. Вначале я подумал что я неправильно состав...

Cycloid release

Не прошло и года как игра дошла до своего финального состояние - а именно нахождения в Xbox Marketplace. http://marketplace.xbox.com/en-GB/Product/Cycloid/66acd000-77fe-1000-9115-d80258550917 Случилось это ровно 11 августа - какраз на мой ДР. Вот такой подарок. Теперь остаётся ждать результатов продаж и надеятся что они окупят вложенные усилия :) PS: Счастливые владельцы Xbox могут бесплатно скачать триальную версию, а если понравится я с удовольствием поделюсь ключиком на полную версию.

Осторожно, Фиддлер

Сегодня наткнулся на неприятную проблему - не работал ТФС, Online Services Sign In, что конечно не могло не расстраивать. 2 перезагрузки компьютера не привели к результату. Вначале я подумал что всему виной смена пароля утром, но потом по подсказке коллеги узнал что всему виной ни кто иной как Fiddler. Который по непонятной причине не дружит с TFS, Online Services Sign In  и даже после закрытия не даёт возможности пользоваться благами цивилизации. Поэтому всё что оставалось это открыть фиддлер и снять флажок с Capture Traffic. После чего магическим образом всё заработало.

Создание msi инсталлятора с использованием Wix

В этом посте я хотел бы описать свой опыт использования инструментария Wix для создания инсталляционных пакетов. Wix - это библиотека которая упрощает создание MSI пакетов. Wix интегрируется в Visual Studio и содержит несколько типов проектов. Я не хочу полностью описывать процесс создания инсталляционного пакета, а кратко опишу сложности с которыми я столкнулся. Полный туториал для изучения Wix можно легко найти например здесь: http://www.tramontana.co.hu/wix/ 1. Deploy Database project output SQL script Несмотря на то что что Wix содержит готовое расширение для установки БД в задаче пришлось делать по своему. Причиной тому послужило использование Visual Studio Database Project. Итак сам процесс занял следующие шаги: 1.Настройка Database Project По умолчанию Database Project самостоятельно задаёт переменную БД, в результате чего даже если передать название БД в параметры sqlcmd в скрипте она будет переопределена. Для того чтобы это предотвратить необходимо задать в нас...

2D Физика для игр - Separate Axis Theorem - Вектор сдвига

Изображение
Как и обещал продолжаю перевод серии статей про игровую физику. Сегодня я напишу как получить вектор сдвига и разьединить 2 столкнувшихся многоугольника. Как было точно подмечено анонимным комментатором метод отделяющей оси работает только для выпуклых многоугольников. Итак, дано: 2 столкнувшихся многоугольника Задача: Разьединить 2 многоугольника, причём минимальным сдвигом. В прошлом посте я писал как узнать пересекаются ли 2 многоугольника, это полезная информация, однако мы можем узнать больше. В случае если 2 многоугольника пересекаются хотелось бы сдвинуть их от друг друга, чтобы они не пересекались.

2D Физика для игр - Separate Axis Theorem

Изображение
Нашёл в интернете очень интересную подборку статей и кода, которая описывает написание физики для игр. Я подумал что было бы полезно перевести серию тех статей и портировать код на XNA. Как для себя, так и для интересующихся игровой физикой. Первая статья будет посвящена Separete Axis Theorem  ( теорема о разделяющей оси )- методу проверки столкновений между многоугольниками. Данный метод является наиболее быстрым на данный момент и используется повсеместно во всех 2D физических библиотеках. Итак, задача : Нам даны два многугольника в виде массива координат вершин. Необходимо проверить их на пересечение.

Vkontakte Merchant API

Сегодня был свободный день и почти всё время провёл дома. Но решил не тратить его попусту и сделать небольшой сайт-магазин для моей игры, попутно немного изучив Vkontakte Merchant API . В принципе что меня удивило - это простота установки данного API. Сам процесс вставки в сайт кнопки покупки действительно занимает минуты,а большинство времени было потрачено на написание заглушек для Callback-страниц.

RadialBlur HLSL Shader - 3 сэмпла

Решил добавить в игру простенький эффект радиальной размытия . В нете к счастью нашёл много информации, в результате скомпонованный шейдер получился следующего вида: sampler ColorMapSampler : register(s0); float4 radialBlur(float2 vTex:TEXCOORD0):COLOR {     float4 result=float4(1,0,0,1);     //массив с сэмплами. тут их 3 для производительности     float samples[3] = {0.05 ,0.03,  0.01};
Убрал баг с Alt-Tab, который возникал в полноэкранном режиме игры. Оказывается теперь XNA сама заботиться об восстановлении графического устройства после его потери. Я же думал что его нужно восстанавливать вручную по событию DeviceLost, что конечно неправильно. Слава богу существует класс Trace который позволяет сделать быстрый лог того что происходит и значительно упростил отладку и поиск ошибки.

Диплом в Шаге - 12/12

Наконец-то сдал диплом в Шаге на оценку 5+. Процесс защиты длился 12 часов с часовым перерывом, но и студенты и преподаватели выдержали этот экзамен =) На радостях выкладываю видео дипломного проекта и арканоида. Разработка не прекращается,а продолжается и как я обещал скоро будет новое оформление и релиз.

HLSL шейдеры для чайников

Изображение
Шейдерная графика сейчас наиболее популярна. Большинство игр так и пестрят системными требованиями Shader 2.0, что конечно разочаровывает владельцев стареньких ПК, и радует картинкой современных геймеров. В этой статье я попытаюсь рассказать вкратце о том как писать HLSL шейдеры на XNA и в результате получить шейдер радиальной градиентной заливки. Итак. Нам понадобяться следующие инструменты: XNA Game Studio  Видеокарта с поддержкой шейдеров Итак для начала мы создадим "Windows Game" проект в студии. Далее нам необходимо создать небольшую текстурку. Неважно её содержимое, сколько само её существование. Поэтому добавляем к Content новый элемент - текстуру 2*2.  Далее нам необходимо нарисовать её, поэтому добавляем в класс Game переменную Texture2D и загружаем её в LoadContent Texture2D texture; protected override void LoadContent()         {             // Create a new SpriteBatch    ...