Pull to refresh
19
0
Максим @mopkob

Разработчик. Управляющий разработкой.

Send message

Сквозь тернии к разработке или радость и боль российской разработки электроники

Level of difficultyEasy
Reading time4 min
Views10K

Свое повествование я начну со слов классика — «Все счастливые семьи похожи друг на друга, каждая несчастливая семья несчастлива по-своему», потому что у каждого направления разработки есть более чувствительные места, а у кого-то эти же места менее чувствительны, но проблемы одинаковые. Данная статья пишется не для того, чтобы очернить или поругать, а для того, чтобы указать и подсветить, те проблемы, которые плохо видны человеку, не искушенному в разработке электроники.

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

Читать далее
Total votes 44: ↑34 and ↓10+33
Comments94

10 полезных приёмов для JavaScript-программистов

Reading time5 min
Views29K
Как всем известно, JavaScript — это язык, который очень быстро развивается. В стандарте ES2020 имеется немало новых возможностей, с которыми вам, вероятно, захочется познакомиться поближе. Честно говоря, писать JS-код можно по-разному. Различные варианты кода, направленные на решение одной и той же задачи, способны дать один и тот же результат, но некоторые из этих вариантов кода могут оказаться значительно короче и чище других. Для того чтобы сделать код качественнее и понятнее, можно пользоваться всяческими полезными приёмами. О некоторых из таких приёмов речь пойдёт в материале, перевод которого мы сегодня публикуем. Надеемся, то, о чём вы сегодня узнаете, когда-нибудь вам пригодится.


Читать дальше →
Total votes 64: ↑31 and ↓33+15
Comments27

Новый взгляд на изучение и документирование исходного кода

Reading time3 min
Views27K
TL;DR Привет. Меня зовут Богдан и я изучаю проблемы чтения кода. Я только что закочнил первую рабочую версию «codecrumbs» — визуального инструмента для изучения исходного кода с помощью «хлебных крошек». Гитхаб репозиторий можно посмотреть тут.

image

Проблема


Недавно я проводил опрос о главных проблемах с которыми мы сталкиваемся когда начинаем изучать исходный код большого проекта (если вы ещё не участвовали, то пройти опрос всё ещё можно тут).
Читать дальше →
Total votes 74: ↑70 and ↓4+66
Comments35

Дилетант в opensource — lessons learned за 3 года

Reading time16 min
Views39K

Давно, в 2014 году я сделал для себя небольшую утилитку, чтобы перегонять C#-вьюмодели в TypeScript-код. Она сэкономила мне немало времени и нервов. И вот, в сентябре 2015 я решил оформить свои "эксперименты на коленке" в некую удобоваримую форму и вылить их на GitHub. Так началось моё дилетантское участие в разработке открытого ПО. Время шло. И вот, вчера в репозитории с этим проектом, наконец, появился юбилейный, трёхсотый коммит. В связи с этим знаменательным событием, я бы хотел поделиться своим дилетантским опытом о том, с чем придётся столкнуться, если вам вдруг взбредёт в голову разработать что-то "на благо развития индустрии". Я изложу некоторые цифры, расскажу несколько прохладных историй, а так же поделюсь впечатлениями каково это — написать и поддерживать opensource-проект без мам, пап и кредитов поддержки компании, оплаты и… и свободного времени. Заходите под кат, присаживайтесь, мы начинаем.

Читать дальше →
Total votes 111: ↑110 and ↓1+109
Comments154

Web scraping на Node.js и защита от ботов

Reading time14 min
Views36K

Это третья статья в цикле про создание и использование скриптов для веб-скрейпинга при помощи Node.js:


  1. Web scraping при помощи Node.js
  2. Web scraping на Node.js и проблемные сайты
  3. Web scraping на Node.js и защита от ботов
  4. Web scraping обновляющихся данных при помощи Node.js

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


Также во второй статье затрагивалась тема инициализации сессий, но, там речь шла о предельно простом случае, когда достаточно выполнить один дополнительный запрос и сохранить куки.


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


Важное примечание

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


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

Читать дальше →
Total votes 17: ↑17 and ↓0+17
Comments15

Как работает Headless Chrome

Reading time19 min
Views110K
Уже из названия понятно, что headless-браузер — это нечто без головы. В контексте фронтенда — это незаменимый инструмент разработчика, с помощью которого можно тестировать код, проверять качество и соответствие верстке. Виталий Слободин на Frontend Conf решил, что необходимо познакомиться с устройством этого инструмента поближе.

Под катом компоненты и особенности работы Headless Chrome, интересные сценарии использования Headless Chrome. Вторая часть про Puppeteer — удобную Node.js-библиотеку для управления Headless-режимом в Google Chrome и Chromium.


О спикере: Виталий Слободин — бывший разработчик PhantomJS — тот, кто закрыл его и похоронил. Иногда помогает Константину Токареву ( annulen) в «воскрешенной» версии QtWebKit — том самом QtWebKit, где есть поддержка ES6, Flexbox и многие других современных стандартов.

Виталий любит исследовать браузеры, в свободное время копаться в WebKit, Chrome и прочее, прочее. Про браузеры сегодня и поговорим, а именно про безголовые браузеры и всю их семейку призраков.
Total votes 42: ↑42 and ↓0+42
Comments14

Установка и настройка OpenVPN сервера с помощью docker-compose

Reading time2 min
Views57K


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


OpenVPN одна из самых популярных программ для организации VPN туннеля, а docker-compose отличный инструмент для установки и настройки программ с помощью одного docker-compose.yml файла.


В статье я расскажу как быстро и просто настроить OpenVPN сервер на собственном VPS используя docker-compose. За основу возьмем образ kylemanna/docker-openvpn.


Заинтересовавшихся прошу под кат.

Читать дальше →
Total votes 23: ↑17 and ↓6+11
Comments40

Отправка почты из Docker-контейнера (докеризация postfix и sasl)

Reading time6 min
Views29K
Когда я расположил приложение в Docker-контейнере и попробовал отправить email на почтовый сервер в другом Docker-контейнере, столкнулся с непредвиденной проблемой. Почтовый сервер postfix по умолчанию отправляет почту на произвольный домен получателя только от локального клиента. Все остальные домены нужно прописывать в параметре relay_domains, и если параметр mynetwors настроен правильно, то почта будет отправляться на перечисленные в параметре relay_domains домены с клиента из mynetwors.

В принципе, мне этого было достаточно, т.к. приложение теоретически должно было отправлять почту на ровно один корпоративный почтовый сервер. Но такое решение меня не очень устраивало, потому что задача может поменяться в любой момент. Поэтому, я попытался настроить sasl-авторизацию, которая позволяет отправлять почту авторизованным пользователям на произвольный домен.
Читать дальше →
Total votes 9: ↑8 and ↓1+7
Comments15

Запущен «Акварель-Генератор», создающий набор тематических слов для работы над текстом

Reading time2 min
Views5.3K
Разработчики системы Just-Magic.org запустили «Акварель-Генератор», специальное дополнение к сервису пословной проверки текстов на тематичность запросу «Акварель». Если «Акварель» оценивала уже написанные тексты, то «Акварель-генератор» по введенному запросу создает набор тематических слов и словосочетаний, которые копирайтер может использовать в работе над текстом.

image
Читать дальше →
Total votes 10: ↑10 and ↓0+10
Comments8

Компьютерное зрение и машинное обучение в PHP используя библиотеку opencv

Reading time9 min
Views34K
Всем привет. Это моя юбилейная статья на Хабре. За почти 7 лет я написал 10 статей (включая эту), 8 из них — технические. Общее количество просмотров всех статей — около полумиллиона.
Основной вклад я внёс в два хаба: PHP и Серверное администрирование. Мне нравится работать на стыке этих двух областей, но сфера моих интересов гораздо шире.

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

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


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

Создаем сервер для потокового видео: глава из книги по PHP от нашего разработчика

Reading time10 min
Views41K


У нас в Skyeng работают весьма талантливые люди. Вот, например, бэкенд-разработчик Words Сергей Жук написал книгу про событийно-ориентированный PHP на ReactPHP, основанную на публикациях его блога. Книга англоязычная, мы решили перевести одну самодостаточную главу в надежде, что кому-то она сможет пригодиться. Ну и дать скидочную ссылку на всю работу.
Читать дальше →
Total votes 19: ↑19 and ↓0+19
Comments12

Портирование собственной ОС на Xen

Reading time16 min
Views5K
Пару лет назад на Мат-Мехе проходил студпроект по превращению Embox в идеальную платформу для столь модного нынче облака. Одной из очевидных частей этой задачи, было портирование на какую-нибудь платформу виртуализации, и выбор пал на Xen. В данной статье я расскажу о процессе портирования студентами ОС под Xen, добавлении новой платформы в Embox, ну и, конечно, зачем вообще всё это затевалось.
Читать дальше →
Total votes 28: ↑28 and ↓0+28
Comments0

Поднимаем свою Vertcoin ноду P2Pool *c merged-ом и плюхами

Reading time19 min
Views24K


Проснулся утром, сравнил статистику начислений честно намайненных монет в кабинете пула с показателями калькулятора, и окончательно убедился в том что пул недоначисляет?
Надоело платить комиссии «не за что»?
Или решил поддержать децентрализацию сети и уйти с крупного пула?
А может просто захотелось «поднять» что-то своё?

Не важно какова причина, важно другое — в голове засело едкое, ослепляющее желание что-то поменять, и прекращать майнить «через дядю».
И между ней и тобой появляется один простой, но в то же время очень резонный вопрос — «Как?».
Ответ на него такой же простой — «Легко!».

Хотите узнать больше?
Total votes 9: ↑6 and ↓3+3
Comments10

Безлимитное распознавание речи. Или как я перевожу в боте голосовые сообщения в текст

Reading time5 min
Views46K
Привет, Хабр. Обычно я пишу программы для неговорящих людей, но решил удариться в крайности и сделать продукт для говорящих людей. Я хочу рассказать о разработке бота для VK, который переводит пересланные ему голосовые сообщения в текст. Сначала я использовал Yandex SpeechKit, но потом уперся в дневной лимит распознаваемых единиц и перешел на wit.ai, об этом и хочу рассказать, а также о фреймворке для создания ботов vk с помощью node.js, болтовне гугловского dialogflow.

Обложка статьи на которой показан скришот сайта wit.ai
Читать дальше →
Total votes 41: ↑39 and ↓2+37
Comments7

Как построить географическую панель наблюдения с данными в реальном времени

Reading time3 min
Views9.2K
В этом посте покажу, как построить интерактивную географическую панель наблюдения с Displayr, Plotly и R. Особенно интересно, что она отслеживает позицию военных самолетов в реальном времени. Для этого я собираюсь взять данные из двух разных источников (регионы на основании размера ВВС и отслеживание позиции самолетов в реальном времени). Панель наблюдения отображает динамические данные двумя способами: оттенок региона (чтобы показать численность ВВС в стране) и точки-маркеры (для позиций самолетов). Потом я построю карту, чтобы аккуратно и красиво отобразить все эти данные.
Читать дальше →
Total votes 14: ↑14 and ↓0+14
Comments0

Git снизу вверх

Reading time27 min
Views128K
У этого перевода не совсем обычная история. Системы контроля версий далеки от моих профессиональных интересов. Для рабочих проектов они мне требовались нечасто, причем, разные, так что, каждый раз, когда возникала такая необходимость, я заново вспоминала, как в них делается та или иная операция. А для личных проектов мне хватало возможностей Dropbox, хранящей историю версий файлов.


Изображение из твиттера @girlie_mac

Но вот однажды я на три незабываемых дня попала в роддом — это иногда случается с женщинами. Из развлечений у меня были новорожденная дочь и телефон с большим экраном. Дочь поначалу развлекала плохо (дома она быстро исправилась), а на телефоне помимо книг и фильмов обнаружился текст «Git from the bottom up», который оказался более чем годным… С тех пор прошло почти 3 года, подросшей дочке уже пора самой начинать использовать Git Git стал мейнстримом, если не сказать стандартом в современной разработке, а я с удивлением обнаружила, что перевода на русский этого чуда, полезного не только начинающим, но и продвинутым пользователям Git, до сих пор нет. Исправляю эту ситуацию.
Читать дальше →
Total votes 104: ↑102 and ↓2+100
Comments32

TgGram — сервис создания сайтов для/из телеграм каналов

Reading time2 min
Views27K
Добрый день.

Как известно, контент опубликованный в телеграм не индексируется поисковиками. Я разработал сервис, tggram.com, автоматически создающий сайты для телеграм каналов.

Сразу несколько примеров:

rdslv.tggram.com
botcollection.tggram.com
memefeed.tggram.com

По желанию, возможен! кастомный домен и уникальный стиль, например:

startupoftheday.ru
crazydoge.com
Читать дальше →
Total votes 37: ↑36 and ↓1+35
Comments27

Протоколы распространения ключей на симметричных шифрах

Reading time8 min
Views16K
Данный текст будет являться одной из переписанных глав для учебного пособия по защите информации кафедры радиотехники и систем управления МФТИ (ГУ). Полностью учебник доступен на github (см. также draft releases). На хабре я же планирую выкладывать новые «большие» куски, во-первых, чтобы собрать полезные комментарии и замечания, во-вторых, дать сообществу больше обзорного материала по полезным и интересным темам.

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

  • В результате работы протокола должен между двумя абонентами должны быть сформирован секретный сессионный ключ.
  • Успешное окончание работы протокола распространение ключей должно означать успешную взаимную аутентификацию абонентов. Не должно быть такого, что протокол успешно завершился с точки зрения одной из сторон, а вторая сторона при этом представлена злоумышленником.
  • К участию в работе протокола должны допускаться только легальные пользователи сети. Внешний пользователь не должен иметь возможность получить общий сессионный ключ с кем-либо из абонентов.
  • Добавление нового абонента в сеть (или исключение из неё) не должно требовать уведомления всех участников сети.
Читать дальше →
Total votes 18: ↑18 and ↓0+18
Comments12

Статический анализатор ShellCheck и улучшение качества скриптов в Linux и Unix

Reading time5 min
Views14K


Написание shell-скриптов — занятие увлекательное. Скрипты командной строки помогают автоматизировать повседневные дела. Можно создать нечто прекрасное (или какую-нибудь гадость), однако, если уж что-то писать, хорошо бы точно знать, что код получается именно таким, каким он нужен программисту. Скрипт, написанный некачественно, может представлять опасность. Большинство новичков пишут скрипты, копируя фрагменты кода со StackOverflow, находя то, что им нужно, в Google, или пользуясь сайтами с вопросами и ответами по Linux. Такой подход к программированию выливается в некачественный код и в появление ошибок. Вот, например, команда rm, выполнение которой приведёт к катастрофе, так как переменная VAR не определена:

rm -rf "/$VAR/*"

Многие из проблем скриптов можно решить с помощью линтера, такого, как статический анализатор кода ShellCheck, который написан на Haskell. Он помогает искать ошибки в текстах скриптов и выводить отчёты о проведённых проверках. Это позволяет повысить производительность работы и качество кода. Сегодня мы расскажем о том, как установить и использовать ShellCheck в Linux и Unix-подобных операционных системах.
Читать дальше →
Total votes 28: ↑27 and ↓1+26
Comments8

Объясняем современный JavaScript динозавру

Reading time15 min
Views266K


Если вы не изучали JavaScript с самого начала, то осваивать его современную версию сложно. Экосистема быстро растёт и меняется, так что трудно разобраться с проблемами, для решения которых придуманы разные инструменты. Я начал программировать в 1998-м, но начал понимать JavaScript только в 2014-м. Помню, как просматривал Browserify и смотрел на его слоган:


Browserify позволяет делать require («модули») в браузере, объединяя все ваши зависимости


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


Цель статьи — рассказать о контексте, в котором инструменты в JavaScript развивались вплоть до 2017-го. Начнём с самого начала и будем делать сайт, как это делали бы динозавры — безо всяких инструментов, на чистом HTML и JavaScript. Постепенно станем вводить разные инструменты, поочерёдно рассматривая решаемые ими проблемы. Благодаря историческому контексту вы сможете адаптироваться к постоянно меняющемуся ландшафту JavaScript и понять его.

Total votes 174: ↑171 and ↓3+168
Comments505

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Registered
Activity

Specialization

Specialist
Middle
From 250,000 ₽
Git
Docker
MySQL
Nginx
PHP
Bash
High-loaded systems
Flutter
Vue.js
ENTERPRISE SERVICE BUS