2010-01-01から1年間の記事一覧

Plan to Throw One Away

Stoyan Stefanov(YUIの開発者)「Javascript Patterns」より引用。 Talking about first drafts, there's also the idea of "plan to throw one away." It may look a little extreme at first, but it makes a lot of sense,especially when you have missio…

Pythonでワイルドカードマッチング

Pythonでワイルドカードマッチングしたい!そんなあなたはfnmatchを使いましょう。 >>> fnmatch.fnmatch('http://www.google.com/', 'http://*/*') True >>> fnmatch.fnmatch('http://www.google.com/foo/baz/bar', 'http://*.google.com/foo*bar') True >>>…

Chrome ExtensionでGAEのChannel APIを使えるようにしてみる

Chrome ExtentionでGoogle App EngineのChannel APIを使ってみよう思い、channel.jsを読み込もうとしたらエラーが。 Uncaught Error: URI chrome-extension://oejekmbenpogkdncmmjlnjebpinjcnac/_ah/channel/xpc_blank is invalid for field ppu channel.js…

GAEのChannel APIでリアルタイムWebアプリ

GAE

SDK 1.4.0で使えるようになったChannel APIを使ってRetrospectiveappを実装してみる。 前回はPusherを使ってWebSocketで通知していたのがChannel APIを使ってCometで通知されるようになるだけ。 WebフレームワークはBottleを使用。 デモ:http://5.latest.my…

ブラウザ履歴をスパイしているのは誰?

以前、ブラウザ履歴の盗聴を可能にするセキュリティ脆弱性について記事を書いた。 カリフォルニア大学サンディエゴ校コンピュータサイエンス部門の研究者の論文「JavascriptWebアプリケーションによるプライバシー侵害情報フローの実証的研究」で、ユーザー…

Google App EngineでDELETEリクエストを発行するときの注意点

$.ajax({type:"DELETE", url:'/hoge'}); こんな感じでGAEサーバにDELETEリクエストを送ると、ローカルでは正常に動くのに本番環境では400がでる><。 原因 調べてみるとDELETEリクエストがbodyを含んでいると駄目ってことになっている模様。 Indeed, when t…

Puhser + Google App EngineでリアルタイムWebアプリ その2

「WebSocketで目指せ“リアルタイムWeb”!」で取り上げられているRetrospectiveappのサーバサイド(Heroku + Sinatra)をGoogle App Engine + Bottleで実装してみる。 クライアントサイドは元ネタとほぼ同じ。 デモ : http://myretrospective.appspot.com/ Mod…

SHPAML : Haml for Python

Rubyで作られたマークアップ言語HamlがすごくてPythonにも同じようなのないかと探してみた。 見つけたのがSHPAML。 使い方 import shpaml print shpaml.convert_text(text) 入力 html head title test ul li hoge li hoge2 div piyo 出力 <html> <head> <title> test </title> </head> <ul> <li> hoge </li> <li></li></ul></html>…

appengine-rest-serverの出力形式をJSONに限定

GAEでRESTサービス作りたいなーと思ったときに一番最初に目につくのはappengine-rest-server。 中々使いやすいと思うんだけど、デフォルトの出力形式がxmlなのどうにかしたい!というわけで改造してみる。 1625行目からのメソッドdoc_to_output(self, doc)を…

Pusher + Google App EngineでリアルタイムWeb

「WebSocketで目指せ“リアルタイムWeb”!」(http://www.atmarkit.co.jp/fcoding/articles/websocket/02/websocket02b.html) これ読んで面白そうだと思ったので、とりあえずTwitterのpublic timelineを表示していくWebサイトを作ってみるよ。 Pusherに登録 ht…

pythonでアスペクト指向メモ

pythonでアスペクト指向プログラミングするために、いろいろライブラリがあるみたい。 適当に目についたのを試してみる。 aspyct from Aspyct.aop import * class MyAspect(Aspect): def atCall(self, cd): print 'called with args', cd.args def atReturn(…

Underscore.jsでMapReduce

js

Underscore.jsを使うとMapReduce(みたいな書き方)ができる。 おなじみの単語を数えるやつをやってみる。単語の分割はTinySegmenterで。 参照記事:http://www.asahi.com/national/update/1101/TKY201010310358.html var lines = new Array(); lines.push("さ…

Backbone.jsで簡単なチャットを作ってみる

js

MVCモデルなjavascriptフレームワークBackbone.jsで超簡単なチャットを作ってみる。 とりあえずものは試しってことでかなり適当な実装だけど勘弁。バックエンドはGAE。 デモ(動作するのはchromeだけっぽい):http://ninsoeki-lab.appspot.com/ (現在停止中) …

WTFormsメモ

WTForms(http://wtforms.simplecodes.com/) form要素のレンダリングとかバリデーションをやってくれるライブラリ。flask,tipfyあたりで使われてる。 なかなか良い感じだけど、日本語の情報は全く見つからなかったんで適当にメモしていく。 まずFormを定義 fr…

WindowsでPyPiにアップロードするメモ

PyPiに自作のライブラリアップしたよー。 http://pypi.python.org/pypi/python-nikeplus/0.21ってことでWindows環境でPyPiにアップするのにつまった点をメモ。 > python setup.py register > python setup.py upload sdist hoge とすると「Upload failed (40…

GAE上で動くブログエンジンまとめ

Google App Engine(for Python)で動作するブログエンジンをまとめてみました。 cpedialog http://code.google.com/p/cpedialog/ デモ:http://blog.cpedia.net/ bloggart http://github.com/Arachnid/bloggart デモ:http://bloggart-demo.appspot.com/ Bloog…

これでいいのかmixiチェック

FacebookのLikeはWebのどこからでも可能なんだけど、mixiチェックはできない。 mixiチェックを行うにはドメイン名と紐づいたチェックキーがないとできないんだ。 もうこの仕様からしてどうなの?と首をかしげちゃうが、まあそれは置いといて。 このmixiチェ…

Content Scriptのクロスサイトリクエストに関する私的メモ

js

クロスサイトリクエスト Chrome ExtentionのContent ScriptでXMLHttpRequestする場合はbackground-pageでやらないと駄目なんだぜ? まあ詳しくはここらへんを見てくださいよ。 http://code.google.com/chrome/extensions/overview.html http://src.chromium.…

話題のサッカーニュースをつぶやくボットつくったよー

____ /⌒ ⌒\ /( ●) (●)\ /::::::⌒(__人__)⌒::::: \ 四大リーグが開幕してサッカーが盛り上がってるお! | |r┬-| | \ `ー'´ / ____ / \ /\ キリッ . / (ー) (ー)\ / ⌒(__人__)⌒ \ Twitterでサッカーニュースを収集するお! | |…

bit.lyがすごい

ニュース速報系のボット(@goal_fun)を動かしていまして、URL短縮にbit.ly使ってます。 最近久方ぶりにbit.lyにログインしてみたんですが、これがすごい! こんな感じにリンクごとのクリック数が出てくるんです。 infoページ(bit.lyリンクの末尾に+を付けると…

face.comのapiつかってみた

http://developers.face.com/ 画像から顔情報を検出・認識してくれるface.comのapiを使って、笑い男で顔のマスキング的なことをやってみた。まあおなじみですね。 適当に使ってみたのはこの画像。 ライブラリはPILとface.comのpythonクライアント(http://git…

mixi向けのChrome extentionつくったよー

js

■Tidy Mixi https://chrome.google.com/extensions/detail/edgokddijpmdmldjagbdmemjljihmecp?hl=jaいやーjs面白いですね。 まあjsというかjQueryだけども!もやは素のjsなんていじりたくないでござる。 とりあえずchromeのextentionを作るときに、オプショ…

NikePlus用のライブラリつくた

Nike Plus用のライブラリをpythonで作ってみた。 http://github.com/ninoseki/nikeplus-python 作りながら「うーん、こんな感じでいいのかな・・・?」と悩みまくりんぐ。 他のライブラリ読んで勉強しないとね。もうちょっと改良したい。 使い方はこんな感じ…

BeautifulSoupでCDataをぬきぬき

BeautifulSoupでCDataを取り扱うのにちょっと苦労したんでメモ。 text = """<test></test>""" soup = BeautifulSoup(text) print soup.text.string >>>> えー、"some data here"が出力されるんじゃないの?ソースを見ると class CData(NavigableString): def __str__(sel…

PythonでNike+の非公式APIを使ってみよう

みなさんNike+(http://nikerunning.nike.com/nikeos/p/nikeplus/ja_JP/)って知ってる? 最近ナイキのランニング用シューズを買ってその存在を知ったんだけど、これが結構な優れもの! 対応製品を購入して、センサーを靴の底にセットして走りだすと、ランニン…

URLを140文字に!

URL短縮サービスに対抗して、URLを140文字にしようぜ!ってネタをTLで見かけたので作ってみた。 http://140url.appspot.com/ Q.何に使えるの? A.知らんがな

SRM 462 DIV2

Easy::Archery 問題文を読み違えて時間かかりました。何故かradiusを直径のことだと勘違い・・・。 public class Archery { public double expectedPoints(int N, int[] ringPoints) { double[] array = new double[N + 1]; double sum = 0.0; double r = 0.…

プロジェクトホスティングサービスOrigoのチュートリアル

プロジェクトホスティングサービスOrigo(http://www.origo.ethz.ch/)の紹介記事。 プロジェクトホスティングサービスも世の中にはいっぱいありまして、ぶっちゃけオープンなプロジェクトならGoogle Codeやgithubで十分ですよね。 しかしクローズドのプロジェ…

SRM460 DIV2

Easy::TheQuestionsAndAnswersDivTwo public class TheQuestionsAndAnswersDivTwo { public int find(string[] questions) { List<string> q = new List<string>(); foreach (String s in questions) { if (q.Contains(s)) { continue; } else { q.Add(s); } } return (int)M</string></string>…

自動アンパッカーについて

マルウェア/ウイルスの静的解析を困難にするために、難読化させることをパッキングといいます。そんでもってそれを解除することをアンパッキングといいます。 いろんな統計がありますが、出回っているマルウェアの70〜80%以上がパックされているらしいです。…