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

Моя литера Т стремится к равнозначности линий

Отправить сообщение

Пишем движок полнотекстового поиска на Go

Время на прочтение8 мин
Количество просмотров19K
Полнотекстовый поиск — один из тех инструментов, которые мы используем практически каждый день, когда ищем какую-то информацию в интернете. Full-Text Search (FTS) — это метод поиска текста в коллекции документов. Документ может ссылаться на веб-страницу, газетную статью, сообщение электронной почты или любой структурированный текст.

Сегодня мы собираемся написать собственный движок FTS. К концу этой статьи он сможет выполнять поиск по миллионам документов менее чем за миллисекунду. Начнём с простых поисковых запросов, таких как «Выдать все документы со словом cat», а потом расширим движок для поддержки более сложных логических запросов.

Примечание: самым известным движком полнотекстового поиска является Lucene (а также Elasticsearch и Solr, построенные на его основе).
Читать дальше →
Всего голосов 36: ↑35 и ↓1+45
Комментарии23

Записываем PNG без мам, пап и внешних библиотек

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

Я решал очередную техническую задачу и столкнулся с проблемой: нужно сохранять изображения, а у меня нет сериализаторов и я не могу использовать готовые библиотеки. Ситуацию ухудшает, что из доступных форматов только PNG, JPEG и WebP. Выбор пал на PNG.

Формат изображения PNG известен с 1996 года, а на Хабре опубликовано несколько статей о декодировании этого формата. И ни одной — о кодировании. Я расскажу, как сохранить PNG своими руками на случай, если вам тоже придется это делать. Например, в академических целях.

Под катом вас ждет подробный разбор каждого байта на множестве иллюстраций.
Читать дальше →
Всего голосов 45: ↑45 и ↓0+57
Комментарии15

Основы Elasticsearch

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

Elasticsearch — поисковый движок с json rest api, использующий Lucene и написанный на Java. Описание всех преимуществ этого движка доступно на официальном сайте. Далее по тексту будем называть Elasticsearch как ES.


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


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

Читать дальше →
Всего голосов 39: ↑38 и ↓1+37
Комментарии78

Памятка по классам скорости Wi-Fi

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

Покупая новый Wi-Fi роутер, я столкнулся со множеством их характеристик и как следствие классов скорости Wi-Fi: N300, AC2600, AX1800 и другие. По мере изучения параметров я решил написать эту статью, которую можно рассмотреть как памятку по основам Wi-FI. Главная цель этой статьи - рассмотреть основные характеристики и на что они влияют.

Читать далее
Всего голосов 35: ↑33 и ↓2+37
Комментарии48

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

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

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

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

Лучший подручный инструмент для GitHub: учимся работать с Actions

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

Представьте ситуацию: вы загрузили код на GitHub и все нужно проверять заново. На это уходит много времени и сил. Но мы же все любим автоматизировать — тем более, для этого есть все инструменты.

Привет, Хабр! На связи Виктор Рябков. Я — разработчик и создатель одноименного YouTube-канала. Сегодня погрузимся в мир GitHub Actions и узнаем, как эта система упрощает процессы разработки при взаимодействии с репозиторием. Рассмотрим ключевые аспекты: автоматизацию проверки кода и деплой на сервер.
Читать дальше →
Всего голосов 32: ↑30 и ↓2+35
Комментарии3

Уменьшать срок или платёж, что выгоднее: наглядное сравнение способов досрочного погашения кредита

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

Большинство из нас так или иначе сталкивается с кредитами, а потом и с досрочными платежами по ним. Эта статья в блоге ЛАНИТ на Хабре посвящена подробному сравнению двух способов внесения частичных досрочных платежей по кредиту: с уменьшением срока и с уменьшением платежа.

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

Читать далее
Всего голосов 80: ↑70 и ↓10+81
Комментарии317

Как я использую git

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

Недавно я пытался объяснить коллеге, какие у меня критерии при формировании пул реквеста — когда стоит объединять что‑либо в один пул реквест, а когда нет. И я заметил за собой фразу «ну, кроме…» несколько раз и решил записать, как я использую git — чтобы разобраться в особенностях моего подхода, как я мог бы улучшить его и, возможно, поделиться чем‑то полезным.

Поскольку это интернет, давайте сразу обговорим: то, как я использую git основывается на последних 12 годах работы в компаниях с относительно небольшими (до 50 человек) командами. В каждой из них мы использовали только git и GitHub; изменения выполнялись в отдельных ветках, предлагались в виде пул реквестов и сливались в основную ветку. В последние несколько лет, после введения GitHub squash‑merging, мы использовали его.

Я никогда не использовал какую‑либо другую систему контроля версий. Я не могу и не буду сравнивать git с Mercurial, jj, Sapling, и т. д.

Итак, вот как я использую git.

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

Насколько быстры B-деревья по сравнению с хэш-таблицами?

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

Во многих «скриптовых» языках для стандартных ассоциативных структур данных используется хэш-таблица (hashmap) (объекты Javascript, словари Python и так далее). Хэш-таблицы обладают множеством раздражающих свойств:

  • Уязвимость к hash flooding.
  • В случае защиты от hash flooding случайными seed порядок итераций становится недетерминированным, что мешает при тестировании снэпшотов, создании воспроизводимых сборок и так далее.
  • При вставке может требоваться рехэширование, что в наихудших случаях создаёт для больших хэш-таблиц ужасные задержки.
  • Многократное увеличение больших распределений памяти без фрагментации сложно реализовать в целевых платформах wasm, потому что трюки с виртуальной памятью недоступны, а для страниц невозможно выполнить unmapping.
  • Векторные команды в wasm ограничены, а команды AES отсутствуют. Это делает многие хэш-функции ещё более медленными.

Упорядоченные структуры данных наподобие B-деревьев не имеют этих недостатков. Обычно они медленнее хэш-таблиц, но меня удивило, насколько разнятся ожидания людей относительно их скорости.
Читать дальше →
Всего голосов 13: ↑13 и ↓0+21
Комментарии3

SOLID на котиках

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


Каждый программист хоть раз слышал о принципах SOLID. На собеседованиях и экзаменах в вузах многие из нас пытались вспомнить, о чем же был тот самый принцип Лисков. Однако вряд ли цель преподавателей и интервьюеров — заставить нас заучивать строчки из учебников. SOLID действительно помогает писать качественный код, когда во всем разберешься! Если вы этого еще не сделали, добро пожаловать под кат. Еще раз взглянем на то, как устроены всем известные принципы. Обещаю — без духоты, все рассмотрим на примерах с котиками.
Читать дальше →
Всего голосов 115: ↑107 и ↓8+119
Комментарии82

Управление Данных с Elasticsearch: Обучение и Практика

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

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

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

Начать практику
Всего голосов 23: ↑20 и ↓3+19
Комментарии4

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

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

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

Наконец случилось чудо. В одну из очередных попыток я нащупал способ, который позволил продолжать развиваться, делать успехи, осознавать их и разжигать мой огонь всё сильнее и сильнее. Сегодня мне сложно представить день, проведенный без английского языка. И мне не хочется говорить без “изучения”, поскольку не сказал бы, что я именно учу. Скорее — постепенно “прошиваюсь” английским, как это обычно происходит с новорожденным детьми, которые постепенно начинают говорить, слушая и наблюдая за своими родителями. В настоящее время мой словарный запас не такой большой: 9 — 12 тысяч слов (зависит от теста). Я свободно смотрю видео на Ютубе разнообразной тематики (видеоуроки, спорт, фитнес, музыка, путешествия, кулинария, обзоры и т.д.), читаю документацию, компьютерную и популярную литературу, публицистику.

Читать далее
Всего голосов 143: ↑134 и ↓9+142
Комментарии291

Как мы стали заложниками скидок, акций, бонусов и кэшбэков…

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

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

Краткое содержание: вначале много хэйта, а ближе к концу — много конструктива.

DISCLAIMER: Я не противник всех этих прекрасных маркетинговых инструментов как таковых, я тоже всем этим пользуюсь, в частности коплю "мили" в AlfaTravel и эти мили потом трачу на перелёты и отели. Также я не против естественных скидок, когда, например, срок годности подходит к концу и на товар снижают цены, чтобы хоть что-то на нём заработать вместо того, чтобы потом выбрасывать его. Или скидок на старую и не столь актуальную коллекцию одежды.
Моя "претензия" лишь в том, что всем этим инструментам уделяется такое гипертрофированно повышенное внимание в рекламе, визуальных коммуникациях, UI/UX, и в результате в сознании самих людей, что это смещает доминанту с того "какой же продукт мне нужен" на то "как я могу сэкономить" и "какую комбинацию с кэшбеками / баллами / дисконтами / промокодами / скидками / акциями мне провернуть" и это занимает существенную часть оперативной памяти и "процессорного времени" людей. А бизнес, подсаживая клиентов на все эти инструменты, вынужден всё дальше и дальше делать на этом акцент и закручивать акционно-скидочно-бонусно-промокодово-кэшбэковую спираль.

Читать далее
Всего голосов 25: ↑21 и ↓4+31
Комментарии60

Пишем хорошие баг репорты. Рекомендации

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

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

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

Меня зовут Евгений Домнин, я QA и постараюсь поделиться видением, что делает баг репорт хорошим. Прошу простить за долгое вступление, давайте начнем.

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

Динамические модули в приложениях на Android: опыт использования Dynamic Feature Delivery

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

Размер приложения часто играет важную роль в восприятии его пользователями и принятии ими решения о скачивании. Исследования показывают, что чем меньше размер APK, тем выше вероятность его установки и тем реже оно оказывается в списке на удаление. Конечно же, это важно для команды Яндекс Go, так как наше приложение непрерывно развивается.

Для внедрения одной из SDK, основанной на Flutter, мы прибегли к механизму Dynamic Feature Delivery (DFD). Но оказалось, что в русскоязычном сегменте информации о DFD крайне мало, поэтому я решил поделиться нашим опытом работы с этим механизмом на Android с Google Play Feature Delivery Library.

Сегодня мы подробно разберём, как интегрировать механизм DFD в современную архитектуру Android‑приложения с использованием корутинов, а также протестируем загрузку и установку динамического модуля, использующего Flutter.

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

«Аська» ушла: вдохновляемся фичами, ставшими базой в мессенджерах

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

В конце июня остановил работу ICQ — мессенджер из нулевых, любимая многими «аська». В ней пользователи находили друзей по интересам, общались, когда на улице была непогода, и обменивались мемами еще до того, как это стало мейнстримом. Мы в Selectel решили поностальгировать и рассказать, чем нам запомнился мессенджер. Внутри — обзор шести классных фич, которые запали в душу нашим коллегам.
Читать дальше →
Всего голосов 52: ↑51 и ↓1+67
Комментарии82

HMAC-SHA256 и Telegram Mini App

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

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

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

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

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

Шифрование для облака: разные подходы

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


Облачные сервисы по-разному подходят к шифрованию данных на своём хостинге. В некоторых случаях это шифрование не удовлетворяет требованиям безопасности, поэтому приходится брать задачу в свои руки и шифровать файлы самостоятельно.
Читать дальше →
Всего голосов 27: ↑27 и ↓0+42
Комментарии6

Всё своё ношу с собой. Мои простые правила организации личной базы знаний

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

Помните те времена, когда Интернет был маленьким, модемы — медленными, а провайдеры — жадными? Мы сохраняли всё полезное у себя на винчестерах, героически пытаясь вместить всё нужное в скромный объём дискового пространства. Раньше это был единственный способ обеспечить себе быстрый и эффективный доступ к информации.

А потом высокоскоростной Интернет нас избаловал — мы перестали скачивать файлы и формировать свои собственные локальные библиотеки знаний и контента. Теперь всё лежит на сайтах и в облаках. Зачем что-то скачивать, если всё это моментально доступно по одному клику?

Но, похоже, настало время вернуться к истокам. Всё чаще оказывается, что нужный контент становится недоступным или меняется до неузнаваемости...

Читать далее
Всего голосов 76: ↑68 и ↓8+77
Комментарии140

Почему GitHub на самом деле победил: история глазами сооснователя

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

Недавно мы опубликовали в блоге перевод статьи о том, как GitHub заменил SourceForge в роли доминирующей платформы для хостинга кода. Но, как справедливо отметил автор оригинала, его мнение основано на открытых источниках и интервью с коллегами. А потом своим ви́дением поделился один из сооснователей GitHub, Скотт Чакон, который «действительно был там». Под катом — перевод его ответной статьи о реальных причинах победы GitHub. 

Читать далее
Всего голосов 43: ↑40 и ↓3+47
Комментарии9
1
23 ...

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность