Skip to content

Instantly share code, notes, and snippets.

@whosaysni
whosaysni / ppspp.py
Last active June 19, 2016 15:04
PSP parser in pure python
# coding: utf-8
"""PPSP: Pure Python Server Pages
(c) 2016 Yasushi Masuda.
"""
from collections import OrderedDict
from re import compile, M, S
# State symbols
@whosaysni
whosaysni / memoserv.py
Last active June 6, 2016 15:25
bug brain httpd
# coding: utf-8
"""memoserv
使い方
起動すると、ローカルホストのポート8000で待ち受けます。
POST すると、サーバに値が保存されます。
GET すると、保存されていた値を返し、消去します。
"""
# coding: utf-8
import sys
from inspect import getinnerframes
from functools import wraps
from pprint import pprint
def inspect_on_failure(msg_fmt):
def decorator(func):
@wraps(func)
@whosaysni
whosaysni / sample.py
Created March 29, 2016 15:26
解像度チェック用のPDFサンプルを生成する
# coding: utf-8
from reportlab.lib.pagesizes import A4
from reportlab.platypus import BaseDocTemplate, Frame, PageTemplate
from reportlab.lib.units import mm
from reportlab.platypus.flowables import PageBreak, Spacer
from reportlab.platypus.paragraph import Paragraph
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib import colors
@whosaysni
whosaysni / sample.py
Last active December 16, 2015 13:46
ハイフンで区切られた語のリストから関連のある語のセットを抽出する
coding: utf-8
def answer(relations):
"""ハイフンで区切られた語のリストから連関グラフを抽出する
"""
# 語のペアの集合を生成する
pairs = [set(r.split('-')) for r in relations]
# pairs に要素が残っている間はループ
while pairs:
# 起点となるペアを取り出す
pivot = pairs.pop()
@whosaysni
whosaysni / forked_argparse_test
Last active August 29, 2015 14:06
Doctesting argparse with multiprocessing / multiprocessing で argparse の doctest を書く
"""
>>> from argparse import ArgumentParser
>>> from multiprocessing import Process, Queue
>>> def build_parser():
... parser = ArgumentParser()
... parser.add_argument('-e', '--engage', action='store_true')
... parser.add_argument('-b', '--beam-me-up', action='store_true')
... parser.add_argument('-d', '--good-day-to-die', action='store_true')
... # blah blah blah
... return parser
@whosaysni
whosaysni / gist:0f1e34d98ff330d0db14
Last active August 29, 2015 14:05
Compare images in two directories, showing difference/ディレクトリを探索して画像を比較し、差分画像を出力する
# coding: utf-8
from __future__ import print_function
from os import walk
from os.path import join, splitext
from PIL import Image, ImageChops
def compare_images(dir1, dir2):
for dirname, subdirnames, filenames in walk(dir1):
for filename in filenames:
@whosaysni
whosaysni / leakmeCT.py
Created August 6, 2014 03:30
Leak me CREATE TABLE / SQLAlchemy で実行直前のCREATE TABLEを横取りする
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column
from sqlalchemy import Integer, DateTime, String, Text
from sqlalchemy import UniqueConstraint, Sequence
from sqlalchemy import create_engine
Base = declarative_base()
class SomeTable(Base):
__tablename__ = 'some_nice_table'
@whosaysni
whosaysni / gist:2e3398bef09289be438a
Created August 5, 2014 04:50
Zとgzに対応する: loading both Z/gz compressed file
# 汚くて発狂しそう
def open_zfiles(filename):
open_method = open # builtin open
if filename.endswith('gz'):
open_method = gzip.open # gzip's open
elif filename.endswith('Z'):
from subprocess import Popen, PIPE
open_method = lambda fn: Popen(['zcat', fn], stdout=PIPE).stdout
with open_method(filename, 'rb') as infile:
return infile
@whosaysni
whosaysni / gist:73ff92bb74c35c510a4f
Last active August 29, 2015 14:04
Mimic legacy BLAST's formatdb to execute BLAST+ makeblastdb command: Legacy BLAST の formatdb のふりをして makeblastdb を実行する
#!/usr/bin/env python
# coding: utf-8
"""Mimic legacy BLAST's formatdb to execute BLAST+ makeblastdb command
"""
import argparse, os, sys
def main():
sys.stderr.write('>>>>> %s\n' %(' '.join(sys.argv)))
parser = argparse.ArgumentParser()
simple_options_map = [