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

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

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

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

Файловый ввод, сделанный по-человечески

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

Поводом к написанию данной статьи и к разработке соответствующей мини-библиотеки ffh стало одно из практических заданий по дисциплине ‘Языки программирования’, которую я веду. В этом задании необходимо прочитать все строки из текстового файла для последующей обработки. Так вот, у студентов, выбравших для выполнения этого задания язык C++ [язык программирования выбирается студентом для каждого задания, но чаще всего выбирают C++ или Python], почему-то иногда читалась из файла лишняя пустая строка. В прошлые годы я не придавал этому большого значения, но в последний раз решил таки разобраться в чём проблема.
Читать дальше →
Всего голосов 1: ↑1 и ↓0 +1
Комментарии 7

Новости

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

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

Согласно самым разным источникам, в мире существует от нескольких сотен до нескольких тысяч языков программирования. Правда, ЯП, с которыми реально имеют дело десятки и сотни тысяч человек, немного. Больше, конечно, нишевых языков, применяемых для решения узкого круга задач. Существуют ЯП для обучения разработчиков, а также проекты, созданные исключительно для развлечения. В статье — 5 наиболее странных языков из когда-либо созданных. Brainfuck, кстати, опустим, ведь его на Хабре и так регулярно вспоминают. Что же, поехали.

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

LLM Leaderboard за февраль 2024

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

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

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

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

Как взламывают биометрию и заставляют нейросети придумывать способы атак: топ-6 докладов с PHDays о ML и AI

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

Машинное обучение — особенно генеративные нейронные сети, такие как ChatGPT, — меняет мир нечеловеческими темпами. Разработчиков на некоторых дистанционных собеседованиях просят направить веб-камеру на рабочее место и клавиатуру, чтобы понимать, самостоятельно ли соискатель выполняет задания. Amazon ограничивает авторов самиздата загрузкой на сайт трех книг в день — фанфики и другая проза создаются неестественно быстро для «кожаных мешков». Поумневшие чат-боты приводят к массовым увольнениям сотрудников поддержки, а дизайнеры опасаются уступить конкуренцию Midjourney и Playground v2.

Генеративный AI словно говорит человечеству: «Сосредоточьтесь на важном, а я займусь искусствами, этими избыточными павлиньими хвостами хомосапиенсов, и рутиной». Люди ставят задачи, а огромная AI-фабрика по созданию цифрового контента их выполняет. Мечта многих, получается, осуществилась? Но преступники тоже используют AI или находят способы обмануть умные системы. Об угрозах ML и AI, в том числе для информационной безопасности, мы будем говорить в традиционном треке на киберфестивале Positive Hack Days 2. У вас есть время подать заявку до 15 марта, чтобы поделиться своим исследованием с 23 по 26 мая на стадионе «Лужники». А сейчас расскажем о некоторых любопытных докладах прошлых лет на ML-треке PHDays.

Читать далее
Рейтинг 0
Комментарии 0

Истории

Хватит маппить все руками, используй Mapster

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

Привет, Хабр! Меня зовут Георгий, я С#-разработчик в SimbirSoft. Хочу рассказать об опыте использования библиотеки Mapster: как он может упростить разработку, сэкономить силы и частично избавиться от рутины маппинга.

Данная статья подойдет и тем, кто только собирается открыть для себя мир автомаппинга, и тем, кто хочет найти для себя альтернативу используемой библиотеки. Для полного понимания, что тут будет происходить желательно обладать базовым пониманием C#, знать о существовании DI и подозревать, что рефлексия не так проста, как кажется.  Ну и LINQ с EF.Core, куда же без них (хотя про них достаточно просто когда-то слышать и примерно представлять, зачем они нужны).

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

Обзор библиотеки Actix в Rust

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

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

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

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

Некоторые антипаттерны проектирования в Django

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

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

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

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

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

Руководство по веб-скрейпингу на Python

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

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

Вы получите навыки для скрейпинга сложных сайтов и решения проблем, которые касаются ограничений частоты запросов, блокировок и генерируемых при помощи JavaScript страниц.
Читать дальше →
Всего голосов 42: ↑39 и ↓3 +36
Комментарии 14

Создание WordPress-плагина для отправки SMS-сообщений

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

Привет, Habr! Меня зовут Анастасия Иванова, я технический писатель МТС Exolve. В этой статье я расскажу, как создать свой WordPress-плагин для отправки SMS-сообщений. Кроме сайта, вам потребуется Exolve SMS API.

Сразу скажу: мы считаем, что пользователя обязательно нужно спрашивать, согласен ли он получать SMS. Иначе можно заслуженно получить негативный фидбек и падение лояльности клиентов.

Итак, пользователи согласны получать ваши сообщения, рассылки готовы… Начнём! Все подробности — под катом!

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

Юнит-тесты: чек-лист методик проектирования

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

Привет, Хабр! Меня зовут Василий Косарев, я Java‑разработчик в CDEK. Много раз мы слышали о необходимости писать модульные тесты, о том, что весь код должен быть ими покрыт. При этом мне не встречалось списка: какие именно методики лучше использовать при тестировании кода.

Я задумался: есть ли чек‑лист/ руководство, который облегчил бы генерацию тестовых сценариев и помог выявлять серьёзные ошибки? Чтобы вдумчиво подходить к тестированию и не тратить ресурсы впустую, сводя к минимуму количество необходимых тестов.

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

Читать далее
Всего голосов 36: ↑35 и ↓1 +34
Комментарии 2

Skunk Works курильщика, или собственный лоу-код на страже продаж

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

С вами Саша Хрущев, технический директор IT-компании WINFOX, и мы продолжаем рассказывать историю нашего лоу-код продукта. Почитайте, как развивается продукт в последние годы: инсайты, сложности, результаты и все такое.  

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

Как мы приготовили массу блюд c помощью одного ингредиента: GraphQL

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

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

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

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

Осознанная оптимизация Compose 2: В борьбе с композицией

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

Jetpack Compose постоянно развивается, открывая перед разработчиками новые горизонты для оптимизации. С момента нашего последнего обзора, мы добились значительного прогресса, сократив задержки при скролле с 5-7% до нуля. В этом материале мы поделимся свежими находками и передовыми практиками в оптимизации Compose. Чтобы максимально углубиться в тему, рекомендуем ознакомиться с первой частью.

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

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

DI CONF SMM — большая конференция по соцсетям в России
Дата 2 марта
Время 09:30 – 18:00
Место
Краснодар Онлайн
Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн

Потоковая архитектура бота Telegram

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

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

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

Julia. Метапрограммирование и макросы

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

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

Механизм макросов используется в Julia довольно часто. Макрос при использовании начинается с символа @ и имеет вид @show, @benchmark… А также, в неявной форме, макросами являются регулярные выражения r"[a..z]" (это макрос с полным именем r_str), а также многочисленные другие способы применения, включая примеры Modia.jl / Unitful.jl с макросом u_str, где физическая величина «вшита» в число:

L = 0.8u"m",
m = 1.0u"kg",
d = 0.5u"Nms/rad",
g = 9.81u"m/s^2",

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

Краткий обзор поведенческих паттернов в Rust

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

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

Зачем нужны поведенческие паттерны? Вопрос риторический, но ответ на него кроется в самой сути разработки. Поведенческие паттерны предоставляют нам для решения часто встречающихся проблем взаимодействия между объектами и классами.

Паттерны можно реализовать на любом ЯПе и сегодня рассмотрим, как их реализовать в Rust.

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

Зачем в Scala трамплины и как их использовать

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

В этой статье директор департамента разработки российской компании «Криптонит» и «скалист» Алексей Шуксто рассказывает о специфической технике функционального программирования, которая называется «трамплин» (trampoline).

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

Достигается это следующим образом: когда функция вызывает саму себя, то вместо этого вызова управление передаётся другой функции — трамплину. Эта функция-трамплин вызывает исходную функцию с нужными параметрами и, если нужно, передаёт управление другой функции-трамплину. Таким образом, при рекурсивных вызовах функций никакая информация не сохраняется на стеке, а управление всегда передаётся между функциями-трамплинами.

Чтобы вникнуть в детали, поясним ещё несколько моментов:

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

Я уже 14 лет в отрасли, но программировать по-прежнему сложно

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

Много лет назад, учась computer science на старших курсах, я долго изучал различные вакансии онлайн, надеясь найти подходящую должность стажёра-программиста.

Кроме вакансий для стажёров я иногда случайно нажимал на объявления о вакансиях «сеньор-разработчика». Помню, больше всего меня поражало то, что первой строкой шло требование определённого количества лет работы: «Эта должность требует 5+ лет опыта».

Полному новичку, ни дня не проработавшему в этой отрасли, такие требования к опыту казались избыточными. Но хотя это немного приводило меня в уныние, я не мог не пофантазировать: «Наверно, пять лет работы программистом — это впечатляющее достижение? Должно быть, для таких людей писать код проще пареной репы».

Время летело, не успел моргнуть глазом, как прошло больше десятка лет. Сегодня я с гордостью могу сказать, что работаю программистом уже 14 лет. Спустя годы боёв на фронтах разработки ПО я осознал, что многие её аспекты сильно отличаются от того, что я представлял на старших курсах, а именно:

С опытом программирование не становится намного проще, о «проще пареной репы» можно только мечтать.

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

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

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

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

Концепт бюджетной видеостены неограниченного размера для web-приложения

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

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

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

PostgreSQL: обеспечение уникальности записи с проверкой даты валидности

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

Как бы вы решали такую задачу? Предположим, есть таблица с купонами, и у купонов есть некая дата устаревания valid_until. Вам надо обеспечить такое ограничение (constraint) на уровне БД, чтобы у одного человека мог быть только один действующий купон.


Т.е., таблица изначально выглядит так:


CREATE TABLE coupons (
    id  bigint primary key generated by default as identity,
    user_id bigint not null,
    created_at timestamp not null,
    valid_until timestamp not null
)
Читать дальше →
Всего голосов 14: ↑12 и ↓2 +10
Комментарии 18

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