Pull to refresh
0
0
Денис @dennisfen

User

Send message

Памятка по борьбе с алкоголем или Как пережить фуршеты

Reading time20 min
Views174K
Тут вот праздники скоро. Спросил недавно друг «как мне это все пережить?». Я сначала объяснял, а потом решил написать статью на Хабр. Рассказанное — услышит один человек, а написанное — прочитают сотни!

Меня, если честно, достаточно сильно раздражают всевозможные застолья. Потому что гораздо приятнее посидеть с паяльником или читая книгу, а не "… хорохорясь, ерепенясь и валяясь, как колода..." провести выходные. Но традиции-с, будь они неладны, формировались столетиями и не умея пить — бывает достаточно сложно вписаться в коллектив, найти нужный подход и т.д. Особенно грешат этим делом всевозможные руководящие кадры из старого поколения. Что же делать тем, для кого алкоголь и необходимость его употреблять — это просто лишняя головная боль? Самый простой ответ — НЕ ПИТЬ, но на практике полностью это очень сложно реализовать. Эффективнее в наших реалиях принять тезис «алкоголь — просто инструмент» и учиться с ним правильно работать и использовать для решения своих задач с минимизацией ущерба для здоровья.

Статью кладем в закладки и рассылаем всем друзьям, подчиненным и т.д. и т.п. Есть время подготовиться и встретить новогодние корпоративы во всеоружии. Практически уверен, что многое из описанного активно используют те, кто «не напиваться» обязан по долгу службы. Простой же обыватель чаще про это не думает, полагаясь на удачу и легкую руку. И чаще всего оказывается в проигрыше. Предупрежден = вооружен, поэтому под катом читаем, как победить в битве с алкоголем.

Читать дальше →
Total votes 191: ↑155 and ↓36+119
Comments478

Про установку и использование LineageOS 16, F-Droid

Reading time127 min
Views311K
Предлагаю вашему вниманию инструкцию как оптимально (по моему мнению) перейти на свободное программное обеспечение при использовании смартфона на примере операционной системы LineageOS (далее сокращённо LOS) и приложений из F-Droid.

Я думаю, что это статья будет вам интересна, даже если вы не можете установить себе LOS, так как в данной статье также рассмотрены стандартные настройки Android, настройки и методика использования полезных приложений, магазин приложений F-Droid, разрешения Android, которые нельзя ограничить и другие, возможно полезные для вас нюансы.
Читать дальше →
Total votes 74: ↑72 and ↓2+70
Comments192

Перехват системных вызовов Linux с помощью LSM

Reading time9 min
Views21K


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

Периодически я находил в интернете статьи, которые были близкими к тому, что я искал, некоторые были даже очень хорошо написаны, но у всех был существенный недостаток — они устарели.
Читать дальше →
Total votes 56: ↑54 and ↓2+52
Comments42

Каламбуры типизации функций в C

Reading time8 min
Views23K

У C репутация негибкого языка. Но вы знаете, что вы можете изменить порядок аргументов функции в C, если он вам не нравится?


#include <math.h>
#include <stdio.h>

double  DoubleToTheInt(double base, int power) {
    return pow(base, power);
}

int main() {
    // приводим к указателю на функуцию с обратным порядком аргументов
    double (*IntPowerOfDouble)(int, double) =
        (double (*)(int, double))&DoubleToTheInt;

    printf("(0.99)^100: %lf \n", DoubleToTheInt(0.99, 100));
    printf("(0.99)^100: %lf \n", IntPowerOfDouble(100, 0.99));
}

Этот код на самом деле никогда не определяет функцию IntPowerOfDouble — потому что функции IntPowerOfDouble не существует. Это переменная, указывающая на DoubleToTheInt, но с типом, который говорит, что ему хочется, чтобы аргумент типа int шел перед аргументом типа double.


Вы могли бы ожидать, что IntPowerOfDouble примет аргументы в том же порядке, что и DoubleToTheInt, но приведет аргументы к другим типам, или что-то типа того. Но это не то, что происходит.


Попробуйте — вы увидите одинаковый результат в обоих строчках.


emiller@gibbon ~> clang something.c 
emiller@gibbon ~> ./a.out 
(0.99)^100: 0.366032 
(0.99)^100: 0.366032 
Читать дальше →
Total votes 78: ↑74 and ↓4+70
Comments38

Как работает yield

Reading time6 min
Views664K
На StackOverflow часто задают вопросы, подробно освещённые в документации. Ценность их в том, что на некоторые из них кто-нибудь даёт ответ, обладающий гораздо большей степенью ясности и наглядности, чем может себе позволить документация. Этот — один из них.

Вот исходный вопрос:
Как используется ключевое слово yield в Python? Что оно делает?

Например, я пытаюсь понять этот код (**):
def _get_child_candidates(self, distance, min_dist, max_dist):
    if self._leftchild and distance - max_dist < self._median:
        yield self._leftchild
    if self._rightchild and distance + max_dist >= self._median:
        yield self._rightchild

Вызывается он так:
result, candidates = list(), [self]
while candidates:
    node = candidates.pop()
    distance = node._get_dist(obj)
    if distance <= max_dist and distance >= min_dist:
        result.extend(node._values)
        candidates.extend(node._get_child_candidates(distance, min_dist, max_dist))
        return result


Что происходит при вызове метода _get_child_candidates? Возвращается список, какой-то элемент? Вызывается ли он снова? Когда последующие вызовы прекращаются?

** Код принадлежит Jochen Schulz (jrschulz), который написал отличную Python-библиотеку для метрических пространств. Вот ссылка на исходники: http://well-adjusted.de/~jrschulz/mspace/

Подробный и обстоятельный ответ
Total votes 141: ↑136 and ↓5+131
Comments41

Краткое введение в rvalue-ссылки

Reading time9 min
Views162K
Перевод статьи «A Brief Introduction to Rvalue References», Howard E. Hinnant, Bjarne Stroustrup, Bronek Kozicki.

Rvalue ссылки – маленькое техническое расширение языка C++. Они позволяют программистам избегать логически ненужного копирования и обеспечивать возможность идеальной передачи (perfect forwarding). Прежде всего они предназначены для использования в высоко производительных проектах и библиотеках.

Введение


Этот документ даёт первичное представление о новой функции языка C++ – rvalue ссылке. Это краткое учебное руководство, а не полная статья. Для получения дополнительной информации посмотрите список ссылок в конце.

Rvalue ссылка


Rvalue ссылка – это составной тип, очень похожий на традиционную ссылку в C++. Чтобы различать эти два типа, мы будем называть традиционную C++ ссылку lvalue ссылка. Когда будет встречаться термин ссылка, то это относится к обоим видам ссылок, и к lvalue ссылкам, и к rvalue ссылкам.
Читать дальше →
Total votes 37: ↑34 and ↓3+31
Comments19

Трассировка печатной платы в KiCAD

Reading time8 min
Views111K


Введение



Одним из критических замечаний к предыдущей статье было следующее: дескать фу таким быть, стрелять из пушки по воробьям да ещё проприетарным софтом за 10000$, к тому же наверняка украденным с торрентов. Оставляя за кадром моральную сторону вопроса, а так же презумпцию невиновности, обратимся к следующему вопросу — а что там у нас имеется в Open Source секторе, пригодное для решения задач проектирования электронной техники. В частности изготовления печатных плат. Наиболее достойной, на мой взгляд, оказалась кроссплатформенная программа KiCAD, распространяемая по лицензии GNU GPL. Имеются версии для Linux, Windows и macOS.

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

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

Распознавание паспорта РФ на платформе Эльбрус. Часть 1

Reading time14 min
Views35K

В этой статье мы продолжим рассказывать о похождениях нашей программы распознавания паспорта: теперь паспорт отправится на Эльбрус!



Итак, что же мы знаем про архитектуру Эльбрус?


Эльбрус — высокопроизводительная и энергоэффективная архитектура процессоров, отличающаяся высокой безопасностью и надежностью. Современные процессоры архитектуры Эльбрус могут применяться в качестве серверов, настольных компьютеров и даже встраиваемых вычислителей. Они способны удовлетворить повышенным требованиям по информационной безопасности, рабочему диапазону температур и длительности жизненного цикла продукции. Процессоры архитектуры Эльбрус, как говорят нам публикации МЦСТ [1, 2], предназначены для решения задач обработки сигналов, математического моделирования, научных расчетов, а также других задач с повышенными требованиями к вычислительной мощности.


Мы в Smart Engines попробовали убедиться, правда ли производительности Эльбруса достаточно, чтобы реализовать распознавание паспорта без значительных потерь в скорости работы.

Читать дальше →
Total votes 59: ↑50 and ↓9+41
Comments86

Ликбез по типизации в языках программирования

Reading time12 min
Views499K
image

Эта статья содержит необходимый минимум тех вещей, которые просто необходимо знать о типизации, чтобы не называть динамическую типизацию злом, Lisp — бестиповым языком, а C — языком со строгой типизацией.

В полной версии находится подробное описание всех видов типизации, приправленное примерами кода, ссылками на популярные языки программирования и показательными картинками.
Читать дальше →
Total votes 239: ↑232 and ↓7+225
Comments180

Мультиплеер в быстрых играх (части I, II)

Reading time7 min
Views141K


  1. Части I, II (синглплеер с авторитарным сервером)
  2. Часть III (Появление врага)
  3. Часть IV (Хэдшот!)


Предлагаю вашему вниманию перевод статьи Fast-Paced Multiplayer (Part I): Introduction.

Разработка игры — само по себе непростое занятие. Но мультиплеерные игры создают совершенно новые проблемы, требующие разрешения. Забавно, что у наших проблем всего две причины: человеческая натура и законы физики. Законы физики привнесут проблемы из области теории относительности, а человеческая натура не даст нам доверять сообщениям с клиента.
Читать дальше →
Total votes 136: ↑132 and ↓4+128
Comments109

Хочется взять и расстрелять, или ликбез о том, почему не стоит использовать make install

Reading time5 min
Views170K
К написанию сей заметки меня сподвигло то, что я устал делать развёрнутые замечания на эту тему в комментариях к статьям, где в качестве части инструкции по сборке и настройке чего-либо для конкретного дистра предлагают выполнить make install.
Суть сводится к тому, что эту команду в виде «make install» или «sudo make install» использовать в современных дистрибутивах нельзя.

Но ведь авторы программ в руководствах по установке пишут, что нужно использовать эту команду, возможно, скажете вы. Да, пишут. Но это лишь означает, что они не знают, какой у вас дистрибутив, и дистрибутив ли это вообще, может, вы вступили в секту и обкурилисьчитались LFS и теперь решили под свою хтоническую систему скомпилять их творение. А make install является универсальным, хоть и зачастую неправильным способом это сделать.

Читать дальше →
Total votes 385: ↑339 and ↓46+293
Comments185

Xargs: многообразие вариантов использования

Reading time7 min
Views138K
xargs

Об утилите xargs написано очень много — что можно написать еще? Но если, что называется, копнуть поглубже, то выясняется, что во многих публикациях излагаются лишь самые основы, но нет главного: не объясняется, как можно применять xargs в реальной практике. Статей с разбором сложных и нетривиальных вариантов применения этого весьма полезного для системного администратора инструмента, к сожалению, очень мало. Именно поэтому мы написали свою статью и постарались включить в нее как можно больше примеров использования xargs для решения различных проблем.

Сначала мы рассмотрим принцип работы xargs и разберем примеры попроще, а затем перейдем к разбору сложных и интересных кейсов.
Читать дальше →
Total votes 68: ↑65 and ↓3+62
Comments44

Подходы к проектированию RESTful API

Reading time17 min
Views138K

Автор: Вячеслав Михайлов, Solutions Architect.

В этой статье я поделюсь опытом проектирования RESTful API — на конкретных примерах покажу, как делать хотя бы простые сервисы красиво. Также мы поговорим, что такое API и зачем он нужен, поговорим об основах REST — обсудим, на чем его можно реализовывать; коснемся основных веб-практик, которые зависят и не зависят от этой технологии. Также узнаем, как составлять хорошую документацию, затрачивая на это минимум усилий, и посмотрим, какие существуют способы нумерации версий для RESTful API.

Часть 1. Теория


Итак, как мы все знаем, API — application programming interface (интерфейс программирования приложений), набор правил и механизмов, с помощью которых одно приложение или компонент взаимодействует с другими

Почему хороший API — это важно?

  • Простота использования и поддержки. Хороший API просто использовать и поддерживать.
  • Хорошая конверсия в среде разработчиков. Если всем нравится ваш API, к вам приходят новые клиенты и пользователи.
  • Выше популярность вашего сервиса. Чем больше пользователей API, тем выше популярность вашего сервиса.
  • Лучше изоляция компонентов. Чем лучше структура API, тем лучше изоляция компонентов.
  • Хорошее впечатление о продукте. API — это как бы UI разработчиков; это то, на что разработчики обращают внимание в первую очередь при встрече с продуктом. Если API кривой, вы как технический эксперт не будете рекомендовать компаниям использовать такой продукт, приобретая что-то стороннее.


Теперь посмотрим, какие бывают виды API.

Виды API по способу реализации:
  • Web service APIs
    • XML-RPC and JSON-RPC
    • SOAP
    • REST

  • WebSockets APIs
  • Library-based APIs
    • Java Script

  • Class-based APIs
    • C# API
    • Java



Виды API по категориям применения:

  • OS function and routines
    • Access to file system
    • Access to user interface

  • Object remoting APIs
    • CORBA
    • .Net remoting

  • Hardware APIs
    • Video acceleration (OpenCL…)
    • Hard disk drives
    • PCI bus



Читать дальше →
Total votes 26: ↑24 and ↓2+22
Comments37

Покопаемся в «режиссёрской версии» Wasteland 2: механики и интерфейсы

Reading time10 min
Views50K


На мой взгляд, самый «фаллаутный» фаллаут после второго — это Wasteland 2 в полной версии, которая Director’s Cut. В эпоху зеркальных римейков игр и фильмов эта штука очень радует и старым духом, и новыми решениями. Поэтому я предлагаю покопаться немного у неё под капотом в плане механик GameDev.

Начнём с самого главного – эта игра следует старой доброй формуле «Мир, игра, игроки». Современные высокобюджетные проекты нацелены на то, чтобы игрок решал, что и как происходит в мире, и не пропускал какие-то важные действия. Максимум контента за один проход, чтобы ничего не осталось за кадром. Это путь хорошего фильма. Путь хорошей игры – реалистичный мир, живущий в экосистеме, которую можно покачнуть силами одного человека только с очень большим трудом.

Так вот, миру Wasteland 2 плевать на вас. Там нет счастливых прибытий в последний момент, чтобы всех спасти, нет ожидающих чего-то NPC. Реальное время. Например, когда вы входите в Хайпул, там горит дом. Не успели потушить – ну, он тупо сгорит. Второй важный аспект – крутой постоянно движущийся сюжет, скорее, характерный своими поворотами для серии Биошоков. Захватывающий с первых минут, без долгой раскачки. И этот сюжет – реально высокого разрешения. Постоянно предлагающий суровый выбор между моралью, порядком и законом.

И это три разных выбора.
Читать дальше →
Total votes 70: ↑62 and ↓8+54
Comments46

Аппаратный менеджер паролей или как перестать вводить пароли и начать жить

Reading time7 min
Views73K
Меня зовут %username%, мне n лет и я параноик. И каждый день информационный мир усложняет мне жизнь. Технологий становится больше, порог вхождения в IT снижается, и мы получаем действительность, где грубые ошибки в безопасности это нормально. А еще и мощность вычислительной техники растет с каждым годом. В итоге наши пароли, хранимые как получится, становятся достоянием общественности.

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

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

Поэтому мы придумали свой хакерский подход к хранению и вводу паролей.



Кратко: телефон связан через Bluetooth со специальным девайсом, который эмулирует клавиатуру. Утеря девайса и телефона не позволяют получить паролей. Утеря девайса и мастер-пароля тоже не страшны. Как так? Добро пожаловать под кат (там 7 картинок, но они красивенькие).
Читать дальше →
Total votes 61: ↑57 and ↓4+53
Comments147

[ В закладки ] Алгоритмы и структуры данных в ядре Linux, Chromium и не только

Reading time9 min
Views86K
Многие студенты, впервые сталкиваясь с описанием какой-нибудь хитроумной штуки, вроде алгоритма Кнута – Морриса – Пратта или красно-чёрных деревьев, тут же задаются вопросами: «К чему такие сложности? И это, кроме авторов учебников, кому-нибудь нужно?». Лучший способ доказать пользу алгоритмов – это примеры из жизни. Причём, в идеале – конкретные примеры применения широко известных алгоритмов в современных, повсеместно используемых, программных продуктах.



Посмотрим, что можно обнаружить в коде ядра Linux, браузера Chromium и ещё в некоторых проектах.
Читать дальше →
Total votes 158: ↑149 and ↓9+140
Comments15

Создание архитектуры программы или как проектировать табуретку

Reading time25 min
Views681K
Взявшись за написание небольшого, но реального и растущего проекта, мы «на собственной шкуре» убедились, насколько важно то, чтобы программа не только хорошо работала, но и была хорошо организована. Не верьте, что продуманная архитектура нужна только большим проектам (просто для больших проектов «смертельность» отсутствия архитектуры очевидна). Сложность, как правило, растет гораздо быстрее размеров программы. И если не позаботиться об этом заранее, то довольно быстро наступает момент, когда ты перестаешь ее контролировать. Правильная архитектура экономит очень много сил, времени и денег. А нередко вообще определяет то, выживет ваш проект или нет. И даже если речь идет всего лишь о «построении табуретки» все равно вначале очень полезно ее спроектировать.

К моему удивлению оказалось, что на вроде бы актуальный вопрос: «Как построить хорошую/красивую архитектуру ПО?» — не так легко найти ответ. Не смотря на то, что есть много книг и статей, посвященных и шаблонам проектирования и принципам проектирования, например, принципам SOLID (кратко описаны тут, подробно и с примерами можно посмотреть тут, тут и тут) и тому, как правильно оформлять код, все равно оставалось чувство, что чего-то важного не хватает. Это было похоже на то, как если бы вам дали множество замечательных и полезных инструментов, но забыли главное — объяснить, а как же «проектировать табуретку».

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

Данная статья является попыткой ответить на эти вопросы хотя бы в первом приближении.
Читать дальше →
Total votes 88: ↑85 and ↓3+82
Comments45

Российские светодиодные лампы Лисма

Reading time3 min
Views48K
Саранский электроламповый завод начал производство светодиодных ламп по одной из самых современных технологий — filament (светодиодные нити).



Ко мне попали пять ламп из разных партий с мощностью 6 и 8 Вт. Они должны заменять лампы накаливания 60 и 75 Вт.
Читать дальше →
Total votes 79: ↑77 and ↓2+75
Comments107

STM32F4: GNU AS: Программирование на ассемблере (Часть 1)

Reading time15 min
Views69K
Обсуждение статьи после прочтения или задать вопросы можно в VK: vk.com/topic-200545792_46641834

Так же теперь (2021 год) я написал небольшой редактор для программ на ассемблере, начинать читать можно с Редактор ассемблера для ARM микроконтроллеров для компилятора gnu as. Старт там же можно будет и создавать проект в более удобном формате нежели описано в этой и нескольких последующих статьях. При этом рекомендую все таки ознакомится со всеми статьями по этой тематике в моих публикациях, так как не везде я повторяю прошлые материалы.

Это моя первая статья для сообщества Хабрахабр и написать ее я решил про то что сейчас волнует меня самого: написание программ для микроконтроллеров STM32 (семейство АRМ) на языке ассемблера. Я использую отладочную плату на основе микроконтроллера STM32F407 (STM32F4 Discovery, Open407I-C), но статья будет не менее полезна и для программирования других микроконтроллеров STM32.
Читать дальше →
Total votes 34: ↑32 and ↓2+30
Comments45

Структуры данных. Неформальный гайд

Reading time6 min
Views166K


Конечно, можно быть успешным программистом и без сакрального знания структур данных, однако они совершенно незаменимы в некоторых приложениях. Например, когда нужно вычислить кратчайший путь между двумя точками на карте, или найти имя в телефонной книжке, содержащей, скажем, миллион записей. Не говоря уже о том, что структуры данных постоянно используются в спортивном программировании. Рассмотрим некоторые из них более подробно.
Читать дальше →
Total votes 91: ↑83 and ↓8+75
Comments31

Information

Rating
Does not participate
Location
Wien, Wien, Австрия
Registered
Activity