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

Разработка

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

Xv6: учебная Unix-подобная ОС. Глава 5. Прерывания и драйверы устройств

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

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

Устройство прерывает процессор, когда требует внимания. Обработчик прерывания опознает устройство и вызовет процедуру драйвера. В xv6 это делает процедура devintr.

Файл kernel/console.c содержит код драйвера терминала. Драйвер обрабатывает символы из последовательного порта UART на RISC-V, которые человек вводит на клавиатуре.

QEMU эмулирует микросхему 16550 UART и подключает клавиатуру и экран к UART. На реальном компьютере 16550 управляет портом RS232, который работает с терминалом или другим компьютером.

Драйвер накапливает символы в кольцевом буфере cons.buf. Индекс cons.r указывает на первый символ, который прочтет функция consoleread. Буфер хранит строки символов, а индекс cons.w указывает на начало последней строки, которую еще вводит человек. Индекс cons.e указывает позицию курсора в последней строке для ввода следующего символа.

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

Новости

DIY клавиатура из фанеры

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

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

Читать далее
Всего голосов 32: ↑31 и ↓1 +30
Комментарии 5

Пагинация. Нестандартное использование Spring’овых Page и Pageable

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

Привет, Хабр! На связи Николай Пискунов, ведущий разработчик в подразделении Big Data. В прошлый раз в блоге beeline cloud я рассказывал о Spring Data JPA и Hibernate — поднимал вопрос решения проблемы динамически изменяемого запроса к базам данных. В этой статье я покажу, как применить спринговую пагинацию на интерфейсе List<>. 

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

Интерпретатор Brainfuck на Brainfuck

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

Когда-то давно, году в 2013-м, на глаза мне попался следующий код:

>>>+[[-]>>[-]++>+>+++++++[<++++>>++<-]++>>+>+>+++++[>++>++++
++<<-]+>>>,<++[[>[->>]<[>>]<<-]<[<]<+>>[>]>[<+>-[[<+>-]>]<[[
[-]<]++<-[<+++++++++>[<->-]>>]>>]]<<]<]<[[<]>[[>]>>[>>]+[<<]
<[<]<+>>-]>[>]+[->>]<<<<[[<<]<[<]+<<[+>+<<-[>-->+<<-[>+<[>>+
<<-]]]>[<+>-]<]++>>-->[>]>>[>>]]<<[>>+<[[<]<]>[[<<]<[<]+[-<+
>>-[<<+>++>-[<->[<<+>>-]]]<[>+<-]>]>[>]>]>[>>]>>]<<[>>+>>+>>
]<<[->>>>>>>>]<<[>.>>>>>>>]<<[>->>>>>]<<[>,>>>]<<[>+>]<<[+<<
]<]

Это интерпретатор языка Brainfuck, написанный на самом Brainfuck. Ссылки на оригинал у меня не осталось, только код, так что автора я назвать не смогу.

Мне всегда было безумно интересно узнать, как он работает. И теперь я решил наконец-то это сделать!

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

Истории

ActivityPub в Awakari

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

Сегодня всё больше и больше сервисов объявляют о своей поддержке ActivityPub, в том числе даже такие, как Tumblr или Threads. И это ожидаемо, так как ActivityPub позволяет сохранять контроль над собственными данными, в отличие от закрытых сервисов Meta. Кроме того, это позволяет обмениваться данными более независимо (Fediverse). Применение ActivityPub не ограничивается социальными сетями и блогами. Есть сервисы для хостинга изображений, видео, музыки и многое другое.

Если рассматривать все эти активности как события, то это позволит сервису Awakari открыть целое новое измерение в Fediverse. Используя Awakari можно отслеживать интересные события из неограниченного множества источников.

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

AI и системный анализ / бизнес-анализ

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

В последние годы про AI/ML не писал только ленивый. Но обычно тему рассматривают с «потребительской» стороны: сейчас вот любуются видеороликами от проекта Sora. Более нишевая тема — «как работать над ML-проектами» (о таком мы проведём онлайн-конференцию I'ML). И совсем уж малозамеченная тема — что это всё значит не для пользователей или разработчиков, а для системных аналитиков и бизнес-аналитиков.

Для таких специалистов мы проводим конференцию Flow. И когда спросили у Программного комитета «а какие новые тренды вы сейчас видите в своей сфере», они в первую очередь назвали как раз AI. 

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

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

Танцы с парсингом, kubernetes и миграция в Yandex Cloud: как мы делали «Контрагентио»

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

Речь пойдёт о сервисе, который изначально мы задумали как внутрикорпоративную систему проверки контрагентов, а затем разработали как коммерческий продукт. Коротко расскажем о том, что делает система, с какими проблемами столкнулись при разработке и как их решали, как запускали, разворачивали, и немного коснемся того,  что “под капотом” у DevOps. Полагаю, что пост позволит оценить усилия команды при создании сервиса, подсветит использование некоторых технических решений, которые нам показались оптимальными, покажет типичные проблемы систем с парсингом из множества разнотипных источников, и будет полезен коллегам при разработке других продуктов. Я честно постараюсь минимизировать рекламную составляющую до короткого дисклеймера и избавить пост от маркетинг булшит. 

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

Как связать натуральные ключи с суррогатным в Anchor Modeling

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

Хранить значения натуральных ключей необходимо, потому что они связывают хранимые данные с реальным миром (внешними классификаторами, реестрами и т.п.), и с ними работают бизнес-пользователи: в выпадающих списках, отчетах и дашбордах. Но в методологии Anchor Modeling для связи таблиц используются только суррогатные ключи, не подверженные изменениям, и это правильно. Поэтому нужно хранить связь натуральных ключей с суррогатным ключом, предпочтительно формата UUIDv7. Как же это сделать в методологии Anchor Modeling?

Получить ответ
Всего голосов 1: ↑0 и ↓1 -1
Комментарии 0

Экономим на Kubernetes с помощью OpenCost — и другие прелести FinOps

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

Вне зависимости от того, кто вы: небольшой стартап или развитая компания — задача управления затратами особенно важна. Модное понятие FinOps, оно же Financial Operations или Cloud Financial Operations, помогает организациям наиболее эффективно и экономически выгодно использовать облачные ресурсы.

Но как FinOps работает на практике? В этой статье рассмотрим один из способов применения этого подхода в управлении кластерами. Познакомимся с инструментом OpenCost и обсудим его работу в Kubernetes. Подробности под катом!
Читать дальше →
Всего голосов 10: ↑9 и ↓1 +8
Комментарии 0

Обрезать нельзя сжать. Как ускорить метрики проекта без больших вложений

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

Мы не раз читали на Хабре, почему важно иметь быстрые сайты, как это влияет на посещаемость, время на странице, глубину и прочее. Но каждый раз это инструкции о том, как поменять инфраструктуру серверов, потратить десятки часов на разработку и ощутимое количество денег. В случае больших корпораций, конечно же, такие действия оправданы. А маленькие стартапы обычно таким и вовсе не занимаются, фокусируясь на других задачах. Мы же оказались где-то посередине. У нас были плохие показатели, но времени на какие-то значительные изменения не было. И несмотря на наличие ресурсов мы решили пойти самым простым путём и, как и гласит закон Парето, получить 80% результата за 20% усилий. Меня зовут Савичев Игорь, я работаю в Самолете и мы занимаемся цифровизацией строительства на российском рынке. Мы развиваем IT-технологии в разных направлениях от девелопмента до финтеха. И сегодня я расскажу, можно ли сделать себе хорошо, быстро и не очень дорого.

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

Нелинейные корреляции. Моя любимая статистическая мера: D Хёфдинга

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

Предположим, у вас есть две последовательности чисел, которые вы хотите сравнить, чтобы измерить, насколько они связаны или зависимы друг от друга. Это действительно довольно общий сеттинг: две последовательности могут представлять временные ряды, так что у вас есть таблица с тремя столбцами и кучей строк. Первый столбец будет временем (скажем, с часовыми интервалами), а затем по одному столбцу для каждой последовательности; первый, например, может быть средней ценой акции за этот интервал, а второй - объемом торгуемых акций за этот интервал. Или вы могли бы сравнить процентное изменение цены одной акции по сравнению с другой. Конечно, это вовсе не обязательно должны быть временные ряды: у вас также может быть всего два столбца (то есть вообще без столбца времени). Первый может быть ростом американца старше 30 лет в дюймах, а второй — весом того же человека в фунтах. Или, чтобы использовать более актуальный пример, каждый столбец может представлять вектор эмбеддингов некоторых предложений на английском языке от определенной модели LLM. Первый столбец может быть вектором от модели Mixtral 8x7B для строки "I love my 3 sons" (Я люблю моих трех сыновей), а другой — от той же модели для строки "I cherish my 5 daughters" (Я дорожу моими пятью дочерьми).

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

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

Анатомия мошенничества «Заработай онлайн»

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

Все мы неоднократно отвечали на телефонные звонки от так называемых “сотрудников МВД” и “служб безопасности” банков. Если не вы лично, то кто-то из знакомых или родственников, сталкивались с аферистами при покупке или продаже товаров на Авито или Юле. Лично меня эти радости не обошли стороной. С учетом долгоиграющей карьеры в информационной безопасности (более 15 лет) я не могу остаться равнодушным к проблеме мошенничества в интернете и спекуляции на человеческих слабостях. Именно поэтому поделюсь с вами историей о том, как меня пытались вовлечь в схему развода на деньги простым призывом заработать онлайн. 

Читать далее
Всего голосов 34: ↑32 и ↓2 +30
Комментарии 14

API-автотесты: как достичь наиболее полного покрытия?

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

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

Под катом мы подготовили практический шаблон, который поможет вам в этом.

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

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

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн

SmartFlow: «В начале был пароль...» или новая аутентификация VK ID

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

Привет, Хабр! Исторически сложилось, что первым способом аутентификации (в 1960-х) с появлением доступных компьютеров стал пароль. О рисках его использования и об изобретённых человечеством альтернативах мы подробно рассказали в статье о будущем беспарольной аутентификации. Этот подход к проверке подлинности пользователя мы начали развивать с апреля 2022 года и развиваем по сей день.

Меня зовут Саша, я работаю Android-разработчиком в команде VK ID. Мой рассказ — про SmartFlow, новый процесс аутентификации ВКонтакте, нюансы его внедрения и отличия от старого процесса переключения факторов. Разумеется, рассказывать буду применительно к Android-платформе. 

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

Логический долг гораздо разрушительнее технического

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

Жили-были разработчики ПО, игнорировавшие рекомендованные методики наподобие предметно-ориентированного проектирования (Domain-Driven Design); они срезали углы, чтобы выпускать продукты быстро. Они думали: «Нам платят за написание кода, а не за проектирование!»

Менеджер по продукту, в свою очередь, игнорировал то, что игнорировала команда разработки. Он даже не мог сказать, чем именно они пренебрегали. Он был убеждён, что всё, не касающееся написания кода — пустая трата времени. Он думал: «Клиенты платят нам за работающее ПО!»

Спустя полчаса после запуска «работающее ПО» внезапно рухнуло из-за непредусмотренного (а значит, и неуправляемого) наплыва большого количества одновременных пользователей. Клиент считал, что менеджер по продукту и команда разработки должны немедленно устранить критическую проблему. Запуск был отменён.
Читать дальше →
Всего голосов 22: ↑17 и ↓5 +12
Комментарии 6

AutoLove: апдейты девушке с YandexGPT

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

Салют! Меня зовут Григорий. Как и у многих из нас, у меня есть вторая половинка, и ей свойственно требовать внимания. Сам по себе я человек занятой и мне бывает трудно отвлечься от дел и написать апдейт девушке, из-за чего приходиться терпеть капризы по причине «недостатка внимания». В статье я рассказываю, как YandexGPT и Python-Telegram «уделяли внимание» моей девушке.

Читать далее
Всего голосов 28: ↑24 и ↓4 +20
Комментарии 16

Краткий обзор развития лямбда-выражений в C++11, C++14, C++17 и C++20

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

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

Сегодня рассмотрим лямбда-выражения в C++ и их эволюцию с момента появления в стандарте C++11 и до последних обновлений в C++20.

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

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

Практическое применение Sliver’ов для создания современного UI

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

Hola, Amigos! На связи Саша Чаплыгин, Flutter-dev агентства продуктовой разработки Amiga. В телеграм-канале Flutter. Много мы с командой уже касались темы Sliver'ов. И сегодня я предлагаю больше погрузиться в практику.

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

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

Закрытие QIWI, как вернуть деньги с электронного кошелька

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

21 февраля 2024 по приказу ЦБ РФ была отозвана лицензия на осуществление банковских операций у QIWI и КИВИ Банк. 

Почему это важно и почему это многих беспокоит?

Финансовая организация занимала 89 место по величине активов среди российских банков, 77 миллиардов рублей активов, а также 10 миллиардов рублей чистой прибыли. Помимо счетов и платежных терминалов, компания открывала цифровые кошельки, активных из которых на момент остановки деятельности имелось 13,8 млн. Банк осуществлял международные переводы, клиенты пополняли через систему зарубежные карты, оплачивали сервисы. У части клиентов банка Точка (который пользовался лицензией QIWI) были открыты счета и они сейчас не могут пользоваться деньгами на них. Система международных переводов Contact, которая также принадлежала QIWI, прекратила операции.

Как вернуть средства
Всего голосов 13: ↑5 и ↓8 -3
Комментарии 6

Хакаем спортивные часы

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

Введение



Взглянув на эти часы, можно подумать, что это обычные часы для бегунов.

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

Позвольте мне объясниться…

Спецификации


Это Timex m851. В них установлены 8-битный CPU Seiko SC188, 48 КБ ROM, 2 КБ RAM и матричный дисплей 42x11.

CPU спроектирован с расчётом на работу со сверхнизким энергопотреблением — одной батарейки хватает на три года!

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


А что это за контакты сбоку? Это USB. Естественно, можно синхронизировать информацию наподобие встреч и тому подобного (для этого есть удобная Linux-библиотека).

И вот что интересно — у часов есть SDK, и он на удивление хорош!

Достаточно ввести $ cc helloworld.c и загрузить код в часы.

Изначально я не думал, что влюблюсь в эти часы — мастер разработки, который Timex предоставлял в эпоху Windows XP, был ужасен. Однако оказалось, что он просто управляет находящимся внутри тулчейном в стиле UNIX.

А если его вытащить, то хакинг становится довольно увлекательным занятием!
Читать дальше →
Всего голосов 24: ↑23 и ↓1 +22
Комментарии 4