最近は jekyll で書いてます
最近はbloggerで書いてます
そろそろmedias wpとandroidについてレポート
買ってから結構たったし、簡単にレポート。
いいところ
テザリング
簡単に設定できたし、速度も出る。なんだかんだでdocomo回線を選んだのは正しかったと思う。auはどうなんだろう。
まぁ、これのおかげでiPodやらデバイスの幅が広がったのは非常によかった。iPad2とか安くなったら手に入れたい。
薄い、軽い
うりにしてるだけあって、薄いし軽い。サイズは大きいんだけど、ポケットに入るから別に問題ない。が、別の問題はある。
悪いところ
消せないプリインアプリ
ATOKとか、客がうっかり消して騒ぎそうなやつは理解できるんだけど、よもや「ついっぷる」やら「モシモカメラ」なんかが消せないとは思わなかった。
一番残念なのは「Delivery DJ」というamadanaモデルにプリインされているアプリ。タスクを切っても何故か端末ロック画面で立ち上がる。
アップデート分をアンインストールすると立ち上がらなくなったので、取り敢えずそれで対処してるが、マイアプリ画面で表示されてウザい……。
SPモードメール
アプリレビューで「スリル満点!星0個」とかあって「それツールの感想ちゃう! ゲームの感想や!」とつっこむなどして楽しんだ。
電池
WPじゃないやつの電池が全然持ってなかったし、さらにfelicaとか入れて持つわけねーだろって思ってたけど、案の定だった。
ホームボタンがタッチ&電源ボタンが押しづらい
この2つの要因で、スリープから解除しづらい。電源ボタンがもう少し面積広ければ……。
Titanium Studioを64bit版Windows7で動かそうとしてハマりにハマった
タイトル通り。うんざり。
一応、KitchenSinkが動くとこまで行きましたが、エミュレータ重くて、土曜に届くはずだった実機待ちだったのに届かず、何というか色々気が削がれています。
インストール手順
- JDK6 32bit版をダウンロード、インストール
- Android SDKをインストール
- 普通にインストーラ使った
- Android SDKを起動して、Accept Allでプラグイン全部インストール
- 不要なものを切り分ける知識はまだ無い。ってかKitchenSinkを動かすんならどうしようもないかもしれない。
- Titanium Studioのフリー版をインストール
- ログイン必須
- Titanium Studio起動前に、下記ファイルを書き換える
- C:\ProgramData\Titanium\mobilesdk\win32\1.7.1\android\builder.py
- 「logcat」でファイル検索して、以下の箇所を見つけて修正
emulator_cmd = [ self.sdk.get_emulator(), '-avd', avd_name, '-port', '5560', '-sdcard', self.sdcard, '-logcat', "\"*:d *\"", ←こう書き換える。元は"'*:d *'"となっている '-no-boot-anim', '-partition-size', '128' # in between nexusone and droid ]
ハマりポイント
JDKは32bitのものを使う
これはAndroid SDKの方の問題。
多分これのせいでかなりの時間を失ってる。
ってか、そもそもAndroid SDKをよく知らずにいきなりTitaniumを始めようとしたのが問題な気がする。
KitchenSinkはTitanium Studioのgitで落とすと変になる
一度コンテンツを残して削除し、Titaniumプロジェクトとしてインポートしなおすと直る。
どうも、リポジトリの奥のほうにあるtiappファイルを見に行っちゃうみたい。
実行できない
Windowsで動かしてないだろ開発者……。いやまぁ、どのみちmacじゃないとiPhoneアプリのテスト出来ないから、気持ちは分かるんだけどさ……。
修正方法は↑に書いた通り。AndroidSDKのパス指定と、後一箇所はソースいじるしかない。
んで、ちと信用ならなかったんで、Titanium Studio本体を半角スペースの無いところに置いたり、ワークスペースから半角スペース抜いたりしてます。多分関係ないとは思うけど……。
タブの画像が出ない
これが分からない。
二回目の起動で必ず起こる感じ。
正直、実機でやれば起こらないのかなーと思わなくもないので放置してる
たったの40行! jQueryでニコ動の右上を表示するChrome拡張作成法(イマイチ)
<!doctype html> <html> <head> <meta charset="utf-8"> <script src="http://code.jquery.com/jquery-1.6.1.js"></script> </head> <div id="bukkonuki">悲しいけれど、ぶっこぬかれる運命なのよね</div> <div id="result"></div> <script> $.get(location.href, function(html) { $('#result') .html( $('#bukkonuki', '<div>' + html + '</div>').html() ); }); </script> </body> </html>
上のhtmlは適当なところに設置(ローカルじゃ駄目です)して見てみれば動きます。ざっと以下の動作。
でも、jQueryのgetとかajaxとかってのは、XMLHttpRequestを利用しているので、クロスドメインが出来ません。
自分とこにあるコンテンツをスクレイピングする意味なんてほとんど無いので使えませんね。残念。
……となるのですが、こいつが活用できる場所があります。それが以下。
- node.jsなどのサーバサイドjs
- Chrome Extension
で、今回はChrome拡張で使ってみます。ということで……
たったの40行! jQueryでニコ動の右上を表示するChrome拡張作成法
またかよwと言われそうだけど、日曜大工で発表した関係で、簡単に作れるものを紹介してみようかなと。
background.html
<script src="jquery-1.6.1.min.js"></script> <script> var migiue = 'Now Loading ...'; (function() { function getMigiue() { $.get('http://www.nicovideo.jp/migiue', function(html) { migiue = $('#migiueText', '<div>' + html + '</div>').text(); }); } getMigiue(); setInterval(getMigiue, 24 * 60 * 60 * 1000); })(); </script>
popup.html
<!doctype html> <html> <head> <style> #migiue { color: black; text-decoration: none; font-weight: bold; white-space: nowrap; } </style> </head> <body> <a href="http://www.nicovideo.jp/migiue" target="_blank" id="migiue"></a> <script> document.getElementById('migiue').innerText = chrome.extension.getBackgroundPage().migiue; </script> </body> </html>
manifest.json
{ "name": "niconico migiue", "description": "niconico migiue", "version": "0.0.1", "browser_action": { "default_icon": "icon.png", "popup": "popup.html" }, "background_page": "background.html", "permissions": [ "http://www.nicovideo.jp/migiue" ] }
たったの50行! node.js でツイート垂れ流しサイト作成法
修正:よく数えたら60じゃなくて50行だった。しかもハッシュタグ垂れ流しでなく好きなキーワード(もちろんハッシュもなんだけど)監視するものになっていた。適当すぎた。
↓の通りコマンド打ってファイル作っていけば、twitterで指定したキーワードを監視してだらだら垂れ流すサイトが出来上がります。
必要なもの
- node.jsとnpmをインストールした環境
- 適当なtwitterアカウント
コマンド
mkdir twithash cd twithash mkdir views npm install socket.io npm install twitter-node npm install express vi web.js vi views/index.html
web.jsの中身
const sys = require('sys'), express = require('express'), app = express.createServer(), io = require('socket.io'), TwitterNode = require('twitter-node').TwitterNode; // express app.configure(function() { app.use(express.static(__dirname + '/views')); }); app.listen(8888); // socket.io const socket = io.listen(app); // twitter var twitter = new TwitterNode({ user: 'アカウントID', password: 'アカウントパスワード', track: ['https'] // ハッシュタグとか適当な単語に書き換えるよろし }); twitter .addListener('tweet', function(tweet) { socket.broadcast(tweet.text); }) .stream();
index.htmlの中身
<!doctype html> <html> <head> <meta charset="UTF-8"> <title>twithash</title> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js"></script> <script src="/socket.io/socket.io.js"></script> <script> var socket = new io.Socket(); socket.connect(); socket.on('message', function(t) { $('<div></div>') .text(t) .prependTo('#tweets'); }); </script> </head> <body> <div id="tweets"></div> </body> </html>
ぶっちゃけ
「コマンド入れても50行なので、みなさんぜひやってみてください!」とか煽っても、環境構築が一番大変だってのはみんな分かってるよね、うん。
ただ、私の環境はさくらvpsのCentOS 5.5で、割とつまずきはなかったです。
twitterのidとpwは設定ファイルとかに外出しすべきですね。ライブラリもあるし、無くても適当にやっちゃえばいいかなーと思います。
完成したら、herokuのnode.jsホスティングでもやってみると良いです。カンタンに全世界に公開でき、一定の負荷を超えるまでは無料です。herokuのドキュメントが英語だけど分かりやすいので、それほどつまずかないと思います。
しかしnpmとherokuは素晴らしい。一旦熱が冷めたnode.jsだったけど、一気に再燃しましたw
expressを使わない理由が無かった
expressとは、よく使われてる表現では「node.js用のsinatra」です。↓の記述を見た瞬間に脊髄反射的にnpm install expressする人も多いはず。
var express = require('express'), app = express.createServer(); app.get('/', function(req, res){ res.send('Hello World'); }); app.listen(3000);
で、こいつはコンフィグで静的ファイルを吐き出すように設定できます。端的に言えば、node.jsとexpressと下の6行のコードがあれば、apache http serverの代わりになるわけです。
var express = require('express'), app = express.createServer(); app.configure(function() { app.use(express.static(__dirname + '/views')); }); app.listen(80);
これだけで、viewsディレクトリ以下の静的ファイルを放出するサーバが作れます。
流石にyum install httpdには叶わないですが、node.jsとnpmをインストールしちゃってる人には、ものすごく簡単なのが分かると思います。
本題
重要なのが、↑のコードのexpress#createServerで作られたサーバは、node.js標準のhttpサーバのprototypeを継承して作られたものだと言う事。
そのため既存ライブラリとの組み合わせが非常にスムーズです。socket.ioだと↓のような感じ。
var express = require('express'), app = express.createServer(), io = require('socket.io'); // express app.configure(function() { app.use(express.static(__dirname + '/views')); }); app.listen(80); // socket.io var socket = io.listen(app);
はい。あとは、viewsディレクトリの中にsocket.ioのクライアントとなるhtmlを突っ込んでしまえば、websocketなサービスが作れてしまいます。あらまぁ。
結論
特に理由が無ければ、express使ったほうが何かと便利そうです。
しかしまぁ、npmが素晴らしいなぁ。上記まで辿りつくのに10分掛からなかったよ。