Skip to content

Instantly share code, notes, and snippets.

View mahenzon's full-sized avatar

Suren Khorenyan mahenzon

View GitHub Profile
@mahenzon
mahenzon / deploy_flask_lighttpd.py
Last active June 20, 2023 06:03
Flask (Python 3) + flup + Lighttpd project deploy
import os
import stat
import argparse
template_fcgi = '''#!/usr/bin/env python3
from flup.server.fcgi import WSGIServer
from %s import app
class ScriptNameStripper(object):
@mahenzon
mahenzon / gleam.ino
Created May 24, 2018 08:49
Rainbow gleam Arduino / esp8266
// Metro library for timing: https://github.com/surik00/Arduino-Metro
#include <Metro.h>
#define RED_PIN 16
#define GREEN_PIN 14
#define BLUE_PIN 12
#define ARR_LEN 6
#define RGB_MAX 255
@mahenzon
mahenzon / arduino_serial_echo.ino
Created June 7, 2018 08:40
Read Arduino serial port and print the line
String readString;
int state = LOW;
void setup() {
Serial.begin(9600);
pinMode(LED_BUILTIN, OUTPUT);
Serial.println("Starting");
}
void loop() {
@mahenzon
mahenzon / PyQt5_icon_from_url.md
Last active July 13, 2018 11:59
PyQt5 window icon from URL

Загружаем иконку приложения PyQt5 по ссылке

При разрабтке GUI приложения, независимо от языка программирования и фреймворка, возникает необходимость "навести марафет". Для этого добавляются приятные глазу элементы интерфейса. Один из таких элементов - иконка приложения.

Возможна такая ситуация, когда иконку необходимо загрузить по сети, и в PyQt5 есть встроенные методы для решения этой задачи. В данной заметке мы рассмотрим использование QNetworkAccessManager и QNetworkRequest.

Импортируем необходимые классы и приступаем:

@mahenzon
mahenzon / PyQt5_QTimer.md
Created July 13, 2018 13:04
Simple PyQt5 Timer

Откладываем простые задачи в PyQt5

Иногда при разработке приложений необходимо отложить действие на определенный срок. При этом зачастую отслеживать исполнение нет необходимости. Рассмотрим пример отложенного действия на PyQt5 при помощи QTimer, для этого создадим простейший таймер обратного отсчёта без возможности прерывания.

Для этого добавляем на интерфейс приложения QLCDNumber - на нем мы будем отображать текущее значение, QSlider - при помощи него мы будем устанавливать желаемое значение и кнопку QPushButton для запуска таймера.

Полный листинг программы приведен ниже (с расстановкой элементов и подключением слотов к сигналам), а сейчас я опишу суть:

@mahenzon
mahenzon / BCD.py
Created July 17, 2018 11:02
Convert from int to bcd format and counterwise with pure python
def bcd_to_int(n):
return int(('%x' % n), base=10)
def int_to_bcd(n):
return int(str(n), base=16)
@mahenzon
mahenzon / safe_kwargs.py
Last active October 4, 2018 18:32 — forked from JrooTJunior/example.py
Pass safe kwargs to classes / functions
import inspect
import functools
def check_spec(func: callable, kwargs: dict):
spec = inspect.getfullargspec(func)
if spec.varkw:
return kwargs
return {k: v for k, v in kwargs.items() if k in spec.args}
@mahenzon
mahenzon / mixar_and_factory_boy_django_demo.py
Created March 4, 2020 22:02
Demo creating fixtures for Django using mixer and Factory Boy
# myapp/models.py
from django.db import models
class MyModel(models.Model):
class Meta:
abstract = True
def __str__(self):
data = [f'{k}={v!r}' for k, v in self.__dict__.items() if not k.startswith('_')]
@mahenzon
mahenzon / trace_fibonacci.py
Created August 12, 2020 11:00
Trace calls made to the decorated function
def trace():
"""
Trace calls made to the decorated function.
@trace("____")
def fib(n):
....
>>> fib(3)
--> fib(3)
@mahenzon
mahenzon / docker-compose.yml
Created December 25, 2020 18:24
Sentry in docker-compose (self-hosted Sentry)
version: '3.5'
services:
# sentry
sentry_redis:
image: redis
container_name: sentry_redis
restart: always
networks: