80LevelElf about IT Записи Мои проекты Обо мне
# Часть 2. Введение в IOC-контейнеры на примере Ninject. ####Ссылки на другие части: - [Первая часть: Теоретические основы Dependency Injection и IOC-контейнеров](http://80levelelf.com/Post?postId=20 "Первая часть: Теоретические основы Dependency Injection и IOC-контейнеров") - Вторая часть: Введение в IOC-контейнеры на примере Ninject И так, в прошлой части было рассмотрение идеи Dependency Injection и причин, по которым в «сыром виде» Dependency Injection не очень удобен для использования. И плавно повествование перешло к IOC-контейнерам. IOC-контейнер (Inversion of control) – это автоматизированная настраиваемая фабрика (factory), которая берет на себя всю «черновую работу». Для рассмотрения мы возьмем именно Ninject, хотя в общем-то это не самый лучший выбор. Он весьма удобный и легкий в использовании, [но очень медленный](http://www.palmmedia.de/blog/2011/8/30/ioc-container-benchmark-performance-comparison "Он весьма удобный и легкий в использовании, но очень медленный"). Так или иначе, Ninject стал де-факто стандартном .Net IOC-контейнеров, и не смотря на низкую скорость, является довольно распространенным. Тем не менее, все нижеизложенные принципы применимы и ко всем другим IOC-контейнерам (отличаться могут лишь названия каких-то методов или атрибутов).
Подробнее
(18.10.2017)
# Часть 1. Теоретические основы Dependency Injection и IOC-контейнеров. ####Ссылки на другие части: - Первая часть: Теоретические основы Dependency Injection и IOC-контейнеров - [Вторая часть: Введение в IOC-контейнеры на примере Ninject] (http://80levelelf.com/Post?postId=22) Глава 1. Зачем нам нужен Dependency Injection? ---------------------------------------------- Наверное, это и есть самый главный вопрос, на который нужно ответить. Обычно в этом месте начинаются пространные рассуждения о том, что у нас есть класс Car и класс CarEngine и они слишком связанны между собой и … Это все, конечно, так, но на вопрос это не отвечает. Главный ответ на то, зачем нужен Dependency Injection (внедрение зависимостей) – это тестирование. Но он отнюдь не единственный. А теперь чуть поподробнее. В любом относительно большом программном продукте возникает потребность в логическом разделении частей. Вариантов и идеологий этого – огромное количество, но задача одна – сделать различные части системы максимально независимыми друг от друга по двум основным причинам: - Для того, чтобы упростить разработку системы (чтобы изменения в одной части не вели к большим переписываниям кода в других частях). - Для того, чтобы упростить автоматизированное тестирование (чтобы можно было взять максимально маленькие части системы и тестировать их максимально независимо, не превращая автоматизированное (юнит) тестирование в интеграционное тестирование).
Подробнее
(16.10.2017)
Зашел сегодня на сайт с телефона (на котором нет AdBlock'a) и увидел интересную картину: фоток увы не сделал, но если в вкратце, то внизу как ни в чем не бывало висел баннер. Баннер, к которому отношения я не имею. Офигенно! – Подумал я. И начал смотреть как же он добавляется. И нашел: один из .cshtml файликов на хостинге был отредактирован и стал содержать вот такие вот строчки кода: <script data-cfasync='false' type='text/javascript' src='//p67136.clksite.com/adServe/banners?tid=67136_109560_1&type=slider&side=center&size=468x60&animate=on'></script> <script data-cfasync='false' type='text/javascript' src='//p67136.clksite.com/adServe/banners?tid=67136_423352_0&tagid=2'></script> Которые и делали что надо. Остался лишь один вопрос: как этот файлик был отредактирован. По-хорошему есть лишь два адекватных ответа: - Уязвимость в хостинге - Уязвимость в Asp.net MVC Почему я думаю, что вряд ли взломали именно мой код? Потому, что вряд ли кто-то будет тратить свое личное время на никому не известный маленький блог. Особо навара с баннеров на моем сайте не будет, так что предположу, что взлом был осуществлен автоматически. В итоге убрал вредоносный код. Буду следить за развитием событий.
Подробнее
(07.10.2017)
Наверняка многие натыкались на переводы статей этого человека на vc.ru или Хабре, но сам Алекс прошел мимо вас - если это так, то постараюсь исправить это недоразумение. Если в кратце, то человек пишет про то, как он находит идеи для своих проектов, создает и монетезирует их. Ничего занудного, только цифры, рассуждения и результат. И вот его самые крутые статьи. __На английском:__ [Сам блог на Медиуме](https://medium.com/@moskovski) [Создание Postio](https://hackernoon.com/i-used-lamp-to-make-a-saas-with-3700-mo-profit-heres-how-1c47033900e9 ) [Создание Menu Maker](https://hackernoon.com/how-i-made-a-saas-webservice-earning-1000-monthly-profit-6d2b782b95c8 ) [Создание QuoteArtist](https://hackernoon.com/how-i-made-a-saas-webservice-earning-1000-monthly-profit-6d2b782b95c8 ) __Те же статьи на русском:__ [Создание Postio](https://habrahabr.ru/post/321978/) [Создание Menu Maker](https://habrahabr.ru/post/320292/) [Создание QuoteArtist](https://habrahabr.ru/post/338350/) Налетайте!
Подробнее
(21.09.2017)
По работе наткнулся на очень интересный баг (дело происходит в .Net). Есть у нас вот такой вот enum: public enum MyEnum { Value1, Value2, Value3, Value4, … //A lot of values } И где-то он парсится из обычной строки. Только вот строка пришла к нам из файла и оказалась немного корявая: "Value1, Value2" Ну корявая и корявая, значит не обработается – а что они хотели, присылая нам такие значения? Парсим: MyEnum result; if (Enum.TryParse("Value1, Value2", true, out result)) Console.WriteLine(result.ToString()); else Console.WriteLine("A wrong value!"); Иии как вы поняли оно распарсилось (иначе бы я не написал этот пост). А теперь угадайте, какое значение получилось в итоге? Value4! Но почему? [Разобраться нам помогут исходники .Net’a](http://referencesource.microsoft.com/#mscorlib/system/enum.cs,bdb5b3bd2fb82fff,references ):
Подробнее
(01.08.2017)
Кладбище стартапов ---------------------------------------------- ![](https://i.imgur.com/hbOQT7bl.jpg) Всем нам иногда нужно интересное чтиво, чтобы скрасить унылые вечера и подтянуть свой уровень английского. Но найти такое чтиво не всегда легко: у всех нас есть много закладок с интересными сайтами типа TechCrunch. Держите еще один интересный сайт с увлекательным чтивом: [Кладбище стартапов](http://startupgraveyard.io/). Суть сайта - разные интересные истории о том как начинались и почему проваливались те или иные стартапы.
Подробнее
(04.07.2017)
Какой раз натыкаюсь на то, что какие-то разработчики, которые только вступают в проект часто ругают существующую кодовую базу. «Это сделано через жопу, тут надо бы использовать паттерн Х, а вот это – зачем вообще вот это нужно?». Зачастую это даже не разработчики с моего проекта, а какие-то знакомые.
Подробнее
(01.05.2017)
Сколько не читаю Хабр или tpproger – каждая третья статья про машинное обучение. Новый метод глубокого обучения, новое интересное исследование на основе ML, выход нового фреймворка и тд. Как-будто все так и хочет сказать – «машинное обучение - это круто. Понятненько?» ![](http://i.imgur.com/jHsiu9Tm.jpg) __Обновление #1 от 05/03/2017 (машинное обучение на .Net)__
Подробнее
(05.03.2017)
Посмотрите на этот прекрасный Hyundai Gets! Удобная практичная машина, приспособленная для любого типа использования! Вы можете ездить на ней по городу, по бездорожью, по болотам или использовать как временное жилье. ![](http://i.imgur.com/F3UZZWmm.jpg) А вот почему-то, когда кто-нибудь говорит так про JavaScript многие, соглашаются. Мое мнение про разработку на JS под мобильные системы можно прочитать [*здесь*](http://80levelelf.com/Post?postId=1). Но в общем-то этот пост не про JS, а про то, какие языки для чего используются и какие языки надо учить, если вы хотите заниматься тем-то и тем-то. Статья немного перекликается с [*этой*](http://80levelelf.com/Post?postId=2), хотя старается брать куда шире и вместо того, что дать один ответ – здесь я стараюсь рассмотреть все возможные варианты. В первую очередь я имею в виду, что вы сможете получать деньги за работу в области Х на языке Y.
Подробнее
(21.02.2017)
На днях, читая статейку на [opennet](http://www.opennet.ru/opennews/art.shtml?num=45858), наткнулся на интересную новость: > _Доступны первые выпуски [OpenNMT](http://opennmt.net) (Open Neural Machine Translation),_ > _открытой системы машинного перевода, использующей методы машинного обучения._ То есть переводчик построенный полностью на машинном обучении. Ладно, этим наверно уже никого не удивить. Конечно и Google Translator и Яндекс.Переводчик скорее всего используют много где машинное обучение, а я увы не специалист в NLP, но я был явно удивлен как парочка ребят из Гарварда с поддержкой маленькой компании создали продукт, который может соревноваться с переводчиками от больших корпораций, в которые вложено явно во много раз больше. Пока еще система сыровата, переводит долго, но перевод и правда хорош. Перевод можно попробовать [здесь](https://demo-pnmt.systran.net/production#/translation). Оставлю только пример одного перевода, чтобы вы могли сравнить качество:
Подробнее
(20.01.2017)
Вперед