Hatena::ブログ(Diary)

shouhの日記

2016-03-04

今週の Github Trending Python Weekly

https://github.com/trending?l=python&since=weekly

七回目。前回から二週間ほど空いてしまった。ぶっちゃけ飽きてる、けど勉強と刺激のためにやる。

ZeroNet

https://github.com/HelloZeroNet/ZeroNet

BitCoinBitTorrentの技術を用いた分散ウェブサイト

もっと言うと(中央サーバを介さず)P2P で直接アクセスできるウェブサイトをつくれる。利用者自身がノードとなり、立ち上げたいウェブサイトを選べば、もう立ち上がる。誰か一人でも立ち上げておれば、そのウェブサイトには誰でもアクセスできる。

BitCoin分散技術を利用したアイデアは色々と聞くけれど、ウェブサイト運用もできちゃうんだね。へえ。

zhao

https://github.com/programthink/zhao

読めん。全部中国語

ただ、中国圏だけで Trending Weekly に取り上げられるってことから、いかに中国圏人口が多くて、かつ賑わってるかってことを思い知る。

gdom

https://github.com/syrusakbary/gdom

GraphQL(Facebook社開発のクライアントサーバ間データ通信仕様及びそのクライアント群) と Graphene(GraphQLをPythonで使うためのPythonライブラリ) を用いたウェブスクレイピングツール

デモ http://gdom.graphene-python.org/ を見たらわかりやすいけど、GraphQL ベースの言語(JSON + CSS セレクタみたいな表記)で書いて、結果として JSON 文字列を得るって感じ。

もっと言えばウェブスクレイピング用の言語といったところか。

DROWN Scanner

https://github.com/nimia/public_drown_scanner

DROWN 攻撃でやられる脆弱性持ちサーバスキャンするツール

DROWN 攻撃については SSLの脆弱性で日本の大手サイトを含む全世界1100万以上のHTTPSサイトが攻撃を受け得ると判明 - GIGAZINE が詳しい。一言で言うと、

  • SSLv2 の脆弱性を突き、暗号化を解除して中身を傍受できる
  • SSLv2 自体は古いが、SSLv2 に対応してるサーバはこの攻撃の対象になる
  • 国内大手サイトも結構この攻撃対象になり得るという調査結果が出ている
  • OpenSSL最新版の1.0.2g、1.0.1sではSSLv2プロトコルを無効化することで対応済

こんな感じ。

DROWN Scanner は完全なツールではないみたい。これだけで「検出されなかった、じゃあ脆弱性は100%無いわけね、やった!」などと過信しないように、みたいな警告をしている。

Minimal Django

https://github.com/rnevius/minimal-django

Django で(ローカル動作確認の)Hello world を行う際の最小構成。コードはわずか 23 行。目的は「Django でもその気になれば micro framework 並の小ささで実行できるんだぜ?」ってことの証明。

あくまでローカルで動かせるだけであり、Webサーバ上(たとえば Heroku )にデプロイして動かせるわけではないことに注意。

shellpy

https://github.com/lamerman/shellpy

Python で書く Shell script代替。基本は Python そのものだが「`」の役割が異なっている。

  • Shell script では「実行コマンド結果の展開」
  • shellpy では「コマンドの実行」
    • 「result = `ls -l`」 という書き方で実行結果も入手できる

ちなみに拡張子は .spy 。

Windows では使えない。

「shell script も使うけど、構文や構造の記述部分では python で楽したい」って場合に使えそう。私は shell script 大嫌いなので使う気無いけど。

GitMiner

https://github.com/danilovazb/GitMiner

Github 検索ページのラッパー。わざわざブラウザで検索ページ開かなくても、コンソールからサクッと検索できる。表示はカラフルで見易いが、表示速度は遅め。なんていうか一件ずつちまちま表示していく感じ。

興味深いのは、コードがわずか262行なところ。requests ライブラリでコンテンツを取ってきて、lxml ライブラリパースしてる。こいつら使えば、これくらいのことは造作もなくできちゃうよってことか。参考になる。

私はそこまで CLI 狂ではないので、別に要らないかな。

Awesome Cheatsheet

https://github.com/detailyang/awesome-cheatsheet

いわゆる Awesome list の一つ。主要言語やツール毎の Cheet sheet 系情報リンク集。コマンドのチートシートとか、言語のスタイルガイドとか、そういうのが網羅されているので目を通しておきたい。

運用方法については、こんな感じになってる。

  • docs ディレクトリ配下に a.md, b.md ……という具合にアルファベット毎に索引を作っている
  • tests/url_validate.py にてURL表記のバリデーションと、*.md のマージを行う
  • Pull Request には対応しているが、README.md に Contribution のやり方を書いているほど積極的ではない

python-future

https://github.com/PythonCharmers/python-future

Python 2.x/3.x 互換性担保の仕組み。

英文難しくてよくわからんが、たぶん

  • Before
    • python 2.7 で print('hoge') を実行するとエラーになる(python3.xのprint関数表記)
  • After
    • python 2.7 で print('hoge') を実行してもエラーにならない(python-futureが裏で小細工してくれる)

こういうことだと思う。Python 3.x の記述で 2.x も動作できちゃうよってことか。

私は今のところ頑なに python 2.7 を使っているので必要性が無いけれど、将来 python 3.x も使うようになった時にまた思い出してみよう。

W.I.L.L

https://github.com/ironman5366/W.I.L.L

willbeddow.com さんが使ってるユーティリティ。といっても Google 検索や Slack などウェブサービスに関するユーティリティみたい。詳しいドキュメントが無いのでよーわからん。

個人的には、慣習に従わず独自路線で行ってるところ(READMEの拡張子が .md じゃないとか詳細ドキュメントが無いとかコードがC言語ライクな手続き的とか)と、このオレオレツール群を自信満々に公開しているところに親近感を感じる。私もオレオレツール( https://github.com/shouh/scripts これとか)を公開したくなった。

2016-02-12

今週の Github Trending Python Weekly

https://github.com/trending?l=python&since=weekly

六回目。

maybe

https://github.com/p-e-w/maybe

Linuxツール。コマンドを実行する前に「このコマンドでここのファイルがこう変更されるよ」ってのを教えてくれる。rm -rf 等で消す前の確認などに重宝。

内部実装としては、ptrace ライブラリを用いてファイル操作系のシステムコールをフックして、んでそれを何もしない処理に置き換えてるという感じ。すなわちシステムコールに従って確認しているので、本確認の確かさは(どのシステムコールをフックするかという指定がちゃんと網羅されていれば)保証されている。

その指定とやらは https://github.com/p-e-w/maybe/blob/master/maybe/syscall_filters.py に列挙されている。ここに書いてあるコマンドについてはフックするというわけだ。逆を言えば、ここに書いてないコマンドについてはフックしないので、maybe で確認できない。

records

https://github.com/kennethreitz/records

requests ライブラリを開発してる人の最新作。SQL for Humans と題され、SQL 構文で Postgre DB にアクセスするライブラリ。もちろん Python らしく辞書やらキーワード引数やらも使われている。つまりは pythonSQL 構文がわかっておれば Postgre の DB を簡単に扱えるよって感じ。

DB は使ってないのでピンと来ないけど、Postgre を使う機会が来たら使ってみようかしらん。

twtxt

https://github.com/buckket/twtxt

マイクロブログ(短い文を投稿する Twitter みたいな)ツールだが、最大の特徴は分散型であること。つぶやきデータは txt ファイルで構成され、これを自分のサーバ等にアップしたものを twtxt で読みに行くことでタイムライン表示やらフォローやらを行う仕組み。たとえば hoge さんが自身のファイルを http://www.hoge.com/tweet.txt にアップしておけば、他の人は twtxt にてこのURLを指定することで hoge さんをフォローしたことになる。

ハッカー向けと謳っており、操作はコマンドラインで完結できる&コマンド体系も美しい(らしい。私はよくわからないです)。

himawaripy

https://github.com/boramalper/himawaripy

ほぼリアルタイム(厳密に言えば10分遅れ)で、衛生ひまわり8号から撮影した地球の写真をデスクトップの壁紙に設定するツールLinux の一部デスクトップ環境のみ対応。起動設定は crontab にて行う。

maltrail

https://github.com/stamparm/maltrail

不正トラフィック検出ツール。特徴はモダンGUIと、ユーザ定義も可能なホワイトリスト/ブラックリストだろうか。

README に解説が詳しく書かれてるけど分量多いので断念。ちょっとだけ。

あと余談だけどデフォルトのuser/pass が admin/changeme! となっているのが興味深い。パスワードとして change me という言葉を使うことで、ユーザにパスワード変えろやおいってのを伝えることができる。これいいね。私も使いたい。

bokeh

https://github.com/bokeh/bokeh

Python で記述するデータビジュアライザ。イメージは D3.js だが、マシンパワーを使いまくってとにかくキレイでクールな絵を描こうぜって方針なので貧弱マシンだとたぶん死ぬ。

利用イメージは、python 言語でデータをリストに起こして、それを専用のクラスで読み込んであれこれメソッドを呼び出して加工する感じ。で、最後に show() を実行して html ファイルとして出力。

PyDataset

https://github.com/iamaziz/PyDataset

世界中に散らばるデータセットを python から簡単に使えるようにしようぜってツール。データセットって言葉がピンと来ないけど、resource.tar.gz という15MBくらいのファイルに色んなデータセット(CSVとtxt)が入ってて、これを上手いこと読み込んで python 上ですぐに使えるようにする、ってアイデア。

使いたいデータの指定はデータセット名の入力にて行う。

……うーん、どんなデータが入ってるのかピンと来ないけど、resource.tar.gz を解凍して resources/resources/rdata/datasets.html を開いてみると、なんとなくわかる。何らかのテストで使えそうな各種統計データって感じだ。

テストデータに困ってる場合には使えそうだ。

django-zappa

https://github.com/Miserlou/django-zappa

サーバ無しで Django を立ち上げる。実体は AWS Lambda + Amazon API Gateway を用いて簡単にデプロイを行うためのラッパー

Amazon のサービス自体を知らないので簡単に調べてみた。

  • AWS Lambda: コードをアップするだけで実行できるようにするサービス。従来はサーバサイドプログラミングやらデータベース設定やら色々煩雑だったが、こいつを使うとほぼコードのアップだけで動作させることできて楽ちん
  • Amazon API Gateway: WebAPI を備えたシステムを作るサービス。ベースとなるシステムは限られているが、AWS Lambda も含まれている。

……なるほど、要するに Amazon が提供するお手軽システムを使って、Django サーバをお手軽に立ててやるよって話ですね。

Django に嫌気が差したら試してみるよ。

glances

https://github.com/nicolargo/glances

CUI なシステム情報表示ツール。本来は UNIXcurses をベースとしたものだが、Windows でも使えたりする。

Windows ユーザなので Windows で軽く動かした感想を。情報量的にはタスクマネージャと同等だが、一画面でコンパクトに表示してくれるので見易い。あと、コマンドプロンプトから確認したいって場合にも便利。tasklist コマンドよりも全然役立つ。……まあ情報表示までが遅い(5秒くらい待つ)のが難点か。

あと -w オプションを使えばブラウザで見ることもできる。以下のように bottle モジュールインストールしてやる感じ。ちなみに当方環境では表示できなかった(ページは開けたが内部の通信でエラーが出てる。原因不明)

$ glances -w
Bottle module not found. Glances cannot start in web server mode.

$ pip install bottle
Collecting bottle
  Downloading bottle-0.12.9.tar.gz (69kB)
    100% |################################| 69kB 146kB/s
Installing collected packages: bottle
  Running setup.py install for bottle
Successfully installed bottle-0.12.9

$ glances -w
Glances web server started on http://0.0.0.0:61208/
# 実際は http://127.0.0.1:61208/ を開くこと

ASCIIMATICS

https://github.com/peterbrittain/asciimatics

CUI 上で ASCII ART なアニメーションを表示するライブラリ。どちらかといえば娯楽目的だけど、画像から ASCII ART に変換する機能があるように結構本格的に作りこんである。

使い方は、本ライブラリモジュール達を必要に応じて import する感じ。たとえば円を描きたかったら Crcle インスタンスを作ってあれこれパラメータ設定して、最後に play() を実行する、みたいな。

2016-02-06

今週の Github Trending Python Weekly

https://github.com/trending?l=python&since=weekly

五回目。

Kinto

https://github.com/Kinto/kinto

同期・共有機能を備えた JSON ストレージサービス。いわゆる BaaS と呼ばれるもので、DB を使うよりも簡単にデータを保持できる。WebAPI + HTTP リクエストで簡単に操作できそう。

類似ツールとの比較は http://kinto.readthedocs.org/en/latest/overview.html#comparison この辺。Kinto の特徴は、言語が Python であることと、類似ツールの中では満たしてる要件が多いといったところか。

私は DB は(難しくてハードル高いので)嫌いだが、こういうやつなら挫折せずに済むかもしれない。気が向いたら、データを保存するWebアプリを作ってみたい。

Routerhunter 2.0

https://github.com/jh00nbr/Routerhunter-2.0

脆弱なネットワーク装置をスキャンするツールスキャン方法は指定範囲のIPアドレスを総当り(ブルートフォース)したり、ランダムにIPアドレスを生成して試したり、といった感じ。あと使用スレッド数も指定可能。

コードは300行くらいで、主にコマンドライン解析を頑張ってる。スキャン処理自体は requests ライブラリの requests.get()、ポートチェックは socket ライブラリの socket.socket(…).connect()。

試しに遊んでみたいけど会社で使ったら怒られそうで怖い。あと、この手の(Githubで300以上の star を集めてる)コードにしては珍しく、書き方が原始的なのでちょっと好感持てる。一行72文字守ってないところとか、文字列整形に format() を使わず "…" + var + "…" という風に書いてるところとか。

GraphvizAnim

https://github.com/mapio/GraphvizAnim

まだまだ WIP (発展途上) だが、Graphviz と ImageMagick を用いて gif アニメを作るツール。作り方は https://github.com/mapio/GraphvizAnim/blob/master/examples/simple.txt これ見ればイメージ湧くように、テキストで「ノード追加して」「ノード削除して」などの命令を書いていって、コンパイルしてやる。

viz

https://github.com/donnemartin/viz

Github の統計情報やら人気リポジトリやらを視覚的に表示するウェブサイト。特徴は過去のデータも取り続けてるので歴史を終えること。

README.md には実装や使用データについての詳しい FAQ も書いてあり、実装に興味のある人には垂涎モノかも。私は興味無いけど。

Python Cookbook 3rd Edition Translation

https://github.com/yidao620c/python3-cookbook

Python Cookbook 3rd Edition の中国語翻訳リポジトリ。

原稿は rst で編集、コードサンプルは別途 py ファイルを準備して unittest も書いてる。プログラミング本を Github で作るとこんな感じになるのかー、へえと思った。

meza

https://github.com/reubano/meza

テーブルデータ(csv/xls/xlsx/mdb/dbfなど)を分析するためのライブラリPandas という python で R っぽいことができるライブラリ代替として開発され、色々不満が解消されているらしい。Pandas すら知らなかったのでピンと来ないけど。

数値計算、テキスト処理、geojsonを用いた地理情報操作などができる。

こういう統計分析には縁がないけど、縁ができた時の選択肢として頭の片隅においておこうか。

iPython

https://github.com/ipython/ipython

iPython は名前くらいしか知らなかったけど、Python 界隈では超有名な対話型インタプリタ。対話型なら python コマンド自身も備えてるけど、それよりも多機能。オブジェクトの状態を調べたりとか、あとは補完機能とかが豊富みたい。私は PyScripter で事足りてるので使ってないけど、PyScripter が使えない Linux 環境とかでは重宝しそうだ。

歴史も結構古い(starは8000超え、コミット数は20000超え)し、実績もあるので、コードリーディングで勉強するには打ってつけだと思う。

参考

2016-01-30

今週の Github Trending Python Weekly

https://github.com/trending?l=python&since=weekly

四回目。

json-sempai jsonファイルをpython moduleのように扱う

https://github.com/kragniz/json-sempai

hoge.json というファイルに対して import hoge と書くだけで hoge.fuga.piyo のような書き方でアクセスできるようになる。

コードはすっげえ短くて100行も無い。動的プログラミングをバリバリ書いてるけど、こういうこともできるんだなあとその可能性に感嘆。

Classifier ファイルを拡張別にディレクトリ分類する

https://github.com/bhrigu123/classifier

$ classifier -st (ここで指定した拡張子を) -sf (ここで指定した名前のディレクトリに移動させる)

ビルドインの分類は以下のとおり。

	formats = {
		'Music'		:	['.mp3','.aac','.flac','.ogg','.wma','.m4a','.aiff'],
		'Videos'	:	['.flv','.ogv','.avi','.mp4','.mpg','.mpeg','.3gp', '.mkv', '.ts'],
		'Pictures'	: 	['.png','.jpeg','.gif','.jpg','.bmp','.svg','.webp', '.psd'],
		'Archives'	: 	['.rar','.zip','.7z','.gz','.bz2','.tar','.dmg', '.tgz'],
		'Documents'	:	['.txt', '.pdf','.doc','.docx','.xls','.xlsv','.xlsx',
	           			 '.ppt','.pptx','.ppsx','.odp','.odt','.ods','.md','.json','.csv'],
		'Books'		:	['.mobi', '.epub'],
		'RPMPackages':	['.rpm']
	}

これもただのファイル移動スクリだけど、star が 300 以上もついてるんで、たぶん star を集めるコツ的なのが凝縮されてる気がするんだよなあ。

AsyncSSH asyncioベースのSSHv2実装ライブラリ

https://github.com/ronf/asyncssh

asyncio という割と最近の非同期I/OライブラリをベースとしたSSHv2プロトコル実装ライブラリ

SSHや非同期通信を実装で使ったことは全く無いので、さっぱりピンと来ない。

BorgBackup 重複除去やら圧縮やら暗号化やらを行えるバックアップツール

https://github.com/borgbackup/borg

main goal は効率とセキュア。コマンド一発でバックアップを実行するわけだが、その処理として重複除去やら圧縮やら暗号化やら色々できるという感じ。

個人的にバックアップにそういう観点は考えたことなかったので、使ってみようかしらん……と思ったけど windows には対応してない(cygwinはバイナリ以外ならかろうじて対応してる)

Marcel docker のフランス用ラッパー

https://github.com/brouberol/marcel

ソース自体は単純で、このフランス語が来たら対応するこのコマンドを実行、みたいなことをしてるだけ。

こういうラッパーも結構需要あるんですねえ。フランスは初めて見たけど。もちろん読めない。

Whatportis 指定プロトコルツールが使用するポート情報を表示

https://github.com/ncrocfer/whatportis

たとえば mysql が使うポートはなんぞやってのが whatportis mysql --like みたいなコマンドですぐわかる。

対応表は db 形式のバイナリファイルで保持してるので中身は見れない。アルゴリズムとかも非公開。出典は Service Name and Transport Protocol Port Number Registry 。将来的には update コマンドもサポートするらしい。

shadowsocks

https://github.com/shadowsocks/shadowsocks

Removed according to regulations. と書かれた README.md があるだけのリポジトリ。なのに star が 11600 以上付いてて、どういうことなんだろ? ……と思ったら、なんかトラブル? でそうなってるだけみたい。過去リリースにはちゃんとソースがあった。

そこの README によると A fast tunnel proxy that helps you bypass firewalls. らしい。うん、わからん。ファイアウォールをすり抜けるためのトンネルプロキシ? トンネルプロキシってなんぞ。調べてもプロトコルのトンネリングしか出てこない。

2016-01-22

今週の Github Trending Python Weekly

https://github.com/trending?l=python&since=weekly

三回目。なんか「へえ、こんなのがあるんだ」程度の感想しかなくて、何のためにもなってない気がするけど……まあ、もうちょっと続けてみようか。

ネタ言語 TrumpScript

https://github.com/samshadwell/TrumpScript

Python 製の小さなプログラミング言語。Donald Trump という人(アメリカ大統領選挙立候補者?)をいじってるネタ言語。応援してんのか dis ってんのかは英語読めないのでようわからん。

紙のデジタル化アプリ paperless

https://github.com/danielquinn/paperless

紙は害悪だからデジタル化すべし! と主張する作者による、受け取った画像を OCR で読み取ってデータ化する Django アプリ。paperless のサーバを立ち上げておき、スキャナで読み取った画像をそこに送るように設定してやると動く。

個人でもこういうのが作れるくらいにまで時代は進歩してるんだなあとしみじみ。

障害管理ツール FIR(Fast Incident Response)

https://github.com/certsocietegenerale/FIR

簡単に使える&軽い&モダンデザインがコンセプトの障害管理ツールDjango 製で、サーバとして稼働させる。ドキュメント(Github wiki)の分量が少ないのは、それだけ簡単ということか、それとも単に執筆できてないだけか。あと、APIが実装されていない程度には発展途上。

その他

以下は常連。

あと機械学習(特に Deep Learning)関連のライブラリも多い。面倒だし興味も無いので取り上げない(取り上げる力が無い)けど。