Блоґ одного кібера

Історія хвороби контуженого інформаційним вибухом

Archive for the ‘Кодерство’ Category

Моніторинг випадкової змінної за допомогою Telegraf -> InfluxDB -> Grafana

leave a comment »

В цій публікації я розкажу про те як побудувати графік зміни якоїсь змінної в реальному часі. Наприклад якоїсь ціни, чи кількості запитів до сервера. Ключові слова: Docker, Docker compose, time series database, InfluxDB, Grafana, Telegraf. Всі крім докера будуть пояснені детально, докер – лише використовуватись для економії часу на інсталяцію.
Прочитати решту цього запису »

Advertisements

Written by bunyk

Липень 15, 2018 at 15:00

Оприлюднено в Інструменти, Кодерство

Tagged with , ,

Геренуємо пару ключів для цифрового підпису за допомогою RSA в Python

with 7 comments

Для тих кому викликати openssl набридло. Це дивно, але цього нема в стандартній бібліотеці python, тому:

sudo pip install pycrypto

Тоді:

from Crypto.PublicKey import RSA
from Crypto import Random

private_key = RSA.generate(1024, Random.new().read)
public_key = private_key.publickey()

print(private_key.exportKey().decode('ascii'))
print(public_key.exportKey().decode('ascii'))

Що дасть нам:

-----BEGIN RSA PRIVATE KEY-----
MIICXQIBAAKBgQCFO0e8pxFV5Niq9Kjkn7HpX5xCbsh2oP56t2goNw/qZnddzW1x
... blablabla ...
dB6mvhutUqKRZDaA1o4y1kytKTG42RfEtdm8t1Z/77dS
-----END RSA PRIVATE KEY-----
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCFO0e8pxFV5Niq9Kjkn7HpX5xC
bsh2oP56t2goNw/qZnddzW1xW3rWxYI2/Jxp/hv7EGapg12EcViF/C8Uv2WbCDEM
LIRaMqtHKFNaniscMgZKgaohkjXcLk5dIrVXuuxY7sk07BZqj+Jsv6xgR6GZ0CmG
Q3ZOmGAKksC/YA3gYwIDAQAB
-----END PUBLIC KEY-----

В іншій публікації було показано як це робити допомогою openssl, і як цими ключами підписати токен.

Written by bunyk

Червень 26, 2018 at 11:00

Оприлюднено в Інструменти, Кодерство

Tagged with ,

Як відсканувати книжку без сканера?

with 2 comments

Є класний додаток для андроїд від Microsoft – Office Lens. Він робить деякі зусилля щодо того аби криво (під якимось кутом) сфотографовані документи виглядали як відскановані. Це звісно важче для книжки, особливо якщо багато сторінок обдерті і не прямокутні, але часто виглядає краще ніж просто фото, і потім обрізати менше.

Знімки програми потім можна буде знайти на пристрої за шляхом /Pictures/Office Lens.

А зліпити їх до купи і перетворити в DJVU – за допомогою скрипта, який я запозичив звідси і трохи модифікував:

import os, glob, subprocess

#Change these to suit your situation=========================
IMGDIR="./" #directory of images to be converted
OUTDJVU = IMGDIR + 'OUT.djvu'

#Don't change these ==========================================
TMPDJVU = IMGDIR + 'TMP.djvu'


#convert jpg to djvu and collate to a single file   
if os.path.exists(OUTDJVU):
    os.remove(OUTDJVU)

for infile in sorted(glob.glob(os.path.join(IMGDIR, '*.jpg'))):
    print('Processing ' + infile)

    #convert jpg to a temp djvu file
    # cmd = 'c44 -decibel 48 ' + '"'+infile+'"' + ' "'+TMPDJVU+'"'
    subprocess.call(['c44', '-decibel', '48', infile, TMPDJVU])
    
    if os.path.exists(OUTDJVU):
        #Add the djvu file to the collated file
        cmd = ['djvm', '-i', OUTDJVU, TMPDJVU]
    else:
        # Create the collated file
        cmd = ['djvm', '-c', OUTDJVU, TMPDJVU]
    subprocess.call(cmd)

#Delete the temporary file
os.remove(TMPDJVU)

print('\nAll files converted and collated successfully')

В результаті можна отримати щось отаке: https://commons.wikimedia.org/wiki/File:%D0%A7%D0%B8%D1%82%D0%B0%D0%BD%D0%BA%D0%B0_%D0%B4%D0%BB%D1%8F_II._%D0%BA%D0%BB._%D1%88%D0%BA._%D1%81.djvu

Written by bunyk

Травень 9, 2018 at 22:53

Оприлюднено в Кодерство, Конспекти

Програмістські експерименти

leave a comment »

За що я люблю програмування – так це за те що на відміну від, якої небудь історії, на будь-яке питання можна знайти відповідь в ході експерименту, без будь-яких “авторитетних джерел”.

– Чи копіюється map-а, при присвоєнні?
– Хвилину.

package main

import "fmt"

func main() {
fmt.Println("- Чи копіюється map-а, при присвоєнні?")
a := make(map[string]string)
a["answer"] = "Так"
b := a
b["answer"] = "Ні"
fmt.Println("-", a["answer"])
}

– Ні

Якщо звісно не запитання “нам обрати технологію А чи Б?” І звісно ресурсу на те щоб реалізувати рішення в обох і порівняти нема. Тоді й з’являються релігійні суперечки про те в кого мова потужніша.

Written by bunyk

Квітень 13, 2018 at 17:44

Оприлюднено в Кодерство, Нещоденник

Tagged with

Як склеїти всі pdf-файли в один?

leave a comment »

Сьогодні дізнався команду яка допоможе коли наприклад дружина прислала тобі 5 сканів в файлах pdf, мережеве з’єднання до принтера не працює, принтер вміє друкувати файли з флешки, але вибираючи кожен файл поокремо в меню принтера можна стерти пальці, і хочеться спростити собі життя. Знайшов на AskUbuntu:

gs -dBATCH -dNOPAUSE -sDEVICE=pdfwrite -sOutputFile=all.pdf *

Плюси (для мене) цієї команди порівняно з іншими варіантами:

  • Виявилася вже встановлена на Ubuntu
  • gs (GhostScript) – це інтерпретатор екзотичної тюрінг-повної мови програмування PostScript, яка є чимось середнім між TeX та Forth. Завжди корисно як не вивчити нову мову то хоча б її штрикнути одним пальцем.
  • Автором цієї утиліти є чувак про якого я колись читав книжку і не одну.

Written by bunyk

Квітень 4, 2018 at 18:46

Оприлюднено в Кодерство, Розмітка

Символи вікіпедії, детальніший аналіз

with one comment

Щодо моєї попередньої публікації, мені зауважили що є різні простори імен. Тому сьогодні буде аналіз лише тих символів які можна зустріти в статтях (а не в категоріях, шаблонах, на сторінках користувачів і проектів), розбивка по різних алфавітах (може кому треба буде для частотного аналізу).

Загалом статті складаються з 3 613 435 448 символів, з яких різних 23 717. Вони розподілені так (намальовано лише початок розподілу, бо решта – неозрброєним оком не видно):


Прочитати решту цього запису »

Written by bunyk

Березень 18, 2018 at 19:05

Оприлюднено в Кодерство, Розмітка

Tagged with ,

Скільки символів потрібно щоб написати вікіпедію?

with 3 comments

Не так важливо скільки там людей говоритиме українською коли настане технологічна сингулярність. Важлива сумарна обчислювальна потужність інтелекту що володіє українською. 😉 І взагалі варто опановувати хоч якісь основи навчання машин – це професія в якій роботи ще не скоро замінять людей. Щоб навчити машину мови – їй треба багааатезно прикладів. І найбільший шмат української мови який можна легко згодувати машині – вікіпедія. Тому сьогодні ми спробуємо з’ясувати що потрібно щоб отримати цей масив тексту, і порахувати на ньому якусь простеньку статистику, для якої не треба бази даних а вистачить оперативної пам’яті.

Перше що нам потрібно – копія бази даних вікіпедії. Тому що вікіпедія містить більше чверті мільйона статтей, і навіть якщо ми робитимемо по запиту на секунду, що вікіпедія не схвалює для всяких там приватних павуків, то складання індексу займе в нас (750000 сек)/ 3600 / 24 = 8.68 діб > тижня. Тому заходимо на
https://dumps.wikimedia.org/ , вибираємо дамп який більше подобається, наприклад останній дамп що містить статті (без сторінок обговорень) української вікіпедії і ставимо на скачування.

А поки воно скачується підготуємось його розпаковувати. Ми скачуємо заархівований XML, який при розпаковуванні займає щось біля 5GB. Всередині є багато тисяч елементів , кожен з яких містить деталі про сторінку. Ось код на Go який містить функцію Read що розархівовує і водночас парсить XML, та повертає канал в який кидає сторінку за сторінкою, а в головній функції ітерується по всіх сторінках і підраховує кількість символів в їх тексті. В кінці виводить статистику:
Прочитати решту цього запису »

Written by bunyk

Березень 16, 2018 at 23:30

Оприлюднено в Кодерство, Павутина

Tagged with ,