Pull to refresh
15
0
Кулабухов Дмитрий @kuldiegor

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

Send message

Как работает протокол X11 на самом нижнем уровне

Level of difficultyMedium
Reading time13 min
Views40K

X11 это тот механизм на чем работает весь графический интерфейс Unix подобных ОС.


Но мало кто знает как он работает на самом деле. Потому что с годами он оброс слоями и слоями библиотек, которые стремятся скрыть саму сущность протокола.


А протокол в своей сути прекрасен. Он лаконичен и почти совершенен.


В Интернете есть полная документация по протоколу. Но дело в том, что эта документация большая, написана не совсем ясным языком и, по сути, является просто спецификацией. Важные моменты никак не обозначены, а как использовать – тоже оставлено на фантазию читателя.


А все книги и статьи по использованию X11 описывают это через библиотеки прокладки типа XLib и XCB, и даже, что хуже, GTK или Qt.


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


Как бы то ни было, если кому-то интересно как все работает на самом деле, пожалуйста под кат.

Читать дальше →
Total votes 160: ↑158 and ↓2+197
Comments182

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

Level of difficultyHard
Reading time48 min
Views156K



Введение


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


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


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


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

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

История ограничений фоновой работы в Android для разработчиков

Level of difficultyMedium
Reading time19 min
Views13K

Когда-то в Android были времена, когда запустить задачу в фоне было просто и гарантии ее работы были высоки. Теперь же в ОС есть множество ограничений: работа в фоне, доступ к файловой системе, системы оптимизации расхода батарейки, разрешения, часть которых требует одобрения модераторов Google Play. Разработчикам приходится работать в условиях всех этих ограничений и учитывать их при разработке функций. В рамках этой статьи я хочу разобраться с ограничениями, которые есть на разных версиях Android, чтобы вы смогли лучше понимать, что может происходить.

Читать далее
Total votes 31: ↑30 and ↓1+33
Comments51

Создание надстроек для отечественного офисного пакета «МойОфис». Часть первая, вводная

Level of difficultyEasy
Reading time10 min
Views4.3K

Поскольку это первая моя публикация на Хабре, хотя как читатель я присутствую здесь уже довольно много лет, я скажу пару слов о себе. Вообще мой стаж как программиста, если учитывать и студенческие годы, когда я под руководством моего руководителя практики начал изучать С и С++ еще в 1992 году (откидываем программирование на калькуляторах, это всё таки баловство), уже более 30 лет. Много чем занимался в этой сфере, и что перепробовал по работе и чисто из интереса.

Несколько более «известным»  я стал с 2016 года в кругу тех, кто активно использует станки ЧПУ, как разработчик средств автоматизации (макросов) под CorelDraw. Тем не менее,  сегодня речь пойдет о другой автоматизации – офисной. В силу своей работы на гос службе, мне приходилось заниматься внедрением и поддержкой документооборота, а также автоматизацией разных рутинных задач. Поэтому тема не сказать, что для меня незнакомая. Но про автоматизацию в наших офисных пакетах (конкретно «МойОфис») можно сказать, что не знал почти ничего до нынешней зимы. И так как у меня появилось свободное время, и я решил более подробно изучить «МойОфис» в плане автоматизации, а конкретно того, возможно ли хоть как-то сделать создание автоматизации удобоваримым с точки зрения программирования и переноса макросов VBA из «MS Office», в Lua надстройки под «МойОфис».

Интересны результаты - жми!
Total votes 14: ↑14 and ↓0+14
Comments23

Домашний NAS сервер

Reading time6 min
Views56K

Домашний NAS сервер на 10 жестких дисков для личного использования на базе Linux

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

Читать далее
Total votes 113: ↑108 and ↓5+129
Comments94

Реверс инжиниринг для самых маленьких на практике

Reading time11 min
Views41K

Скомпилированное приложение является «чёрным ящиком». Чтобы туда заглянуть, восстановить алгоритм работы применяется реверс‑инжиниринг. Это непростой навык с высоким порогом входа. В статье мы попробуем взять дизассемблер, несложную задачку и пойдём в бой. Материал будет полезен тем, кому хочется с чего-то начать и погрузиться в тему реверса.

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

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

Java для сисадминов

Reading time17 min
Views14K

Эта статья написана в основном для системных администраторов Java-приложений (DevOps-инженеров, SRE и других производных специализаций). Вероятнее всего, Java-разработчики уже все это прекрасно знают. Хотя Junior Java-разработчикам эта информация может помочь систематизировать знания.

Статья не претендует на полноту или полную непогрешимость. Во-первых, нельзя объять необъятное. Во-вторых, все меняется и проверенные истины могут перестать быть истинами в новых версиях. В сети существует множество статей об  устройствах Java, однако в этой статье в блоге ЛАНИТ я стремился сделать выжимку основных моментов, необходимых для администраторов Java-приложений. Для более глубокого погружения в тот или иной вопрос потребуется обратиться к другим источникам.

Читать далее
Total votes 99: ↑98 and ↓1+120
Comments10

Как отобразить таблицу на экране мобильного устройства: решения

Reading time2 min
Views21K

В данной статье мы рассмотрим какие существуют решения по отображению таблиц с большими массивами данных на экранах мобильных устройств.

Читать далее
Total votes 51: ↑50 and ↓1+59
Comments17

Миллион одновременных соединений

Reading time8 min
Views63K

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

Адрес TCP/IP поддерживает только 65000 подключений, поэтому придётся назначить этому серверу примерно 30000 IP-адресов.

Существует 65535 номеров TCP-портов, значит ли это, что к TCP-серверу может подключиться не более 65535 клиентов? Можно решить, что это накладывает строгое ограничение на количество клиентов, которые может поддерживать один компьютер/приложение.

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

Поэтому я написал эту статью, чтобы развеять данный миф с трёх сторон:

  1. Мессенджер WhatsApp и веб-фреймворк Phoenix, построенный на основе Elixir, уже продемонстрировали миллионы подключений, прослушивающих один порт.
  2. Теоретические возможности на основе протокола TCP/IP.
  3. Простой эксперимент с Java, который может провести на своей машине любой, если его всё ещё не убедили мои слова.

Если вы не хотите изучать подробности, то перейдите в раздел «Итоги» в конце статьи.
Читать дальше →
Total votes 82: ↑80 and ↓2+99
Comments27

Как мы себя обманываем, только бы продолжать пользоваться Golang

Reading time21 min
Views78K

За два года с тех пор, как я опубликовал статью I want off Mr Golang's Wild Ride, она вновь и вновь всплывала на Reddit, Lobste.rs, на HackerNews и в других местах.

Всякий раз дискуссия выходит к одним и тем же ответам:

Go!
Total votes 124: ↑116 and ↓8+143
Comments369

Как мы ускорили выполнение запросов PostgreSQL в 100 раз

Reading time10 min
Views41K

Существует великое множество статей об оптимизации PostgreSQL — эта «кроличья нора» весьма глубока. Когда несколько лет назад я начал разрабатывать бэкэнд аналитического сервиса, у меня уже был опыт работы с другими СУБД, такими как MySQL и SQL Server. Тем не менее, раньше мне не приходилось так фокусироваться на производительности. В прошлых проектах, над которыми я работал, либо не было жестких требований к времени обработки (DS/ML), либо не требовалось обрабатывать много строк одновременно (обыкновенные веб-приложения). Однако в этот раз мои запросы:

состояли из 3-10 JOIN-ов по коррелирующим запросам;

уielded от 10 до 1,000,000 строк;

должны были выполняться в течение времени, определенного UX-ом;

не могли быть hinted — пока Cloud SQL, управляемый PostgreSQL в Google Cloud, не стал поддерживать pg_hint_plan в конце 2021 года;

запрещали прямой доступ к серверному процессу, чтобы, например, хакнуть некоторые perf — потому что PostgreSQL был managed.

Получение целого миллиона строк в одном API endpoint сигнализирует о проблеме в алгоритме или архитектуре. Конечно, все можно переписать и перепроектировать, но за это нужно платить.

У нас не нашлось «заклинания», которое решило бы все проблемы с производительностью SQL. Тем не менее, я упомяну здесь несколько дельных предложений, которые помогли нам и, надеюсь, смогут помочь читателю. Разумеется, это не какие-то сакральные знания. Но когда мы начинали оптимизацию, я был бы рад их прочитать или услышать.

Читать далее
Total votes 27: ↑24 and ↓3+24
Comments2

Как создать чистую базу данных

Reading time4 min
Views7.5K

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

Читать далее
Total votes 18: ↑9 and ↓9+4
Comments21

Мониторинг приложения Spring Boot с помощью Micrometer, Prometheus и Grafana, используя пользовательские метрики

Reading time6 min
Views44K

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

В этой статье я покажу, как можно мониторить веб-приложение Spring Boot с помощью Micrometer, который отображает метрики нашего приложения, Prometheus, который хранит их, и Grafana для визуализации этих данных в виде графиков.

Читать далее
Total votes 13: ↑10 and ↓3+9
Comments5

Конфигурационные файлы Linux

Reading time6 min
Views65K
image

1. Краткое содержание


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

Из этого руководства вы узнаете, где файлы конфигурации расположены и каковы их функции. Благодаря стандарту иерархии файловой системы (Filesystem Hierarchy Standard) папки и файлы, которые мы рассмотрим, сохраняют своё расположение даже в разных дистрибутивах.
Читать дальше →
Total votes 32: ↑28 and ↓4+29
Comments31

Сможете ли вы решить задачки со вступительных экзаменов в Оксфордский университет?

Reading time5 min
Views76K


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

Все три задачки в последние годы задавались во время собеседований при поступлении в Оксфордский университет на философский факультет. В каждой из задач есть первоначальный вопрос, и почти все кандидаты правильно ответили на него. Далее в тексте идут дополнительные вопросы, с которыми справились только лучшие из лучших.
Читать дальше →
Total votes 66: ↑63 and ↓3+80
Comments93

Всемогущий FFmpeg: скриншаринг в WebRTC

Reading time9 min
Views15K

Когда мы пишем статьи о своем сервере в комментариях очень часто находится читатель, который говорит:

"И зачем такой огород городить? Все это одной FFmpeg командой делается!"

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

Можно ли подружить Stream API и JPA?

Reading time5 min
Views7.5K

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

Если интересно посмотреть, что может библиотека, то прошу под кат.

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

О чем вы много думали, но боялись узнать #1 — аденовирусная векторная вакцина

Reading time8 min
Views79K

Доброго дня, уважаемые хабровчане. Я решил освещать некоторые вопросы в сфере медицины в формате мини-текстов по определенным темам. В последнюю неделю самой горячей темой была вакцинация в России, а именно вакцина Спутник V (Gam-COVID-Vac). В этой части я популярно расскажу, что же это за вакцина, как она действует и чего от нее можно ожидать.

Узнать
Total votes 99: ↑89 and ↓10+112
Comments877

Почему современная наука основана на вере?

Reading time12 min
Views46K

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

Проблема неполной индукции

Знаменитый древнегреческий философ Аристотель в своем трактате «Аналитика» выделяет два вида возможных умозаключений - индуктивное и дедуктивное.

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

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

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

Читать далее
Total votes 95: ↑72 and ↓23+76
Comments623

Практическое руководство по именованию классов, функций и переменных

Reading time4 min
Views47K

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

Читать далее
Total votes 31: ↑26 and ↓5+27
Comments41
1
23 ...

Information

Rating
Does not participate
Registered
Activity