開発^3

Web開発、宇宙開発、ゲーム開発の3種類についてつらつらと

Googleで一文字検索してみた。(2011年版)

ふと思いついたので2008年にやった一文字検索を再度動かしてみた。

結果

検索文字1位の結果(2008年)1位の結果(2011年)
aA@A@
bトップページ|Bフレッツ|フレッツ公式|NTT東日本B - Wikipedia
cC言語 - Wikipedia[ C ] OFFICIAL SITE
dD official web siteD official website
ee+(イープラス)チケット|チケット情報・販売・購入・予約e+(イープラス)チケット|チケット情報・販売・購入・予約
fマクロスFRONTIERFリーグ公式サイト|Fリーグ2010powered by ウイダーinゼリー
gGポイントはポイント交換、ショッピングでおトクにポイントがたまる ...ポイント交換のGポイント。安心・便利・おとくにネットショッピングが ...
hYouTube - みなみけ ちょっとHなシーン詰め合わせ [ from ...YouTube - お嬢様はHがお好き Ojousama wa H ga Osuk
iタウン検索なら iタウンページi(アイ)| 軽自動車 | カーラインアップ | MITSUBISHI MOTORS JAPAN
jスラッシュドット・ジャパン: アレゲなニュースと雑談サイトJリーグ公式サイト
kK Official web siteK Official web site
l『L change the WorLd』公式サイト『L change the WorLd』公式サイト
mYouTube - PrincessPrincess - Mテレビ朝日|ミュージックステーション
nN - Wikipedia
o人生オワタ - WikipediaO - Wikipedia
pP-WORLD 全国パチンコ-パチスロ機種情報P-WORLD 全国パチンコ-パチスロ機種情報
qQ - Wikipedia* Q 「kju:」
rR による統計処理R-Tips
sアットエス 静岡県の「いま」がよ〜く見えるat-s | @S[アットエス]つなぐ!楽しむ!しずおかライフ | 静岡新聞SBS
tTポイントとTカードの総合サイト[T-SITE]TポイントとTカードの総合サイト[T-SITE]
uU - WikipediaU - Wikipedia
vVジャンプ WEBバレーボール Vリーグ オフィシャルサイト
wW - Wikipediaテレビ朝日|仮面ライダーW(ダブル)
xX JAPANプレミアムDVD販売開始 X JAPAN WORLD TOUR Live
yYahoo!オークションYahoo! JAPAN
zZ会日産:フェアレディZ [ Z ] スポーツ&スペシャリティ/SUV Webカタログ ...

雑感

  • 3年前のスクリプトがそのままでも動くGoogleすごい。class="l"とか1文字なので心配していたけど大丈夫だった
  • cinwz辺りを見ると単一文字の商品名でも一位をとれるみたい。SEOの成果?
  • hはやっぱりジャンル的には変わらないらしい
  • sは引き続き静岡
  • yがYahooオークションからYahooJapanへ
  • 人生オワタの一位オワタ\(^o^)/

ソース

require 'rubygems'
require 'hpricot'
require 'open-uri'
require 'jcode'

query = "abcdefghijklmnopqrstuvwxyz";
query.each_char do |letter|
	url = "http://www.google.co.jp/search?q=#{letter}&lr=lang_ja"
	doc = Hpricot(open(url).read)
	result = (doc./"//h3.r/a.l")[0]
	
	puts "<tr><td>#{letter}</td><td><a href=\"#{result[:href]}\">#{result.inner_text}</a></td></tr>"
end

素のままでも動いたけど、Youtubeの別枠扱いをなくすためにXPathを変更
今ならhpricotではなくNokogiriとかかなぁ。

Ruby製バウリンガル

エイプリルフールも終わったのでわんわんをデコードするRubyバウリンガルを載せてみる。

$KCODE = 'SJIS'

require 'zlib'

decode_table = {
	'わん' => 0,
	'きゃん' => 1,
	'わおん' => 2,
	'わーん' => 3,
	'ばう' => 4,
	'きゃうん' => 5,
	'わう' => 6,
	'きゅーん' => 7
}

encoded_text = ARGF.readlines.join.gsub(/[\r\n。!]/, "")
regexp = Regexp.new(decode_table.keys.join("|"))

octets = encoded_text.scan(regexp).map {|octet| decode_table[octet]}
compressed_text = octets.each_slice(3).map {|octet| octet.join.to_i(8) }.pack("C*")

$>.write(Zlib::Inflate.inflate(compressed_text))

東京国際アニメフェアのチラシをCanvas使って編集してみる

Twitterを見ていたらRTでこんなのが流れてきたわけですよ。



最近Canvas使ってないなー。と思ったのでカリカリとBookmarklet書いてみました。

Hatena::Letで参照

使い方

Firefox3.6.12とChrome8.0.552.215で動作確認。

1. Hatena::Letを開きます

2. 「bookmarklet:東京国際アニメフェアの開催告知チラシから参加拒...」をドラッグしてお気に入りに放り込みます。

3. 公式チラシ | 東京国際アニメフェア2011を開きます

4. 2番で追加したお気に入りを選択するとこんな感じになります。


しかし、最近の作品がわからない・・・

2010/12/11 01:58追記:
http://twitpic.com/3elscd にすごく分かりやすい画像があったので使わせてもらいました。

金星探査機あかつきの現状まとめ

12月7日22時の記者会見のまとめが主、手元にまとめたテキストをコピペ

時間のズレとかあるかもー

08時49分        軌道制御エンジン噴射開始
08時50分43秒    通信断絶開始(予定通り)
09時01分00秒    軌道制御エンジン噴射終了
09時12分03秒    通信再開予定だったが通信再開せず
10時03分        探査機側で通信アンテナをLGAに自動切り替え
10時28分        衛星のLGAからの通信が受信される
                MGAに切り替えるよう、衛星にコマンドを送信
                コマンドは送信でき、MGAに切り替えが出来た
10時59分        MGA通信確立できず
11時29分        通信確立できなかったので、衛星側でLGAに自動切換
14時00分        スペインマドリッド局にて補足、LGAから受信、強さ変化確認
                0.1rpm(10分で1周の周期)で回転していることが確認される
                セーフホールドモードと考えられるがこの時点では未確定
                MGAに切り替えるように地上から地上からのコマンド
                10分に1回、40秒受信可能
17時00分        回転停止コマンドを送信したが停止せず、セーフホールドモード継続
                この際止まらなかったのはコマンドが衛星に届いていないと推定されている
                衛星の軌道が本来と違う為に、アンテナがズレていた
21時00分        スペインマドリッド、アンテナ方向予測して修正
                MGAでも通信できたが安定しない為、LGAで通信してテレメトリデータを受信中

現状:
    セーフホールドモードに入っているのは確定
    LGAにてテレメトリの受信(22時〜24時ぐらい)
    軌道は不明

トラブルなければ明日の昼までに採れるはずの情報
    HouseKeeping情報は分かる
    軌道決定もできる・・と良いな


参考:
    地上の光回線    100000000 bps(100Mbps)
    HGA                256000 bps(256kbps)?
    MGA                   512 bps
    LGA                     8 bps

Amazon EC2/S3/etc.の無料サービスに登録してみた

Amazonが11月1日から機能限定での無料サービスを始めたので、遅ればせながら試しに登録してみた。

参考:Amazon EC2、1年間限定でフリーミアムサービスを開始。日本でも利用可能

AWSアカウントを登録

1. 公式ページ(http://aws.amazon.com/free/)のSign Up Nowボタンから登録ページへ
2. メールアドレス、氏名、パスワード、住所、国、電話番号辺りを登録
注意:郵便番号にハイフンが無い場合、Invalid Addressといわれて受け付けられない
3. 登録完了

EC2の利用申請

EC2のページ(http://aws.amazon.com/jp/ec2/)からAmazon EC2の利用を申し込む
Free tier for new AWS customersとして条件が書かれていたり

アジア地域の場合はMicroInstanceで0.025$/hour。
普通に使った場合はこんな感じ

  • Amazon EC2 Linux/Unix Micro Instance
    • 0.025($) * 80(円/$) * 24(時間) * 31(日) = 1488円ぐらい
  • Elastic Load Balancing
    • 0.028($) * 80(円/$) * 24(時間) * 31(日) = 1666円ぐらい
    • 0.008($) * 80(円/$) * 15(GB) = 9.6円ぐらい
  • Amazon Elastic Block Storage(EBS)
    • 0.11($) * 80(円/$) * 10(GB) = 88円ぐらい
    • 0.11($) * 80(円/$) * 1(million IOs) = 8.8円ぐらい
    • 0.15($) * 80(円/$) * 1(GBSnapshot) = 12円ぐらい
    • 0.01($) * 80(円/$) * 1(x1000 PUT)= 0.8円ぐらい
    • 0.01($) * 80(円/$) * 1(x10000 GET)= 0.8円ぐらい

後半すごく細かいが、合計すると3274円ぐらいか。といってもぎりぎりまで使った場合だけど。
他にも5GBまでのS3が無料だったり、色々とお得な様子。


MicroInstanceの範囲であればインスタンス代は無料なわけで、掛かるとしたらデータ転送料ぐらいか。
15GBまでは無料。それを超えると1GBに付き12円ぐらいなので100GBで1200円。
まぁ、まずは帯域を使うようなサービスを作らないと意味が無い計算だなぁ。


と、説明を見たらクレジットカード番号を入力して次ページへ。


電話番号を入力するとPINが表示され、同時に電話が掛かってきます。
当然のように英語の自動音声が流れますが気にせず携帯からPINを入力。
承認されるとWebページが自動的に切り替わります。フィードバックはえぇ。


次ページに進むと、再度色々なサービスの値段が表示される。とりあえず無視してComplete Sign Up

AWS Managing Console

WebベースでEC2のインスタンスを管理できるっぽい。

  1. まずはRegionをASIAに切り替え。
  2. Service HealthがAPAC - Singaporeになっているのを確認してLaunch Instance。
  3. Community AMIsを見るとUbuntuやらCentOSやら見えるけど、とりあえずはQuick Startで32bit Amazon Linux AMIを起動してみる
  4. Instance数は1個、Instance TypeからMicroを選択してLaunch Instances
  5. Advanced Instance OptionsでkernelやらRAMディスクやら選べるみたいだけどとりあえずそのままContinue
  6. Tag付けも別に不要なのでそのままContinue
  7. 鍵の作成。名前を入れると秘密鍵を生成してダウンロードしてくれる。同時にインスタンスのauthorized_keysに追加されてるのかな。
  8. SecurityGroupの作成。後で変えれば良いのでSSHだけ許可
  9. 設定内容が表示されるので確認してLaunch

10秒とかからずインスタンスが立ち上がる。
とりあえずCloseでウィンドウを閉じて見に行ってみる。


左メニューのInstancesから一覧を表示すると今作ったインスタンスが動いている。
Instance ActionからConnectを選ぶとSSHでの接続方法が表示される。

後は適当にいじってみる

Puttyの場合、先にキーの変換をしないとなのでputtygen.exeを起動して変換
ppkファイルが出来たので説明にしたがって接続・・・
rootユーザじゃなくてec2-userでログインしてね。と切断された。・・・なぜWebの説明でrootユーザにしたし。


気を取り直してec2-userで再挑戦するとログイン成功。
アスキーアートでエンボス加工されたEC2の3文字が。目を細めると良く見える。

・とりあえずuname

[ec2-user@ip-10-130-59-18 ~]$ uname -a
Linux ip-10-130-59-18 2.6.34.7-56.40.amzn1.i686 #1 SMP Fri Oct 22 18:48:33 UTC 2010 i686 i686 i386 GNU/Linux

・sudo権限もある

[ec2-user@ip-10-130-59-18 ~]$ sudo echo "hoge"
hoge

iptablesはからだった。てことはSecurityGroupでのSSH許可はインスタンスより上のレベルで制御されてるのか。


・ディスクは9Gぐらい空きあるけど、永続データはS3におくべきなんだっけ?
試しにファイルを作って再起動したら普通に残っていた。まぁ、プログラムとか毎回消えたらdeploy面倒だよね。


VIMは7.0.237だった。
.vimrcは全くなかったのでいつものをコピペ。
でもよくあることでambiwidth=doubleにしていても記号がおかしかったり。しょぼん。

iPhone/iPadアプリに必要な画像まとめ

最近iPhone/iPadアプリの開発とかやっているのでちょっとまとめてみました。

ホーム画面に表示されるアイコン
1.Icon.png57 x 57iPhone
2.Icon@2x.png114 x 114iPhone4
3.Icon-72.png72 x 72iPad
Spotlightや設定画面に表示されるアイコン
4.Icon-Small.png29 x 29iPhone/iPadの設定画面
5.Icon-Small@2x.png58 x 58iPhone4
6.Icon-Small-50.png50 x 50iPadSpotlight
起動時に表示される画像(スプラッシュ画像)
7.Default-Portrait.png768 x 1004iPad(縦向き起動)
8.Default-Landscape.png1024 x 748iPad(横向き起動)
9.Default.png320 x 480iPhone
10.Default@2x.png640 x 960iPhone4

というわけで、必要な画像はこんな感じかな?

  • iPadのみ対応とする場合:3, 4, 6, 7, 8
  • iPad/iPhone/iPhone4に対応する場合:もちろん全部


ちょっと気になる点としてはDefault.png/Default@2x.pngでしょうか。
iPadと違ってこっちはステータスバー部分を除かないんですね。


詳細は公式ドキュメントの参照をば。
http://developer.apple.com/library/ios/#documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BuildTimeConfiguration/BuildTimeConfiguration.html#//apple_ref/doc/uid/TP40007072-CH7

Firefoxとchromeのxpath解釈の違い

document.createElementで作られたノードをdocument.evaluateで探す場合、FirefoxChromeで違いがあるみたい。
前回の記事と同じく、これも「./」を指定しろ。ってことですかね。

XPath Firefox Chrome
/sample/value/text() 取得可 取得不可
./sample/value/text() 取得可 取得可

はて、これはどっちが仕様として正しいんだろう。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>
<head>
<script type="text/javascript">
<!--
function sample()
{
	var element = document.createElement("sample");
	element.innerHTML = "<sample><value>hoge</value></sample>";
	
	//	Firefox: hoge		Chrome: 空文字
	alert(document.evaluate("/sample/value/text()", element, null, XPathResult.STRING_TYPE, null).stringValue);

	//	Firefox: hoge		Chrome: hoge
	alert(document.evaluate("./sample/value/text()", element, null, XPathResult.STRING_TYPE, null).stringValue);
}
//-->
</script>
</head>
<body>
<input type="button" onclick="sample();" value="Sample">
</body>
</html>