Как стать автором
Обновить
4
0
Андрей Скляров @iMrDron

Web-developer (front-end + back-end)

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

Учимся общаться между микросервисами на Node.js через RabbitMQ

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

Это продолжение статьи «Пишем первый микросервис на Node.js с общением через RabbitMQ», которая была неплохо принята пользователями хабра.


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

Читать дальше →
Всего голосов 23: ↑18 и ↓5+13
Комментарии3

Решение, которое нужно принять, чтобы не жалеть о жизни через 30 лет

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


«Определение ада: «Тот человек, которым вы стали, в свой последний день на земле встретится с человеком, которым вы могли бы стать».
— Автор неизвестен


Читать дальше →
Всего голосов 90: ↑72 и ↓18+54
Комментарии173

Рассказ о том, как я ворую номера кредиток и пароли у посетителей ваших сайтов

Время на прочтение11 мин
Количество просмотров168K
Продолжение: Рассказ о том, как не дать мне украсть номера кредиток и пароли у посетителей ваших сайтов
Представляем вам перевод статьи человека, который несколько лет воровал имена пользователей, пароли и номера кредитных карт с различных сайтов.


То, о чём я хочу рассказать, было на самом деле. Или, может быть, моя история лишь основана на реальных событиях. А возможно всё это — выдумка.

Выдалась однажды такая неделя — безумное время, когда всех вокруг тревожила безопасность. Ощущение было такое, что новые уязвимости появляются ежедневно. Мне было не так уж и просто делать вид, будто я понимаю, что происходит, когда меня об этом спрашивали близкие люди. Их беспокоила перспектива того, что их взломают, что их данные утекут неизвестно куда. Всё это заставило меня на многое взглянуть по-новому.

В результате, скрепя сердце, я решил выложить всё начистоту и рассказать всему миру о том, как я в последние несколько лет воровал имена пользователей, пароли и номера кредитных карт с самых разных сайтов. Возможно, вы — администратор или разработчик одного из них.
Читать дальше →
Всего голосов 319: ↑312 и ↓7+305
Комментарии325

Видеонаблюдение в подъезде своими силами

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


Прочитал относительно недавнюю публикацию о видеонаблюдении и решил описать свой опыт. Считаю мое решение оптимальным по соотношению цена/функциональность, но с удовольствием выслушаю критику более опытных людей.

Итак, задача — минимальными материальными и временными ресурсами сделать видеонаблюдение в подъезде перед входной (в квартиру) дверью. Желательно не записывать круглые сутки “пустые” картинки, т.е. необходимо детектирование движения. Также хорошо бы иметь удаленный доступ к записям.
Читать дальше →
Всего голосов 23: ↑21 и ↓2+19
Комментарии60

Разработка браузерной онлайн игры без фреймворков и движков

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

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

В этом посте будет описан процесс разработки онлайн игры на чистом javascript и WebGL (без фреймворков и движков). Будут рассмотрены некоторые алгоритмы, техники рендеринга, искусственный интеллект ботов и сетевая игра. Проект является полностью опенсорсным, в конце поста будет ссылка на репозиторий.
Много картинок и гифок
Всего голосов 88: ↑88 и ↓0+88
Комментарии42

Одиннадцать ошибок управления проектами на примере трансатлантического яхтенного перехода

Время на прочтение11 мин
Количество просмотров24K
После 10 лет работы в качестве ИТ руководителя, когда за плечами уже достаточно выполненных проектов и компаний, а также опыт создания проектного офиса, видишь все вокруг немного иначе. Любую уникальную задачу хочется декомпозировать на подзадачи, расположить их на scrum-доске или на временной шкале, оценить приоритеты, риски, трудозатраты. К сожалению, в реальности, даже элементарные практики из проектного управления соблюдаются не всегда.

Именно о том, что всегда должно быть сделано при выполнении проекта мы и поговорим на неожиданном примере трансатлантического яхтенного перехода.


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

Веб-приложение на Node и Vue, часть 1: структура проекта, API, аутентификация

Время на прочтение13 мин
Количество просмотров93K
Перед вами — первый материал из серии, посвящённой разработке полноценного веб-приложения, которое называется Budget Manager. Основные программные средства, которые будут использованы в ходе работы над ним — это Node.js для сервера, Vue.js для фронтенда, и MongoDB в роли базы данных.



Эти материалы рассчитаны на читателей, которые знакомы с JavaScript, имеют общее представление о Node.js, npm и MongoDB, и хотят изучить связку Node-Vue-MongoDB и сопутствующие технологии. Приложение будем писать с нуля, поэтому запаситесь любимым редактором кода. Для того, чтобы не усложнять проект, мы не будем пользоваться Vuex и постараемся сосредоточиться на самом главном, не отвлекаясь на второстепенные вещи.

Автор этого материала, разработчик из Бразилии, говорит, что ему далеко до JavaScript-гуру, но он, находясь в поиске новых знаний, готов поделиться с другими тем, что ему удалось найти.
Читать дальше →
Всего голосов 23: ↑22 и ↓1+21
Комментарии3

Подборка документальных научных фильмов

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


Документальные фильмы снимать не легче, чем художественные, а порой даже сложнее, когда речь заходит о научных фильмах. Научный фильм должен быть не только достоверен. Картине нужно захватывать, увлекать и доступно объяснять сложные понятия, чтобы в результате среди зрителей оказались обычные люди, а не сами ученые.


Тем ценнее встретить качественный научный фильм, популяризирующий научное знание.


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

Всего голосов 42: ↑42 и ↓0+42
Комментарии38

Проблемы безопасности Docker

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


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


В Docker уже встроено несколько замечательных средств обеспечения безопасности:


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


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


  • Docker-контейнеры изолированы как от хоста, так и от других контейнеров. Этого удается добиться благодаря способности ядра Linux изолировать ресурсы с помощью cgroups и namespaces. Но есть серьезная проблема — ядро приходится делить между хостом и контейнерами (мы еще вернемся к этой теме чуть позже).


  • Docker-контейнеры воспроизводимы. Благодаря их декларативной системе сборки любой администратор может легко выяснить, из чего и как был сделан контейнер. Крайне маловероятно, что у вас в итоге окажется неизвестно кем настроенная legacy-система, которую никому не хочется конфигурировать заново. Знакомо, не правда ли? ;)

Однако в основанных на Docker системах есть и слабые места. В этой статье мы как раз о них и поговорим, рассмотрев 7 проблем безопасности Docker.

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

Продвинутое конфигурирование Docker Compose (перевод)

Время на прочтение5 мин
Количество просмотров152K
Docker Compose обладает целым рядом нетривиальных способов применения, которые мы рассмотрим в этой заметке. Это очередной перевод статьи, которую мы разбирали при подготовке материалов нашего курса Python для Web-разработки.



Контроль порядка запуска


Docker Compose запускает контейнеры в порядке зависимостей, используя опцию depends_on, чтобы указывать, когда запускается сервис. Для определения порядка запуска Compose применяет depends_on, links, volumes_from и network_mode: «service: ...».

Если контейнер должен дождаться состояния “ready” другого контейнера, можно использовать инструменты wait-for-it или dockerize. Они будут проверять хосты и порты до тех пор, пока TCP соединение не будет подтверждено. Для включения принудительного ожидания в композицию необходимо добавить entrypoint:

version: '2'

services:
    web:
        build: .
        ports:
            - "80:8000"
        depends_on:
            - db
        entrypoint: "./wait-for-it.sh db:5432"
    db:
        image: postgres

Вы всегда можете самостоятельно написать скрипт-обёртку, если возникнет необходимость в усилении контроля.
Читать дальше →
Всего голосов 21: ↑19 и ↓2+17
Комментарии8

Привычки для продления жизни

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

— На что жалуемся?
— На голову жалуется.
— Это хорошо. Легкие дышат, сердце стучит.
— А голова?
— А голова — предмет темный, исследованию не подлежит.
Кинофильм "Формула любви"



Если я проживу до 90+ лет, то как мне остаться активным, умным и приносящим пользу и радость людям вокруг меня в период с 70 до 90+ лет?


Как не стать вялым и требующим заботы индивидом, который может только потреблять сериалы, выпивать и рассказывать о былом?


Как до самой смерти что-то творить, менять мир, исследовать пространство и время и свой ум?


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


По сути это приквел и статья должна быть первой. В ней я суммирую опыт нескольких книг и исследований о том как:


  • Продлить жизнь.
  • До конца жизни оставаться бодрым и умным.

Итак, поехали разбираться.

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

Реверс-инжиниринг одной строчки JavaScript

Время на прочтение10 мин
Количество просмотров47K
Несколько месяцев назад я получил от друга такое письмо:



Тема: Можешь объяснить мне эту одну строчку кода?

Текст: Считай меня тупым, но… я не понимаю её и буду благодарен, если растолкуешь подробно. Это трассировщик лучей в 128 символах. Мне кажется, он восхитительный.

<pre id=p><script>n=setInterval("for(n+=7,i=k,P='p.\\n';i-=1/k;P+=P[i%2?(i%2*j-j+n/k^j)&1:2])j=k/i;p.innerHTML=P",k=64)</script>



Эта строчка JavaScript отрисует анимацию, которая показана на изображении под катом. В браузере она запускается здесь. Скрипт написан автором www.p01.org, где вы можете найти эту и много других классных демок.
Всего голосов 136: ↑134 и ↓2+132
Комментарии33

GitLab CI для непрерывной интеграции и доставки в production. Часть 2: преодолевая трудности

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

Эта статья продолжает первую часть, содержащую подробное описание нашего пайплайна:

image

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

Итак, я остановился на том, что созданный .gitlab-ci.yml не позволяет реализовать пайплайн в полной мере, поскольку GitLab CI не предоставляет директив для разделения задач по пользователям и для описания зависимостей выполнения задач от статуса выполнения других задач, а также не позволяет разрешить модификацию .gitlab-ci.yml только для отдельных пользователей.
Читать дальше →
Всего голосов 23: ↑23 и ↓0+23
Комментарии14

GitLab CI для непрерывной интеграции и доставки в production. Часть 1: наш пайплайн

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


Итак, GitLab CI: что можно ещё рассказать о нём? На хабре уже есть статьи про установку, про настройку раннеров, про командное использование, про GitLab Flow. Пожалуй, не хватает описаний того, как используется GitLab CI в реальном проекте, где задействовано несколько команд. А в современном мире разработки ПО это действительно так: ведь есть (как минимум) разработчики, тестировщики, DevOps- и релиз-инженеры. С подобным разделением на команды мы работаем уже несколько лет. В этой статье я расскажу о том, как мы, используя и улучшая возможности GitLab CI, реализовали и применяем в production для коллектива из нескольких команд процессы непрерывной интеграции (CI) и отчасти доставки приложений (CD).
Читать дальше →
Всего голосов 44: ↑43 и ↓1+42
Комментарии25

Изучите все языки программирования

Время на прочтение9 мин
Количество просмотров85K
Когда я был ещё первокурсником, то познакомился с другим студентом, который утверждал, что может писать код на любом языке программирования, который я смогу назвать. Я был несколько шокирован и ответил подначкой:

— Что, даже на том нечитаемом эзотерическом языке, где есть всего пара команд, которые едва-едва симулируют машину Тьюринга?
— Да, этот язык называется brainfuck. Я знаю brainfuck.

И это был не трюк — мы проверили. Я называл известный мне язык программирования, он тратил пару минут в Интернете на то, чтобы освежить свои знания по нему — и был способен писать на этом языке работающие алгоритмы. Я никак не мог понять этого. Ему, как и мне, было тогда около 18 лет — как он мог в этом возрасте знать все эти языки?

image
Интерпретатор brainfuck, написанный на brainfuck

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

Сегодня я советую своим студентам «постараться изучить все языки программирования». Подумайте сами — ведь эта идея лучше, чем все вот эти «В этом году я выучу Go! Ой, нет, теперь говорят что в моде Rust — выучу лучше Rust! Или Swift ...». Просто выучите все — не ошибётесь. А эта статья, возможно, вам в этом немного поможет.
Читать дальше →
Всего голосов 89: ↑81 и ↓8+73
Комментарии94

Украина подверглась самой крупной в истории кибератаке вирусом Petya

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

Сегодня утром ко мне обратились мои клиенты с паническим криком «Никита, у нас все зашифровано. Как это произошло?». Это была крупная компания 1000+ машин, с последними обновлениями лицензионного Windows, настроенным файрволом, порезанными правами для юзеров и антифишинг фильтрами для почтовиков.

Спустя час позвонили представители другой крупной компании, у них тоже все зашифровано, под 2000 машин. Атака началась с крупных бизнес структур и уже час или два спустя я узнал, что «Ощадбанк», «УкрПочта», «ТАСКомерцбанк», «ОТР банк» под атакой (полный список в UPD5).

Что случилось? И о развитии ситуации под катом.
Читать дальше →
Всего голосов 82: ↑74 и ↓8+66
Комментарии505

Идиоматичный Redux: Дао Redux'а, Часть 1 — Реализация и Замысел

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

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


Введение


Я потратил много времени, обсуждая онлайн паттерны использования Redux, была ли это помощь тем, кто изучает Redux в Reactiflux каналах, дискуссии о возможных изменениях в API библиотеки Redux на Github'е, или обсуждение различных аспектов Redux'а в комментариях к тредам на Reddit'е или HN (HackerNews). С течением времени, я выработал свое собственное мнение о том, что представляет собой хороший, идиоматичный Redux код, и я хотел бы поделиться некоторыми из этих мыслей. Несмотря на мой статус мейнтейнера Redux'а, это всего лишь мнения, но я предпочитаю думать, что они являются достаточно хорошими подходами.


Redux, в своей сути, невероятно простой паттерн. Он сохраняет значение, выполняет одну функцию для обновления значения когда это необходимо, и уведомляет любых подписчиков о том, что что-то изменилось.


Несмотря на эту простоту, или, возможно, вследствие ее, существует широкий спектр походов, мнений и взглядов о том, как использовать Redux. Многие из этих подходов широко расходятся с концепциями и примерами из документации.


В то же время, продолжаются жалобы на то, как Redux «заставляет» вас делать вещи определенными способами. Многие из этих жалоб на самом деле включают концепции связанные с тем, как Redux обычно используется, а не фактическими ограничениями наложенными самой библиотекой Redux. (Например, только в одном недавнем HN треде я видел жалобы: «слишком много шаблонного кода», «константы action'ов и action creator'ы не нужны», «я вынужден редактировать слишком много файлов чтобы добавить одну фичу», «почему я должен переключаться между файлами чтобы добраться до своей логики?», «термины и названия слишком сложны для изучения или запутанны», и слишком много других.)

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

Интеграция React и DataTables — не так тяжело, как рекламируют

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

Несколько месяцев назад я искал React-компонент для отображения таблицы данных в одном из наших веб-приложений в Undertone. В предыдущем проекте, который не был основан на высокоуровневой библиотеке, такой как React, мы использовали jQuery-плагин DataTables, и мы были очень довольны той гибкостью, которую он предлагает. Теперь я искал нечто похожее, которое можно легко интегрировать как React-компонент в наше новое приложение.


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

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

Именованные кортежи. Пишем код на Python чище

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

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



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

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

11 вещей которые я узнал, читая спецификацию flexbox

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

Я всегда считал, что с flexbox довольно легко работать — глоток свежего воздуха после стольких лет float'ов и clearfix'ов.


Правда недавно я обнаружил что борюсь с ним; что-то растягивалось, когда я не думал, что оно должно тянуться. Я поправил здесь, другой элемент сжался. Я починил это, что-то другое ушло за экран. Какого Джорджа Буша тут происходит?


В конце концов, все заработало, но солнце село, а мой процесс был привычной игрой с CSS. Или… как называется та игра, где надо ударить крота, а затем другой крот выпрыгивает и надо ударить и его тоже?


Как бы там ни было, я решил что пора вести себя как взрослый разработчик и выучить flexbox должным образом. Но вместо того, чтобы прочитать 10 очередных блог-постов, я решил отправиться прямиком к исходнику и прочитать The CSS Flexible Box Layout Module Level 1 Spec


Вот хорошие отрывки.


Читать дальше →
Всего голосов 66: ↑62 и ↓4+58
Комментарии33
1
23 ...

Информация

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