Обновить
0
@MacInread⁠-⁠only

Пользователь

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

Вперёд к мечте! От JCUKEN к QWERTY на Специалисте

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

Когда в 19-летнем возрасте я покупал свой первый компьютер, то я очень сильно хотел купить БК-0010-01. Однако обстоятельства сложились так, что к моменту, когда у меня появилась необходимая сумма, в магазинах БК‑шек не осталось, и вообще ничего не осталось. На полке в «Электронике» лежало только невзрачное нечто с нарисованной клавиатурой и названием «ЛИК».

Читать далее

Стоимостной оптимизатор: сердце гибридной базы данных YDB

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

Я занимаюсь разработкой баз данных с 1999 года и сейчас работаю над YDB — базой данных, которую мы в Яндексе недавно выложили в опенсорс. Это моя шестая база данных и четвертая — массивно-параллельная. И каждый раз, когда основные задачи решены, я сажусь разрабатывать оптимизатор запросов. Под катом я кратко расскажу о том, что такое оптимизаторы запросов в базах данных и почему их непросто делать.

Читать далее

Kafka API для работы с потоками данных Yandex Data Streams — топиками YDB

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

Всем привет! Меня зовут Елена Калинина, и я технический менеджер проектов в команде YDB — в рамках Yandex Infrastructure наша команда создаёт технологии для работы всего Яндекса.

YDB — это распределённая отказоустойчивая СУБД с открытым исходным кодом. Для потоковых нагрузок в YDB реализован механизм персистентных очередей сообщений под названием YDB Topics. Топики YDB используются в качестве основной шины данных в Яндексе, что позволяет многократно экономить на серверах и их обслуживании.

Но что если какая‑то компания соблазнится такой экономией и захочет перейти с Apache Kafka на YDB Topics? Без API‑совместимых решений придётся переписывать весь код? К счастью, для работы с топиками YDB можно использовать Kafka API — и в этой статье я подробно покажу, как это сделать, на примере чтения и записи в поток данных и дальнейшей выгрузки в объектное хранилище в облаке.

Читать далее

Телефоны с определителем номера: история, принцип работы и исходные тексты

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

Телефоны с автоматическим определителем номера абонента (АОН) ворвались в повседневную жизнь внезапно и очень бурно. В этой статье я рассказываю об истории появления телефонов с определителем номера, принципе его работы и вариантах исполнений.

Читать далее

Robotron S6130 — Восставший из мертвых

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

История ремонта этой пишущей машинки тянется уже 8 лет! Шутка что ли, это Самый Первый Артефакт моего YouTube-канала!

Robotron S6130 — многофункциональная пишущая машинка формата A2 на базе процессора Z80, с функцией запоминания набранных текстов во встроенной оперативной памяти, с записью и воспроизведением на магнитофон, а также возможностью приема и передачи текстов с ЭВМ по последовательному порту!

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

Да начнется оживление

Как malloc() и free() управляют памятью в C

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

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

Сегодня рассмотрим, почему free() не всегда освобождает память, как работает malloc(), когда glibc действительно возвращает память в ОС, и как избежать фрагментации хипа. А так же напишем кастомный аллокатор.

Читать далее

Оптимизация компилятора на пальцах

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

Почему я это написал, и как читать статью

Недавно получил от друга такое сообщение:

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

Я сразу же подумал: «Ну конечно, я знаю тысячу статей и видеороликов на эту тему», но вскоре осознал, что практически во всех таких источниках от читателя требуется знать компьютерный жаргон, внутреннее устройство, промежуточные представления, т.д. Вот какая проблема здесь возникает: те, кто пользуется компиляторами (как, например, мой друг), всем этим не заморачиваются. Их не волнует, каково именно промежуточное представление LLVM, или что такое φ-узел, или какой проход и почему называется «ротацией циклов». Нет, их интересуют (в порядке убывания приоритета) ответы на вопросы: (1) что, (2) почему, (3) как.

Читать далее

Генерация PDF документов в Lazarus IDE

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

Для разработки различных заглушек, используемых для тестирования сервиса, пока не готова ответная часть, я иногда использую отрисовку нужной информации на Canvas PaintBox`а, и последующую генерацию PDF с отрисованной картинкой (сохраняю BMP в поток, затем загрузка из потока для размещения изображения в PDF) и дополнением документа текстовой информацией. Для реализации такого подхода я использую модуль fpPDF, который, на мой взгляд, является достаточно простым и удобным. Для ознакомления с возможностями модуля ниже привожу вольный перевод статьи разработчика данного модуля.

Читать далее

Как постараться* снимать видео на телефон как на профессиональную камеру: часть 2

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

Прошлый пост на эту тему вы засыпали разными комментариями. Благодарю вас, что читаете, размышляете, критикуете и советуете. Всегда интересно узнать мнение коллег и просто неравнодушных людей 😉 

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

Читать далее

Металлолом наносит ответный удар

Время на прочтение11 мин
Охват и читатели126K
Мы многого не знали про железнодорожные вагоны:
  • Вагоны в поезде не умеют обгонять друг друга. Но обгоняют.
  • Один из вагонов обычно не может взять и переехать на параллельный путь.
  • Считается, что вагоны одинаковой типовой длины. Но это не гарантирует, что последний будет в одном и том же месте, если выравнивать первый.

И, наконец, знакомьтесь, вагон, который приехал к нам по железной дороге:

image

Наши коллеги из НЛМК в какой-то момент сделали анализ металлолома в вагонах. Вагон фотографируется по мере разгрузки по слоям, потом приходит модель и оценивает засорённость и качество лома. Мы съездили к ним в гости, посмотрели и решили внедрить у себя.

В этот момент и проявилась разница между тем, что бывает в теории и на практике. Точнее, она проявлялась несколько раз по ходу процесса, что доставляло нам массу радости.
Читать дальше →

256 байт веселья, или как развлечь себя Ассемблером когда скучно

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

Это еще одна статья про демосцену, сайзкодинг, ассемблер, MS‑DOS и ретрокодинг. То есть, о том, как ночами напролет добровольно и бесплатно писать бесполезный и очень трудоемкий код, и получать от этого массу удовольствия (и седую бороду). Даже если вы уже пробовали и вам не понравилось, вам все равно стоит почитать. Возможно, вы что‑то делали не так. Например, использовали не те буквы и цифры. А еще тут есть подборка «демок» размером в 256 байт!

Читать далее

Германская танковая проблема: торжество статистики и один из первых примеров военного OSINT'a

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

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

Решением этой проблемы стал нетрадиционный подход, основанный на применении статистического анализа к, казалось бы, незначительным деталям — маркировке на захваченном немецком оборудовании. Этот метод, известный как «Германская танковая проблема», позволил получить удивительно точные оценки производства немецких танков, превосходящие по точности данные, полученные традиционной разведкой. История германской танковой проблемы демонстрирует, как статистические методы способны превратить, казалось бы, хаотичную информацию в ценные разведывательные данные, играя решающую роль в стратегическом планировании и ведении боевых действий. Однако, статистическим анализом производства танков всё не ограничивалось.

Читать далее

«Искра» божья. Вспоминаем персональный компьютер «Искра-1030»

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


Мы часто меняем и обновляем технику, но у каждого из нас наверняка есть самый любимый компьютер. Для меня такой машиной стала «Искра-1030», — ими были оснащены вычислительные лаборатории в нашем институте. Именно этот ПК остался в моих воспоминаниях, как самая интересная персоналка из всех, с которыми я имел дело в начале девяностых.
Читать дальше →

Одноплатник на 155-й серии — ЧПУ

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

А задумывались ли Вы, что можно сделать на ЭВМ «Берёста-4» с объемом памяти ПЗУ 256 байт? Многие из Вас скажут, что можно всего лишь поморгать светодиодом, а я скажу Вам, что можно сделать ЧПУ станок.

Читать далее

Как Linux создаёт и подсчитывает сокеты

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

Подробно о том, что происходит под капотом в ядре Linux, когда вы выполняете очередной системный вызов при работе с сокетами.

Читать далее

Удивительная история развития сортировки в JDK

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

Как вы считаете, если выполнить java.util.Arrays.sort(), то какая сортировка будет вызвана? Quicksort? Timsort? И та, и другая, потому что для объектов вызывается Timsort, а для примитивов (чисел int, long, float и так далее) — Dual-Pivot Quicksort. В JDK 6 для объектов использовался стандартный Merge sort, а для чисел классическая реализация Quicksort с одним опорным элементом, предложенная Джоном Бентли и Дугласом МакИлрой. В JDK 7 оба алгоритма поменялись: теперь объекты сортируются с помощью Timsort, автор Тим Петерс, а для простых типов данных используется Dual-Pivot Quicksort, предложенный мною вместе с Джоном Бентли и Джошем Блоком в 2009 году. Эта сортировка используется более 15 лет не только в JDK, но и в Android (хотя и немного устаревшая версия).

А зачем нам вообще второй алгоритм сортировки, если есть Timsort? Почему не использовать один и для объектов, и для примитивов? Сегодня я, как автор, расскажу историю Dual-Pivot Quicksort: как он начинался, как развивался и как продолжает развиваться сейчас.

Читать далее

Обходим блокировку VPN

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

Мой провайдер помимо замедления (читай полная блокировка) YouTube так-же стали блокировать соединения с моими рабочими VPN. Работодатель не очень любит, когда на встречах на вопрос о прогрессе, я неделю отвечаю, что у меня не работает VPN! Своими действиями, мой провайдер сам меня подтолкнул к поиску обходных путей.

Сразу скажу, обходной путь придумал не сам, мне его подсказал автор проекта zapret, а точнее его комментарий, более того, я использую его проект, чтоб смотреть нормально YouTube. Спасибо огромное!

Добавлю, я использую nftables и nfqws, если этот вариант работает у меня — это не значит, что оно заработает и у вас! Возможно, вам придётся изменить некоторые параметры.

Читать далее

Как malloc сломала JPGLoader в Serenity, или Как выиграть в лотерее

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

Пару лет назад мне выпала возможность расследовать в SerenityOS интересный баг, связанный с декодированием изображений JPG, которые по какой-то причине при просмотре выглядели так, как вы видите выше.

Странно, не так ли? Похоже, будто просто перепутали RGB и BGR. При этом внесение в JPGLoader.cpp следующего изменения:

-   const Color color { (u8)block.y[pixel_index], (u8)block.cb[pixel_index], (u8)block.cr[pixel_index] };
+   const Color color { (u8)block.cr[pixel_index], (u8)block.cb[pixel_index], (u8)block.y[pixel_index] };
    context.bitmap->set_pixel(x, y, color);

приводит к корректному показу картинки. Вроде бы можно считать дело закрытым!

…Но нет. Возникает вопрос, почему вообще произошёл этот сбой?
Читать дальше →

Байт-кодовые VM в неожиданных местах

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

Отвечая на вопрос в Twitter, Ричард Хипп написал, почему SQLite использует байт-кодовую VM для исполнения операторов SQL.

Вероятно, большинство людей ассоциирует байт-кодовые VM с языками программирования общего назначения, например, с JavaScript или Python. Но иногда их можно встретить в неожиданных местах! В статье я расскажу о тех, которые знаю.
Читать дальше →

Играем в крестики-нолики c RPN калькулятором

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

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

Игр для калькуляторов, как на просторах бывшего СССР, так и за рубежом громадное количество, остаётся только выбрать. Наиболее популярная — это «Посадка на Луну». Однако, для меня она показалась скучной и неинтересной, а сам код сложным и запутанным. Поэтому мой выбор пал на крестики-нолики, так как все мы играли в них в школе, и мне стало интересно сыграть в неё с калькулятором.

Реализовать игру решил на модели HP-32S, поскольку он мне очень полюбился за красоту архитектурной реализации и удобство программирования.
Читать дальше →
1
23 ...

Информация

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