Из соцсетей – 1, 2011г

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

Джон Фаулз. Волхв
lib.ru

Leave a Reply

avatar
  Subscribe  
Notify of