Pull to refresh

Technotext

Модификация алгоритма FP Growth или как правильно ухаживать за своими деревьями

Level of difficultyHard
Reading time8 min
Views3.6K

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

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

Читать далее

Делаем гидрофон и записываем звук трескающегося льда

Reading time29 min
Views12K

Мы сделаем чувствительный дисковый гидрофон, дополнив который предусилителем, мы сможем записывать гидроакустические сигналы в диапазоне частот примерно от 10 до 40 кГц: звуки рыб и морских млекопитающих, шумы двигателей судов и лодок и даже шум снежной метели и скрип шагов по льду, если вы захотите изучать звуки в водоемах, закованных в ледяную корку. А еще мы дадим несколько простых приемов работы со звуковым редактором, и научим видеть то, что не слышно. Все это под катом!

Начать погружение

Дерево метрик: как построить связь между конверсиями в продукте и выручкой бизнеса

Level of difficultyMedium
Reading time8 min
Views10K

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

Давайте разберемся как решить эту проблему на кейсе Лиги Ставок. 

Читать далее

Собираем русскоязычный лонгформер шаг за шагом

Reading time8 min
Views9K

Привет, меня зовут Андрей Казначеев, я NLP engineer в компании MTS AI. В этой статье я расскажу, как создал лонгформер для русского языка. Все началось с того, что мне подкинули задачу по классификации длинных диалогов. Тексты длинные, а большинство популярных моделей имеют строгое ограничение по длине входной последовательности. Хотелось сделать решение умнее, чем просто побить текст на куски, однако ничего готового для русского языка не нашел. Тогда я задумался, а так ли сложно сделать свою собственную версию лонгформера под русский язык? Оказалось, совсем не сложно.

Читать далее

Собираем и запускаем Linux-0.01 в Minix 1.5, (почти) как это делал Линус Торвальдс

Level of difficultyHard
Reading time28 min
Views13K

Я люблю старые программы, мне нравится их изучать и смотреть, как они развивались и во что сейчас превратились, или умерли, так и не дожив до сегодняшнего дня. Ещё мне нравится смотреть разные YouTube-каналы, посвящённые ретро-тематике, на которых рассказывают об истории программ, игр, игровых приставок или старых компьютеров. Хочу сказать всем этим людям «спасибо» за то, что сохраняете частичку истории технологий. И, вдохновившись их трудами, мне захотелось попробовать самому прикоснутся к истории, собрав и запустив что-то относительно старое, но до сих пор живущее и развивающееся. Мой выбор пал на первую версию Linux, а именно версию 0.01.

Те, кто знаком с ранними днями создания Linux, знают, что Линус Торвальдс писал её для компьютеров на основе 386-х процессоров в пропатченной версия Minix 1.5.10. И не смотря на то, что linux-0.01 собирали не раз, в том числе и на современных версиях компилятора, мне хотелось побыть хоть немного в шкуре самого Линуса и самому собрать ядро в родной для этой ОС среде. А именно на максимально близком, хоть и виртуальном аппаратном обеспечении, в настоящей Minix 1.5.10 (точнее, Minix-386) с древней версией GCC 1.37.1

17 сентября ядру Linux исполнится 32 года. Это прекрасный повод вспомнить, как всё начиналось…

Читать далее

Будущее программирования: языки, зарплата и перспективы в 2024 году

Level of difficultyEasy
Reading time15 min
Views79K

Почему программисты не боятся искусственного интеллекта? Потому что им достаточно сказать заказчику: «Объясните компьютеру, что именно вы хотите». Так шутили еще недавно, но теперь такие шутки становятся не такими веселыми, как раньше. Искусственный интеллект, воплощенный в ChatGPT, продолжает совершенствоваться, в то время как IT-сообщество делится на скептиков и энтузиастов. Одни верят, что программистам не нужно меняться, другие думают, что новые языки и подходы в разработке окончательно похоронят ручной кодинг. На недавней дискуссии Artezio мы собрали влиятельных разработчиков и попросили предсказать, как будет меняться программирование в будущем, какие языки обещают быть на волне успеха и как оставаться в тренде. 

Читать далее

Симбиоз «Chromium» и «InternetTools»

Level of difficultyMedium
Reading time28 min
Views4.2K
Заполучить определённые сведения с динамического сайта – это не сказать что очень редкая, но всё же специфическая задача, решение которой и предлагает статья (без покидания, насколько возможно, уютных рамок Delphi); под динамической страницей автор понимает не просто сайт, содержащий JavaScript (в современных реалиях найти ресурс без него довольно сложно), а страницу, на которой интересующие разработчика данные изначально отсутствуют в документе, полученном от веб-сервера, появляясь исключительно после отработки JS-кода, каким-то образом вычисляющего их, либо запрашивающего нужную информацию от некоего сервера.

Если читатель раньше не сталкивался с подобной проблематикой, то наверняка приведённое сжатое описание малопонятно, поэтому обратимся к конкретному примеру – пусть требуется извлечь альбомы некоторой группы с metal-archives.com:

Пример динамического сайта
Читать дальше →

Поиск в War Thunder режима персонального угнетения (РПУ) при помощи анализа статистики побед/поражений (Часть 1)

Level of difficultyMedium
Reading time3 min
Views20K

С 12.07.2019 по 22.07.2019 я тщательно собирал и заносил в таблицу статистику своих побед и поражений в игре в War Thunder, с целью убедится в наличии или отсутствии РПУ, при помощи тестирования статистических гипотез о равенстве средних. Спустя 2 года я наконец-то набрался сил и смелости, чтобы написать данную статью, опубликовать полученных данные и представить результаты их анализа для публичного обсуждения.

Полученные данные позволяют сделать вывод о гипотезе наличия/отсутствия РПУ в игре, приводят к очень необычным выводам относительно изучаемого объекта, обладают научной новизной и за 2 года так и не были высказаны в других публикациях. Также в статье я постараюсь сделать некоторые обоснованные выводы о характеристиках и свойствах изучаемого объекта.

Узнать подробности.

Как Google победила фрагментацию и возвращает контроль над Android

Level of difficultyEasy
Reading time14 min
Views43K

Разбор эволюции Android и как Google внедряла функции в ОС, чтобы организовать прямую доставку обновлений независимо от вендоров устройств, а также продолжает забирать полный контроль над устройствами

Подробности

Перевод «говорящих» имён в кино и художественной литературе

Level of difficultyEasy
Reading time12 min
Views9.8K

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

Я одно время очень увлекалась сравнением переводов говорящих имён в кино и литературе, о чём писала в постах в своём аккаунте @gorelka.tarelka в Instagarm. Я решила собрать весь материал, что накопила и изучила по этой теме за несколько лет, и опубликовать его здесь.

Читать далее

Запускаем новые GitLab Auto-scaling раннеры в Yandex Cloud

Level of difficultyMedium
Reading time4 min
Views3K

И снова здравствуйте! В этой статье я хочу продолжить вопрос динамических gitlab-раннеров, которые запускаются в Яндекс Облаке. В прошлой статье мы рассмотрели старый подход, основанный на docker-machine. 

Естественным будет вопрос: «Чем плох docker-machine?» И тут такой же простой ответ: «Ничем, он хорош». Но  хорош он ровно до момента его промышленного использования.

Читать далее

Как написать идеальный автотест: 25 джедайских принципов

Level of difficultyMedium
Reading time10 min
Views18K

Привет! Меня зовут Дмитрий Трофимов (@angryqa во ВКонтакте или @trofimovdigital на просторах интернета). Я тимлид отдела автоматизации тестирования в VK ID. С командой мы проделали большой путь при внедрении автотестов в наш продукт, и на этом пути мастерски овладели принципами написания идеальных тестов, которыми спешу поделиться с вами.

Читать далее

Краткий обзор стажировки в ИТ фирме или рефакторинг истории о Карабасе Барабасе

Reading time7 min
Views1.3K

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

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

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

Читать далее

Backup and Restore — виртуальные машины в облаках/хостингах

Level of difficultyMedium
Reading time6 min
Views11K

Постановка задачи — есть виртуальная машина в облаке — мы хотим решить две задачи:

1. Резервировать ее по расписанию на наш сервер(а), находящиеся под нашим полным контролем.

2. Иметь возможность в любой момент сконвертировать нужную версию из резервной копии в виртуальную машину (в любом формате) и запустить ее на нашем оборудовании (т. е. приземлить виртуальную машину из облака на грешную...).

И так, поехали!

Читать далее

Тюнингуем Allure для экономии времени QA-инженера

Reading time5 min
Views8.7K

Привет, Хабр! Меня зовут Шкердин Данила, я QA Automation‑инженер в МТС Digital. В этой статье хочу рассказать о личном опыте прикручивания механики уведомлений к Allure в Telegram и не только.

Allure — популярный инструмент для генерации отчетов о тестировании. Но каким бы приятным не был интерфейс Allure, наблюдать его в течении получаса, пока идет launch, никому не нравится. Для получения мгновенных уведомлений о статусе тестов существует проект Allure‑notifications. Этот плагин позволяет автоматически отправлять уведомления о запуске тестов в выбранный вами канал Telegram/Slack/Skype/Email. Как я понял из общения с коллегами QA, о этом инструменте либо мало кто слышал, а те, кто слышал — не пробовали его. Давайте это исправим.

Прокачать Allure

Осознанная оптимизация Compose

Level of difficultyMedium
Reading time29 min
Views63K

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

Наша команда Ozon Seller также столкнулась с этой проблемой. Мы решили собрать воедино все советы и наработки по написанию оптимизированного Compose-кода. Активное применение этих советов при оптимизации существующих экранов и написании новых существенно улучшило наши метрики: длительность лага по отношению к длительности скролла (hitch rate; чем меньше, тем лучше) экранов со списками упала в среднем с 15-19 % до 5-7 % (на 90-м перцентиле). Все эти советы и наработки мы описали в этой статье. Она будет полезна и начинающим, и опытным разработчикам, в ней подробно описаны оптимизации и механизмы Compose, а также рассказано про слабо задокументированных особенности и исправления ошибок, которые есть в других статьях. Давайте же начнём.

Читать далее

Законно ли хранить код на GitHub?

Level of difficultyEasy
Reading time10 min
Views24K

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

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

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

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

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

Читать далее

Конструктор для embedded-разработчика

Level of difficultyMedium
Reading time12 min
Views22K

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

Читать далее

Akira промахнулся

Level of difficultyMedium
Reading time6 min
Views3.4K

В продолжение статьи Avast размышления по поводу расшифровки файлов, зашифрованных программой-вымогателем Akira Ransomware. Пишем сами декриптор

Читать далее

Как IndVarSimplification применяет математику в вашем коде

Level of difficultyMedium
Reading time3 min
Views3.9K

Многие оптимизации в компиляторе выглядят естественными. Но IndVarSimplification, предмет этой статьи, сильно выделяется среди них. Это та оптимизация, которая сначала кажется темной магией, но за маской на самом деле скрывается математика.

В этой статье я постарался разобраться, как работает IndVarSimplification. Будет немного кода на Rust, чтение ассемблера и копание в коде LLVM.

Читать далее