Как стать автором
Поиск
Написать публикацию
Обновить
1121.59

Программирование *

Искусство создания компьютерных программ

Сначала показывать
Порог рейтинга
Уровень сложности

Как создать архитектуру для работы с высокой нагрузкой вашего веб-проекта?

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

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

Помните "Черные Пятницы", которые так популярны среди людей? Знаете ли вы, что иногда сайты и веб-приложения не выдерживают такого огромного наплыва пользователей и в результате этого нередко теряют много денег?

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

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

Читать далее

Автоматизация машинного обучения

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

Data science – это не только fit-predict

Сколько рабочего времени вы тратите на скучные рутинные операции? Представим, что вы начали работать в компании, которая производит однообразные операции с бесконечными таблицами. Например, в крупном ретейлере или у ведущего оператора связи. Ежедневно перед вами ставят задачу выяснить, останется ли клиент с вами или хватит ли товара на полках до конца недели. Алгоритм выглядит просто. Вы берете выборку, изучаете бесконечные ряды признаков, удаляете мусор, генерируете новые признаки, собираете сводную таблицу. Подаете готовые данные в модель, настраиваете параметры и с нетерпением ждете заветных цифр итоговой метрики. Это повторяется день за днем. Затрачивая каждый день всего 60 минут на генерацию фич или подбор параметров, за месяц вы израсходуете минимум 20 часов. Это, без малого, целые сутки, за которые можно выполнить новую задачу, обучить нейросеть или прочесть несколько статей на arxiv’e.

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

Читать далее

RESTful backend приложение. Базовый шаблон

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

Необходимо собрать базовый шаблон RESTful backend приложения на NodeJS + Express, который:

легко документируется

просто наполняется функционалом

позволяет легко настраивать защиту маршрутов

имеет простую встроенную автоматическую валидацию

Гайд достаточно обширный, поэтому сначала мы разберем и реализуем различные части, а затем соберем приложение воедино. Готовый репозиторий можно посмотреть на Github.

Читать далее

Как и чем живет отдел обнаружения вредоносного ПО в Positive Technologies

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

Привет, Хабр! Меня зовут Алексей Вишняков. Я возглавляю отдел обнаружения вредоносного программного обеспечения PT Expert Security Center. В одной из прошлых статей мы писали о том, что делают DevOps-инженеры у нас в компании, а сегодня я расскажу, чем занимается мой отдел и какие технические задачи нам приходится решать, поделюсь собственным опытом и выделю компетенции, которыми необходимо обладать, чтобы присоединиться к нашей команде.

Читать

Чтобы первый блин не вышел комом. Советы начинающему разработчику сервиса

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

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

 Специально для статьи я подготовил два идентичных примера на Flask и Dash и выложил их на GitHub. В них иллюстрируется расчет и вывод показателей юнит-экономики абстрактного IT-маркета, который называется Хабр (а почему бы и нет, ведь сейчас все компании начали заниматься электронной коммерцией:).

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

Читать далее

Ещё один модуль рисования графиков

Время на прочтение6 мин
Количество просмотров6.7K
Лет пятнадцать назад потребовалось мне в программе для диплома отобразить график. Была бы программа на Builder или Delphi, всё было бы ничего, но только писал я для Windows на MFC, а там с классами графиков как-то не очень. И написал я тогда собственный модуль построения графиков. Три пятилетки прошло, а модуль остался, был переработан и я его иногда использую в своих поделках в QNX, Linux и Windows. Быть может, он пригодится чем-либо и вам.
Читать дальше →

3 способа визуального извлечения данных с помощью JavaScript

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

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

Читать далее

Создание функции губки из MD5

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

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

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

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

Читать далее

fork() — зло; vfork() — добро; afork() — лучше; clone () — глупо

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

Недавно я наткнулся на реализацию popen() (та же идея, другой API) с использованием clone(2), где я открыл issue с запросом использования vfork(2) или posix_spawn() в целях лучшей переносимости на другие платформы. Оказывается, для Linux есть одно очень важное преимущество в использовании clone(2). И вот я думаю, что мне следует раскрыть тему, которую я там затронул, где-нибудь еще: в гисте, в блоге, да где угодно.

Итак, начнем.

Давным-давно я, как и многие фанаты Unix, думал, что fork(2) и модель порождения процессов fork-exec были лучшим решением в мире, а Windows нервно курил в сторонке, имея только exec*() и _spawn*(), последний из которых был чистым виндоусизмом.

После многих лет практики я пришел к выводу, что fork(2) на самом деле является злом. А vfork(2), долгое время считавшийся злом, на самом деле является добром. Изящная вариация vfork(2), которая избегает необходимости блокировать родителя, была бы даже лучше (об этом чуть позже).

Такие серьезные заявки требуют объяснений, поэтому позвольте мне объяснить все по порядку.

Я не буду утруждать себя объяснением, что такое fork(2) - если вы это читаете, я полагаю, вы уже знаете. Но я расскажу про vfork(2) и почему он считается опасным. vfork(2) очень похож на fork(2), но новый процесс, который он создает, запускается в том же адресном пространстве, что и родительский, как если бы он был потоком. Он даже разделяет тот же стек с потоком, который вызвал vfork(2)! Два потока не могут совместно использовать стек, поэтому родительский процесс останавливается до момента, когда дочерний выполнит свою задачу: либо exec*(2), либо _exit(2).

Читать далее

Простой граф знаний на текстовых данных

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

Сегодня на простом примере рассмотрим – как провести краткий обзор неструктурированных данных в виде графа знаний.

Для примера возьмем набор текстов из обращений с портала mos.ru. В данном случае, набор состоит из 90 тыс. обращений. Медианная длина обращений составляет 9 слов. В целом, тексты можно разбить на три основные темы: качество окружающей среды; качество городской среды; доля дорожной среды, соответствующей нормативам.

Для начала импортируем необходимые библиотеки:

Читать далее

Датасет о мобильных приложениях

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

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

Читать далее

Фишки IDEA. Часть 2

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

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

Читать далее

Множественные источники данных в интерфейсе — client-side «SQL»

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

Иногда в интерфейсе наших приложений СБИС возникает необходимость "сгруппировать" часть записей в некотором списке (например, служебные сообщения в чате, контакты и телефонные звонки).

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

Читать далее

Ближайшие события

Ловим бандерлогов в офисе

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

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

А потом сходите к их начальству, соберите данные о результатах работы этих программистов, их полезности для команды/проекта/компании, в чём бы эта полезность не измерялась.

Ну и сопоставьте одно с другим – особенности процесса работы с её результатами. Так вы вычислите бандерлогов.

Ну-ка чё там за очередная дичь

Именуйте классы, переменные и функции для людей, а не для машин

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

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


TL,DR


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

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

Prototype Design Pattern в Golang

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

Привет друзья! С вами Алекс и я продолжаю серию статей, посвящённых применению шаблонов проектирования в языке Golang.

Интересно получать обратную связь от вас, понимать на сколько применима данная область знаний в мире языка Golang. Ранее уже рассмотрели шаблоны: Simple Factory, Singleton и Strategy. Сегодня хочу рассмотреть еще один шаблон проектирования - Prototype.

Читать далее

Как команда it-animals в финале Цифрового Прорыва выиграла

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

Данная статья написана в соавторстве с тимлидом @Restlin

Выбор кейса и наше видение его решения

Изначально выбор пал на кейс МВД: Разработка автономного программного решения лингвистического анализа и преобразования в тексте лица повествования.

Формулировка кейса:

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

Нам он был близок по специализации, и было четкое представление как красиво можно решить данную задачу.

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

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

1. локальное решение, работающее без доступа в сеть; 

2. интегрированные офисные пакеты посредством макросов.

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

Читать далее

Часть 3: Продолжаем пилить мультигаджет ESPboy2 для ретро игр и экспериментов с IoT в 2021

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

С последних статей на хабре о проекте ESPboy прошло больше года.

Кратко напомню, что это мульти-гаджет для IT энтузиастов, ардуинщиков, любителей ретро игр, пентестеров.

Открытость платформы, 100% совместимость с Arduino IDE, WiFi на борту, автономность работы в несколько часов, доп модули и AppStore - делают устройство идеальным для обучения, прототипирования и IoT экспериментов.

Схемы и код открыты и в простейшем варианте устройство может быть собрано за полчаса из нескольких деталей с AliExpress за 8$. Также можно купить готовый девайс на tindie.com, но такой вариант пока дороговатым получается. На youtube канале проекта демонстрируются некоторые возможности, на hackaday - лог разработки.

ESPboy2 пока доступен только для разработчиков, но кому интересен, оставляйте емейл в форме предзаказа. Как только будет запущен для заказа, покупки или сборки - напишем.

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

Что удалось сделать за прошедший год...

глянуть, что за хрень

Необычная концепция синтаксиса языка программирования

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


Хочу представить на обсуждение читателей немного необычный концепт языка программирования, в котором отсутствует проблема, присущая практически всем промышленным языкам — постоянное увеличение сложности синтаксиса языка из-за его естественного развития по мере выхода новых версий и добавления новых фич. Эта проблема описана в материале Простое сложное программирование и Какая «идеальная» цель развития у языков программирования?

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

Особенности языка:

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

Ну и в соответствии с собственным наблюдением Хабр — ума палата, буду рад любым комментариям и предложениям, которые помогут протестировать или улучшить предлагаемое решение.
Читать дальше →

В поисках упорядоченного множества в Python: разбираемся с теорией и выбираем лучшую реализацию

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


Множество (Set) — структура данных, которая позволяет достаточно быстро (в зависимости от реализации) применить операции add, erase и is_in_set. Но иногда этого не достаточно: например, невозможно перебрать все элементы в порядке возрастания, получить следующий / предыдущий по величине или быстро узнать, сколько элементов меньше данного есть в множестве. В таких случаях приходится использовать Упорядоченное множество (ordered_set). О том, как оно работает, и какие реализации есть для питона — далее.

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

Вклад авторов