Обновить
170.69

Ненормальное программирование *

Извращения с кодом

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

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

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


ПЛИС-культ привет, FPGA хаб!


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


Но всё новое — хорошо забытое старое, поэтому решил изложить в текстовом виде несколько идей, которые легли в основу стримов.


И в этой заметке предлагаю вам погрузиться в небольшое исследование c реализацией конвейеризованного многоразрядного сумматора всего с 1 уровнем логики, эдакого LUTа в сферическом вакууме, идеи которого, я уверен, найдут отклик в исследовательских работах начинающих адептов программируемой логики.

Читать дальше →

Запустится ли это в Doom? Калькулятор, работающий на демонах

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

Да


Десятки лет мы задавались вопросом: «Запустится ли на этом устройстве Doom?». Теперь мы наконец можем задать вопрос иначе: «Запустится ли этот код в Doom?»

В статье я продемонстрирую, что в Doom можно запускать любые конечные вычисления, если не учитывать ограничения размеров уровня. Я не доказал, что Doom полон по Тьюрингу (см. ниже).

Система отлично работает с «ванильным» релизом Doom 2 (v1.9) для MS-DOS. Никаких модов и тому подобного не требуется!

Я люблю подобные проекты. Меня вдохновляют эзотерические машины в других играх, например, в Minecraft и RollerCoaster Tycoon.
Читать дальше →

Две культуры программирования: почему обе из них важны?

Время на прочтение13 мин
Охват и читатели59K
Уже несколько лет я замечаю, что программисты и программистские инструменты делятся на две разные культуры:



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

Вычисление сигнатуры строки для её применения в сортировке строк в алфавитном порядке по всем символам

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

Динамическое вычисление сигнатуры строки с возможностью применения этих сигнатур для сортировки строк в алфавитном порядке по всем символам.

Как отсортировать строки в алфавитном порядке не сортируя их в алфавитном порядке.

Читать далее сортировка строк в алфавитном

Как создать свою СУБД с нуля и не сойти с ума. Практическое пособие начинающему некроманту. Часть первая

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

Наступил Апокалипсис.

Нет, не стоит бежать запасаться банками с консервами и крышками отечественной бай-колы! Апокалипсис произошёл только в нашей фантазии и с определённой целью — чтобы проверить, а может ли человек, обладающий только книгами по теме и стандартной библиотекой языка, воссоздать инструмент, который будет служить ему верой и правдой?

Так родился учебный проект SicQL, реляционная СУБД, чей символ — сова — это олицетворение силы знаний и мудрости. Олицетворение тех знаний и той мудрости, которые мы получим, создав с нуля то, чем мы пользуемся каждый день, может, не осознавая всей сложности таких инструментов.

Приглашаю присоединиться к увлекательному путешествию!

Принять приглашение на борт

Примеры кошмарного софта вокруг нас

Время на прочтение5 мин
Охват и читатели57K
Источник: amansinghblog

В далёкие 90-е мы с нетерпением ждали релизов любимых программ с новыми фичами. Но с выходом MS Office 2000 (на скриншоте) стало ясно — что-то пошло не так. Оказалось, новые функции не только помогают, но и мешают…

И сейчас главная задача — отключить обновления во всех программах. Дошло до того, что приходится копаться в многолетних архивах того же uTorrent, чтобы найти версию без рекламы, которая работала нормально, пока не пришли бодрые менеджеры и не испортили программу на годы вперёд… То же самое по остальным инструментам, которые обрастают фичами и реально деградируют.
Читать дальше →

Как (и зачем) я писал README в Jupyter-ноутбуке для Node.js-приложения

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

На одном из прошлых мест работы я поддерживал консольную Node.js-утилиту, которая публиковалась в NPM. Утилита использовала commander, содержала довольно большое количество подкоманд, и все они требовали описания в README-файле, которое нужно было не забывать обновлять при каждом изменении. Несколько лет спустя я нашел решение, используя не слишком привычные для экосистемы Node.js технологии.

В этой статье: много моей любви к Jupyter-подобным ноутбукам, инструкция про то, как затащить Python-пакет в NPM и чуть-чуть анализа трекерной музыки.

Читать далее

TOTP-аутентификатор на самодельном компьютере

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

Здравствуйте, господа программисты и не только. Снова наш веселый Отдел Перспективных Разработок выходит на связь с новой заметкой, посвященной очередной бесполезной, но, интересной для весьма узких кругов теме.

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

Запалом послужила вот эта статья на Хабре, посвященная созданию генератора паролей на базе Commodore 64. Жаль, что это перевод иностранного материала, тем не менее, мы перехватим эстафетную палочку и создадим генератор на чём-нибудь таком же бесполезном в наше время, что есть под рукой. Например, на компьютере Z80-MBC2 с процессором Z80 на борту.

Читать далее

Кастомный аллокатор для закрытого 3rd

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

Существует ряд ситуаций, когда это имеет смысл. От полного контроля памяти, до вынужденной необходимости. К примеру, одна из возможных ситуаций:
1. Мы используем alignment аллокаторы.
2. Мы перегружаем какой-то класс и данные от нашей 3rd зависимости.
3. 3rd зависимость не использует alignment аллокаторы.

Читать далее

Пишем мультиметоды из Lisp в С++

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


В статье разберёмся что такое мультидиспетчеризация и как её можно воссоздать на С++

Читать далее

Полиморфные структуры данных и производительность

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

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

Читать далее

Превью профессии «говорящий с нейросетями»

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

Все уже слышали, что openAI выпустили в свет свою новую нейросеть-ассистента, так что я решил попробовать на что она способна и описать свой опыт взаимодействия с этим.. Этой... Сущностью.

Разговор будет вестись как с человеком в вежливой форме, так как оказалось, что нейросеть очень хорошо запоминает = )

Начнём с чего-то простого, попросим сгенерировать на языке CMake простую программу

Читать далее

Мысли о разумном Maintainability в этом несовершенном мире

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

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

Читать далее

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

Как устроена работа thread_local переменных: разбираемся и добавляем поддержку в учебную ОС

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

Эта статья написана по мотивам моей курсовой работы, основной смысл которой описан здесь. В процессе работы над ней мне понадобилось добавить в учебной ОС, над которой я работал, поддержку thread_local переменных, о чём я и хочу здесь рассказать в надежде что кому-то это окажется полезно.

Здесь рассмотрен совсем простой случай: поддержки динамической загрузки других бинарников не будет, а способ реализации рассмотрен только один.

Код расположен в двух репозиториях.

Читать далее

Пишем на С++ вектор, умеющий расширяться без копирования элементов

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

В языке С есть функции malloc, free и realloc. При использовании последней вы можете написать этакий расширяющийся массив из примитивных типов или структур (классов-то нет), который, можно надеяться, не будет копировать все данные при каждом расширении. В С++ есть встроенный класс vector, который представляет из себя расщиряющийся массив, но он так не умеет: при каждом расширении вектора выделяется новый участок памяти и все элементы перемещаются на него (по возможности, с использованием move-семантики). Но ведь, если можно каждый раз не копировать все старые элементы на новое место, вектор должен работать быстрее? В этой статье я попробую написать вектор, который умеет расширяться без копирования элементов.

Код приведён здесь.

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

Читать далее

Пишем try-catch в C не привлекая внимания санитаров

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

Конструкция try-catch есть во всех широко используемых сегодня языках, кроме C. Не в силах мириться с вопиющей несправедливостью, попробуем написать свою реализацию этой конструкции

Читать далее

Пишем свой ROM BIOS

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

Со стародавних времён хотел попробовать создать собственный ROM BIOS, который будет записан в отдельную микросхему и будет выполнять какие-то полезные действия. Например, ROM BIOS установлен в видеокартах (по крайне мере старых), контроллерах дисков и много где ещё — это фактически расширения обычного BIOS. Понимаю, что это всё старьё и тягаться с возможностями современного UEFI бессмысленно, но мне очень хотелось создать свой собственный образ, который находится физически в отдельной микросхеме и работает при старте системы. Поэтому пришлось даже для этих целей найти старый комп.

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

В этой статье мы с вами разберём создание своего ROM BIOS, дальше я расскажу про тонкости и нюансы, напишу низкоуровневый «Hello world», сделаю настоящий интерпретатор BASIC ROM, который стартует при включении компьютера, как в первых IBM PC.
Читать дальше →

Игры наших бабушек

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

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

Читать далее

Непредсказуемые инвестиции с Python

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

О чем эта статья: В основном, о том, как создать рандомайзер биржевых активов используя данные Московской и Питерской бирж на Python.

Кому не важна реализация то вот готовый код с минимальными инструкциями по запуску. Ну или можно воспользоваться телеграмм ботом для всего-того же самого, но в удобном формате (если он не работает, то скорее всего я перестал платить за админку ?). А в самом низу есть небольшое подведение итогов.

Читать далее

Продолжение серии статей про работу исключений в С++ «под капотом»

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

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

Читать далее

Вклад авторов