Дальше много текста, фотографий, разборок. Ну все как обычно
@Igor_Brylinread-only
User
DevCon Digest #2. Погружаемся в ASP.NET
3 min
13K
Приветствую! Мы продолжаем серию тематичных подборок материалов по темам конференции DevCon. Если в прошлый раз мы погружались в материалы, связанные в целом с .NET, то сегодня мы посмотрим глубже в сторону серверных технологий, а точнее – новый ASP.NET.
+12
C#: Внутреннее строение инициализаторов массивов
6 min
30KRecovery Mode
Translation
Наверняка почти каждому, кто имел дело с C#, известна подобная конструкция:
Вполне логично было-бы ожидать превращение этой конструкции в нечто подобное:
Увы и ах, на деле орех гораздо более морщинист, чем кажется с первого взгляда, и имеются некоторые тонкости, на которые будет указано позже. А до тех пор, наденем ношеную «IL freak» майку (у кого имеется) и погрузимся в недра реализации.
int[] ints = new int[3] { 1,2,3 };//А если уж вдруг и не была известна, то отныне и впредь уж точно
Вполне логично было-бы ожидать превращение этой конструкции в нечто подобное:
int[] ints = new int[3];
ints[0] = 1;
ints[1] = 2;
ints[2] = 3;
Увы и ах, на деле орех гораздо более морщинист, чем кажется с первого взгляда, и имеются некоторые тонкости, на которые будет указано позже. А до тех пор, наденем ношеную «IL freak» майку (у кого имеется) и погрузимся в недра реализации.
+31
Как накормить мозг программиста… или feed your brain
12 min
375KВведение
Из всех наслаждений, отпущенных человеку в жизни,
самое изысканное — шевелить мозгами.
(Борис Акунин)
Известно, что при работе за компьютером мозг программиста затрачивает больше энергии, чем мозг других людей. Программист, как работник умственного труда, должен следить за своим питанием и здоровьем, чтобы поддерживать свой мозг в состоянии высокой работоспособности. К тому же, программист должен быть в отличной интеллектуальной форме, развивать в себе высокую творческую активность и задумываться о предотвращении возрастных ухудшений памяти.
В ранней юности, когда, погружаясь глубоко в проект, я часто забывал о еде и бывало, что моей единственной пищей за день был батон с кефиром. Теперь с годами я понимаю, как тогда травмировал мозг, не давая ему нужные для работы вещества и энергию.
В данной публикации мы рассмотрим, как правильно питаться для жизнеобеспечения мозга и как его разогнать ноотропами (в случае
+113
60 FPS? Легко! pointer-events:none!
2 min
99KTutorial
Translation

Вы, наверное, уже читали интересную статью о том, как можно отключать эффекты
:hover
при скроле – это позволяет здорово сохранить отзывчивость сайта, но имеет один недостаток – вам приходится опираться на один общий класс, и это плохо..hover .element:hover {
box-shadow: 1px 1px 1px #000;
}
+132
Оптимизируем производительность веб-страницы: CSS
5 min
51KВ наше время скорость интернета довольно высока. Казалось бы, можно забыть о тех временах, когда нам приходилось ждать по 20-30 (а то и больше) секунд, чтобы веб-страница загрузилась и отобразилась на экране — теперь мы ждём отрисовки страницы в среднем около одной-двух секунд. Однако не стоит забывать, что значительная часть юзеров заходит на ваш сайт с мобильных устройств, на которых связь не всегда стабильна. В связи с этим будет совсем не лишним уделить немного внимания оптимизации вашего кода.
В этой статье речь пойдёт о различных методах оптимизации таблиц стилей. Я расскажу о том, что влияет на скорость отрисовки страницы, как заставить браузер отрисовывать страницу быстрее и какие инструменты использовать для оптимизации.
В этой статье речь пойдёт о различных методах оптимизации таблиц стилей. Я расскажу о том, что влияет на скорость отрисовки страницы, как заставить браузер отрисовывать страницу быстрее и какие инструменты использовать для оптимизации.
+22
High CPU или как Garbage Collector может убить производительность
4 min
25KДобрый день.
Примерно 2 недели назад наш мониторинг тул (NewRelic) начал детектить большое количество падений сайта продолжительностью не более 1 минуты, но с очень большой частотой. Помимо этого визуально было заметно, что общая производительность веб-приложения (Umbraco 6.1.6, .net 4.0) упала.
Красные полосы на картинке — это и есть наши падения.

Да, оговорюсь. Перед тем, как мы это все заметили, новый модуль для блога был установлен и соответственно блог компании был мигрирован из Worldpress в Umbraco.
В итоге у нас есть следующие входные данные: приложение стало хранить больше данных (намного больше) + был установлен сторонний модуль = High CPU.
Примерно 2 недели назад наш мониторинг тул (NewRelic) начал детектить большое количество падений сайта продолжительностью не более 1 минуты, но с очень большой частотой. Помимо этого визуально было заметно, что общая производительность веб-приложения (Umbraco 6.1.6, .net 4.0) упала.
Красные полосы на картинке — это и есть наши падения.

Да, оговорюсь. Перед тем, как мы это все заметили, новый модуль для блога был установлен и соответственно блог компании был мигрирован из Worldpress в Umbraco.
В итоге у нас есть следующие входные данные: приложение стало хранить больше данных (намного больше) + был установлен сторонний модуль = High CPU.
+25
За один проход
7 min
157KСреди задач по программированию часто попадаются такие: дана последовательность однотипных элементов (обычно это числа), требуется за один проход по ней найти какую-нибудь характеристику (среднее квадратическое отклонение, количество минимальных элементов, непрерывный участок с наибольшей суммой...) Дополнительное ограничение — последовательность может быть очень длинной, и в память не поместится. Других ограничений на элементы последовательности, обычно, не накладывается.
С этими задачами всё, более или менее, понятно: нужно найти то, что на мехмате МГУ называют «индуктивным расширением» искомой функции, и реализовать её вычисление. Если найти не удалось (требуемый объём памяти слишком велик), то задача не решается.
Но попадаются и другие задачи. В них есть дополнительные ограничения на элементы последовательности в совокупности, и эти ограничения приходится существенно использовать для решения (и проверять их не надо). Простейшая такая задача выглядит так:
Задача 1. В последовательности записаны целые числа от 1 до N в произвольном порядке, но одно из чисел пропущено (остальные встречаются ровно по одному разу). N заранее неизвестно. Определить пропущенное число
Решение очевидно: просматриваем числа, находим их количество K и сумму S. По условию, N=K+1, значит, сумма чисел от 1 до N будет равна (K+1)*(K+2)/2, и пропущенное число равно (K+1)*(K+2)/2-S. Если вы почему-то боитесь переполнений, то работайте с беззнаковыми числами (там переполнения не страшны — но будьте осторожны при вычислении (K+1)*(K+2)/2 :) ), или вместо суммы ищите XOR всех чисел.
С этими задачами всё, более или менее, понятно: нужно найти то, что на мехмате МГУ называют «индуктивным расширением» искомой функции, и реализовать её вычисление. Если найти не удалось (требуемый объём памяти слишком велик), то задача не решается.
Но попадаются и другие задачи. В них есть дополнительные ограничения на элементы последовательности в совокупности, и эти ограничения приходится существенно использовать для решения (и проверять их не надо). Простейшая такая задача выглядит так:
Задача 1. В последовательности записаны целые числа от 1 до N в произвольном порядке, но одно из чисел пропущено (остальные встречаются ровно по одному разу). N заранее неизвестно. Определить пропущенное число
Решение очевидно: просматриваем числа, находим их количество K и сумму S. По условию, N=K+1, значит, сумма чисел от 1 до N будет равна (K+1)*(K+2)/2, и пропущенное число равно (K+1)*(K+2)/2-S. Если вы почему-то боитесь переполнений, то работайте с беззнаковыми числами (там переполнения не страшны — но будьте осторожны при вычислении (K+1)*(K+2)/2 :) ), или вместо суммы ищите XOR всех чисел.
+71
Обзор ASP.NET 5
9 min
72KTranslation
ASP.NET 5 привносит значительные изменения в платформу ASP.NET. В этой статье рассматриваются новые концепции ASP.NET 5 и объясняется, как они помогут разрабатывать современные веб-приложения.
ASP.NET 5 — это лишенный всего избыточного .NET стек для построения современных веб-приложений. Мы построили его с нуля, чтобы обеспечить оптимизированную платформу для разработки приложений, которые будут развернуты в облаке или работать на собственных серверах. Для поддержки гибкости при построении решений данная платформа состоит из модульных компонентов с минимальными накладными расходами.
ASP.NET 5 включает в себя следующие возможности:
Изменения, которые мы сделали для ASP.NET 5 были основаны на запросах клиентов и обратной связи. Эти изменения упрощают разработку, хостинг и обслуживание и ориентированы на современные веб-приложения.
Введение в ASP.NET 5.
ASP.NET 5 — это лишенный всего избыточного .NET стек для построения современных веб-приложений. Мы построили его с нуля, чтобы обеспечить оптимизированную платформу для разработки приложений, которые будут развернуты в облаке или работать на собственных серверах. Для поддержки гибкости при построении решений данная платформа состоит из модульных компонентов с минимальными накладными расходами.
ASP.NET 5 включает в себя следующие возможности:
- Новая гибкая и кроссплатформенная среда выполнения
- Новый модульный конвейер для HTTP-запросов
- Конфигурация готовая к использованию в облаке
- Унифицированная программная модель, которая сочетает в MVC, Web API и Web Pages
- Возможность увидеть изменения без повторного построения проекта
- Использование нескольких версий .NET Framework бок о бок
- Возможность self-hosting или хостинга на IIS
- Новые инструменты в Visual Studio 2015
- Открытый исходный код в GitHub
Изменения, которые мы сделали для ASP.NET 5 были основаны на запросах клиентов и обратной связи. Эти изменения упрощают разработку, хостинг и обслуживание и ориентированы на современные веб-приложения.
+38
Котфускация исполняемого .net кода
6 min
66K(пятница)
Обычно развернутое приложение в файловой системе выглядит как-то так:

Совершенно незащищенное от инструментов типа рефлектора или IlSpy, но что если оно станет таким:

По крайней мере легкий ступор хакеру-неофиту обеспечен. Приятно смотрится,и антивирусы не заинтересуются.
Обычно развернутое приложение в файловой системе выглядит как-то так:

Совершенно незащищенное от инструментов типа рефлектора или IlSpy, но что если оно станет таким:

По крайней мере легкий ступор хакеру-неофиту обеспечен. Приятно смотрится,
+118
Покупаем новые Kindle и Nexus 4,7 без посредников
1 min
249KМне кажется, многие хабражители не знают, что жизнь потихоньку налаживается.
Долгое время, чтобы приобрести новинку раньше всех, нужно было прибегать к ухищрениям вроде использования VPN\Tor и услугам посредников. Теперь же когда ситуация с работой Почты РФ понемногу нормализовывается, Амазон тоже приготовил маленький приятный сюрприз. Новые Kindle и Nexus 7 можно просто купить с доставкой в Россию. Стоимость доставки 20-40 баксов. Обращаю внимание, что в этом случае налоги штата платить не придется.
UPD В комментариях утверждают, что доставка будет в обход Почты РФ.
UPD 2 Доставляется только Киндл без встроенной рекламы и без аксессуаров. Чехлы, к примеру, можно взять тут.
UPD 3 Альтернативная ссылка для тех, у кого не получается приобрести Киндл.
UPD 4 Список городов с беспроблемной доставкой грузов дороже 200 евро через UPS: Москва, Санкт-Петербург, Краснодар, Владивосток, Ставрополь, Новороссийск и Нижний Новгород.
UPD 5 Добавил Нексус 4, тоже есть доставка. не самая выгодная цена, но зато «заказал-забыл-получил».
UPD 6 В Москву пришло за 5 дней.
Долгое время, чтобы приобрести новинку раньше всех, нужно было прибегать к ухищрениям вроде использования VPN\Tor и услугам посредников. Теперь же когда ситуация с работой Почты РФ понемногу нормализовывается, Амазон тоже приготовил маленький приятный сюрприз. Новые Kindle и Nexus 7 можно просто купить с доставкой в Россию. Стоимость доставки 20-40 баксов. Обращаю внимание, что в этом случае налоги штата платить не придется.
![]() Kindle Paperwhite, 6" 139$ High Resolution Display with Built-in Light, Wi-Fi |
![]() Google Nexus 7 16 gb -229$, 32 gb — FHD Tablet (7-Inch, 32GB, Black) by ASUS (2013) |
![]() LG E960 Google Nexus 4 От $267.99 В РФ отправляет магазин BESTDEAL TECH. |
Пруфпик

UPD В комментариях утверждают, что доставка будет в обход Почты РФ.
UPD 2 Доставляется только Киндл без встроенной рекламы и без аксессуаров. Чехлы, к примеру, можно взять тут.
UPD 3 Альтернативная ссылка для тех, у кого не получается приобрести Киндл.
UPD 4 Список городов с беспроблемной доставкой грузов дороже 200 евро через UPS: Москва, Санкт-Петербург, Краснодар, Владивосток, Ставрополь, Новороссийск и Нижний Новгород.
UPD 5 Добавил Нексус 4, тоже есть доставка. не самая выгодная цена, но зато «заказал-забыл-получил».
UPD 6 В Москву пришло за 5 дней.
+50
Плакаты на IT тематику
1 min
29KПочитывая «Банду четырех», всё чаще думаю как хорошо было бы иметь отдельный плакат на стену в офисе, резюмирующий и объясняющий шаблоны проектирования. Как здорово было бы не держать все их в голове, а имея проблему, взглянуть и найти подходящее решение. Но найти подходящий постер оказалось не так то просто, да и тот оказался не идеальным.
+45
+1 компьютер
16 min
24K Расскажу о компьютере, который сделал себе для работы. Старался собрать оптимальную конфигурацию, поэтому, возможно, мой выбор пригодится кому-то еще. И совсем скоро — обзор ионного 1201N!

Осторожно, трафик!

Осторожно, трафик!
+140
Появилась возможность совместного использования сборок .Net 4 и Silverlight 4
2 min
796

Сегодня многие разработчики пишут код, который должен выполняться как Silverlight так и .Net Runtime’мами. Хорошим примером является проверка данных, когда вы проверяете их сначала на стороне клиента используя Silverlight, а затем на стороне сервера используя .Net. До недавних пор нужно было компилировать один и тот же код в сборки для разных runtime’мов(Silverlight и .Net). Эта модель работоспособна, но не идеальна!
+7
Применение инфраструктуры кеширования в ASP.NET, продолжение
6 min
19KВ прошлом посте я рассказывал, как применять инфраструктуру кеширования в ASP.NET для увеличения производительности сайта. Добавлением нескольких строк кода мне удалось увеличить производительность домашней страницы сайта в 5 раз. В этот раз пойдем дальше и выжмем еще больше производительности, не прибегая к различным хакам.
+12
Интересные моменты в C# (boxing unboxing)
2 min
75KВ этой статье мы коротко пройдемся по малоизвестным особенностям boxing/unboxing.
Предыдущая статья о foreach
Предыдущая статья об Array
Типичный вопрос на собеседовании об упаковке и распаковке выглядит следующим образом — «Что будет при запуске данного кода, и если он не будет работать то как его исправить?».
Тестовый код:
Ответ может быть следующий — «При распаковке первый оператор является не приведением типов а распаковкой типа, соответственно он должен соответствовать типу значения находящегося в запакованном виде.».
Правильный ответ:
Обычно это считается правильным ответом, но это не совсем так…
Предыдущая статья о foreach
Предыдущая статья об Array
Типичный вопрос на собеседовании об упаковке и распаковке выглядит следующим образом — «Что будет при запуске данного кода, и если он не будет работать то как его исправить?».
Тестовый код:
object box = (int)42;
long unbox = (long)box;
Ответ может быть следующий — «При распаковке первый оператор является не приведением типов а распаковкой типа, соответственно он должен соответствовать типу значения находящегося в запакованном виде.».
Правильный ответ:
object box = (int)42;
long unbox = (long)(int)box;
Обычно это считается правильным ответом, но это не совсем так…
+18
О вреде изменяемых значимых типов
8 min
22KБольшинство программистов, которых нелегкая судьба свела с платформной.Net знают о существовании значимых типов (value types) и ссылочных типов (reference types). И довольно многие из них прекрасно знают, что помимо названия, эти типы имеют и другие различия, такие как расположение объектов оных типов в памяти, а также в семантике.
Что касается первого различия (о котором стоит упомянуть как минимум ради полноты изложения), то оно заключается в том, что экземпляры ссылочных типов всегда располагаются в управляемой куче, в то время как экземпляры значимых типов по умолчанию располагаются в стеке, но могут мигрировать в управляемую кучу вследствие упаковки, будучи членами ссылочных типов, а также при использовании их в хитрых экзотических конструкциях языка C#, типа замыканий (*).
Хотя это отличие является очень важным и именно благодаря нему значимые типы существуют и используются, у этой пары типов есть еще одно, не менее важное семантическое различие. Значимые типы, как подсказывает название, являются значениями, которое копируется каждый раз при передаче в функцию или при возвращении из нее. А поскольку при копировании, как, опять же, подсказывает название, передается и возвращается не исходный вариант, а копия, то все попытки изменений приведут к изменению копии, а не исходного экземпляра.
Что касается первого различия (о котором стоит упомянуть как минимум ради полноты изложения), то оно заключается в том, что экземпляры ссылочных типов всегда располагаются в управляемой куче, в то время как экземпляры значимых типов по умолчанию располагаются в стеке, но могут мигрировать в управляемую кучу вследствие упаковки, будучи членами ссылочных типов, а также при использовании их в хитрых экзотических конструкциях языка C#, типа замыканий (*).
Хотя это отличие является очень важным и именно благодаря нему значимые типы существуют и используются, у этой пары типов есть еще одно, не менее важное семантическое различие. Значимые типы, как подсказывает название, являются значениями, которое копируется каждый раз при передаче в функцию или при возвращении из нее. А поскольку при копировании, как, опять же, подсказывает название, передается и возвращается не исходный вариант, а копия, то все попытки изменений приведут к изменению копии, а не исходного экземпляра.
+61
Duck typing или “так ли прост старина foreach?”
5 min
20KЯ думаю, что многие разработчики знают, что цикл foreach в языке C# не так прост, каким он кажется на первый взгляд. Для начала давайте ответим на вопрос: «А что нужно, чтобы конструкция foreach успешно компилировалась?». Интуитивным ответом на этот вопрос кажется что-то типа: «Реализация классом интерфейса IEnumerable или IEnumerable<T>.». Однако, это не так, ну, или не совсем так.
Полный ответ на этот вопрос такой: «Для того чтобы конструкция foreach успешно компилировалась необходимо, чтобы у объекта был метод GetEnumerator(), который вернет объект с методом MoveNext() и свойством Current, а если такого метода нет, то тогда будем искать интерфейсы IEnumerable и IEnumerable<T>».
Причин у такого «утиного» поведения две.
Полный ответ на этот вопрос такой: «Для того чтобы конструкция foreach успешно компилировалась необходимо, чтобы у объекта был метод GetEnumerator(), который вернет объект с методом MoveNext() и свойством Current, а если такого метода нет, то тогда будем искать интерфейсы IEnumerable и IEnumerable<T>».
Причин у такого «утиного» поведения две.
+40
Интересные моменты в C# (foreach)
2 min
79KВ этой статье мы коротко пройдемся по особенностям foreach. Первый момент вы скорее всего знаете, второй момент вы скорее всего не знаете.
Предыдущая статья об Array
Предыдущая статья об Array
+48
Улучшаем производительность: boxing в .NET, которого можно избежать
5 min
25KМы в своем проекте занимаемся разработкой сервера на C#. Этот сервер должен выдерживать очень высокие нагрузки, по этой причине мы стараемся написать код как можно оптимальней. C# редко ассоциируют с высокой производительностью, но если с умом подходить к разработке, то можно достичь очень даже неплохого уровня.
Одним из недешевых процессов с точки зрения производительности является boxing и unboxing. Напоминалку о том, что это такое, можно найти тут. Недавно я решил посмотреть весь IL код наших проектов и поискать инструкции box и unbox. Нашлось достаточно много участков, boxing'а в которых можно избежать легким движением руки. Все случаи, приводящие к ненужному boxing'у, очевидны, и допускаются по невнимательности в моменты концентрации на функциональности, а не на оптимизации. Я решил выписать наиболее часто встречающиеся случаи, чтобы не забывать о них, а затем автоматизировать их исправление. В данной статье и перечислены эти случаи.
Одним из недешевых процессов с точки зрения производительности является boxing и unboxing. Напоминалку о том, что это такое, можно найти тут. Недавно я решил посмотреть весь IL код наших проектов и поискать инструкции box и unbox. Нашлось достаточно много участков, boxing'а в которых можно избежать легким движением руки. Все случаи, приводящие к ненужному boxing'у, очевидны, и допускаются по невнимательности в моменты концентрации на функциональности, а не на оптимизации. Я решил выписать наиболее часто встречающиеся случаи, чтобы не забывать о них, а затем автоматизировать их исправление. В данной статье и перечислены эти случаи.
+35
Information
- Rating
- Does not participate
- Registered
- Activity