犬ターネット

Archive : 2011年02月

membase 触ってみただけ

memcached 互換の NoSQL データベース、membase を触ってみただけ

ダウンロード

http://www.membase.com/products-and-services/overview にアクセス、Enterprise Edition Free Download のリンクをクリック、必須項目を埋めて Download Now クリック、rpmのリンクが表示されるので環境に合わせてダウンロードする(32-bit Red Hat Linux (RPM) Latest Release (1.6.5) を選択した)。

インストール

ダウンロードした rpm ファイルを centOSの適当な場所にアップ、以下コマンド実行

$ rpm -ivh membase-server-enterprise_x86_1.6.5.rpm
準備中...                ########################################### [100%]
1:membase-server         ########################################### [100%]
Starting Membase server[  OK  ]

You have successfully installed Membase Server.
Please browse to http://local:8091/ to configure your server.
Please refer to http://membase.com and http://membase.org for
additional resources.

Please note that you have to update your firewall configuration to
allow connections to the following ports: 11211, 11210, 4369, 8091
and from 21100 to 21199.

By using this software you agree to the End User License Agreement.
See /opt/membase/LICENSE.txt.

ポート開けなきゃならんみたい。よってポート開ける

$ system-config-securitylevel-tui

※ 11211:tcp 11210:tcp 4369:tcp 8091:tcp を追加

設定

webベースな管理コンソールが用意されてるのでアクセス( http://hostname:8091/ )

とりあえず SETUP を押す
20110228111215

Configure Disk Storage はディフォルトの /var/opt/membase/1.6.5/data/ns_1 のまま、Start a new cluster. を選択して、256 MB 指定 して NEXT
20110228111427

とりあえずディフォルトのまんま NEXT
20110228111634

管理コンソール用接続アカウントを登録。適当に設定してNEXT
20110228111822

こんな感じの管理コンソールが出てきた
20110228125230

telnet でつないでみる

とりあえずうごいてるっぽい

$ telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to local (127.0.0.1).
Escape character is '^]'.
set key1 0 10 6 ← データセット
value1
STORED
get key1        ← 取り出してみる
VALUE key1 0 6
value1
END
get key1        ← 10秒待って取り出してみる
END

その他

新しいBucket追加する場合、ディフォルトのまんまだとこういうメッセージが出て追加できない。

All the RAM in the cluster is already allocated to existing buckets.
Delete some buckets or change bucket sizes to make RAM available for additional buckets.

今使ってるBucketを削除するか、RAMサイズ変更するとかすれば大丈夫

------

defaultのBucketを削除後、新規Bucket追加したら、telnet接続はできるけど、setができなくなった…

Bucket Nameに「default」を入力して再構築したら復活した…よくわからん

------

外部接続許可はどこで設定すんの…


twitterのフォロワー整理した

半年以上POSTがない人や途中から業者にジョブチェンジした人のフォローをはずした。

「30000フォロワー達成!夢かないました!」が最後のつぶやきになってる人っていったい何と戦っていたんだろう。


PHP の array_unique で多次元配列の重複を削除できるか

array_unique を使ってやってみたんだけど、

…ッ!

原因は、内部比較が文字列で、比較時に全部「Array」文字列になってるため。第2引数に SORT_REGULAR を指定すれば解決。

もうちょっと多次元にしてみても大丈夫。

連想配列でも使える。要素の順番変えても重複削除できるってことは、内部比較は「==」ぽい。

PHP のバージョンが古くて、第2引数指定できない場合は、ループしてチェックするしかなさそう。


PHPで配列が同じかどうか比較

PHP 5.3.3 で

- 要素の順番同じなら「==」「===」どちらでも true
- 要素の順番が異なる場合
-- 通常配列の場合「==」「===」どちらでも false
-- 連想配列の場合「==」は true ,「===」は false


#kaidan16

つぶやき怪談まとめた


PHPで自殺する

こういうファイル用意して

<?php
var_dump(unlink($_SERVER['SCRIPT_FILENAME']));

アクセスしたら true って出た。

そしてリロードしたら Not Found になった。

※ 実行権限とかいろいろクリアしてないとダメ


レイプ犯に対してできる限り長く苦しい恐怖と痛みを与える方法

レイプ犯に対してできる限り長く苦しい恐怖と痛みを与える方法について妻と議論した結果、「あと*mmでぺしゃんこ」という日替わりの映像を見せながら1日に1mmの速度でちんぽことたまたまを万力でしめあげるという方法に至ったのでメモしておく


DISCOTORTION

DISCOTORTION買った。


かにたべたい

蟹食べたい蟹食べたい蟹食べたい蟹食べたい蟹食べたい蟹食べたい蟹食べたい蟹食べたい蟹食べたい蟹食べたい蟹食べたい蟹食べたい蟹食べたい蟹食べたい蟹食べたい蟹食べたい


保育所きまってよかった

第1希望の保育所に入園きまった!よかったよーまじよかったよー...


言葉遅いのかもなあ

娘1歳9ヶ月、そろそろ「パパ」「ママ」くらい言ってもいい時期だと思うんだけど、コバイア語みたいなものしか話さない。

ただ、こっちの言ってることは理解してるみたいで、「はみがきするよー」というと指を口に持っていってはみがきジェスチャーするし、「ごはんだよー」というと椅子を自分でセッティングして座るし、「ねるよーママにおやすみしてねー」というとママに手を振り、俺の手を引っ張って寝室に移動していく。

2歳まで話さない子供もいるみたいなのでそこまで心配してないんだけど、今まで超王道な発育をみせていたのでちょっと気になってる。


ほげほげー

ふがふがー


audioタグ関連

audio タグを使っていろいろしたかったので、少し調査した。使ったブラウザは Firefox, Safari, Chrome, Opera の安定してるやつ。

audioタグに割り当てられてる属性云々

src
再生する音源ソースURL
controls
オーディオインターフェースを表示するかどうか
true : する
false : しない
autoplay
自動再生するかどうか(iPhone Safari だと有効にならないっぽい)
true : する
false : しない
volume
再生ボリューム
0~1 (ディフォルト:1)
muted
ミュートされてるか
true : されてる
false : されてない
paused
ポーズしてるか
true : してる
false : してない
preload (Safari, Chrome)
音源を先読みするか
auto : 自動読み込み (ディフォルト)
metadata : ヘッダ情報のみ読み込み
none : 読みこまない
autobuffler (Firefox, Opera)
音源を先読みするか
true : する (Firefoxディフォルト)
false : しない (Operaディフォルト)
ended
曲再生終わったか
true : 終わった
false : まだ
seeking
再生箇所をシーク中か
true : 中
false : 中じゃない
currentTime
現在の再生秒数

使えるメソッド

load() : 音源読み込む
play() : 再生する
pause() : とめる
canPlayType(mime) : 再生できるmimeタイプを調べる。再生できそうな場合は "maybe" 文字列が返ってくる

読み込めるファイルタイプ

audio.canPlayType(mime) 使ってしらべた。mime は apache についてる mime.types の audio/* (+ogg) を利用した。

Firefox
audio/ogg
audio/x-wav
Opera
audio/ogg
audio/x-wav
Chrome
audio/ogg
audio/mpeg
audio/x-wav
Safari
audio/basic
audio/midi
audio/mpeg
audio/x-aiff
audio/x-mpegurl
audio/x-wav
Safari(iPhone)
audio/amr
audio/basic
audio/mpeg
audio/x-aiff
audio/x-mpegurl
audio/x-wav

共通で使えるのは wav だけ。mp3やm4aが再生できるのは Safari と Chrome のみ。

audioタグの書き方

以下みたいにかく。preload と autobuffler の両方を書いてるのは、クロスブラウザ対応のため。

<audio src="url" controls preload="auto" autobuffler autolpay></audio>

jsで生成するなら以下みたいにかく。

var audio = new Audio("url");
audio.controls = true;
audio.autoplay = true;
audio.preload = "auto";
audio.autobuffler = true;
var audio = document.createElement('audio');
audio.src = "url";
audio.controls = true;
audio.autoplay = true;
audio.preload = "auto";
audio.autobuffler = true;

js経由で再生するとき

上記のaudioオブジェクトに対して、再生するときは

audio.load();
audio.play();

とめるときは

audio.pause();

すればOK。

ただし、Chromeの場合、load() 実行するとまた最初から再生されちゃうので、以下のように currentTime が 0 の場合だけ load() 実行するようにすれば大丈夫っぽい。

if (audio.currentTime == 0) { audio.load(); }
audio.play();

サンプル

※ SafariとChromeだけ。
※ play を押すと再生、pause を押すととまる。


一覧追加

一覧を作った → Archive


うちの親が

Googleアースばっかりやっているということはわかった


node.js の ホスティングサービス no.de のアカウント申請が降りたのでとりあえず動かすまで(追記あり)

前回 の続き。

以下コマンド実行したらクーポンコード発行されてた!アカウント申請降りた!やほう!2日かかった!

$ curl -u ユーザ名:パスワード https://api.no.de/coupons
[
 {
  "code": "*******************",
  "resource": "/smartmachines/node"
 }
]

さっそく、https://no.de/ にログイン、使いたいサブドメイン(mgng)と発行されたクーポンコードを入れて PROVISION を押したら、IPアドレスとgitリポジトリ与えられた!

で、mgng.no.de にファイルupしたいなーと思ったんだけど、git経由じゃないとダメってことで、まずはローカルマシンの方のgitの設定をした(git触るの初めてだしあんまりよくわかってない)

まずは、gitで使うディレクトリ作って、git初期化実行。

$ mkdir -p ~/workspace/git
$ cd ~/workspace/git
$ git init

ホスト先のリポジトリ情報をローカルに登録。

$ git remote add ユーザ名 node@IPアドレス:repo

ここまでやったら、以下の内容で server.js を作成。

$ vim server.js
var http = require('http');
var port = process.env.PORT || "8000";
http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/html; charset=utf-8'});
  res.end('Hello World! mgng.no.de! うんこ');
}).listen(Number(port));
console.log('Server running at http://mgng.no.de:' + port);

最後にコミットして、リモートにプッシュする、と。

$ git add .
$ git commit -m "create server.js"
$ git push ユーザ名 master
(パスワード入力)

ということで、http://mgng.no.de/ で動かすことができた。何つくろうかなあ。


追記:@meso さんからつっこみいただきました。ありがとうございます。


8track API の話

8tracks.com の曲再生用APIがあるんだけど、これは 8tracks.com にログインしている状態だと、曲スキップ最大2曲までしか実行できない。

でも、ログアウトしてから API 叩くと、いくらでも曲スキップできちゃうという。

だから、ログアウト状態でタイマーかまして定期実行させればいくらでも曲情報取得できる。

これって問題になりそうだから、トークン等かましてログイン/アウト関係なくスキップ数制御したほうがいいんじゃないか、という話を開発者のremiに言った気がするんだけど未だに直ってないから、ちょっとどうなの...という話。


IPv6:IPアドレス直接指定の仕方しらなかったのでしぬ

http://127.0.0.1/ みたいにアクセスしたくてずっと http://::1 ってやってて、うんともすんともいわなかったけれど、

http://[::1] のように [] で囲わなきゃだめだった...

で、IE6 だと、上記指定しても全然動いてくれなかったので、IE6はしねハゲ


石橋英子, perfume

石橋英子「carapace」

Perfume「LIVE@TOKYODOME」

これから Perfume 見る!


node.js の ホスティングサービス no.de にアカウント申請したんだけどよくわからない

node.js を公開環境で試したかったので、http://no.de/ にアカウント申請してみた。

まず、https://no.de/signup にアクセスして、必要情報入力する。SSH key が必要だったので、手元のcentOSの以下コマンドで作った。

$ ssh-keygen -t dsa -C "no.de"
(パスワード)
(パスワード retype)

ユーザカレント/.ssh/ 以下に id_dsa.pub が作成されたので、このファイルをコピって SSH key のところに貼り付け。そんで SIGN UP してOK。

次に、SIGN UP したまま https://no.de/ にアクセスすると、subdomain と Coupon Code を入力する欄が出てくる。subdomain は、まあ自由に決めるとして、Coupon Code ってなんじゃ?

どうやら、Coupon Code は、no.de に「クーポンコードくれよ」リクエストを送るともらえるっぽい。

ということで、https://api.no.de/ を見つつ、以下コマンドでクーポンコードくれリクエストを送った。

curl -u ユーザ名:パスワード https://api.no.de/heart -X POST

そしたらこういうレスポンスが返ってきた。一応受理されたのかな。

{
  "message": "Thanks for your interest, you are added to the queue"
}

クーポンコードが発行されたか確認するには、以下のリクエストを投げると取れる。

curl -u ユーザ名:パスワード https://api.no.de/coupons

でも空っぽレスポンスなんだよね...どうやら、クーポンコードが発行されるまで時間がかかるっぽい? しばらく待つか...


日記

先週末実家に帰ったところ「パソコン、印刷できなくなった。あといんたーねっとが重い」と母に言われたので起動してみたらすっごい遅くて、とりあえず

・印刷キューにたまった55個のドキュメント(去年の10月くらいから溜まってるし...)全削除
・Chrome インストールしてディフォルトブラウザに
・スタートアップ全削除
・自動起動のVAIO関連+その他必要なさそうなサービス全部手動実行に→停止
・「囲碁体験版」「競馬体験版」みたいな「*体験版」を全部削除
・ディスククリーンアップ
・デフラグ

したらまあまあ起動も速くなって「いんたーねっと」もサクサク動くようになった(ありがとうChrome)

おれができる親孝行って、孫の顔見せることとパソコンどうにかするくらいしかできないんだけど、こんなことで感謝してもらえるならいつでもそっちに行くぜ。


img タグ の onerror は(ほぼ)ステータスコードをみてない

404 ステータスコードを返しつつ、10x10 の gif 画像を返す img.php を書いて、

img タグで以下のようにアクセスすりゃ当然 onerror 発動するよな、と思ったけどうんともすんともいわなかった。

ちなみに「画像」じゃないものを src に設定すると onerror が発動した。

ブラウザ内部の実装はファイル内容を確認して画像っぽくなかったら onerror 発動させてる、ってこと? ブラウザはオフラインでもコンテンツ表示できるから、ステータスコードなんていちいち見てるわけではないのかな...

ほんとにほんとにステータスコードみてないの?と思ったので、400系と500系のステータスコード全部調査したら、Firefox のみ、408ステータスコードで反応した。
※ 408:Request Time-out (クライアントは、サーバの待機時間内にリクエストを発行しなかった)

ううむ…


1x1ピクセルなのにやたら重い画像のつくりかた

1x1 の画像を出力したあとで、大量の文字列 を echo してあげればいいことがわかった。

実際に画像をダウンロードしてプロパティをみるとこんな具合になった。

むかつくアイツがケータイでアクセスしてきたら、1x1の激重gifを返して、むかつくアイツのケータイをころす方向に持っていきたい。


zencoding.vim をいれた

手元のcentOSに入れた。

ソースはここからダウンロード → https://github.com/mattn/zencoding-vim → Downloads クリック

ソース展開後に作成された autoload/zencoding.vim, plugin/zencoding.vim を、ユーザカレントの autoload/ と plugin/ にコピー。

で、ユーザカレントの .vimrc に以下の一行を追記。

let g:user_zen_expandabbr_key = '<c-e>'

早速適当なファイル作って実行。

$ vim test.html
html:5 ← ここまでタイプしたら Ctrl + E
↓
<!DOCTYPE HTML>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title></title>
</head>
<body>

</body>
</html>

便利すぎ


script タグ の onerror が IE と Opera で動かない

js ファイルを読み込めなかったら、onerror で処理したいなーと思ったけど、IE と Opera って script タグの onerror が発動しない。

script_onerror.html
ソース
<script type="text/javascript" src="http://www.google.com/notfound.js" onerror="alert(this.src+' not found')"></script>

あと、Safari の場合は、404 レスポンスヘッダが返ってこないと、onerror が発動しない。めんどくさい


おれも日記書こう

・いろいろ回り道をしたけど解はいたってシンプルだった
・娘が大量ゲロをしたけど元気でよかった
・CDほしいけどお金がない
・ブコウスキーとゾンビ大事典見当たらない
・妻の寝言がおもしろい。昨日「マイケルジャクソンむかつく」 今朝「いとうあさこやせたよ...」


iPhone,iPod,iPadをユーザーエージェントから判定するPHPスクリプト

メモ


id に ドット(ピリオド)が含まれる要素の jQuery での参照の仕方

そもそも、id にドット(ピリオド)って使えんのって話だけど、w3.org を確認したら 使える。

ID and NAME tokens must begin with a letter ([A-Za-z]) and may be followed by any number of letters, digits ([0-9]), hyphens ("-"), underscores ("_"), colons (":"), and periods (".").

で、jQuery だとこんな感じで参照できた。

でもいちいちエスケープしたり記法を変えるのは面倒だから、[A-Za-z0-9\-\_] くらいに縛っておくのがいいと思った。


IE無視無視なんていってられず

まあ仕事だし...でも今日は初めてIE様と呼びたくなるような事象に遭遇した。/*@cc_on@*/ が使えなかったら今頃凍死してたよ...


Firefox と Thunderbird のスペルチェックを無効にする

about:config を開いて、

Firefox:layout.spellcheckDefault → 0
Thunderbird:mail.spellcheck.inline → false

でOK。


GoogleでAAって検索すると

なんか超今更感なんだけど、こうなるのか。はーなるほど