Jul 7, 2011
Картинка с хабра порадовала))
Aug 4, 2011
Узнал тут на днях, что в C# 4.0 появилась удобный класс Lazy<T>, который реализует в себе инициализацию Т по требованию (lazy loading).
И теперь такую конструкцию:
private MongoDbCollection _userCollection; public MongoDbCollection UserCollection { get { if (_userCollection == null) _userCollection = new MongoDbCollection(); return _userCollection; } }
можно заменить следующей:
private readonly Lazy<MongoDbCollection> _userCollection = new Lazy<MongoDbCollection>(() => new MongoDbCollection()); public MongoDbCollection UserCollection { get { return _userCollection.Value; } }
Но главное не то, что запись стала более компактной (проверка на null не так уж и много места занимает), а то что доступ к объекту инициализируемому таким образом становится потокобезопасным.
Нет необходимости теперь реализовывать двойные проверки на null и между ними lock в потокобезопасном сиглтоне. Можно просто написать следующим образом:
public class LazySingleton { private static readonly Lazy<LazySingleton> _instance = new Lazy<LazySingleton>(() => new LazySingleton()); private LazySingleton(){} public static LazySingleton Instance { get{return _instance.Value;} } }
Нужно будет попробовать, посмотреть на сколько удобно и полезно.
Aug 22, 2011
Aug 24, 2011
Aug 28, 2011
Получил доступ к закрытой бетта-версии Delta Engine (http://deltaengine.net/). Это графический мультиплатформенный игровой движок на C#. Разработчики обещают возможность публиковать проекты под Android, iPhone, Windows Phone 7 и еще много всяких платформ. Меня больше всего интересуют первые две и то что это C#.
На С# я знаю только один такой движок, это Unity(http://unity3d.com/), но он какой-то перегруженный и больше про 3D, да и на C# там только скриптование,а все остальное в навороченных тулзах настраивается. В общем, не пошло оно у меня.План на ближайшее время:
1.Hello world.
2.Hello world на моем Android девайсе.
3.Предельно простая игра с классическим геймплеем (змейка, тетрис и т.п.) и “правильной” структурой и архитектурой проекта.
4.Принятие решения о годности движка. И в случаее положительного разработка новой игры и портирование старых наработок (а то надоела мне эта JAVA).
Sep 9, 2011
OMG, я только что создал класс с именем HardcodedNames.
Sep 21, 2011
В JAVA присутствуют конструкции, которых временами не хватает в C#.
Одна из них это возможность создавать экземпляр анонимного класса на основе интерфейса напрямую в теле функции.
К примеру, следующая конструкция стандартная для JAVA и очень часто используется (вся модель событий на ней построена):
SomeClass someClass = new SomeClass(); someClass.method(new ISomeInterface() { @Override public void InterfaceMethod() { //some code } });
В теле функции описывается анонимный класс, который реализует интерфейс, создается экземпляр анонимного класса и передается в тело метода. Так же, возможны всякие замыкания – использования переменных, определенных вне описания анонимного класса и т.п.Такой возможности не хватает в C#. К примеру, у расширения IEnumerable есть метод Distinct и ряд других, которым необходимо передавать в качестве параметра IEqualityComparer. Метод не принимает в себя ни каких делегатов(по причине того, что в интерфейсе IEqualityComparer присутствуют два метода).
В результате, приходится для многочисленных сущностей в проектах клепать классы, которые реализуют IEqualityComparer.
public class EntityComparer : IEqualityComparer<Entity> { public bool Equals(Entity x, Entity y) { //some code } public int GetHashCode(Entity obj) { //some code } }
И где-то в коде использовать:
var distinctEnumerable = enumerable.Distinct(new EntityComparer());
Эти классы как правило единожды используются и временами приходится реализовывать IEqualityComparer для одной и той же сущности, но с разной логикой.
А было бы просто и понятно и вся логика в одном месте:
var distinctEnumerable = enumerable.Distinct(new IEqualityComparer<Entity>() { public bool Equals(Entity x, Entity y) { //some code } public int GetHashCode(Entity obj) { //some code } });
Жаль нету. Жду и надеюсь, что когда-нибудь появится.
Sep 22, 2011
Знаете чего не хватает в браузерах.? Там есть возможность открыть ссылку в новой вкладке браузера, в новом окне браузера. Но нету возможности открыть ссылку в ДРУГОМ браузере, так чтобы при клике можно было выбрать любой установленный в системе. Приходится открывать вручную и копировать ссылку. Долго и не удобно для веб-разработки и тестирования.
Sep 23, 2011
Если сотрудники компании начали активно создавать или обновлять аккаунты на LinkedIn’е, то что-то не то твориться там внутри компании. Руководству надо бы присмотреться…
Sep 28, 2011
Каста – “Сказка” – отличная песня идея которой полностью слизана из сказки, упоминающейся в книжке Джона Фаулза “Волхв”. Это потрясающая книжка, которая в свое время произвела на меня очень сильное впечатление. На первом месте в моем личном рейтинге. Если кто-то думает, чего почитать в ближайшее время – рекомендую.
http://music.yandex.ru/#!/track/597061/album/63749