Программист
[DotNetBook] Реализация IDisposable: правильное использование
Disposing (Disposable Design Principle)
Сейчас, наверное, практически любой программист, который разрабатывает на платформе .NET, скажет, что ничего проще этого паттерна нет. Что это известный из известнейших шаблонов, которые применяются на платформе. Однако даже в самой простой и известнейшей проблемной области всегда найдется второе дно, а за ним еще ряд скрытых кармашков, в которые вы никогда не заглядывали. Однако, как для тех, кто смотрит тему впервые, так и для всех прочих (просто для того, чтобы каждый из вас вспомнил основы (не пропускайте эти абзацы (я слежу!))) — опишем все от самого начала и до самого конца.
IDisposable
Если спросить, что такое IDisposable, вы наверняка ответите что это
public interface IDisposable
{
void Dispose();
}
Для чего же создан интерфейс? Ведь если у нас есть умный Garbage Collector, который за нас чистит всю память, делает так, чтобы мы вообще не задумывались о том, как чистить память, то становится не совсем понятно, зачем ее вообще чистить. Однако есть нюансы.
Примечание
Глава, опубликованная на Хабре не обновляется и возможно, уже несколько устарела. А потому, прошу обратиться за более свежим текстом к оригиналу:
- CLR Book: GitHub, оглавление
- CLR Book: GitHub, глава
- Релиз 0.5.2 книги, PDF: GitHub Release
Архитектурная пирамида приложения
Разбираясь со всем этим по отдельности, меня заинтересовал вопрос — как они взаимосвязаны? Пытаясь выстроить иерархию и вдохновившись небезызвестной пирамидой Маслоу, я построил свою пирамиду «архитектуры приложения».
О том, что из этого вышло — читайте под катом.
Google MAPs API в android или как работать с картами быстрее
Как рассказать что такое Agile на заводе? Топ 5 самых популярных Agile-практик
«Что с этим нам делать то, у нас из программирования только сайт?»
В итоге примерно для 100% компаний Agile смахивает на шарлатанство.
Но вот парадокс — в мире 77% компаний*, использующих Agile в проектах, занимаются совсем не разработкой программного обеспечения.
*Из большого ежегодного опроса компаний от VersionOne
Под катом практика того, как Agile становится понятным в крупных компаниях и проектных командах без разработки. Мы делаем систему управления проектами, но когда общаемся с относительно крупным клиентом напрямую, большую часть времени обсуждаем гибкую методологию и подходы к автоматизации управления проектами. Этим опытом хочется поделиться.
Vibe.js — попытка сделать state management без боли
Всем йо, хабражители.
В общем, так вышло, что я пишу на JavaScript уже довольно долго, и одной из самых главных задач всегда была организация состояния приложения.
TL; DR;
Нет ничего привычнее на свете,
Чем писать колесо на велосипеда
Что-то хочется кешировать, что-то обновлять, причем обновлять везде, а не только в локальном компоненте, не хочется перерисовывать весь компонент если поменялся весь Store (shout out to Vuex), а хочется подписываться на то, что используешь (shout out to MobX).
Stryker, мутационное тестирование в JavaScript
Недавно я познакомился с методом тестирования ПО под названием «Мутационное тестирование» и уже успел стать фанатом такого подхода к написанию тестов.
Сначала теория
Цель мутационного тестирования состоит в выявлении неэффективных и неполных тестов, то есть это по сути тестирование тестов.
Идея состоит в том, чтобы изменять небольшие случайные фрагменты исходного кода и наблюдать за реакцией тестов. Если после внесения изменений тесты всё равно пройдены, то такой набор тестов неэффективен или неполон.
Как руководить людьми, у которых больше технического опыта, чем у вас
Вопрос: Как вам удается руководить людьми с большим опытом или более глубокими знаниями в определенной области? В чем важные отличия? При разговорах тет-а-тет со специалистами насколько вы углубляетесь в технические детали?
Усэйн Болт — ямайский легкоатлет, специализировался в беге на короткие дистанции, восьмикратный олимпийский чемпион и 11-кратный чемпион мира.
Прошло всего несколько лет после выпуска из колледжа, когда я стала менеджером по дизайну. Из-за того, что в колледже я изучала информатику, а затем стала работать инженером в компании Facebook, в основном в работе я изучала дизайн. В дни стартапов в компании, традиция быстрого принятия решений подразумевала, что я редко занималась углублением своих знаний и оттачиванием мастерства. Часто казалось, что я самозванка среди настоящих дизайнеров.
В результате, в начале своей карьеры менеджера я отлично ладила с выпускниками колледжа, в которых видела более молодую версию себя. Но я переживала, что кто-нибудь с настоящим опытом в дизайне не станет меня уважать. В конце концов, как я могу быть боссом для людей, которые не только старше меня на несколько лет, но и являются профессионалами своего дела? Как я могу научить их чему-то, чего они ещё не знают?
Однажды я поделилась этим переживанием со своим мужем, когда мы смотрели Олимпийские Игры. Он сказал: «Неужели ты думаешь, что тренер Усэйна Болта бегает быстрее него?». Раньше я не размышляла о том, что Глен Миллс — главный тренер сборной Ямайки по бегу, который ответственен за самых успешных спринтеров — не то, чтобы не отличается высокой скоростью, но и вообще не является бегуном.
Шаблон проектирования «состояние» двадцать лет спустя
Казалось бы, все по книжке, но есть нюанс. Как правильно реализовать методы не релевантные для данного состояния? Например, как удалить товар из пустой корзины или оплатить пустую корзину? Обычно каждый state-класс реализует только релевантные методы, а в остальных случаях выбрасывает
InvalidOperationException
.Нарушение принципа подстановки Лисков на лицо. Yaron Minsky предложил альтернативный подход: сделайте недопустимые состояния непредставимыми (make illegal states unrepresentable). Это дает возможность перенести проверку ошибок со времени исполнения на время компиляции. Однако control flow в этом случае будет организован на основе сопоставления с образцом, а не с помощью полиморфизма. К счастью, частичная поддержка pattern matching появилась в C#7.
Нечёткое сравнение строк: пойми меня, если сможешь
Привет!
На естественном языке сказать об одном и том же факте можно бесконечным числом способов. Можно переставлять слова местами, заменять их на синонимы, склонять по падежам (если говорим о языке с падежами) и тд.
Необходимость определять схожесть двух фраз возникла при решении одной небольшой практической задачи. Я не использовал машинное обучение, не вил нейронные сети, но использовал простые метрики и собранную статистику для калибровки коэффициентов.
Результатом работы, описанием процесса, кодом на git'е готов поделиться с вами.
Итак, кратко задачу можно озвучить так: «С определенной периодичностью из различных источников приходят актуальные новости. Необходимо фильтровать их таким образом, чтобы на выходе не было двух новостей об одном и том же факте.»
Предупреждение: в статье присутствуют заголовки реальных новостей. Я отношусь к ним исключительно как к рабочему материалу, не представляю какую-либо точку зрения на политическую или экономическую ситуацию в какой бы то ни было стране.
Литература на выходные: 15 материалов по структурированию кода для разработчиков
«Чистый код прост и ясен. Чистый код читается как хорошо написанное произведение. Чистый код никогда не скрывает намерений создателя, но, напротив, полон четких абстракций и простых линий передачи управления»
Сегодня мы собрали для вас список книг и статей по этой теме, которые рекомендуют к прочтению резиденты Hacker News, Stack Exchange и других профильных платформ.
«Чтение на выходных»: 22 независимых блога о разработке, ИБ, тестировании и геймдеве
Под катом — блоги программистов и тестировщиков, дизайнеров и руководителей студий, независимых консультантов и управленцев, которых отличает живой слог, умение писать по делу и (нередко) отличное чувство юмора.
Ember.js: отличный фреймворк для веб-приложений
Это будет программа Dice Roller, которая позволяет «бросать» игральные кости, предварительно задавая их параметры, и просматривать историю предыдущих «бросков». Её код можно найти на Github.
Программирование и обмен данными с «ARDUINO» по WI-FI посредством ESP8266 Часть Вторая
После первой статьи на эту тематику я получил множество дружелюбных откликов как-то: “А на кой чёрт ты взял ардуину, если всё можно было сделать исключительно на ESP8266” или “Почему ты, болван, не использовал esp-link ”. “Действительно почему?” — подумал я и накатал уже эту статью и обновил несколько своих программ в качестве новых аргументов.
Итак, встречайте беспроводной программатор для AVR микроконтроллеров BABUINO version 0.9
Подробности под катом:
Принцип единственной ответственности: фундамент декомпозиции
Сейчас об этом принципе слышал любой, кто занимается программированием. Чуть меньше тех, кто думает, что его знает. Гораздо меньше тех, кто действительно умеет его использовать. Я постараюсь объяснить суть, назначение и применение этого принципа как можно проще и короче.
Определение
Каждый программный объект имеет одно и только одно назначение.
Его можно исчерпывающе описать одним предложением, не используя союзы.
Пример
Lazy<T> — обертка для объекта, чье создание откладывается до первого обращения к нему.
Антипример
Синглтон — класс, не допускающий создания более одного экземпляра. В этом описании нет союзов, но оно неполное — синглтон всегда имеет основную функциональность помимо контроля единственности собственного экземпляра. Синглтон — класс, реализующий полезную функциональность и контролирующий единственность собственного экземпляра. Теперь описание исчерпывающее, но имеет союз "и" — у синглтона два разных назначения. Он не соответствует принципу единственной ответственности.
Еще антипример
Локатор сервисов — позволяет получить доступ к любому сервису приложения. Это описание без исчерпывающего списка сервисов заведомо неполное.
Назначение
Упрощение создания, анализа и модификации программных систем.
Работаем с долгими API в ASP.NET Core правильно или тонкости переезда на новую платформу
Обзор плат на SoC ARM+FPGA. Часть первая. Мир Xilinx
Часть 2. Мир Intel (Altera)
В опубликованном ранее переводе обзора 98 «хакерских» плат немалый интерес аудитории вызвали платы на базе SoC, сочетающих в себе ядра ARM и FPGA, такие, как Parallella. И это неудивительно, ведь такая комбинация даёт воистину потрясающие возможности по сравнению с «просто» процессором или «просто» FPGA. На таких SoC можно строить системы, сочетающие в себе алгоритмичски сложные задачи, поддержку сетевых стеков, GUI и прочих вещей, проще поддающихся реализации на процессоре, и задачи, требующие жесткого реального времени, обработки сигналов, обработки изображений и другие задачи, для реализации которых удобны FPGA. Разумеется, для многих задач можно использовать простые FPGA (возможно, включив в них IP-ядро процессора типа NIOS II или MicroBlaze), многие задачи можно решить на процессоре достаточной мощности, используя операционные системы реального времени (типа RTEMS), но всё же, SoC являются в настоящее время очень привлекательным вариантом для решения множества задач, как в профессиональных областях, так и для хобби.
Генетический алгоритм и виртуальный мир ботов
Хочу поделиться с читателями Geektimes видео от foo52ru, которое стало стимулом для экспериментов и во многом определило содержание моей работы.
Получит ли победитель всё в мире робомобилей?
На сегодня уже несколько десятков компаний пытаются создать технологию робомобилей – это OEM-производители, их традиционные поставщики, существующие крупные технокомпании и стартапы. Очевидно, успеха добиться суждено не всем, но у достаточно большого количества из них есть все шансы – поэтому любопытно будет задуматься на тем, каковы будут последствия эффекта «победитель получает всё» и какие в этой области могут быть рычаги влияния. Появится ли сетевой эффект, благодаря которому одна-две крупнейших компании выдавят всех остальных, как это произошло в мире смартфонов или операционок для ПК? Или же на рынке есть место для пяти-десяти компаний, которые будут соревноваться очень долго? И каким же этажам в этой пирамиде победа принесёт власть над другими слоями?
Такие вопросы довольно важны, ибо они указывают на баланс власти в автоиндустрии будущего. Мир, в котором автопроизводители могут закупить такой товар, как «автономность под ключ», у любой из пяти-шести компаний (или сделать его самостоятельно), так же, как сегодня они покупают технологию ABS, сильно отличаются от мира, в котором Waymo и, вероятно, Uber остались единственными реальными кандидатами, способными самостоятельно выстраивать бизнес модель, как это сделал Google с Android. Microsoft и Intel нашли болевые точки в мире ПК, а Google – в смартфонах; какими могут быть такие точки у робомобилей?
Сколиоз vs Школа: что следует помнить про сколиоз
Информация
- В рейтинге
- Не участвует
- Откуда
- Санкт-Петербург, Санкт-Петербург и область, Россия
- Дата рождения
- Зарегистрирован
- Активность