2011年9月アーカイブ

むかし、はてなブックマークといえば、ブックマークしたユーザ数が一人の場合は“1 Users”ではなく、“1 User”と表記することにとてもこだわっていたのだと思います。

たとえば、被リンク数を画像で取得するAPIを使ったときに表示に利用される画像などは、

http://cdn.b.st-hatena.com/images/users/gif/normal/00001.gif
http://cdn.b.st-hatena.com/images/users/gif/normal/00002.gif

となっています。

ところが、Android版はてなブックマークアプリや、iOS版はてなブックマークアプリでは、“1 Users”と表示されてしまいます。

Device20110930224433
▲1 Usersと表示

はてなのエンジニアも中身が入れ替わっているのでしょうから、こだわりの部分が変化しているのだと思いました。

いろいろな移管がありまして高齢者が多い業種の印刷物の営業を行うことになったわけですけれども、実際に担当してみると、今までわからなかったことが見えてきます。

特に、寸法表記では、「ミリ」で表記するとうまく理解していただけないことが多いように感じます。この前、僕の行きつけの飲み屋のハゲとっつぁまが放射線の単位をミリとかマイクロとか言うな、と誰に向かって怒っているのかわかんないことを言っていましたが、要は単純に単位になじみがないのだと思いました。

じゃあ、尺とか寸とかで言え、ていう話ではなくて、僕らがイメージを抱くお年寄り(自分自身の祖父母の年代)よりは若いので、単純にセンチでいえば話は通じるのです。

うちらも印刷業界に入る前はいちいちミリに言い換えるのまんどくせーとか内心思っていたはずなのですが、いつの間にか「印刷業界のルールで提示するのが当たり前」となっていたのですね。

つうわけで、移管した事業のカタログとかは、今度からセンチ表記に書き換えたり、客層に応じてミリとセンチの言い換えをスマートに行うことが必要だなあとか思いました。

Android版Firefox 7が出たので、最近作っているWebSocketサーバに果たして接続できるかどうかやってみました。

見事接続できました。

ただし、WebSocketオブジェクトではなくて、MozWebSocketオブジェクトを使うことになります。

WS = function(f) {
  if (typeof MozWebSocket != 'undefined' ) return new MozWebSocket(f);
  if (typeof WebSocket != 'undefined' ) return new WebSocket(f);
  return;
}

こんなの作ればいいわけだな。

いきなりDTPのトレーニングを担当することになって、僕もMac離れてから2年近くなるので、リハビリということで、「じゃあ、Macの電源の付け方と、Finder操作のキーボードショートカットから行きましょー」とか言いながら教えていたのですが、キーボードのCommandキーが「⌘とリンゴ」になっているタイプ(年代から言うとApple Pro Keyboard?)なので、「コマンドマークが書きにくい」と言われました。

最近のMacだったら、しっかりCommandって書いてあるので楽なんですよね。

コマンドキーについて :Macintosh - Wikipedia [ja.wikipedia.org]

あんまり時間がないもののせっかく買ったニンテンドー3DSで遊んだりすることもあるのですけれども、3DS用カートリッジを抜いて昔のDS用カートリッジが収納されている入れ物に入れようとしたのですが、3DSカートリッジには、DSカートリッジから比べると突起物が付いており、収納ができなくなっていました……

DS本体に3DSカートリッジ誤挿入を防止するための出っ張りなんだと思いますが、デザイン的にも醜いし、ギミックとして工夫されているとも言いにくいので、おそらくDS開発時は次世代機はDS互換になるとは思っていなかったのかなーとか感じました。

実際、オンラインでゲームが購入できたりしますしね。今カートリッジで売っているソフトがダウンロード販売になってくれたら、カートリッジでのゲーム交換せずに3DSのGUIで選択できるようになるのでしょうから、よっぽどいいんですけれどもね。

Twitter Streaming APIからの出力をリアルタイムにWebブラウザに表示する実装を作るにあたり、Mojolicious::LiteサーバとGoogle ChromeブラウザをWebSocketで接続すればいいと考え、実際にできるかどうか試したのは昨日のエントリでやりましたが、表示のさせ方を変えてみました。

声の高さやアクセントをちょっといじってみた。

Twitter Streaming APIからの出力をリアルタイムにWebブラウザに表示する実装を作るにあたり、Mojolicious::LiteサーバとGoogle ChromeブラウザをWebSocketで接続すればいいと考え、実際にできるかどうか試してみました。

動画でイメージを見たほうが早いので、下記をどうぞ。

Mojoliciousの発音がこれでいいかは知らない。

Android版radiko.jpをインストールしていたのですが、関東や関西ではないので、地域制限のせいで放送がきくことができない全く意味のないアプリになっていたのですが、先日東京に行った時の帰り、新幹線に乗って、radiko.jpで野球中継を聞いていたのですが、そのまま群馬と新潟の境にある谷川岳地下の大清水トンネルの長い長い電波不通区間を乗り越えて新潟県側に出たら、ふたたびradiko.jpの野球中継が聞こえました。

radiko.jpアプリは、起動時にGPSで現在地を確認して、放送取得可能地域を判断したため、高速移動したらそのまま聞くことができたみたいです。

個人的には、radiko.jpよりも、AGQRのAndroid版アプリがあってほしいところです。

とある事情で、名刺を家庭用プリンタとエレコムのなっとく。名刺を使ってプリントアウトをする必要がありまして(おまえは印刷屋だろ!)、急遽Windows 7 64bitマシンに、僕のうちにあるFAXプリンタ複合機UX-MF50CLをセットアップする必要が発生したのですが、メーカーのサイトに行くと、Windows Vistaまでのドライバしかないわけです。

UX-MF50CL自体は、LAN接続してあったので、メーカーサイトのWindows Vista 64bit用LAN接続用ドライバをダウンロードして、インストールしてみたのですが、ドライバのインストーラーが異常終了します。

よく調べたら、同じサイトにあるWindows Vista 64bit用USB接続用ドライバであれば、Windows 7 64bitでも何とか使えるらしいということが分かり、事なきを得ました。

そうやって苦労して作った名刺をIGASで渡したら、「こういう名刺見たことない」とDISられてへこみました。IGASに来る人間全員がまともに名刺を持っている人間ばかりだとは思うなよ!

今日健康診断だったんですけれども、健康診断で胃のレントゲン撮影する人の場合、前日の夜8時から断食をするのですが、昨日は新幹線に乗っていてちょうど夜8時になる前までにカロリーメイトとお茶を食い終わって、万全の態勢で東京から戻ってきたのです。

そんで、今朝は、昨日東京に行ってきたかせいかすごく眠かったので、フリスクのすごーい辛いやつを食って目を覚ました。

……あ。くっちまった……

健康診断の時に素直に申請したら、「じゃあ今回は胃のレントゲン撮影なしですねーくしゃくしゃぽい」と胃カメラ用問診票を捨てられてしまった……

みんなが胃のレントゲン撮影している中、僕だけ撮影しない状態になり、撮影した人には「うんこしなくてすんで楽だのう」とか、「おめー、ぽんつくなんか?」とか言われてかえって針の筵でした。

来年は、気を抜かず胃カメラ撮影までたどりつけるよう頑張る所存でございます……

どこで作っているかは言えない某サイトでは、どっかで見たことある表現や見たことないギミックなどが僕の手作りで作りこまれているのですけれども、もしかしたらサーバからプッシュで情報が出せるならもっとお客さまに役立つサイトになるかなーとか思ったので、

Mojolicious::Lite で WebSocket を使ったチャットを作る - naoyaのはてなダイアリー [d.hatena.ne.jp]

を見て、Mojoliciousでサーバからプッシュで情報が出せるWebSocketができるんだーということで、早速やってみました。

んで、僕の場合

  • サーバ:ServersMan@VPS(CentOS 5)
  • クライアント:Google Chrome 14(Windows 7)

という構成ですので、たとえばCentOS 5側では、Firewallで3000番のポートに穴をあけてあげたり、クライアント側からサーバへ接続しに行くためのURLがlocalhostではなくて実ドメインだったりとかして、そこは書き換え終わったのですけれども、クライアント側のWebSocket接続確率時にどうしてもサーバ側でエラーが発生します(コンソールにエラーが吐き出される)。

で、よーく調べてみますと、ある時期にMojoliciousで大きな改編があり、昔使えていたメソッドが今は使えなくなっていることがわかりました。

最近の主な変更点 - GitHub [github.com]

によると、

  • receive_message()はon_message()に変更されました。(receive_message()はしばらく残されますが、on_message()を使用してください)
  • finished()はon_finish()に変更されました。(finishedはしばらく残されますが、on_finish()を使用してください。)

がモロ該当していました。というわけで、文頭で参照したエントリのソースの、
$self->receive_message を $self->on_message、$self->finishedを$self->on_finishに書き換えることによって解決しました。

ここら辺になってくると、ポートを開けたり閉めたりとか、Mojoliciousのサーバプロセスを立ち上げておいたりとか、普通のWebの知識だけじゃなかなか難しくなってきますね。Linuxサーバを立てたりしてた時の経験が若干生きてくるかなあ。

休日は一歩も外に出ずプログラムしようと思って、Mojoliciousをcpanmでアップグレードしようと思い、

# cpanm Mojolicious

と入れたら、

# cpanm Mojolicious
--> Working on Mojolicious
Fetching http://search.cpan.org/CPAN/authors/id/S/SR/SRI/Mojolicious-1.98.tar.gz ... OK
Configuring Mojolicious-1.98 ... OK
Building and testing Mojolicious-1.98 ... FAIL
! Installing Mojolicious failed. See /root/.cpanm/build.log for details.
#

となむ。

エラーログを見たら、

#   Failed test 'use Mojo;'
#   at t/mojo/app.t line 17.
#     Tried to use 'Mojo'.
#     Error:  Nested quantifiers in regex; marked by <-- HERE in m/
#   ^
#   (
#     "(?:[^"\\]++ <-- HERE |\\.)*+"   # Quoted
#   |
#     [^;,]+               # Unquoted
#   )
#   \s*
# / at /root/.cpanm/work/1316401414.42559/Mojolicious-1.98/blib/lib/Mojo/Cookie.pm line 31.
# Compilation failed in require at /root/.cpanm/work/1316401414.42559/Mojolicious-1.98/blib/lib/Mojo/Base.pm line 32.

というのが延々と。

全般的にどうかなっちゃっているような感じがしたので、CPAN testers Matrixを見に行きましたが、最近落ちているらしく、最新のテスト状況が見られませんでした。

更に、CPANでは、最新バージョン以外は削除されている状況です。

つうわけで、CPANから削除されたモジュールがあるBackPan http://backpan.perl.org/ に行きまして、 

http://backpan.perl.org/authors/id/S/SR/SRI/

あたりに古いCPANモジュールがあるのを確認し、

# cpanm http://backpan.perl.org/authors/id/S/SR/SRI/Mojolicious-1.97.tar.gz
--> Working on http://backpan.perl.org/authors/id/S/SR/SRI/Mojolicious-1.97.tar.gz
Fetching http://backpan.perl.org/authors/id/S/SR/SRI/Mojolicious-1.97.tar.gz ... OK
Configuring Mojolicious-1.97 ... OK
Building and testing Mojolicious-1.97 ... OK
Successfully installed Mojolicious-1.97
1 distribution installed
#

と相成りました。BackPanがあってよかった!

Facebookのいいね!ボタンは、iframeで挿入するタイプなんですけれども、いいね!がされていないときは数が表示されるところが空白になって見栄えが悪くなるので、Facebook Graph APIをjQueryを使ってコールして、自前で描画すればいいのではないかと思いました。

今回のミッションは、

  1. Facebook Graph APIの使い方を調べる
  2. APIの戻り値を調べjQueryで処理する方法を考える
  3. HTMLでデザインする

となりますが2.だけ解説すると、

https://graph.facebook.com/http://www.yahoo.co.jp/

にアクセスすると、

{
   "id": "http://www.yahoo.co.jp/",
   "shares": 6692,
   "comments": 9
}

が得られますが、これはJSON形式のデータであり、クロスドメインでは使えないので、Graph APIを見ると、callback=hoge をつけることでJSONPの出力が得られることがわかります。

https://graph.facebook.com/http://www.yahoo.co.jp/&callback=hoge

/**/ hoge({
   "id": "http://www.yahoo.co.jp/",
   "shares": 6692,
   "comments": 9
});

この形であれば、jQueryの$.AJAXでデータタイプJSONPを指定したときに合いますので取得できるというわけです。

File: facebookgraphapi-sample.html

<html>
  <head>
    <script type="text/javascript"
      src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script>
    <script type="text/javascript">
    $(function() {
      var url = 'http://www.yahoo.co.jp/';
      $.ajax({
          url      : 'https://graph.facebook.com/' + url,
          dataType : 'jsonp',
          success  : function(json){ $('.button_count_count').text( json.shares || 0 ); }
      });
    });
    </script>
    <style>
    .button_count {
      font-size: 11px;
      color: #333333;
      font-family: "lucida grande",tahoma,verdana,arial,'Hiragino Kaku Gothic Pro',Meiryo,'MS PGothic',sans-serif;
    }
    .button_count_count {
      background: none repeat scroll 0 0 #EFEFEF;
      border: 1px solid #C1C1C1;
      height: 14px;
      line-height: 14px;
      margin-left: 1px;
      min-width: 15px;
      padding: 1px 2px;
      text-align: center;
    }
    </style>
  </head>
  <body>
    <span class="button_count"
      ><span class="button_count_count"
        ></span
      ></span
    >
  </body>
</html>

Operaのソース編集機能を使ってコピーペーストして実行した結果はこちら。

Jqueryiine
▲Yahoo Japan! のいいね数を表示

用途としては、ほかのソーシャルボタンとデザインを合わせたいときなどでしょうか。あとは、自由にデザインできますよね。

もっとまともにやっているのはこちら。

Facebookの「いいね!」ボタンをオリジナルデザインに変更する | indigonote [indigonote.com]

今日は土曜日出社だったのですが、普段デスクワークの僕も工場に入り機械整備などを行うのですが、そうすると印刷工場なので当然インキが手に付きまして、そのまま夜の街に出ていくとインキが付いた手を見られるとすぐに会社バレがしてしまうので、お湯とスクラブが入ったせっけん液とたわしで手に付いたインキをきれいに落としてから夜の街に出るわけですけれども、そのお湯を出すための瞬間湯沸かし器に入っている着火用の単一乾電池が切れていて火が付かなかった……

一時的に非常用懐中電灯から電池を抜いてことなきを得たのですが(ちゃんと元に戻しました!)、そういえば最近瞬間湯沸かし器の「瞬間」って言わないなあと思うなどする。

僕の生家は瞬間湯沸かし器がない家庭で、実は瞬間湯沸かし器を使い始めたのはつい最近だったりします。そういう意味で瞬間湯沸かし器の瞬間ぶりを体感しているわけですが、おそらく瞬間湯沸かし器が生まれた時からある家庭では、瞬間湯沸かし器の瞬間ぶりを体感することなく大人になっているのであり、そういう意味では「瞬間」の文字は落ちてもしょうがないとも思うし、そもそも湯沸かし器といわなくて「給湯器」に統一されつつある雰囲気ですよね。

あと、どうでもいいですけれども、パロマの瞬間湯沸かし器がやけに不完全燃焼に関して厳しく3回不完全燃焼を起こすとサービスマンを呼ばないと復旧できないのですけれども、これは例の死亡事故の大作だとは思うんですけれども、リンナイとかほかのメーカーの瞬間湯沸かし器はどうなっているんだろう?

いまさら、ウェブサイトに行動ターゲティングのトラッキングタグが仕込まれているからどうだ、というわけではないのですが[要出典]、はてなブックマークボタンにマイクロアドの行動ターゲティングのトラッキングタグが挿入されるようになっているのに気づいてしまい(→M.C.P.C.: はてなブックマークボタンのJavaScriptがdocument.write使っていてXHTMLで不具合があったのが直った(または9月1日からオプトアウト版はてなブックマークボタンが出ていた件)、これが今年9月からついたわけですけれども、9月より前に設置されたはてなブックマークボタンにも自動的に一定の確率で挿入されるようになっており、ユーザーの知らないところでトラッキングが実施されるようになっています。

source: http://b.st-hatena.com/js/bookmark_button.js ll.734-743

(function () {
var domains = 'www.toyokeizai.net member.toyokeizai.net excite.co.jp exblog.jp mainichi.jp jp.msn.com *.jp.msn.com itmedia.co.jp bizmakoto.jp atmarkit.co.jp eetimes.jp ednjapan.cancom-j.com ednjapan.com barks.jp www.asahi.com *.asahi.com jp.techcrunch.com japanese.engadget.com jp.autoblog.com celebrity.aol.jp www.nikkei.com *.nikkeibp.co.jp japan.cnet.com japan.zdnet.com builder.japan.zdnet.com japan.gamespot.com www.re-source.jp www.yomiuri.co.jp groupon.jp';
var pattern = '^(?:' + domains.replace(/\./g, '\\.').replace(/\*\\\./g, '(?:[^.]+\\.)+').replace(/\s+/g, '|') + ')$';
if (isLocal || !/^https?:$/.test(location.protocol) || new RegExp(pattern).test(location.hostname)) return;
if (Math.random() >= 1 / 2) return;
window.mad_partner_id = '6';
var script = E('script', { type: 'text/javascript', src: '//send.microad.jp/js/conv0000.js' });
var anchor = document.getElementsByTagName('script')[0] || document.getElementsByTagName('head')[0].firstChild;
anchor.parentNode.insertBefore(script, anchor);
})(); 

(今日の場合、1/2の確率でマイクロアドのスクリプトが挿入されるようです。この前は、1/3だった。なぜか確率はコロコロ変わる)

で、はてなブックマークボタンが設置しているサイトでは、マイクロアドの行動ターゲティングのトラッキングを実施していることを説明したほうが、サイト利用者にとって親切だと思うし、更には、マイクロアドのトラッキング行為をやめるようにと、マイクロアドのウェブサイトから指示できる(オプトアウト)ことも提示したほうがいいと思います。

マイクロアドのウェブサイトから行動ターゲティングのためのトラッキングのオプトアウトをするのはこちら。

MicroAdの広告をご覧のお客様へ [send.microad.jp]

そういうわけなんですけれども、企業サイトではてなブックマークボタンを設置している場合だとすると、はてなブックマーク側の2011年9月からの勝手な方針変更のせいで、お客様に対しての説明をするために、企業内では、企業と契約もしていない「マイクロアド」の名前が出てくる文章を用意することは、そもそも「何の目的であるか」「企業にとって何のメリットがあるか」などを説明する必要が出てくるし、「契約もしていないのにデータ取りに利用されている」という解釈をされると大変だなあとか思います。

というわけで、はてなブックマークボタンの場合、そもそもマイクロアドの行動ターゲティングのトラッキングをしないタイプのものがこっそり用意されていますので、こっちを使うことにしました。

(オプトアウト版)はてなブックマークボタンの作成・設置について [b.hatena.ne.jp]

※ちなみに、このブログでは、オプトアウト版はてなブックマークボタンではありません。あくまでも業務で公開しているウェブサイトでそうした、ということです。

ソーシャルボタンを設置すれば、そのボタンを提供している主体にある程度の情報を渡すことを了承していることになるのはいいのだけれども、今回のはてなブックマークボタンのように、設置時には情報提供をすることを認識しない状態で設置していたのに、オプトアウト式にトラッキングの仕組みを入れられると、困る人もいるんじゃないかなーとか思いました。

※見方を変えると、どこの企業にデータを提供することになるか、外部から見るとわかりやすいやり方ではあったかなあ。


(2012-3-10 11:04追記)

  • 発見の発端になったエントリを追記。
  • おとといコード見なおしてみたらMicroAdのトラッキングコードの挿入確率を決めていたコードがなくなったので、「一定の確率で」「確率云々~」をdel。


(2012-3-10 11:12追記)

Webでの反応を下に列記します


(2012-3-10 13:44追記)

要出典タグを追加。


(2012-3-11 15:05追記)

Webでの反応を追加。


(2012-3-12 1:08修正)

「はてなブックマークのトラッキング – ochimusya」がリンク切れになっていたので、新しくリンクを記入した。


(2012-3-13 21:22追記)

当該サービス運営者側からの発表(謝罪、トラッキング開始前の仕様にロールバック)がありました。

ニュース:三菱製紙、Android端末向け印刷用紙検索アプリ「P-Point」公開|PJ web news【印刷ジャーナル】 [www.pjl.co.jp]

ていうニュースがあったので、早速試してみました。

Device20110915230608
▲業界初を猛烈プッシュ

やってもうてるわー!

僕も業界初とかつける癖がありますが、これは気をつけたほうがいいと自戒しました。

んで、気を取り直して、インストール画面。

Device20110915230711
▲業界初を猛烈プッシュ・II

もう反応しないぞー……プププ

初回起動時には、用紙データをダウンロードします。ちゃんと更新されるってことだと思いますので、三菱製紙さんのやる気を感じます。

Device20110915230757
▲新鮮な用紙データを必要とする

んで、インストール中

Device20110915230814
▲最新の用紙の最新データをネットで取得

一回用紙データを取得すれば、フライトモードでも使えるのですが、再取得方法が不明です……

Device20110915230849
▲これで使えるようになった

ていうわけなんですけれども、おそらくAndroidアプリにしないで、HTML5のアプリとかにしたらいいんじゃねえかとか思いました。

個人的には、4年ぐらい昔HTML+JavaScriptで印刷見積もりの積算アプリを作ったことがあるのですが、そういうところにこのアプリで持っている紙データをアダプトしたいなあと。つうことは、このアプリのフロントエンドではなくバックエンドにある紙データに自由にアクセスしたいところですよね。

で、このアプリには重大な欠点があって、それは、紙問屋さんの関係上三菱製紙さんの紙を取りにくいってことなのだ!(個人的な都合)

ていうわけで、三菱製紙さんだけじゃあなくてほかの主要製紙メーカーさんが同じ形式で紙のデータを公開して、製紙メーカーを横断して探せるほうがユーザーにとっては良いんですよね。実際、GPNでそれが出来ているわけだから技術的には何ら問題ないんですよねきっと。

昨晩地デジチューナーを再度取り付けに行ってきたのですが、今日の日中、そこのうちのとっつぁまから電話が入り「付けてくれたやつ見てるんだけど画面にどっかのとっつぁまの絵しか表示されない」とかわけのわからないこというんです。

「それブラウン管に映ってる自分の姿だわやこのハゲとっつぁま」と返したのですが埒が明かないので、昼休み会社を抜けて見に行ってきました。

そしたら、地デジチューナーが何らかの原因でハングアップしていて、おそらくニュース映像でどっかのとっつぁまにインタビューしていたところで止まってしまったようで、フレームバッファに貯まっていたどっかのとっつぁまの映像を延々とビデオ出力に出していたのでした。

地デジチューナーの電源を抜いてからもう一度入れなおして、地デジチューナーのハングアップ状態からは復旧して、問題なく見れましたが、ハゲとっつぁまが「とっつぁまの絵がテストパターンだったんだな」とか一人納得していたのですがそれはありえません。

~~~

で、このように地デジチューナーもハングアップします。

地デジチューナーの主だったユーザーは高齢者だと思うんですが、こうやってハングアップしたとき、復旧の仕方を知らずに延々とおじさんの画像を見させられていたり、動かないあやまんJAPANを見させられていたりすると思うと不憫でなりません。

もうちょっと、復旧方法がわかりやすいチューナーを作れなかったものかと思いました。10秒間機械が空中にあると強制リセット、とか。

DTPの必需品(?)、PuTTYですが、なんで必要かっていうと、Windows標準のソフトだけじゃあテキスト処理が力不足なんで、よくLinuxに接続して作業したりするってことがあったからなんですが、ともかくPuTTYで太字が表示できないもんだと思っていたんです。

たとえば、こんな感じで、ところどころ太字を指定しているのに、反映されなかったのです。

Puttybold01
▲ナロー

そこで、設定を見直すと……

Puttybold02
▲具体的に言うと言い回しがおかしい

とにかく太字を色を変えないで表示ってことは太字のままなんじゃね?ということで設定してみると?

Puttybold03
▲すごく……太いです……

これでコンソールライフにいろどりのほかに緩急が加わりましたね!

PerlでCUI版Twitterクライアントを作っているんですが、対話型インタフェースを実現するために、Term::ReadLineを使うのが定番とPerlクックブックに書いてあったので、使ってみたのですが、最初全然ヒストリが効かなくてなんだこれーとか思ったんですけれども、Perlクックブックに、一緒にTerm::ReadLine::Gnuの名前が挙がっているので、

調べてみたところ、Term::ReadLine::Gnuが入っていると、自動的にTerm::ReadLineから使ってくれる(プログラム中にTerm::ReadLine::Gnuを書く必要がない)つうことがわかりました。

んで、うちのCentOS 5.6だとcpanmでTerm::ReadLine::Gnuが入らなかったので、yumから入れてしまいました……

さっきまで上矢印を押してもちっとも出なかったコマンドヒストリがプログラムを少しもいじることもなく出るようになりました!

近所のうちで地デジチューナーを買ったが映らないということで見に行ったのですけれども、そのうちの壁に付いているテレビのターミナルが、端子ごと金具部分がなくなっていた。

どうやら今までのアナログテレビでは、端子の中心部の結線だけで何とか映っていたらしいのだけれども、地デジチューナーでは、網線部の結線もないと電波のレベルが低いと出る。

とりあえず壁の埋め込みのテレビターミナルを後日買ってくることにしましたけれども、ともかく地デジチューナーからビデオ入力用の赤白黄の3本の端子が出ているわけですが、地デジチューナー付けるようなテレビって結構モノラルテレビが多いんじゃないかなーと思うので、結局赤白をミキシングしなくてはならないのかなーとか思いました。

(2013-2-5追記)※このエントリのあと、Twitter API version 1.0の提供が2013年3月までとなり、このエントリの内容が使えなくなりますので、補足エントリ Twitter API version 1.1対応Net::Twitter 4.00000_01が出ているよ - M.C.P.C. (Mamesibori Creation Plus Communication)を用意しましたので、そちらも合わせてお読みください。

※このエントリは、実用! PerlでコマンドラインからTwitter投稿(OAuth対応) - perl-mongers.org [perl-mongers.org] このエントリーのはてなブックマーク件数の再録です(perl-mongers.org消失によりサルベージ)


まいど! 畑違いの業界(印刷屋さんです)からこんにちは! CLです。

最近WindowsからLinuxへログインして作業していることが多いんですけれども、なんかつぶやきたくなったときにこんなの。Twitterにポスト。Net::Twitterモジュールを使います。

と書いたのが2年前。

実用! PerlでコマンドラインからTwitter投稿 - perl-mongers.org

今は2010年の6月なんですけれども、6月いっぱいで、Twitter APIのBASIC認証ができなくなってしまうということで、前書いた記事も結構のアクセス量があるみたいなので、改訂版として書いてみようと思います。

(2010-06-18追記)
Twitterブログ: Twitter APIデベロッパー・コミュニティへのお知らせ (OAuthへの移行に関しての期限延長)

以前、ベーシック認証への対応を2010年6月30日をもって終了し、OAuthに移行する予定であることを発表しましたが、このたびOAuthへの移行の期限を2010年8月16日まで延長ことにしました。 2010年8月16日から段階的にベーシック認証への対応を停止します。

今回の流れは、

  • Twitterでアプリ登録をする(今回追加!)
  • とりあえず投稿できるスクリプトを作ってみる
  • コマンドラインから投稿できるものにグレードアップ

となっています。

いまどきのNet::Twitterは、CPANを使い、イチからインストールすると、1時間ぐらいかかります。僕は、Amazon EC2では、既にNet::Twitterをインストール済みのAMIを用意しています。

以前、M.C.P.C.: Googleプレイスの企業情報登録で、オーナーなのに企業情報変更が反映されない

というエントリを書いたのですが、その後、思い立ってページ下部の「問題の報告」

Googleplacebottom

をクリックして、出てくる選択肢の中から、

・「一部の写真、クチコミ、詳細が違う場所のものである」

を選び、このページのオーナーであること、編集ページとプレイスのページでの齟齬の状況の説明を日本語で送ったのが、火曜日の日。

そんで、今日、金曜日にGoogleから英語で返事が来て、直してもらえました。

めでたしめでたし、なのですけれども、これは

Google プレイス、営業中店舗を「閉店」と表示 - japan.internet.com [japan.internet.com]

の記事を見て、「もしかして直るかも」と思ってやってみたものです。問題報告も使いようですね。

家電量販店のノジマに行ったら、パナソニックの太陽電池式照明が売っていました。

コンパクトソーラーライト「BG-BL01G」を発売 | プレスリリース | ニュース | パナソニック企業情報 | Panasonic [panasonic.co.jp]

これなんですが、パナソニックの充電式エボルタ単三乾電池2本が付いてきて、15時間でフル充電され、太陽電池面の裏面に付いているLED照明を充電池から給電して光らせることができるという照明器具です。

面白いのは、この器具からUSB給電ができるということと、充電池を取り出してほかの器具にも使える、ということです。

充電スピードから言えばPowerFilm製の太陽電池充電機には及びませんが(僕の持っている奴だと単三充電池2本で3時間半程度で充電できます)、実家の人たちが電気に疎いので、電源供給できるなら万が一の時のためこれを買っておくのもいいかなあとか思いました。

XHTMLで書いてサーバからMIMEタイプapplication/xhtml+xmlで送出されるばあい、document.writeやらがうまく動かないので、ソーシャルボタンが動作不良になる件を引き続きやっていきますが、前回のはてなブックマークボタンの件は、行動マーケティング測定用のタグが悪さをしていたということで、「はてなのサービスがこっそり行動マーケティングタグを挿入しているのが見つかった」という、思いもよらぬ展開になってしまったわけですが、今回は、Twitterのツイートボタンを見ていきます。

ツイートボタンについては、Twitter / ツイートボタン [twitter.com] を参照。

さて、まず今回はこんなHTMLを作ってみました。

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
  xml:lang="ja" lang="ja">
  <head>
    <meta charset="utf-8" />
    <title>test</title>
  </head>
  <body>
    <p>
      <a href="http://twitter.com/share"
        class="twitter-share-button"
        data-url="http://www.yahoo.co.jp/"
        data-count="horizontal"
        data-lang="ja">
        ツイート</a
      >
      <script type="text/javascript"
        src="http://platform.twitter.com/widgets.js"></script>
    </p>
  </body>
</html>

こんな表示になります。

Twbtn01
▲正常に表示されない

ウェブサイトを、厳格にXHTML化したときに(MIMEタイプをapplication/xhtml+xmlとかにしたとき)、document.writeが使えなくなるという問題があるのですが、最近はやりのソーシャルボタンにも、document.writeやそれに類する仕組みを使っていて、動かなくなることがありました。

というわけで、はてなブックマークボタンも、document.writeを使っていて、コンソールにエラーが出る(動くことは動く)ソーシャルボタンの一つだったのですが、今日見たら直っていた、というお話。

はてなブックマークボタンについては、はてなブックマークボタンの作成・設置について [b.hatena.ne.jp] を参照。

サイトをXHTML5化するために、.htaccessに

AddType "application/xhtml+xml; charset=UTF-8" .html

なんていうのを入れてしまうと、404や403や500のエラーが出たときに表示させるHTML文章も、XMLとして適正(ウェルフォームド)になっていないとブラウザでエラーメッセージが表示できません。

というわけで、BlueOnyxで動いているWebサーバのエラードキュメントを、XHTML5にしました。

なんでBlueOnyxなんだよ、ていうかもしれませんが、「レンタルサーバ」「VPS」「メールサーバ」「ウェブサーバ」「SSHで入れる」「僕がいなくなってもだれかがメンテナンスできる」などの様々な要因を合わせて考えたらこうなったってわけです。

修正前:web/error/404-file-not-found.html(CP932)

<HTML>
<HEAD>
<META NAME="Copyright" VALUE="Copyright (C) 2000, Cobalt Networks, Inc.  All rights reserved.">
<!-- locale-sensitive -->
<TITLE>ファイルが見つかりません</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF" >
<BLOCKQUOTE>
 
    <P>&nbsp;</P>
 
  <DIV ALIGN="center">
 
<TABLE WIDTH="400" BORDER="0" CELLSPACING="0" CELLPADDING="0">
        <TR BGCOLOR="#999999">
                <TD>
                        <TABLE WIDTH="400" BORDER="0" CELLSPACING="1" CELLPADDING="5" ALIGN="center">
                                <TR BGCOLOR="#990000">
                                        <TD COLSPAN="2">
<!-- locale-sensitive -->
                                                <DIV ALIGN="left">
                                                        <FONT COLOR="#FFFFFF" SIZE="3"><B>ファイルが見つかりません</B> </FONT>
                                                </DIV>
                                        </TD>
                                </TR>
                                <TR>
                                        <TD BGCOLOR="#FFFFFF" COLSPAN="2" VALIGN="middle">
                                                <TABLE WIDTH="100%" BORDER="0">
                                                        <TR>
                                                                <TD>
                                                                        <IMG SRC="/libImage/warning.gif" WIDTH="40" HEIGHT="40" ALIGN="middle">
                                                                        </TD>
                                                                        <TD>
                                                                                <FONT SIZE="2">
<!-- locale-sensitive -->
                                                                                        リクエストされた URL は、このサーバ上には見つかりません。</FONT>
                                                                        </TD>
                                                                </TR>
                                                        </TABLE>
                                                </TD>
                                        </TR>
                                </TABLE>
                        </TD>
                </TR>
        </TABLE>
  </DIV>
</BLOCKQUOTE>
</HTML>
<!--
Copyright (c) 2003 Sun Microsystems, Inc. All  Rights Reserved.
 
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
 
-Redistribution of source code must retain the above copyright notice, this  list of conditions and the following disclaimer.
 
-Redistribution in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation and/or
other materials provided with the distribution.
 
Neither the name of Sun Microsystems, Inc. or the names of contributors may
be used to endorse or promote products derived from this software without
specific prior written permission.
 
This software is provided "AS IS," without a warranty of any kind. ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
 
You acknowledge that  this software is not designed or intended for use in the design, construction, operation or maintenance of any nuclear facility.
-->

修正後:web/error/404-file-not-found.html(UTF-8)

<!DOCTYPE html>
<!--#set var="d_page_title" value="ファイルが見つかりません"
--><!--#set var="d_description" value="リクエストされた URL は、このサーバ上には見つかりません。"
--><html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
  <head>
    <meta charset="utf-8" />
    <!-- META NAME="Copyright" VALUE="Copyright (C) 2000, Cobalt Networks, Inc.  All rights reserved." / -->
    <!-- locale-sensitive -->
    <title><!--#echo var="d_page_title" --></title>
    <style type="text/css">
    table table td {
      padding: 5px;
    }
    table table table td {
      padding: 1px;
      text-align: left;
    }
    </style>
  </head>
  <body style="background-color: #fff;" >
    <blockquote>
      
      <p>&#160;</p>
      
      <div style="text-align: center; margin: 0px auto;">
        
        <table style="width: 400px; border: 0px; margin: 0px auto; border-spacing: 0px; padding: 0px;">
          <tbody>
            <tr style="background-color: #999;">
              <td>
                <table style="width: 398px; border: 0px; border-spacing: 0px; cellpadding: 5px; text-align: center; margin: 0px auto;">
                  <tbody>
                    <tr style="background-color: #900;">
                      <td style="border-bottom: 1px solid #999;">
                        <!-- locale-sensitive -->
                        <div style="text-align: left;">
                          <span style="color: #fff; font-size: 16px;"><b><!--#echo var="d_page_title" --></b> </span>
                        </div>
                      </td>
                    </tr>
                    <tr>
                      <td style="background-color: #fff; vertical-align: middle;">
                        <table style="width: 100%; border: 0px;">
                          <tbody>
                            <tr>
                              <td>
                                <img src="/libImage/warning.gif" width="40" height="40" style="vertical-align: middle;" alt="Warning" />
                              </td>
                              <td>
                                <span style="font-size: 13px;">
                                <!-- locale-sensitive -->
                                <!--#echo var="d_description" --></span>
                              </td>
                            </tr>
                          </tbody>
                        </table>
                      </td>
                    </tr>
                  </tbody>
                </table>
              </td>
            </tr>
          </tbody>
        </table>
      </div>
    </blockquote>
  </body>
</html>

NHKのラジオ放送の難聴取地域のためのネット配信「らじる★らじる」が9月1日より始まっていました。

らじる★らじる NHKネットラジオ [www3.nhk.or.jp]

Radiru

見るとなんとなくわかるとおり、3局あるうちのどれかをクリックすれば放送が流れる仕組み。これはわかりやすい!

Radiko.jpは首都圏と京阪でしか聞けないので使い勝手は知らんけれども、らじる★らじるは、日本全国で使えるとのことで、とってもありがたいサービスですよね! あと、星の意味はなんななのだ。ハンマ★ハンマなのか。アジス★アベバなのか。

まえ、

M.C.P.C.: 「ゲームの実績システム」をフィーチャーした「スタンプラリーシステム」でサイト巡回を強制する(案)

で、

    <script type="text/javascript" src="jquery.js"></script>
    <script type="text/javascript" src="jquery.cookie.js"></script>
    <script type="text/javascript">
    $( function() {
      var sr = $.cookie('sr');
      var h = {};
      if (sr != null) {
        h = eval("("+sr+")");
      }
      h['products'] = 'passed'; // スタンプラリーとして登録するページ名を変える
      $.cookie('sr', JSON.stringify(h), { expires: 365 } );
    });
    </script>


という書き方をしていたのだけれども、evalすると圧倒的に危ないので、

        h = eval("("+sr+")");

        h = $.parseJSON(sr);

と書き換えるほうがよい。

いまさら何でこれ直しているかというと、とあるサイトに組み込んだからなんですよね、実績システム(閲覧率表示システム)。成果物は個人ブログで発表してはいけないのでどことはいえませんが。

もともとPowerMacでDTPオペレータやってたりしたので、マウスパッドをボール式マウス(Apple ADB Mouse II)では使い勝手が良かったつぶつぶ半球が規則的に並んでいるタイプのやつを長らく使っていました。

時は流れ……

光学式マウスにしてもマウスパッドはそのままつぶつぶ半球タイプのものを使っていたのですが、パートさんに支給した2500円くらいのELECOMの光学式用サラサラマウスパッドを使ってみたら、いきなりマウスの移動速度が倍になりました! そう、光学式マウスだとつぶつぶ半球のパターンを正確にトラッキングできなかったのです!

交換するとばれるよなー

2年前に購入したdocomoのHT-03Aというdocomo初のAndroidケータイなのですが、2か月前に、なぜか入らないはずの液晶部に蒸気が入り、水ぬれ状態になってしまい、1ヶ月間EBOOTで止まってしまうという状態になっていまして、すぐに機種変更したかったのですが、購入サポート24ヶ月縛りと、ファミ割MAX50の24ヶ月縛りのダブル縛りがあったので、やむを得ず新規購入でOptimus brightを購入して、HT-03Aは文字通り文鎮となっていたわけですけれども、今日9月1日で、やっと縛りがなくなったので、会社終わった後ドコモショップに行って、1回線解約してきました。

解約すると、FOMAカードをハサミで切るのな。毎回見てて思うんだけど、ケータイ電話に穴をあける器具があるんだったら、FOMAカードをスッパリ切れる器具だってあってもいいのではないかと思います。

というわけで、やっとdocomo2回線に戻りました。Optimus brightの24ヶ月縛りがまた始まってしまったわけだが……

月別 アーカイブ

ウェブページ

OpenID対応しています OpenIDについて
Powered by Movable Type 5.2.7

このアーカイブについて

このページには、2011年9月に書かれたブログ記事が新しい順に公開されています。

前のアーカイブは2011年8月です。

次のアーカイブは2011年10月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。