Skip to content

Instantly share code, notes, and snippets.

View timrprobocom's full-sized avatar

Tim Roberts timrprobocom

  • Providenza & Boekelheide
  • Tigard, Oregon
View GitHub Profile
@timrprobocom
timrprobocom / KeyChord.py
Created March 29, 2017 17:25
Example showing key chord handling with wxPython
import wx
class Gui(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, title="test", size=(800, 400))
self.txt = wx.TextCtrl( self, -1, "Hello", style=wx.TE_MULTILINE )
self.txt.Bind( wx.EVT_KEY_DOWN, self.onKeyDown )
self.txt.Bind( wx.EVT_KEY_UP, self.onKeyUp )
self.keylist = []
self.timer = wx.Timer(self)
@timrprobocom
timrprobocom / AveryLabels.py
Last active May 28, 2024 12:22
A class to manage printing on Avery labels with ReportLab
import os
from collections.abc import Iterator
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import LETTER, landscape
from reportlab.lib.units import inch
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
# Usage:
# label = AveryLabels.AveryLabel(5160)
import math
def polar_add( v1, v2 ):
dtheta = v2[1]-v1[1]
r = math.sqrt( v1[0]**2 + v2[0]**2 + 2*v1[0]*v2[0]* math.cos(dtheta) )
theta = v1[1] + math.atan2(
v2[1] * math.sin(dtheta),
v1[1] + v2[1]*math.cos(dtheta)
)
return (r, theta )
import re
data = [
'atr.i',
'atr i',
'ok',
'test',
'ro bn.',
'ro bn',
'talk 1',
// I seriously doubt this is your actual data structure.
const data = [
[name = 'john doe', name2 = 'hello'],
[age = 23],
[hobby = [{
name: 'mancing'
}]]
];
data.map((item, key) => console.log(item, key))
@timrprobocom
timrprobocom / boxletter.py
Created February 25, 2022 23:27
How to draw text in boxes
from PIL import ImageDraw, Image, ImageFont
BLACK = (0,0,0)
WHITE = (255,255,255)
LTBLUE = (192,192,255)
fig = Image.new( "RGB", (320,320), WHITE )
arial = ImageFont.truetype("../.fonts/arial.ttf", 32 )
y = 100
@timrprobocom
timrprobocom / dbtest.py
Created March 10, 2022 05:27
Sample Database Benchmark
# OK, I ran the following Python to create the database:
import sqlite3
import random
import os
os.remove( 'test.db' )
db = sqlite3.connect( "test.db" )
cursor = db.cursor()
cursor.execute( """\
import struct
# Return a RIFF file
class LIST:
def __init__(self, name, f):
# contains a type and a list of subchunks.
self.offset = f.tell() - 4
self.name = name.decode()
size = struct.unpack('I', f.read(4))[0]
"""
This does what you are trying to do, but with all the extraneous code eliminated.
Notice that strings are iterables, just like lists. Any time you are making a list
of single characters, you should probably use a string. Also notice that we write
`'xxx'.upper()`, not `str.upper('xxx')`. Also note that it is silly to write `
if result='N': pass`. Just test for what you want to know.
"""
import random
lower_case_letters = 'abcdefghijklmnopqrstuvwxyz'
@timrprobocom
timrprobocom / waterflow.py
Created December 18, 2022 06:38
Checking for water flow through a block
def physics(data):
block = [[int(i) for i in row.split(',')] for row in data.split(';')]
width = len(block[0])
height = len(block)
water = block[0].index(1)
for row in range(1,height):
for possible in (-1,0,1):
if water+possible in range(width) and block[row][water+possible]:
water += possible