INT 21h

Домашняя страница самого страшного прерывания

Программа расчета длины и веса кабеля на катушке

№ 8188 В разделах: Администрирование Программирование от August 31st, 2016,

Понадобилось мне как-то рассчитать количество оптоволокна, которое можно намотать на катушку от обычной витой пары. Как итог написал программу, которая помогает быстро делать расчеты.

cable

Программа расчитывает количество рядов, количество витков на ряд, вес и т.д. В ряду кабель укладывается не друг на друга, а во впадинки нижнего ряда. Длина стороны a равна диаметру кабеля. Высота треугольника b высчитывается по формуле a*(sqrt(3)/2). Это и есть высота одного ряда. Высота намотки h считается от кромки ребра катушки до шпинделя (r1 – r2).

cable_formula

Скачать cable.zip

Нет комментариев »

sqlite3socket – Сервер для предоставления неблокирующего доступа к sqlite3 базе данных

№ 8134 В разделах: Администрирование Программирование от April 4th, 2016,

Эта программа написана мной чтобы конкурирующие процессы не натыкались на блокировку базы даннных в sqlite3. Используется на репитере нашего городского автоканала как альтернатива слишком громоздкому для таких целей mysql. Можно организовать доступ как по сети (с биндингом к сетевому интерфейсу), так и через unix socket файл.

http://dev.blindage.org/projects/sqlite3socket

Программа написана на python3. При запуске блокирует файл базы данных и все последующие обращения к нему происходят только по сети. Класс betterSocket расширяет класс socketserver для предоставления более быстрого интерфейса, чем через TCP, но всегда можно переключиться обратно просто изменив переменную конфигурации. У каждого обращения есть собственный хендлер к БД, но хендлер самой БД для всех одинаковый. Это позволяет тредам иметь неблокирующий доступ к данным.

class DB:
    def __init__(self, confDB):
        self.db = sqlite3.connect(confDB)

    def fetchall(self, query):
        dbcursor = self.db.cursor()
        dbcursor.execute(query)
        return dbcursor.fetchall()


class s3socket(socketserver.BaseRequestHandler):
    def handle(self):
        self.data = self.request.recv(1024).strip()
        try:
            sql = self.data.decode('UTF-8')
            sqlresult = dbHandler.fetchall(sql)
            answer = ['result', sqlresult]
        except sqlite3.Error as er:
            answer = ['error', er.args[0]]

        self.request.sendall(bytes(json.dumps(answer, ensure_ascii=False), 'UTF-8'))

Все SQL запросы отправляются простым текстом, а ответ приходит массивом в JSON. Возврат объекта пока еще не реализован, но планы имеются. Настройка происходит очень просто:

Взаимодействовать с БД очень просто. Можно даже на bash. Примеры можно посмотреть в wiki.

Нет комментариев »

Мой PHP класс для удобной работы с GnuPG (GPG, PGP) и пример в реальной жизни

№ 8085 В разделах: Администрирование Программирование от February 20th, 2016,

Забрать класс себе можно так: git clone https://git.blindage.org/phpGnupgSimple.git

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

Итак, пишем следующий код:

<?php 
require "/opt/phpGnupgSimple/gnupgsimple.php"; 
$stdin=""; 
$options=getopt('m:s:'); 
 
while($f = fgets(STDIN)){ 
 $stdin.=$f; 
} 
 
$pubkey=file_get_contents('BORODA.asc'); 
$gpg = new GnupgSimple($pubkey, '', ''); 
$encrypted = $gpg->encrypt($stdin); 
$gpg->mail($options['m'], 'root@blindage.org', $options['s'], $encrypted);  
?>

Данные принимаются через pipe и дописываются в переменную $stdin, а getopt() подбирает параметры из командной строки, переданные скрипту. Далее грузится открытый ключ, который и будет применяться для шифрования отчетов. Как работает все это шифрование рассказывал уже как-то здесь.

Теперь отправка отчетов средствами cron не понадобится и поэтому переменную MAILTO можно очистить. Получается что-то типа такого:

MAILTO=""
0 1 * * * root /opt/backup.sh|/usr/sbin/php /opt/mailgpg.php -m 21h@blindage.org -s "secret server report"

Можете смело повторить у себя и никто не узнает что же это там за хрень от сервера летает :)

Нет комментариев »

Nginx config files formatter\beautifuler

№ 8061 В разделах: Администрирование Программирование от February 14th, 2016,

To increase readability of my nginx configuration files I wrote the formatting program.

Usage example: python3 ./nginx_format.py blindage.org > blindage.org.out

DO NOT OUTPUT RESULTS TO INPUT FILES!

Download here

BEFORE

nginx-formatter-before

AFTER

nginx-formatter-after

Нет комментариев »


Комментарии
  • Серегй: Не совсем грабить)) если грабить можно и без рации, есть более благие цели, вы просто ответьте на мой вопрос,...
  • 21h: магазин грабить собрались? ) не, тут я не помощник ;)
  • Серегй: А что бы мне поймать чужую волну, что мне для этого нужно сделать? Допустим я купил данную рацию себе, мне...
  • 21h: слушать никто не запрещает. нет закона, который запрещает слушать. те, кто говорит иначе нагло врут. а если...
  • Серегй: Я хотел узнать могу ли я просто прийти с данной рацией baofeng uv-5r, допустим на объект, ну или вообще...
  • 21h: У меня есть только эти 2. По другим ничего не знаю. В интернете можно скачать инструкцию к вашей модели рации,...
  • Серегй: Добрый день! Хотелось бы задать пару вопросов по поводу раций, у Вас есть куда можно обратиться ТАТ.
  • 21h: потому, что нейросетью проще. яркость светофора меняется в зависимости от времени суток от маленькой красной...
  • Михаил: А зачем нейросеть? Почему цвет светофора определить без нейросетей?
  • Александр: Иногда нужна техника без доступа интернета и компьютера. Для хранения паролей, счетов, записей и т.д....