Как стать автором
Обновить
113
34.6

Software architect

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

Как я научился проходить архитектурные секции

Время на прочтение4 мин
Количество просмотров32K
Архитектурные секции у многих вызывают чувство неопределенности и тревоги: формулировки не изобилуют деталями, как проверить ответ — непонятно. При этом способность пройти архитектурную секцию отличает вчерашнего выпускника от человека, которому можно доверить строить нечто большее, чем обход бинарных деревьев. В определенный момент я решил как следует подготовиться секции по дизайну, потратил на это около пары недель и выработал системный подход, которым хочу с вами поделиться.
Читать дальше →
Всего голосов 37: ↑35 и ↓2+41
Комментарии18

Как отсутствие вычислительных мощностей влияло на морские сражения в мировых войнах

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

Достичь достаточной осведомлённости о ситуации, когда GPS и компьютеров ещё не существовало, было трудной задачей



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

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

Задолго до того, как концепции интернета вещей заполонили всю планету, эскадры XX века первыми начали использовать систематический подход в ответе на эти вопросы. Паруса уступили место паровым двигателям, и европейские колонии расползлись по всему миру. Военные корабли начали передвигаться ещё быстрее и потребовали координации действий на ещё больших участках морей, чем ранее. Тем временем телеграфы и радио позволяли мгновенно обмениваться сообщениями на немыслимых до этого расстояниях. Всё это вместе совершило революцию в использовании военными флотами информации.
Читать дальше →
Всего голосов 41: ↑41 и ↓0+41
Комментарии22

Законы программирования

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

Законы, теории, принципы и закономерности, полезные для разработчиков


Введение


Перевод репозитория github.com/dwmkerr/hacker-laws

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

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

Законы


Закон Амдала


Закон Амдала — это формула, демонстрирующая потенциал ускорения вычислительной задачи, которого можно достичь при увеличении количества ресурсов системы. Обычно он используется в параллельных вычислениях, и может предсказать наличие реальных преимуществ от увеличения количества процессоров с учётом ограничений параллелизуемости программы.
Читать дальше →
Всего голосов 67: ↑65 и ↓2+80
Комментарии21

Учимся разворачивать микросервисы. Часть 2. Kubernetes

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


Привет, Хабр!


Это вторая часть из серии статей "Учимся разворачивать микросервисы". В предыдущей части мы написали 2 простеньких микросервиса — бекенд и шлюз, и разобрались с тем, как их упаковать в docker-образы. В этой же статье мы будем организовывать оркестрацию наших docker-контейнеров с помощью Kubernetes. Мы последовательно составим конфигурацию для запуска системы в Minikube, а затем адаптируем ее для деплоя в Google Kubernetes Engine.

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

'Hello World' вам в облако

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

Мир сходит с ума, заталкивая калькулятор для 2+2 в облака. Чем мы хуже? Давайте Hello World затолкаем в три микросервиса, напишем пару-тройку тестов, обеспечим пользователей документацией, нарисуем красивый пайплайн сборки и обеспечим деплой в условный облачный прод при успешном прохождении тестов. Итак, в данной статье будет показан пример того, как может быть построен процесс разработки продукта от спецификации до деплоя в прод. Инетересно? тогда прошу под кат

Всего голосов 51: ↑50 и ↓1+64
Комментарии47

Блокировки в PostgreSQL: 1. Блокировки отношений

Время на прочтение14 мин
Количество просмотров99K
Два предыдущих цикла статей были посвящены изоляции и многоверсионности и журналированию.

В этом цикле мы поговорим о блокировках (locks). Я буду придерживаться этого термина, но в литературе может встретиться и другой: замóк.

Цикл будет состоять из четырех частей:

  1. Блокировки отношений (эта статья);
  2. Блокировки строк;
  3. Блокировки других объектов и предикатные блокировки;
  4. Блокировки в оперативной памяти.

Материал всех статей основан на учебных курсах по администрированию, которые делаем мы с Павлом pluzanov, но не повторяет их дословно и предназначен для вдумчивого чтения и самостоятельного экспериментирования.
Читайте и другие серии.

Индексы:

  1. Механизм индексирования;
  2. Интерфейс метода доступа, классы и семейства операторов;
  3. Hash;
  4. B-tree;
  5. GiST;
  6. SP-GiST;
  7. GIN;
  8. RUM;
  9. BRIN;
  10. Bloom.

Изоляция и многоверсионность:

  1. Изоляция, как ее понимают стандарт и PostgreSQL;
  2. Слои, файлы, страницы — что творится на физическом уровне;
  3. Версии строк, виртуальные и вложенные транзакции;
  4. Снимки данных и видимость версий строк, горизонт событий;
  5. Внутристраничная очистка и HOT-обновления;
  6. Обычная очистка (vacuum);
  7. Автоматическая очистка (autovacuum);
  8. Переполнение счетчика транзакций и заморозка.

Журналирование:

  1. Буферный кеш;
  2. Журнал предзаписи — как устроен и как используется при восстановлении;
  3. Контрольная точка и фоновая запись — зачем нужны и как настраиваются;
  4. Настройка журнала — уровни и решаемые задачи, надежность и производительность.


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

Асинхронность в программировании

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

В области разработки высоконагруженных многопоточных или распределенных приложений часто возникают дискуссии об асинхронном программировании. Сегодня мы подробно погрузимся в асинхронность и изучим, что это такое, когда она возникает, как влияет на код и язык программирования, которым мы пользуемся. Разберемся, зачем нужны Futures и Promises и затронем корутины и операционные системы. Это сделает компромиссы, возникающие во время разработки ПО, более явными.


В основе материала — расшифровка доклада Ивана Пузыревского, преподавателя школы анализа данных Яндекса.


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

Использование возможностей Groovy DSL для конфигурации Java-приложения

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

Предыстория


Всем привет! Я хотел бы рассказать историю о страшных конфигах и как их удалось причесать и сделать вменяемыми. Я работаю над довольно большим и относительно старым проектом, который постоянно допиливается и разрастается. Конфигурация задается с помощью маппинга xml-файлов на java-бины. Не самое лучшее решение, но оно имеет свои плюсы — например, при создании сервиса можно передать ему бин с конфигурацией, отвечающий за его раздел. Однако, есть и минусы. Самый существенный из них — нет нормального наследования профилей конфигурации. В какой-то момент я осознал, что для того, чтобы поменять одну настройку, я должен отредактировать около 30 xml-файлов, по одному для каждого из профилей. Так больше продолжаться не могло, и было принято волевое решение все переписать.


Требования


  • Наследование и переопределение (или fallback). Должна быть возможность задать некий базовый профиль, унаследовать от него дочерние и переопределить или добавить в них те места, которые необходимо
  • Маппинг в java-бины. Переписывать по всему проекту использование конфигурации с бинов на проперти вида mongodb.directory.host не хотелось, использовать map-ы из map-ов тоже.
  • Возможность писать в конфиге комментарии. Не критично, но удобно и приятно.

Хотелось бы, чтобы конфиг выглядел примерно так:


Типичный DSL-скрипт на groovy
name = "MyTest"
description = "Apache Tomcat"

http {
    port = 80
    secure = false
}
https {
    port = 443
    secure = true
}

mappings = [
        {
            url = "/"
            active = true
        },
        {
            url = "/login"
            active = false
        }
]

Как я этого добился — под катом.

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

Знакомство с реактивными потоками – для Java-разработчиков

Время на прочтение12 мин
Количество просмотров22K
Привет, Хабр!

Сегодня мы вернемся к одной из тем, затрагиваемых в нашей замечательной книге "Реактивные шаблоны проектирования". Речь пойдет об Akka Streams и потоковой передаче данных в целом — в книге Роланда Куна этим вопросам посвящены главы 10 и 15-17.
Читать дальше →
Всего голосов 12: ↑12 и ↓0+12
Комментарии4

Apache Kafka: обзор

Время на прочтение12 мин
Количество просмотров379K
Привет, Хабр!

Сегодня мы предлагаем вам сравнительно краткую, но при этом толковую и информативную статью об устройстве и вариантах применения Apache Kafka. Рассчитываем перевести и выпустить книгу Нии Нархид (Neha Narkhede) et. al до конца лета.


Приятного чтения!
Читать дальше →
Всего голосов 36: ↑36 и ↓0+36
Комментарии19

15 когнитивных искажений

Время на прочтение9 мин
Количество просмотров181K
Люди сталкиваются с большим объёмом информации, часть из которой достоверна, а часть освещает интересующую область односторонне, а иногда и сознательно искажённо.

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



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

Так, галочка «по умолчанию согласен» позволила увеличить количество согласных на донорство до 86% в Швеции, тогда как в Дании, где при получении прав нужно самостоятельно ставить согласие, т. е. принимать осознанный выбор, количество согласных на донорство 4%.
Читать дальше →
Всего голосов 63: ↑62 и ↓1+61
Комментарии114

Волшебное введение в алгоритмы классификации

Время на прочтение17 мин
Количество просмотров16K
Перевод статьи Брайна Беренда.

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

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



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


Всё верно! Сегодня мы поговорим о Распределяющей шляпе (Sorting Hat) из мира Гарри Поттера. Возьмём какие-то данные из сети, проанализируем и создадим классификатор, который будет сортировать персонажей по разным факультетам. Должно получиться забавно!
Всего голосов 30: ↑26 и ↓4+22
Комментарии1

О чем говорят женщины? (Text mining of beauty blogs)

Время на прочтение13 мин
Количество просмотров33K
В руках нашей команды из CleverDATA оказался уникальный материал – около 100 тыс. страниц англоязычных блогов, посвященных бьюти-сфере. Этот корпус к нам попал благодаря желанию одной косметической корпорации узнать законы, по которым «работает» блогосфера. Компания хотела эффективнее взаимодействовать с бьюти-блогерами – получать больший рекламный эффект, отдавая свои продукты в добрые руки лояльных авторов.
 

Источник
 
Читать дальше →
Всего голосов 64: ↑56 и ↓8+48
Комментарии40

Машинное обучение — это легко

Время на прочтение7 мин
Количество просмотров346K
В данной статье речь пойдёт о машинном обучении в целом и взаимодействии с датасетами. Если вы начинающий, не знаете с чего начать изучение и вам интересно узнать, что такое «датасет», а также зачем вообще нужен Machine Learning и почему в последнее время он набирает все большую популярность, прошу под кат. Мы будем использовать Python 3, так это как достаточно простой инструмент для изучения машинного обучения.
Читать дальше →
Всего голосов 51: ↑44 и ↓7+37
Комментарии20

Консоль в массы. Переход на светлую сторону. Bash

Время на прочтение6 мин
Количество просмотров56K
keep-calm-and-bin-bash

Вступление


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

Мы добрались до самой интересной и увлекательной темы — это скрипты на bash. Когда вы запускаете терминал, внутри него работает специальная программа-оболочка — shell (англ) — интерпретатор команд. Shell понимает все команды, которые вы вводите с клавиатуры, и обрабатывает их. Также выводит сообщения об ошибках, следит за корректностью команд и их синтаксисом. Примером таких команд могут быть: сменить директорию, создать новую директорию, добавить текстовый файл, отредактировать текстовый файл, сохранить изменения и другие.
Всего голосов 69: ↑57 и ↓12+45
Комментарии108

Scala.js легко и просто

Время на прочтение7 мин
Количество просмотров20K
Давайте представим, что нужно для нашего любимого Scala backend сервиса (например, который весь на Akka), сделать небольшой frontend. Для внутренних нужд, не переживая за совместимость браузеров, и без дизайна, чтоб совсем простенький: пару табличек, пару формочек, по сокетам что-то обновлялось, моргало, так, по мелочи. И вот начинаешь думать что там в js мире. Angular? Angular 2? React? Vue? jQuery? Или еще что-нибудь? А может просто на ваниле сделать и не переживать? Но руки уже не лежат к JavaScript, не помнят его совсем. То точку с запятой не поставишь, то кавычки не те, то return забыл, то в коллекции нет твоих любимых методов. Понятно что для такой штуки можно и тяп-ляп сделать, но не хочется, совсем не хочется. Начинаешь писать, но все равно что-то не то.

И тут в голову закрадываются плохие мысли, а может Scala.js? Ты их отгоняешь, но не отпускает.

А почему бы и нет?
Читать дальше →
Всего голосов 25: ↑22 и ↓3+19
Комментарии13

Чем отличается наука от астрологии и других псевдонаук. Карл Поппер

Время на прочтение4 мин
Количество просмотров34K
Что есть наука? Какие знания считать настоящими научными знаниями, а какие не вписываются в научную парадигму? Можно ли считать науками астрологию, теологию, психоанализ?

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

Как различить между собой эти два класса знаний?

Наиболее полно эту тему исследовал в своей работах философ Карл Поппер — математик и физик по образованию. Теме науки и псевдонауки посвящены его книги «Логика научного исследования» (1935), «Предположения и опровержения: рост научного знания» (1963) и «Объективное знание: эволюционный подход» (1972).
Читать дальше →
Всего голосов 29: ↑28 и ↓1+27
Комментарии290

Распознавание чеков в Google Docs с помощью ABBYY OCR SDK

Время на прочтение3 мин
Количество просмотров23K
В северном полушарии нынче зима, а это значит что пора на лыжи! Мы с друзьями поддались этому течению и приступили к подготовке нашего совместного зимнего отдыха. Детали всего процесса планирования раскрывать не буду, скажу лишь только, что мне выпала ответственная роль сбора магазинных чеков наших совместных трат.
Читать дальше →
Всего голосов 27: ↑25 и ↓2+23
Комментарии45

Консоль в массы. Переход на светлую сторону. Часть первая

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


Вступление


Всем привет! Данная серия статей — это текстовый вариант моего доклада на WSD в Киеве 26 ноября. Решил написать, чтобы дать более развернутое описание темам, которые были затронуты, а некоторые моменты уточнить. Кроме того, есть возможность рассмотреть больше примеров, услышать мнение от тебя, уважаемый читатель. И, конечно же, поделиться информацией с более широкой аудиторией.
Всего голосов 25: ↑20 и ↓5+15
Комментарии42

Полное практическое руководство по Docker: с нуля до кластера на AWS

Время на прочтение39 мин
Количество просмотров1.7M



Содержание



Вопросы и ответы


Что такое Докер?


Определение Докера в Википедии звучит так:


программное обеспечение для автоматизации развёртывания и управления приложениями в среде виртуализации на уровне операционной системы; позволяет «упаковать» приложение со всем его окружением и зависимостями в контейнер, а также предоставляет среду по управлению контейнерами.



Ого! Как много информации.

Читать дальше →
Всего голосов 125: ↑124 и ↓1+123
Комментарии44

Информация

В рейтинге
193-й
Откуда
Израиль
Зарегистрирован
Активность