GitでHTTPプロキシ越しにcloneする。
何故かcorkscrewを使うやり方が検索エンジンとの親和性が高い様なのでメモ書き。
git config --global http.proxy proxy.example.host:8080
これで、HTTP PROXY越しにclone出来るようになる。
git clone https://github.com/ceki/logback.git logback
参照:
s3cmdを使う。
Ubuntu 10.04.2 でs3cmdを使うます。10.10じゃない理由は、AWSのUbuntuが10.04だからです。
sudo apt-get -y install s3cmd
s3cmdな理由は、id:shot6がs3fsを使っていたからです。
Access KeyとSecret Keyをゲトしておきます。そうしておいて、
s3cmd --configure
- 新しいバケットを作ります。
s3cmd mb s3://mybacket
- バケットにファイルを送ります。
touch test.txt s3cmd put test.txt s3://mybacket
- バケットのファイルを上書きします。
s3cmd put test.txt s3://mybacket/test.txt
- バケットのファイル一覧を取ります。
s3cmd ls s3://mybacket
mkdir mylocaldir s3cmd sync s3://mybacket ./mylocaldir
- バケットの中にあるファイルを削除します。
s3cmd del s3://mybacket/test.txt
s3cmd rb s3://mybacket
バケットの中から一番下のファイルを取得する。
LATEST_BK=$(s3cmd ls s3://sinsai-db-backup | cut -f7 -d' ' | tail -1) s3cmd get $LATEST_BK ./output
コマンドラインで処理するなら、s3cmdサイコーです。
IPv6アドレスをより妥当な正規表現でマッチする。
と言うサイトがあります。IPv6アドレスとして妥当かチェックしてくれる上に、RFC5952に則った表記を教えてくれます。
ここでは正規表現によってIPv6アドレスとして正しいか評価しています。
それは、以下のような正規表現です。
((([0-9a-f]{1,4}:){7}([0-9a-f]{1,4}|:))|(([0-9a-f]{1,4}:){6}(:[0-9a-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9a-f]{1,4}:){5}(((:[0-9a-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9a-f]{1,4}:){4}(((:[0-9a-f]{1,4}){1,3})|((:[0-9a-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9a-f]{1,4}:){3}(((:[0-9a-f]{1,4}){1,4})|((:[0-9a-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9a-f]{1,4}:){2}(((:[0-9a-f]{1,4}){1,5})|((:[0-9a-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9a-f]{1,4}:){1}(((:[0-9a-f]{1,4}){1,6})|((:[0-9a-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9a-f]{1,4}){1,7})|((:[0-9a-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)?\s*$
何か凄い量ですね。以下、理解し易くする為にフォーマットしてみました。
続きを読むintポインタをPythonで配列の様に扱う。
こんな感じ。だけど、微妙に釈然としない感じ。
コレくらいは、標準搭載されてても良いんじゃないのかなぁ。
ちなみに、このコードだとデータの書きこみは出来ませぬ。
cdef class IntArrayIterator: cdef int index cdef int length cdef array def __init__(self, array): self.index = 0 self.length = len(array) self.array = array def __next__(self): if(self.index < self.length): pos = self.index self.index = self.index + 1 return self.array[pos] raise StopIteration def __iter__(self): return self cdef class IntArray: cdef int length cdef int *data #http://www.cosc.canterbury.ac.nz/greg.ewing/python/Pyrex/version/Doc/Manual/special_methods.html def __len__(self): return self.length def __iter__(self): return IntArrayIterator(self) cdef int getitem(self, int x): if(x < self.length): return self.data[x] raise IndexError, "index out of range %s" % x def __getitem__(self, int x): return self.getitem(x) def __getslice__(self,int f,int t): if(f < t and f < self.length and t < self.length): a = [] for i in range(t-f): c = f + i a.append(self.getitem(c)) return a raise IndexError, "index out of range [%(from)s:%(to)s]" % {"from":f,"to":t} def __str__(self): cdef r = [] cdef int i = 0 r.append("[") for i in range(self.length): r.append(str(self.getitem(i))) if(i + 1 < self.length): r.append(",") r.append("]") return "".join(r)
Cythonを32bit Windowsで使う
うっかりCのライブラリが世の中リリースされてたりされてなかったりする訳ですけども、
プロトタイプ的な何かを作ろうと思った時に、ヘタレはCで頑張ったり出来なかったりするのですね、主に僕とか。
いや、Cが全然書けないって言うつもりは無いけど、漢の子ならゴリゴリ書けるだろJKとか言われても困る訳で。
と言う訳で、Pythonとか使っちゃうのです。実は僕、Pythonの事良く知らないんだけどもさ。
本日のお題は、CythonをWindowsXPの32bit版かつVisual Studio 2008 Express上で使ってみますよ、と言う話。
続きを読む