Pull to refresh
13
-0.1
Send message

«А поменяйте мне фсе зубы» — история пациента с Хабра

Reading time17 min
Views39K
Тут мы продолжаем рассказывать про то, как вы взаимодействуете с нашими уютными клиниками. Иван (имя пациента изменено) пришёл к нам после долгого и вдумчивого чтения блога на Хабре, а до этого лет десять, наверное, не был вообще ни у каких стоматологов.

Когда он впервые сел ко мне в кресло, у него не было вообще ни одного целого зуба. Это не преувеличение ради красного словца — реально ни одного! Спустя год и примерно пятьдесят визитов в клинику у Вани улыбка, как говорится, — на миллион! Точнее, на три.

Он сам захотел рассказать здесь свою историю. Поэтому вот.

image
Это Иван, он прошёл зубной квест на хард-левеле и радуется

Сначала будут Ванины впечатления, а потом я, Леван, его ортопед, расскажу, как мы реставрировали его зубы. И заодно про то, как мы работали со сложным пациентом, который мог сорваться и уйти в закат с любого приёма, плюс дополнительно у нас не возникла симпатия с первого раза, что неудивительно, если знать его анамнез.
Читать дальше →
Total votes 118: ↑106 and ↓12+120
Comments230

Сравнение алгоритмов ограничения частоты запросов

Level of difficultyMedium
Reading time7 min
Views6.4K

▍ Зачем ограничивать частоту?


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

Видео


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

Конечные точки API тоже часто ограничивают по частоте запросов, чтобы их ресурсы не монополизировал единственный пользователь. Представьте, что вам нужно, чтобы пользователи могли обращаться к затратной конечной точке не чаще ста раз в минуту. Это можно отслеживать при помощи счётчика, обнуляющегося каждую минуту. Все запросы после сотого в пределах этой минуты будут блокироваться. Это один из простейших алгоритмов ограничения частоты, называющийся fixed window limiter (ограничитель с фиксированным окном). Это распространённый способ управления трафиком к сервису.

Но не всегда всё так просто.

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

В этом посте мы рассмотрим три самых популярных алгоритма, чтобы ответить на каждый из этих вопросов.
Читать дальше →
Total votes 34: ↑34 and ↓0+53
Comments4

Почему я отказался от разработки игр на Rust, часть 3

Level of difficultyMedium
Reading time16 min
Views9.6K

Часть 1
Часть 2

Ситуация с GUI в Rust просто ужасна

В сообществе Rust ходит шутка, что на 5 игр существует 50 игровых движков; наверно, ещё одна такая шутка нужна про фреймворки GUI. Люди пробуют разные подходы, что, учитывая полную обобщённость Rust как языка, имеет смысл. Но в этой статье мы говорим о разработке игр, и я считаю, что в этой сфере у нас не просто дефицит, а полное отсутствие решений.

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

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

Читать далее
Total votes 25: ↑23 and ↓2+32
Comments77

Собираем балансирующий куб

Level of difficultyEasy
Reading time8 min
Views23K

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

Первоначальная идея этого устройства взята у исследователей Швейцарской высшей технической школы Цюриха, продемонстрировавших в этом видео свой Cubli. За последующие годы дизайн в определённых аспектах был усовершенствован. В частности, Bobrow et al (Университет Сан-Паулу) предложили улучшенную концепцию управления, уменьшающую количество IMU (блоков инерциальных датчиков) с шести до всего одного.

Я решил собрать такое устройство. Хотя идея и не нова, все предыдущие работы по этой теме в основном имели закрытые исходники. Я планирую изменить ситуацию. Это значит, что мне придётся выполнить реверс-инжиниринг и начертить всё с нуля. Результат моей работы, полностью опенсорсный (GitHub), показан в видео.
Читать дальше →
Total votes 121: ↑121 and ↓0+144
Comments42

70+ бесплатных приманок для ловли хакеров

Reading time12 min
Views24K

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

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

Читать далее
Total votes 49: ↑49 and ↓0+49
Comments4

О, «Герои»? Дайте две! Как я писал очередной браузерный клон легендарной стратегии, в который уже почти* можно играть

Level of difficultyEasy
Reading time14 min
Views35K


TL;DR для тех, кому некогда читать™:




Вот как всё начиналось
Total votes 191: ↑191 and ↓0+191
Comments79

Самый детальный разбор закона об электронных повестках через Госуслуги. Как сняться с военного учета удаленно

Level of difficultyEasy
Reading time19 min
Views238K

Новый закон об электронных повестках потенциально касается практически всех российских мужчин от 18 до 70 лет. Я узнал у адвоката со специализацией в вопросах мобилизации, чем конкретно нам грозят эти нововведения, и можно ли как-то «выписаться из военкомата» удаленно.

Читать далее
Total votes 267: ↑228 and ↓39+260
Comments612

Как контрибьютить в проект, о котором ничего не знаешь

Level of difficultyMedium
Reading time7 min
Views6.8K

Bun


В последнее время мне очень нравится Bun. Это новая среда исполнения JavaScript / TypeScript, схожая с Deno / Node. Она имеет одно преимущество по сравнению с другими средами исполнения, которое очень важно для меня: очень быстрый запуск (по крайней мере, для JS). Когда я впервые запустил в ней небольшой кусок кода, то просто не мог поверить.

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

Однако на то есть причина. Как бы вы ни оптимизировали инструменты для выполнения тестов наподобие Vitest, Jest или Ava, первый прогон теста (без watch) всегда будет выполняться чрезвычайно медленно в Node, потому что для запуска V8 и разрешения модулей требуется куча времени. Когда ты распределяешь работу на несколько процессов, чтобы использовать все ядра, это требует ещё больше ресурсов!
Читать дальше →
Total votes 38: ↑36 and ↓2+51
Comments1

Приделываем руки к ChatGPT: бот, который исполняет код в рантайме

Level of difficultyEasy
Reading time5 min
Views34K

В предыдущей статье я рассказывал, как можно доучить GPT на собственных взглядах и вкусах. Сегодня попробуем дать GPT возможность поработать программистом по‑настоящему — с запуском кода и отладкой без участия человека. Весь код опубликован в репозитарии.

Как многие уже убедились, ChatGPT хорош, но есть некоторые типы задач, с которыми у него возникают трудности:

1. Он не может получать новые актуальные знания из сети.
2. Он не может выполнить какие‑либо действия.
3. У него сложности с алгоритмическими задачами (перевернуть строку, решить уравнение, произвести вычисления с применением численных методов).

И если задача 1 решается с помощью BingChat, то 2 и 3 мы сегодня будем решать в рамках данного туториала.

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

Дальше много примеров и немного кода...
Total votes 47: ↑46 and ↓1+60
Comments30

Telegram безлимитен, но старые сообщения пропадают. Почему?

Level of difficultyEasy
Reading time5 min
Views95K

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

Обо всем этом и не только мы написали в нашей первой статье.

Читать далее
Total votes 103: ↑95 and ↓8+113
Comments168

О вреде GOTO-фобии (с примерами на C)

Reading time17 min
Views31K

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

Читать далее
Total votes 95: ↑88 and ↓7+115
Comments344

Озон и мошенники

Reading time6 min
Views72K

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

Обо всем по порядку. Ситуация классическая — мне нужны были наушники AirPods, которые я пошел выбирать на Озон, т.к. последнее время часто там что‑нибудь покупаю. При первом же поиске обнаруживаю, что разброс предложений по цене слишком неприличный — от 3000р. до 23 000р. Ну не могут же AirPods Pro 2 стоит 3000р.? Не могут. А сколько могут? Ну беру золотую середину и начинаю искать адекватное предложение от известного магазина с хорошим рейтингом и положительными отзывами на товар. Нахожу предложение от Технопарк за 11 700р. с припиской, что скидка 43%. Чего это они столько скинули? Да бог их знает, им виднее. Это ж Технопарк — крупная сеть, подделку уж точно продавать не будут. «Лох классический», скажете вы, и наверное доля правды в этом есть. Но и на старуху бывает проруха. Мошенники бы не ели свой хлеб, если бы периодически каждый из нас не оказывался в ситуации, когда его бдительность притупляется.

В общем я зашел в карточку товара, там было довольно много отзывов, все положительные, везде написано, что наушники оригинальные и т. п. У самого продавца была пометка Premium, рейтинг 5 звезд и вроде бы все достаточно убедительно. Заказываю!

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

Читать далее
Total votes 155: ↑138 and ↓17+158
Comments342

20 уроков, которые я вынес из 20 лет работы программистом

Level of difficultyEasy
Reading time9 min
Views116K
Вы приступаете к чтению статьи с высокой концентрацией советов. Учиться у предшественников – хороший способ добиться успеха, но здесь мы часто забываем о важной оговорке. Практически любой совет работает только в определенном контексте, но дается обычно без каких-либо указаний на него.

«Да просто повысьте цены!» — говорит компания, которая уже двадцать лет на рынке и первые годы продавала продукт за копейки, чтобы привлечь клиентов и прийти к успеху. «Нужно всё реализовать в микросервисах», — говорит компания, которая по-быстрому сколотила монолит, набрала несколько тысяч пользователей и метнулась к микросервисам, когда начались проблемы с масштабированием.

Без понимания контекста советы теряют смысл или, хуже того, приносят вред. Если бы люди из примеров выше последовали своим собственным советам в начале пути, то, вероятно, пожалели бы этом. Этой ловушки сложно избежать. Мы представляем собой кульминацию своего опыта, но при этом смотрим на него через призму настоящего.
Читать дальше →
Total votes 135: ↑128 and ↓7+152
Comments115

Chrome Headless против cloudflare JS challenge

Level of difficultyMedium
Reading time41 min
Views22K

Автоматизация сбора информации с различных ресурсов - обычная задача для людей разных сфер деятельности. Жаль, что не всегда бывает достаточно сделать простой GET запрос и разобрать полученный html. Веб-сайты, с которых собираются данные, принимают защитные меры для предотвращения автоматизированных запросов. Одной из таких мер является использование cloudflare. Сегодня мы посмотрим, как cloudflare выявляет ботов через javascript и коснёмся темы деобфускации скриптов.

Читать далее
Total votes 82: ↑82 and ↓0+82
Comments6

Сам себе сотовый оператор

Reading time14 min
Views91K
… Кроме типовых для журнала статей, там была статья за авторством некоего «DI HALT» про то, как из двух телефонов и микроконтроллера извлечь кучу лулзов. «Прикольный ник» — подумал мальчик Андрей и перелистнул страницу, ибо ниасилил. А за ней была статья того же автора про то, как скрестить флешку с мышкой. «А вот это нам под силу» — подумал мальчик и убил уже знакомую вам флешку банальной переполюсовкой. Но зато он понял, что электроника — это весело и почти безопасно. — с просторов



Приветствую всех!

Многие из вас наверняка слышали про OsmocomBB. Однако каких-то исчерпывающих мануалов по запуску почему-то крайне мало. Итак, в ходе данной статьи постараемся максимально простым образом запустить собственную базовую станцию из доступных комплектующих. Постараемся разобраться, как сделать так, чтобы оно точно заработало.
Читать дальше →
Total votes 342: ↑342 and ↓0+342
Comments135

Как избавиться от Postman с помощью Emacs Org Mode

Reading time12 min
Views5.4K

К старту курса по тестированию на Python при помощи шаблона Read the Docs, пакетов restclient, ob-restclient и Org Mode в Emacs напишем красивую, полезную документацию API, которая генерируется автоматически и легко отображается на статическом сайте.

Читать далее
Total votes 3: ↑3 and ↓0+3
Comments7

Как я полюбил vim, Emacs и клавиатуру

Reading time13 min
Views75K
В какой-то степени эта статья ответ — или, скорее, дополнение — к публикации «Зачем vi-топор программисту 21-го века». Я увидел, что в комментариях люди по-прежнему удивлялись: какой смысл в этих редакторах, когда есть полноценные IDE; статья приводила немного реальных примеров и, понимая, что мне есть, что сказать, я решил поделиться собственным опытом. Написано в художественном стиле, так как думаю, если бы люди хотели сухую выжимку, они бы просто пошли читать мануалы. Так же предупрежу, что в мануалах по Емаксу клавиша «Alt» упоминается как «Meta». Я буду говорить «Alt», так как для многих это название привычней.
Читать дальше →
Total votes 51: ↑41 and ↓10+31
Comments191

Система увлажнения воздуха для дома или квартиры

Reading time5 min
Views38K

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

Читать далее
Total votes 99: ↑99 and ↓0+99
Comments101

Зачем Clojure Flutter

Reading time13 min
Views7.8K

”Если вам нравятся Руби, Свифт, Дарт, Эликсир, Эльм, С++, Питон или даже С, используйте их ради бога. Но выучите Кложур, и выучите его хорошо” — Дядя Боб (твит, а также твиты: 1, 2, 3).

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

Читать далее
Total votes 15: ↑13 and ↓2+12
Comments17

Как работает Wine

Reading time10 min
Views73K


Wine — это свободное программное обеспечение для запуска Windows-приложений на нескольких POSIX-совместимых операционных системах, включая Linux, macOS и BSD.

Если вы любите Linux, то наверняка когда-то запускали Wine. Возможно, для какой-то «важной» программы Windows, у которой нет аналога под Линуксом, или поиграться. Забавный факт: даже Steam Deck от Valve запускает игры через оболочку на основе Wine (она называется Proton).

За последний год я намучился с отладчиком, который позволяет одновременно дебажить и Wine, и Windows-приложение в нём. Разобраться во кишочках Wine оказалось очень интересно! Я-то раньше много им пользовался, но никогда не понимал механику целиком. Можно взять файл Windows — и просто запустить его в Linux без каких-либо изменений. Если вы хотите знать, как это сделано, добро пожаловать под кат.
Читать дальше →
Total votes 188: ↑187 and ↓1+230
Comments48
1
23 ...

Information

Rating
Does not participate
Registered
Activity