Skip to content

Instantly share code, notes, and snippets.

@whosaysni
whosaysni / astdiff.py
Last active September 9, 2018 01:09
PoC code to display AST difference with corresponding source lines - ASTの差分をとり差異部分のソースコードと一緒に表示するPoC (SUPER DIRTY)
# coding: utf-8
import ast
import sys
from difflib import SequenceMatcher
class NodeDumper(object):
def __init__(self, node, indent_chars=' ', indent_level=0):
@whosaysni
whosaysni / sqlgramhasher.py
Last active January 19, 2018 01:16
マスクしたSQLのハッシュ値を計算する
# coding: utf-8
from hashlib import md5
from sqlparse import parse
from sqlparse.exceptions import SQLParseError
from sqlparse.filters import StripCommentsFilter, StripWhitespaceFilter
from sqlparse.tokens import Other, Literal
from logging import getLogger
logger = getLogger('SQLGramHasher')
@whosaysni
whosaysni / sa_sqlite_attached.py
Created August 25, 2017 13:04
Building SQLAlchemy engine with ATTACHed schema
# coding: utf-8
import sqlite3
from types import ModuleType
def sqlite_attached(schema_map):
mod = ModuleType('', 'sqlite3_attach_%08x' %(id(schema_map)))
for k, v in vars(sqlite3).items():
if k not in ['connect']:
@whosaysni
whosaysni / generator_gotcha.py
Last active June 2, 2017 13:22
本当は怖いジェネレータ式
# coding: utf-8
from __future__ import unicode_literals
from itertools import chain
AREA_MAP = {
'北海道': ['北海道'],
'東北': ['青森県', '岩手県', '宮城県', '秋田県', '山形県', '福島県'],
'関東': ['茨城県', '栃木県', '群馬県', '埼玉県', '千葉県', '東京都', '神奈川県'],
'東海': ['岐阜県', '静岡県', '愛知県', '三重県'],
@whosaysni
whosaysni / readme.rst
Last active December 2, 2019 12:32
Sphinxの日本語複合語検索を大雑把化する

これは何?

Sphinxで日本語検索をするときに、複合語をバラしてインデクス上の語にヒットさせやすくする小技です。

Sphinx で日本語検索インデクスを生成させる場合、デフォルトの設定では、TinySegmenterのPython版を使って単語を切り出します。 一方で、検索ページのフォームは、入力に日本語の複合語が入っていても単語の切り出しを行わず、複合語のままでインデクスを走査します。 その結果、例えば、元の文章に「システムの標準」という語が入っていて、そこから「標準」、「システム」というインデクスが生成されていると、「標準システム」「標準のシステム」「システム標準」などを検索してもヒットしません。

この修正では、検索フォームに入力された単語を、JavaScript版のTinySegmenter(Python版の元となったオリジナル)で分割することによって、複合語での検索語入力(例:「システム標準」)を、よりインデクスに近い複数の単一語での検索入力(例:「システム」と「標準」)に置き換えます。

@whosaysni
whosaysni / partialcolumns.py
Created February 12, 2017 15:41
Why don't you exploit functools.partial with sqlalchemy.Column
from functools import partial
from sqlalchemy.dialects.mysql import (
BIGINT, SMALLINT, TINYINT, INTEGER, DECIMAL,
VARCHAR, TIMESTAMP, DATETIME)
from sqlalchemy.sql.expression import func
from sqlalchemy import Column, Index, MetaData, Table
auto_pk=dict(autoincrement=True, primary_key=True)
UINT5Column = partial(
@whosaysni
whosaysni / kadai.py
Last active November 6, 2016 03:06
・・・宿題?
import numpy as np
file_paths = glob('/b/*.csv') # /b/*.csv ファイル
for offset in [1, 11]:
col3_avgs = []
col2_avgs = []
for i in range(10):
file_path = '/b/a{}.csv'.format(offset+i)
data = np.load.text(file_path, comments='#', delimiter=',', skiprows=1)
@whosaysni
whosaysni / m9.log
Created October 4, 2016 12:52
例外をプギャーする
>>> sys.excepthook = lambda y,v,r: sys.stderr.write(u'プギャー m9 (^д^)9m <{}\n'.format(y.__name__))
>>> 1/0
プギャー m9 (^д^)9m <ZeroDivisionError
>>> 'asdf' + 1
プギャー m9 (^д^)9m <TypeError
>>> __import__('math').sqrt(-1)
プギャー m9 (^д^)9m <ValueError
>>>
@whosaysni
whosaysni / ppap.js
Last active October 24, 2016 07:00
プログラミング言語PPAP
// based on https://gist.github.com/jasonherald/9901990
var chars="ペンパイナアポー"
var ptr = 0;
var rptr = 0
var ins = Array();
var tape = 30000;
var register = 0;
var ctr = 0;
@whosaysni
whosaysni / buttons_and_text.py
Last active August 8, 2016 15:05
ボタンを押したら textctrl に表示
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# generated by wxGlade 0.6.8 on Sun Jul 24 23:47:27 2016
#
import wx
import csv
# begin wxGlade: dependencies