Skip to content

Instantly share code, notes, and snippets.

@whosaysni
whosaysni / astdiff.py
Last active Sep 9, 2018
PoC code to display AST difference with corresponding source lines - ASTの差分をとり差異部分のソースコードと一緒に表示するPoC (SUPER DIRTY)
View astdiff.py
# 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 Jan 19, 2018
マスクしたSQLのハッシュ値を計算する
View sqlgramhasher.py
# 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 Aug 25, 2017
Building SQLAlchemy engine with ATTACHed schema
View sa_sqlite_attached.py
# 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 Jun 2, 2017
本当は怖いジェネレータ式
View generator_gotcha.py
# coding: utf-8
from __future__ import unicode_literals
from itertools import chain
AREA_MAP = {
'北海道': ['北海道'],
'東北': ['青森県', '岩手県', '宮城県', '秋田県', '山形県', '福島県'],
'関東': ['茨城県', '栃木県', '群馬県', '埼玉県', '千葉県', '東京都', '神奈川県'],
'東海': ['岐阜県', '静岡県', '愛知県', '三重県'],
@whosaysni
whosaysni / readme.rst
Last active Dec 2, 2019
Sphinxの日本語複合語検索を大雑把化する
View readme.rst

これは何?

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

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

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

@whosaysni
whosaysni / partialcolumns.py
Created Feb 12, 2017
Why don't you exploit functools.partial with sqlalchemy.Column
View partialcolumns.py
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 Nov 6, 2016
・・・宿題?
View kadai.py
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 Oct 4, 2016
例外をプギャーする
View m9.log
>>> 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 Oct 24, 2016
プログラミング言語PPAP
View ppap.js
// 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 Aug 8, 2016
ボタンを押したら textctrl に表示
View buttons_and_text.py
#!/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