Skip to content

Instantly share code, notes, and snippets.

@dideler
Last active January 6, 2024 15:11
Show Gist options
  • Save dideler/5242203 to your computer and use it in GitHub Desktop.
Save dideler/5242203 to your computer and use it in GitHub Desktop.
Various snippets of code. Enjoy!

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.

# 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
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)
# 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;
}
}
#!/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
# 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
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.
# 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]
#!/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
print
def print_maze():
for i in range(len(maze)):
for j in range(len(maze[0])):
print(maze[i][j]),
print
print
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.
# 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))
#!/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
# 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)
--title Example Title
--author Your Name <email@example.com>
--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
// 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
}
# 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