Pull to refresh
0
0
John Doe @onehell

Лень и чревоугодие

Send message

Microservices и Модель Акторов (Actor Model)

Reading time1 min
Views15K

Доклад посвящен:

  • Пользовательским интерфейсам ориентированным на задачи (Task Based UI)
  • CQRS (Command/Query Responsibility Segregation)
  • Микросервисы
  • Закон Конвея и его влияние на примере организации команд в Magento
  • Fine-grained сервисы vs Coarse-grained сервисы
  • Синхронность vs Асинхронность
  • Модель Акторов (Actor Model)

Вторая часть доклада находится под хабракатом.

Вещи, которые мне надо было знать прежде, чем создавать систему с очередью

Reading time5 min
Views27K
Фото очереди в мавзолей Мао Цзэдуна —  BrokenSphere / Wikimedia Commons

В проекте, над которым я сейчас работаю, применяется распределённая система обработки данных: сначала несколько десятков машин одновременно производят некоторые сообщения, затем эти сообщения отправляются в очередь, из очереди три потока извлекают сообщения и после финальной обработки выкладывают данные в базу Redis. При этом имеется требование: от «зарождения» события в машине, производящей сообщение, до выкладывания обработанных данных в базу должно проходить не более четырёх секунд в 90% случаев.

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

Философия программирования — трёхнаправленное программирование

Reading time11 min
Views105K
Программирование рассматривается как процесс создания компьютерных программ. Слово процесс в этом определении не лишнее. Обычно рассуждают в духе «посмотрите, какую замечательную структуру данных можно описать на данном языке программирования». Философия программирования подразумевает оглянуться по сторонам, да и в глубь копнуть.

Собственно разделение на кодирование, и создание алгоритмов это уже специфика, сначала идёт жизнь, то есть человек опирается на некую мысль вроде «напишу-ка я фреймворк с такими-то свойствами». И вот это начальное направление это вопрос философии. Проблема в том, что часто жена программиста лучше его самого знает, на философском уровне, что он делает и почему. Элементарные философские категории: мышление, сознание, обусловленность программисту неведомы. И это странно, если сравнить способность программиста мыслить, например, читая статьи по функциональному программированию или алгоритмам поиска, вперемешку со статьями видных русских или европейских философов, окажется, что собственно навык мышления у программистов развит не меньше, а то и больше. Вот только язык программиста очень богат пока он рассуждает о паттерн-матчинге и жалок и органичен когда ему надо выйти из своей песочницы, оторваться от IDE и файлового менеджера.
Читать дальше →

Проблема использования CompletableFuture в нескольких потоках и её решение

Reading time4 min
Views22K
imageВ Java 8 появился новый класс CompletableFuture, который позволяет удобно писать асинхронный код.
При использовании CompletableFuture из нескольких потоков я столкнулся с его неочевидным поведением, а именно с тем, что callbacks на нём могут выполнятся совсем не в тех потоках, как ожидалось. Об этом и о том, как мне удалось решить проблему — я и расскажу в этой статье.

Мною разрабатывался асинхронный, неблокирующийся однопоточный клиент к серверу, который использовал потоконебезопасные структуры данных. Тесты проходили без проблем, но benchmarks иногда падали c ConcurrentModificationException на внутренних структурах однопоточного клиента.
Читать дальше →

Дарвин был лентяем, и вам бы это также не помешало

Reading time16 min
Views36K

У многих известных учёных есть нечто общее: они не работали по многу часов в день


image

Изучая жизнь самых творческих людей в истории, сталкиваешься с парадоксом: они посвящали своей работе всю жизнь, но не весь день. Такие разные люди, как Чарльз Диккенс, Анри Пуанкаре и Ингмар Бергман, работали в несоизмеримых областях в разное время, у всех них была страсть к их работе, огромные амбиции и почти сверхчеловеческая способность к концентрации. Но если подробно изучить их каждодневную жизнь, окажется, что на то, что считается самой важной их работой, они тратили всего несколько часов в день. Остальную часть времени они лазали по горам, спали, гуляли с друзьями, или просто сидели и размышляли. Их творческое начало и продуктивность не были результатами бесконечных часов тяжкого труда. Их достижения происходят из скромного количества рабочих часов.

Как же они достигли всего? Может ли поколение, воспитанное на уверенности в необходимости 80-часовой рабочей недели для достижения успеха, научиться чему-либо на примере жизни людей, заложивших основы теории хаоса, топологии, или написавших "Большие надежды"?
Читать дальше →

GUID-подобные первичные ключи в SQLite на Android

Reading time8 min
Views14K

Интро


Каждая таблица в SQLite по умолчанию содержит приватный ключ на основе автоматически генерируемого 64-битного целого. Это эффективно и удобно в большинстве ситуаций. Неудобства начинаются, пожалуй, только в двух случаях:


  • когда диапазона 64 бит не хватает (тогда стоит задуматься о целесообразности SQLite задаче)
  • когда хранилище становится "распределенным"

Может показаться, что и второй задачи в комбинации с SQLite не должно возникать, но распределенность не всегда означает что-нибудь вроде BigData. Типичный пример (из-за чего лично мне и понадобилось исследование на эту тему) это приложение с возможностью синхронизации данных между устройствами. Это может быть как что-то небольшое, как записная книжка, так и более нагруженное, как история браузера. Проблемой тут становится не столько объем данных, сколько слияние нескольких баз. Очевидно, что целочисленные счетчики записей, начинающие отсчет с 1, неизбежно будут выдавать конфликтующие последовательности, а значит использовать их в качестве уникального идентификатора записи на нескольких устройствах уже нельзя. Можно заморочиться с разделением на поддиапазоны или "сдвиганием" айдишников записей перед их передачей, но это все кривые и хрупкие костыли. Никто так не делает, конечно же. Вместо этого каждое устройство присваивает своим записям что-нибудь вроде GUID-а – просто и надежно.

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

Всё, что вы хотели знать о стек-трейсах и хип-дампах. Часть 1

Reading time15 min
Views52K
Практика показала, что хардкорные расшифровки с наших докладов хорошо заходят, так что мы решили продолжать. Сегодня у нас в меню смесь из подходов к поиску и анализу ошибок и крэшей, приправленная щепоткой полезных инструментов, подготовленная на основе доклада Андрея Паньгина aka apangin из Одноклассников на одном из JUG'ов (это была допиленная версия его доклада с JPoint 2016). В без семи минут двухчасовом докладе Андрей подробно рассказывает о стек-трейсах и хип-дампах.

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



Сегодня я буду рассказывать про стек-трейсы и хип-дампы — тему, с одной стороны, известную каждому, с другой — позволяющую постоянно открывать что-то новое (я даже багу нашел в JVM, пока готовил эту тему).

Когда я делал тренировочный прогон этого доклада у нас в офисе, один из коллег спросил: «Все это очень интересно, но на практике это кому-нибудь вообще полезно?» После этого разговора первым слайдом в свою презентацию я добавил страницу с вопросами по теме на StackOverflow. Так что это актуально.

Почему прерванный сон – это отличное время для творческой работы

Reading time9 min
Views32K

Когда-то люди просыпались в середине ночи, чтобы подумать, сделать записи или заняться любовью. Что мы потеряли, засыпая на всю ночь?




4:18 утра. В очаге сгорели дрова, и остались только оранжевые кусочки, которые скоро превратятся в пепел. Орион-охотник взошёл над холмом. Мерцающее «V» Тельца стоит прямо над головой, и указывает на Семерых сестёр. Сириус, одна из собак Ориона, мерцает красным, голубым, фиолетовым – как галактический диско-шар. Ночь продолжается, и старый пёс вскоре сядет за холмом.

4:18 утра, и я не сплю. Такое раннее пробуждения обычно считается нарушением, сбоем в естественном ритме тела – признаком депрессии, или возбуждения. Действительно, после пробуждения в 4 утра в голове моей жужжало. И хотя я человек позитивный, но когда я лежу в темноте, в мыслях появляется волнение. Мне кажется, что лучше встать, чем лежать в постели, балансируя на грани лунатизма.

Если я пишу в эти часы, чёрные мысли становятся чёткими и красочными. Они формируются в слова и предложения, одно цепляется за другое – будто вереница слонов, держащихся хоботами за хвосты. В это время ночи мой мозг работает по-другому: я могу писать, но не редактировать. Могу добавлять, но не отнимать. Для чёткости необходимо дневное сознание. Я работаю несколько часов, а затем снова засыпаю.

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

Римляне, греки, инки просыпались без айфоновских будильников или цифровых радиочасов. Их временем заведовала природа: восход солнца, вечерний хор, нужды полевых культур или домашнего скота. До 14 века ход времени отмечался солнечными и песочными часами, а затем на монастырях и церквях появились первые механические часы. К 1800-му году механические часы уже вовсю носили на шее, запястьях и лацканах. Можно было назначать встречи, время для принятия пищи и отхода ко сну.

Общества, построенные на индустриализации и точном времени, породили понятие срочности и такие концепции, как «вовремя» или «потеря времени». Часы начали всё сильнее расходиться с естественным временем, но свет и тьма всё ещё управляли рабочими часами и социальными структурами. Но всё поменялось в 19 веке.
Читать дальше →

Исследование: сон нужен для того, чтобы помогать забывать

Reading time4 min
Views21K
image

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

Есть две функции

Reading time16 min
Views54K
Привет

Есть две булевы функции n аргументов, одна — константная, другая — сбалансированная. На какую сам сядешь, на какую фронтендера посадишь? Вот только функции неизвестны, а вызвать их разрешается лишь один раз.

Если не знаешь, как решить подобную задачу, добро пожаловать под кат. Там я расскажу про квантовые алгоритмы и покажу как их эмулировать на самом народном языке — на Python.
Hello darkness, my old friend

Особенности архитектуры распределённого хранилища в Dropbox

Reading time13 min
Views20K


Вниманию читателей «Хабрахабра» представляется расшифровка видеозаписи (в конце публикации) выступления Вячеслава Бахмутова на сцене конференции HighLoad++, прошедшей в подмосковном Сколково 7-8 ноября ушедшего года.

Меня зовут Слава Бахмутов, я работаю в Dropbox. Я Site Reliability Engineer (SRE). Я люблю Go и продвигаю его. С ребятами мы записываем подкаст golangshow.

Что такое Dropbox?


Это облачное хранилище, в котором пользователи хранят свои файлы. У нас 500 миллионов пользователей, у нас более 200 тысяч бизнесов, а также огромное количества данных и трафика (более 1.2 млрд новых файлов в день).

sudo rm -rf, или Хроника инцидента с базой данных GitLab.com от 2017/01/31

Reading time15 min
Views68K

Он пьянел медленно, но все-таки опьянел, как-то сразу, скачком; и когда в минуту просветления увидел перед собой разрубленный дубовый стол в совершенно незнакомой комнате, обнаженный меч в своей руке и рукоплещущих безденежных донов вокруг, то подумал было, что пора идти домой. Но было поздно.

Аркадий и Борис Стругацкие

31 января 2017 года произошло важное для мира OpenSource событие: один из админов GitLab.com, пытаясь починить репликацию, перепутал консоли и удалил основную базу PostgreSQL, в результате чего было потеряно большое количество пользовательских данных и сам сервис ушел в офлайн. При этом все 5 различных способов бэкапа/репликации оказались нерабочими. Восстановились же с LVM-снимка, случайно сделанного за 6 часов до удаления базы. It, как говорится, happens. Но надо отдать должное команде проекта: они нашли в себе силы отнестись ко всему с юмором, не потеряли голову и проявили удивительную открытость, написав обо всем в твиттере и выложив в общий доступ, по сути, внутренний документ, в котором команда в реальном времени вела описание разворачивающихся событий.


Во время его чтения буквально ощущаешь себя на месте бедного YP, который в 11 часов вечера после тяжелого трудового дня и безрезультатной борьбы с Постгресом, устало щурясь, вбивает в консоль боевого сервера роковое sudo rm -rf и жмет Enter. Через секунду он понимает, что натворил, отменяет удаление, но уже поздно — базы больше нет...


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

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

Восхождение дата-инженера

Reading time11 min
Views17K
image

Я присоединился к команде Facebook в 2011 году в качестве инженера бизнес-аналитика. К моменту, когда я покинул команду в 2013 году я уже был дата-инженером.

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

Дата-инжиниринг?


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

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

Google Chrome Extensions: быстрый переводчик своими руками

Reading time7 min
Views18K
image

Недавно заметил, что пусть мой английский не так уж и плох, я всё равно довольно часто отвлекаюсь на перевод отдельных незнакомых слов. И так как мне надоело каждый раз тратить на это свое время я решил написать расширение-переводчик. Можно сказать:
Но такие уже есть!
Да, есть, но, во-первых, я раньше не писал расширения для браузеров и хотел попробовать, во-вторых, создавать что-то самому всегда веселее чем пользоваться готовым. Так что кому это интересно так же как и мне — добро пожаловать под кат.
Читать дальше →

Чистая архитектура в Python: пошаговая демонстрация. Часть 4

Reading time10 min
Views15K

Содержание

Сценарии (часть 3)


Git tag: Step09


Наша реализация ответов и запросов, наконец, завершена. И теперь мы можем реализовать последнюю версию нашего сценария. Сценарий корректно возвращает объект ResponseSuccess, но до сих пор не проверяет корректность входящего запроса.


Давайте изменим тест в файле tests/use_cases/test_storageroom_list_use_case.py и добавим ещё 2 теста. Полученный набор тестов (после фикстуры domain_storagerooms) выглядит следующим образом:

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

Пишем обертку над API, делаем из нее PIP-пакет, подключаем тестирование от Travis CI и смотрим на лицензии открытого ПО

Reading time6 min
Views9.7K

Приветствую, Хабрахабр! Данная статья будет полезна желающим ознакомиться не только с оформлением собственного пакета Python Package Index (PIP), но и с различными вспомогательными инструментами, помогающими сопровождать разработку на всех стадиях — на примере авторской работы.

Необходимые инструменты:

  • Среда разработки — написание объектно-ориентированного кода, тесно работающего с интерфейсом приложения (в нашем случае веб-сайта), другими словами — отправка и обработка запросов к API, и дополнительных вспомогательных файлов;
  • Загрузка своих наработок в общий каталог пакетов — PyPI;
  • Github — создание репозитория с целью контроля качества, улучшения и перманентного обновления библиотеки, общего взаимодействия с областью открытого исходного кода;
  • Одна из лицензий свободного программного обеспечения, в нашем случае — MIT License;
  • Travis CI — непрерывная сборка и тестирование разрабатываемого проекта в различных окружениях (например, разные версии языка или интерпретатора).

Данный список можно принимать за содержание статьи в соответствующем порядке.
Читать дальше →

Когнитивные стимуляторы и другая психофарма: можно ли стать умнее

Reading time14 min
Views196K
Привет, %username%!

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

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

Spoiler: NZT ещё не изобрели, но синтезировали некоторое количество потенциально интересных штук.
Читать дальше →

Используйте голову

Reading time8 min
Views26K
Какой главный инструмент работы айтишника? Компьютер? Я думаю иначе. Прежде всего мы работаем головой. А как работает мозг? Почему-то об этом нам не рассказывают в школе, университете и на работе, или рассказывают очень мало. Чтобы работать эффективно, нужно не только уметь прекрасно пользоваться необходимым программным обеспечением, но и знать, как настроить свой мозг на работу.

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

Пьеса «Технический долг»

Reading time6 min
Views76K

Пьеса «Технический долг» в 9 частях. Ставится и показывается впервые.


Часть 0: В пустой комнате стоят Разработчик (Р) и Менеджер (М).

М: Я собрал нас тут, чтобы рассказать пренепреятнейшее известие: система КРОТОПОН, которая работает на продакшане заглючила и мы потеряли кучу денег. Кроме того нет никого, кто знает как она работает. Поэтому (с придыханием) наш СЕО дал мне священную миссию — написать новую систему. Как ты думаешь, за два месяца справишься?

Р: А что делать-то нужно?

М: Да там немного, всего лишь пару десятков систем связать и рюшечки навесить.

Р: Эй, да это же на год работы! И вообще требования будут?

М: (В телефон) Да, конечно, за пол года справимся. (Разработчику) Ну ты тут пока начинай, а я тебе требования потом донесу.

Менеджер уходит.

Р: Но тут же…

Разработчик тяжело вздыхает, затаскивает в комнату инструменты и начинает что-то сооружать.
Читать дальше →

Information

Rating
2,260-th
Date of birth
Registered
Activity