ここ2~3週間くらいでgithubにアップした駄作 & 良作 たち

更新が滞っていました。
コード書く気力があるのにブログ書く気力がありませんでしたOTZ


最近、git及びgithubにハマっております。
だんだんREADMEを書くのにも慣れてきました。

というわけでここ2~3週間くらいでgithubにうpした僕の駄作&良作たちを紹介したいと思います。


駄作たち

  • BeautifulHTML
    • 自分でBeautifulとか言っちゃってる時点で(ry
    • 最近進出したGoogle AppengineでHTMLをインデント付きで綺麗に出力しようとした結果。
    • とりあえずインデントとかインデントブロックとか長いオプションでもつけられるようにしてありますが
    • 駄作にはかわりない。
    • easy_install可。
  • htmltemp
    • Terminal上でHTMLファイルを簡単につくりたいと思って作りました
    • scriptタグとかstyleタグとか入れるか入れないかで引数処理とかが(´・ω・`)な結果に。
  • GetGistCode
    • まだgitを怖くて手を付けられなかったときにつくったもので
    • gitとかなくてもgistのコードがダウンロードできます。
    • BeautifulSoupモジュールが必須です。
    • もうほんとにBeautifulSoup最高。
  • Analyze_dir
    • ls -laコマンドの結果からディレクトリ下のファイルorディレクトリたちの属性を調べます。
    • "drwxr-xr-x"<-このような権限情報を数値化してくれます
    • でもそもそもディレクトリ下のものを調べるという作業があんまりなくて(´・ω・`)な結果に。
    • easy_install可。
  • usable
    • 駄作に入れたくなかった良作もどき。
    • その名のとおり、便利っぽいクラスや関数をいれています。
    • でもいろんな意味でまとまっていないので駄作に入れました。
    • easy_install可。


良作(?)たち

  • Translation
    • Googleの翻訳APIをつかったもの。
    • 和訳か英訳かを引数で判断、APIでかえってきたものを出力。
    • なにかに使えると思って書いたけど全くつかっていない「各言語一覧」もあるよ!
    • 英訳和訳だけでなく、それぞれtarget,sourceの言語を書いて送信すればちゃんと翻訳されて帰ってくる。
    • 面倒なREADMEで英文を書くときに使ったりします。
    • ちなみにさっきもつかった
  • easy_rssreader
    • CLIRSSリーダ
    • RSS2しか対応してないんで駄作に入れようかとおもったんですが
    • 思い入れがあったので良作にいれてみました。
    • BeautifulSoupモジュール必須。
  • Getimg
    • 2ちゃんまとめ的なサイトから壁紙を一括ダウンロード!!
    • まとめサイトだと画像にリンクを貼って表示しているけれど、
    • ちゃんとリンクを追ってダウンロードしてくれます。
    • BeautifulSoupモジュール必須。
  • URLSHORTENER
    • URL短縮APIを使ったクラスor関数を書いてあります。
    • 書いてあるURL短縮サービスは、ux.nu, goo.gl, is.gd, xtw.meの4つです。
    • APIキーとか使うようなものは外しました。ユーザ側も取得するのが面倒なので。
  • ftpterm
    • こちら106ダウンロードもされていたシロモノ。
    • FTPbashっぽく扱えるクライアントです。
    • このftptermでFTPサーバに接続していても、localというコマンドを使うと、
    • 自分のPCの中の情報(lsとか)が見れます。ディレクトリ移動もできるよ!
    • 詳しくはこちらをどうぞ!!
    • easy_install可です。
  • gitsupport
    • gitコマンドをちょっとサポートしてくれます。
    • おもにhash値らへんをちょいとね。
    • あるファイルのハッシュ値を確認したり、
    • git版lsコマンド的なものを提供したり、
    • logをtxtにExportしたりできます。
    • easy_install可ですよ!




以上が、僕が造った駄作&良作です。
個人的にいいな!と思ったものはじゃんじゃんforkしてあげてください。

pythonで標準出力されたデータを取得する

pythonにおいて、printステートメントなどで出力されるデータは、標準出力ストリームに書きこまれます。
では、一度printステートメントで出力した文字列を取得することはできるんでしょうか。



結論を言えば、できます


ならどうやって取得するのか

標準出力ストリームに出力しているもの、それがsys.stdoutです。
この標準出力ストリームを、別のオブジェクトにしてやればいいのです。
つまり、

>>> import sys
>>> sys.stdout = open("tmep.txt","w")

こうすることによって、printステートメントなどで出力されるデータをtemp.txtというファイルの中にしまうことができます
したがって、

>>> print "HELLO WORLD!" #この時点でtemp.txtに"HELLO WORLD!"がwriteされている
>>> sys.stdout.close()
>>> sys.stdout = sys.__stdout__
>>> open("temp.txt","r").read()
"HELLO WORLD!"

こうすることによって、標準出力されたデータを取得することができます。
あとは、ファイルオブジェクトを使ってデータを呼び出せば良いのです。


意外と簡単でしたね!
ちなみに、sys.stdoutを別のオブジェクトにして、close()したあとは、
標準出力ストリームがない!とpythonにエラーを出されます。
なので、普通の標準出力ストリームに戻すには、

>>> sys.stdout = sys.__stdout__

このような式を書く必要があります。この式で、sys.stdoutは普通の標準出力ストリームになりました。
以上で、今回の記事を終わります。ありがとうございました!

MacでWEBページをPDFにしてEvernoteに送るには


こんにちは。Aliceです。
最近、iphoneを買い、アプリをダウンロードしまくっていたんですが、TODO系のアプリが多く、昔は「iphone買ったらEvernote活用する!」と思っていた事ができなく(やらなく)なってしまいまして、やっぱりEvernoteの特徴である「なんでも保存」を活かして、どうにかならんかと考えていました。そこで、やっぱりWEBサイトをEvernoteで管理したいと思いました。


なので、iphoneでも気軽にみれるEvernoteで、WEBページをどうやって保存しようかと調べていました。本来のEvernoteサイトにあるブックマークレットFirefoxアドオンでは(CSS的な意味で)満足できず、どうせならCSSも保存できるPDFでEvernoteにいれられないかと悩んでおりました。
ですが、つい先ほどものすごい技を習得したので、書いてみます。



というわけで、MacでWEBページをPDFにしてEvernoteに送るにはどうすればいいかを書いてみます。
この方法はMacintoshのみになりますのでご了承ください。


目次

1,方法
2,ページの背景も一緒にPDFにしたい場合
3,応用
4,おわりに




方法

まず、こちらから「Evernote for mac」をインストールします。
次に、EvernoteにおくりたいWEBページに行きます。
そして、[ファイル]から[プリント]をえらび、[PDFをEvernoteに保存]を選んでください。


そうすると、下のような画面になるので、ノートやタイトル、タグなどを設定してください。



これでWEBページをPDFにしてEvernoteに送ることが出来ました!










ページの背景も一緒にPDFにしたい場合


ページの背景も一緒にPDFにしたい場合は、上図の部分をクリックすると、



このような画面になるので、[print background images]をクリックすると、ページの背景も含めてPDFにできます。
同時にヘッダやフッタなども設定できるので、自分好みのPDFにすることができます。
やっぱりMacintoshはすごいですね!










応用

この印刷機能はブラウザ以外にも使えるので、
たとえばWordやPagesなどツールで作った文書、Keynoteスライドのアウトラインなども
PDFにしてEvernoteで管理することができます。









おわりに

いかがでしたでしょうか。
今回は目次や写真をつかって分かりやすく書けた(というか写真が僕の文章力を補ってくれている)と思います。


スクリーンキャプチャソフトはSkitchというものを使わせていただきました。非常に使いやすくて良いソフトだと思います。


もし分かりにくいなどの苦情がありましたらこちらツイッターやコメントなどでお願いします。
以上、Aliceでした!

Google App Engineでランダム文字列生成APIつくった

こんにちは。Aliceです。
昨日からGoogle App Engineの勉強をしはじめ、最初に簡単なAPIでもつくってみようとおもいまして、作ってみました。
こちらです!


http://makerandomcode.appspot.com/


使い方 *2011/01/31追記あり

http://makerandomcode.appspot.com/getへGETパラメータを投げてください。
パラメータは、
  • 01 : index -- 数値、ランダムな文字列の文字数になります
  • 02 : callback -- コールバック関数、javascriptで動かすときに指定してください。なくてもOKです
  • 03 : fotmat -- XMLオンリーですが使用できます。
  • 04 : string -- どのような文字列で生成するかを指定することができます。同時に、モード機能も備えています。
    • no-numbers -- 数字なし
    • no-rome -- ローマ字なし
    • no-bigs -- 大文字なし
    • no-small -- 小文字なし
    • 他 -- どのような文字列でも可能です。"qwertyuio"のような特定の文字で生成したい場合は直接文字列を指定してください。


この四つです。


コード

class JsonCover(webapp.RequestHandler):
  def get(self):
    self.response.headers['Content-Type'] = 'application/json'
    default = self.request.get("index")
    callback = self.request.get("callback")
    result = self.choice(int(default))
    
    if callback == "": 
        content = simplejson.dumps({"result":result})
    else: content = '%s({"result":"%s"})'%(callback,result)
    self.response.out.write(content)

全部書くのは長くなるので、パラメータを受け取ってjsonで返すところだけのコードです。
スーパーpre記法つかってみました。



手法

さて、APIの説明だけでは面白く無いので、どういう風に書いたかを説明してみようと思います。
まず、

default = self.request.get("index")

このコードで、indexという要素のGETパラメータを取得します。次のコードも、callbackという要素のパラメータを取得しています。
次の、

result = self.choice(int(default))

これでランダムな文字列を生成しています。

if callback == "": 
    content = simplejson.dumps({"result":result})
else: content = '%s({"result":"%s"})'%(callback,result)

この文では、コールバックパラメータがあるかどうかを検証して、
返すjsonデータを設定しています。
その後、次のコードで、画面出力をしています。
コードの中身はこんなかんじです。



これから

これから、GAE中心に開発を進めていこうかとおもいます。
基本方針はAPIの作成かな。
以上、Aliceでした。

terminalライクなFTPクライアントをリリースしました。

こんにちは、Aliceです。
下書きをしていたのですが、間違ってボタンを押してしまい、全部空になってしまいました…
以下、記憶をたぐりよせて書きます。


If you want to read this page in English,Please click HERE!


2011/01/21に、TerminalライクなFTPクライアント、FTPTermをリリースしました。
そして今日、バージョン1.5をリリースしました!


このFTPTermは、Terminal(bash)ライクのFTPクライアントで、
lsコマンドやcdコマンドで、FTPを軽快に操作することが出来ます。
他にも起動時にモード設定をすれば、そのモードで動作します。
なにもモードを記述せずに起動した場合は、ホスト名、ユーザ名、パスワードを入力し、ログインします。


正常起動した場合の画面はこちら。


コマンド類

モード機能

  • nomal -- ノーマルモード
  • useconf -- 設定ファイルを使用してログイン
  • upload <*config file> <*path> -- ファイルのアップロード
アップロードモードでは、第二引数に設定ファイルを指定することで、その設定ファイルに記述されているホスト名、ユーザ名、パスワードでログインします。そして、第三引数にアップロード先のパスを指定することで、そのパス上にアップロードができます。 注意!もし、設定ファイルを指定せずに、指定のパスでアップロードしたい場合は、以下のコマンドを入力してください。
$ python ftpterm.py upload xxxxx "" /path
第三引数には""を入力してください。

インストール

インストールは、こちらのtar.gzファイルをダウンロード、解凍するか、
$ easy_install ftpterm
でインストールできます。 もし、tar.gzファイルを解凍してインストールする場合は、解凍後に、
$ python setup.py install
を行ってください。これで、インストールができます。 以上で、FTPTermの説明を終わります。 これからも、FTPTermの開発を行っていくので、 何かきになる点があれば、コメントやTwitetrでご一報願います。 http://twitter.com/Alice_Himmel

pythonでURL短縮サービスを使おう! - ux.nu編

こんにちは、風邪で喉が痛いです。aliceです。
今回はux.nuというURL短縮サービスを使って、URLを短縮してみましょう。
デベロッパーガイドはこちらから。



デベロッパーガイドに書いてあるリクエストの仕方などを読んで、
パラメータを指定し、urllibモジュールで開いてからjsonモジュールで読み込み、返す
という流れです。



使い方


$ python ux_nu.py http://sample.com/sample
http://ux.nu/xxxxxxx
$ python ux_nu.py http://ux.nu/xxxxxxx
http://sample.com/sample
第一引数に省略したいURLを指定すればOKです。
また、省略されたURLをもとに戻したい場合は第一引数に省略されたURLを指定すればOKです。

pythonのzip関数の逆バーションを作ってみた

明けましておめでとうございます。aliceです。

今回は、二つのリストからタプル(辞書)を創りだすzip関数の逆バージョン、つまり辞書を展開する関数をつくってみました。
まずはコードを御覧ください。

はい、ずいぶん簡単にできました。
やっていることは、辞書をキーと要素にわけて、辞書のキーのリストに挿入しているだけです。


例:


>>> dict = {"name":"alice","date":"2011-01-04"}
>>> exp(dict)
{"keys":["name","date"],"values":["alice","2011-01-04"]}
このような形です。


作ったからと言って何に使うかという目的は無いのですが、
ビルトイン関数にはないっぽいので作ってみました。


本来のzip関数のように、タプルでキー、要素を取得する場合はこちら。


以上です。今年もよろしくお願いします!