Как стать автором
Обновить
-1
0

Программист

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

Проводные наушники, которые нужно заряжать: Aftershokz Sportz Titanium

Время на прочтение3 мин
Количество просмотров12K
Казалось бы, парадокс: проводные наушники с аккумулятором. Но действительно, чтобы обеспечить достойный звук, проводным наушникам на базе костной проводимости нужна дополнительная мощность.


Всего голосов 17: ↑16 и ↓1+15
Комментарии14

[DotNetBook] Реализация IDisposable: правильное использование

Время на прочтение22 мин
Количество просмотров39K
С этой статьей я начинаю публиковать целую серию статей, результатом которой будет книга по работе .NET CLR, и .NET в целом. Тема IDisposable была выбрана в качестве разгона, пробы пера. Вся книга будет доступна на GitHub: DotNetBook. Так что Issues и Pull Requests приветствуются :)

Disposing (Disposable Design Principle)



Сейчас, наверное, практически любой программист, который разрабатывает на платформе .NET, скажет, что ничего проще этого паттерна нет. Что это известный из известнейших шаблонов, которые применяются на платформе. Однако даже в самой простой и известнейшей проблемной области всегда найдется второе дно, а за ним еще ряд скрытых кармашков, в которые вы никогда не заглядывали. Однако, как для тех, кто смотрит тему впервые, так и для всех прочих (просто для того, чтобы каждый из вас вспомнил основы (не пропускайте эти абзацы (я слежу!))) — опишем все от самого начала и до самого конца.

IDisposable



Если спросить, что такое IDisposable, вы наверняка ответите что это

public interface IDisposable 
{
	void Dispose();
} 


Для чего же создан интерфейс? Ведь если у нас есть умный Garbage Collector, который за нас чистит всю память, делает так, чтобы мы вообще не задумывались о том, как чистить память, то становится не совсем понятно, зачем ее вообще чистить. Однако есть нюансы.

Примечание


Глава, опубликованная на Хабре не обновляется и возможно, уже несколько устарела. А потому, прошу обратиться за более свежим текстом к оригиналу:




Читать дальше →
Всего голосов 45: ↑40 и ↓5+35
Комментарии66

Архитектурная пирамида приложения

Время на прочтение8 мин
Количество просмотров20K
Программирование — достаточно молодая область знаний, однако, в ней уже существуют базовые принципы «хорошего кода», рассматриваемые большинством разработчиков как аксиомы. Все слышали о SOLID, KISS, YAGNI и других трех- или четырех- буквенных аббревиатурах, делающих ваш код чище. Эти принципы влияют на архитектуру вашего приложения, но помимо них существуют архитектурные стили, методологии, фреймворки и много чего еще.

Разбираясь со всем этим по отдельности, меня заинтересовал вопрос — как они взаимосвязаны? Пытаясь выстроить иерархию и вдохновившись небезызвестной пирамидой Маслоу, я построил свою пирамиду «архитектуры приложения».

О том, что из этого вышло — читайте под катом.
Войти в пирамиду
Всего голосов 17: ↑17 и ↓0+17
Комментарии15

Google MAPs API в android или как работать с картами быстрее

Время на прочтение10 мин
Количество просмотров47K
Про использование Google MAPs API написано много статей, но основная часть из них устарела на столько, что глазам становится просто больно. Здесь хочу рассказать про замечательную библиотеку для работы со всеми MAPs API в частности Directions API, а так же о том как все это встроить в приложение.
Читать дальше →
Всего голосов 4: ↑4 и ↓0+4
Комментарии3

Как рассказать что такое Agile на заводе? Топ 5 самых популярных Agile-практик

Время на прочтение9 мин
Количество просмотров13K
Если оторваться от Хабра, заглянуть в реальную российскую компанию старше 30 лет и больше чем с тысячью сотрудников и произнести слово Agile, то реакция будет как минимум настороженная. Люди там уже слышали истории похожие на «Как рассказать бабушке» или "Как рассказать дедушке" и посмотрели все выступления Грефа, получили с десяток предложений внедрить гибкость за неделю, кто-то из сотрудников даже поработал год со Scrum, но остается один вопрос:

«Что с этим нам делать то, у нас из программирования только сайт?»

В итоге примерно для 100% компаний Agile смахивает на шарлатанство.


Но вот парадокс — в мире 77% компаний*, использующих Agile в проектах, занимаются совсем не разработкой программного обеспечения.

*Из большого ежегодного опроса компаний от VersionOne

Под катом практика того, как Agile становится понятным в крупных компаниях и проектных командах без разработки. Мы делаем систему управления проектами, но когда общаемся с относительно крупным клиентом напрямую, большую часть времени обсуждаем гибкую методологию и подходы к автоматизации управления проектами. Этим опытом хочется поделиться.
Читать дальше →
Всего голосов 9: ↑5 и ↓4+1
Комментарии4

Vibe.js — попытка сделать state management без боли

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

Всем йо, хабражители.


В общем, так вышло, что я пишу на JavaScript уже довольно долго, и одной из самых главных задач всегда была организация состояния приложения.
TL; DR;
Нет ничего привычнее на свете,
Чем писать колесо на велосипеда


Что-то хочется кешировать, что-то обновлять, причем обновлять везде, а не только в локальном компоненте, не хочется перерисовывать весь компонент если поменялся весь Store (shout out to Vuex), а хочется подписываться на то, что используешь (shout out to MobX).

Читать дальше →
Всего голосов 14: ↑14 и ↓0+14
Комментарии32

Stryker, мутационное тестирование в JavaScript

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

Недавно я познакомился с методом тестирования ПО под названием «Мутационное тестирование» и уже успел стать фанатом такого подхода к написанию тестов.


Сначала теория


Цель мутационного тестирования состоит в выявлении неэффективных и неполных тестов, то есть это по сути тестирование тестов.


Идея состоит в том, чтобы изменять небольшие случайные фрагменты исходного кода и наблюдать за реакцией тестов. Если после внесения изменений тесты всё равно пройдены, то такой набор тестов неэффективен или неполон.

Читать дальше →
Всего голосов 15: ↑15 и ↓0+15
Комментарии4

Как руководить людьми, у которых больше технического опыта, чем у вас

Время на прочтение4 мин
Количество просмотров28K
imageJulie Zhuo — вице-президент Facebook по продуктовому дизайну.

Вопрос: Как вам удается руководить людьми с большим опытом или более глубокими знаниями в определенной области? В чем важные отличия? При разговорах тет-а-тет со специалистами насколько вы углубляетесь в технические детали?

image
Усэйн Болт — ямайский легкоатлет, специализировался в беге на короткие дистанции, восьмикратный олимпийский чемпион и 11-кратный чемпион мира.

Прошло всего несколько лет после выпуска из колледжа, когда я стала менеджером по дизайну. Из-за того, что в колледже я изучала информатику, а затем стала работать инженером в компании Facebook, в основном в работе я изучала дизайн. В дни стартапов в компании, традиция быстрого принятия решений подразумевала, что я редко занималась углублением своих знаний и оттачиванием мастерства. Часто казалось, что я самозванка среди настоящих дизайнеров.

В результате, в начале своей карьеры менеджера я отлично ладила с выпускниками колледжа, в которых видела более молодую версию себя. Но я переживала, что кто-нибудь с настоящим опытом в дизайне не станет меня уважать. В конце концов, как я могу быть боссом для людей, которые не только старше меня на несколько лет, но и являются профессионалами своего дела? Как я могу научить их чему-то, чего они ещё не знают?

Однажды я поделилась этим переживанием со своим мужем, когда мы смотрели Олимпийские Игры. Он сказал: «Неужели ты думаешь, что тренер Усэйна Болта бегает быстрее него?». Раньше я не размышляла о том, что Глен Миллс — главный тренер сборной Ямайки по бегу, который ответственен за самых успешных спринтеров — не то, чтобы не отличается высокой скоростью, но и вообще не является бегуном.
Читать дальше →
Всего голосов 28: ↑24 и ↓4+20
Комментарии20

Шаблон проектирования «состояние» двадцать лет спустя

Время на прочтение5 мин
Количество просмотров27K
Состояние — поведенческий шаблон проектирования. Используется в тех случаях, когда во время выполнения программы объект должен менять своё поведение в зависимости от своего состояния. Классическая реализация предполагает создание базового абстрактного класса или интерфейса, содержащего все методы и по одному классу на каждое возможно состояние. Шаблон представляет собой частный случай рекомендации «заменяйте условные операторы полиморфизмом».

Казалось бы, все по книжке, но есть нюанс. Как правильно реализовать методы не релевантные для данного состояния? Например, как удалить товар из пустой корзины или оплатить пустую корзину? Обычно каждый state-класс реализует только релевантные методы, а в остальных случаях выбрасывает InvalidOperationException.

Нарушение принципа подстановки Лисков на лицо. Yaron Minsky предложил альтернативный подход: сделайте недопустимые состояния непредставимыми (make illegal states unrepresentable). Это дает возможность перенести проверку ошибок со времени исполнения на время компиляции. Однако control flow в этом случае будет организован на основе сопоставления с образцом, а не с помощью полиморфизма. К счастью, частичная поддержка pattern matching появилась в C#7.
Альтернативная реализация шаблона
Всего голосов 21: ↑17 и ↓4+13
Комментарии26

Нечёткое сравнение строк: пойми меня, если сможешь

Время на прочтение8 мин
Количество просмотров63K
image
Привет!

На естественном языке сказать об одном и том же факте можно бесконечным числом способов. Можно переставлять слова местами, заменять их на синонимы, склонять по падежам (если говорим о языке с падежами) и тд.

Необходимость определять схожесть двух фраз возникла при решении одной небольшой практической задачи. Я не использовал машинное обучение, не вил нейронные сети, но использовал простые метрики и собранную статистику для калибровки коэффициентов.

Результатом работы, описанием процесса, кодом на git'е готов поделиться с вами.

Итак, кратко задачу можно озвучить так: «С определенной периодичностью из различных источников приходят актуальные новости. Необходимо фильтровать их таким образом, чтобы на выходе не было двух новостей об одном и том же факте.»
Предупреждение: в статье присутствуют заголовки реальных новостей. Я отношусь к ним исключительно как к рабочему материалу, не представляю какую-либо точку зрения на политическую или экономическую ситуацию в какой бы то ни было стране.
Читать дальше →
Всего голосов 22: ↑22 и ↓0+22
Комментарии8

Литература на выходные: 15 материалов по структурированию кода для разработчиков

Время на прочтение5 мин
Количество просмотров27K
Одним из параметров оценки кода служит его чистота. Создатель языка моделирования UML Гради Буч (Grady Booch) писал:

«Чистый код прост и ясен. Чистый код читается как хорошо написанное произведение. Чистый код никогда не скрывает намерений создателя, но, напротив, полон четких абстракций и простых линий передачи управления»

Сегодня мы собрали для вас список книг и статей по этой теме, которые рекомендуют к прочтению резиденты Hacker News, Stack Exchange и других профильных платформ.

Читать дальше →
Всего голосов 14: ↑12 и ↓2+10
Комментарии14

«Чтение на выходных»: 22 независимых блога о разработке, ИБ, тестировании и геймдеве

Время на прочтение7 мин
Количество просмотров24K
В прошлом месяце в нашей подборке полезных источников оказались блоги о математике и алгоритмах. Сегодня мы решили продолжить изучение тематической ветки Hacker News на предмет интересных источников материалов о разработке.

Под катом — блоги программистов и тестировщиков, дизайнеров и руководителей студий, независимых консультантов и управленцев, которых отличает живой слог, умение писать по делу и (нередко) отличное чувство юмора.

Читать дальше →
Всего голосов 12: ↑11 и ↓1+10
Комментарии3

Ember.js: отличный фреймворк для веб-приложений

Время на прочтение22 мин
Количество просмотров30K
Ember.js — это JavaScript-фреймворк для разработки клиентской части веб-приложений, амбициозный проект, который в последнее время привлекает к себе много внимания. Сегодня мы хотим рассказать о некоторых ключевых концепциях, лежащих в основе Ember.js, продемонстрировав их в ходе создания простого приложения.



Это будет программа Dice Roller, которая позволяет «бросать» игральные кости, предварительно задавая их параметры, и просматривать историю предыдущих «бросков». Её код можно найти на Github.
Читать дальше →
Всего голосов 17: ↑15 и ↓2+13
Комментарии20

Программирование и обмен данными с «ARDUINO» по WI-FI посредством ESP8266 Часть Вторая

Время на прочтение17 мин
Количество просмотров32K
Предлагаю вам, уважаемые читатели GeekTimes, следующую статью из цикла (надеюсь, что не последнюю) по использованию микросхемы ESP8266 в качестве беспроводного моста для AVR микроконтроллеров, на примере аппаратной платформы Arduino Uno (Nano).

После первой статьи на эту тематику я получил множество дружелюбных откликов как-то: “А на кой чёрт ты взял ардуину, если всё можно было сделать исключительно на ESP8266” или “Почему ты, болван, не использовал esp-link ”. “Действительно почему?” — подумал я и накатал уже эту статью и обновил несколько своих программ в качестве новых аргументов.

Итак, встречайте беспроводной программатор для AVR микроконтроллеров BABUINO version 0.9



Подробности под катом:
Читать дальше →
Всего голосов 19: ↑19 и ↓0+19
Комментарии52

Принцип единственной ответственности: фундамент декомпозиции

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


Сейчас об этом принципе слышал любой, кто занимается программированием. Чуть меньше тех, кто думает, что его знает. Гораздо меньше тех, кто действительно умеет его использовать. Я постараюсь объяснить суть, назначение и применение этого принципа как можно проще и короче.


Определение


Каждый программный объект имеет одно и только одно назначение.
Его можно исчерпывающе описать одним предложением, не используя союзы.


Пример


Lazy<T> — обертка для объекта, чье создание откладывается до первого обращения к нему.


Антипример


Синглтон — класс, не допускающий создания более одного экземпляра. В этом описании нет союзов, но оно неполное — синглтон всегда имеет основную функциональность помимо контроля единственности собственного экземпляра. Синглтон — класс, реализующий полезную функциональность и контролирующий единственность собственного экземпляра. Теперь описание исчерпывающее, но имеет союз "и" — у синглтона два разных назначения. Он не соответствует принципу единственной ответственности.


Еще антипример


Локатор сервисов — позволяет получить доступ к любому сервису приложения. Это описание без исчерпывающего списка сервисов заведомо неполное.


Назначение


Упрощение создания, анализа и модификации программных систем.

Читать дальше →
Всего голосов 15: ↑9 и ↓6+3
Комментарии58

Работаем с долгими API в ASP.NET Core правильно или тонкости переезда на новую платформу

Время на прочтение9 мин
Количество просмотров20K
Microsoft очень постарался, создавая новую платформу для веб-разработки. Новый ASP.NET Core похож на старенький ASP.NET MVC только, быть может, самой MVC-архитектурой. Ушли сложности и привычные вещи из старой платформы, появился встроенный DI и легковесные view-компоненты, HTTP модули и хэндлеры уступили место middleware и т.д. Вкупе с кроссплатформенностью и хорошей производительностью всё это делает платформу очень привлекательной для выбора. В этой статье я расскажу, как мне удалось решить специфическую задачу логирования длительных запросов к сторонним API для повышения удобства анализа инцидентов.
Читать дальше →
Всего голосов 6: ↑5 и ↓1+4
Комментарии48

Обзор плат на SoC ARM+FPGA. Часть первая. Мир Xilinx

Время на прочтение14 мин
Количество просмотров66K
Часть 1. Мир Xilinx
Часть 2. Мир Intel (Altera)

В опубликованном ранее переводе обзора 98 «хакерских» плат немалый интерес аудитории вызвали платы на базе SoC, сочетающих в себе ядра ARM и FPGA, такие, как Parallella. И это неудивительно, ведь такая комбинация даёт воистину потрясающие возможности по сравнению с «просто» процессором или «просто» FPGA. На таких SoC можно строить системы, сочетающие в себе алгоритмичски сложные задачи, поддержку сетевых стеков, GUI и прочих вещей, проще поддающихся реализации на процессоре, и задачи, требующие жесткого реального времени, обработки сигналов, обработки изображений и другие задачи, для реализации которых удобны FPGA. Разумеется, для многих задач можно использовать простые FPGA (возможно, включив в них IP-ядро процессора типа NIOS II или MicroBlaze), многие задачи можно решить на процессоре достаточной мощности, используя операционные системы реального времени (типа RTEMS), но всё же, SoC являются в настоящее время очень привлекательным вариантом для решения множества задач, как в профессиональных областях, так и для хобби.


Осторожно, много картинок!
Всего голосов 39: ↑38 и ↓1+37
Комментарии33

Генетический алгоритм и виртуальный мир ботов

Время на прочтение1 мин
Количество просмотров16K
Не так давно я написал публикацию про генетический алгоритм и геном, состоящий из одной инструкции.


Хочу поделиться с читателями Geektimes видео от foo52ru, которое стало стимулом для экспериментов и во многом определило содержание моей работы.
Всего голосов 23: ↑21 и ↓2+19
Комментарии29

Получит ли победитель всё в мире робомобилей?

Время на прочтение13 мин
Количество просмотров9.7K
image

На сегодня уже несколько десятков компаний пытаются создать технологию робомобилей – это OEM-производители, их традиционные поставщики, существующие крупные технокомпании и стартапы. Очевидно, успеха добиться суждено не всем, но у достаточно большого количества из них есть все шансы – поэтому любопытно будет задуматься на тем, каковы будут последствия эффекта «победитель получает всё» и какие в этой области могут быть рычаги влияния. Появится ли сетевой эффект, благодаря которому одна-две крупнейших компании выдавят всех остальных, как это произошло в мире смартфонов или операционок для ПК? Или же на рынке есть место для пяти-десяти компаний, которые будут соревноваться очень долго? И каким же этажам в этой пирамиде победа принесёт власть над другими слоями?

Такие вопросы довольно важны, ибо они указывают на баланс власти в автоиндустрии будущего. Мир, в котором автопроизводители могут закупить такой товар, как «автономность под ключ», у любой из пяти-шести компаний (или сделать его самостоятельно), так же, как сегодня они покупают технологию ABS, сильно отличаются от мира, в котором Waymo и, вероятно, Uber остались единственными реальными кандидатами, способными самостоятельно выстраивать бизнес модель, как это сделал Google с Android. Microsoft и Intel нашли болевые точки в мире ПК, а Google – в смартфонах; какими могут быть такие точки у робомобилей?
Всего голосов 23: ↑18 и ↓5+13
Комментарии23

Сколиоз vs Школа: что следует помнить про сколиоз

Время на прочтение4 мин
Количество просмотров23K
Полмесяца учебы позади, и мы решили напомнить, что из школы можно выйти очень умным, но не очень здоровым: спина в группе риска!


Читать дальше →
Всего голосов 34: ↑21 и ↓13+8
Комментарии71

Информация

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