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

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

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

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

Применение ООП на практике

Уровень сложности Средний
Время на прочтение 13 мин
Количество просмотров 17K

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

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

Итак, вы думаете, что знаете Git? Часть первая: старый добрый Git

Уровень сложности Простой
Время на прочтение 4 мин
Количество просмотров 14K

Автор оригинала Скотт Чакон — сооснователь GitHub и основатель нового клиента GitButler. Этот клиент ставит во главу угла рабочий процесс и удобство разработки, в том числе код-ревью, и не является просто очередной обёрткой над CLI git.


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



Давайте покопаемся!
Всего голосов 25: ↑24 и ↓1 +23
Комментарии 6

Сила логов: зачем команда Яндекс 360 собирает терабайты логов в день

Уровень сложности Простой
Время на прочтение 4 мин
Количество просмотров 2.9K

Привет! Я Вадим, руководитель команды бэкенда Телемоста — платформы для видеоконференций от Яндекс 360. В 2022 году я пришел в Яндекс 360 и удивился местному подходу к работе с логами: оказалось, что здесь их собирают в 100 раз больше, чем я привык.

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

Читать далее
Всего голосов 11: ↑7 и ↓4 +3
Комментарии 6

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

Уровень сложности Средний
Время на прочтение 7 мин
Количество просмотров 2.1K

Сегодня всё чаще требуется учитывать географическую привязку и выполнять поиск в локальном окружении клиента. Иными словами, регулярно возникает необходимость найти что-то (или кого-то) рядом с конкретным пользователем. «Где ближайший банкомат?», «Кто из друзей поблизости?», «Какие тут аптеки?». Подобные запросы миллионами поступают в сервисы геолокации каждый день, при этом существующие подходы к решению этой задачи не исчерпали возможностей оптимизации. Наверняка вы не раз сетовали на то, как долго обновляются метки на карте.

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

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

Координаты одной строкой

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

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

Читать далее
Всего голосов 14: ↑13 и ↓1 +12
Комментарии 7

Истории

Обфускация сетевого трафика и автоматическая интернет-цензура

Уровень сложности Средний
Время на прочтение 28 мин
Количество просмотров 9.7K

Интернет‑цензоры ищут способы выявить и заблокировать доступ в интернете к информации, которую они считают нежелательной. Для этих целей они часто используют такие сетевые инструменты, как глубокая проверка пакетов (Deep packet inspection, DPI), которые позволяют выявить такие соединения. В ответ активисты разработали и внедрили механизмы запутывания сетевого трафика. Они применяют специализированные криптографические инструменты, чтобы попытаться скрыть от DPI истинную природу и содержание соединений.

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

Читать далее
Всего голосов 17: ↑17 и ↓0 +17
Комментарии 6

10 продвинутых сниппетов Python, которые повысят ваши навыки программирования

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

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

Читать далее
Всего голосов 19: ↑10 и ↓9 +1
Комментарии 11

Где джуну оттачивать навыки программирования: 6 бесплатных ресурсов

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

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

Читать далее
Всего голосов 30: ↑23 и ↓7 +16
Комментарии 9

Реализация слоев в Нейронных сетях (часть 1)

Уровень сложности Средний
Время на прочтение 6 мин
Количество просмотров 3.5K

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

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

Очистка текста с помощью Python. Часть 02

Уровень сложности Простой
Время на прочтение 8 мин
Количество просмотров 4.7K

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

Читать далее
Всего голосов 12: ↑2 и ↓10 -8
Комментарии 7

Сохраняем простоту кода и ускоряем разработку за счет отказа от оверинжиринга

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

Мой совет: если хотите ускориться, пишите код как можно проще и как можно чище.
Читать дальше →
Всего голосов 18: ↑16 и ↓2 +14
Комментарии 10

Повышаем быстродействие расчётов на примере медианного фильтра

Уровень сложности Средний
Время на прочтение 6 мин
Количество просмотров 1.4K
Рассмотрим некоторые приёмы повышения быстродействия вычислительных программ на примере алгоритма медианного фильтра.
Читать дальше →
Всего голосов 7: ↑7 и ↓0 +7
Комментарии 1

Что ждёт мобильную разработку в 2024 году

Уровень сложности Средний
Время на прочтение 15 мин
Количество просмотров 6K

Привет! Меня зовут Таня Шашлова, я руковожу образовательными продуктами по мобильной разработке в Практикуме.

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

Читать далее
Всего голосов 15: ↑14 и ↓1 +13
Комментарии 10

Очистка текста с помощью Python. Часть 1

Уровень сложности Простой
Время на прочтение 5 мин
Количество просмотров 6.3K

Возьмем простейшую ситуацию, когда вы спарсили некоторые данные с Ф.И.О., номерами телефонов, email и именем пользователя с какого-либо сайта. Однако пользователи не особо любят соблюдать правила заполнения полей. Потому, иногда в Ф.И.О. присутствуют числа и различные символы, которые в дальнейшем затруднят поиск по таким данным. Да и номера телефонов могут быть записаны вразнобой. А потому, необходимо привести их к какому-то общему знаменателю. Следовательно, напрашивается логический вывод – данные необходимо очистить. Вот этим мы и займемся в данной статье.

Читать далее
Всего голосов 16: ↑8 и ↓8 0
Комментарии 4

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

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн
Геймтон «DatsEdenSpace» от DatsTeam
Дата 5 – 6 апреля
Время 17:00 – 20:00
Место
Онлайн
PG Bootcamp 2024
Дата 16 апреля
Время 09:30 – 21:00
Место
Минск Онлайн
EvaConf 2024
Дата 16 апреля
Время 11:00 – 16:00
Место
Москва Онлайн

Домашний кластер разработчика

Уровень сложности Средний
Время на прочтение 10 мин
Количество просмотров 23K

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

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

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

Читать далее
Всего голосов 74: ↑73 и ↓1 +72
Комментарии 10

Release Timeline — визуализация GitHub релизов в вашей документации

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

Данное приложение было создано для красивого и удобного показа изменений во Vue 3 проекте в его документации на VitePress. После оно было сделано универсальным, и может быть подключено в любой HTML странице как Web component или микрофронтенд.

Попробовать - https://vuesence.github.io/release-timeline/. Слева вверху можно указать любой публичный репозиторий.

Читать далее
Всего голосов 5: ↑5 и ↓0 +5
Комментарии 6

Как работать с Kafka-consumer в Spring-проектах

Уровень сложности Средний
Время на прочтение 9 мин
Количество просмотров 5.4K

Эта статья сборник небольших рекомендаций как работать с Kafka-consumer в Spring основанных на личном опыте.

Читать далее
Всего голосов 5: ↑5 и ↓0 +5
Комментарии 2

Использование Jupyter Notebook для разведочного анализа данных ⬝ Методические рекомендации

Уровень сложности Простой
Время на прочтение 19 мин
Количество просмотров 10K

Блокноты Jupyter — это, уже довольно давно, один из самых неоднозначных инструментов в среде дата‑сайентистов. Одни яро критикуют Jupyter, другие горячо поддерживают этот проект. Но, тем не менее, многие согласятся с тем, что блокноты Jupyter, при правильном их использовании, могут быть очень ценным инструментом. Именно этому и посвящена данная статья — вторая в серии моих материалов про науку о данных и машинное обучение. Я поделюсь здесь методическими рекомендациями по использованию Jupyter Notebook для разведочного анализа данных.

Но для начала нам надо ответить на вопрос о том, почему блокноты Jupyter обосновались именно в научном сообществе. Когда тема Data Science была у всех на слуху, блокноты Jupyter ещё ничего из себя не представляли. До них у нас был IPython, интерактивная оболочка для Python, которую встраивали в различные IDE, вроде Spyder. Эти IDE пытались подражать работе RStudio или Matlab. Подобные инструменты получили широкое распространение среди исследователей.

В 2014 году из среды IPython вырос проект Jupyter. Масштабы его использования очень быстро стали просто огромными, чему, в основном, способствовали исследователи, которые перенесли в бизнес‑среду то, чем пользовались, занимаясь наукой. Но те подходы к использованию блокнотов, которые хороши для научных учреждений, не всегда нормально переносятся на анализ данных, проводимый в обычных организациях. Часто бывает так, что дата‑сайентистам, взятым на работу сразу после университета, очень сложно выдать то, что от них ожидают в бизнесе. Речь идёт о структуре аналитических разработок и об оформлении их результатов.

Читать далее
Всего голосов 23: ↑22 и ↓1 +21
Комментарии 0

Решил я тут текстовую MMORPG на C++ написать

Уровень сложности Средний
Время на прочтение 4 мин
Количество просмотров 10K

Cразу уточню, это не гайд по созданию MMORPG на C++. Это нечто вроде моего дневника, куда я буду скидывать процесс разработки (Да, проект ещё не завершён, даже не близко, скорее только начат...). Почему я вообще тогда создал эту статью? Ну, коли ты крутой true‑программист, буду рад советам, критике, помощи, ругани, проще говоря всему, что может помочь мне улучшить это. С другой стороны, если ты сам захотел создать нечто похожее, то, быть может, сможешь избежать всех трудностей, с которыми столкнулся я.

Читать далее
Всего голосов 22: ↑14 и ↓8 +6
Комментарии 27

Rust 1.76.0: обновление совместимости ABI, получение имени типа из ссылки

Уровень сложности Простой
Время на прочтение 2 мин
Количество просмотров 1.4K

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


Если у вас есть предыдущая версия Rust, установленная через rustup, то для обновления до версии 1.76.0 вам достаточно выполнить команду:


rustup update stable

Если у вас ещё не установлен rustup, вы можете установить его с соответствующей страницы нашего веб-сайта, а также посмотреть подробные примечания к выпуску на GitHub.


Если вы хотите помочь нам протестировать будущие выпуски, вы можете использовать канал beta (rustup default beta) или nightly (rustup default nightly). Пожалуйста, сообщайте обо всех встреченных вами ошибках.

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

Как на самом деле Async/Await работают в C#. Часть 6. Анализ результатов компиляции асинхронных вызовов

Уровень сложности Сложный
Время на прочтение 24 мин
Количество просмотров 5K

В этой статье мы продолжим разбирать содержание работы Stephen Toub-а: «How Async/Await Really Works in C#». В этот раз, в след за автором исходного Поста мы рассмотрим код, который генерирует C# компилятор для реализации асинхронных вызовов и множество связанных с этим сущностей-понятий-приемов, таких как: контекст исполнения, боксинг, стейт машина, стек, потоки, … Эта 6-я часть, пожалуй, основная часть всей работы, которая непосредственно отвечает на вопрос: «Как на самом деле Async/Await работают (и компилируются) в C#»

Там, где мне придется цитировать содержание исходного текста в переводе (то есть более-менее дословно переводить), оно будет выделено подчеркнутым курсивом.

Возможно вам будет интересно сравнить эту мою работу с первоначальным переводом.

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

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