Как стать автором
Обновить
12
0
Евгений @EvgK

Пользователь

Отправить сообщение

Vow: самые быстрые промисы

Время на прочтение1 мин
Количество просмотров13K
Хочу предоставить вашему вниманию библиотеку Vow, которую написал мой коллега Дмитрий Филатов dfilatov.

Библиотека реализует Promises/A+, работает очень быстро и требует малого объема памяти. По тестам производительности сильно опережает Q, но при этом сохраняет асинхронную манеру работы.

Работа с Vow выглядит так же просто, как работа с Q. Из недостатков (по сравнению с Q) можно лишь выделить отсутствие progress.

Пример кода с использованием Vow:
function readFile(filename, encoding) {
    var promise = Vow.promise();
    fs.readFile(filename, encoding, function(err, data) {
        if (err) return promise.reject(err);
        promise.fulfill(data);
    });
    return promise;
}
Vow.all([readFile('test1.txt', 'utf8'), readFile('test2.txt', 'utf8')]).then(function(results) {
    console.log(results.join('\n'));
});

Читать дальше →
Всего голосов 43: ↑36 и ↓7+29
Комментарии19

Доброе утро или опыт использования «умного» будильника

Время на прочтение4 мин
Количество просмотров99K
Приятный сон, утро, звонок будильника… Думаю, каждый из нас сталкивался с тем, что пробуждение бывает разным. Бывают дни, когда встаешь, делаешь все на автопилоте, твоя голова пуста, а в душе живет ненависть ко всей Вселенной и человечеству. В такие дни бывают самые тяжелые утренние часы: работа с утра совершенно не идет, в голове пусто, ни с кем не хочется ни то что разговаривать, но даже видеть. А бывают совсем другие дни. В эти дни встаешь легко, мозг сразу начинает работать, дела спорятся с самого утра.

По натуре я типичная «сова» и, как и для многих «сов», утро для меня является, скажем так, не очень приятным временем суток. Однажды, после очередного тяжелого пробуждения, я, сидя на работе, и листая интернет с чашкой кофе в руке, пытаясь прийти в себя, подумал: «А может, хватит уже мучиться? Может, пора что-то сделать?» Я прикинул, что когда я просыпаюсь в состоянии зомби, то теряю пару часов времени, чтобы настроиться на рабочий лад (я специально приезжал на работу на час раньше, чтобы к началу рабочего дня быть более-менее в форме), плюс настроение с утра влияет на то, как проходит мой день. Так я стал искать решение проблемы своего тяжелого пробуждения.

Читать дальше →
Всего голосов 62: ↑54 и ↓8+46
Комментарии63

Работа с Command Line в .Net

Время на прочтение4 мин
Количество просмотров16K
Добрый день сообщество,

Долгое время я был просто читателем полезных технических статей.
Думаю, что пришло и мое время написать свой первый пост. Я надеюсь, что этот пост который, будет полезен не только начинающим разработчикам .net.

Мне кажется, что этой, на первый взгляд, банальной теме уделяется мало внимания. В этой статье я хотел бы поделится опытом работы с Command Line в .Net.
Читать дальше →
Всего голосов 51: ↑40 и ↓11+29
Комментарии32

Как обмануть NET.Reflector

Время на прочтение3 мин
Количество просмотров15K
Сегодня я задумался о том, как обфускаторы скрывают код методов от утилит деобфускации вроде NET.Reflector. Как ни странно, но я не нашел в интернете никакой полезной информации по этому вопросу (возможно, плохо искал) и поэтому пришлось провести маленькое исследования самостоятельно. Под катом краткая заметка о результатах. В примере кода будет снова использоваться Mono.Cecil и генерация кода, так что не забудьте прочитать мою первую статью.

Читать дальше →
Всего голосов 63: ↑55 и ↓8+47
Комментарии28

Инъекции MSIL кода в стороннюю сборку при помощи Mono.Cecil. Реализация принципов АОП в NET

Время на прочтение12 мин
Количество просмотров19K

Введение


В данной статье я расскажу про то, как можно добавлять свой код в существующие .NET сборки и о том, как это связано с аспектно-ориентированным программированием. Статья будет сопровождаться работающими примерами, так как я считаю, что код — это лучший способ донести идею.

Многие .NET разработчики знают, что для доступа к объектам чужой сборки можно использовать Reflection. С помощью типов из System.Reflection мы можем получить доступ ко многим объектам .NET сборки, просмотреть их метаданные, и даже использовать те объекты, доступ к которым ограничен (например, private методы чужого класса). Но использование Reflection имеет свои ограничения и главная причина этому — данные, с котороми вы работаете через Reflection, все еще считаются кодом. Таким образом, вы, к примеру, можете получить CodeAccessSecurity exception, если сборка, к которой вы пытаетесь применить Reflection, запрещает это. По этой же причине Reflection работает довольно медленно. Но наиболее важным для данной статьи является то, что стандартный Reflection не позволяет изменять существующие сборки, только генерировать и сохранять новые.

Mono.Cecil


Качественно иной подход предлагает бесплатная библиотека с открытым исходным кодом Mono.Cecil. Главное отличие подхода Mono.Cecil от подхода Reflection в том, что данная библиотка работает с NET сборкой как с потоком байт. При загрузке сборки, Mono.Cecil разбирает PE заголовок, CLR заголовок, MSIL код классов и методов и т.д. работая напрямую с потоком байтов, представляющим сборку. Таким образом, с помощью данной библиотеки можно как угодно (в пределах предусмотренного) изменять имеющуюся сборку.
Читать дальше →
Всего голосов 49: ↑45 и ↓4+41
Комментарии14

Информация

В рейтинге
Не участвует
Откуда
Екатеринбург, Свердловская обл., Россия
Дата рождения
Зарегистрирован
Активность