Showing posts with label HTML. Show all posts
Showing posts with label HTML. Show all posts

2017-01-29

Emacs で HTML のライブ・プレビューを行なう impatient-mode

Emacs で編集中の HTML ソースを外部ブラウザー (Chrome とか) でライブ・プレビューするマイナー・モード impatient-mode の存在を知ったので試してみた。

インストール

MELPA からインストールできる。.emacs に MELPA の設定をして:

;;
;; Package (Emacs 24+)
;;
(require 'package)
(add-to-list 'package-archives '("melpa" . "http://melpa.milkbox.net/packages/") t)
(package-initialize)

M-x package-list-packages から impatient-mode を選択しインストールする。

使い方

foo.html というファイルを編集しているとする。

  1. M-x httpd-start でウェブ・サーバーを起動しておく (一度だけ)
  2. foo.html を開く
  3. M-x impatient-mode でマイナー・モード impatient-mode をオンにする
  4. 外部ブラウザーで http://localhost:8080/imp にアクセスする
  5. ファイル名一覧が表示されるので foo.html を選ぶ

以上。

ライブ・プレビューが不要になったら、もう一度 M-x impatient-mode を叩いて impatient-mode をオフにしてやればいい。

動画

あとがき

HTML を書いて、すぐに確認できるのは便利。同じ要領で Markdown のライブ・プレビューもやりたい。今度、探してみよう。

2015-09-03

Apple 用キーの HTML エンティティ

これからのブログ記事で使いそうなので、メモ。

Entity Glyph Name
Apple
⌘Command, Cmd
⌃Control, Ctrl
⌥Option, Opt, (Windows) Alt
⇧Shift
⇪Caps lock
⏏Eject
↩Return, Carriage Return
↵ ↵Return, Carriage Return
⏎Return, Carriage Return
⌤Enter
⌫Delete, Backspace
⌦Forward Delete
⎋Escape, Esc
→ →Right arrow
← ←Left arrow
↑ ↑Up arrow
↓ ↓Down arrow
⇞Page Up, PgUp
⇟Page Down, PgDn
↖Home
↘End
⌧Clear
⇥Tab
⇤Shift Tab
␣Space, Blank

2013-04-13

Emacs でファイルごとに .el ファイルを読み込ませる

.emacs には書くほどではないけれども、あるファイルを開いた時にだけ読み込んで欲しい elisp がある場合の対処法。

Emacs の Local Variables 形式を使う。

詳しくは Emacs の info で Local Variables を読んでもらうとして、簡単にやり方を書いておく。

Local Variables and eval

Local Variables にはファイルの先頭に置く方法と末尾に置く方法の二種がある。ここでは後者を使う。

ファイルの末尾に行き、そのファイルのコメントを使いながら次のコードを書く。

Local Variables:
eval: (load "/path/to/foo.el")
End:

例えば Emacs-Lisp のコードなら、こう書く。

;; Local Variables:
;; eval: (load "/path/to/foo.el")
;; End:

C++ なら、こう:

// Local Variables:
// eval: (load "/path/to/foo.el")
// End:

HTML なら、こう:

<!-- Local Variables: -->
<!-- eval: (load "/path/to/foo.el") -->
<!-- End: -->

少し工夫して

ぼくはブログの原稿を blog.xml というファイルに書いて、それを Blogger の投稿エディターにコピペしている。理由は、使い慣れたエディターで文章を書くのが一番楽だから。メジャー・モードには nxml-mode を使っているけれども、Blog 専用の関数をいくつか blog.el というファイルに入れている。

blog.xml を開いた時に、自動的に blog.el (同じディレクトリーにある) をロードするようにしたい。

ぼくは以下のコードを blog.xml の末尾に置いている。

<!-- Local Variables: -->
<!-- eval: (load (expand-file-name "blog.el" ".")) -->
<!-- End: -->

あとがき

このやり方だと、ファイルとそのファイル専用の elisp ファイルをセットで配布できるメリットがある。git でファイルを管理する場合も、ファイルと elisp が別々に別れないので便利。また、ファイルを開くたびにロードする手間を省けるので効率も上がる。

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-09-07

日本語で makeinfo (HTML ファイルの作成)

日本語の Texinfo ファイルを makeinfo で HTML 化したら見事に文字化けした (文字コードは EUC-JP)。ちょこっといじったら、文字化けが直ったので今後のためにメモ。

Texinfo ファイル

プリアンブル部 (@setfilename の後) に以下のコードを追加。

@documentlanguage ja
@documentencoding UTF-8

ファイルを UTF-8 で保存。

make

makeinfo コマンドは次の様に打った。

$ makeinfo --html --no-split --enable-encoding \
    --number-sections --css-include=tmp.css

使った makeinfo のバージョン 4.13。

あとがき

Texinfo は TeX を元にした組版システム。元は info という Emacs 専用のハイパーリンク・ドキュメントと DVI (TeX の標準的な出力) を作るものだった。ウェブ・ページの興隆に伴って HTML ページの出力にも対応。ぼくは Texinfo こそマルチドキュメント・システムのはしりだと思っている。

ただ、LaTeX ほど「書き手」がいなかったせいかしらん? 多言語化は遅れ、Emacs による info 整形ツールは最新の Texinfo の仕様に追いつかなくなり、今後流行すると思われる EPUB への対応については噂も聞かない。Texinfo で PostScript フォントが簡便に使えないのも不満の一つ。とても良いシステムだと思うのだけど、このまま時代の流れの中で消えてしまうのかしらん? 応援したいなぁ。

2011-06-21

Firefox 4 の MathML 対応が素晴らしいことになってる

数式を HTML の中で使う試みとして MathML が挙げられる。MathML は XML アプリケーションの一つで、数学記号を含めて高度な数式表現を可能にする。数式エディターで描いた数式を画像化して貼り付けたりしなくて良くなるわけ。

期待度の高い MathML だけれども、ブラウザー側の対応が進んでいない。

その中にあって、Firefox 4 が一歩先じている。どれ位い数式が描けるのかを誇示するために、ウェブ・ページを作っているので覗いてみて欲しい。

Firefox 4.0.1 で上記ウェブページを開いた時のスクリーン・ショットをお見せする。

LaTeX には及ばないけれども、非常に高度な数式が描けているのが見て取れる。

一方、Google Chrome の開発版 (14.0.794.0 dev) でこのページを見るとどうなるか。

見事に壊滅的。MathML の「マ」の字もサポートしていない (;_;)。

他のウェブ・ブラウザー (IE, Safira, Opera) は試していないので、もし興味を持たれたら比べてみるのも一興かと。

あとがき

ぼくは TeX からプログラムの世界に入った様な人間なので、数式を美しく表現できるだけで嬉しくなってしまう。正直、MathML なんて数式表現がちょこっと上品になっただけだと侮っていた。今回、Firefox の完成度を見るに、認識を改めないといけないと痛感した。

Firefox に続いて、Webkit, Opera が一日も早く MathML 対応してくれることを望む。IE は... ごめん。期待していない。

2011-04-23

HTML5 の img 要素に alt 属性は必須ではない

最近、Blogger の投稿エディターで写真を挿入すると、img 要素に alt 属性が付かなくなっていた。HTML4 や XHTML1.1 では、img 要素に alt 属性は「必須」要素なので、どうしたことかしらん? と思っていた。

そこで読んだのがこの記事。

HTML5ではalt属性はオプション扱いで省略可能です。ちょっとここら辺はややこしいのですが、代替テキストの記述は推奨されますが、alt属性を省略することで意図的に代替テキストを利用しないことができるようになってます。

Re:犯してはいけないHTMLタグの過ち10個[to-R] より引用

なんと、HTML5 では alt 属性が「必須」から「推奨」に変更されている。また、代替テキストがないことを HTML4 や XHTML1.1 では img alt="" で明示的に表すけれども、それも HTML5 では alt 属性を書かないことで表す仕様らしい。

それで、最近の Blogger のテンプレートを見てみると HTML5 で書かれていることが分かった。

<!DOCTYPE html>

つまり、最近の Blogger は HTML5 対応になっていたんだね。知らなかった。

あとがき

ぼくの Blogger テンプレートは XHTML1.0 時代のものに手を入れて使っているけど、一度 HTML5 なテンプレートに直してあげようかな? 最近のテンプレート・エディターは随分と良さそうだし。

2010-11-09

html-fold.el を Github に公開した

html-fold.el はぼくの作った EmacsLisp で、HTML の要素を隠す機能を提供する。例えば

<a href="http://www.google.co.jp/ig">Google</a>

のような長い HTML ソースコードを次のやうに短くまとめる。

[a:Google]

カーソルを概当部分に持っていくと、要素の中身が再び「開かれる」仕組み。単に「不要な部分」を見えなくしているだけなので、見えない部分も検索にひっかかる。

このソースコードを Github で公開した。

Git 使いの人なら次のコマンドで html-fold.el をダウンロードできる。

$ git clone git://github.com/ataka/html-fold.git

使い方

詳しい使い方は、過去エントリーに書いてあるので、そちらを参照して欲しい。

また、この小さなプログラムはるびきち氏の「Emacs テクニックバイブル」でも紹介して頂いた。251 頁に解説があるので、お持ちの方はこちらの文章も参考にして欲しい。

Emacsテクニックバイブル ~作業効率をカイゼンする200の技~
るびきち

4774143278
技術評論社 2010-08-03
Amazonで詳しく見る
by G-Tools

もっとちゃんとした説明ページについては、少々お待ち頂きたい。近く用意したいとは思っている。

Github に移した理由

ぼくは html-fold.el を含むいくつかのプログラムを、infoseek のウェブページ・ホスティング・サービスで公開していた。ところが、このサービスが 2010-10-31 で終了してしまった。

実はそのウェブページは友達と一緒に作り始めていて、所有者 (owner) はぼくじゃなくて友達だった。おそらく友達の所に、サービス終了の案内が行っていたと思われる。といっても、10 近く前から始めたものだから、お互い気にもとめなくなっていた。サービスが終了して、初めてあたふたしている、というわけ。

ところで、ぼくは最近プログラムを Git でバージョン管理するやうになってきたし、Git には github という素晴らしいホスティング・サービスがある。ウェブ・ページを公開してそこでプログラムを公開するより、github の方がずっと楽。そういうわけで移行することに決めた。

ちなみに、html-fold.el は元々 GNU Arch でバージョン管理していた。GNU Arch から Git への移行方法については前エントリーに書いたので気になる方はどうぞ。

html-fold.el 以外にも、救けなきゃいけないプログラムがいくつかあるので、ちとここ数日大変になるなぁ。

GNU Arch のリポジトリーを Git のリポジトリーに変換する

GNU Arch で開発していたプロジェクトを、今流行の Git で開発することに決めた。git には archimport というコマンドがあって、GNU Arch のリポジトリーを Git へインポートすることができる。本エントリーに git archimport を使う手順を記す。

サンプルにするのは、2005 年以来開発が止まっている html-fold.el というツール。

準備

久しぶりに GNU Arch を使うので、昔の環境がない。まずは環境設定から。

自分の id を設定する。

$ tla my-id "Masayuki Ataka <[email protected]>"

確認

$ tla my-id
Masayuki Ataka <[email protected]>

アーカイブの設定

GNU Arch のリポジトリーも tar.gz で固めて保存してあった (見つけるのが大変だった orz)。

リポジトリーを ~/repository/{archive}/ に展開する。

$ cd ~/repository
$ tar xzf ~/archives.tar.gz
$ ls \{archives\}
2003-elisp/  2004-doc/  2005-elisp/

GNU Arch は年ごとにアーカイブを新しくしていく方針だった。ぼくが使いたいのは 2005 の最新版。

ところで、本来は make-archive コマンドでアーカイブを作る時に、レポジトリー (アーカイブ) の場所が設定されるのだけど、今回はそれをしていない。tar で解凍したこれらのディレクトリーを、tla コマンドに「何処にレポジトリーがあるか?」を教えないといけない。そのためには register-archive コマンドを使う。

$ tla register-archive ~/repository/\{archives\}/2005-elisp
Registering archive: [email protected]

一応デフォールト・アーカイブを [email protected] に設定しておく。

$ tla my-default-archive [email protected]

確認。

$ tla my-default-archive
[email protected]

ちなみに archives コマンドを使うと今 tla に登録されてるアーカイブ一覧が見られる。

$ tla archives
[email protected]
    /home/masayuki/repository/{archives}/2005-elisp

一つのディレクトリーしか register-archive してないから、一つのアーカイブしか表示されない。想定通り。

html-fold プロジェクトの確認

html-fold プロジェクトを調べる。

GNU Arch では、プロジェクトは次の書式で表されることを思い出しておく。

category--branch--version

まず、[email protected] アーカイブに何のプロジェクトが入っているか確認。プロジェクト名は category として登録されている。

$ tla categories
blgrep
clmemo
html-fold
rd-hindex2

html-fold プロジェクトが見つかった (良かった〜)。ブランチを確認する。

$ tla branches html-fold
html-fold--mainline
html-fold--snapshots

mainline ブランチと snapshopts ブランチの 2 つを作っていたんだね。使いたいのはスナップショットじゃなくて、開発のメイン・ブランチであろう mainline。

一応、バージョンも確認。

$ tla versions html-fold--mainline                                                 [18:41:09]
html-fold--mainline--0.1

フム。バージョンは一つで 0.1 か。よし、よし。

git archimport

git archimport の使い方は次の通り。archive と branch が分かったら、git-archimport が使える。

$ git archimport <archive/branch>[:<git-branch>]

一つ試してみる。

$ cd ~/project
$ mkdir html-fold && html-fold
$ git archimport [email protected]/html-fold--mainline
...

確認。

$ ls -a
./  ../  .git/  html-fold.el
$ git branch
* [email protected],html-fold--mainline--0.1
  master

ふむ。GNU Arch のリポジトリーを Git に変換できたらしい。だけど、デフォールト・ブランチが master じゃなくて「[email protected],html-fold--mainline--0.1」なのは不便だねぇ。

ブランチ名をちゃんと指定して、再チャレンジ。

$ rm -rf .git html-fold.el
$ git archimport [email protected]/html-fold--mainline:master

確認。

$ git branch
* [email protected],html-fold--mainline--0.1
  master

ありゃ駄目だ。もしかして、git archimport の言う「ブランチ」は「カテゴリ--ブランチ--バージョン」な書式じゃないといけないのかな? バージョンは確か 0.1 だったはず。再トライ。

$ rm -rf .git html-fold.el
$ git archimport [email protected]/html-fold--mainline--0.1:master

確認

$ git branch
* master
$ git log
commit df7be8c81cc2310366190d971dc2713c736b5d55
Author: Masayuki Ataka <[email protected]>
Date:   Fri Jul 15 10:43:00 2005 +0000

    Update version to alpha3 2005-07-15

    git-archimport-id: [email protected]/html-fold--mainline--0.1--patch-6

commit 757478802c5828727100137752d7af160fa44366
Author: Masayuki Ataka <[email protected]>
Date:   Thu Jul 14 18:47:26 2005 +0000

    Fix problem that html-fold skip in does not work with emacs-w3m

    Add 'forward-char and 'backward-char into the comparision list to this-command
    in html-fold-post-command.

    html-fold see the function binded to [left] and [right] but functions binded to
    [left] and [right] in Emacs-w3m are w3m-view-this-url and
    w3m-view-previous-page, respectively.

    git-archimport-id: [email protected]/html-fold--mainline--0.1--patch-5

(続く)

お、見事に git のリポジトリーになった。良かった。良かった。

参考ページ

GNU Arch の使い方を随分忘れていた。下記ページを参考にした。

2010-04-17

Google Chrome Extension TechTalk に参加した

Google Chrome の拡張機能 (Extension) に関する TechTalk が先週開かれた。まずは概要:

アジェンダ及び資料へのリンクは上記案内ページにまとまっている。あまりに完璧なので、このブログで書くことがない程に。

と、リンク先参照だけで終わっては身も蓋もないので、コピペになるけどアジェンダを写しておく。

括弧で囲んだのは、当日の発表資料等へのリンク。

見ての通り内容は盛り沢山。全部を説明する気力もないので骨子だけ。

Google Chrome と HTML5

最近、HTML5 の動きが活発。HTML5 の先には、デスクトップ・アプリと同等のものがウェブ・ブラウザー上で動く世界が待っている。という及川氏の話で TechTalk はスタートした。Google Chrome も HTML5 対応をどんどんと進めていく。

田村氏の話は、特に Opera でサポートが進んでいる HTML5 Forms の Google Chrome における対応状況について。HTML5 Forms については HTML5 TechTalk の過去レビューを読んでもらうとして、Chrome が Opera に追いつこうと頑張っている状況が分かった (とは言っても、まだ Opera には及ばないけれど)。

白石氏の話は、HTML5 で策定中の Web Notifications の解説。何故、Web Notifications を取り上げるかと言うと、この仕様を提案しているのが Google 自身であり、唯一実装しているブラウザーが Google Chrome だから。Web Notifications は Google Calendar などで使われ始めている。

Google Chrome 拡張について

「Google Chrome 拡張入門」と銘打たれた太田氏の発表が、今回の TechTalk のメイン・ディッシュだった。時間にして 60 分。ただただ圧倒されるばかり。メモは追いつかない。嬉しいことに、説明ページを HTML5 で書いていて、内容のほとんどはそのページに書いてある。

このページ、右上に「目次」と薄く書いてある。カーソルを持っていくと、Chrome 拡張入門の「目次」がポップアップ (?) する。また右下には「設定」ボタンがあり、クリックすると font-size の変更及び背景色の変更ウィンドウ (?) が現れる。フォント・サイズ変更がスライド・バーなのも格好良い。Chrome の拡張とは関係ないけれど、HTML5 の未来を感じる素晴らしいサンプルになっている。

なお、2010-04-17 発売の Software Design 5 月号で「Chrome ブラウザ拡張実践入門」を書き下ろしているとのこと。上記ウェブページと併せて持っておけば、一通りの入門になるんじゃないかと思う (ので、ぼくは SD 5 月号を予約した)。

Software Design ( ソフトウェアデザイン ) 2010年 05月号 [雑誌]

あと、「Google Calendar for Todayの紹介と拡張内ページ間通信の実例」では Chrome 拡張に使われる background.html と popup.html でライフタイムが前者が長く後者が非常に短いとの話があった。そこで、取得したデータを何度もポップアップ表示するやうな拡張は、background.html でデータを取得・保存し、popup.html に渡すとポップアップの度にデータを取りに行かないので良い、という Tips を教わった。

他のライトニング・トークも面白いもの、興味深いものが多かった。基本 Google Chrome 拡張の実例だったけれど、内容を咀嚼しきれていないので割合。

あとがき

とにかく楽しかった。一年以上会っていない友人にも会えて、テンションが高くなった。かういふ技術講演には、できるだけ足を運びたい。そして何か成果を出したい。気持ちばかり焦って、何も出来ていないのが痛いところ。。。

2010-01-17

HTML5 Tech Talk #3 -- HTML5 Forms 編

HTML5 の Tech Talk #3 に一昨日、参加した。セッションは 3 つ。

  1. HTML5 Forms (羽田野氏)
  2. Canvas と Transform (羽田野氏)
  3. HTML5 の記し方 (白石氏)

1 つ目は HTML5 Forms の話。本エントリーで紹介する。2 つ目は HTML5 で絵を描く「Canvas」要素の中で、特に扱いが難しい (?) Transform の実演とソースコード紹介。これは実演メインだったのでエントリーにはしない。3 つ目は HTML5 の簡単な文法。スライドがポンポン進んだのでメモしきれなかった。資料がネットに上がったら、エントリーを書くつもり。

HTML5 Forms

HTML5 Forms は昔 Web Forms 2.0 とも呼ばれていたもので、Tech Talk #2 においても Opera のダニエル・デイビス氏が紹介していた。

本セッションは、Tech Talk #2 での Forms 編と重複・補完する形となっている。なので、Tech Talk #2 - Forms 編と併せて読んで頂ければ理解も深まると思う。

input type

HTML5 Forms の input 要素には、type 属性に数多くの追加が行なわれた。使い方は次の通り。

<input type="...">

... の新属性値を説明する。

date

日付入力用のカレンダーが現れる。

データ形式は「2009-01-13」。

time

日時入力用のボックスが現れる。

データ形式のデフォールトは「09:00」。オプションを追加することで、「秒 (09:00:01)」から「ミリ秒 (09:00:01.004)」までのデータ形式を取ることができる。

datetime

date と time が一緒になったもの。カレンダーから日付を選んで、日時入力ボックスで日付けを入力する。

注意すべきは、タイムゾーンが UTC 固定なこと。というわけで、おそらく国内で利用する人はほとんどいないと思われる。

datetime-local

タイムゾーン指定がない datetime (タイムゾーンを指定できるわけではない。紛らわしいね)。

month

date と同じやうにカレンダーが現れる。

データ形式は「2010-01」。

week

date と同じやうにカレンダーが現れる。

データ形式は「2010-W51」。

週の基準は ISO8601 準拠。つまり、第一週は 1/4 を含む週とし、週の始まりは月曜日 (日本は普通、日曜日始まり)。ISO8601 については過去エントリーも参照されたし。

number

値を変更するボタンが現れる。デフォールトのステップ値は 1。

step 属性でステップ値を変更可能。小数も指定可:

<input type="number" step="0.1">
range

スライダーが現れる。

デフォールトの範囲は 0 〜 100、ステップ幅は 1 で、デフォールト値は 50。required 属性は無効。その代わり、値を未設定には出来ない。

例:

<input type="range" min="-100" max="100" step="0.1">

この range タイプは Opera の他 Safari, Google Chrome4 がサポートしている。

email

メール・アドレス用の validation が実行される。

ウェブ・ブラウザーはメアド入力用であることをユーザーに知らせる実装が可能になる。例えば Opera だと「メール」のアイコンが入力欄に表示される。

url

URL 用の validation が実行される。FTP も OK。

ウェブ・ブラウザーは URL 入力用であることをユーザーに知らせる実装が可能になる。

tel

電話の書式は各国色々なので、validation 機能は提供されない。

ウェブ・ブラウザーは電話番号入力用であることをユーザーに知らせる実装が可能になる。例えば iPhone 版 Safari だと、入力用のソフトウェア・キーボードとしてキーパッドが現れる (普通は日本語や英語のキーボードが現れる)。

search

ウェブ・ブラウザーは URL 入力用であることをユーザーに知らせる実装が可能になる。例えば、Mac のブラウザーは入力ボックスの角を丸くすることで、検索用ボックスであることをマック・ユーザーに知らせることが出来る (Mac の検索ボックスは普通、角が丸くなっている)

color

どのウェブ・ブラウザーも実装していないので、例を示せない未知のタイプ。おそらくカラー・ピッカーが現れるのではないか? との予想。

データ形式は「#FFFFFF」、デフォールト値は「#000000」(Black)。値を未設定に出来ないため、required 属性は使えない。

type 以外の属性

HTML5 Forms では色々な属性が追加された。

required

この属性が設定されていると、送信ボタンを押した時、値が未設定だと送信エラーになる。

placeholder

ヒント用の文字を表示する。

<input type="search" placeholder="例: HTML5">
pattern

入力値の validation check を正規表現で行なえる。

例えば郵便番号 (例: 229-0031) を入力するようにするなら、こんな感じ。

<input type="text" pattern="\d{3}-\d{4}" placeholder="郵便番号: 229-0031">

正規表現は部分一致ではなく完全一致となる。入力した正規表現は ^$ に挟まれているのと同じになる。

正規表現例:

  • \d{1,3} ... 数字一桁から三桁まで
  • [\u3041-\u3093] ... ひらがな
  • [\u30A1-\u30F6] ... カタカナ (全角)
form

form 要素の外で (本来 form 要素の中でしか使えない) 要素を書くことができるやうになる。

利用法はこんな感じ。form 属性の値には、form 要素の id 値を設定する。

<form action="order.cgi" id="order-form">
  ごにょごにょ
</form>

長〜いテキスト

<input type="name" value="申し込む" form="order-form">
formaction

form 要素の action 属性を上書きする。

例:

<form action="post.cgi">
  <button type="submit" formaction="preview.cgi">Preview</button>
  <button type="submit">Post</button>
</form>
list

datalist 要素と一緒に使って、Google Suggest のような効果を提供する。

例:

<input type="search" list="suggest">
<datalist id="suggest">
  <option value="HTML5" label="214件"/>
  <option value="canvas" label="59件"/>
  <option value="video" label="21件"/>
</datalist>

select 要素を併用すると、HTML5 Forms 非対応ブラウザーに対しても同じような (ただし機能は制限されている) UI を提供できる。

例:

<input type="search" list="suggest">
<datalist id="suggest">
  <select>
    <option value="HTML5" label="214件">HTML5</option>
    <option value="canvas" label="59件">canvas</option>
    <option value="video" label="21件">video</option>
  </select>
</datalist>

注意事項

ブラウザー上で validation はあるけれど
サーバー側の validation は欠かせないよ。

あとがき

ほとんどの HTML5 Forms 要素は Opera 最新版で実装されている。他のブラウザーは、それを追いかけている感じ。全てのブラウザーが HTML5 Forms をサポートすると、随分とフォーム作成が楽になる。かなり楽しみ。

2009-12-03

Google、Gears から HTML5 へ

昨日、ぼくの twitter の TL はこの話題で持ち切りだった。情報元は Engadget Japanese。

Gears は Google が出してるブラウザー・プラグイン。IE, Firefox, Opera, Safari とほとんどのウェブ・ブラウザーをサポートし、Google Chrome では組み込み済みでリリースされていた。

Gears を一言で言えば、オフライン・アプリケーション開発におけるノウハウのつまったプラグイン。詳しいことは、clmemo@aka: GDD2008「Google Gears から Gears へ」 を参照してもらうとして、大まかな機能を書くとかうなる。

  • Local Server (ウェブ・ページをローカルに保存する)
  • Web Database (そのまんま。DB)
  • Worker Pool (JavaScript のスレッド化)
  • Geolocation (現在位置の取得)

そして、これらの機能は HTML5 の API 仕様に含まれている。

どちらかというと、Gears の仕様を HTML5 に盛り込んで行った、という方が正しいのかな?

HTML5 が Gears と同じ機能をサポートすることの意味合いは非常に大きい。まず、仕様が Google 一社に独占されないこと。オフィシャルな仕様になると、開発者は突然の仕様変更などに悩まされなくなるので、開発における心理的なハードルが低くなる。そして、Google も各ブラウザー毎にプラグインを開発しないで済むこと。また、ユーザーに対して「プラグインのインストール」という手間をかけさせないで済むということ。

Gears は他の Gears サポート・サイトのために、すぐには消滅しない。けれど、これからは HTML5 へと道を譲る。それは悲しくも嬉しい。

2009-11-30

HTML5 Tech Talk #2 -- Forms 編

告知通り、HTML5 の Tech Talk #2 に参加した。セッションは 2 つ。

  • HTML5 で非常に強力になった Forms の説明
  • HTML5 を使ったデモ・サイトの紹介とソースコード解説

今回は、どちらのセッションもサンプルを見せて、その場で解説を加える形式を取っていた。

この方式。メモを取るには、非常に都合が悪い。話の展開が速くて、メモがついていかない。おまけに、サンプルが面白いものだから、目を奪われ圧倒されてしまう。特に後半のセッションはメモを取るどころじゃなかった (良い意味で)。

というわけで、今回は Forms の話のみをメモ形式で書くに留める。

HTML5 Forms

講演者は、Opera の中の人ダニエル・デイビス氏。自作のウェブ・ページを使って、PowerPoint っぽくプレゼンなさっていた。本エントリーのメモ書きは、このウェブ・ページの補助的解説と思って構わない。

このページには HTML5 Forms のデモが見られるが、Opera 10 でしか動作しない。もし Opera を持っているなら、Opera で見ることをお勧めする。HTML5 Forms については、流石の Safari も Chrome も対応がまだまだらしい。

  • HTML5 Forms はもともと Web Forms 2.0 と呼ばれていた。
  • Web Forms 2.0 の前は XForms Basic と呼ばれていた。
  • XForms Basic の仕様策定は、もともと Opera が進めていたものだった (だから Opera の実装が一番進んでる)
  • HTML5 Forms では input 要素に type 属性が 13 個追加された。

HTML5 Forms Touch and Try Page

Web Forms 2 で healthy living! にスクリーン・ショットのやうなページ (?) がある。ここで「HTML」の部分に HTML のソースコードを入力すると、下の大きなウィンドウに結果がリアル・タイムに表示される。スクリーン・ショットは、13 のうち type="date" を指定したところ。単に input 要素を使っているだけなのに、カレンダーが表示される!! これは是非 Opera を使って遊んで欲しい。

簡単に各項目の説明を書いておく。

<input type="number">
マウスでも数字を入力できるように、右端にピッカーが付く。max 属性・min 属性を追加可能。
<input type="range">
入力欄がシークバーになる。デフォールトでは 0 〜 100。max 属性・min 属性を追加可能。
<input type="url">
URL 入力用であることを表わすアイコンが入力欄左端に現れる
<input type="email">
メール入力用であることを表わすアイコンが入力欄左端に現れる
<input type="date">
日付選択用のカレンダーが現れる
<input type="month">
date と同じ。戻り値が月単位になる
<input type="week">
date と同じ。戻り値が週単位になる
<input type="time">
時間入力用の画面 (「時:分」という形式)
<input type="datetime">
date と time を組み合わせたもの
<input type="datetime-local">
datetime と同じ。時間がローカル時間に対応する。
<input type="search">
未実装
<input type="color">
未実装
<input type="tel">
未実装

あとは落ち穂払い的に箇条書き。

  • HTML5 Forms 対応でないブラウザーでは、普通の空ボックスが表示されるだけなので、どのような入力値をサーバー側が要求しているのかという例 (ex. カレンダーなら「例: 2009-12-15」のようなもの) を書いておくと親切
  • 「autofocus」属性を付けると、ページを開いた時にその input 要素に自動でフォーカスが当たる。
  • 「required」属性を付けると、未入力でのフォーム送信時にエラーが出る。
  • CSS で :invalid { color: red; } と書くと、valid でない入力値が赤色で表示される。ただし、HTML5 Forms 非対応なブラウザーも考遇して、サーバー側での validation は必ずすること。
  • カレンダーが小さい時は、CSS のフォントでサイズを大きくできる。

以上。他にも色んな話が出たけれどメモしきれなかった。

でも、ここに出てきた話題だけでも、Form 作成が随分楽しいことになっていると感じられる。Opera はこれから Forms の拡充よりも (Forms 以外の) HTML5 の仕様を満たす方向に力を入れていく。そして、他のブラウザー (Safari や Firefox) が Forms への対応を深めたら次のアクションを起こしたいと考えているそうな。

ref

今回の Tech Talk で司会進行をなさっていた白石氏のエントリー。各種リンクが揃っている。

2009-11-09

HTML5 Tech Talk #2 に参加する

HTML5 に関する Tech Talk の第二回が開かれる。概要は以下の通り。

  • 日時: 2009-11-27 (Fri) 19:00-21:00
  • 場所: Google 東京オフィス
  • 会費: 無料

講演は二つ。

  1. 「Web Forms 2 で healthy living!」ダニエル・デイビス
  2. 「HTML5 Showcase」羽田野 太巳

一つ目は Web Forms 2 と呼ばれる新しいフォームの規格について。講演者のデイビス氏は Opera 社の中の人。

二つ目は HTML5 を使った事例紹介。羽田野氏は、前回のイベントで Canvas の話をしてくれた人。話が上手なので、期待大。

残念なことに、Tech Talk #2 参加申込は今日しめ切られた。

ぼくは、MacBook を持っていってなるべく中の内容をエントリーにしたいと思っているが、事例紹介は無理かもしれない。その時はご勘弁を。

ref

2009-10-29

Android 2.0 のウェブ・ブラウザーは HTML5 に大幅対応

Android 1.6 (donut) が昨日、ぼくの HT-03A に届いた。その日 (2009-10-29)、Google は Android 2.0 (eclair) のアナウンスを行なった。2.0 用の SDK が公開され、開発者は新機能に対応したアプリを作れるやうになった。

さて、Android 2.0 の Highlight ページを見てみませう。

魅力的な機能が並ぶけど、ぼくが一番ショックを受けたのは「Browser」の項目。特に HTML5 のサポートが強化されたという文言。サポートするのは次の 4 つ:

  1. Database API
  2. Application Cache
  3. Geolocation API
  4. video 要素のフルスクリーン・サポート

特に上の 3 つが素晴らしい。Database API はローカルで DB を作れる API。Application Cache はローカルに HTML・画像・JavaScript 等をダウンロードできる機能 (この 2 つを組み合わせると、オフライン・アプリが作れる!)。Geolocation API は、自分の居場所を Web の API からサービスに教える仕組み。ローカル検索等で便利に使える。一番の好アプリは Google Latitude でせう。

次バージョン・アップのパワーアップぶりを見ると、せっかく届いた 1.5 が霞む。ちょっと涙目。

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 年以上先になると思うけど ^^;

2009-10-02

HTML5 Tech Talk -- Canvas 編

告知通り HTML5 の Tech Talk に参加した。セッションは二つ。

  • オフライン・ウェブ・アプリケーションを作るための API の説明
  • HTML5 で絵を描くための Canvas の説明

本エントリーは後者の Canvas セッションのメモ書き。

Canvas VS. SVG

ウェブ・ブラウザーで絵を描くといったら、SVG が有名。Canvas は何が違うのか? 相違点を列挙して下さった。

Canvas
  • JavaScript を使って描画
  • 描いた図を個別に認識できない (JavaScript で後からいじれない: 位置をずらすとかね)
  • 描画が高速
  • ピクセル操作が可能
SVG
  • XML 形式のマークアップで図を表現
  • 描いた図を個別に認識できる (JavaScript で後からいじれる)
  • 要素が増えると重くなる
  • ピクセル操作は不可能

結果、Canvas はマンデルグローブ集合のような複雑な図を描くのが得意で、ウィジェットのやうにユーザーが使う UI 部品を作るのが苦手となる。Canvas と SVG は適材適所で使うと良いらしい。

実践編

この後、Canvas で絵を描くための命令を個々に紹介して下さった。その例を見て、絵を描いてみるよ。

「Canvas Test」ってリンクをクリックすると、四角が表示される。

Canvas Test
<script type="text/javascript">
  function draw() {
    var canvas = document.getElementById('canvas-test');
    if (canvas.getContext) {
      var ctx = canvas.getContext('2d');

      // Path
      ctx.moveTo(50,50);
      ctx.lineTo(50,75);
      ctx.lineTo(75,75);
      ctx.lineTo(75,50);
      ctx.closePath();
      ctx.stroke();
    }
  }
</script>
<canvas id="canvas-test" width="100" height="100"></canvas>
<a href="javascript:draw();">Canvas Test</a>

Canvas 要素で描画領域を作って、その要素から getContext が返すインスタンスに対して「JavaScript で描画を行なう」というのが基本。

で、色々と関数を教えてもらった。

beginPath, lineTo, closePath, arc, arcto, bezierCurveTo, strokeStyle, fillStyle, stroke, fill

何か見たことのある命令ばっかり。

PostScript!!!

違うのは、PostScript の四則演算・for 文・if 文を JavaScript で書けること。こりゃ便利。昔の PostScript のコードも移植できるかもしれない。Canvas 楽しいねぇ。誰か Canvas の BlueBook を出さないかしらん。

HTML5 Tech Talk -- API 編

告知通り HTML5 の Tech Talk に参加した。セッションは二つ。

  • オフライン・ウェブ・アプリケーションを作るための API の説明
  • HTML5 で絵を描くための Canvas の説明

本エントリーは前者の API セッションのメモ書き。

HTML5 でオフライン・ウェブ・アプリケーションが作れる

HTML5 では、オフライン・ウェブ・アプリケーションを作る仕組みが整い始めている。その大部分は、Google が Gears で行なっていたもの。ところが、Gears を使ったウェブ・サービスは少ない。数えるほどしかない。

その理由に、「Gears がブラウザーのプラグイン形式」であったことを挙げていた。

HTML という規格自身が、オフライン・ウェブ・アプリケーションの機能を持つメリットとして次の 3 つを挙げていた。

  1. モバイル端末・ネット端末への普及 (特にこれらの機器にはオフライン・アプリのニーズがある)
  2. プラグインという足枷からの解放 (何といってもウェブ・ブラウザー自身がサポートするのだから)
  3. 標準化による開発者の増加 (今はどうしてもノウハウと人材が不足している)

講演はオフライン・ウェブ・アプリケーションを作る 4 つの API の説明と、自作ライブラリーの紹介だった。ただ、自作ライブラリーは今年中の公開予定といふことなので、今回のエントリーでは割合。4 つの API 名は以下の通り。

  1. Application Cache
  2. Web DB
  3. Web Storage
  4. Web Workers

以下、列挙式にメモを書いていく。

Application Cache

  • manifest ファイルに、ローカルに保存するファイル (HTML, JavaScript, CSS, Images, etc.) を書いておく
  • ウェブ・サーバー側で、manifest 用の MIMETYPE を設定する
  • <html manifest="foo.manifest"> のように指定する
  • manifest file がサーバー側とローカル側で一致しないと、キャッシュのやり直しが始まる
  • コメント (バージョン番号) を変えたりするのがコツ? (でも Firefox は最新版でも未対応?)
  • キャッシュ・ファイルを編集してもアップデートはされない (あくまで、manifest ファイルのアップデートがトリガー)
  • Application Cache を ON にしていると、開発しづらい。開発時は使わないか、manifest を自動生成させると良い。
  • JavaScript である程度、Notification の制御も可能

Web DB

  • オフライン・ウェブ・アプリケーションを作る時の核になる
  • JavaScript の中から SQL を叩ける
  • 他ドメインの DB にはアクセスできない
  • ドメインごとに複数の DB、複数の Table を作れる
  • 非同期型と同期型がある
  • ウェブ・サーバーなしでも動く

Web Storage

  • 他ドメインのストレージにはアクセスできない
  • Local Storage (永続的) と Session Storage (ウィンドウごと) の二種類がある。後者は JavaScript のグローバル変数のやうなもの?
  • Webkit は file:// だと使えない
localStorage.setItem("key", "value")
var val = localStorage.getItem("key")

Web Workers

  • バックグラウンドで動作するスレッドのようなもの
  • でも本当のスレッドではない
  • 変数を共有できない
  • window, document にもアクセスできない
  • DOM にもアクセスできない
  • デバッガーで止められない
  • すぐ複雑になる
  • Worker 間の通信には Message を使う (DOM へのアクセスは UI Thread にやってもらうよう Message を送る)

課題

  • ノウハウの蓄積が少なすぎる
  • 差分アップロード/ダウンロードをどうやって実現しよう
  • フェイル・セーフ対策は?
  • 同じデータを他の人が変更してたら Conflict しちゃうよ
  • LocalDB のないブラウザーがある (Fx)

あとがき

ここら辺のメモを少し深く勉強して、明後日の (というかもう明日か) の Hachathon に臨む。ドキドキ。

2009-09-14

HTML5 3Days Tech Talk & Hackathon に参加する

HTML5-Developers-JP がイベント「HTML5 3Days」を主催する。

HTML5-Developers-JP というのは、HTML5 をテーマとする Google の準公式コミュニティー。HTML5 は、その名前の通り HTML4 の次の仕様〜〜となるのだけど、随分と趣きが違うらしい。HTML4 までは、HTML はあくまで「マークアップ言語」であり、一つの仕様書に書かれるものだった。

HTML5 は、モジュール化され、ウェブ・アプリケーションを開発するための機能が盛り込まれているといふ。例えば、ウェブ・ストレージ。ウェブ・データベース。ウェブ・ワーカーズ (スレッドのやうなもの)。それから絵を描く Canvas。マルチメディアを貼り付けるための video 要素と audio 要素。

正直に言えば、ぼくに HTML5 を語ることは出来ない。それほど仕様が大きい。ぼくは今、森のやうな仕様の中で迷子になっている。

だから、この Tech Talk は、とても大きなチャンスだと考える。HTML5 ってどんなだろ? 輪郭だけでも掴めてこれたらいいな。

イベント概要

  • 2009-10-01 (木) 19:00-21:00 Tech Talk
  • 2009-10-02 (金) 19:00-21:00 Tech Talk (前日と同じ内容)
  • 2009-10-03 (土) 10:00-18:00 Hachathon (前日と同じ内容)
  • 場所: Google 東京オフィス
  • 会費: 無料
  • 申し込み方法: HTML5 告知ページより申込 (Google Groups への加入が必須)

2007-02-16

HMV アフィリエイト用 XHTML 化 Elisp

HMV のアフィリエイト (in Linkshare) で、少し手間がかかるけど、個別リンクを作ることが出来ることは過去記事に書いた。

ここで、HMV 側が用意する HTML コードは、XHTML valid じゃない。つまり、XHTML なブログに HMV のコードを貼り付けると、場合によってはエラーになる。そこで、正常な XHTML に変換する Emacs Lisp コードを書いた。

コードは下記の通り。

;;
;; Linkshare
;;
(autoload 'sgml-quote "sgml-mode")
(defun linkshare-hmv-reformat-link ()
  (interactive)
  (save-excursion
    (while (re-search-forward "\\(?:href\\|src\\)=\"" nil t)
      (let ((beg (point))
     (end (search-forward "\"")))
 (sgml-quote beg end))))
  (save-excursion
    (let ((case-fold-search nil))
      (while (search-forward "IMG" nil t)
 (replace-match "img" t)
 (search-forward " >")
 (replace-match " alt=\"\"/>"))))
  (save-excursion
    (while (re-search-forward "=\\([01]\\) " nil t)
      (replace-match "=\"\\1\" "))))

HMV からコピーした HTML コードのあるバッファーで M-x linkshare-hmv-reformat-link とすると、

  • href 属性・src 属性値に含まれるの & を &amp; に置換
  • <IMG ...><img ... alt=""/> に置換
  • 属性値をダブル・クォーテーションで囲む

といったことを実行する。