Pull to refresh
135
0
Send message

Анатомия Hello World на языке C

Level of difficultyMedium
Reading time15 min
Views19K

Эта статья посвящена программе Hello World, написанной на C. Это максимальный уровень, на который можно добраться с языком высокого уровня, не беспокоясь при этом о том, что конкретно язык делает в интерпретаторе/компиляторе/JIT перед выполнением программы.

Изначально я хотел написать статью так, чтобы она была понятна любому, умеющему кодить, но теперь думаю, что читателю полезно иметь хотя бы некоторые знания по C или ассемблеру.
Читать дальше →
Total votes 99: ↑114 and ↓-15+129
Comments45

Фильтр Блума

Level of difficultyMedium
Reading time9 min
Views9.1K



У каждого разработчика есть набор инструментов для решения различных задач. Однако со временем возникает необходимость расширять этот набор, чтобы эффективно справляться с более сложными задачами. В этой статье я хочу познакомить вас с инструментом, которым вы, скорее всего, раньше не пользовались. И хотя он подходит для решения узкого спектра задач, его использование может оказаться весьма полезным. Знакомьтесь — "фильтр Блума" (Bloom filter).

Читать дальше →
Total votes 41: ↑44.5 and ↓-3.5+48
Comments12

Надежный обход блокировок в 2024: протоколы, клиенты и настройка сервера от простого к сложному

Level of difficultyMedium
Reading time45 min
Views136K

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

Вы, наверняка, помните отличный цикл статей на Хабре в прошлом году от пользователя MiraclePtr, который рассказывал о разных методах блокировок, о разных методах обхода блокировок, о разных клиентах и серверах для обходов блокировок, и о разных способах их настройки (раз, два, три, четыре, пять, шесть, семь, восемь, десять, десять, и вроде были еще другие), и можете спросить, а зачем еще одна? Есть две основные причины для этого.

Читать далее
Total votes 506: ↑498 and ↓8+490
Comments351

Что для вас Linux? Или как устроен запуск процессов

Level of difficultyMedium
Reading time15 min
Views37K

Как бы вы ответили на вопрос, что такое операционная система?

Скорее всего, вы легко сможете ответить на этот вопрос человеку далекому от IT, но подобный вопрос вам может задать, например, HR - в попытке переманить вас в какой-нибудь Facebook или Google. С одной стороны, ответить на этот вопрос очень легко и в интернете можно найти много определений, но относится ли, например, конфигурация DNS и файл /etc/resolv.conf к ОС ? Или в какой области памяти работает ОС - в памяти с безграничными возможностями для кода, называемой kernel space, или все же в лимитированной user space?

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

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

Когда пишешь приложения для себя

Level of difficultyEasy
Reading time12 min
Views28K

require 'glimmer-dsl-libui'
include Glimmer
window('hello world').show

Почти каждый из читателей Хабра настраивает домашнюю сеть, пишет скрипты для автоматизации умного дома, админит домашний сервер и т. д. Всё это практически «семейные обязанности» разработчика, как вынести мусор для семейного мужчины.

А как насчёт написать для своей семьи мобильное приложение? Это уже новый уровень.
Читать дальше →
Total votes 79: ↑77 and ↓2+75
Comments7

Создание PDF размером с Германию

Level of difficultyEasy
Reading time7 min
Views24K

Сегодня утром, пролистывая ленты социальных сетей, я уже в который раз встретила утверждение, что у PDF-документа есть максимально допустимый размер.

Подобное утверждение появилось на просторах интернета ещё в 2007 году. Этот твит является характерным примером постов с аналогичным заявлением, в которых оно преподносится как твёрдый факт без каких-либо подтверждающих свидетельств или объяснений. То есть мы должны просто принять, что один PDF может покрыть лишь около половины площади Германии, и нам никак не объясняют, почему его магический предел составляет 381 километр.

Тут мне стало интересно – а создавал ли кто-нибудь такой большой PDF? Насколько это сложно? А можно ли сделать документ ещё больше?

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

Приступим!
Читать дальше →
Total votes 126: ↑123 and ↓3+120
Comments57

Как работает компьютер: глубокое погружение (на примере Linux)

Level of difficultyHard
Reading time48 min
Views133K



Введение


Я делала много вещей с компьютерами, но в моих знаниях всегда был пробел: что конкретно происходит при запуске программы на компьютере? Я думала об этом пробеле — у меня было много низкоуровневых знаний, но не было цельной картины. Программы действительно выполняются прямо в центральном процессоре (central processing unit, CPU)? Я использовала системные вызовы (syscalls), но как они работают? Чем они являются на самом деле? Как несколько программ выполняются одновременно?


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


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


Более удобный формат статьи.

Читать дальше →
Total votes 152: ↑152 and ↓0+152
Comments36

Пишем трассировщик лучей для ZX Spectrum

Level of difficultyEasy
Reading time16 min
Views20K

Я люблю трассировщики лучей и даже посвятил им половину своей книги. Менее известна моя любовь к ZX Spectrum — домашнему компьютеру 1982 года, с которым я вырос и с которого начался мой интерес к графике и программированию. По современным стандартам эта машина столь смехотворно слаба (и даже по стандартам 1980-х), поэтому возникает неизбежный вопрос: в какой степени удастся портировать трассировщик лучей из книги Computer Graphics from Scratch на ZX Spectrum?

В ZX Spectrum установлен процессор Z80 на 3,5 МГц (в тысячу раз медленнее, чем современные компьютеры), который не может умножать числа (!!!), и 48 КБ ОЗУ (в миллион раз меньше); он имеет графический режим 256x176 (примерно в двести раз меньше современного разрешения), способный отображать 15 цветов (в миллион раз меньше, к тому же с довольно необычными особенностями). Интересная машина для графического приложения, активно задействующего CPU!

Я планирую реализовать его на Sinclair BASIC — встроенном языке программирования Spectrum. Это не просто BASIC, а древний, очень ограниченный диалект BASIC. Например, единственные структуры управления в нём — это FOR и IF (а у IF нет ELSE и даже ENDIF); все переменные глобальны; не существует вызовов функций, только GO TO и GO SUB; и так далее. Кроме того, он интерпретируемый, то есть сверхмедленный. Но, по крайней мере, он реализует программное умножение! Если мне нужна будет производительность, то я всегда могу переписать трассировщик на ассемблере.

Я настроил минимально необходимую среду: код на BASIC я пишу в VS Code, компилирую его с помощью BAS2TAP и запускаю в эмуляторе FUSE. Благодаря этому скорость итераций оказалась достаточно высокой.

Читать далее
Total votes 142: ↑141 and ↓1+140
Comments85

Калькуляторы с обратной польской нотацией

Level of difficultyMedium
Reading time12 min
Views14K

На хабре уже многократно проскакивали статьи и переводы о калькуляторах с обратной польской нотацией. Раньше я не придавал им большого значения, пока на глаза не попался перевод статьи «Мягкое знакомство с дополнительным кодом», где фигурировал программистский калькулятор HP-16C. Что сподвигло меня разобраться, что за зверь такой «обратная польская нотация» или reverse Polish notation (далее по тексту RPN).

Искра, буря, безумие… Спешно поставив эмулятор HP-16C на телефон, я полез искать калькуляторы с поддержкой RPN, попутно скупая найденные экземпляры. В этой статье хочу поведать о четырёх редких! экземплярах, которые мне удалось найти на отечественных досках объявлений, и дать некоторые рекомендации тем, кто решит прикоснуться к удивительному миру программируемых калькуляторов.
Читать дальше →
Total votes 133: ↑132 and ↓1+131
Comments80

Кабель SATA как радиопередатчик — скрытая передача данных

Reading time3 min
Views8.4K


Передача информации с изолированного (air-gapped) компьютера — нетривиальная задача, поскольку он отключён от сети и обычно находится в отдельном помещении. Но это возможно по сторонним каналам. Например, съём электромагнитного излучения с видеокарты или с других компонентов на материнской плате, распознавание нажатий клавиш по звуку и др.
Читать дальше →
Total votes 14: ↑9 and ↓5+4
Comments11

Бесплатные векторные карты на своём хостинге

Level of difficultyMedium
Reading time6 min
Views14K

Векторные карты Protomaps на базе OSM

Каждый веб-разработчик знает о OpenStreetMap (OSM), свободной альтернативе Google Maps. Несмотря на всеобщую известность OSM, у некоторых всё-таки возникают вопросы: как сделать веб-карту с открытыми данными OSM, как самостоятельно публиковать карты?

На эту тему есть популярные руководства, в том числе по работе с базами PostGIS и запуску тайлсерверов для реализации бесшовных карт OSM. Но есть принципиально иной подход — векторные карты Protomaps, которые обеспечивают более высокое разрешение, настройку внешнего вида и наложение произвольных меток. Они изначально предполагают максимальную простоту в создании своих карт. А главное, что разместить тайлы можно на своём хостинге или в облаке.
Читать дальше →
Total votes 89: ↑86 and ↓3+83
Comments12

Как запустить собственную GSM-сеть за пять минут при помощи SDR

Level of difficultyHard
Reading time10 min
Views35K
Приветствую всех!

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



Итак, в сегодняшней статье поговорим о том, как быть владельцам SDR, желающим запустить свою GSM-сеть. Узнаем, какой софт нужен, чтобы заставить её работать в прямом смысле слова за пять минут. Попутно запустим GPRS и ненадолго побываем в 2007 году. Традиционно будет много интересного.
Читать дальше →
Total votes 107: ↑107 and ↓0+107
Comments88

Zalman ZM-VE500 и неподдерживаемые ОС: «швейцарский нож» инженера дата-центра vs винтажные устройства

Reading time5 min
Views11K

На Хабре уже есть статья про Zalman ZM-VE500, написанная системным инженером ЦОД. Это одно из немногих устройств, которое содержит в себе эмулятор оптического привода и позволяет иметь под рукой сразу коллекцию ISO-образов операционных систем. Вот только любителям ретрокомпьютинга оно может преподнести несколько неприятных сюрпризов. Подробности — под катом.

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

Telegram показывает удаленные сообщения

Level of difficultyEasy
Reading time3 min
Views99K

Несколько дней назад я обнаружил, что Telegram приложение на Windows показывает давно удаленные чаты. При том, что их не было видно ни на телефоне, ни в Linux клиенте. Я поделился этим с друзьями, которые увидели то же самое.

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

Я начал исследовать «удаленные чаты» по API, и заметил, что у всех них проставлен флаг «deactivated», и присутствует параметр migrated_to. Документация Telegram API прямо говорит, что эти чаты повысили уровень. Кроме того, история переписки обычно обрывалась добавлением участников или инициализацией видеоконференции.

Читать далее
Total votes 86: ↑84 and ↓2+82
Comments111

Компилятор за выходные: лексер и парсер

Level of difficultyMedium
Reading time12 min
Views14K

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

Сегодня я публикую две статьи разом, поскольку по дороге меня довольно круто занесло, и получился небольшой спин-офф. Очень рекомендую к прочтению :)

Ну а тема этой статьи - автоматическое построение синтаксического дерева aka лексер и парсер.

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

Все оценки сроков разработки ПО — ложь

Level of difficultyEasy
Reading time15 min
Views26K

▍ Разработка ПО — это исследование


Требуют ли фармацевтические компании от исследователей сообщить им сроки создания лекарства от рака? Исследователи могут сообщить сроки выполнения конкретного исследования (и достаточно точные сроки, потому что планы исследований обычно имеют графики), но результаты наподобие «получения лекарства от рака» зависят от того, что выяснится в процессе экспериментов. Для прогнозирования подобных результатов нам заранее нужно знать результаты экспериментов, но если бы мы их знали, то эксперименты были бы не нужны. На самом деле мы не можем смотреть дальше, чем результаты следующего эксперимента, потому что этот эксперимент определяет дальнейший шаг.

В разработке ПО мы не тратим время на задачи, решения которых знаем. Если решения уже существуют, мы добавляем в качестве зависимости пакет или библиотеку с этим решением, или копируем старый код, или делаем что-то ещё, на что требуются секунды, а затем можем переходить к следующей задаче. Почти всё время разработки тратится на новые задачи, ответов на которые мы не знаем. Часто они новы ужасно скучным образом, например, «как нам сохранять эту модель данных с этими конкретными полями в эту конкретную базу данных?» Но именно из-за них эта ситуация отличается от всех остальных (или, по крайней мере, от тех, которые мы смогли найти) и именно это занимает всё наше время.
Читать дальше →
Total votes 80: ↑75 and ↓5+70
Comments67

Пару слов о конвейерах в FPGA

Reading time12 min
Views47K
Всем привет!

Многим известно, что во всех современных процессорах есть вычислительный конвейер. Бытует заблуждение, что конвейер — это какая-то фишка процессоров, а в чипах для других приложений (к примеру, сетевых) этого нет. На самом деле конвейеризация (или pipelining) — это ключ к созданию высокопроизводительных приложений на базе ASIC/FPGA.

Очень часто для достижения высокой производительности выбирают такие алгоритмы, которые легко конвейеризируются в чипе. Если интересно узнать о низкоуровневых подробностях, добро пожаловать под кат!
Читать дальше →
Total votes 46: ↑46 and ↓0+46
Comments54

МС6205. Плазменный дисплей советской эпохи

Level of difficultyMedium
Reading time12 min
Views15K
Приветствую всех!
За годы своего существования советская промышленность успела выпустить многие десятки моделей газоразрядных индикаторов, начиная с опытных и заканчивая серийными. Среди них особый интерес вызывают матричные. Их было меньше всего, но именно они являются самыми интересными.



Итак, в сегодняшней статье рассмотрим, пожалуй, самый легендарный индикаторный прибор из этой серии — дисплей МС6205 на базе индикаторной панели ГИП-10000. Узнаем, как его запустить и как он устроен, попутно напишем софт для управления им. Традиционно будет много интересного.
Читать дальше →
Total votes 105: ↑105 and ↓0+105
Comments117

С новым годом: GPT в 500 строках на SQL

Reading time42 min
Views37K

В минувшем году все только и говорили об ИИ и о том, как он может всё за вас сделать.

Мне нравится, когда кто-то или что-то работает за меня. Поэтому решил: попрошу-ка ChatGPT написать за меня новогодний пост:

«Эй, ChatGPT. А ты можешь реализовать большую языковую модель на SQL?»
«Нет, SQL не подходит для реализации больших языковых моделей. Язык SQL предназначен для выполнения запросов к данным, хранящимся в РСУБД и для управления этими запросами. Для реализации большой языковой модели требуются сложные алгоритмы, обширные датасеты, а зачастую — и фреймворки для глубокого обучения. SQL всеми этими возможностями не обладает.»

Что ж, лишний раз убеждаешься, что, если хочешь что‑то сделать хорошо – сделай это сам.

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

Читать далее
Total votes 215: ↑211 and ↓4+207
Comments21

Как появился графический интерфейс пользователя: история в лицах, деталях, фактах и курсорах

Reading time15 min
Views7.1K

Графический интерфейс пользователя, каким мы его знаем сегодня, возник в результате десятилетий исследований множества инженеров и ученых. Программа Sketchpad Айвена Сазерленда, созданная в 1962 году, считается первым графическим интерфейсом пользователя.

Дуглас Энгельбарт изобрел компьютерную мышь в 1964 году, чтобы преодолеть ограничения световых перьев. Конструкция мыши продолжала развиваться. Исследователи PARC разработали первые растровые окна и меню, которые реагировали на ввод данных мышью. Дэвид Кэнфилд Смит в 1975 году ввел термин «иконка» для описания графических символов, представляющих программы и данные. 

Xerox Star в 1981 году коммерциализировал многие из этих концепций графического интерфейса, а Macintosh от Apple в 1984 году сделал их общепринятыми. В настоящее время ведутся юридические споры о том, кому принадлежат права интеллектуальной собственности на различные элементы графического интерфейса пользователя, такие как окна и значки.

Читать далее
Total votes 28: ↑28 and ↓0+28
Comments10
1
23 ...

Information

Rating
Does not participate
Registered
Activity