Как стать автором
Обновить
3
0
Александр @gremlin

Software engineer

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

Как мы учились эксплуатировать Java в Docker

Время на прочтение13 мин
Количество просмотров47K
Под капотом hh.ru — большое количество Java-сервисов, запущенных в докер-контейнерах. За время их эксплуатации мы столкнулись с большим количеством нетривиальных проблем. Во многих случаях чтобы докопаться до решения приходилось долго гуглить, читать исходники OpenJDK и даже профилировать сервисы на продакшене. В этой статье я постараюсь передать квинтэссенцию полученного в процессе знания.


Читать дальше →
Всего голосов 56: ↑53 и ↓3+50
Комментарии24

Путь запроса по внутренностям Spring Security

Время на прочтение15 мин
Количество просмотров92K
Большинство разработчиков имеет только примерное представление о том что происходит внутри Spring Security, что опасно и может привести к появлению уязвимостей.

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

image

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

Дружим gRPC с долгоживущим проектом, PHP и фронтендом

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


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


Мы расскажем о том, как объединить внешнее API с внутренним и что делать, если у вас много кода на PHP, но хочется воспользоваться преимуществами gRPC.

Читать дальше →
Всего голосов 38: ↑37 и ↓1+36
Комментарии7

OpenDKIM + Postfix = просто

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


В конце 2011 года разработчики проекта dkim-milter прекратили его поддержку и разработку. К счастью, на замену проекта dkim-milter пришел OpenDKIM, с помощью которого добавить DKIM-подпись в письма так же просто.

tl;dr: в наше время без DKIM-подписей ну никак нельзя
DKIM-подпись — это цифровая подпись, которая добавляется к заголовкам письма сервером отправителя, по которой сервер получателя может удостовериться, что отправитель письма соответствует полю From в заголовках письма. Если сервер получателя проверяет эту подпись, то по результатам проверки сервер может принять решение о том, как поступать с письмом: принять, отправлять в папку «Спам», отправить на дополнительную проверку или вовсе отказаться от приёма. Подписи DKIM проверяют и используют сами все ведущие почтовые службы, включая Яндекс и Mail.ru. Последняя открыто требует чтобы письма были подписаны с помощью DKIM.


Инструкция по настройке связки Postfix и OpenDKIM
Всего голосов 46: ↑40 и ↓6+34
Комментарии28

14 лучших метроидваний на PC

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

Метроидвания — один из тех жанров, сформулировать границы которых довольно сложно. Само его название является соединением двух довольно разных серий игр — Metroid и Castlevania. Признаки принадлежности к жанру всегда были предметом споров. Поэтому мы подозреваем, что это будет один из самых противоречивых списков: мы обязательно пропустим чью-нибудь любимую игру, которую не посчитали метроидванией. Тем не менее, все выбранные нами игры потрясающи.

Нужно честно признаться, что мы ограничились довольно консервативной интерпретацией жанра — только теми играми, которые соответствуют классической модели огромного исследуемого мира с разблокируемыми областями, к которым нужно возвращаться, и получаемыми новыми возможностями. Мы стремились по возможности отсеять игры, которые лучше соответствуют категории «roguelike/lite», а также те, которые можно просто описывать словом «платформеры». Да, такой выбор — настоящее минное поле. А способность обнаружения мин мы на карте ещё не нашли.

Поэтому нет, Dark Souls и её родственники сюда не относятся, как и Бэтмен с его приключениями в Аркхэме. Вы против? Как вам угодно. Однако самой противоречивой игрой, не вошедшей в наш список, стала Dead Cells. Кто-то с жаром возражал, что это настоящая метроидвания, другие справедливо утверждали, что это roguelite-платформер с увеличивающимся набором навыков. Да, без споров не обошлось.

Игры никак не ранжированы и перечислены в случайном порядке. Ну ладно, поехали!
Читать дальше →
Всего голосов 17: ↑17 и ↓0+17
Комментарии31

// бухой, пофиксю позже

Время на прочтение5 мин
Количество просмотров103K
long long ago; /* in a galaxy far far away */

 //
    //                       _oo0oo_
    //                      o8888888o
    //                      88" . "88
    //                      (| -_- |)
    //                      0\  =  /0
    //                    ___/`---'\___
    //                  .' \\|     |// '.
    //                 / \\|||  :  |||// \
    //                / _||||| -:- |||||- \
    //               |   | \\\  -  /// |   |
    //               | \_|  ''\---/''  |_/ |
    //               \  .-\__  '-'  ___/-. /
    //             ___'. .'  /--.--\  `. .'___
    //          ."" '<  `.___\_<|>_/___.' >' "".
    //         | | :  `- \`.;`\ _ /`;.`/ - ` : | |
    //         \  \ `_.   \_ __\ /__ _/   .-` /  /
    //     =====`-.____`.___ \_____/___.-`___.-'=====
    //                       `=---='
    //
    //
    //     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    //
    //               佛祖保佑         永无BUG
    //

«Слава богу, багов нет»
Читать дальше →
Всего голосов 261: ↑235 и ↓26+209
Комментарии143

Ядро автоматизации тестирования в микросервисной архитектуре

Время на прочтение9 мин
Количество просмотров20K
Привет, Хабр! Меня зовут Дмитрий Химион, я руковожу отделом обеспечения качества в Avito. Cегодня я хочу рассказать про автоматизацию тестирования в рамках работы с микросервисной архитектурой. Что мы можем предложить разработке для того, чтобы облегчить контроль качества? Читайте под катом.


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

Как писать на Spring в 2017

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

В одной из классических статей для новичков, мелькавших недавно на Хабре, рассказывалось про создание базового Web приложения на Java. Все начиналось с сервлета, потом создания JSP страницы и, наконец, деплоймента в контейнер. Посмотрев на это свежим взглядом я понял, что для как раз для новичков это, наверняка, выглядит совершенно жутко — на фоне простых и понятных PHP или Node.js, где все просто — написал контроллер, вернул объект, он стал JSON или HTML. Чтобы немного развеять это ощущение, я решил написать "Гайд для новичков в Spring". Цель это статьи — показать, что создание Web приложений на Java, более того — на Spring Framework это не боль и мучительное продирание через web.xml, persistence.xml, beans.xml, и собирание приложения как карточного домика по кусочкам, а вполне себе быстрый и комфортный процесс. Аудитория — начинающие разработчики, разработчики на других языках, ну и те, кто видел Спринг в его не самые лучше времена.

Читать дальше →
Всего голосов 47: ↑44 и ↓3+41
Комментарии110

Автоэнкодеры в Keras, часть 6: VAE + GAN

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

Содержание



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

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

В этой части попробуем взять лучшее от обоих подходов путем совмещения вариационных автоэнкодеров (VAE) и генеративных состязающихся сетей (GAN).

Подход, который будет описан далее, основан на статье [Autoencoding beyond pixels using a learned similarity metric, Larsen et al, 2016].



Иллюстрация из [1]
Читать дальше →
Всего голосов 37: ↑37 и ↓0+37
Комментарии7

Автоэнкодеры в Keras, Часть 5: GAN(Generative Adversarial Networks) и tensorflow

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

Содержание



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

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

Этот недостаток в куда меньшей степени проявляется у другого подхода, а именно у генеративных состязающихся сетейGAN’ов.

Формально GAN’ы, конечно, не относятся к автоэнкодерам, однако между ними и вариационными автоэнкодерами есть сходства, они также пригодятся для следующей части. Так что не будет лишним с ними тоже познакомиться.

Коротко о GAN


GAN’ы впервые были предложены в статье [1, Generative Adversarial Nets, Goodfellow et al, 2014] и сейчас очень активно исследуются. Наиболее state-of-the-art генеративные модели так или иначе используют adversarial.

Схема GAN:



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

Автоэнкодеры в Keras, Часть 4: Conditional VAE

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

Содержание



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

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

    Что тут писать, вот так выглядели сгенерированные цифры:

    Картинка


  2. Сложно было генерировать картинку какой-то заданной цифры. Для этого надо было смотреть, в какую область латентного пространства попадали изображения конкретной цифры, и сэмплить уже откуда-то оттуда, а тем более было сложно генерировать цифру в каком-то заданном стиле.

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


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

Автоэнкодеры в Keras, Часть 3: Вариационные автоэнкодеры (VAE)

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

Содержание



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

Вариационные автоэнкодеры (Variational Autoencoders) — это автоэнкодеры, которые учатся отображать объекты в заданное скрытое пространство и, соответственно, сэмплить из него. Поэтому вариационные автоэнкодеры относят также к семейству генеративных моделей.


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

Стук снизу

Время на прочтение2 мин
Количество просмотров36K
Атмосфера на этом чердаке старенькой многоэтажки была особенная. На заляпанном полу валялись окурки и пустые бутылки, тут и там были постелены какие-то ветхие подобия матрасов. На матрасах сидели и лежали приличного вида люди, которые нашли здесь то, что не смогли найти в обычной жизни. Почти по центру, на вычурном стуле перед вычурным столом, обычно скучала хрупкого вида девочка, готовая на условный стук открыть небольшой люк в полу.

И вот снизу постучали.
Читать дальше →
Всего голосов 63: ↑58 и ↓5+53
Комментарии55

Автоэнкодеры в Keras, Часть 2: Manifold learning и скрытые (latent) переменные

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

Содержание






Для того, чтобы лучше понимать, как работают автоэнкодеры, а также чтобы в последствии генерировать из кодов что-то новое, стоит разобраться в том, что такое коды и как их можно интерпретировать.
Читать дальше →
Всего голосов 32: ↑32 и ↓0+32
Комментарии5

Автоэнкодеры в Keras, Часть 1: Введение

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

Содержание



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

Автоэнкодеры


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



Кому интересно, добро пожаловать под кат
Читать дальше →
Всего голосов 39: ↑39 и ↓0+39
Комментарии11

Потоки выполнения и PHP

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


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


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


PHP очень далёк от других технологий. Например, в Java очень активно используются потоки выполнения, ещё они могут встречаться в пользовательских программах. В PHP такого нет. И тому есть причины.

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

Математика на пальцах: методы наименьших квадратов

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

Введение




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

Но я научился говорить, что я не знаю, что такое умножение. Да, я не знаю, что такое подалгебра над алгеброй Ли. Да, я не знаю, зачем нужны в жизни квадратные уравнения. К слову, если вы уверены, что вы знаете, то нам есть над чем поговорить! Математика — это серия фокусов. Математики стараются запутать и запугать публику; там, где нет замешательства, нет репутации, нет авторитета. Да, это престижно говорить как можно более абстрактным языком, что есть по себе полная чушь.
Математика для программистов!
Всего голосов 125: ↑115 и ↓10+105
Комментарии400

Иллюзии мозга. Когнитивные искажения из-за переизбытка информации

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


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

В работе с широкими массами профессионалы используют способы обхода механизма цензуры, который в мозге фильтрует информацию, поступающего из внешнего мира. Например, если усилить информацию эмоционально, то вербальное или невербальное послание легче пройдёт встроенные фильтры сознания и надолго сохранится в памяти потребителя информации.
Читать дальше →
Всего голосов 34: ↑32 и ↓2+30
Комментарии32

Применение нейросетей в распознавании изображений

Время на прочтение10 мин
Количество просмотров242K
Про нейронные сети, как один из инструментов решения трудноформализуемых задач уже было сказано достаточно много. И здесь, на хабре, было показано, как эти сети применять для распознавания изображений, применительно к задаче взлома капчи. Однако, типов нейросетей существует довольно много. И так ли хороша классическая полносвязная нейронная сеть (ПНС) для задачи распознавания (классификации) изображений?
Читать дальше →
Всего голосов 134: ↑131 и ↓3+128
Комментарии73

Учим английский дешево и эффективно

Время на прочтение9 мин
Количество просмотров161K
Английский можно выучить дешево, иногда даже бесплатно. В этой статье я расскажу про личный опыт: какой софт и ресурсы в Интернет оказались максимально эффективными для меня, и как ими правильно пользоваться.

Если вы не готовы тратить на английский хотя бы 2 часа в день, то дальше можно не читать.
Читать дальше →
Всего голосов 45: ↑40 и ↓5+35
Комментарии135
1
23 ...

Информация

В рейтинге
Не участвует
Откуда
Москва, Москва и Московская обл., Россия
Зарегистрирован
Активность