Snippets of code that I've played around with, which could be useful to others.
Nothing impressive, but you may learn a thing or two.
Last active
January 6, 2024 15:11
-
-
Save dideler/5242203 to your computer and use it in GitHub Desktop.
Various snippets of code. Enjoy!
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Collect command-line options in a dictionary. | |
# | |
# Do not use this for any production code! Use a dedicated module instead. | |
# See my gist for more info: https://gist.github.com/dideler/2395703 | |
# | |
# Usage: | |
# $ python main.py -i input.txt -o output.txt | |
# input file is input.txt | |
# {'-o': 'output.txt', '-i': 'input.txt'} | |
def getopts(argv): | |
opts = {} | |
while argv: | |
if argv[0][0] == '-': | |
opts[argv[0]] = argv[1] | |
argv = argv[1:] | |
return opts | |
if __name__ == '__main__': | |
from sys import argv | |
myargs = getopts(argv) | |
if '-i' in myargs: # Example usage. | |
print 'input file is', myargs['-i'] | |
print myargs |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from subprocess import call | |
from time import sleep | |
tabs = "" | |
for _ in xrange(9): | |
call(["clear"]) | |
print """ | |
{0} 0 | |
{0} \|/ | |
{0} | | |
{0} / \\""".format(tabs) | |
tabs += "\t" | |
sleep(0.5) | |
call(["clear"]) | |
print """ | |
{0} 0 | |
{0} -|- | |
{0} | | |
{0} / \\""".format(tabs) | |
tabs += "\t" | |
sleep(0.5) | |
call(["clear"]) | |
tabs = "" | |
for _ in xrange(15): | |
call(["clear"]) | |
print """ | |
{0} __ | |
{0} _| =\__ | |
{0}/o____o_\\""".format(tabs) | |
tabs += "\t" | |
sleep(0.4) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Quick and dirty ways to convert chars to their integer or ascii value. | |
# E.g. '1' -> 1, 'a' -> 97 | |
#include <iostream> | |
using namespace std; | |
#define char2int(c) c-'0' | |
#define char2ascii(c) int(c) | |
int main() | |
{ | |
char c; | |
while (cin >> c) | |
{ | |
int value = char2int(c); | |
if (value >= 0 && value <= 9) | |
cout << c << " is a digit; converted to an int" << endl; | |
else | |
cout << c << " is not a digit; its ascii value is " << char2ascii(c) << endl; | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env ruby | |
# Used to extract photos laid out in a grid inside one big photo. | |
# Several such big photos exist, so repeat the process for each. | |
# apt-get install libdevil-dev | |
# gem install devil | |
require 'devil' | |
xoffs = [5, 961] | |
yoffs = [116, 941, 1766] | |
width = 946 | |
height = 631 | |
counter = 1 | |
exclude_files = %w(2 3 10 12).map { |file| sprintf("%03d", file) << ".jpg" } | |
Dir.mkdir("crops") unless Dir.exists?("crops") | |
Dir.glob("*.jpg") do |jpg| | |
next if exclude_files.include? jpg | |
Devil.load_image(jpg) do |img| | |
xoffs.each do |xoff| | |
yoffs.each do |yoff| | |
tmp_img = img.clone | |
tmp_img.crop(xoff, yoff, width, height) | |
tmp_img.save("crops/#{counter}.jpg") | |
puts "Saved #{counter}.jpg" | |
tmp_img.free | |
counter += 1 | |
end | |
end | |
end | |
end |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# As seen on SO: | |
# http://stackoverflow.com/questions/36932/whats-the-best-way-to-implement-an-enum-in-python | |
class Enum(set): | |
def __getattr__(self, name): | |
if name in self: | |
return name | |
raise AttributeError | |
Commands = Enum(['Start', 'Stop', 'Pause']) | |
print Commands.Start, Commands.Stop, Commands.Pause |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import os | |
try: | |
print os.environ['FOO'] | |
except KeyError: | |
print 'Please set the environment variable FOO' | |
if 'FOO' in os.environ: | |
print os.environ['FOO'] | |
print os.environ.get('FOO') # Returns None if not found. | |
print os.environ.get('FOO', 'BAR') # Returns 'BAR' if not found. | |
print os.getenv('FOO') # Returns None if not found. | |
print os.getenv('FOO', 'BAR') # Returns 'BAR' if not found. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Have a function that returns more arguments than you need? Here are some options. | |
def foo(): | |
return 1, 2, 3 | |
a, b, _ = foo() | |
a, b = foo()[:2] |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python | |
# | |
# Naive recursive search for path traversal in a simple maze. | |
# | |
# Usage: | |
# | |
# $ python maze.py | |
# S # # # # # | |
# . . . . . # | |
# # . # # # # | |
# # . # # # # | |
# . . . # . G | |
# # # . . . # | |
# | |
# S # # # # # | |
# o o . . . # | |
# # o # # # # | |
# # o # # # # | |
# x o o # o G | |
# # # o o o # | |
maze = [['S','#','#','#','#','#'], | |
['.','.','.','.','.','#'], | |
['#','.','#','#','#','#'], | |
['#','.','#','#','#','#'], | |
['.','.','.','#','.','G'], | |
['#','#','.','.','.','#']] | |
def find_path(x, y): | |
""" Finds a path through our character-based maze (stored in a 2D list). | |
Uses recursion. See www.cs.bu.edu/teaching/alg/maze for more details. | |
""" | |
if x < 0 or y < 0 or x > 5 or y > 5: return False # If outside maze. | |
if maze[x][y] == 'G': return True # If found goal. | |
if maze[x][y] == '#' or maze[x][y] == 'o': return False # If position not open. | |
maze[x][y] = 'o' # Mark (x,y) as part of solution path. | |
if find_path(x, y-1): return True # Search north. | |
if find_path(x+1, y): return True # Search east. | |
if find_path(x, y+1): return True # Search south. | |
if find_path(x-1, y): return True # Search west. | |
maze[x][y] = 'x' # Unmark (x,y) as part of solution, was a dead-end. | |
return False | |
def print_maze_raw(): | |
for char in maze: | |
print char | |
def print_maze(): | |
for i in range(len(maze)): | |
for j in range(len(maze[0])): | |
print(maze[i][j]), | |
if __name__ == '__main__': | |
print_maze() # Before. | |
find_path(0,0) # Starting position is (0,0). | |
maze[0][0] = 'S' # Remark our starting position (got lost during path traversal). | |
print_maze() # After. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Open a file in its default application. | |
import os, subprocess | |
def openfile(filepath): | |
if sys.platform.startswith('darwin'): | |
subprocess.call(('open', filepath)) | |
elif os.name == 'nt': | |
os.startfile(filepath) | |
elif os.name == 'posix': | |
subprocess.call(('xdg-open', filepath)) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env bash | |
# The cd ensures this script is executed from the project's root | |
# directory, regardless of where this script is called! | |
# | |
# Source: https://github.com/github/scripts-to-rule-them-all | |
cd "$(dirname "$0")/.." | |
script/bootstrap | |
script/test |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# A simple way to estimate a square root (if you cannot use a sqrt function). | |
# | |
# Example usage (prompts for the number if none passed as argument): | |
# $ python sqrt.py 12313 | |
# estimated = 110.963958113, actual = 110.963958113 | |
from __future__ import division | |
import math | |
from sys import argv | |
def newtons_method(num): | |
"""Newton's Method for finding a square root. | |
http://www.quora.com/Mathematics/How-can-I-find-the-square-root-of-22-without-a-calculator | |
""" | |
guess = num / 10 # An arbitrary guess, we need to start somewhere. | |
for _ in xrange(10): | |
guess = 0.5 * (guess + (num / guess)) # Improve the guess. | |
print 'estimated = {}, actual = {}'.format(guess, math.sqrt(num)) | |
try: | |
num = int(argv[1]) | |
except: | |
num = input('Enter a number: ') | |
newtons_method(num) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
--title Example Title | |
--author Your Name <[email protected]> | |
--date today | |
--## or put a static date (this is a comment BTW). | |
--horline | |
--withborder | |
--fgcolor black | |
--bgcolor white | |
--## You can "pause" with --- | |
--- | |
--## colors: red, white, green, blue, cyan, magenta, yellow, black, ... | |
--## the set color will continue to be used on following slides unless changed | |
--boldon | |
--color red | |
--center Give a man a fish and you feed him for a day | |
--center Teach a man to fish and you feed him for a lifetime | |
--boldoff | |
--color magenta | |
___ | |
___======____=---=) | |
/T \_--===) | |
L \ (@) \~ \_-==) | |
\ / )J~~ \-=) | |
\\___/ )JJ~~ \) | |
\_____/JJJ~~ \ | |
/ \ , \J~~~~ \ | |
(-\)\=| \~~~ L__ | |
(\\) ( -\)_ ==__ | |
\V \-\) ===_____ J\ \\ | |
\V) \_) \ JJ J\) | |
/J JT\JJJJ) | |
(JJJ| \UUU) | |
(UU) | |
--color black | |
--newpage page name is optional | |
--heading heading is the same as title | |
* 1 (numbered list) | |
* 2 | |
* 3 (nested list) | |
* 4 | |
* 5 | |
* 6 | |
--##huge shows huge text, requires FIGlet | |
--##sethugefont mini (you can change FIGlet fonts) | |
--center this text is centred | |
--right ___======____=- | |
--right /T \_- | |
--right L \ (@) \~ \ | |
--right \ / )J~~ | |
--right \\___/ )JJ~~ | |
--right \_____/JJJ~~ | |
--right / \ , \J~~~~ | |
--right (-\)\=| \~~~ | |
--right (\\) ( -\)_ | |
--right \V \-\) === | |
--right \V) | |
--## left justified is default, there is no --left | |
a paragraph of text | |
whitespace is preserved | |
--newpage | |
--heading yet another page | |
--beginslideleft | |
- this is not a real list, but close enough | |
--endslideleft | |
--beginslidetop | |
look out below! | |
--endslidetop | |
--beginslideright | |
i'm coming from the right | |
--endslideright | |
--beginslidebottom | |
who's up there? | |
--endslidebottom | |
--newpage | |
--beginshelloutput | |
$ any line beginning with $ in shell output is typed | |
this line will not be typed | |
--- | |
$ this line will be typed after a pause | |
the end | |
--endshelloutput | |
--beginoutput | |
like shelloutput, this is enclosed in a "terminal" | |
but unlike shelloutput, it's not "typed" | |
--endoutput | |
--newpage text_formatting | |
--revon | |
this should have the bg and fg colours reversed | |
--revoff | |
--ulon | |
this should be underlined | |
--uloff | |
--##exec echo "this is exec output" -- doesn't work | |
--##exec fbi ~/Pictures/csc-mascot.png | |
--newpage | |
--footer a buggy footer, doesn't go away on new slides! | |
--center Fish is fast, the auto-completion is amazingly helpful, and it's intuitive to use without too much configuration. Give it a try |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Examples of how you can time your benchmarks. | |
#include <ctime> // time_t, time, difftime, ctime | |
#include <chrono> // C++11 | |
#include <iostream> | |
using std::chrono::duration_cast; | |
using std::chrono::milliseconds; | |
using std::chrono::time_point; | |
using std::chrono::steady_clock; // Suitable for measuring intervals. | |
using std::chrono::system_clock; | |
using std::cout; | |
using std::endl; | |
int main | |
{ | |
// Human-readable time and date. | |
time_t start_time = system_clock::to_time_t(system_clock::now()); | |
cout << "Started at " << ctime(&start_time) << endl; // e.g. Sat Jun 16 20:42:57 2013 | |
// Measure an interval in whole seconds. | |
time_t start, stop; | |
time(&start); | |
doProcessing(); | |
time(&stop); | |
cout << difftime(stop, start) << endl; // e.g. 5 | |
// Measure an interval in milliseconds (converted to seconds by dividing by 1000.0). | |
time_point<steady_clock> start, stop; | |
start = steady_clock::now(); | |
doProcessing(); | |
stop = steady_clock::now(); | |
cout << duration_cast<milliseconds>(stop-start).count() << endl; // e.g. 5312 | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Retrieves the current (Eastern) time from the US Naval Observatory Master Clock. | |
url = 'http://tycho.usno.navy.mil/cgi-bin/timer.pl' | |
import urllib2 | |
for line in urllib2.urlopen(url): | |
if 'EST' in line or 'EDT' in line: | |
print line | |
import requests | |
for line in requests.get(url).text.split('\n'): | |
if 'EST' in line or 'EDT' in line: | |
print line |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment