Створюючи хтонічних чудовиськ, документируй

ioninja
Під цим висловом, узятим з чудової картинки-мема невідомого (принаймні, мені) автора, поставить свій підпис кожна людина, що має хоча б віддалене відношення до програмування. все питання, як? Як саме документувати?
Нижележащий текст переслідує кілька цілей:
  1. По-перше, дати короткий огляд (читай — трохи погундеть на тему) незадовільного стану інструментарію, що застосовується до хтонічним чудовиськам світу C/C++;
  2. По-друге, запропонувати своє альтернативне рішення (безкоштовно без СМС та реєстрації — проект некомерційний і викладений на GitHub під MIT-ліцензією);
  3. -третє, закликати співтовариство поспілкуватися на тему і зібрати ідеї;
  4. В-четвертих, запросити долучитися до розробки проекту на GitHub.
Відразу обмовлюся, що хоча проект створювався в першу чергу як альтернатива, а точніше, доповнення Doxygen для сишных і плюсових API, архітектурно він в рівній мірі придатний і для інших мов. Це дозволяє створювати портали документації різнопланових бібліотек — самі бібліотеки можуть бути написані на різних мовах, а в документації єдність стилю у зовнішньому вигляді та поведінці.


Читати далі →

Історія одного бага: вирівнювання даних на x86

Одного разу мені довелося вираховувати суму векторів цілих чисел.

Звучить незвично. Кому знадобиться робити це в реальному житті? Зазвичай такі обчислення зустрічаються тільки в задачках з початкової школи або бенчмарках компілятора. Але зараз це сталося насправді.

В реальності стояло завдання перевірити контрольну суму заголовків IPv4, яка є сумою обернених кодів (доповнень до одиниці) двухбайтных машинних слів. Простіше кажучи, це означає додавання всіх слів і всіх бітів перенесення, які виробляються в процесі. У цієї процедури є декілька приємних особливостей:

  • її можна ефективно виконати з допомогою процесорної інструкції
    ADC
    (на жаль, ця функція недоступна в C);
  • її можна виконати на словах будь-якого розміру (можете додати за бажанням восьмибайтные значення, тільки результат слід зменшити до двох байт і додати всі біти переповнення);
  • вона нечутлива до порядку проходження байтів (дивно, але це так).

Читати далі →

Спроби відкриття нової шашкової тактики або що робити з нездійсненною мрією

Введення
Спортивна гра «Шашки» є однією з ігор людства, які комп'ютер ще не прорахував повністю. Є новини про те, що вчені знайшли стратегію, при якій комп'ютер ніколи не програє. За свої 9 років, присвячених цій грі, я зустрів лише одну програму, яку ніяк не міг виграти. Мабуть, мій спортивний досвід дозволить зробити припущення, що це була програма реалізує стратегію описану вище. На мій превеликий подив, вона займала лише 60 Мбайт. А може бути, там була добре навчена нейронна мережа в основі? Але все ж мені не віриться, що прорахувати їх неможливо. Там всього лише 10^20 позицій, невже мій комп'ютер не впорається з таким завданням? А також, невже немає тактики, в якій на початку партії суперник віддає шашку і виявляються в тактичному перевагу?! Жодного дебюту такого я не зустрічав. Піду перевірю…

Читати далі →

Перехоплення системних викликів Linux за допомогою LSM



Нещодавно надійшли такі завдання: зібрати ядро Linux, написати для нього модуль і з його допомогою перехоплювати системні виклики. І якщо перші дві я виконав без проблем, то в процесі виконання третьою у мене виникло враження, що робота з системними викликами вийшла з моди років 10 тому.

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

Читати далі →

Архітектура асемблера Go

imageПривіт, Хабр! Мене звуть Марко Кевац, я системний програміст Badoo в команді «Платформа», і я дуже люблю Go. Якщо скласти ці дві речі, то ви зрозумієте, наскільки я люблю асемблер в Go.

Зовсім недавно ми розповідали на Хабре про те, на яких конференціях побували. Однією з них була GopherCon 2016, де практично всім запам'ятався доповідь, «Командира» Пайка про Go-шний асемблер. Представляю вам переклад його доповіді, оформлений у вигляді статті. Я постарався дати в тексті якомога більше посилань на релевантні статті в «Вікіпедії».

Читати далі →

Вбудовуємо PVS-Studio в Eclipse CDT (macOS)

Після появи циклу статей про вбудовуванні PVS-Studio в різні IDE під Linux (Eclipse, Anjuta), з'явилося бажання запустити PVS-Studio для перевірки своїх проектів, що розробляються в Eclipse під macOS. Але розробники PVS-Studio поки не планують випускати версію під macOS. Ну що ж, заткнемо поки цю прогалину.
Дано:
Завдання:

Читати далі →

Запитай backend-розробників Badoo. Частина 1. Платформа



Нам дуже подобається формат AMA (ask me anything) на Reddit, коли хто-небудь (в нашому випадку – команда розробників) приходить в сабреддит AMA і каже, що готовий відповідати на поставлені запитання. З найбільш пам'ятних сесій Ask Me Anything, наприклад, команда інженерів Space X або інженери з Google, і навіть чинний президент США Барак Обама чотири роки тому відповідав на запитання на Реддите. Нещодавно наша Android-команда проводила AMA і в онлайн-режимі відповідала на запитання розробників.

Але в Росії немає свого Реддита. Зате є свій Хабр. Тому ми вирішили прийти з форматом «постав нам питання» сюди. І не з порожніми руками, як велять правила AMA. Щоб вам було простіше зрозуміти тему, ми обрали одну з наших команд – «Платформу» – і попросили розповісти, чим вони займаються, на чому програмують і чого досягли за час існування команди. І підвели невеликі підсумки 2016 року. Поїхали!

Зміст
1. Чим займається «Платформа»
2. Сервіси: Pinba, SoftMocks та інші
3. Системне програмування. Як ми почали використовувати Go і до чого це призвело
4. Фотографії
5. Скриптовое хмара
6. LSD: Live Streaming Daemon
7. Cassandra Time Series: що це і як працює
8. Badoo AMA: постав запитання розробникам «Платформи»

Пруф, що це дійсно ми.

Читати далі →

Створення і тестування Firewall в Linux, Частина 2.1. Введення у другу частину. Дивимося на мережу і протоколи. Wireshark

Зміст першої частини:

Створення лабораторії, архітектура Netfilter, char device, sysfs1.1 — Створення віртуальної лабораторії (щоб нам було де працювати, я покажу, як створити віртуальну мережу на вашому комп'ютері. Мережа буде складатися з 3х машин Linux ubuntu).
1.2 – Написання простого модуля в Linux. Введення в Netfilter та перехоплення трафіку з його допомогою. Об'єднуємо всі разом, тестуємо.
1.3 – Написання простого char device. Додавання віртуальної файлової системи — sysfs. Написання user interface. Об'єднуємо всі разом, тестуємо.

Зміст другої частини:

2.1 — Введення у другу частину. Дивимося на мережу і протоколи. Wireshark.
2.2 — Таблиці Firewall. Transport Layer. Структури TCP, UDP. Розширюємо Firewall.
2.3 — Розширюємо функціональність. Обробляємо дані user space. libnetfilter_queue.
2.4 — Бонус. Вивчаємо реальну Buffer Overflow атаку і запобігаємо за допомогою нашого Firewall'а.

Читати далі →

Тестуємо Linux-версію PVS-Studio на Linux Kernel



З моменту виходу публічної Linux-версії PVS-Studio, стаття про повторній перевірці ядра Linux залишалася лише питанням часу. Проект, який пишеться професіоналами з усього світу, який використовують велику кількість людей в самих різних сферах, який регулярно перевіряється і тестується різними інструментами — перевірка такого проекту буде серйозним випробуванням для будь-якого статичного аналізатора. Які помилки вдалося знайти PVS-Studio в таких умовах?


Читати далі →