投稿

[facebook] プロフィールのメールアドレスを非公開にする

アカウント保護のため(と称するおせっかい機能に促されて)Facebookに複数のメールアドレスを登録した場合、デフォルトのではコンタクト情報を共有する相手に全てのメールアドレスが表示されます。 友だちにも見せたくないメールアドレスがある場合、自分のプロフィールを編集し、メールアドレスのプライバシー設定を「自分のみ」とします。 耳寄り情報 Facebookのプロフィールに追加したメールアドレスは必ず(なんと非公開設定でも!)メールアドレスから検索可能になり、アドレス帳インポート機能などにより一括検索できます。また、検索窓により個別に発見することもできます。この機能を無効化する設定はなく、メールアドレスを登録しないでおくしかありません。ご注意ください。 2012/3/15 追記 プライバシー設定 > つながりの設定 よりメールアドレスから検索する機能を制限できるようになったようです。 Who can look you up using your email address or phone number? この項目を [友達のみ] に設定すれば実質的に機能しなくなるようです。

[facebook] コメントが追加されましたメール通知を止める

Facebook の作りこみは正直にすごいと思いますが、ついうっかりどこかにコメントしただけで、延々とコメントが追加されました通知がメールで届くのがうざったい所でした。 設定画面は、アカウント → アカウント設定 → お知らせ 設定項目が大量で読む気になれないけれど、結局のところ以下の項目のチェックボックスを外せば良いです。 写真にコメントが追加されたとき アルバムにコメントが追加されたとき ノートにコメントが追加されたとき リンクにコメントが追加されたとき 動画にコメントが追加されたとき ウォールの記事にコメントが追加されたとき この設定は設定を変更した後に行ったコメントから有効になるようです。また、メールが来なくなるだけで、通知自体が消滅するわけではないので、Facebook 内の地球印のお知らせには影響がありません。 自分の投稿にコメントが付いた場合のメール通知にはまた別の設定項目があり、個別に設定できます。他にも Tips として、「投稿のフォローをやめる」を押しておくことで、投稿主には知られることなく、個別の投稿に関するコメント追加通知を全く来ないようにできます。 現在 (2012.2) うちでは Chrome の拡張 Facebook Notifications を入れたことでメール通知は不要となったので、ほとんど全てのメール通知を無効化して快適に使っています。

[gae] 静的ファイルの配信でcharsetを指定するには

クラウド時代を実感させてくれる Google の素晴らしいサービス Google App Engine でアプリを作る際の設定について。 app.yaml で static_files を指定してファイルを配信する際に、レスポンスヘッダ Content-Type で charset を明示したい場合は、mime_type プロパティに 'text/html; charset=utf-8' という感じの値を入れると良いようです。 allow-any-origin.appspot.com で使っている app.yaml の断片: handlers: - url: / static_files: static/index.html mime_type: text/html; charset=utf-8 upload: static/index\.html

[Node.js] /dev/urandom を延々と出力する HTTP サーバー

Node.js の本体の API にある、 http.createServer を使って、ファイルの内容 (Readable Stream) を Class: http.ServerResponse (Writable Stream) に対して随時書き込んで、/dev/urandom から湧き出てくるランダムバイナリをストリーミング出力するとても有意義なサーバーを作ってみました。 以下のコードを node hogehoge.js という感じで実行して、適当に http://localhost:10001/ みたいなアドレスに対して HTTP でアクセスすると、バイナリデータを延々と返してくれます。 ポイント /dev/urandom を、ファイルの内容を Readable Stream で取れるように、 fs.createReadStream で開く。 HTTP レスポンスオブジェクト: resに対して、res.write で書き込みしていって、送信バッファがいっぱいになった場合、書き込めるようになると発生するイベント: drain まで書き込まずに待つ。 var fs = require('fs'), http = require('http'), util = require('util'), PORT = 10001; http.createServer(function (req, res) { res.writeHead(200, { 'Content-Type': 'application/octed-stream', }); var stream = fs.createReadStream('/dev/urandom'); stream.on('data', function (data) { console.log('on data: ' + data.length); var flushed = res.write(data); if (!flushed) { ...

[perl] PayPal の ExpressCheckout を使ってみる

PerlからPayPalのExpressCheckoutを使う方法についての記事です。これからはPayPalの時代が来るという 記事 を読んで自分でもやってみたくなったので、Sandboxアカウントで実際にやってみました。まだ実際にお金を動かしたりはしていないので、至らない点が多々あると思います。 ExpressCheckoutとは、決済手続きの途中でPayPalにリダイレクトして、その後こちら側のサイトに戻ってから最終決断のボタンを押してもらう方式で、決済完了の情報がきちんと伝わらないみたいな中途半端な状態にはならない方式です。 モジュールの選定 PayPal APIは二種類の形式で使うことができて、NVP(Name Value Pair)とSOAPです。 このうち、SOAPを使う、 Business::PayPal::API はPayPal APIの更新に追従できていないので良くないです。SOAPを直接いじろうとして、 SOAP::Lite を検討しましたが、面倒な感じなのでやめました。 a=b&c=d..のような形式でフォーマットされている素朴極まりないNVPを利用するライブラリ、 Business::PayPal::NVP がAPIが更新されても利用できるので良いと思います。 Sandboxアカウントの取得 こちら PayPal Sandbox で誰でも取得できます。Sandboxの中ではお金が使い放題です。 実際のコード use Business::PayPal::NVP; # branchでsandbox, 本番サーバーを切り替える my $paypal = Business::PayPal::NVP->new( test => { user => 'info_1287414775_biz_api1.hidekiy.com', pwd => 'xxxxxxxxxxx', sig => 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', version => 65, # 新しいのをたのむ ...

[linux] SSH経由でrootでrsyncしてサーバーの引っ越し

結論 rootでrsyncしようとsudo rsyncすると、SSHのAgent Forwardingに必要な環境変数をsudoがセキュリティ対策で削除して困ったが、sudo -E rsync とすると上手くいく。 蛇足 2HOSTの方針で、St.Louisのデータセンターが閉鎖されて、そのついでにセキュリティ問題発覚以後開発元がおかしなことになっている HyperVM から SolusVM への移行をすすめるので、新しいVPSノードを再設定できる人は、SolusVM管理下の新しいVPSノードを作るから各自移行してね、というメールが来たので、提案された通りにすることにしました。 そこで、古いサーバーのファイルを持っていくのに、scpでちまちまコピーするのも良いけどファイル数が多いと遅いので、rootでrsyncしてコピーすると良いのではないかと思って、やってみました。 しかし普通にsudo rsyncとすると、エージェントフォワーディングによる公開鍵認証にならないので、なぜなのか悩みましたが、sudoのセキュリティ対策によるものと分かりました。 CentOSでyumで入るsudoの/etc/sudoersはとても安全側に振ってあるみたいで、環境変数は指定されたものは全部削除されてしまい、SSH_AUTH_SOCKが削除されてAgent Forwardingが働きません。参考:sudo env と叩く sudoのmanページを読むと、その環境変数を削除する機能を一時的に無効にするオプション -E (preserve environment) を追加したら、無事公開鍵により認証され、root権限でのrsyncができました。 実際に使ったコマンドは、 sudo -E rsync --archive --verbose example.com:/etc/ ./example.com-etc のような感じで、example.com の /etc がローカルの ./example.com-etc に保存されます。

[perl] Coro::Specific の使いどころについて

Coro とは、 AnyEvent 、 JSON::XS で有名な Marc Lehmann 作の、Perlにおいて、協調型スレッド(簡単な方のスレッド) を実現して、背後で AnyEvent が仕事をしながら、プログラマ側からは今までのブロッキング方式と思って書けるようにするためのモジュールです。 本体に同梱されている Coro::Specific というモジュールを使うと、今まで fork システムコールで多重化していた Net::Server のような、サーバーのインスタンスが1つで、それぞれのクライアントがプロパティをちょこっと書き換える型のサーバーを Coro 化するのに役に立ちます。 実際に、Coro における PSGI サーバー実装である Corona で使っている、 Net::Server::Coro では、以下のようにして特定のプロパティをコルーチンごとに別々に設定できるようにしています。 # Net::Server::Coro::post_bind_hook 付近より抜粋 # $self はサーバーのインスタンス foreach my $key (qw(client sockaddr sockport peeraddr peerport peerhost)) { tie $self->{server}{$key}, Coro::Specific::; }