Pull to refresh
49
0
Роман @Nucleotide

Инженер-программист

Send message

Модульность и DI в современном Android-приложении. Большой туториал от Яндекса

Reading time 21 min
Views 29K

Всем привет! Я Денис Загаевский из Android-разработки Яндекс.Карт. Если вы развиваете многомодульное приложение или хотите разбить на части пока ещё одномодульное, этот туториал для вас.


Под катом расскажу, как удобно разбить приложение на модули, зачем это нужно и как потом приготовить в нём DI (dependency injection). Кто-то мог слышать мой доклад на Mobius 2021 Piter или в Школе мобильной разработки, а для всех остальных я написал эту статью.


Смотреть доклады

На Mobius:



В ШРИ:



Местами буду ссылаться на опыт Яндекс.Карт. Кстати, рабочий пример нашего подхода есть на GitHub.


Читать дальше →
Total votes 21: ↑20 and ↓1 +19
Comments 3

Дешёвые и дорогие батарейки ААА

Reading time 3 min
Views 343K
Реклама добилась своего: большинство покупателей уверены, что батарейки Duracell и Energizer значительно лучше других. Чтобы проверить, так ли это, я протестировал 20 видов щелочных (alkaline) батареек AAA — от самых дешёвых до самых дорогих.


Читать дальше →
Total votes 369: ↑363 and ↓6 +357
Comments 388

Новое в Java 8

Reading time 15 min
Views 507K
Java еще не умерла — и люди начинают это понимать.

Добро пожаловать в ведение по Java 8. Этот материал шаг за шагом познакомит вас со всеми новыми фичами языка. Вы научитесь использовать методы интерфейсов по умолчанию (default interface methods), лямбда-выражения (lambda expressions), ссылки на методы (method references) и повторяемые аннотации (repeatable annotations). Все это будет сопровождаться короткими и простыми примерами кода. В конце статьи вы познакомитесь с наиболее свежими изменениями в API, касающихся потоков, функциональных интерфейсов, расширений для ассоциативных массивов, а также с изменениями в API работы с датами.
Читать дальше →
Total votes 96: ↑95 and ↓1 +94
Comments 139

Как выйти из квартиры живым? Датчик присутствия — устройство против самого распространенного вида ограбления

Reading time 5 min
Views 50K
На преступном жаргоне это называется «войти на плечах». Злоумышленники дожидаются, когда хозяин выйдет из дома, или наоборот придет, и отопрет дверь. В этот короткий момент открытия – закрытия двери, длящийся с десяток секунд, собственная квартира превращается в мышеловку.
Читать дальше →
Total votes 46: ↑39 and ↓7 +32
Comments 188

Несколько вещей, о которых стоит помнить программисту в возрасте

Reading time 11 min
Views 128K
Если вы из тех, кто «работал ещё Там-То!» и «делал ещё То-То!», а сейчас счастливо отдыхаете на пенсии — эта статья не для вас. Просто спасибо за труд и примите мои поздравления. Но если же вы, как и я, даже став немного старше всё ещё ощущаете страсть к программированию, радуетесь виду кода и не можете устоять перед желанием написать ещё что-нибудь, тогда продолжайте читать.

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

Я смирился с мыслью, что мой лучший код уже написан — в прошлом. Мне было уже 54 года (немало!) и я, вероятно, уже не мог писать код так же хорошо, как и раньше. Кто знает — может быть у меня уже начала отказывать память, ну или я просто выучил всё, что был способен в жизни выучить. Мой настрой подкреплялся наблюдениями окружающей меня реальности. Все новые технологии выглядели для меня чудаковато. Я ненавидел Node.js. Я считал все фреймворки для веб-разработки ужасными. И я сетовал на то, что классические способы разработки ПО разрушились и превратились в набор клише, которые нынче впариваются под умными названиями типа Agile или «экстремальное программирование». Я скучал за днями, когда люди писали спецификацию на будущее ПО, программировали, а затем тщательно тестировали его. И когда в каждой статье не было тысячи жаргонных словечек.
Читать дальше →
Total votes 121: ↑117 and ↓4 +113
Comments 134

Опасное видео: как я нашёл уязвимость в видеохостингах и не умер через 7 дней

Reading time 6 min
Views 103K


Всем привет! Я Максим Андреев, программист бэкенда Облака Mail.Ru. В свободное время я люблю искать баги. В сегодняшнем посте я хочу рассказать об одной довольно интересной уязвимости, которую я нашёл и зарепортил в bug bounty нескольких крупных компаний, за что получил солидное вознаграждение. Уязвимость заключается в следующем: если сформировать специальный видеофайл и загрузить его на сервер, то:

  • можно получить на нём SSRF;
  • можно получить local file read;
  • если пользователь скачает этот файл, то автоматически будет подвержен уязвимостям, даже если его не откроет: можно будет получить доступ к данным на компьютере пользователя и узнать его имя.

Читать дальше →
Total votes 255: ↑250 and ↓5 +245
Comments 66

Java и время: часть первая

Reading time 40 min
Views 236K
Восемь лет назад я принимал участие в проектировании и разработке сервиса, который был должен обслуживать запросы пользователей со всех уголков земного шара и координировать их действия. Работая над проектом я понял, что очень часто многие важные аспекты работы со временем просто игнорируются. Иногда это действительно не очень критично: если сервис локален и им пользуются только на определенной территории, либо пользователи естественным образом разделены на почти не взаимодействующие между собой географические кластеры. Однако же, если сервис объединяет пользователей по всему миру, то без четкого понимания принципов работы со временем уже не обойтись. Представим сервис, в котором общие события (совещания например) начинаются в какое-то строго определенное время, а пользователи рассчитывают на это. Какое время им показывать, в какой момент их беспокоить уведомлениями, что такое день рождения и когда можно поздравить человека — в статье я попробую это осмыслить.



Статья не претендует на глубину и/или академичность. Это попытка систематизировать опыт и обратить внимание разработчиков на не очень очевидные аспекты.

Читать дальше →
Total votes 41: ↑41 and ↓0 +41
Comments 11

Да вы задолбали своим информационным обществом

Reading time 11 min
Views 66K

Диск с музыкой. Работает почти как AudioCD.

Предположим, вы хотите отправить срочное сообщение своему коллеге. Сегодня вы отправляете почту, сообщение в соцсети или SMS.

Спускаемся ниже по истории. Что было до этого? Факс. Он был аналогом современной электронной почты: сообщение передавалось мгновенно, вылезало из устройства и было готово к прочтению.

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

Продолжаем путешествие. Отключаем электричество, появляются первые лаги, поначалу незаметные. Вот в Праге работает полноценная пневмопочта. Написали пером письмо, просушили песком и промокательной бумагой, положили в специальную капсулу. Вжух! Капсула полетела на другой конец города. Кстати, если выколупать оптику из магистрали, можно будет устроить пневмопочту в защитной трубке, так что частично обратная совместимость сохранена.
Читать дальше →
Total votes 185: ↑165 and ↓20 +145
Comments 182

История победы на ежегодном соревновании Russian AI Cup 2015

Reading time 15 min
Views 31K
Хочу рассказать о своем участии и победе в ежегодном соревновании по программированию ИИ «Russian AI Cup 2015» от Mail.Ru Group. Посмотреть подробные правила соревнования и записи игры желающие могут на сайте соревнования russianaicup.ru.

image

В этом году соревнование было организовано на совершенно новом уровне. Изменения произошли как в масштабности игрового мира, в котором действует ИИ, так и на сайте соревнования. Благодаря трехмерной визуализации, игры смотрелись гораздо увлекательнее. По зрелищности, на мой взгляд, соревнование значительно превзошло прошлогодний хоккей, и «солдатиков» 2013 года.

Участнику предлагалось написать ИИ для управления автомобилем в гонках на выживание. Как и в прошлом году, задача была «с физикой». Но на это раз исходники «физического движка» были открыты. Еще, в отличие от прошлого года, на этот раз все случайные явления в игровом мире были наглядны — случайная карта, случайно расставленные бонусы. Сразу было видно — когда удача на твоей стороне, а когда она от тебя отвернулась. В прошлогоднем хоккее, даже наблюдая за игрой значительно отличающихся по силе противников, было трудно понять произошел выигрыш благодаря случаю или мастерству. Думаю, это положительно сказалось на зрелищности соревнования.

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


Цель — проехать 2 круга по замкнутой трассе быстрее всех. Точнее надо набрать больше всех очков, но приехать первым — это основной способ заработать очки. Еще очки дают за сбор бонусов по дороге и нанесение урона противникам. Трасса, как конструктор, собирается из квадратных «тайлов», это прямолинейные участки трассы, углы (поворот трассы на 90 градусов), или перекрестки (Т образные и обычные). Нужно ехать по ключевым точкам («тайлам») трассы в определенном порядке – иногда приходится делать петли, иногда вообще ехать назад. Еще у машинок есть возможность разливать за собой лужи мазута, стрелять друг в друга специальными снарядами (шины и шайбы), и использовать особый ускоритель «нитро». Заряды для всех этих приспособлений ограничены, и пополняются подбиранием случайно разбросанных по карте бонусов.

Расскажу, как устроен мой ИИ, и благодаря чему (как я думаю) удалось победить.
Читать дальше →
Total votes 93: ↑93 and ↓0 +93
Comments 45

Яндекс анонсирует собственную технологию прогнозирования погоды Метеум. С точностью до дома

Reading time 8 min
Views 59K
Сегодня мы анонсируем новую технологию Метеум — теперь с её помощью Яндекс.Погода будет строить собственный прогноз погоды, а не полагаться только на данные партнёров, как это было раньше.

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



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

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

Сейчас в мире есть несколько основных моделей, по которым предсказывают погоду. Например, модель с открытым исходным кодом WRF, модель GFS, которые изначально являлись американской разработкой. Сейчас ее развитием занимается агентство NOAA.
Читать дальше →
Total votes 110: ↑108 and ↓2 +106
Comments 120

Нам нужны не столь мощные языки программирования

Reading time 16 min
Views 32K


Сегодня многие системы и языки программирования позиционируются как «мощные». Нельзя сказать, что это плохо. Почти каждый из нас считает это положительным свойством. Но в этом посте я хочу донести такую точку зрения, что во многих случаях нам нужны менее мощные языки программирования и системы. Но прежде чем продолжить, уточню: здесь будет мало оригинальных, моих собственных размышлений. Я буду излагать ход мыслей, возникший по прочтении книги Дугласа Хофштадтера «Гёдель, Эшер, Бах», которая помогла мне собрать воедино разрозненные идеи и мысли, бродившие в голове. Также большое влияние на нижеизложенный материал оказали пост Филипа Вадлера и видеозапись с конференции Scala. Ключевая мысль такова:

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

И я хочу лишь проиллюстрировать эту точку зрения с помощью примеров, которые будут ближе и понятнее сообществу программистов на Python.
Читать дальше →
Total votes 59: ↑37 and ↓22 +15
Comments 30

Особенности русской разработки

Reading time 8 min
Views 284K
image

По роду занятий я часто общаюсь с различными русскими и западными командами. Очень частый вопрос — есть ли какая-нибудь специфика в работе наших и как это влияет на разработку?

Есть очень неплохая книжка о специфике работы русских вообще. Она называется «Русская модель управления». Ее написал А.П.Прохоров (другой, не олигарх). Не буду ее пересказывать. Основная идея в том, что русские по своей природе могут работать только в двух модах. В нестабильном состоянии они могут свернуть горы. В это время мотивация очень высокая. В стабильном расслабленном состоянии — когда никто не пинает — русские вроде как работают плохо и не сильно утруждаются.

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

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

Я буду приводить влияние разных факторов в порядке их важности и силы влияния. Чем выше — тем сложнее это изменить и тем больший эффект это оказывает.
Читать дальше →
Total votes 531: ↑513 and ↓18 +495
Comments 420

Титаник на Kaggle: вы не дочитаете этот пост до конца

Reading time 31 min
Views 81K
Привет, хабр!

#{Data Science для новичков}

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

Данная работа описывает мою попытку создать модель для предсказания выживших пассажиров «Титаника». Основная задача — тренировка в использовании инструментов применяемых в Data Science для анализа данных и презентации результатов исследования, поэтому данная статья будет очень и очень длинной. Основное внимание уделено исследовательскому анализу (exploratory research) и работе по созданию и выбору предикторов (feature engineering). Модель создаётся в рамках соревнования Titanic: Machine Learning from Disaster проходящего на сайте Kaggle. В своей работе я буду использовать язык «R».
Читать дальше →
Total votes 42: ↑35 and ↓7 +28
Comments 5

Прочь из моей головы. GTD в разработке

Reading time 10 min
Views 45K
Если на вашем столе стоит чашка остывшего желанного кофе или чая, значит, что-то не так. Во всяком случае, так наверняка подумал бы Дэвид Аллен, автор знаменитого метода GTD (Getting Things Done). Мы хватаемся за тысячу дел, пытаясь попутно не забыть про бытовые мелочи, часто забываем о цели, но помним о неотвратимо приближающихся дедлайнах. Порой страх перед лавиной задач буквально парализует мозг и наступают апатия, прокрастинация, депрессия. Работа в такие моменты движется медленно, кажется, даже курсор мыши еле ползёт по монитору. Такая ситуация тем опаснее, чем больше человек работает в команде, особенно, если речь идёт о команде разработчиков.


Читать дальше →
Total votes 19: ↑18 and ↓1 +17
Comments 6

«ua-hosting.company» или как стать хостинг-провайдером с нуля и сгенерировать трафика больше, чем вся Беларусь

Reading time 48 min
Views 43K
Некоторое время назад на одном небезызвестном форуме было начато интересное обсуждение, человек из российской глубинки задал вполне здравый, на мой взгляд, вопрос:

ХолодныйСинтез:
«Доброго времени суток форумчане. Действительно, не знал, где создать тему, но для таких как я сделали целый раздел, за это и спасибо.
Вкратце, живу в далекой глуши, где отбирают бизнес и не дают ничем спокойно заняться… и вот пришла ко мне идейка сделать сервер для услуг хостинга ну или чего-то прочего.

Интересуют такие вопросы:
*Что надо для старта, какое оборудование, программы и т.д
*Что нужно купить для начала
*В какой бюджет можно влезть
Может найдутся «знавцы» это темы. чтоб мне поведать что и как? …»

И конечно же в лучших традициях «серча» начался срач:

pavellift:
«ХолодныйСинтез, может лучше переехать?»

voltamper:
«ТС, не стоит суваться, если вообще в этом не понимаете.
Брутанут и вообще без штанов останетесь».

sladkydze:
«Автор, я поддерживаю товарищей, которые не советуют соваться.

Что-то тут можно поймать:
1. Имея знания в области и опыт.
2. Имея как минимум от 10.000$ на первоначальные вложения. А лучше от 50.000$. Остальное — бултыхание в луже».

[umka]:
«Это как начать автопрокатную компанию, имея в качестве «первоначального оборудования» ушатанный ВАЗ 2106. Ну и плюс сайт, конечно же».

И таких советчиков было много. Да, конечно, это могло быть желание задавить нового конкурента, так как большинство отметившихся с такими советами — существующие хостинг-провайдеры. Если бы не одно но… Эти люди были напрочь убеждены, что организовать хостинг-проект, не обладая специальными знаниями или большим бюджетом, невозможно, только лишь несколько людей дали советы по делу.

Сразу вспомнилось, как начинал я, и стало просто невыносимо грустно от таких советов, ведь люди заблуждались, все возможно и без бюджета, и без начальных знаний. Потому что именно так возник «ua-hosting». И далее я поведаю небольшую историю успеха и разочарований…
Читать дальше →
Total votes 59: ↑48 and ↓11 +37
Comments 35

$29 за инструкцию по постройке стола-трансформера

Reading time 1 min
Views 24K

Демонстрационное видео о работе стола и о его сборке

Инженер из Мичигана Скотт Рамшлаг [Scott Rumschlag] обнаружил, что ему очень тяжело проводить в сидячем положении весь рабочий день. Ещё недавно он был студентом, и хотя участь студента также в основном сидячая, её получалось разбавлять прогулками пешком и на велосипеде.

Изучив вопрос, Скотт решил самостоятельно спроектировать и сделать стол, который можно будет лёгким движением руки превращать из обычного офисного стола для сидячей работы в стол для работы стоя. Благо, Скотт получил инженерное образование, и ему всегда нравилось работать с деревом.

Несколько месяцев разработки и планирования – и стол готов. Управление столом выглядит довольно простым делом. А для всех тех, кто так же, как он, хочет разнообразить свои рабочие позы, Скотт предлагает приобрести у него чертежи стола всего за $29. На 26 страницах найдутся как изображения всех необходимых деталей с размерами, так и инструкция по сборке. Инструкцию можно скачать в виде PDF сразу после оплаты.
Читать дальше →
Total votes 16: ↑13 and ↓3 +10
Comments 9

Шпаргалка Java программиста 2: Триста пятьдесят самых популярных не мобильных Java opensource проектов на github

Reading time 39 min
Views 167K
Что это и зачем оно надо: Как известно, главное преимущество Java мира в том в нем существует огромное количество open-source проектов на на все случаи жизни, однако найти нужный на github'e не так просто, так как описание проекта часто мало информативно, зачастую сложно даже понять этот проект для Android'a или нет. В этой статье я автоматически и полуавтоматически собрал Java проекты, убрал старые и проекты только для Android'a, выбрал 350 набравших больше всего звезд, разделил по категориям и перевел описания.

Если вы хотите убедиться что базы данных пишут не только на C, найти проекты для работы с большими данными или нейронными сетями, пишите свой язык программирования для JVM и хотите посмотреть как это уже сделано или же просто хотите узнать какие новые возможности можно найти в Java мире open-source то это статья вам, думаю, может пригодится.

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


Другие статьи серии: часть 1. JPA и Hibernate в вопросах и ответах

Update: Внимание, актуальная версия со много большим количеством ссылок, находиться теперь в моем github'e проекте useful-java-links, по этой ссылке.


Читать дальше →
Total votes 51: ↑43 and ↓8 +35
Comments 49

Математическая задача о 100 коробках и спасении заключенных

Reading time 7 min
Views 144K
Предлагаю читателям «Хабрахабра» перевод публикации «100 Prisoners Escape Puzzle», которую я нашел на сайте компании DataGenetics. Все ошибки по данной статье присылайте, пожалуйста, в личные сообщения.

По условию задачи в тюрьме находится 100 заключенных, каждый из которых имеет личный номер от 1 до 100. Тюремщик решает дать заключенным шанс на освобождение и предлагает пройти придуманное им испытание. Если все заключенные справятся, то они свободны, если хотя бы один провалится — все умрут.


Читать дальше →
Total votes 106: ↑103 and ↓3 +100
Comments 55

Как сделать небольшой конкурс за один день

Reading time 3 min
Views 9.6K
Не так давно меня настигло глобальное событие — свадьба. Для меня, откровенного интроверта, такое событие сродни Армагеддону. Будь бы я сферическим конём в вакууме, я бы устроил какую-нибудь маленькую локальную вечеринку. Но получилось 80 самых разноплановых гостей. И тут возникает главный вопрос. Как всю эту разномастную толпу развлекать. Я принципиально против того, чтобы кого-то к чему-то принуждать. А если поискать «конкурсы для свадьбы», то становится страшно от того, что увидишь это на своей свадьбе. В результате нам с ведущим пришлось придумывать свои конкурсы, взяв лишь несколько известных и простых. Про один конкурс, который имеет отношение к тематике Хабра я и расскажу. Аналогичных конкурсов для свадьбы я не встречал. Может кому поможет. Думаю, что использовать его можно не только на свадьбе. Исходники прилагаются.
Немножко пятницы
Total votes 16: ↑12 and ↓4 +8
Comments 3

О юридическом значении нажатия пользователем на кнопку «Купить», «Принять условия лицензионного соглашения» и т.п

Reading time 6 min
Views 19K
В современном мире с помощью Интернета заключаются различные сделки и продаются самые разные товары (в экономическом смысле), как материальные, так и нематериальные (ПО, музыка, фильмы и другая интеллектуальная собственность). Процесс их покупки для конечного пользователя выглядит, как нажатие на кнопку на экране компьютера или смартфона на которой написано «Купить», принять, подтвердить и тому подобное. Иногда для покупки необходимо ввести специальный код, полученный по SMS.

В посте дана попытка изложить эту информацию понятным языком.
Читать дальше →
Total votes 18: ↑18 and ↓0 +18
Comments 28
1

Information

Rating
Does not participate
Location
Россия
Registered
Activity