Pull to refresh
28
0.2
Михаил @Flammar

Java (+Javascript) fullstack developer

Send message

Коллекции в Java: о чём многие забывают

Reading time6 min
Views143K
Из опыта code-review и ответов на StackOverflow набралось немало моментов, касающихся Java Collections API, которые мне казались очевидными, но другие разработчики о них почему-то не знали или знали, но не чувствовали уверенности их применять. В этой статье я собираю в общую кучу всё, что накопилось.

Содержание:


  1. List.subList
  2. PriorityQueue
  3. EnumSet и EnumMap
  4. Set.add(E) и Set.remove(E) возвращают булево значение
  5. Map.put(K, V), Map.remove(K), List.set(idx, E), List.remove(idx) возвращают предыдущий элемент
  6. Map.keySet() и Map.values()
  7. Arrays.asList может быть ключом
  8. Collections.max
  9. LinkedList, Stack, Vector, Hashtable
Читать дальше →

Обзор микро-квадрокоптера Cheerson cx-10 или «чего ожидать от квадрокоптера за 15$?»

Reading time3 min
Views22K
Сегодня хотим вам предложить интересный обзор от молодого, но уже весьма опытного коптеровода по имени Геворг, который решил поделиться с GeekTimes своим опытом полётов. Передаём слово:

Приветствую всех! Сегодня на обзоре самый маленький в мире квадрокоптер Cheerson cx-10! Я думаю, что многие наслышаны о прелестях данной модели: скорость и фантастическая неубиваемость! Квадрокоптер поставляется в пластиковой коробке с прозрачной верхней частью, где и закреплен сам аппарат. Напоминает GoPro, не так ли?


Читать дальше →

Не читайте тексты про западные стартапы

Reading time7 min
Views28K
Привет, Гиктаймс!

Не думал, что вообще буду сюда писать тексты такой специфической тематики, но свежий пост ФРИИ — «С чего начинается hardware-стартап: Команда и прототип» — меня зацепил. Дело в том, что центральная часть текста там посвящена тому, как правильно раздавать направо и налево доли в вашем стартапе — от основателей до рядовых сотрудников, причём последним предлагается раздавать минимальные доли почти по конец первой сотни нанятых вами работников.

Проблема в том, что в России такое не просто крайне затруднительно чисто технически — я даже не уверен, что вообще возможно, в России сама попытка реализации такой схемы эффективно похоронит ваш стартап, причём самым глупым образом.

Подробно причины этого описаны в законе 14-ФЗ («Об обществах с ограниченной ответственностью», то есть базовый закон по данной теме), который любому человеку, в принципе задумывающемуся о каком-либо стартапе, стоит прочитать хотя бы по диагонали, чтобы в общих чертах представлять себе, как работает и регулируется ООО в России.

Я сознательно говорю именно про ООО, потому что примерно 100 из 100 стартапов в России — это ООО. Теоретически, вы можете зарегистрировать стартап как непубличное АО и избавиться от описанных ниже проблем, но немедленно влететь в другие: например, если в ООО любые решения о судьбе общества вы можете подтверждать просто подписями всех соучредителей, то в АО требуется проведение полноценного собрания с присутствием нотариуса, заверяющего все принятые решения.

Итак, ООО — что делать с долями и инвестициями стартапу, живущему в России.

Читать дальше →

«Страшные» абстракции Haskell без математики и без кода (почти). Часть I

Reading time31 min
Views48K
— Для чего нужны монады?
— Для того, чтобы отделить чистые вычисления от побочных эффектов.
(из сетевых дискуссий о языке Haskell)

Шерлок Холмс и доктор Ватсон летят на воздушном шаре. Попадают в густой туман и теряют ориентацию. Тут небольшой просвет — и они видят на земле человека.
— Уважаемый, не подскажете ли, где мы находимся?
— В корзине воздушного шара, сэр.
Тут их относит дальше и они опять ничего не видят.
— Это был математик, – говорит Холмс.
— Но почему?
— Его ответ совершенно точен, но при этом абсолютно бесполезен.
(анекдот)

Когда древние египтяне хотели написать, что они насчитали 5 рыб, они рисовали 5 фигурок рыб. Когда они хотели написать, что насчитали 70 людей, они рисовали 70 фигурок людей. Когда они хотели написать, что насчитали в стаде 300 овец, они… — ну, в общем, вы поняли. Так и мучились древние египтяне, пока самый умный и ленивый из них не увидел нечто общее во всех этих записях, и не отделил понятие количества того, что мы подсчитываем, от свойств того, что мы подсчитываем. А потом другой умный ленивый египтянин заменил множество палочек, которыми люди обозначали количество, на значительно меньшее количество знаков, короткой комбинацией которых можно было заменить огромное количество палочек.

То, что сделали эти умные ленивые египтяне, называется абстракцией. Они подметили нечто общее, что свойственно всем записям о количестве чего-либо, и отделили это общее от частных свойств подсчитываемых предметов. Если вы понимаете смысл этой абстракции, которую мы сегодня называем числами, и то, насколько она облегчила жизнь людям, то вам не составит труда понять и абстракции языка Haskell — все эти непонятные, на первый взгляд, функторы, моноиды, аппликативные функторы и монады. Несмотря на их пугающие названия, пришедшие к нам из математической теории категорий, понять их не сложнее, чем абстракцию под названием «числа». Для их понимания совершенно не требуется знать ни теорию категорий, ни даже математику в объёме средней школы (арифметики вполне достаточно). И объяснить их тоже можно, не прибегая к пугающим многих математическим понятиям. А смысл абстракций языка Haskell точно такой же, как и у чисел — они значительно облегчают программистам жизнь (и вы пока даже не представляете, насколько!).
Читать дальше →

Как накормить мозг программиста… или feed your brain

Reading time12 min
Views375K

Введение


Из всех наслаждений, отпущенных человеку в жизни,
самое изысканное — шевелить мозгами.
(Борис Акунин)


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

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

В данной публикации мы рассмотрим, как правильно питаться для жизнеобеспечения мозга и как его разогнать ноотропами (в случае аврала необходимости).
Читать дальше →

Типичные грабли на пути программиста от Junior'а к Senior'у

Reading time6 min
Views98K
Молодой программист, едва закончивший или ещё даже не закончивший ВУЗ, готов свернуть горы, учиться, учиться и ещё раз учиться и ему близлежащее будущее кажется таким:



Но более опытные товарищи знают, что на самом деле на его пути давно уже заботливо разложены грабли и путь от Junior'а к Senior'у выглядит как-то так:



Давайте вспомним некоторые типичные грабли, на которые мы все (ну или большинство) наступали сами того не замечая. Конечно, для опытных разработчиков многое покажется очевидным капитанством, однако молодых специалистов такие ловушки могут легко увести на темную сторону силы.
Читать дальше →

Как устроена видеоаналитика

Reading time6 min
Views32K

Недавно я прочитал статью, в которой автор на простом примере рассказывает, как работает алгоритм распознавания движения. Это напомнило мне собственные исследования алгоритмов аналитики видео-потоков. Многие знают, что существует отличный проект OpenCV. Это обширная кроссплатформенная библиотека компьютерного зрения, содержащая множество различных алгоритмов. Однако разобраться в ней не так уж просто. Можно найти множество публикаций и примеров о том, как и где использовать машинное зрение, но не о том, как оно устроено. А именно этого часто и не хватает для понимания процесса, особенно когда только начинаешь изучать данную тему.

В этой статье я расскажу про архитектуру видеоаналитики.
Читать дальше →

Еще одно встроенное шпионское приложение обнаружено на компьютерах Lenovo

Reading time2 min
Views90K


У восстановленного с завода Thinkpad с предустановленной Windows 7 в планировщике есть приложение, которое включается раз в день и собирает данные о том, как вы используете компьютер. После этого все сведения отправляются компании-аналитику. Информация о сборе данных присутствует в пользовательском соглашении, но зарыта очень глубоко.
Читать дальше →

Техобслуживание кода. Как «продать» рефакторинг бизнесу

Reading time6 min
Views21K
Несколько дней назад я написал статью про основные характеристики старого кода. Однако там было слишком мало конкретных практических рекомендаций о том, как жить в условиях старого кода.

Сегодня я постараюсь ответить на один из самых частых вопросов, которые я слышу, когда речь идёт о разработке систем с запредельным количеством legacy, и поделюсь своим взглядом на то, как «продать» бизнесу рефакторинг.

В этой статье я принципиально ограничиваюсь описанием взаимодействия с бизнесом и не касаюсь технических деталей (как именно рефакторинг проводить). Пост написан исключительно на личном успешном и не очень опыте «продажи» и «покупки» рефакторинга в разных командах и в разных компаниях.
Как убедить бизнес, что рефакторинг всё-таки нужен

Самый простой и самый сложный Builder на Java

Reading time9 min
Views38K


Один из часто рассматриваемых паттернов — паттерн Builder. В основном рассматриваются варианты реализации «классического» варианта этого паттерна:

MyClass my = MyClass.builder().first(1).second(2.0).third("3").build();

Паттерн прост и понятен как табурет, но чувствуется какая-то недосказанность — то минимальный вариант объявляется антипаттерном, то более сложные случаи игнорируются. Хотелось бы исправить этот момент, рассмотрев предельные случаи и определив минимальную и максимальную границы сложности этого паттерна.

Итак, расссмотрим их:
Читать дальше →

Шпаргалка Java программиста 1: JPA и Hibernate в вопросах и ответах

Reading time36 min
Views613K
image

Знаете ли вы JPA? А Hibernate? А если проверить?

В чем смысл серии статей 'Шпаргалки Java программиста'
За время работы Java программистом я заметил, что как правило программисты постоянно и планомерно используют от силы 10-20% от возможностей той или иной технологии, при этом остальные возможности быстро забываются и при появлении новых требований, переходе на новую работу или подготовке к техническому интервью приходится перечитывать все документации и спецификации с нуля. Зато наличие краткого конспекта особенностей тех или иных технологий (шпаргалок) позволяет быстро освежить в памяти особенности той или иной технологии.




Данная статья будет полезна и для тех кто только собирается изучать JPA и Hibernate (В этом случае рекомендую сразу открывать ответы), и для тех кто уже хорошо знает JPA и Hibernate (В этом случае статья позволит проверить свои знания и освежить особенности технологий). Особенно статья будет полезна тем кто собирается пройти техническое интервью, где возможно будут задавать вопросы по JPA и Hibernate (или сам собирается провести техническое интервью).

Поехали...

15 тривиальных фактов о правильной работе с протоколом HTTP

Reading time7 min
Views241K
Внимание! Реклама! Пост оплачен Капитаном Очевидность!

Ниже под катом вы найдёте 15 пунктов, описывающих правильную организацию ресурсов, доступных по протоколу HTTP — веб-сайтов, «ручек» бэкенда, API и прочая. «Правильный» здесь означает «соответствующий рекомендациям и спецификациям». Большая часть ниженаписанного почти дословно переведена из официальных стандартов, рекомендаций и best practices от IETF и W3C.



Вы не найдёте здесь абсолютно ничего неочевидного. Нет, серьёзно, каждый веб-разработчик теоретически эти 15 пунктов должен освоить где-то в районе junior developer-а и/или второго-третьего курса университета.

Однако на практике оказывается, что великое множество веб-разработчиков эти азы таки не усвоило. Читаешь документацию к иным API и рыдаешь. Уверен, что каждый читатель таки найдёт в этом списке что-то новое для себя.
Читать дальше →

Опасный мир вредоносных расширений и защита от них. Опыт Яндекс.Браузера

Reading time7 min
Views69K
Браузерные расширения в последнее время, к сожалению, всё чаще используются не для того, чтобы приносить пользу, а как инструмент мошенников. Сегодня мы хотим поделиться с вами нашим опытом борьбы с вредоносными разработками, рассказать о мерах и технологиях, которые защищают пользователей Яндекс.Браузера.



Весной 2014 года поддержка Яндекс.Браузера обратила внимание на стремительно растущее число обращений от пользователей, в которых говорилось о «заражении браузера вирусом» и агрессивной рекламе, всплывающей на посещаемых сайтах. Наиболее распространенным симптомом была подмена или добавление новых рекламных блоков на популярных в Рунете сайтах (ВКонтакте, Яндекс, ...). При этом разработчики вредоносных расширений не утруждали себя заботой о пользователях и не брезговали откровенно мошеннической или шок-рекламой. Встречались и другие проявления. Например, автоматическое открытие вкладки с определенным сайтом, подмена поиска по умолчанию или даже воровство данных.

В определенный момент количество таких обращений стало достигать 30% от всех сообщений в поддержку. Наблюдения поддержки также подтверждались статистикой основных причин удаления нашего браузера (при удалении пользователям предлагается описать причину). Многие люди искренне считали, что это наша команда решила таким вот способом монетизировать браузер. За короткий период времени количество удалений Яндекс.Браузера, связанных с деятельностью сторонних вредоносных разработок, удвоилось. Нужно было срочно вмешаться и начать работать над этой проблемой.
Читать дальше →

Как я заказывал и собирал PRUSA i3

Reading time6 min
Views163K
После того, как мне пришел распечатанный корпус для моих часов (еще раз спасибо bigbee), я загорелся идеей купить 3D принтер. Идея RepRap opensource принтеров мне понравилась, да и цена на них не так уж и кусалась. После многочисленных страниц форумов и кучи предложений на интернет площадках, я решил купить Prusa i3 (Прюша итерация 3). За подробностями прошу под кат.
Читать дальше →

Миллиард точек: 3 доллара против 8 миллионов рублей

Reading time8 min
Views22K
Вот как в реале выглядит всевидящее око


Кстати, сканер дороже автомобиля. Tesla S. С авиадоставкой до подъезда в Москве

В этом посте будет описание самого дорогого (наверное) в мире и самого дешевого в мире 3d-сканера.


Разобрать (распилить) устройство по цене тесламобиля мне не дали, поэтому я заглянул в инструкцию. Пара фоток внутренностей оттуда.
На вопрос, а может ли 3d-сканер сделать селфи (если перед ним поставить зеркало), мне ответили, что у этих приборов нелады с отражающими поверхностями. Поэтому я взял череп с соседней полки и попробовал его отсканировать.

Читать дальше →

О разработке головок 3D FDM-принтеров.Часть 3

Reading time8 min
Views11K
Продолжение частей 1 и 2.
В 2-х предыдущих частях мы рассмотрели теоретические аспекты расчёта головок для FDM-принтеров и расчёт новой головки. Теперь, рассмотрим подробнее процедуру получения данных, как считаются, и какие есть важные показатели производительности системы, сравним новую и предыдущую головки. Решим выявившуюся проблему. Поговорим, что можно ещё изменить/добавить.

Рис. 24 Итак, головка сделана.

Рис.25 А вот сменные сопла для неё, остались ещё от предыдущей версии головки.
Читать дальше →

Пошаговая видео-инструкция для новичков 3д печати, как настроить 3д принтер

Reading time1 min
Views9K


Подготовил видео-инструкцию, о том как же настраивать такого дикого зверя, как слайсер для 3д принтера. Когда начинал свой путь в 3д печати, очень не хватало такого видео, исправляем ситуацию.

Приятного просмотра.

Читать дальше →

4 простых способа разрешить самые сложные ситуации в жизни

Reading time3 min
Views18K
image

Для ощущения полного счастья каждому человеку необходимо что-то свое. Но о том, как работать более эффективно, справляться с дилеммами и запоминать как можно больше полезной информации, задумывались все. Советы, приведенные в статье, помогут решить именно эти задачи.
Читать дальше →

Почему я не преподаю SOLID и «принцип устранения зависимостей»

Reading time5 min
Views65K

Статья 1. Почему я не преподаю SOLID


Если вы разговариваете с кем-то, кому небезразлично качество кода, уже достаточно скоро в разговоре всплывёт SOLID — аббревиатура, помогающая разработчикам запомнить пять важных принципов объектно-ориентированного программирования:

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

Раньше SOLID был краеугольным камнем моего набора средств проектирования. Я делал все возможное, чтобы сделать мой код как можно более SOLID. Я учил других поступать так же.

Сегодня SOLID остается для меня важным, но я больше не пытаюсь сделать мой код SOLID. Я редко упоминаю его, когда говорю про дизайн. И тем более я не учу пользоваться им разработчиков, которым хочется почерпнуть хорошие дизайнерские методы проектирования. Он больше не находится у меня под рукой в моем «ящике для инструментов». Он лежит в пыльной коробке на чердаке. Я храню его, потому что он важен, но редко им пользуюсь.
Читать дальше →

Как не угробить архитектуру сразу же? Видео с лекции Евгения Кривошеева

Reading time1 min
Views60K
Всем привет!

Две недели назад в Москве прошла очередная встреча CodeFreeze. Нашим гостем стал Евгений Кривошеев, признанный российский эксперт в области архитектуры программных систем, консультант из Scrumtrek/Skilltrek. Евгений прочитал офигеннейшую лекцию по архитектуре, как он любит и умеет.



В рамках этой встречи Евгений предложил обсудить последовательность решений, критичных для архитектуры любой системы. Выстраданная последовательность действий такова:
  • Точки зрения на систему, или Почему мы слепнем при проектировании
  • Адресация ключевых рисков, или Гордыня убивает
  • Учитываем контекст, или Как не долбиться в закрытую дверь

Краткое содержание и видеозапись

Information

Rating
3,964-th
Location
Санкт-Петербург, Санкт-Петербург и область, Россия
Date of birth
Registered
Activity