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: Здравствуйте, Игорь! Я не знаю :) Думаю аналогично согласно инструкции к вашей радиостанции.
  • Игорь: Добрый день, просмотрел Ваше видео все доступно и ясно для 8 ми канальных радеек, но мне нада настроить 69...
  • Гоги: Есть инструкция к Моторолкам – она подходит к серии Motorola TLKR T4… Т8. В конце сетка частот и...
  • 21h: торчок давно уже не обновлял, как только закрыл сайт где он работал. да, это морда для opentracker. без...
  • Buter: Какова дальнейшая жизнь торчка? Он кстати веб-интерфейсом для OpenTracker выступает? Без OpenTracker работать...
  • 21h: понятия не имею. гуглите инструкцию к вашей радейке и сверяйтесь с ней.
  • Денис: хочу их подружить с uv5r
  • Денис: t-388 walkie talkie на эти шпаргалочек нет,или как приминить ваши к их настройке?
  • John: Стекла для электроник – техночас.ру