Обновить

Все потоки

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

Люди, которые писали код на голых нервах. О практике девяностых и нулевых, которая до сих пор работает

Уровень сложностиСредний
Время на прочтение5 мин
Охват и читатели18K

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

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

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

Читать далее

Современные OCR для сложных документов: сравниваем 6 open-source моделей на реальном кошмаре инженера

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

Привет, Хабр! Каждый, кто хоть раз пытался вытащить данные из скана акта или старого отчета, знает эту боль. Классические OCR-инструменты, вроде старого доброго Apache Tika, отлично справляются с простым печатным текстом, но пасуют перед реальными вызовами: таблицами со сложной вёрсткой, рукописными пометками, мелким курсивом и разными шрифтами в одном документе.

Чтобы не быть голословными, давайте посмотрим на типичный «сложный» документ и что с ним делает Tika.

Читать далее

Бенчмарки для теста телефона на производительность

Время на прочтение11 мин
Охват и читатели10K

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

Читать далее

Не смотрите вниз

Время на прочтение8 мин
Охват и читатели14K

ESO/S. Guisard

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

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

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

Читать далее

5 способов убить производительность в асинхронном Rust

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

Привет, Хабр! В предыдущих статьях — «Rust без прикрас: где мы ошибаемся» и «Rust без прикрас: где мы продолжаем ошибаться» мы обсудили всякие неприятные грабли: бездумное использование unwrap(), игнорирование ошибок через let _ =, чрезмерное клонирование, проблемы с хвостовой рекурсией и прочие оплошности. Теперь пришло время взглянуть на другой пласт проблем.

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

Читать далее

PHP-веб-панель для Amnezia VPN: ускоряем корпоративную автоматизацию

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

Под катом расскажу, как реализовал свою web-панель для управления Amnezia AWG (WireGuard) VPN на Ubuntu 22–24. Почему не хватило официального приложения, какие задачи решил с помощью простого PHP-интерфейса и чем это может быть полезно другим компаниям или разработчикам. Код и инструкции — в открытом доступе.

Проект на GitHub: amneziavpnphp

Читать далее

Алфавитная идеология и буквенный символизм

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

Мне попался в руки тематический выпуск «Социолингвистика правописания» (2015) журнала Written Language and Literacy. Проблемы политизации орфографии хорошо знакомы на постсоветском пространстве — Таллин или Таллинн (а в 1930 он и вовсе был Талин!), Чимкент или Шымкент? — но аналогичные противостояния возникали по всему миру, во все времена. Интереснее всего, когда политизированные прения возникают по поводу состава алфавита.

Так, испанцы, владевшие Филиппинами с 1521, перевели тагальский — основной язык Филиппин — на латиницу без использования ⟨k⟩: как и в испанской орфографии, звук [k] обозначался при помощи ⟨c⟩ или ⟨qu⟩. В 1892 филиппинские революционеры назвали свою подпольную организацию KKK (Kataastaasang Kagalang-galang na Katipunan, «высочайшая и самая почётная организация»): символом борьбы против испанской власти они избрали тройную «анти-испанскую» букву. В 1898 в войну за независимость Филиппин включились США, испанцы были разгромлены, филиппинский флаг украсился буквами KKK, а орфография повстанцев стала официальной: алфавит (abakada) принял вид ⟨a, b, k, d, e…⟩ — тогда как «колониальные» буквы ⟨c⟩ и ⟨q⟩ из него были исключены. В 1987, когда антиколониальная борьба осталась далеко позади, филиппинский алфавит вновь гармонизировали с испанским: поставили ⟨k⟩ на привычное место перед ⟨l⟩, и разрешили использовать ⟨c, f, j, ñ, q, v, x, z⟩ в собственных именах и заимствованиях.

Читать далее

URL как контейнер состояния

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

Пару недель назад, когда я писал пост The Hidden Cost of URL Design, мне нужно было добавить подсветку синтаксиса SQL. Я направился на веб-сайт PrismJS, пытаясь вспомнить, можно ли добавить его в качестве плагина. Меня утомило количество вариантов на странице скачивания, поэтому я вернулся к своему коду. Поискав в файле PrismJS, я нашёл в его начале комментарий, содержащий URL:

/* https://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript+bash+css-extras+markdown+scss+sql&plugins=line-highlight+line-numbers+autolinker */

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

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

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

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

Читать далее

Vera — ваш личный десктопный агент

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

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

Читать далее

Днем я пишу код, вечером иду в гараж и продаю на Авито на 130 тысяч в месяц

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

В 32 года от офисного кресла у меня затекала шея. Правое плечо болело от работы с мышкой — рука постоянно на весу. Поясница ныла от напряжения и наклона над столом. Спина между лопатками — от вытянутых вперед рук.

Йога и фитнес немного спасали. За день работы боли возвращались.

Осенью 2020 года я ушел на удаленку. Понял, пора менять рабочее место.

Читать далее

Бытовой UX, или зачем в стиралке иллюминатор

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

Как проектировщик интерфейсов я люблю смотреть по сторонам и подрезать best practices не только у Apple и Google, но и у осязаемых физических вещей. Иногда мы воспринимаем привычное удобство как должное и перестаем его замечать — это показатель хорошего интерфейса! Однако проектировщикам полезно иногда переставать быть пользователями, отстраняться и оценивать даже самые привычные решения. Сегодня под мой UX-разбор попал иллюминатор в стиральной машинке: кому, зачем? Почему? Давайте разбираться.

Читать далее

Мультиагентная разработка в Cursor: как заставить субагентов работать на большие проекты

Уровень сложностиСредний
Время на прочтение5 мин
Охват и читатели21K

Как можно Cursor IDE превратить в полноценную мультиагентную среду разработки, где каждый AI‑агент выполняет роль члена команды: аналитика, архитектора, планировщика или разработчика?

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

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

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

Читать далее

Запускаем почтовый сервер на VPS под Windows

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

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

Во-первых, бесплатный сыр только в мышеловке.

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

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

почтовые рассылки для тысяч читателей, в том числе с платной подпиской.

И это только начало.

Читать далее

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

Пробрасываем USB-устройство по сети в Линуксе

Время на прочтение4 мин
Охват и читатели14K

Автор вот этой статьи поднял вопрос, который наверное волнует тех, кто пользуется различными USB-токенами: как подключить USB-токен удаленно?

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

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

Читать далее

Per aspera ad astra. Как построить космолет, не привлекая внимания санитаров

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

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

Читать далее

«Паяем правильно и точно» — тест-драйв набора DIY для детей

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

Привет, хабровчане! На связи руководитель проектов редакции компьютерной литературы издательства «БХВ» @Holmogorov Признаюсь честно: паять я люблю, но не сказать, что умею это делать профессионально. Так, в состоянии починить ёлочную гирлянду или водрузить на место отвалившийся конденсатор в блоке питания. Поэтому когда у нас в «БХВ» придумали детский набор «Паяем правильно и точно. Уроки мастера + 4 набора для пайки», я сразу решил взять его на тест-драйв. Благо, все необходимое для «ходовых испытаний» у меня в наличии имеется: ребенок мужского пола, никогда до этого не державший паяльник в руках, и я, который хотя бы приблизительно помнит, как этот самый паяльник выглядит. Тем более, набор изобретали совершенно другие люди в совершенно другом подразделении нашей компании, поэтому я могу без особых угрызений совести изучать его более-менее непредвзято и писать про него гадости обзоры.

Погнали!

Kafka реально быстрая, но я возьму Postgres

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

Команда Go for Devs подготовила перевод статьи о том, почему большинству проектов не нужна Kafka, «веб-масштабные» очереди и зоопарк из пяти баз данных. Автор на бенчмарках показывает, как далеко можно уехать на одном Postgres — и заодно разбирает, почему карго-культ масштабирования и «инфраструктура ради резюме» только мешают делать работу.

Читать далее

Чебурахнувшийся робот, а также ИГРОКУБ от Valve

Время на прочтение9 мин
Охват и читатели17K

Самые интересные новости финансов и технологий в России и мире за неделю: российский прямоходящий робот упал на презентации, штрафы за подписку на «неправильные» ТГ-каналы, спецоперация США в Южной Америке, уход Уоррена Баффета, GPT-5.1, а также носок для айфона за 150 баксов.

Читать далее

История опенсорс-проекта LUWRAIN: как эксперименты с LLM помогают создавать невизуальные интерфейсы для незрячих

Время на прочтение12 мин
Охват и читатели8K

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

Проект LUWRAIN — пример именно такой истории. Это платформа для разработки невизуальных приложений, которая тринадцать лет создаётся усилиями энтузиастов. Сегодня у неё появляется шанс сделать рывок — с помощью LLM и инженерных подходов, основанных на открытых технологиях. В случае LUWRAIN, как и в случае многих похожих инициатив, существует поиск правильного соотношения смысла и усилий. Поэкспериментировать и найти баланс в том числе помогла программа грантов Yandex Open Source.

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

Читать далее

Замена GPU в ноутбуках

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

В перспективе нескольких лет у нас только два необходимых апгрейда в ноутбуке: увеличить RAM и заменить GPU. Остальное по желанию. Видеокарта становится проблемой, если мы хотим играть в современные игры. Представьте, как здорово было бы проапгрейдить GPU в ноутбуке! Просто заменить одну на другую, как в ПК.

Почти два года назад вышел Framework 16, очередная версия модульного ноутбука [Framework]. Посмотрим, как разработчики реализовали быструю замену GPU через отсек расширения, и станет ли такой отсек стандартом для всех ноутбуков.

Читать далее