ラベル JavaScript の投稿を表示しています。 すべての投稿を表示
ラベル JavaScript の投稿を表示しています。 すべての投稿を表示

2013-07-16

Redmine でチケットを登録する時に確認画面を出す方法

何度言っても忘れてしまうチケット起票者に対して、確認画面を出すことになった。使っているチケット管理システムは Redmine。Redmine はデフォールトで JQuery をロードしているので、いきなりソースコードに JQuery のコードを書くことができる。

編集するのは /var/redmine/app/views/issues/new.html.erb。ページの末尾に次のコードを突っ込む。

<script>
$(function(){
  $('#issue-form').submit(function(e) {
    if (!confirm('確認用文言')) {
      e.preventDefault();
      $('#issue-form').removeAttr('data-submitted');
      return false;
    }
  });
});
</script>

これで、「作成」ボタンを押すと「確認用文言」がポップアップして OK を押すとチケットが作成され、キャンセルを押すともう一度説明文を編集することができるようになる。

「確認用文言」は状況に応じて変わると思うけど、「再現手順は書きましたか?」とか「不具合画面のスクリーンショットは貼りましたか?」等々、入力されなくて困ってることを書いておけば良いと思う。if 文以下をコピペすれば、複数個の確認画面を表示できる。

一日に数本チケットを作るかどうかという環境において有効。あんまりやりすぎると、自分がチケットを作る時ストレスになるのでご注意を。

JQuery を初めて触ってみた

会社に JQuery 本が転がっていたので、ちょっと JQuery の勉強でもしてみようかと本を手に取った。本当に基本的なことをメモ。

jQueryデザインブック 仕事で絶対に使うプロのテクニック
jQueryデザインブック 仕事で絶対に使うプロのテクニック

CDN の利用

CDN: Contents Delivery Network を利用すると、バージョンを指定したり、最新の JQuery を自動的に取得したりできる。

CDN の提供は Google, Microsoft, JQuery, CDNJS の三者が行なっている。

  • Google: //ajax.googleapis.com/ajax/libs/jquery/VERSION/jquery.min.js
  • Microsoft: http://ajax.aspnetcdn.com/ajax/jQuery/jquery-VERSION.js
  • jQuery: http://code.jquery.com/jquery-VERSION.min.js
  • CDNJS: //cdnjs.cloudflare.com/ajax/libs/jquery/VERSION/jquery.min.js

大文字で「VERSION」と書いた部分には、JQuery のバージョン番号を入れる。

Google では、下の番号を省略すると最新バージョンが自動的に指定される (他の CDN は知らない)。例えば、2.0.2 とフルバージョンを指定するのもあり。2.0 とすると、2013-07-16 現在最新の 2.0.3 が使われる。単に 2 とするとバージョン 2 系の最新版が得られるハズ。

フルバージョン指定すると、丸一年間キャシュされるのでその分高速化が期待できる。一方、バージョンを省略すると、24 時間しかキャッシュされない。キャッシュの恩恵に与かるか、サービスを自動で最新にしたいか。目的によって使い分けると良さそう。

最後に Google の Script を書いておく。

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>

おや、http: がないけれど良いのかしらん。

JQuery 基礎の基礎

JQuery の基本的な構文は下記の通り:

jQuery('セレクタ').メソッド(パラメーター)

セレクターは CSS と同じものが使える。ID を指定するなら #id, クラスを指定するなら .class, h1 要素直下の p 要素は h1+p といった具合。

メソッドは... 本やウェブサイトで勉強して...

パラメーターも同様に...

jQuery にはシンタックス・シュガーが用意されていて、普通はこちらを使う:

$('セレクタ').メソッド(パラメーター)

JQuery のコードは、onload 以前に走らせることが可能。タイミングとしては HTML の準備が整った段階でのスタートとのこと。

$(document).ready(処理);

実際のコードは次の様になるか...

$(document).ready(function(){
  処理
});

これもシンタックス・シュガーが用意されている:

$(function(){ 処理 });

簡単なサンプル

というわけで、簡単なサンプル。サイト内に foo という ID を持つ a 要素があったらクリックした時に alert を出す jQuery Script。

$(function(){
  $('#foo').click(function(){
    alert('#foo is clicked')
    return false;
  })
});

あとがき

うん。まだ、始めたばかりで勝手が良く分かってない。とにかく楽しそうなのは実感した。

2013-03-14

Redmine の「説明」にテンプレート・テキストを挿入する bookmarklet を作った

Redmine を使うに当たって、「説明」部分のテンプレートを用意したい。これをブックマークレットで実現した。

Redmine のパワーユーザーならご存じの通り、Redmine で「新しいチケット」を登録する時、「題名」と併せて重要なのが「説明」。

「バグ」に絞って話を進めると、どのような操作をしたのか? エラー・メッセージは何と出たのか? ということは最低限書いて欲しい。

けれど、新人のテスターやプログラミングをやったことのない人が Redmine にバグ登録するのは敷居が高い。そこで、「説明」部分にテンプレートを置き、入力の補助を行なう。

ブックマークレット

「説明」部分にテンプレートを挿入するブックマークレットを作った。

JavaScript のソースコードはこんな感じ。

document.getElementById("issue_description").value="
h1. バグについて

h2. バグが出た場所

* 

h2. バグを出す操作

#

h1. エラー・メッセージ

<pre>
</pre>"

これをブックマークレットに直したのがこちら。

簡単に説明を加えると、Redmine の「説明」の textarea の ID は issue_description。textarea の中身を書き換えるには InnerHTML ではなく value を使う。

ちなみに Redmine のバージョンは 2.3.0。

他の方法もあるけれど

Redmine のソースコードをいじるのは、バージョン・アップに対してリスクが大きい。特に細めにバージョン・アップを繰り返す場合はやりたくない。

Redmine Plugin では Issue Template というのが良さそうだった。今回、このプラグインが程提するほどの高性能を求めないことと、プラグインは開発が止まる (もしくは最新版に追従しない) リスクがあるので使用を控えた。

あとがき

皆にブックマークレットを登録してもらうのが手間と言えば手間だけど、基本、Redmine 初心者用と割り切っている。

パワーユーザーになれば、定型にこだわることなくテキストを入力する。ほんの数行で理解させるバグ報告の場合もあるし、とても詳しいバグ報告を書かないといけない場合もある。こういった判断は経験を積まないと出来ない。

今回のブックマークレットは、とりあえずバグ報告をする時に「初心者」の敷居を低くすることに主眼を置いている。複数のテンプレートがあるなら、複数のブックマークレットを作ればいいし、ユーザーの力量によってテンプレート挿入を自己判断に任せられることが気に入っている。

2013-02-05

iPhone で Safari のソースコードを表示させる Bookmarklet

iPhone の Safari で、時々、今見ているページのソースコードが見たくなることがある。で検索してみると、いろんな人がブックマークレット (ブックマーク) を作ってた。一つリンクを張っておく。

せっかくなので、どういうソースコードなのか見てみる。

d=document;
c=d.charset%7C%7C0;
i=0;
o=d.documentElement;
d.write(%22%3Cpre%3E%22+(o.outerHTML%7C%7Co.innerHTML).replace(/&/g,%22&amp;%22).replace(/%3C/g,%22&lt;%22).replace(/%3E/g,%22&gt;%22)+%22%3C/pre%3E%22);
c?d.charset=c:0;
void(document.close());

%XX 表記が読み難い。デコード! (ref. JavaScript escape vs encodeURI: lower ASCII)

d=document;
c=d.charset||0;
i=0;
o=d.documentElement;
d.write("<pre>"
          +(o.outerHTML||o.innerHTML).replace(/&/g,"&amp;")
                                     .replace(/</g,"&lt;")
                                     .replace(/>/g,"&gt;")
          +"</pre>");
c?d.charset=c:0;
void(document.close());

読みやすくなった。

変数 o に全てのドキュメント要素を入れて、それを pre 要素の中に書き出し直すようにしているわけね。その際、&, <, > といったタグの部品を読めるように置換する、と。なるほどねぇ。勉強になった。

2013-02-01

AMN パートナー・ブログ・バッチを貼った

2012 年 12 月。当ブログは AMN のパートナー・ブログになった。

一昨夜、パートナー・ブログ用のバッチが出来たとの知らせを受けた。早速、サイドバーに貼ってある。

バッチをクリックすると、AMN の「ネットワーク・パートナー (パートナー・ブログ)」解説ページへ跳ぶ (今のところは)。

Blogger における不具合

バッチは JavaScript を使って表示される。何故 JavaScript かというと、AMN パートナー・ブログ以外のサイトではバッチを表示させないため。だから、この JavaScript をコピーして自分のブログに貼って、「ほら、ぼくは AMN パートナー・ブログ」と言おうとしてもバッチは表示されない。

ところが、この対策が Blogger では悪く働いた。

Blogger は国別にリダイレクトする仕様。このブログを日本から見ているなら http://at-aka.blogspot.jp/ だけど、米国から見ると http://at-aka.blogspot.com/ に、フランスから見ると http://at-aka.blogspot.fr/ になる。

ぼくは、自分のブログを blogspot.com で AMN に申請していた。日本では blogspot.jp に URL が変わってしまうので、バッチの JavaScript は申請のブログと違うと判断した。結果、ぼくのブログに AMN バッチは表示されない。きっとアメリカから見ている人にだけバッチが見えていたことと思う。

不具合を AMN に伝えたところ、応急処置として blogspot.jp で判定する様になった。お蔭で、バッチが表示される様になった。ただし、日本でのみ。日本国外からこのブログを見ている人には、きっとバッチは見えないことと思う。

こういう風な本当の URL と仮の URL の様な関係が存在する場合の対策として、HTML のヘッダーに <link rel='canonical' href='本当の URL' と書く方式が推奨されている。Blogger もこの rel='canonical' に対応している。

AMN には、サイトの rel='canonical' もチェックしてもらうようにもお願いを出しておいた。近々、全世界で AMN バッチが表示される (はず)。

※ そうか、rel='canonical' だけ偽造するサイトが出るかもしれないから、rel='canonical' で foo.blogspot.com が含まれていたら、TLD 部を削除して URL 部分と foo.blogspot 部分が一致するか調べなきゃなのか、な? 近いうちに rel='canonical' について記事を書こう。

2012-06-28

if (条件A || 条件B) の条件文が長くなったら、どこでコードを折り返すか?

先日、Twitter でタイトルの様な質問に出会った。この問いに簡単に答えたのだけど、140 字では全てを伝えきれないので、改めてブログのエントリーにする。

前置き

短い if 文をこう書くとする。

if (条件A || 条件B) 省略

if 文の中が長くなった時、読みづらい。

if (とっても長〜〜〜い条件A || とっても長〜〜〜い条件B) 省略

この時、どう書くのが良いか? 一例としてこんなのがある。

if (
    とっても長〜〜〜い条件A ||
    とっても長〜〜〜い条件B
) 省略

|| を条件式の後ろに置く書き方。

私見

ぼくは || を条件式の前に置く書き方を好む。

if (
    とっても長〜〜〜い条件A
    || とっても長〜〜〜い条件B
) 省略

インデントが少し崩れる。これはデメリットとして認める。

それよりも、「OR」である事が行頭を見るだけで分かるメリットを強調したい。「前置き」に例示した行末に置くやり方だと、行末まで目を動かさないと、条件式が || で繋がっていることを確認できない。

ぼくらは最初から if (条件A || 条件B) というコードを見ているので「OR」だと分かっているけれども、実際にコードを読む時はそれが「OR」なのか「AND」なのか分かっていない。行頭に置けば、初めて読むコードでも一目瞭然になる。

if (
    とっても長〜〜〜い条件A
    || とっても長〜〜〜い条件B
    || とっても長〜〜〜い条件C
    || とっても長〜〜〜い条件D
    || とっても長〜〜〜い条件E
) 省略

条件文が複雑になった時も、読みやすい。理解しやすい。

if (
    (
      とっても長〜〜〜い条件A
      || とっても長〜〜〜い条件B
    )
    &&
    (
      とっても長〜〜〜い条件C
      || とっても長〜〜〜い条件D
      || とっても長〜〜〜い条件E
    )
) 省略

分かりやすい、ということはバグが減るということ。コーディング一つ取っても、少し気を配るだけでバグを減らせる。

あとがき

本来、こういった長い条件文は、別関数にするのが定石。

ただ、プロファイルを見たらループの中の if 文の条件文がネックになってて、関数呼び出ししないコードにすることでプログラムの致命的な遅さが解決する... なんて泥臭いケースがある。マクロ (Lisp など) やインライン関数 (C99, C++ など) が使える言語なら幸せだけど、そういう言語を使っていない場合もある。

そういう場合に備えて、一つ頭の隅に入れておいてもらえれば。

なお、これはあくまでぼくのやり方にすぎない。他に良い方法があれば、是非、ブログの記事にして欲しい。

2012-05-29

社会人プログラマー向けのお勧め参考書記事が参考になる

という記事を読んだ。書かれたのは 2012-03-30。良記事なので、ブックマークを兼ねて紹介する。

タイトルは「新社会人 Web プログラマ向け」と書いてあるけれども、プログラマーだったら誰でも読む価値あり。大学生・高校生でも読める本は沢山ある。ウェブ・プログラマーじゃなくても、開発手法や VCS (Version Control System) の参考書は勉強になる。こういった参考書を読み漁って十分な知識を得た上級者には、他人に本を薦める時の手間を省いてくれる記事になる。

目次は以下の通り:

  1. プログラマとしての心得
  2. 開発手法
  3. WEB (追加)
  4. データベース
  5. VCS
  6. エディタ
    1. Emacs
    2. Vim
  7. CI/CD
  8. PHP
  9. JavaScript
  10. Ruby
  11. Python
  12. Perl
  13. “プロ”グラマ向け
  14. その他

各項目ごとに参考書が複数冊紹介されており、それぞれにコメントが付けられている。コメントは短いもので一行。たいてい 4 行。本を読んでみようか、興味を持つには十分な長さ。ぼくは全ての本を読んだわけじゃないけれども、良書が並んでいると思う。

2012-04-11

はてなが「はてな教科書」を公開 〜 ウェブアプリケーション作成の基本を解説

はてなが、ウェブアプリケーション作成の基本を学ぶための「はてな教科書」を github 上に公開した。ライセンスは「クリエイティブ・コモンズ 表示 - 非営利 - 継承 2.1」。

この教科書は、エンジニアの手によって執筆されており、サマー・インターンシップなどでも利用されているとのこと。現在の目次は次の通り:

  • Perl によるオブジェクト指向プログラミング
  • ORM によるデータベース操作 (DBIx::MoCo を使った開発)
  • MVC によるウェブアプリケーション開発 (Ridge を使った開発)
  • JavaScript によるイベントドリブン

はてなのサマー・インターンシップの様子はブログで公開している参加者も多い。彼らの様子を見ていると、非常に難易度は高そう。経験者でも、Perl, JavaScript の勉強にはもってこい? フレームワークへのとっかかりとしても良さそう。

2012-02-19

NTT R&D: リアルタイムグラフ可視化技術

NTT R&D フォーラムで見た展示のメモ。

リアルタイムグラフ可視化技術の展示

Twitter から拾い上げたキーワードをリアルタイムにネットワーク・グラフ化して表示していた。

メモ

本展示は、HTML5 の技術を使うことでリアルタイム処理を行なえる様になることの実演デモ。キーワードは 3 つ。

  • WebWorkrs
  • WebGL
  • WebCL

キーワードを理解していれば、驚くほどのこともない展示。ただ、知らない用語があったので、勉強を兼ねて自分の言葉で説明してみる。

WebWorkrs
JavaScript をスレッド化する技術。JavaScript は描画と演算を同時に行なう場合、計算結果を表示するようなウェブ・アプリは計算が重いと描画が止まってしまう。WebWorkers で描画と演算を別スレッドにすることにより、描画処理を向上させる。
WebGL
三次元描画用の API。二次元描画には Canvas と SVG があるけれども、三次元は扱えない。結果、プログラマーが三次元情報を二次元に落とす様なプログラムを書く必要がある。WebGL は最初から三次元を二次元表示する仕様なので高速。またグラフィック・ボードの支援を受けて更なる高速化も期待できる。
WebCL
JavaScript の計算を GPU で行なう API。つまり、グラフィック・ボードの支援能力を使う技術。CPU が不得手とする計算を GPU に任せてしまう (CPU/GPU には得手不得手がある)。特に三次元描画系の計算は CPU より GPU が得意とする。

WebWorkers, WebGL, WebCL とグラフィック・アクセラレーションを使うことで、従来の 200 倍の高速化を実現。

あとがき

用語は知っていても、プログラミングしてみる機会のなかった分野。ちょっとプログラミング熱がわく展示だった。

2012-02-10

IE に textContent は使えない

さっき、Firefox に innerText は使えないから textContent を使いませう、と書いたばかりなのに、今度は textContent が IE で使えないと言う。

ここで 2 つの選択肢が浮上。

  1. ブラウザー判定をして、textContent と innerText を使い分ける
  2. innerHTML を使う

今回、問題になっているコードでは innerHTML で十分。機能過多な気もするけれど間違いがない。一方、ブラウザー判定を入れると他のバグが混入しそう。バグが出るよりもシンプルなコードで。KISS!

(旧) a.textContent = post_title.textContent;
(新) a.innerHTML = post_title.innerHTML;

蛇足

メモ代全りに

  • innerText は IE が独自導入したプロパティ。W3C 非公認。Firefox 以外のブラウザーがサポート。
  • textContent は W3C が標準化したプロパティ。IE が非サポート。
  • innerHTML は W3C が標準化したプロパティ。全てのブラウザーがサポート。innerText/textContent がテキストだけを返すのに対して、innerHTML は HTML 要素もそのまま返す。

ref

Firefox に innerText は使えない

JavaScript でプログラムを書いたら、Firefox で動かないとバグ・レポートが入った。innerText が問題という。調べてみると、Firefox で innerText が使えないのは割と有名な話らしい。

このブログの記事の通り、innerTexttextContent に置き換えたら問題なく動くようになった。

問題のソースコードは下記:

(旧) a.innerText = post_title.innerText;
(新) a.textContent = post_title.textContent;

あとがき

こういうバグ・レポートをもらえたのも、ソース・コードを公開していたからだと思う。今回は丁寧にも innerText が問題ではないか? と原因の考察付きだった。そこまで分かれば解決策を見つけのは易い。

仮に原因が見つからないにしても、「Firefox で動かない」だけでもバグ・レポートをもらえると助かる。こちらは全てのブラウザーでチェックしているわけではないので。

ともかく、これで「目次」ウィジェットは Firefox でも動くようになった。バグ・レポートに感謝。

2011-11-01

GDD2011 の DevQuiz Web Game の回答

前エントリーに引き続いて、GDD2011 の DevQuiz における「Web Game」の回答を載せてみる。

課題

シンプルな神経衰弱ゲームです。カードはクリックすることでめくることができます。全 64 セットを解くことで問題クリアとなります。

回答

Google Chrome Extensions のサンプル・コードが用意されている。そのコードをいじくって、カードを端から順にクリックしてめくり、「同じ」カードを見つけたらそのセットをクリックして、「神経衰弱」を完成させるプログラムを書いた。

ソースコードは、Gist に載せてある。

あとがき

この問題は比較的簡単に解けた。Chrome の拡張機能は、manifest と JavaScript の書き方さえ学べば簡単に書けてしまう。個人で使うだけなら、zip で固めて Google Chrome に読み込ませて用は足るので便利。ただ、凝ったことをやろうとすると、セキュリティーがらみで少し面倒 (本課題ではそこまで踏み込まなかったけど)。一冊、解説書が欲しいかな。

2009-10-07

lpaldb -- LP Album DB 開発中

先日の HTML5 Hackathon で何を作ったか書いておく。

HTML5 では Web DB が使えるといふことなので「LP (レコード) 用の DB」を作ってみた。いやさ、作ろうとした。ぼくの技術力不足で、アルバム・タイトルを入力して検索する程度までしか出来てない。アルファ版とも言えないでき。周りの人達が、フレームワークやライブラリーを使い込なしているのを見て、Emacs が書き書きするだけの自分の力不足を感じた。

開発プロジェクト

それはともかく、ソースコードは Github と Google Codes に置いてある。

開発は GitHub で続けていくつもり。Google Code には、同じく Hackathon に参加した人達と一緒にソースコードを共有する意味で置いた (HTML5 のソースを見るなら、ぼくの情けないソースコードより、Google Codes の他の人のソースコードの方が役に立つ!)。

LP Album DB というけれど...

レコードって大変。CD のやうに iTunes に読み込ませたら、アルバム名・曲名が分かるわけじゃない。

そこで、レコードの情報を DB として持っていて共有できる仕組みがあればと考えた。だけど、すぐに開発に入れるわけもなく、無為に時間を過ごしているとやってきたのが HTML5 Hackathon。

Web DB のお題に丁度良いんじゃないか? と思ったわけ。

ところで、こんなアプリを作らうと思ったのは、友人の影響が大きい。彼は大の LP 好き。そして、そろそろ LP の管理に困り始めている。

LP 用の DB なんて、CD 用を少しいじれば... と思っていたけど、それほど単純でもないらしい。A 面と B 面があったり、イギリス盤とアメリカ盤で収録曲がズレてたり、モノラルとステレオでテイクが違っていたり... オリジナル盤に近い方が音が良いとか。Matrix 番号も記録できるといいとか。せっかく友達のために作るアプリなんで、なるたけマニアックな対応をしていきたいと思ってる。

レコード・ファンの皆さんも、何か要望があればコメントをどうぞ。正式版アプリが出るのは 1 年以上先になると思うけど ^^;

2006-07-14

トリプル・クリックが必要だった理由

先日、Google Maps でズーム機能が追加された件を記事にした。左のダブル・クリックでズーム・イン、右のダブル・クリックでズーム・アウトするというやつね。で、ズーム・アウトにはダブル・クリックじゃなくてトリプル・クリックが必要だと書いた。

ただ、ぼくの環境 (firefox / Linux) だと、ズーム・アウトには右のトリプル・クリックが必要だった。

何故、トリプル・クリックが必要だったのか? やはり、ぼくの firefox の設定に原因があった。

firefox の設定で、「コンテンツ」「JavaScript を有効にする」「詳細設定」「次のスクリプトを許可する」の「コンテキストメニューを無効または変更する」というチェックボックスのチェックを外していたのがいけなかった (デフォールトではチェック入)。コンテキスト・メニューは、firefox で右クリックした時に開くポップアップ・ウィンドウのこと。

Google Maps は地図上で右クリックを押しても、コンテキスト・メニューを出さないようになっている。ところが、ぼくは firefox の設定で Google Maps の「右クリック無効化」を無効にしてしまった。そのため、最初の一回目のクリックは、コンテキスト・メニューをポップアップする為に firefox に喰われてしまっていたらしい。それで、一回余分にクリックが必要になったということらしい。

「コンテキストメニューを無効〜」のチェックを入れた所、右ダブル・クリックでズーム・アウトするようなった。

Google Maps 以外のアプリでの不具合

「コンテキストメニューを無効または変更する」のチェックを外していると、この他にも問題が起きることがある。例えば、AJAX 系のアプリケーションが右クリックで、そのアプリ特有の右クリック・メニューを用意している場合。firefox のコンテキスト・メニューがアプリのコンテキスト・メニューの上に乗って操作できなくなる。概当するサービスは、Google Spreadsheets30 Boxes など。

昔は、コンテキスト・メニューを無効化したり変更したりするサイトは、ろくでもないページが多かったやうに思う。けれど、最近は、全うな使い方をするサービスが現れ始めたっぽい。きっと、これから、全うなサービスが増えることでせう。

そんなわけで、AJAX 系アプリを多用してるギークな皆さんは、「コンテキストメニューを無効〜」の設定が悪さしてしまう事もある、と頭に入れておくとよいでせう。

2006-07-03

Google Pages に JavaScript コードが貼れるようになった

Google Pages に、JavaScript コードが貼り付けられるようになった。

方法は、Google Page Creator の編集ページで、「Edit HTML」リンクをクリック。ポップアップした HTML エディターの中に HTML コードを書くというもの。シンプルだね。ちなみに今までは、Google Page Creator が HTML 内の JavaScript コードを自動削除するようになっていた。

JavaScript が埋め込めるということは、Google AdSense も Google Analytics も使えるようになるということ。

どんな JavaScript でも動くかどうか、試してはいないけれども、少くとも alert は動いた。Google AdSense も動くらしい。サンプルは以下のページをどうぞ。

今まで JavaScript 付のウェブページを Google Pages に置こうと思ったら、ファイルをローカルで作ってアップロードするしかなかった。これで、もっと手軽に動的なページ作成が出来るようになりそう。

2006-03-25

公開 subscriptions @ aka

Google Reader に共有機能がついて、いわゆるブログロールが作れるようになった。

ブログのサイドバーにブログロールを貼ってもよいのだけど、あんましペタペタ貼ってると重くなりそうなんで Google Page Creator に置くことにした。

それで少し調べてみた所、Google Page Creator では script 要素が (まだ?) 使えないみたい。HTML 編集で直接 script 要素を書き込んでも、publish 時に要素が削除された。AdSesnse とか Google Analytics とか Bloglines のブログロールとか、JavaScript を貼り付けるサービスは全て使えない。

ローカルで HTML ファイルを作成して、ファイルをアップロードする分には問題ないので、そのようにして pub ラベルを付けた subscriptions を公開してみた。

ぼくの購読してるブログ全部を公開してるわけじゃなくて、読んで (一般的に) 面白そうなブログをチョイスした。そんなわけで、ニュース系ブログ (ITmedia とか)、日本語以外の言語で書かれたブログ、それから ChangeLog メモのような短い記事中心のブログは除外した。あと、abstract だけのブログは、そもそも Google Reader で読んでない (Bloglines で読んでる) ので、こちらのリストには現れない。

ぼくが興味を持っているブログに興味があれば、試しに share してみて下さいな。

本当は、もうちょっとテーマを明確にできればよいのだろうけどねぇ。

Official に...

Google の Official Blog にも、share 機能の言及がある。

いくつかの share 候補を挙げているけど、全部英語なので、ちょっとハードル高そう ^^;

ただ一つ。List of Official Google Blogs (U.S. only) というのは購読してみた。Google がやってる全部の英語公式ブログをサポートしてるっぽい。これから Google のサービスが増えて、公式ブログが増えた場合、自動的にリストに加えられるんじゃないかなぁ。そんな期待を込めて。

2005-12-21

Greasemonkey っていいね (若しくはフォント・サイズを小さくするスクリプト)

Greasemonkey を使い始めた。Greasemonkey は firefox の拡張の一つ。サイトごとに任意の JavaScript を実行させる環境だとぼくは認識してる。

例えば、clmemo@aka では先日ブログのフォント・サイズを small から medium に直した。で、今まで通り小さなフォントで表示させる読者のために bookmarklet を書いて置いたのだけど、ページを移動するたびにブックマークレットを実行する必要があって面倒臭い。もし、「http://at-aka.blogspot.com/ ではフォント・サイズを常に small にする JavaScript を実行する」ことができたら手間が省ける。

思いたったが吉日。そういう Greasemonkey スクリプトを書いてみた。

まず、

から最新の Greasemonkey をインストールして、次のユーザー・スクリプト (Greasemonkey で動かす JavaScript のコードをそう呼ぶ) を右クリック、「Install User Script」する。

コードの中身はたったの一行。

// ==UserScript==
// @name          Font Size Small
// @namespace     http://at-aka.blogspot.com/
// @description   Set font-size of body element small.
// @include       http://at-aka.blogspot.com/*
// ==/UserScript==

GM_addStyle("body { font-size: small; }");

GM_addStyle は Greasemonkey が定義する関数で、CSS を設定するためのもの。ちょっと JavaScript か CSS を勉強するだけで、任意のページの見栄えを変えることができる。Greasemonkey って面白い。

他のページでもフォント・サイズを小さくしたかったら、メニューの「ツール」から「Manage User Script」を選ぶ。インストールしたユーザー・スクリプトの一覧が表示されるので、スクリプトを選んで Include Pages に適用したいページの URL を書く。例えば http://www.foo.bar/* という感じに (* で任意の文字列を表す)。若しくは、Excluded pages にサイトを指定すると、そのサイト以外のページでユーザー・スクリプトが有効になる。

フォントを小さくするんじゃなくて、大きくしたい (Medium なフォント・サイズにしたい) なら、次のユーザー・スクリプトをお試しあれ。

ぼくが使ってるユーザー・スクリプト

ぼくが使ってる他の人のユーザー・スクリプトを二つ紹介。

マイミクシィ最新日記から外部 Blog を消す Greasemonkey 用 User Script - にぽたん研究所

mixi の最新日記一覧から、外部ブログで日記を公開している人達の日記を隠す。外部ブログを Google Reader なんかで読んでる場合に、余計な情報を見なくて済むようになるので便利。

(追記:2005-12-22) コメント欄にて、「マイミキシィ管理」から「マイミキシィ最新日記に表示させない」を選ぶことができるとの情報を頂きました。「表示」「非表示」を一人ずつ設定することができるので、かなり便利です。(takayama さん、ありがとうございます)

最速インターフェース研究会 :: del.icio.usにはてなブックマーク件数をくっつけるGreasemonkeyスクリプト
del.icio.usはてなブックマークのブックマーク件数も表示する。del.icio.us で人気なページがはてなブックマークでほとんどブックマークされてなかったりとか、その逆もあったりとか。このスクリプトの逆バージョンもあればいいのに...

ココログ・フリー

今回、User Script を公開するに当たって、ココログ・フリーのアカウントを取って、そこにファイルを置いてみた。よさげなら、改めて記事を書きます。

2005-11-18

ちょっと気になる Google Analytics コードの位置

備忘録的メモ。Landscape さんが「Google Analytics のタグを head に入れる理由は?」というエントリーで Google Analytics のトラッキング用コード (head 要素内に入れろと書かれている JavaScript コードのことね) の位置について Google に質問メールを送ってる。

まだ解答待ちだけど、もし body 内でも OK なら、はてなダイアリーTypePad でも小さな修正で Google Analytics が使えるようになる。Google からの返事が楽しみ。

ref

追記: (2005-11-20)

Google から回答が来たそうな。

結論:「よく分からない」

ただ、インストール位置による HTTP トランザクションの中身の変化はないそうです。

2005-10-18

XHTML の script 要素の閉じタグでハマった

body 要素の中に script 要素を入れると、script 要素の直後に、head 要素の閉じタグと body 要素の開きタグが挿入され、結果として script 要素より前のテキストが無視される現象に出会った ( firefox 1.0.7)。具体的なコードを書くと、

<body>
foo bar something
<script type="text/javascript"></script>
FOO BAR ANYTHING
</body>

を、 firefox は次のように解釈する。

<body>
foo bar something
<script type="text/javascript"></script>
</head><body>
FOO BAR ANYTHING
</body>

この場合、前半の foo bar something はブラウザーに表示されない。

原因は head 要素内の script 要素

原因は、head 要素内の次の script 要素だった。

<head>
 <title>foo</title>
 <script type="text/javascript" src="bar.js"/>
</head>

見てお分かりだろうか? script 要素の閉じタグがない。XHTML では、HTML で許されていた <br> のような閉じタグの省略が許されなくなった。そのため、厳密には <br></br> のように閉じタグが必要になった。でも、それじゃあ面倒だってんで、 <br/> のような書き方も許されている。

そこで、script 要素も (要素の中身が空なら) 同じ書き方が出来るだろう、と

 <script type="text/javascript" src="bar.js"></script>

 <script type="text/javascript" src="bar.js"/>

のように書いたわけ。確かにこの書き方は、本文中に script 要素の閉じタグが現れるまでは動いた。でも、body 要素内に script 要素の閉じタグが現れたとたん、head 要素内の script 要素は閉じていない、と firefox に解釈されてしまったらしい。そしてご丁寧にも、head 要素の閉じタグと body 要素の開きタグまで挿入してくれちゃったわけ。

XHTML の仕様をまだ確認していないのだけど、任意の要素を <div/> のように書くのは許されていないのかしらん。

今夜はこいつのおかげでえらい目に遇った...

Amazon の商品個別リンクから BookLog へのリンクに変えた |Blogger|

最近、 BookLog が面白くてしょうがない。 BookLog については、「 ブクログ、始めました」でも書いたけど、簡単に説明すれば Amazon の商品を本棚風にレビューを付けて紹介するサービス。本と本とで、他人の本棚と SNS 的に繋がるのが楽しい。そこで今回、 Amazon への個別リンクを BookLog@aka へのレビューへのリンクに変えてみた。

clmemo@aka では、ブログのエントリーに関連する商品をサイドバーに表示させている (See 「 関連情報をエントリーの外に表示させる (2) printAmazon」)。このリンク先を BookLog の URL に変えただけ。 BookLog の商品 URL は、ユーザー名が at-aka として次のようになる。

http://booklog.jp/at-aka/asin/ASIN-NUMBER

BookLog のレビュー・ページからも、 Amazon の個別ページへリンクが張られているけど、デフォールトでは、このリンクには BookLog の開発者の Amazon Associate ID が入っている。 BookLog の詳細設定で、 Amazon ID の設定を忘れずに...

BookLog に関して不満を言えば

  • 動作が重い。
  • (カテゴリーじゃなくて) タグを使いたい。
  • シリーズものは、グループか何かでまとめて更新できないかしらん。
  • 自分のレビュー・ページから、すぐに編集ができると楽。
  • ブクログの Export 機能が欲しい。

といったところ。特に動作が重いのは早く直って欲しいなぁ。

サンプル

せっかくなので、試してみやう。

先日書いた、「 ChangeLog メモで人名は、フルネームで書け」というタイトルは、丸谷才一氏の「文章読本」から「ちょっと気取って書け」を真似たもの。というわけで、「文章読本」へのリンクをサイドバーに入れてみる。

.