<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-4530875953866513005</id><updated>2012-02-21T01:18:21.587+09:00</updated><category term='apache'/><category term='winscp'/><category term='mySQL'/><category term='サクラエディタ'/><category term='javascript'/><category term='Blogger'/><category term='php'/><category term='coreserver'/><category term='ブックマークレット'/><category term='ExtJs'/><category term='Pukiwiki'/><category term='ハングル'/><title type='text'>Mashiki's javascript note</title><subtitle type='html'>javascript と ExtJS 、 サクラエディター を 中心に試したことをまとめています。</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://mashiki-memo.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4530875953866513005/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://mashiki-memo.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>mashiki</name><uri>http://www.blogger.com/profile/05693139459731866783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>43</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-4530875953866513005.post-336865736312178234</id><published>2012-01-22T23:08:00.000+09:00</published><updated>2012-01-22T23:11:55.407+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>array_merge()と演算子「+」</title><content type='html'>phpで配列を結合する関数がある。「array_merge()」だ。&lt;br /&gt;&lt;br /&gt;よく使うパターンはこんなシーン。&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: php"&gt;$a = array_merge($a, $b);&lt;/pre&gt;&lt;br /&gt;$aと$bが連想配列なら同じことを&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: php"&gt;$a = $b+$a;&lt;/pre&gt;&lt;br /&gt;と書ける。&lt;br /&gt;足し算だが「+」演算子の左右の変数を入れ替えると結果が変わってしまう。&lt;br /&gt;共通のキーがあった場合に、上書きをしないからだ。&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: php"&gt;&lt;br /&gt;$a=array(&lt;br /&gt; 'x'=&amp;gt;'aX',&lt;br /&gt; 'y'=&amp;gt;'aY',&lt;br /&gt;);&lt;br /&gt;$b=array(&lt;br /&gt; 'y'=&amp;gt;'bY',&lt;br /&gt; 'z'=&amp;gt;'bZ',&lt;br /&gt;);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;だった場合、&lt;pre class="brush: php"&gt;$a+$b&lt;/pre&gt;は&lt;pre class="brush: php"&gt;&lt;br /&gt;array(&lt;br /&gt; 'x'=&amp;gt;'aX',&lt;br /&gt; 'y'=&amp;gt;'aY',&lt;br /&gt; 'z'=&amp;gt;'bZ',&lt;br /&gt;);&lt;br /&gt;&lt;/pre&gt;となり、&lt;pre class="brush: php"&gt;$b+$a&lt;/pre&gt;は&lt;br /&gt;&lt;pre class="brush: php"&gt;&lt;br /&gt;array(&lt;br /&gt; 'x'=&amp;gt;'aX',&lt;br /&gt; 'y'=&amp;gt;'bY',&lt;br /&gt; 'z'=&amp;gt;'bZ',&lt;br /&gt;);&lt;br /&gt;&lt;/pre&gt;になる&lt;br /&gt;&lt;br /&gt;$aと$bに共通のキーがないか、共通だった場合、$aを採用するならば&lt;br /&gt;&lt;pre class="brush: php"&gt;$a += $b;&lt;/pre&gt;と書くことができる。&lt;br /&gt;&lt;br /&gt;連想配列の変数名は長めになることが多いのでこの書き方ができればありがたいが、&lt;br /&gt;ここまで短く書けるシーンにあまりであったことがないのが残念。&lt;br /&gt;でもこうして整理してみると、パラメータ$aをデフォルト値$bで補完する場合に使えそうだなあ。&lt;br /&gt;&lt;br /&gt;$a, $bが通常の整数をキーに持つ普通の配列だった場合、「+」演算子の挙動はarray_mergeの挙動と著しく違うので知らないととまどう。&lt;br /&gt;&lt;pre class="brush: php"&gt;array('a1','a2','a3')+array('b1','b2','b3')&lt;/pre&gt;の結果はどうなるか？&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: php"&gt;array('a1','a2','a3')&lt;/pre&gt;となる&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4530875953866513005-336865736312178234?l=mashiki-memo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mashiki-memo.blogspot.com/feeds/336865736312178234/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://mashiki-memo.blogspot.com/2012/01/arraymerge.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4530875953866513005/posts/default/336865736312178234'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4530875953866513005/posts/default/336865736312178234'/><link rel='alternate' type='text/html' href='http://mashiki-memo.blogspot.com/2012/01/arraymerge.html' title='array_merge()と演算子「+」'/><author><name>mashiki</name><uri>http://www.blogger.com/profile/05693139459731866783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4530875953866513005.post-7731239193039647134</id><published>2012-01-20T22:00:00.000+09:00</published><updated>2012-02-21T01:18:21.597+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='ExtJs'/><title type='text'>行をドラッグして並び替えるGridサンプル</title><content type='html'>&lt;a href="https://sites.google.com/site/wikiwiki4prj/project-updates/extjs4_row_drag_n_drop_grid"&gt;行をドラッグして並べ替えるGridサンプル&lt;/a&gt;に移転しました&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4530875953866513005-7731239193039647134?l=mashiki-memo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mashiki-memo.blogspot.com/feeds/7731239193039647134/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://mashiki-memo.blogspot.com/2012/01/blog-post.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4530875953866513005/posts/default/7731239193039647134'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4530875953866513005/posts/default/7731239193039647134'/><link rel='alternate' type='text/html' href='http://mashiki-memo.blogspot.com/2012/01/blog-post.html' title='行をドラッグして並び替えるGridサンプル'/><author><name>mashiki</name><uri>http://www.blogger.com/profile/05693139459731866783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4530875953866513005.post-1892410412790704094</id><published>2012-01-18T10:29:00.001+09:00</published><updated>2012-01-18T10:54:57.931+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='Blogger'/><title type='text'>Bloggerでコード整形を行う</title><content type='html'>&lt;br /&gt;Bloggerに張っているソースコードやコマンドの実行結果等が見にくいので、下記のブログを参考にデザインを変更してみた &lt;br /&gt;&lt;br /&gt;&lt;a href="http://ohaco.blogspot.com/2011/04/syntaxhighlighter-blogger.html?spref=bl"&gt;seiji's 十八番: [SyntaxHighlighter] bloggerに整形済みテキスト、プログラムソースコードなど...&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;SyntaxHighlitghterは以前、ExtJSでSVNビューワを作ったときに使ったことがあったので久しぶりに使ってみた。&lt;br /&gt; &lt;br /&gt;やることは、上記のリンクに書いてある通り。ただ、使用するブラシの種類が違っていたのでそこだけ、選択を変えた。&lt;br /&gt;現在使っていないプログラミング言語はばっさり捨て、テキスト用に「Plain」をdiff用に「Diff」を追加した。「Xml」は外しかけたが、htmlを整形するために必要だった。&lt;br /&gt;&lt;br /&gt;差し込んだコードは以下の通り。&lt;br /&gt;&lt;br /&gt;&lt;pre class='brush: html'&gt;&lt;br /&gt;&amp;lt;!--ここからsyntaxHighlighterをコピペした--&amp;gt;&lt;br /&gt;&amp;lt;link type='text/css' rel='stylesheet' href='http://alexgorbatchev.com/pub/sh/current/styles/shCore.css' /&gt;&lt;br /&gt;&amp;lt;link type='text/css' rel='stylesheet' href='http://alexgorbatchev.com/pub/sh/current/styles/shThemeDefault.css' /&gt;&lt;br /&gt;&amp;lt;script type='text/javascript' src='http://alexgorbatchev.com/pub/sh/current/scripts/shCore.js' /&gt;&lt;br /&gt;&amp;lt;script type='text/javascript' src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushCss.js' /&gt;&lt;br /&gt;&amp;lt;script type='text/javascript' src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushDiff.js' /&gt;&lt;br /&gt;&amp;lt;script type='text/javascript' src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushJScript.js' /&gt;&lt;br /&gt;&amp;lt;script type='text/javascript' src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPhp.js' /&gt;&lt;br /&gt;&amp;lt;script type='text/javascript' src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPlain.js' /&gt;&lt;br /&gt;&amp;lt;script type='text/javascript' src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushSql.js' /&gt;&lt;br /&gt;&amp;lt;script type='text/javascript' src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushXml.js' /&gt;&lt;br /&gt;&amp;lt;script language='javascript'&gt;&lt;br /&gt;SyntaxHighlighter.config.bloggerMode = true;&lt;br /&gt;SyntaxHighlighter.all();&lt;br /&gt;&amp;lt;/script&gt;&lt;br /&gt;&lt;/pre&gt;ついでにメインのカラムの横幅を少し広げて表示できる桁数を増やした&lt;pre class='brush: diff'&gt;&lt;br /&gt;-      &amp;lt;b:variable default='960px' name='content.width' type='length' value='860px'/&gt;&lt;br /&gt;----&lt;br /&gt;+      &amp;lt;b:variable default='960px' name='content.width' type='length' value='1000px'/&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4530875953866513005-1892410412790704094?l=mashiki-memo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mashiki-memo.blogspot.com/feeds/1892410412790704094/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://mashiki-memo.blogspot.com/2012/01/blogger.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4530875953866513005/posts/default/1892410412790704094'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4530875953866513005/posts/default/1892410412790704094'/><link rel='alternate' type='text/html' href='http://mashiki-memo.blogspot.com/2012/01/blogger.html' title='Bloggerでコード整形を行う'/><author><name>mashiki</name><uri>http://www.blogger.com/profile/05693139459731866783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4530875953866513005.post-7646493147166475608</id><published>2012-01-17T10:30:00.001+09:00</published><updated>2012-02-18T20:35:46.088+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='ExtJs'/><title type='text'>JSBuilderでの圧縮作業の手順の改善</title><content type='html'>&lt;b&gt;&lt;a href="https://sites.google.com/site/wikiwiki4prj/extjs4/jsbuilder_sencha_cmd/compress_utf8"&gt;UTF-8のソースを圧縮&lt;/a&gt;にコンテンツを移行しました。&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4530875953866513005-7646493147166475608?l=mashiki-memo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mashiki-memo.blogspot.com/feeds/7646493147166475608/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://mashiki-memo.blogspot.com/2012/01/jsbuilder.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4530875953866513005/posts/default/7646493147166475608'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4530875953866513005/posts/default/7646493147166475608'/><link rel='alternate' type='text/html' href='http://mashiki-memo.blogspot.com/2012/01/jsbuilder.html' title='JSBuilderでの圧縮作業の手順の改善'/><author><name>mashiki</name><uri>http://www.blogger.com/profile/05693139459731866783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4530875953866513005.post-1069652206438526349</id><published>2012-01-14T04:31:00.000+09:00</published><updated>2012-02-18T20:34:01.399+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='ExtJs'/><title type='text'>JSBuilderでアプリケーションを配置する</title><content type='html'>&lt;b&gt;&lt;a href="https://sites.google.com/site/wikiwiki4prj/extjs4/jsbuilder_sencha_cmd/sencha_jsbuilder"&gt;JSBuilderで配布ファイルを最適化&lt;/a&gt;にコンテンツを移行しました&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4530875953866513005-1069652206438526349?l=mashiki-memo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mashiki-memo.blogspot.com/feeds/1069652206438526349/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://mashiki-memo.blogspot.com/2012/01/4.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4530875953866513005/posts/default/1069652206438526349'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4530875953866513005/posts/default/1069652206438526349'/><link rel='alternate' type='text/html' href='http://mashiki-memo.blogspot.com/2012/01/4.html' title='JSBuilderでアプリケーションを配置する'/><author><name>mashiki</name><uri>http://www.blogger.com/profile/05693139459731866783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4530875953866513005.post-8823134124357895199</id><published>2011-11-08T22:07:00.000+09:00</published><updated>2011-11-09T09:30:00.483+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>strftimeで日付がずれる</title><content type='html'>もしかしたら有名な話なのかもしれませんが、今日 スケジュールの画面のデモをphpで作っていたときにちょっとはまった。クライアントにイメージをつかんでもらうための簡単なカレンダをphpでループさせて作っていたのだが、デモプログムの一部で、&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;&lt;pre&gt;date_default_timezone_set('Asia/Tokyo');&lt;br /&gt;$base = strtotime('2011-11-01');&lt;br /&gt;$days = explode(',', '日,月,火,水,木,金,土');&lt;br /&gt;for ($i=0; $i&amp;lt;30; ++$i) {&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;$date = $base+24*60*60*$i;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;$mmdd = strftime('%m/%d', $date);&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;$day = $days[strftime('%w', $date)];&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;echo "&amp;lt;br&amp;gt;$i: $mmdd($day)";&lt;br /&gt;}&lt;/pre&gt;&lt;/blockquote&gt;&lt;blockquote class="tr_bq"&gt;&lt;br /&gt;&lt;/blockquote&gt;みたいに、今月の頭からループで２４時間づつ増やしながら日付を表示させて、カレンダの日付の部分を表示させようとしたら、想定外の出力に！&lt;br /&gt;&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;0: 11/01(火)&lt;br /&gt;1: 11/02(水)&lt;br /&gt;2: 11/03(木)&lt;br /&gt;3: 11/04(金)&lt;br /&gt;4: 11/05(土)&lt;br /&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;5: 11/06(日)&lt;br /&gt;6: 11/06(日)&lt;/span&gt;&lt;br /&gt;7: 11/07(月)&lt;br /&gt;8: 11/08(火)&lt;br /&gt;9: 11/09(水)&lt;br /&gt;10: 11/10(木)&lt;br /&gt;：&amp;nbsp;&lt;/blockquote&gt;打ち合わせ開始まで３０分しかなかったので、軽いパニックに。&lt;br /&gt;誤差が蓄積されたような動きであったので、とりあえず、その場は&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;$base = strtotime('2011-11-01 14:00');&lt;/blockquote&gt;変更したところ、想定の出力で動き、残りの部分のコーディングに戻ることができた。&lt;br /&gt;&lt;br /&gt;気になったので、今、「夏時間」をwikipediaで調べたら、&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: sans-serif; font-size: 15px; line-height: 22px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;&lt;span class="Apple-style-span" style="font-family: sans-serif; font-size: 15px; line-height: 22px;"&gt;アメリカ合衆国（一部除く。前述のとおり2007年から次のように変更され実行されている）、&lt;a href="http://ja.wikipedia.org/wiki/%E3%82%AB%E3%83%8A%E3%83%80" style="background-attachment: initial; background-clip: initial; background-color: initial; background-image: none; background-origin: initial; background-position: initial initial; background-repeat: initial initial; color: #0645ad; text-decoration: none;" title="カナダ"&gt;カナダ&lt;/a&gt;（一部除く）、&lt;a href="http://ja.wikipedia.org/wiki/%E3%83%A1%E3%82%AD%E3%82%B7%E3%82%B3" style="background-attachment: initial; background-clip: initial; background-color: initial; background-image: none; background-origin: initial; background-position: initial initial; background-repeat: initial initial; color: #0645ad; text-decoration: none;" title="メキシコ"&gt;メキシコ&lt;/a&gt;（一部除く） - 3月第2日曜日午前2時〜11月第1日曜日午前2時（現地時間基準。開始日には2時が3時になり（1時59分59秒の次が3時00分00秒）、終了日は2時が再度1時（1時59分59秒の次が1時00分00秒）になるため、開始日は1日が23時間、終了日は逆に25時間になる）&lt;/span&gt;&lt;/blockquote&gt;&lt;span class="Apple-style-span" style="font-family: sans-serif; font-size: 15px; line-height: 22px;"&gt;と、アメリカでは11/6は２５時間あることがわかった。ちなみに前のスクリプトに時間まで表示してみると、&lt;/span&gt;&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;&lt;span class="Apple-style-span" style="font-family: sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: 15px; line-height: 22px;"&gt;0: 11/01  00:00(火)&lt;br /&gt;1: 11/02  00:00(水)&lt;br /&gt;2: 11/03  00:00(木)&lt;br /&gt;3: 11/04  00:00(金)&lt;br /&gt;4: 11/05  00:00(土)&lt;br /&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;5: 11/06  00:00(日)&lt;br /&gt;6: 11/06  23:00(日)&lt;/span&gt;&lt;br /&gt;7: 11/07  23:00(月)&lt;br /&gt;8: 11/08  23:00(火)&lt;br /&gt;9: 11/09  23:00(水)&lt;br /&gt;10: 11/10  23:00(木)&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;span class="Apple-style-span" style="font-family: sans-serif; font-size: 15px; line-height: 22px;"&gt;11/6の00:00に24時間を足すと、11/6の23:00になっている。&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: sans-serif; font-size: 15px; line-height: 22px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: sans-serif; font-size: 15px; line-height: 22px;"&gt;ああ、すっきり！！、でもさ、夏時間のない'Asia/Tokyo'のロケールのはずじゃん。&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: sans-serif; font-size: 15px; line-height: 22px;"&gt;まいっか。いや、よくないな、よくない。&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: 15px; line-height: 22px;"&gt;ここで、デジャヴが、どっかの環境で&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: sans-serif; font-size: 15px; line-height: 22px;"&gt;'Asia/Tokyo'が効かなくて、GMT-9って指定したことあったっけ。&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: sans-serif; font-size: 15px; line-height: 22px;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;date_default_timezone_set('Etc/GMT-9');&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;$base = strtotime('2011-11-01');&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;$days = explode(',', '日,月,火,水,木,金,土');&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;for ($i=0; $i&amp;lt;30; ++$i) {&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;$date = $base+24*60*60*$i;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;$mmdd = strftime('%m/%d &amp;nbsp;%H:%M', $date);&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;$day = $days[strftime('%w', $date)];&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;echo "&amp;lt;br&amp;gt;$i: $mmdd($day)";&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;}&lt;/pre&gt;&lt;/blockquote&gt;&amp;nbsp;結果は&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;0: 11/01  00:00(火)&lt;br /&gt;1: 11/02  00:00(水)&lt;br /&gt;2: 11/03  00:00(木)&lt;br /&gt;3: 11/04  00:00(金)&lt;br /&gt;4: 11/05  00:00(土)&lt;br /&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;5: 11/06  00:00(日)&lt;br /&gt;6: 11/07  00:00(月)&lt;/span&gt;&lt;br /&gt;7: 11/08  00:00(火)&lt;br /&gt;8: 11/09  00:00(水)&lt;br /&gt;9: 11/10  00:00(木)&lt;br /&gt;10: 11/11  00:00(金)&lt;/blockquote&gt;と、よしっ！きれいだ。ってなんでAsia/Tokyoと結果が違うの？&lt;br /&gt;あ、そっか。日本って震災の節電の関係で夏時間設定されたんだっけ。&lt;br /&gt;なんか違う。眠いからに違いない。寝よう。&lt;br /&gt;&lt;br /&gt;よし、リフレッシュ。&lt;br /&gt;&lt;br /&gt;ソースを少し変えてタイムゾーンを変えて流せるようにした。&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;echo "&amp;lt;pre&amp;gt;\n";&lt;br /&gt;printDays('UCT');&lt;br /&gt;printDays('Etc/GMT-9');&lt;br /&gt;printDays('Asia/Tokyo');&lt;br /&gt;printDays('America/New_York');&amp;nbsp;&lt;/pre&gt;&lt;/blockquote&gt;&lt;blockquote&gt;function printDays($timezone) {&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;echo "timezone:$timezone\n";&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;date_default_timezone_set($timezone);&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;$base = strtotime('2011-11-01');&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;for ($i=4; $i&amp;lt;8; ++$i) {&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;$date = $base+24*60*60*$i;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;$mmdd = strftime('%m/%d &amp;nbsp;%H:%M', $date);&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;echo "$i: $mmdd\n";&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;}&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;echo "base:$base\n";&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;echo "now:".strftime('%Y-%m-%d %H:%M:%S')."\n\n";&lt;br /&gt;}&lt;/blockquote&gt;結果はこんな感じ&lt;br /&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: Times, 'Times New Roman', serif;"&gt;timezone:UCT&lt;br /&gt;4: 11/05  00:00&lt;br /&gt;5: 11/06  00:00&lt;br /&gt;6: 11/07  00:00&lt;br /&gt;7: 11/08  00:00&lt;br /&gt;base:1320105600&lt;br /&gt;now:2011-11-08 23:50:43&amp;nbsp;&lt;/span&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: Times, 'Times New Roman', serif;"&gt;timezone:Etc/GMT-9&lt;br /&gt;4: 11/05  00:00&lt;br /&gt;5: 11/06  00:00&lt;br /&gt;6: 11/07  00:00&lt;br /&gt;7: 11/08  00:00&lt;br /&gt;base:1320073200&lt;br /&gt;now:2011-11-09 08:50:43&amp;nbsp;&lt;/span&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="color: red; font-family: Times, 'Times New Roman', serif;"&gt;timezone:Asia/Tokyo&lt;br /&gt;4: 11/05  00:00&lt;br /&gt;5: 11/06  00:00&lt;br /&gt;6: 11/06  23:00&lt;br /&gt;7: 11/07  23:00&lt;br /&gt;base:1320120000&lt;br /&gt;now:2011-11-08 18:50:43&amp;nbsp;&lt;/span&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;&lt;span class="Apple-style-span" style="font-family: Times, 'Times New Roman', serif;"&gt;timezone:America/New_York&lt;br /&gt;4: 11/05  00:00&lt;br /&gt;5: 11/06  00:00&lt;br /&gt;6: 11/06  23:00&lt;br /&gt;7: 11/07  23:00&lt;br /&gt;base:1320120000&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: Times, 'Times New Roman', serif;"&gt;now:2011-11-08 18:50:43&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;そうそう、 日本は震災でアメリカに..そんなわけない。&lt;br /&gt;使っているサーバのタイムゾーンのデータが壊れているようだ。&lt;br /&gt;&lt;br /&gt;ローカルのphp5.3.3の環境では、&lt;span class="Apple-style-span" style="font-family: Times, 'Times New Roman', serif;"&gt;timezone:Asia/Tokyoの表示は&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Times, 'Times New Roman', serif;"&gt;timezone:Etc/GMT-9と同じ結果になっている。&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Times, 'Times New Roman', serif;"&gt;不思議な動作をするサーバはphp5.3.1。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Times, 'Times New Roman', serif;"&gt;業務で使うサーバもほぼ同じ環境だから確認しておかなくては。&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4530875953866513005-8823134124357895199?l=mashiki-memo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mashiki-memo.blogspot.com/feeds/8823134124357895199/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://mashiki-memo.blogspot.com/2011/11/strftime.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4530875953866513005/posts/default/8823134124357895199'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4530875953866513005/posts/default/8823134124357895199'/><link rel='alternate' type='text/html' href='http://mashiki-memo.blogspot.com/2011/11/strftime.html' title='strftimeで日付がずれる'/><author><name>mashiki</name><uri>http://www.blogger.com/profile/05693139459731866783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4530875953866513005.post-1216024368536693619</id><published>2011-09-08T13:19:00.002+09:00</published><updated>2012-01-18T01:45:41.166+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mySQL'/><title type='text'>mySQLの CASE WHENはSQLが長くなる</title><content type='html'>mySQLの CASE WHENはSQLが長くなるので、短く書く方法を探ってみる。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://dev.mysql.com/doc/refman/5.1/ja/comparison-operators.html"&gt;mySQLのマニュアル比較演算子の&lt;/a&gt;冒頭に&lt;br /&gt;「比較演算は、1（TRUE）、0（FALSE）、または NULL の値を返します。」&lt;br /&gt;と書かれている。&lt;br /&gt;&lt;br /&gt;なので、下記４つのSQLはすべて同じ結果になる。（はずw。ただし列Cは数値型だとする）&lt;br /&gt;&lt;br /&gt;&lt;pre class='brush: sql'&gt;&lt;br /&gt;SELECT CASE WHEN `a`=`b` THEN `c` ELSE 0 END FROM `abc`;&lt;br /&gt;SELECT CASE `a` WHEN `b` THEN `c` ELSE 0 END FROM `abc`;&lt;br /&gt;SELECT IF(`a`=`b`,`c`,0) FROM `abc`;&lt;br /&gt;SELECT (`a`=`b`)*`c` FROM `abc`&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;お好みはどれでしょう。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4530875953866513005-1216024368536693619?l=mashiki-memo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mashiki-memo.blogspot.com/feeds/1216024368536693619/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://mashiki-memo.blogspot.com/2011/09/mysql-case-whensql.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4530875953866513005/posts/default/1216024368536693619'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4530875953866513005/posts/default/1216024368536693619'/><link rel='alternate' type='text/html' href='http://mashiki-memo.blogspot.com/2011/09/mysql-case-whensql.html' title='mySQLの CASE WHENはSQLが長くなる'/><author><name>mashiki</name><uri>http://www.blogger.com/profile/05693139459731866783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4530875953866513005.post-6657111453499128394</id><published>2011-05-11T09:18:00.002+09:00</published><updated>2011-05-11T09:34:52.151+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mySQL'/><title type='text'>mySQLについてのメモ</title><content type='html'>mySQLのINTのMAX値&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Unsigned で、4G(40億)&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;mySQLでの正規表現の利用&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;正規表現は　where `name` REGEXP 'a*' のように使用する&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;mySQLのvarchar、textの比較について&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;インデックスを張る場合２５５文字以内のキー長を指定する必要がある&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;他のDBのテーブルを参照するには&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;同じmySQLサーバ内なら、select * from db_name.table_nameでOK&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;他のDBのテーブルとJOINできるか&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;下記のように普通にJOINできる&lt;br /&gt;&lt;quote&gt;SELECT * FROM `mytable` join `dbname`.`atable` A on `mytable`.`id`=A.`id`&lt;/quote&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;synonymはあるか&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;無い。&lt;br /&gt;viewを使えば同様のことができる。オーバーヘッドが問題にならないか注意して使う&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;日付時刻を丸める関数(TRUNCなど)はあるか&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;日付丸め専用の関数はない。&lt;/li&gt;&lt;li&gt;文字列にフォーマットして丸める例はよく見かける&lt;/li&gt;&lt;li&gt;計算式で丸める例&lt;br /&gt;　時間：DATE(`date`)+INTERVAL HOUR(`date`) HOUR&lt;br /&gt;　日：　DATE(`date`)&lt;br /&gt;　週：　DATE(`date`)-INTERVAL DAYOFWEEK(`date`)-1 DAY&lt;br /&gt;　月：　DATE(`date`)-INTERVAL DAYOFMONTH(`date`)-1 DAY&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;PostgreSqlにある「関数(式)インデックス」はあるか&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;無い。→インデックスを使いたい式を展開した列が必要&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;タイムゾーンはDBもしくは接続毎に再指定可能か&lt;br /&gt;&lt;ul&gt;&lt;li&gt;可能&lt;br /&gt;mysql&amp;gt; set time_zone = '-7:00';&lt;br /&gt;Query OK, 0 rows affected (0.00 sec)&lt;br /&gt;&lt;br /&gt;mysql&amp;gt; select now();&lt;br /&gt;+---------------------+&lt;br /&gt;| now()               |&lt;br /&gt;+---------------------+&lt;br /&gt;| 2011-05-05 22:21:37 |&lt;br /&gt;+---------------------+&lt;br /&gt;1 row in set (0.00 sec)&lt;br /&gt;&lt;br /&gt;mysql&amp;gt; set time_zone='+9:00' ;&lt;br /&gt;Query OK, 0 rows affected (0.00 sec)&lt;br /&gt;&lt;br /&gt;mysql&amp;gt; select now();&lt;br /&gt;+---------------------+&lt;br /&gt;| now()               |&lt;br /&gt;+---------------------+&lt;br /&gt;| 2011-05-06 14:22:01 |&lt;br /&gt;+---------------------+&lt;br /&gt;1 row in set (0.00 sec)&lt;br /&gt;&lt;/li&gt;&lt;ul&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4530875953866513005-6657111453499128394?l=mashiki-memo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mashiki-memo.blogspot.com/feeds/6657111453499128394/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://mashiki-memo.blogspot.com/2011/05/mysql.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4530875953866513005/posts/default/6657111453499128394'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4530875953866513005/posts/default/6657111453499128394'/><link rel='alternate' type='text/html' href='http://mashiki-memo.blogspot.com/2011/05/mysql.html' title='mySQLについてのメモ'/><author><name>mashiki</name><uri>http://www.blogger.com/profile/05693139459731866783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4530875953866513005.post-2479148686357145312</id><published>2011-04-21T13:46:00.006+09:00</published><updated>2011-04-27T14:39:15.297+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='ブックマークレット'/><category scheme='http://www.blogger.com/atom/ns#' term='ExtJs'/><title type='text'>Ext4.0ドキュメントの印刷</title><content type='html'>Ext4.0のドキュメントページを印刷するブックマークレットを作ってみた。&lt;br /&gt;&lt;br /&gt;今回は隠したインラインフレームに作成して、そのまま印刷するのではなく、&lt;br /&gt;印刷可能なWindowを表示するようにした。ExtWikiでも試行錯誤したが、プレビュー代わりになりこれが一番便利だった。&lt;br /&gt;また、ガイドがマニュアルに統合されたので、こちらも印刷しやすいようにしてみる。&lt;br /&gt;&lt;br /&gt;例によってブックマークレット表示サイトで表示してみる。&lt;br /&gt;&lt;a href="http://bookmarklet.dip.jp/?Ext4.0%E3%80%80%E3%83%89%E3%82%AD%E3%83%A5%E3%83%A1%E3%83%B3%E3%83%88%E5%8D%B0%E5%88%B7(%E3%82%AF%E3%83%A9%E3%82%B9)/var%20t%3DExt.get('top-block')%3Bvar%20s%3DExt.get('doc-overview').select('.lft'%2Ctrue).first()%3Bif(!s%20%7C%7C%20!t)%20void%20Ext.Msg.alert('DocPrint'%2C'Soory%2Ccannot%20get%20title%20%26%20overview.')%3Belse%7Bw%3Dwindow.open('about%3Ablank')%2Cd%3Dw.document%3Bd.write('%3Cbase%20href%3D%22'%2Bdocument.baseURI%2B'%22%3E%5Cn')%3Bd.write('%3Ctitle%3E'%2Bdocument.title%2B'%3C%2Ftitle%3E%5Cn')%3BExt.get(document).select('link').each(function(e)%7Bif(e.dom.rel.toLowerCase()%3D%3D%3D'stylesheet')%7Bd.write('%3Clink%20type%3D%22text%2Fcss%22%20rel%3D%22stylesheet%22%20href%3D%22'%2Be.dom.href%2B'%22%3E%3C%2Flink%3E%5Cn')%3B%7D%7D)%3Bd.write('%3Cstyle%3Ehtml%2Cbody%7Boverflow%3Avisible%7D%23container%7Bposition%3Astatic%3Bmargin%3A0%7D%3C%2Fstyle%3E%3Cdiv%20id%3Dcontainer%3E'%2Bt.dom.innerHTML%2B'%3Cdiv%20id%3Ddoc-overview%20class%3Ddoc-tab%3E'%2Bs.dom.innerHTML%2B'%3C%2Fdiv%3E%3C%2Fdiv%3E')%3Bd.close()%3B%7D%0A"&gt;ExtJS4.0　ドキュメント印刷(クラス)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bookmarklet.dip.jp/?ExtJS4.0%E3%80%80%E3%83%89%E3%82%AD%E3%83%A5%E3%83%A1%E3%83%B3%E3%83%88%E5%8D%B0%E5%88%B7(%E3%82%AC%E3%82%A4%E3%83%89)/var%20s%3DExt.get('docContent')%3Bif(!s)%20void%20Ext.Msg.alert('DocPrint'%2C'Sorry%2Ccannot%20get%20guid.')%3Belse%7Bw%3Dwindow.open('about%3Ablank')%2Cd%3Dw.document%3Bd.write('%3Cbase%20href%3D%22'%2Bdocument.baseURI%2B'%22%3E%5Cn')%3BExt.get(document).select('link').each(function(e)%7Bif(e.dom.rel.toLowerCase()%3D%3D%3D'stylesheet')%7Bd.write('%3Clink%20type%3D%22text%2Fcss%22%20rel%3D%22stylesheet%22%20href%3D%22'%2Be.dom.href%2B'%22%3E%3C%2Flink%3E%5Cn')%3B%7D%7D)%3Bd.write('%3Cstyle%3Ehtml%2Cbody%7Boverflow%3Avisible%7D%23container%7Bposition%3Astatic%3Bmargin%3A0%7D%3C%2Fstyle%3E%3Cdiv%20id%3Dcontainer%3E'%2Bs.dom.innerHTML%2B'%3C%2Fdiv%3E')%3Bd.close()%3B%7D%0A"&gt;ExtJS4.0　ドキュメント印刷(ガイド)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;もともとβ３の時に作成したが、ファイナルで少し変わっていたので上記に修正した。β３の時のものはこんな感じ&lt;br /&gt;&lt;a href="http://bookmarklet.dip.jp/?Ext4.0%20%E3%83%89%E3%82%AD%E3%83%A5%E3%83%A1%E3%83%B3%E3%83%88%E5%8D%B0%E5%88%B7/var%20t%3DExt.get('docContent').select('.top-block'%2Ctrue).first()%3Bvar%20s%3DExt.get('doc-overview').select('.lft'%2Ctrue).first()%3Bif(!s%7C%7C!t)void%20Ext.Msg.alert('DocPrint'%2C'Cannot%20print%20this%20page.%20Perhaps%20it%20is%20not%20a%20Ext4.0%20document%20page.')%3Belse%7Bw%3Dwindow.open('about%3Ablank')%2Cd%3Dw.document%3Bd.write('%3Cbase%20href%3D%22'%2Bdocument.baseURI%2B'%22%3E%5Cn')%3Bd.write('%3Ctitle%3E'%2Bdocument.title%2B'%3C%2Ftitle%3E%5Cn')%3BExt.get(document).select('link').each(function(e)%7Bif(e.dom.rel.toLowerCase()%3D%3D%3D'stylesheet')%7Bd.write('%3Clink%20type%3D%22text%2Fcss%22%20rel%3D%22stylesheet%22%20href%3D%22'%2Be.dom.href%2B'%22%3E%3C%2Flink%3E%5Cn')%3B%7D%7D)%3Bd.write('%3Cstyle%3Ehtml%2Cbody%7Boverflow%3Avisible%7D%23container%7Bposition%3Astatic%7D%3C%2Fstyle%3E%3Cdiv%20id%3Dcontainer%3E'%2Bt.dom.innerHTML%2B'%3Cdiv%20id%3Ddoc-overview%20class%3Ddoc-tab%3E'%2Bs.dom.innerHTML%2B'%3C%2Fdiv%3E%3C%2Fdiv%3E')%3Bd.close()%3B%7D"&gt;ExtJS4.0β３ ドキュメント印刷(クラス)&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4530875953866513005-2479148686357145312?l=mashiki-memo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mashiki-memo.blogspot.com/feeds/2479148686357145312/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://mashiki-memo.blogspot.com/2011/04/ext40.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4530875953866513005/posts/default/2479148686357145312'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4530875953866513005/posts/default/2479148686357145312'/><link rel='alternate' type='text/html' href='http://mashiki-memo.blogspot.com/2011/04/ext40.html' title='Ext4.0ドキュメントの印刷'/><author><name>mashiki</name><uri>http://www.blogger.com/profile/05693139459731866783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4530875953866513005.post-564899534721997662</id><published>2011-04-03T11:58:00.000+09:00</published><updated>2011-04-03T11:58:01.926+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>画像をphpスクリプトのみで表示する</title><content type='html'>画像のパスが問題で、プラグインやライブラリの設計や導入方法が若干複雑になる事がある。&lt;br /&gt;こんなとき、画像をプログラムに取り込んでしまうと設定自体不要になるケースがある。&lt;br /&gt;&lt;br /&gt;そのやり方をメモしておく&lt;br /&gt;１．画像をbase64文字列に変換する&lt;br /&gt;２．変換したbase64文字列をプログラムに組み込む&lt;br /&gt;&lt;br /&gt;１．画像をbase64文字列に変換する&lt;br /&gt;　次のようなプログラムでbase64文字列を作成できる&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;img_encode.php&lt;br /&gt;&lt;br /&gt;&amp;lt;?php&lt;br /&gt;  //クォート内はターゲットのファイル名&lt;br /&gt;  die(base64_encode(file_get_contents(''));&lt;br /&gt;?&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;出力は下記のようになる&lt;br /&gt;&lt;br /&gt;R0lGODlhFQATAPcAAP//////zP//mf//Zv//M///AP/M///MzP/Mmf/MZv/MM//MAP+Z//+ZzP+Zmf+ZZv+ZM/+ZAP9m//9mzP9mmf9mZv9mM/9mAP8z//8zzP8zmf8zZv8zM/8zAP8A//8AzP8Amf8AZv8AM/8AAMz//8z/zMz/mcz/Zsz/M8z/AMzM/8zMzMzMmczMZszMM8zMAMyZ/8yZzMyZmcyZZsyZM8yZAMxm/8xmzMxmmcxmZsxmM8xmAMwz/8wzzMwzmcwzZswzM8wzAMwA/8wAzMwAmcwAZswAM8wAAJn//5n/zJn/mZn/Zpn/M5n/AJnM/5nMzJnMmZnMZpnMM5nMAJmZ/5mZzJmZmZmZZpmZM5mZAJlm/5lmzJlmmZlmZplmM5lmAJkz/5kzzJkzmZkzZpkzM5kzAJkA/5kAzJkAmZkAZpkAM5kAAGb//2b/zGb/mWb/Zmb/M2b/AGbM/2bMzGbMmWbMZmbMM2bMAGaZ/2aZzGaZmWaZZmaZM2aZAGZm/2ZmzGZmmWZmZmZmM2ZmAGYz/2YzzGYzmWYzZmYzM2YzAGYA/2YAzGYAmWYAZmYAM2YAADP//zP/zDP/mTP/ZjP/MzP/ADPM/zPMzDPMmTPMZjPMMzPMADOZ/zOZzDOZmTOZZjOZMzOZADNm/zNmzDNmmTNmZjNmMzNmADMz/zMzzDMzmTMzZjMzMzMzADMA/zMAzDMAmTMAZjMAMzMAAAD//wD/zAD/mQD/ZgD/MwD/AADM/wDMzADMmQDMZgDMMwDMAACZ/wCZzACZmQCZZgCZMwCZAABm/wBmzABmmQBmZgBmMwBmAAAz/wAzzAAzmQAzZgAzMwAzAAAA/wAAzAAAmQAAZgAAMwAAAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAAAAFQATAAAI/AABCBzoaRQpUVSopFJFaqDDgXny/JH4B8+fUchUOVP1UOCTKhEjjho5KlUqUqpGPXxSoKVLPwmp+CnZ0s/AJypaOqmCJ48fPFScUBGVqmVKgSRaqkhosSWVmi4LOAPgpkTUlkBdPjXqzBmpEjkLqFAhNKFSoUZNkkoqduxSJy7H1iw5ShXbq1iVbi0gCtVXt0up4PnpByYVskz9kKIz1okKnnkGQy0Aw2wBZCUcF6iy2elMP1H9iPLzCcAczqEnF8ha4I/AEnudthTlEtVWTwOtuqS9enZUPQ9LzASacKloVKj8dOoIoESehGXLCgbOXCAmT53++JmYB/fDgAA7&lt;br /&gt;&lt;br /&gt;２．変換した文字列をプログラムに組み込む&lt;br /&gt;　上記で変換して得られたbase64文字列をbase64_decodeしヘッダーとともに出力する。&lt;br /&gt;　１行が長い場合、適当な長さに切り、使うときに文字列として連結する。&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;img_decode.php&lt;br /&gt;&lt;br /&gt;&amp;lt;?php&lt;br /&gt;  $img = 'R0lGODlhFQATAPcAAP//////zP//mf//Zv//M///AP/M///MzP/Mmf/MZv/M'&lt;br /&gt; .'M//MAP+Z//+ZzP+Zmf+ZZv+ZM/+ZAP9m//9mzP9mmf9mZv9mM/9mAP8z//8z'&lt;br /&gt; .'zP8zmf8zZv8zM/8zAP8A//8AzP8Amf8AZv8AM/8AAMz//8z/zMz/mcz/Zsz/'&lt;br /&gt; .'M8z/AMzM/8zMzMzMmczMZszMM8zMAMyZ/8yZzMyZmcyZZsyZM8yZAMxm/8xm'&lt;br /&gt; .'zMxmmcxmZsxmM8xmAMwz/8wzzMwzmcwzZswzM8wzAMwA/8wAzMwAmcwAZswA'&lt;br /&gt; .'M8wAAJn//5n/zJn/mZn/Zpn/M5n/AJnM/5nMzJnMmZnMZpnMM5nMAJmZ/5mZ'&lt;br /&gt; .'zJmZmZmZZpmZM5mZAJlm/5lmzJlmmZlmZplmM5lmAJkz/5kzzJkzmZkzZpkz'&lt;br /&gt; .'M5kzAJkA/5kAzJkAmZkAZpkAM5kAAGb//2b/zGb/mWb/Zmb/M2b/AGbM/2bM'&lt;br /&gt; .'zGbMmWbMZmbMM2bMAGaZ/2aZzGaZmWaZZmaZM2aZAGZm/2ZmzGZmmWZmZmZm'&lt;br /&gt; .'M2ZmAGYz/2YzzGYzmWYzZmYzM2YzAGYA/2YAzGYAmWYAZmYAM2YAADP//zP/'&lt;br /&gt; .'zDP/mTP/ZjP/MzP/ADPM/zPMzDPMmTPMZjPMMzPMADOZ/zOZzDOZmTOZZjOZ'&lt;br /&gt; .'MzOZADNm/zNmzDNmmTNmZjNmMzNmADMz/zMzzDMzmTMzZjMzMzMzADMA/zMA'&lt;br /&gt; .'zDMAmTMAZjMAMzMAAAD//wD/zAD/mQD/ZgD/MwD/AADM/wDMzADMmQDMZgDM'&lt;br /&gt; .'MwDMAACZ/wCZzACZmQCZZgCZMwCZAABm/wBmzABmmQBmZgBmMwBmAAAz/wAz'&lt;br /&gt; .'zAAzmQAzZgAzMwAzAAAA/wAAzAAAmQAAZgAAMwAAAP///wAAAAAAAAAAAAAA'&lt;br /&gt; .'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'&lt;br /&gt; .'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'&lt;br /&gt; .'AAAAAAAAAAAAAAAAAAAAACwAAAAAFQATAAAI/AABCBzoaRQpUVSopFJFaqDD'&lt;br /&gt; .'gXny/JH4B8+fUchUOVP1UOCTKhEjjho5KlUqUqpGPXxSoKVLPwmp+CnZ0s/A'&lt;br /&gt; .'JypaOqmCJ48fPFScUBGVqmVKgSRaqkhosSWVmi4LOAPgpkTUlkBdPjXqzBmp'&lt;br /&gt; .'EjkLqFAhNKFSoUZNkkoqduxSJy7H1iw5ShXbq1iVbi0gCtVXt0up4PnpByYV'&lt;br /&gt; .'skz9kKIz1okKnnkGQy0Aw2wBZCUcF6iy2elMP1H9iPLzCcAczqEnF8ha4I/A'&lt;br /&gt; .'EnudthTlEtVWTwOtuqS9enZUPQ9LzASacKloVKj8dOoIoESehGXLCgbOXCAm'&lt;br /&gt; .'T53++JmYB/fDgAA7';&lt;br /&gt;  header('Content-Type: image/gif');&lt;br /&gt;  die(base64_decode($img));&lt;br /&gt;?&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4530875953866513005-564899534721997662?l=mashiki-memo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mashiki-memo.blogspot.com/feeds/564899534721997662/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://mashiki-memo.blogspot.com/2011/04/php.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4530875953866513005/posts/default/564899534721997662'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4530875953866513005/posts/default/564899534721997662'/><link rel='alternate' type='text/html' href='http://mashiki-memo.blogspot.com/2011/04/php.html' title='画像をphpスクリプトのみで表示する'/><author><name>mashiki</name><uri>http://www.blogger.com/profile/05693139459731866783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4530875953866513005.post-7667766719025209236</id><published>2011-04-03T10:53:00.000+09:00</published><updated>2011-11-08T22:22:11.421+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='apache'/><title type='text'>apacheのmod_rewriteで%2fを変換</title><content type='html'>apacheは通常エンコードされたパス分離文字(%2F)が存在するURLを404(Not found)エラーで拒否する。&lt;br /&gt;&lt;br /&gt;通常は問題にならないのだろうが、パラメータをURLに埋め込み、mod_rewiteでphpに処理させるとき、urlやpathのようなパラメータを扱おうとすると顕在化する。&lt;br /&gt;&lt;br /&gt;apacheにこれを許可させるには、apacheのhttpd.confに「AllowEncodedSlashes On」を記述すればよい。&lt;br /&gt;&lt;br /&gt;VartualHostディレクティブ内でもOKだが、.htaccessに記述するとエラーとなる。&lt;br /&gt;&lt;br /&gt;参考&lt;br /&gt;&lt;a href="http://httpd.apache.org/docs/2.0/ja/mod/core.html#AllowEncodedSlashes"&gt;apacheマニュアル&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.blogger.com/post-create.g?blogID=4530875953866513005"&gt;PHPプロ！mod_rewriteでの%2F問題&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4530875953866513005-7667766719025209236?l=mashiki-memo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mashiki-memo.blogspot.com/feeds/7667766719025209236/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://mashiki-memo.blogspot.com/2011/04/apachemodrewrite2f.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4530875953866513005/posts/default/7667766719025209236'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4530875953866513005/posts/default/7667766719025209236'/><link rel='alternate' type='text/html' href='http://mashiki-memo.blogspot.com/2011/04/apachemodrewrite2f.html' title='apacheのmod_rewriteで%2fを変換'/><author><name>mashiki</name><uri>http://www.blogger.com/profile/05693139459731866783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4530875953866513005.post-5719650763190994262</id><published>2011-03-24T21:40:00.000+09:00</published><updated>2011-03-24T21:40:21.876+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='ExtJs'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>ExtJSのStoreにデータダウンロードの機能を追加する PART2</title><content type='html'>前回、時間の無い中作った「&lt;a href="http://mashiki-memo.blogspot.com/2011/03/extjsgridchart.html"&gt;ExtJSのGridやChartにデータダウンロードの機能を追加する&lt;/a&gt;」を利用したアプリケーションで、追加要望が出たので拡張について少し考えてみた。&lt;br /&gt;&lt;br /&gt;前回、拡張の方法としてはGridに特化して、Gridで表示されているカラムやrendererを利用して、見えているものが、タブ区切りでダウンロードできる事を検討した。が、見えているものとは別に列やフォーマットを指定できる方が汎用性が高いことが分かり、その方向で拡張を実施することとした。&lt;br /&gt;&lt;br /&gt;拡張したdownloadメソッド&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt; /**&lt;br /&gt;  * Download store data&lt;br /&gt;  * @param {Object} opt (optional) Specifies download filename and columns.&lt;br /&gt;  */&lt;br /&gt; Ext.data.Store.prototype.download = function(opt){&lt;br /&gt;  opt = opt||{};&lt;br /&gt;  var output=[],o=[],&lt;br /&gt;   columns = opt.columns||(function(st){&lt;br /&gt;    var cs=[], i=0;&lt;br /&gt;    st.fields.eachKey(function(k) {cs.push(k);});&lt;br /&gt;    return cs;&lt;br /&gt;   })(this),&lt;br /&gt;   fn = opt.filename||opt.fn||'download.txt';&lt;br /&gt;  for (var i=0,col; col=columns[i]; ++i) {&lt;br /&gt;   if (typeof col === 'string') {&lt;br /&gt;    columns[i] = col = {field: col}&lt;br /&gt;   }&lt;br /&gt;   if (!col.header) col.header = col.field;&lt;br /&gt;   if (!col.format) col.format = function(v,r){return v;};&lt;br /&gt;   o.push(col.header);&lt;br /&gt;  }&lt;br /&gt;  output.push(o.join('\t'));&lt;br /&gt;  this.each(function(rec) {&lt;br /&gt;   var o=[];&lt;br /&gt;   for (var i=0,col; col=columns[i]; ++i) {&lt;br /&gt;    o.push(col.format(rec.get(col.field), rec));&lt;br /&gt;   }&lt;br /&gt;   output.push(o.join('\t'));&lt;br /&gt;  });&lt;br /&gt;  var form = Ext.DomHelper.append(document.body, {&lt;br /&gt;   tag: 'form',&lt;br /&gt;   style: 'display:none',&lt;br /&gt;   action: 'download.php',&lt;br /&gt;   method: 'post',&lt;br /&gt;   cn:[{&lt;br /&gt;    tag:'textarea',&lt;br /&gt;    name:'body',&lt;br /&gt;    html:output.join('\n')&lt;br /&gt;   },{&lt;br /&gt;    tag:'input',&lt;br /&gt;    name:'Content-Disposition',&lt;br /&gt;    value:'attachment;filename='+'&amp;quot;'+fn+'&amp;quot;'&lt;br /&gt;   },{&lt;br /&gt;    tag:'input',&lt;br /&gt;    name:'Content-Type',&lt;br /&gt;    value:'text/tab-separated-values'&lt;br /&gt;   }]&lt;br /&gt;  });&lt;br /&gt;  form.submit();&lt;br /&gt;  document.body.removeChild(form);&lt;br /&gt; }&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;呼出しサンプル１&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www123.ddo.jp/grid/reload-chart.html" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;http://www123.ddo.jp/grid/reload-chart.html&lt;img border="0" height="292" width="320" src="http://2.bp.blogspot.com/-bZEx14RZoMA/TWxPIE0vXNI/AAAAAAAAACU/yxDVLZaELj4/s320/ss1.png" /&gt;&lt;/a&gt;&lt;/div&gt;こちらではパラメータなしでdownloadメソッドを呼び出した例、storeの内容がそのままダウンロードされる&lt;br /&gt;&lt;br /&gt;呼出しサンプル２&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www123.ddo.jp/grid/array-grid.html" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;http://www123.ddo.jp/grid/array-grid.html&lt;img border="0" height="166" width="320" src="http://4.bp.blogspot.com/-LMB-1u9KcKw/TWxOtl3btuI/AAAAAAAAACM/hAoEynmqUU0/s320/ss2.png" /&gt;&lt;/a&gt;&lt;/div&gt;こちらはパラメータとして、ダウンロードファイル名や、列やフォーマットの指定を行ってダウンロードする例&lt;br /&gt;&lt;br /&gt;使用に当たっては「&lt;a href="http://mashiki-memo.blogspot.com/2011/03/extjsgridchart.html"&gt;ExtJSのGridやChartにデータダウンロードの機能を追加する&lt;/a&gt;」で使用したdownload.phpが必要となります。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4530875953866513005-5719650763190994262?l=mashiki-memo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mashiki-memo.blogspot.com/feeds/5719650763190994262/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://mashiki-memo.blogspot.com/2011/03/extjsstore-part2.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4530875953866513005/posts/default/5719650763190994262'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4530875953866513005/posts/default/5719650763190994262'/><link rel='alternate' type='text/html' href='http://mashiki-memo.blogspot.com/2011/03/extjsstore-part2.html' title='ExtJSのStoreにデータダウンロードの機能を追加する PART2'/><author><name>mashiki</name><uri>http://www.blogger.com/profile/05693139459731866783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-bZEx14RZoMA/TWxPIE0vXNI/AAAAAAAAACU/yxDVLZaELj4/s72-c/ss1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4530875953866513005.post-8316954948231700775</id><published>2011-03-24T15:01:00.002+09:00</published><updated>2011-03-24T15:02:44.694+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>phpの出力をブラウザやプロキシーにキャッシュさせない</title><content type='html'>phpの&lt;a href="http://php.net/manual/ja/function.header.php"&gt;ヘッダーのマニュアル内&lt;/a&gt;にそのものが載っているが、下記を設定するとかなりキャッシュされにくくなるとのこと。&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;    header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1&lt;br /&gt;    header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // 過去の日付&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;ちなみに少し以前のマニュアルの例では、もう少しコテコテやっていた。&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;    // 日付が過去&lt;br /&gt;    header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");&lt;br /&gt;    // 常に修正されている&lt;br /&gt;    header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");&lt;br /&gt;    // HTTP/1.1&lt;br /&gt;    header("Cache-Control: no-store, no-cache, must-revalidate");&lt;br /&gt;    header("Cache-Control: post-check=0, pre-check=0", false);&lt;br /&gt;    // HTTP/1.0&lt;br /&gt;    header("Pragma: no-cache");&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4530875953866513005-8316954948231700775?l=mashiki-memo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mashiki-memo.blogspot.com/feeds/8316954948231700775/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://mashiki-memo.blogspot.com/2011/03/php_24.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4530875953866513005/posts/default/8316954948231700775'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4530875953866513005/posts/default/8316954948231700775'/><link rel='alternate' type='text/html' href='http://mashiki-memo.blogspot.com/2011/03/php_24.html' title='phpの出力をブラウザやプロキシーにキャッシュさせない'/><author><name>mashiki</name><uri>http://www.blogger.com/profile/05693139459731866783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4530875953866513005.post-1436312257757882064</id><published>2011-03-11T11:28:00.006+09:00</published><updated>2011-04-12T00:03:28.527+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>phpで仮名を全角に、英数字と空白を半角に統一する(mb_convert_kana)</title><content type='html'>何と1行でできる&lt;br /&gt;&lt;br /&gt;&lt;a href=" http://php.net/manual/ja/function.mb-convert-kana.php"&gt;mb_convert_kanaを使用する&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;/*「半角カタカナ」を「全角カタカナ」に変換し、&lt;br /&gt;　「全角」英数字を「半角」に変換します。&lt;br /&gt;　　オプションの意味&lt;br /&gt;　　　K: かな半→全&lt;br /&gt;　　　V: 濁点をマージ&lt;br /&gt;　　　a: 英数字を半角にする&lt;br /&gt;　　　s: スペースを半角にする（U+3000 -&gt; U+0020）&lt;br /&gt; */&lt;br /&gt;&lt;br /&gt;$str = mb_convert_kana($str, 'KVas', 'utf-8');&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;エンコードをEUCもしくはUTF-8とすれば、ついでに英数字の後に続く長音記号をハイフンに変換するのも簡単。&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;$str = mb_convert_kana($str, 'KVas', 'utf-8');&lt;br /&gt;$str = preg_replace('/([a-z0-9])ー/i', '${1}-', $str);&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4530875953866513005-1436312257757882064?l=mashiki-memo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mashiki-memo.blogspot.com/feeds/1436312257757882064/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://mashiki-memo.blogspot.com/2011/03/php.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4530875953866513005/posts/default/1436312257757882064'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4530875953866513005/posts/default/1436312257757882064'/><link rel='alternate' type='text/html' href='http://mashiki-memo.blogspot.com/2011/03/php.html' title='phpで仮名を全角に、英数字と空白を半角に統一する(mb_convert_kana)'/><author><name>mashiki</name><uri>http://www.blogger.com/profile/05693139459731866783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4530875953866513005.post-6353988644573657825</id><published>2011-03-09T11:35:00.005+09:00</published><updated>2011-03-10T08:09:47.707+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ExtJs'/><title type='text'>Illuminations for Devellopers 1.1.5導入</title><content type='html'>ExtJSでの開発やデバッグの効率を桁違いに高めてくれるかも知れないツールがFireFoxのアドオンとして提供されている。&lt;br /&gt;&lt;br /&gt;名前は「Illuminations for Devellopers」で今日現在のバージョンは1.1.5となっている。&lt;a href="http://www.sencha.com/blog/firebug-plugin-illuminations-for-developers/"&gt;Senchaのブログに載っていた&lt;/a&gt;のでインストールしてみた。&lt;br /&gt;&lt;br /&gt;インストールは通常のFirefoxのアドオンと同じ。但し、アドオンFirebugが導入されていることは前提となります。&lt;br /&gt;「ツール」→「アドオン」メニューから、「アドオンを入手」をクリックし、検索のテキストボックスに「Illuminations」と入力し検索すると&lt;br /&gt;&lt;blockquote&gt;Illuminations for Developers for Firebug&lt;br /&gt;&lt;br /&gt;作成者: Steven Roussey&lt;/blockquote&gt;が、見つかるのでこれを「Firefoxに追加」する。インストール完了後にFirefoxを再起動し、Firebugを開くと、一番右「接続」の隣に「Illuminations[Trial]」のタブが増えていることがわかる。赤い大きな「Buy or Login」のボタンが少々いやらしいが、まずは無視。&lt;br /&gt;&lt;br /&gt;早速、ExtJSを使用しているページを見に行くと、ViewPort以下どのようにBorderLayoutがあり、その中にある入れ子のBorderLayoutがTabPanelでありどんなメニューとプロパティを持っているかなど、階層的に確認していくことができる。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-LPRJirRzwdU/TXbxhm1nmuI/AAAAAAAAACk/k0lvpxUl090/s1600/ss1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="257" src="http://2.bp.blogspot.com/-LPRJirRzwdU/TXbxhm1nmuI/AAAAAAAAACk/k0lvpxUl090/s320/ss1.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;今まで、FireFoxでこれを確認していくことはスクリプトのウォッチの機能でできないことはなかったが、いろいろな情報が頭に入っており、見たいデータを明確にして探さないと見つけることはできなかったし、探したオブジェクトがどんなクラスのオブジェクトかということですら、持っているプロパティやメソッドから推測することしかできなかった。&lt;br /&gt;&lt;br /&gt;このアドオンの利用によりかなりデバッグの敷居が下がるかと思う。&lt;br /&gt;まだ、全然見切れていないが、導入後気になったのはこのアドオンがトライアルで、製品版があるらしいということ。どんな機能の違いがあるのだろう。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4530875953866513005-6353988644573657825?l=mashiki-memo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mashiki-memo.blogspot.com/feeds/6353988644573657825/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://mashiki-memo.blogspot.com/2011/03/illuminations-for-devellopers-115.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4530875953866513005/posts/default/6353988644573657825'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4530875953866513005/posts/default/6353988644573657825'/><link rel='alternate' type='text/html' href='http://mashiki-memo.blogspot.com/2011/03/illuminations-for-devellopers-115.html' title='Illuminations for Devellopers 1.1.5導入'/><author><name>mashiki</name><uri>http://www.blogger.com/profile/05693139459731866783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-LPRJirRzwdU/TXbxhm1nmuI/AAAAAAAAACk/k0lvpxUl090/s72-c/ss1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4530875953866513005.post-4315484693203502412</id><published>2011-03-01T10:43:00.008+09:00</published><updated>2011-03-04T03:18:16.327+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='ExtJs'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>ExtJSのGridやChartにデータダウンロードの機能を追加する</title><content type='html'>ExtJSのGridやChartにデータダウンロードの機能を追加した際のメモ&lt;br /&gt;&lt;br /&gt;ダウンロードといえば本来サーバ側に実装する機能だが、超短納期で片づけたかったため時間のかからなそうな、javascript側のStoreからダウンロードする方法を検討した。&lt;br /&gt;&lt;br /&gt;作成したサンプルは以下の2つ。いずれもExtJSのサンプルに、ダウンロード機能を呼び出すためのボタンを追加したものとなる。&lt;br /&gt;&lt;br /&gt;Chartのほうはサーバに無いデータを表示する例なので、よりStoreからのダウンロードに意味が出るかと思う。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www123.ddo.jp/grid/array-grid.html" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;http://www123.ddo.jp/grid/array-grid.html&lt;img border="0" height="166" width="320" src="http://4.bp.blogspot.com/-LMB-1u9KcKw/TWxOtl3btuI/AAAAAAAAACM/hAoEynmqUU0/s320/ss2.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www123.ddo.jp/grid/reload-chart.html" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;http://www123.ddo.jp/grid/reload-chart.html&lt;img border="0" height="292" width="320" src="http://2.bp.blogspot.com/-bZEx14RZoMA/TWxPIE0vXNI/AAAAAAAAACU/yxDVLZaELj4/s320/ss1.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;ダウンロードはクライアント側だけでは仕組み上実現できないので、ブラウザからPOSTされたデータをそのまま出力する鏡みたいなphpスクリプトを使用することにした。このあたり、javascriptだけでできる方法があるなら、是非コメントでアドバイスいただきたい。&lt;br /&gt;&lt;br /&gt;用意したphpスクリプトdownload.phpは以下のようなものだ。&lt;br /&gt;本来、3行で実装できるが、ヘッダの自由度を持たせるためと、最低限のセキュリティとして、リファラが同じサーバかだけのチェックを入れている。&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;&amp;lt;?php&lt;br /&gt; if (!isSet($_SERVER['HTTP_REFERER']) &lt;br /&gt;  || !preg_match('#^http://([^:/]+)#',$_SERVER['HTTP_REFERER'],$mch)&lt;br /&gt;  || $mch[1]!==$_SERVER['SERVER_NAME']&lt;br /&gt; ) die('Security Error'); // simple security check&lt;br /&gt; foreach ($_POST as $header=&gt;$val) {&lt;br /&gt;  if ($header==='body') continue;&lt;br /&gt;  header("$header: $val");&lt;br /&gt; }&lt;br /&gt; die($_POST['body']);&lt;br /&gt;?&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;ChartやGridPanelのスクリプトの変更方法は、ツールバーやツールボタンで、下記のStoreに追加したメソッドExt.data.Store::download(fn)を呼び出すというもの、StoreはGridやChartで使用しているものを、引数fnはダウンロードの際のファイル名を指定すればよい。&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;Ext.data.Store.prototype.download = function(fn){&lt;br /&gt;    var output=[],o=[],&lt;br /&gt;      fld = this.fields;&lt;br /&gt;    fld.eachKey(function(key){o.push(key)});&lt;br /&gt;    output.push(o.join('\t'));&lt;br /&gt;    this.each(function(rec) {&lt;br /&gt;      var o=[];&lt;br /&gt;      fld.eachKey(function(key){o.push(rec.get(key))});&lt;br /&gt;      output.push(o.join('\t'));&lt;br /&gt;    });&lt;br /&gt;    var form = Ext.DomHelper.append(document.body, {&lt;br /&gt;      tag: 'form',&lt;br /&gt;      style: 'display:none',&lt;br /&gt;      action: 'download.php',&lt;br /&gt;      method: 'post',&lt;br /&gt;      cn:[{&lt;br /&gt;        tag:'textarea',&lt;br /&gt;        name:'body',&lt;br /&gt;        html:output.join('\n')&lt;br /&gt;      },{&lt;br /&gt;        tag:'input',&lt;br /&gt;        name:'Content-Disposition',&lt;br /&gt;        value:'attachment;filename='+'&amp;quot;'+fn+'&amp;quot;'&lt;br /&gt;      },{&lt;br /&gt;        tag:'input',&lt;br /&gt;        name:'Content-Type',&lt;br /&gt;        value:'text/tab-separated-values'&lt;br /&gt;      }]&lt;br /&gt;    });&lt;br /&gt;    form.submit();&lt;br /&gt;    document.body.removeChild(form);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;今回の方式はStoreにfilterがかかっていれば、表示されているレコードのみDLされる。&lt;br /&gt;Grid専用にするならば、これを一歩進め、ユーザが画面で操作した列の順番や列の表示/非表示を反映したり、列によってはrendererを指定できるようにすると、ユーザが見たままを手に入れるという意味で完成形になるのではと思う。&lt;br /&gt;&lt;br /&gt;今回の例だと出力したLastUpdateの列のDateの出力形式は、欧米人がみればわかりやすいが、日本人向けでなく、Excelでそのまま処理できない等の不満はある。&lt;br /&gt;&lt;br /&gt;英語版のフォーラムに投稿してみました&lt;br /&gt;&lt;a href="http://www.sencha.com/forum/showthread.php?125611-data-download-function-from-Grid-and-Chart"&gt;http://www.sencha.com/forum/showthread.php?125611-data-download-function-from-Grid-and-Chart&lt;br /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4530875953866513005-4315484693203502412?l=mashiki-memo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mashiki-memo.blogspot.com/feeds/4315484693203502412/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://mashiki-memo.blogspot.com/2011/03/extjsgridchart.html#comment-form' title='1 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4530875953866513005/posts/default/4315484693203502412'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4530875953866513005/posts/default/4315484693203502412'/><link rel='alternate' type='text/html' href='http://mashiki-memo.blogspot.com/2011/03/extjsgridchart.html' title='ExtJSのGridやChartにデータダウンロードの機能を追加する'/><author><name>mashiki</name><uri>http://www.blogger.com/profile/05693139459731866783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-LMB-1u9KcKw/TWxOtl3btuI/AAAAAAAAACM/hAoEynmqUU0/s72-c/ss2.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4530875953866513005.post-8920258229348924159</id><published>2011-02-15T03:00:00.002+09:00</published><updated>2011-03-01T11:00:47.758+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='ExtJs'/><title type='text'>ExtJS Pivot Gridの拡張</title><content type='html'>ExtJS3.3のPivotGridは、ヘッダのrendererは無く、セルのrendererのパラメータが値しか受け取れない仕様となっている。今回初めて使用したが、必要に迫られてHackしたのでメモしておく。&lt;br /&gt;&lt;br /&gt;それぞれ下記に数行のコードを修正、追加すればよい&lt;br /&gt;・ヘッダのrendererの実装： Ext.grid.PivotAxsisのbuildHeaders()メソッド&lt;br /&gt;　　　行列のそれぞれ各ディメンジョンごとに指定可能&lt;br /&gt;・セルのrendererの拡張： Ext.grid.GridViewのrenderRows()メソッド&lt;br /&gt;　　　値以外に、行のカウンタ、列のカウンタ、行ヘッダの情報、列ヘッダの情報、&lt;br /&gt;　　　グリッドの参照を受け取れるようにした&lt;br /&gt;&lt;br /&gt;実装結果はこちら&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www123.ddo.jp/extest3/pivot/modifiedpivotexample.html" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;http://www123.ddo.jp/extest3/pivot/modifiedpivotexample.html&lt;img border="0" height="148" width="320" src="http://1.bp.blogspot.com/-9ceogjChaP4/TWxTKKHeS-I/AAAAAAAAACc/pg14mNAMSSE/s320/ss3.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4530875953866513005-8920258229348924159?l=mashiki-memo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mashiki-memo.blogspot.com/feeds/8920258229348924159/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://mashiki-memo.blogspot.com/2011/02/extjs-pivot-grid.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4530875953866513005/posts/default/8920258229348924159'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4530875953866513005/posts/default/8920258229348924159'/><link rel='alternate' type='text/html' href='http://mashiki-memo.blogspot.com/2011/02/extjs-pivot-grid.html' title='ExtJS Pivot Gridの拡張'/><author><name>mashiki</name><uri>http://www.blogger.com/profile/05693139459731866783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-9ceogjChaP4/TWxTKKHeS-I/AAAAAAAAACc/pg14mNAMSSE/s72-c/ss3.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4530875953866513005.post-1621120552903238810</id><published>2011-02-10T14:40:00.000+09:00</published><updated>2011-02-10T14:40:05.073+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ExtJs'/><title type='text'>ExtJS pivotのサンプル</title><content type='html'>ExtJS pivotのサンプルは下記に紹介されているが、残念なことにリンクが切れている&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.extjs.co.jp/blog/2010/08/16/ext-js-3-3-beta-2-released/"&gt;Ext JS 3.3 Beta 2 がリリース&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;サンプルは別URLに残っているのでリンクをあげておく&lt;br /&gt;&lt;br /&gt;サンプル１&lt;br /&gt;　&lt;a href="http://dev.sencha.com/deploy/dev/examples/pivotgrid/simple.html"&gt;http://dev.sencha.com/deploy/dev/examples/pivotgrid/simple.html&lt;/a&gt;&lt;br /&gt;サンプル２&lt;br /&gt;　&lt;a href="http://dev.sencha.com/deploy/dev/examples/pivotgrid/people.html"&gt;http://dev.sencha.com/deploy/dev/examples/pivotgrid/people.html&lt;/a&gt;&lt;br /&gt;サンプル３&lt;br /&gt;　&lt;a href="http://dev.sencha.com/deploy/dev/examples/pivotgrid/countries.html"&gt;http://dev.sencha.com/deploy/dev/examples/pivotgrid/countries.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4530875953866513005-1621120552903238810?l=mashiki-memo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mashiki-memo.blogspot.com/feeds/1621120552903238810/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://mashiki-memo.blogspot.com/2011/02/extjs-pivot.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4530875953866513005/posts/default/1621120552903238810'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4530875953866513005/posts/default/1621120552903238810'/><link rel='alternate' type='text/html' href='http://mashiki-memo.blogspot.com/2011/02/extjs-pivot.html' title='ExtJS pivotのサンプル'/><author><name>mashiki</name><uri>http://www.blogger.com/profile/05693139459731866783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4530875953866513005.post-3570974789384651005</id><published>2011-02-10T13:15:00.003+09:00</published><updated>2011-02-11T13:32:08.904+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='ExtJs'/><title type='text'>ExtJSで折れ線グラフを出したときの線のスタイル</title><content type='html'>ExtJSのチャート(Ext.chart)は簡単にグラフを表示できるのだが、&lt;br /&gt;マニュアルに何が指定できるのか説明がほとんどない。&lt;br /&gt;&lt;br /&gt;デコンパイラでcharts.swfの内部を調べて何ができるのか少し調べてみた。&lt;br /&gt;ほんとは動的にseriesを増減させるメソッドが無いか調べていたのだが&lt;br /&gt;それらしいものは無かった。&lt;br /&gt;代わりにseriesで指定できそうなstyleのプロパティを見つけたのでメモしておく&lt;br /&gt;※visibilityでおおっと思ったがpi chart専用だった&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;{&lt;br /&gt; height:350,&lt;br /&gt; xtype: 'linechart',&lt;br /&gt; store: store,&lt;br /&gt; xField: 'date',&lt;br /&gt; series: [{&lt;br /&gt;  type:'line',&lt;br /&gt;  displayName: 'line1',&lt;br /&gt;  yField: 'val1',&lt;br /&gt;  style: {&lt;br /&gt;   color: 0xFF9999,&lt;br /&gt;   lineSize:2,&lt;br /&gt;   lineAlpha:0.6,&lt;br /&gt;   alpha:0.6&lt;br /&gt;  }&lt;br /&gt; },{&lt;br /&gt;  type:'line',&lt;br /&gt;  displayName: 'line2',&lt;br /&gt;  yField: 'val2',&lt;br /&gt;  style: {&lt;br /&gt;   color: 0x99FF99,&lt;br /&gt;   lineSize:2,&lt;br /&gt;   lineAlpha:0.6,&lt;br /&gt;   alpha:0.6&lt;br /&gt;  }&lt;br /&gt; }]&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;「color」はサンプルのコードにあり、意味も明らかだ&lt;br /&gt;「lineSize」は線の太さでデフォルトの太めの線は「3」が設定してあるように思える&lt;br /&gt;「lineAlpha」は線の不透明度でデフォルトは「1(おそらく不透明)」になっている&lt;br /&gt;「alpha」はマーカの不透明度だと思う&lt;br /&gt;&lt;br /&gt;他に&lt;br /&gt;images 円グラフのみ&lt;br /&gt;image 折れ線グラフのマーカのイメージ？&lt;br /&gt;mode&lt;br /&gt;colors&lt;br /&gt;borderColor&lt;br /&gt;borderAlpha&lt;br /&gt;fillColor&lt;br /&gt;fillAlPha&lt;br /&gt;size&lt;br /&gt;lineColor 折れ線グラムのみ&lt;br /&gt;lineAlpha 折れ線グラムのみ&lt;br /&gt;showAreaFill&lt;br /&gt;areaFillAlpha&lt;br /&gt;connectPoints 折れ線グラムのみ&lt;br /&gt;connectDistinuousPoints&lt;br /&gt;distinuousDashLength&lt;br /&gt;showLabels&lt;br /&gt;hideOverlappingLabels&lt;br /&gt;font&lt;br /&gt;visibility 円グラフのみ&lt;br /&gt;skin 折れ線グラフのみ&lt;br /&gt;&lt;br /&gt;とが、charts.swf &gt; action(3) &gt; Charts &gt; setSeriesStyles() のswitchのcaseラベルにあったが、未調査。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4530875953866513005-3570974789384651005?l=mashiki-memo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mashiki-memo.blogspot.com/feeds/3570974789384651005/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://mashiki-memo.blogspot.com/2011/02/extjs.html#comment-form' title='1 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4530875953866513005/posts/default/3570974789384651005'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4530875953866513005/posts/default/3570974789384651005'/><link rel='alternate' type='text/html' href='http://mashiki-memo.blogspot.com/2011/02/extjs.html' title='ExtJSで折れ線グラフを出したときの線のスタイル'/><author><name>mashiki</name><uri>http://www.blogger.com/profile/05693139459731866783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4530875953866513005.post-6687506945687337123</id><published>2011-02-08T10:36:00.002+09:00</published><updated>2011-02-08T10:40:19.516+09:00</updated><title type='text'>ExtJS の Grid の ヘッダーにスタイルを適用する</title><content type='html'>ExtJS の Grid の ヘッダーにスタイルを適用にまよったのでメモ&lt;br /&gt;&lt;br /&gt;カラムの指定に&lt;br /&gt;&lt;blockquote&gt;{header:'field1', css:'color: green;'},&lt;/blockquote&gt;のように指定すればセルにcssが適用されるが、&lt;br /&gt;ヘッダに適用する為のコンフィグオプションは無くどうするか迷った。&lt;br /&gt;&lt;br /&gt;　&lt;a href="http://www.sencha.com/forum/showthread.php?94369-Grid-Header-Style&amp;p=447180"&gt;http://www.sencha.com/forum/showthread.php?94369-Grid-Header-Style&amp;p=447180&lt;/a&gt;&lt;br /&gt;をみるとidを指定しスタイルを書けばいいらしい。&lt;br /&gt;&lt;br /&gt;スタイルの指定に迷ったが&lt;br /&gt;&lt;blockquote&gt;{header:'field1', id:'field1'}&lt;/blockquote&gt;としたならば、&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;.x-grid3-hd-field1 {&lt;br /&gt;  color: green;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;セルも指定したいなら、 &lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;.x-grid3-hd-field1,.x-grid3-col-field1 {&lt;br /&gt;  color: green;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;とかけばいい。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4530875953866513005-6687506945687337123?l=mashiki-memo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mashiki-memo.blogspot.com/feeds/6687506945687337123/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://mashiki-memo.blogspot.com/2011/02/extjs-grid.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4530875953866513005/posts/default/6687506945687337123'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4530875953866513005/posts/default/6687506945687337123'/><link rel='alternate' type='text/html' href='http://mashiki-memo.blogspot.com/2011/02/extjs-grid.html' title='ExtJS の Grid の ヘッダーにスタイルを適用する'/><author><name>mashiki</name><uri>http://www.blogger.com/profile/05693139459731866783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4530875953866513005.post-4139229570571362939</id><published>2011-02-02T11:40:00.006+09:00</published><updated>2011-03-10T22:02:32.628+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='ExtJs'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>json_encode()代替関数</title><content type='html'>以前、php5.2未満のサーバのために、json_encode()の代替となる関数を書いた。&lt;br /&gt;いくつかのプログラムで使用してきたが、3年以上たってバグを発見したので、メモしておく。&lt;br /&gt;&lt;br /&gt;自作json_encode()は原形をほぼとどめていないが、&lt;br /&gt;phpのマニュアルの中の02-May-2007 01:55のUser Contributed Notesで&lt;br /&gt;Yi-Ren Chen at NCTU CSIEさんが書いたphp_json_encode()を改造して作ったものだ。&lt;br /&gt;&lt;br /&gt;json作成のロジックで、数字だったらそのまま使い、文字ならばクォートして使用する&lt;br /&gt;ような部分があるが、ここで数字の判定を&lt;br /&gt;&lt;blockquote&gt;if (is_numeric($val)) return $val;&lt;/blockquote&gt;と記述していたが、これに&lt;br /&gt;&lt;blockquote&gt;$data = array('id'=&gt;'011')&lt;/blockquote&gt;のような入力を食わせると、&lt;br /&gt;&lt;blockquote&gt;{"id":011}&lt;/blockquote&gt;が出力されてしまう。これはブラウザのjavascriptに8進数として処理され&lt;br /&gt;&lt;blockquote&gt;{id:9}&lt;/blockquote&gt;と解釈される。&lt;br /&gt;&lt;br /&gt;とりあえず&lt;br /&gt;&lt;blockquote&gt;if (is_int($val)||is_float($val)) return $val;&lt;/blockquote&gt;のように記述し、&lt;br /&gt;&lt;blockquote&gt;{id:"011"}&lt;/blockquote&gt;と受け取られるようになったことを確認したが、過去作ったシステムが、&lt;br /&gt;異常動作しないかひやひやものだ。&lt;br /&gt;&lt;br /&gt;Yi-Ren Chenさんのコードを元にjson_encode相当関数を作った世界中の人たちも&lt;br /&gt;大丈夫だったのかなあと心配してみる。&lt;br /&gt;&lt;br /&gt;修正済みコード&lt;br /&gt;&lt;a href="http://sourceforge.jp/projects/extwiki/svn/view/trunk/plugin/json_encode.php?view=markup&amp;revision=107&amp;root=extwiki"&gt;http://sourceforge.jp/projects/extwiki/svn/view/trunk/plugin/json_encode.php?view=markup&amp;revision=107&amp;root=extwiki&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;pre&gt;&amp;lt;?php // $Id: json_encode.php 3 2010-10-02 14:56:27Z mashiki $&lt;br /&gt;/**&lt;br /&gt; * json_encode: use this  for early version(&lt;5.2) of php&lt;br /&gt; *     which support "multibyte" but doesn't support "json_encode".&lt;br /&gt; * &lt;br /&gt; * Modified by mashiki 2008,2009,2011&lt;br /&gt; * &lt;br /&gt; * Original written by Yi-Ren Chen at NCTU CSIE as php_json_encode()&lt;br /&gt; *  User Contributed Notes 02-May-2007 01:55 in PHP online manual&lt;br /&gt; */&lt;br /&gt;function json_encode($val) {&lt;br /&gt; if (is_int($val)||is_float($val)) return $val;&lt;br /&gt; if (is_bool($val)) return $val?'true':'false';&lt;br /&gt; if (is_array($val)) {&lt;br /&gt;  $len = count($val);&lt;br /&gt;  for($ii=0; $ii&lt;$len &amp;&amp; isset($val[$ii]); ++$ii) {}&lt;br /&gt;  $temp = array();&lt;br /&gt;  if($len==$ii) {&lt;br /&gt;   for($i=0;$i&lt;$len;$i++) {&lt;br /&gt;    $temp[] = sprintf("%s", json_encode($val[$i]));&lt;br /&gt;   }&lt;br /&gt;   return '['. implode(",",$temp) .']';&lt;br /&gt;  } else {&lt;br /&gt;   foreach($val as $key =&gt; $item) {&lt;br /&gt;    $temp[] = sprintf("%s:%s", json_encode($key), json_encode($item));&lt;br /&gt;   }&lt;br /&gt;   return '{'. implode(",", $temp) .'}';&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt; // else string&lt;br /&gt; static $from = array('\\',  "\n", "\r", '"');&lt;br /&gt; static $to   = array('\\\\','\\n','\\r','\\"');&lt;br /&gt; static $cmap = array(0x80, 0xFFFF, 0, 0xFFFF);&lt;br /&gt; return '"'. preg_replace_callback(&lt;br /&gt;  '/&amp;#([0-9]+);/',&lt;br /&gt;  create_function('$match','return sprintf("\\u%04x", $match[1]);'),&lt;br /&gt;  mb_encode_numericentity(str_replace($from, $to, $val), $cmap, 'UTF-8')&lt;br /&gt; ) . '"';&lt;br /&gt;}&lt;br /&gt;?&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4530875953866513005-4139229570571362939?l=mashiki-memo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mashiki-memo.blogspot.com/feeds/4139229570571362939/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://mashiki-memo.blogspot.com/2011/02/php5.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4530875953866513005/posts/default/4139229570571362939'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4530875953866513005/posts/default/4139229570571362939'/><link rel='alternate' type='text/html' href='http://mashiki-memo.blogspot.com/2011/02/php5.html' title='json_encode()代替関数'/><author><name>mashiki</name><uri>http://www.blogger.com/profile/05693139459731866783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4530875953866513005.post-3416002063686194299</id><published>2011-01-23T10:40:00.005+09:00</published><updated>2011-01-23T10:56:12.365+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='ブックマークレット'/><category scheme='http://www.blogger.com/atom/ns#' term='ExtJs'/><title type='text'>window.printで１ページしか印刷できない問題</title><content type='html'>　ExtWikiでアクティブパネルの印刷をしようとし、タブの内容をiframeにコピーし、window.printを使って印刷するようにしたところ、最初の１ページしか印刷されないという現象に遭遇した。&lt;br /&gt;同じ方法をExtJSのAPIドキュメントのタブパネルに試したところ、同じように１ページしか印刷されなかった。&lt;br /&gt;　同様な現象が出たのでこれは一般的な問題かと思い、&lt;a href="http://www.sencha.com/forum/showthread.php?121909-SOLVED-How-to-print-the-document-on-tabpanel&amp;p=563722"&gt;http://www.sencha.com/forum/showthread.php?121909-SOLVED-How-to-print-the-document-on-tabpanel&amp;p=563722&lt;/a&gt; の質問を投げてみた。その後、iframeを見えるようにして確認をしたところ、１瞬、スクロールバーが見えることに気がついた。ステップ実行で１つ１つスタイルシートを適用したところ原因が判明。&lt;br /&gt;&lt;br /&gt;　結局この問題はdoc.cssにある「html,body {overflow:hidden}」の設定が問題だった。ExtWikiも初期にExtJSのAPIドキュメントの表示に似せようと、スタイルの設定を真似た為にこの設定が紛れ込んだようだ。&lt;br /&gt;現在のExtJSはViewportを使用すると、上記のスタイルが設定されるので、この設定は不要であった。doc.cssに残っているのも歴史的な残骸かと思う。&lt;br /&gt;&lt;br /&gt;作成した、ブックマークレット：&lt;a href="http://bookmarklet.dip.jp/?ExtJS%20API%E3%83%9A%E3%83%BC%E3%82%B8%E3%81%AE%E5%8D%B0%E5%88%B7/var%20p%3DExt.getCmp('doc-body').getActiveTab()%2Cs%3Dp.getEl().select('.body-wrap'%2Ctrue).first()%3Bif(!s)void%20Ext.Msg.alert('DocPrint'%2C'Select%20a%20document%20tab.')%3Belse%7Bvar%20f%3DExt.DomHelper.append(document.body%2C%7Btag%3A'iframe'%2Cstyle%3A'position%3Aabsolute%3Bwidth%3A4px%3Bheight%3A4px%3Bleft%3A-5px%3Btop%3A-5px%3B'%7D)%2Cw%3Df.contentWindow%2Cd%3Dw.document%3BExt.get(document).select('link').each(function(e)%7Bif(e.dom.rel.toLowerCase()%3D%3D%3D'stylesheet')%7Bd.write('%3Clink%20type%3D%22text%2Fcss%22%20rel%3D%22stylesheet%22%20href%3D%22'%2Be.dom.href%2B'%22%3E%3C%2Flink%3E')%3B%7D%7D)%3Bd.write('%3Cstyle%3Ehtml%2Cbody%7Boverflow%3Aauto%7D%3C%2Fstyle%3E%3Cdiv%20clas%3Dbody-wrap%3E'%2Bs.dom.innerHTML%2B'%3C%2Fdiv%3E')%3Bd.close()%3Bd.title%3Ddocument.title%2B'%3A'%2Bp.title%3Bw.focus()%3Bw.print()%3BExt.get(f).remove()%7D"&gt;ExtJS APIページの印刷&lt;/a&gt;&lt;br /&gt;※上記は「Hide Inherited Members」と「Extend All Members」を反映しないので使い道はいまいちです&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4530875953866513005-3416002063686194299?l=mashiki-memo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mashiki-memo.blogspot.com/feeds/3416002063686194299/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://mashiki-memo.blogspot.com/2011/01/windowprint.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4530875953866513005/posts/default/3416002063686194299'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4530875953866513005/posts/default/3416002063686194299'/><link rel='alternate' type='text/html' href='http://mashiki-memo.blogspot.com/2011/01/windowprint.html' title='window.printで１ページしか印刷できない問題'/><author><name>mashiki</name><uri>http://www.blogger.com/profile/05693139459731866783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4530875953866513005.post-2750275271558733045</id><published>2011-01-13T22:49:00.002+09:00</published><updated>2011-01-13T22:52:40.521+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='ExtJs'/><category scheme='http://www.blogger.com/atom/ns#' term='サクラエディタ'/><title type='text'>utf-8のjsファイルをextdocで処理する</title><content type='html'>今まで、utf-8のjsファイルのext-docでの処理が文字化けしてしまうため、一旦、s-jisにしてから、処理を行っていた。&lt;br /&gt;今日、ext-docのバージョンが上がっていないかと、&lt;br /&gt;&lt;a href="http://www.sencha.com/forum/showthread.php?55214-ext-doc-ExtJS-style-JavaScript-comments-processor/page26"&gt;http://www.sencha.com/forum/showthread.php?55214-ext-doc-ExtJS-style-JavaScript-comments-processor/page26&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;にアクセスしたところ、javaのオプションで&lt;br /&gt;java -Dfile.encoding=UTF8 -jar path_to\ext-doc.jar ...&lt;br /&gt;とすればいいという情報を見つけた。&lt;br /&gt;試してみると、文字化けもなくうまく動作する。&lt;br /&gt;&lt;br /&gt;utf-8 → s-jis はサクラのマクロでやっていたので、手間としてはそれほど変わらないが、正解がわかったのですっきり。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4530875953866513005-2750275271558733045?l=mashiki-memo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mashiki-memo.blogspot.com/feeds/2750275271558733045/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://mashiki-memo.blogspot.com/2011/01/utf-8jsextdoc.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4530875953866513005/posts/default/2750275271558733045'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4530875953866513005/posts/default/2750275271558733045'/><link rel='alternate' type='text/html' href='http://mashiki-memo.blogspot.com/2011/01/utf-8jsextdoc.html' title='utf-8のjsファイルをextdocで処理する'/><author><name>mashiki</name><uri>http://www.blogger.com/profile/05693139459731866783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4530875953866513005.post-436217607099328771</id><published>2011-01-12T11:55:00.004+09:00</published><updated>2011-01-12T13:59:56.528+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ExtJs'/><title type='text'>ExtJSの問い合わせをするなら</title><content type='html'>ExtJSの問い合わせをする場合、日本語のフォーラム「&lt;a href="http://www.sencha.com/forum/forumdisplay.php?34-Ext-International"&gt;Ext International&lt;/a&gt;」に質問しても最近は誰もレスをつけていない。さびしい限りだ。&lt;br /&gt;&lt;br /&gt;少々面倒だが、見ている人の数が圧倒的に多い英語のサイトに投稿するのが結局速そうだ。&lt;br /&gt;手順はこんな感じ&lt;br /&gt;&lt;blockquote&gt;　・問い合わせのテキストを作成し、翻訳サイト( http://www.excite.co.jp/world/english/ )等で翻訳する&lt;br /&gt;　・ソースのコメントやリテラルの文字列を英語にし、コードタグ([code][/code])でくくる&lt;br /&gt;　・&lt;a href="http://www.sencha.com/forum/forumdisplay.php?40-Ext-Help"&gt;http://www.sencha.com/forum/forumdisplay.php?40-Ext-Help&lt;/a&gt; でフォームにポストする&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Ext-Helpにポストした投稿は&lt;br /&gt;&lt;a href="http://www.sencha.com/forum/search.php?do=finduser&amp;userid=14691&amp;contenttype=vBForum_Post&amp;showposts=1&amp;forumchoice%5B%5D=40"&gt;&lt;br /&gt;http://www.sencha.com/forum/search.php?do=finduser&amp;userid=14691&amp;contenttype=vBForum_Post&amp;showposts=1&amp;forumchoice%5B%5D=40&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;で調べられる。(14591は自分のユーザID)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4530875953866513005-436217607099328771?l=mashiki-memo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mashiki-memo.blogspot.com/feeds/436217607099328771/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://mashiki-memo.blogspot.com/2011/01/extjs.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4530875953866513005/posts/default/436217607099328771'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4530875953866513005/posts/default/436217607099328771'/><link rel='alternate' type='text/html' href='http://mashiki-memo.blogspot.com/2011/01/extjs.html' title='ExtJSの問い合わせをするなら'/><author><name>mashiki</name><uri>http://www.blogger.com/profile/05693139459731866783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4530875953866513005.post-2780019281028526625</id><published>2011-01-07T09:34:00.006+09:00</published><updated>2012-01-18T11:00:48.884+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='ExtJs'/><category scheme='http://www.blogger.com/atom/ns#' term='サクラエディタ'/><category scheme='http://www.blogger.com/atom/ns#' term='winscp'/><title type='text'>winscpをバッチ処理で使用する</title><content type='html'>こんなこともできるらしい。&lt;br /&gt;サクラのマクロに取り込めば、いろいろなことが自動化できそう&lt;br /&gt;&lt;br /&gt;下記を1行でコマンドラインに打つ&lt;br /&gt;&lt;pre&gt;"C:\Program Files\WinSCP\winscp.com" /command&lt;br /&gt;   "open ""mashiki@shell.sourceforge.jp"""&lt;br /&gt;   "put ""C:\DLSoft\develop\ext-doc-1.0.131\extwikidoc.zip""&lt;br /&gt;   ""/home/groups/e/ex/extwiki/htdocs/"""&lt;br /&gt;   "exit"&lt;/pre&gt;&lt;br /&gt;参考&lt;br /&gt;&lt;a href="http://winscp.net/eng/docs/commandline"&gt;http://winscp.net/eng/docs/commandline&lt;/a&gt;&lt;br /&gt;&lt;a href="http://winscp.net/eng/docs/script_commands"&gt;http://winscp.net/eng/docs/script_commands&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;実際に作って使っているのがこれ&lt;br /&gt;・現在のファイルがextwiki-debug.jsか確認&lt;br /&gt;・現在のファイルを保存する&lt;br /&gt;・SJISにして名前を付けてextdoc用のフォルダに保存する&lt;br /&gt;・ext-docに変換する&lt;br /&gt;・生成されたファイル数が大量のためzipに固める&lt;br /&gt;・zipをサーバのドキュメントルートにアップロードし解凍する&lt;br /&gt;&lt;br /&gt;&lt;pre class='brush: js'&gt;&lt;br /&gt;// ext-doc.js&lt;br /&gt;var cmd, oe,&lt;br /&gt; TARGET = 'extwiki-debug.js',&lt;br /&gt; DOCDIR = 'C:\\DLSoft\\develop\\ext-doc-1.0.131',&lt;br /&gt; SAVEAS = 'DOCDIR\\source\\extwiki.js',&lt;br /&gt; MAKEDOC= 'java -jar DOCDIR\\ext-doc.jar'&lt;br /&gt;   +' -p DOCDIR\\source/extwiki.xml'&lt;br /&gt;   +' -o DOCDIR\\extwikidoc'&lt;br /&gt;   +' -t DOCDIR\\template/ext/template.xml'&lt;br /&gt;   +' -verbose',&lt;br /&gt; ZIPDOC = '"C:/Program Files/Lhaplus/Lhaplus.exe" /c:zip /o:DOCDIR DOCDIR\\extwikidoc',&lt;br /&gt; PUTFILE= '"C:/Program Files/WinSCP/winscp.com" /log=log.txt /command'&lt;br /&gt;   +' "open ""mashiki@shell.sourceforge.jp"""'&lt;br /&gt;   +' "cd ""/home/groups/e/ex/extwiki/htdocs/"""'&lt;br /&gt;   +' "put ""DOCDIR\\extwikidoc.zip"""'&lt;br /&gt;   +' "call unzip -o extwikidoc.zip"'&lt;br /&gt;   +' "exit"'&lt;br /&gt; ws = new ActiveXObject("WScript.Shell"),&lt;br /&gt; fn = GetFilename().replace(/^.*\\/,'');&lt;br /&gt;// 現在のファイルがextwiki-debug.jsか確認&lt;br /&gt;if (fn!==TARGET) {&lt;br /&gt; ws.Popup('ファイル名"' + fn + '"は処理対象外です', 0, "ファイル名", 0);&lt;br /&gt;} else {&lt;br /&gt; // 現在のファイルを保存する&lt;br /&gt; FileSave();&lt;br /&gt;&lt;br /&gt; // SJISにして名前を付けて保存する&lt;br /&gt; FileSaveAs(resolveVars(SAVEAS),0,1); // SJIS, CRLF&lt;br /&gt;&lt;br /&gt; // ext-docに変換する&lt;br /&gt; oe = ws.Run(&lt;br /&gt;  resolveVars(MAKEDOC),&lt;br /&gt;  1,   // ウィンドウをアクティブにして表示する。&lt;br /&gt;  true // 終了するまでスクリプトの実行を停止&lt;br /&gt; );&lt;br /&gt;&lt;br /&gt; // zipに固める&lt;br /&gt; oe = ws.Run(&lt;br /&gt;  resolveVars(ZIPDOC),&lt;br /&gt;  1,   // ウィンドウをアクティブにして表示する。&lt;br /&gt;  true // 終了するまでスクリプトの実行を停止&lt;br /&gt; );&lt;br /&gt;&lt;br /&gt; // zipをサーバにアップロードし解凍する&lt;br /&gt; oe = ws.Run(&lt;br /&gt;  resolveVars(PUTFILE),&lt;br /&gt;  1,   // ウィンドウをアクティブにして表示する。&lt;br /&gt;  true // 終了するまでスクリプトの実行を停止&lt;br /&gt; );&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function resolveVars(path) {&lt;br /&gt; return path.replace(/DOCDIR/g, DOCDIR);&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4530875953866513005-2780019281028526625?l=mashiki-memo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mashiki-memo.blogspot.com/feeds/2780019281028526625/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://mashiki-memo.blogspot.com/2011/01/winscp.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4530875953866513005/posts/default/2780019281028526625'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4530875953866513005/posts/default/2780019281028526625'/><link rel='alternate' type='text/html' href='http://mashiki-memo.blogspot.com/2011/01/winscp.html' title='winscpをバッチ処理で使用する'/><author><name>mashiki</name><uri>http://www.blogger.com/profile/05693139459731866783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4530875953866513005.post-892696084115832399</id><published>2011-01-03T12:22:00.002+09:00</published><updated>2011-01-03T12:37:02.480+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='ブックマークレット'/><title type='text'>SourceForgeのDiff画面でサイドバーを非表示にするブックマークレット</title><content type='html'>SourceForgeのDiff画面は右側のサイドバーが大きく、せっかくソースを並べて表示できても、まったくもって見やすいとは言えない状態です。&lt;br /&gt;&lt;br /&gt;下記で紹介しているブックマークレットはサイドバーを一時的に非表示にします。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bookmarklet.dip.jp/?SourceForge%E3%81%A7%E3%82%B5%E3%82%A4%E3%83%89%E3%83%90%E3%83%BC%E3%82%92%E9%9D%9E%E8%A1%A8%E7%A4%BA/var%20el%3Ddocument.getElementById('sidebar-column')%3Bel.setAttribute('style'%2C'display%3Anone')"&gt;SourceForgeの画面でサイドバーを一時的に非表示にする&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;ページ移動もしくはリロードすれば元に戻ります。&lt;br /&gt;SourceForgeの収入源である広告の表示やクリックできるチャンスを損なうものではないと思っていますが、なにかお気づきの点があればご指摘いただければ。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4530875953866513005-892696084115832399?l=mashiki-memo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mashiki-memo.blogspot.com/feeds/892696084115832399/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://mashiki-memo.blogspot.com/2011/01/sourceforgediff.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4530875953866513005/posts/default/892696084115832399'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4530875953866513005/posts/default/892696084115832399'/><link rel='alternate' type='text/html' href='http://mashiki-memo.blogspot.com/2011/01/sourceforgediff.html' title='SourceForgeのDiff画面でサイドバーを非表示にするブックマークレット'/><author><name>mashiki</name><uri>http://www.blogger.com/profile/05693139459731866783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4530875953866513005.post-8110789001266206326</id><published>2010-12-31T12:40:00.003+09:00</published><updated>2011-01-01T12:46:07.582+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='ブックマークレット'/><category scheme='http://www.blogger.com/atom/ns#' term='Pukiwiki'/><title type='text'>Pukiwikiでブックマークレットを紹介できるようにする</title><content type='html'>　通常のPukiwikiのページに「javascript:スクリプト」と直接書いてもリンクにならないし、[[ブックマークレットタイトル&gt;javascript:スクリプト]]と書いてもjavascriptを実行できるリンクにはならない。&lt;br /&gt;　誰でも自由いページを編集できるpukiwikiでデフォルトでそんな設定になっていたら、XSS対策も何もあったものではないからだ。自分の管理するpukiwikiで「file://」をリンクとして扱のと同じよう設定を入れ、「javascript:スクリプト」や「[[ブックマークレットタイトル&gt;javascript:スクリプト]]」をリンクとして扱うようにすることはできるが、インターネットに公開しているサイトではリスクが大きくてする気にもならないだろう。&lt;br /&gt;　悪意のある訪問者が、既存のリンクをjavascriptに書き換え、&lt;br /&gt;「一見通常通りページを開くが、10秒後にスパムサイトがポップアップしてくる」とか、&lt;br /&gt;「リンクをクリックするとスパムURLがついたコメントがPOSTされる」&lt;br /&gt;なんてことを全ページにされたら、気が滅入るどころの話ではない。&lt;br /&gt;&lt;br /&gt;とはいえPukiwikiページでブックマークレットを紹介したいニーズもあるので、比較的安全な「ブックマークレット用のリンクを別サイトに表示する」という方法を考えてみた。&lt;br /&gt;&lt;br /&gt;　ブックマークレットを紹介したい人は、上記サイトに&lt;b&gt;タイトル&lt;/b&gt;と&lt;b&gt;1行のスクリプト&lt;/b&gt;を入力し、「PukiWiki用リンクの作成」ボタンを押すと[[タイトル&gt;上記サイトのURL?パラメータ]]のようなブランケット形式のリンクを作成し、それを自分のページに張ることで、読者にブックマークレットのリンクを示すことができる。&lt;br /&gt;　読者が張られたリンクをクリックすると、紹介したいブックマークレットのリンクが上記サイトに表示されるというものだ。&lt;br /&gt;&lt;br /&gt;読者がリンクをクリックすると下記のようなページが表示される。&lt;br /&gt;このページで実際のブックマークレットのリンクと、確認用に整形されたスクリプトと、お気に入りに登録する方法を確認することができる。&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_7iGXa5ZU36s/TR1S-FneXaI/AAAAAAAAABw/0MywqCN2pic/s1600/ss1.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="194" width="320" src="http://2.bp.blogspot.com/_7iGXa5ZU36s/TR1S-FneXaI/AAAAAAAAABw/0MywqCN2pic/s320/ss1.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;ブックマークレットのリンクの下にはリンク中のjavascriptを見やすく整形したものが表示されるので、読者はその内容を確認したのちに登録することが可能となります。&lt;br /&gt;&lt;br /&gt;javascriptを登録できて、このサイト自体のXSSのリスクはどうかという点を心配されるかも知れませんが、このサイトは上記の目的のみで使用されており、置かれているファイルもindex.htmlとjavascript整形用のbeautify.jsの2つだけとなっており、このサイトの改変などを行うことはできません。また、悪意のあるスクリプトを表示させることは可能ですが、このサイトでスクリプトを表示しても、ユーザがリンクをクリックしなければjavascriptは実行されないこと、ユーザは実行またはお気に入りに登録する前に、整形されたスクリプトの表示を確認できることで、リスクの低減になるかと考えています。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;サイトの使い方&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;(1)事前にブックマークレットとするjavascriptを準備し、お気に入りのタイトルを決めておきます。&lt;br /&gt;(2)サイト &lt;a href="http://bookmarklet.dip.jp/"&gt;http://bookmarklet.dip.jp/&lt;/a&gt; を開きます。&lt;br /&gt;(3)「お気に入りタイトル」と「ブックマークレット用1行のjavascript」を入力し、「PukiWiki用リンク作成」を押す&lt;br /&gt;※ここで&lt;a href="http://mashiki-memo.blogspot.com/2010/12/javascriptjavascript_30.html" title="試したことメモ: Javascriptで、Javascriptが文法的に正しいか確認する"&gt;javascriptの簡単なチェック&lt;/a&gt;を行い、問題があればメッセージが表示されます。&lt;br /&gt;(4)「確認用整形済みコード」で入力したjavascriptが意図したものか確認し、問題がなければ、「pukiwiki用リンク」に表示されたリンク文字列をコピーします。&lt;br /&gt;(5)編集したいpukiwikiページを編集モードで開き、張り付けて使ってください。&lt;br /&gt;(6)張り付けたリンクが正しく動くか確認する&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_7iGXa5ZU36s/TR6jWJJsFHI/AAAAAAAAAB4/8SoZlRiYIAc/s1600/ss2.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="320" width="282" src="http://1.bp.blogspot.com/_7iGXa5ZU36s/TR6jWJJsFHI/AAAAAAAAAB4/8SoZlRiYIAc/s320/ss2.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4530875953866513005-8110789001266206326?l=mashiki-memo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mashiki-memo.blogspot.com/feeds/8110789001266206326/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://mashiki-memo.blogspot.com/2010/12/pukiwiki.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4530875953866513005/posts/default/8110789001266206326'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4530875953866513005/posts/default/8110789001266206326'/><link rel='alternate' type='text/html' href='http://mashiki-memo.blogspot.com/2010/12/pukiwiki.html' title='Pukiwikiでブックマークレットを紹介できるようにする'/><author><name>mashiki</name><uri>http://www.blogger.com/profile/05693139459731866783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_7iGXa5ZU36s/TR1S-FneXaI/AAAAAAAAABw/0MywqCN2pic/s72-c/ss1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4530875953866513005.post-3564998660828253949</id><published>2010-12-30T16:30:00.006+09:00</published><updated>2010-12-30T16:58:29.189+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><title type='text'>Javascriptで、Javascriptが文法的に正しいか確認する</title><content type='html'>以下のような関数で、引数の文字列がJavascriptとして正しいか確認できます。&lt;br /&gt;正しい場合false、何か間違いがあれば簡単なエラーメッセージを返します。&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;// スクリプトに文法エラーがあるか&lt;br /&gt;function checkScript(script) {&lt;br /&gt;  var ret = false;&lt;br /&gt;  try{&lt;br /&gt;    eval('if(0){'+script+'}');&lt;br /&gt;  } catch(e){&lt;br /&gt;    ret = e.message;&lt;br /&gt;  }&lt;br /&gt;  return ret;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;上記関数は、スクリプトを実行しないように「if(0){}」を付けて実行し、エラーがあるかチェックします。渡されたスクリプトは結局実行されないので、ランタイムエラーの確認はできません。&lt;br /&gt;&lt;br /&gt;Textareaでデータとしてjavascriptを入力させたい時などに役に立つかと思います。&lt;br /&gt;&lt;br /&gt;ブラウザをFireFoxに限れば、少しコードは複雑になりますが、エラーの発生した行番号も取得することが可能です。少々トリッキーですが、tryの前でエラーオブジェクトをnewしてその行番号を調べることにより、evalの行番号を求め、catch中でeのエラー行の行番号から、evalの行番号を引いた結果に１を足したものが、入力スクリプトのエラー行になります。残念ながらIEではエラーオブジェクトから行番号が取得できないようです。&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;// スクリプトに文法エラーがあるか(行番号付き)&lt;br /&gt;function checkScript(scr) {&lt;br /&gt; var ret = false;&lt;br /&gt; if (!window._lineEval) _lineEval=(new Error()).lineNumber+2 || -1;&lt;br /&gt; try{&lt;br /&gt;  eval('if(0){'+scr+'}');&lt;br /&gt; } catch(e){&lt;br /&gt;  ret = {&lt;br /&gt;   line:(e.lineNumber?e.lineNumber-_lineEval+1:-1),&lt;br /&gt;   msg:e.message&lt;br /&gt;  };&lt;br /&gt; }&lt;br /&gt; return ret;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4530875953866513005-3564998660828253949?l=mashiki-memo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mashiki-memo.blogspot.com/feeds/3564998660828253949/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://mashiki-memo.blogspot.com/2010/12/javascriptjavascript_30.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4530875953866513005/posts/default/3564998660828253949'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4530875953866513005/posts/default/3564998660828253949'/><link rel='alternate' type='text/html' href='http://mashiki-memo.blogspot.com/2010/12/javascriptjavascript_30.html' title='Javascriptで、Javascriptが文法的に正しいか確認する'/><author><name>mashiki</name><uri>http://www.blogger.com/profile/05693139459731866783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4530875953866513005.post-3508761671590714119</id><published>2010-12-30T11:49:00.002+09:00</published><updated>2010-12-30T11:53:46.658+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><title type='text'>Javascriptで、Javascriptを整形する</title><content type='html'>下記のページでJavascriptを整形できる。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://jsbeautifier.org/"&gt;http://jsbeautifier.org/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Javascirptを整形してくれるサイトはよくあるが、このサイトはそれをjavascriptで行っている。&lt;br /&gt;サイトに行くといろいろなjavascriptがscriptタグで読み込まれるが、&lt;br /&gt;&lt;br /&gt;「&lt;a href="http://jsbeautifier.org/beautify.js"&gt;http://jsbeautifier.org/beautify.js&lt;/a&gt;」が整形のエンジンのようだ。&lt;br /&gt;&lt;br /&gt;ソースのコメントを見てみると、使いたければ自由に使っていいと書いてある&lt;br /&gt;&lt;blockquote&gt;JS Beautifier&lt;br /&gt;---------------&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Written by Einar Lielmanis, &lt;einar@jsbeautifier.org&gt;&lt;br /&gt;&lt;blockquote&gt;http://jsbeautifier.org/&lt;/blockquote&gt;&lt;br /&gt;Originally converted to javascript by Vital, &lt;vital76@gmail.com&gt;&lt;br /&gt;&lt;br /&gt;You are free to use this in any way you want, in case you find this useful or working for you.&lt;/blockquote&gt;&lt;br /&gt;これは役に立ちそうだ。ソースのコメントには続けて使い方が書いてある&lt;br /&gt;&lt;blockquote&gt;Usage:&lt;br /&gt;&lt;blockquote&gt;js_beautify(js_source_text);&lt;br /&gt;js_beautify(js_source_text, options);&lt;/blockquote&gt;&lt;br /&gt;The options are:&lt;br /&gt;&lt;blockquote&gt;indent_size (default 4)          — indentation size,&lt;br /&gt;indent_char (default space)      — character to indent with,&lt;br /&gt;preserve_newlines (default true) — whether existing line breaks should be preserved,&lt;br /&gt;preserve_max_newlines (default unlimited) - maximum number of line breaks to be preserved in one chunk,&lt;br /&gt;indent_level (default 0)         — initial indentation level, you probably won't need this ever,&lt;br /&gt;&lt;br /&gt;space_after_anon_function (default false) — if true, then space is added between "function ()"&lt;br /&gt;(jslint is happy about this); if false, then the common "function()" output is used.&lt;br /&gt;braces_on_own_line (default false) - ANSI / Allman brace style, each opening/closing brace gets its own line.&lt;br /&gt;&lt;br /&gt;e.g&lt;br /&gt;&lt;br /&gt;js_beautify(js_source_text, {indent_size: 1, indent_char: '\t'});&lt;/blockquote&gt;&lt;/blockquote&gt;&lt;br /&gt;とりあえずは、そのまま呼んでみればいいのね。さっそく使ってみよう。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4530875953866513005-3508761671590714119?l=mashiki-memo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mashiki-memo.blogspot.com/feeds/3508761671590714119/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://mashiki-memo.blogspot.com/2010/12/javascriptjavascript.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4530875953866513005/posts/default/3508761671590714119'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4530875953866513005/posts/default/3508761671590714119'/><link rel='alternate' type='text/html' href='http://mashiki-memo.blogspot.com/2010/12/javascriptjavascript.html' title='Javascriptで、Javascriptを整形する'/><author><name>mashiki</name><uri>http://www.blogger.com/profile/05693139459731866783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4530875953866513005.post-3637391578687074268</id><published>2010-12-22T02:54:00.005+09:00</published><updated>2010-12-31T12:55:09.622+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='ブックマークレット'/><category scheme='http://www.blogger.com/atom/ns#' term='ExtJs'/><category scheme='http://www.blogger.com/atom/ns#' term='Pukiwiki'/><title type='text'>ブックマークレットでpukiwikiのtracker_listを並べ替え可能にする</title><content type='html'>&lt;u&gt;&lt;b&gt;ブックマークレットでpukiwikiのtracker_listを並べ替え可能にする&lt;/b&gt;&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;ブックマークレットでpukiwkiの編集中のDiffをとるサンプルを先日示したが、同様に表題のようなサンプルを作成してみた。前回同様、EUC/utf-8、PukiWiki/PukiWikiPlusなどのターゲットの環境を選ばないようにしています。&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_7iGXa5ZU36s/TRDpqRfQniI/AAAAAAAAABo/4klTfVYWX9E/s1600/aaa.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="183" src="http://4.bp.blogspot.com/_7iGXa5ZU36s/TRDpqRfQniI/AAAAAAAAABo/4klTfVYWX9E/s320/aaa.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;u&gt;&lt;b&gt;このブックマークレットでできること&lt;/b&gt;&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;pukiwiki及びPlusなどの派生版で、tracker_list、bugtrack_listで表示される表を、ExtJSのGridPanelで置き換えます&lt;/li&gt;&lt;li&gt; 置き換えられたGridPanelは、ヘッダ部をクリックすることにより、サーバと通信することなくソート可能です&lt;/li&gt;&lt;li&gt;同じくヘッダ部を操作することにより、列の表示/非表示切り替え、列幅の調整、列の表示位置変更等が可能です&lt;/li&gt;&lt;li&gt;「ページ名」というヘッダを持つ列は、単に文字列によるソートでなく、ページ名に現れる番号を意識して並べ替えられるので、「BugTrack1/100」は「BugTrack1/22」や「BugTrack1/9」よりも後に表示されます((並べ替えの際、スラッシュで区切られる文字列が数字のみである場合、5ケタになるよう前ゼロを付けたのちに比較されます。「BugTrack1/22」は「BugTrack1/00022」に、「ほげ/2/3」は「ほげ/00002/00003」に、比較時に内部的に変換されます))&lt;/li&gt;&lt;/ul&gt;&lt;b&gt;&lt;u&gt;サンプルの使い方&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;１．まず下記のURLをブックマーク(IEはお気に入り)に登録します。名前はなんでもいいです。(たとえば「pukiwiki Table」)&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: center;"&gt;&lt;a href="javascript:(function(){var%20e=document.createElement('script');e.charset='utf-8';e.src='http://www123.ddo.jp/tools/tracker00.js';document.body.appendChild(e);})()"&gt;javascript:(function(){var%20e=document.createElement('script');e.charset='utf-8';e.src='http://www123.ddo.jp/tools/tracker00.js';document.body.appendChild(e);})()&lt;/a&gt;&lt;br /&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;２．いつも使っているpukiwikiのサイトのBugTrackの画面等を開き、登録したブックマーク(お気に入り)を選びます。&lt;/li&gt;&lt;li&gt;３．すると、上記のようにテーブルがExtJSのgridに変換され、ソートなどの操作ができるようになります&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;u&gt;&lt;b&gt;ブックマークレットとスクリプトの解説&lt;/b&gt;&lt;/u&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;上記のブックマークは改行とインデントを入れ読みやすくすると&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;blockquote&gt;&amp;nbsp;javascript:(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; function(){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; var e=document.createElement('script');&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; e.charset='utf-8';&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; e.src='http://www123.ddo.jp/tools/tracker00.js';&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; document.body.appendChild(e);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;)()&lt;/blockquote&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;見ての通り、これでwww123.ddo.jpからtracker00.jsというスクリプトを読み込んで実行しているわけです。&lt;br /&gt;&lt;br /&gt;読み込んだtracker00.jsは下記のような動作をします。&lt;/div&gt;&lt;br /&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;ExtJS 3.3.1を動かすために必要なライブラリやスタイルシートを読み込む&lt;/li&gt;&lt;li&gt;最初のtrの要素がtdでなくすべてthであるtableタグについて下記を行います&lt;/li&gt;&lt;li&gt;&amp;nbsp;ヘッダー部の解析とデータストアの作成&lt;/li&gt;&lt;li&gt;データの読み込みとGridPanelの描画 &lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;span style="font-size: x-small;"&gt;下記ページにて確認をしています &lt;/span&gt;&lt;/div&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;&lt;span style="font-size: x-small;"&gt;&lt;a href="http://www.blogger.com/%20http://extwiki.sourceforge.jp/"&gt;extwiki&lt;/a&gt;(utf-8)&amp;nbsp; BugTrack1&lt;br /&gt;&amp;nbsp; &lt;a href="http://extwiki.sourceforge.jp/dev/index.php?cmd=read&amp;amp;page=BugTrack1"&gt;http://extwiki.sourceforge.jp/index.php?cmd=read&amp;amp;page=BugTrack1&lt;/a&gt;&lt;/span&gt; &lt;/li&gt;&lt;/ul&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;&lt;a href="http://pukiwiki.sourceforge.jp/"&gt;PukiWiki本家&lt;/a&gt;(utf-8) 質問箱5&lt;br /&gt;&amp;nbsp; &lt;span style="font-size: x-small;"&gt;&lt;a href="http://pukiwiki.sourceforge.jp/?%E8%B3%AA%E5%95%8F%E7%AE%B15"&gt;http://pukiwiki.sourceforge.jp/?%E8%B3%AA%E5%95%8F%E7%AE%B15&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: left;"&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size: x-small;"&gt;PukiWiki dev(EUC) BugTrack2&lt;/span&gt;&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="font-size: x-small;"&gt; &lt;a href="http://pukiwiki.sourceforge.jp/dev/?BugTrack2"&gt;http://pukiwiki.sourceforge.jp/dev/?BugTrack2&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size: x-small;"&gt;&lt;a href="http://pukiwiki.cafelounge.net/plus/"&gt;PukiWIkiPlus&lt;/a&gt;(utf-8) BugTrack&lt;br /&gt;&amp;nbsp; &lt;a href="http://pukiwiki.cafelounge.net/plus/?BugTrack"&gt;http://pukiwiki.cafelounge.net/plus/?BugTrack&lt;/a&gt;&amp;nbsp; &lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;u&gt;&lt;b&gt;セキュリティについて&lt;/b&gt;&lt;/u&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&lt;/span&gt; &lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;div style="text-align: left;"&gt;&lt;span style="font-size: small;"&gt;edit00.jsと同様なセキュリティのリスクがあります。理解したうえでお試しください。&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;u&gt;&lt;b&gt;tracker00.jsソースコード&lt;/b&gt;&lt;/u&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // tracker.js v 00 -- pukiwikiのTrackerの機能アップ&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Bookmarklet example&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp;&amp;nbsp; javascript:(function(){var%20e=document.createElement('script');e.charset='utf-8';e.src='http://www123.ddo.jp/tools/tracker00.js?';document.body.appendChild(e);})()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Copyright(c) 2010 mashiki&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // License: GPL version 3&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; (function(){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; var cf='http://extjs.cachefly.net/ext-3.3.1/';&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; addEl('style', {type:'text/css',innerHTML:'td {background-color:transparent}'});&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; addEl('link',{rel:'stylesheet',type:'text/css',href:cf+'resources/css/ext-all.css'});&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; addEl('script',{src:cf+'adapter/ext/ext-base.js'});&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; addEl('script',{src:cf+'ext-all.js'});&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; addEl('script',{src:cf+'examples/ux/TableGrid.js'});&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; function addEl(tag, cfg) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; var e=document.createElement(tag);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; for (var key in cfg) e[key]=cfg[key];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; document.body.appendChild(e);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; var id=setInterval(function(){&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if(window.Ext &amp;amp;&amp;amp; Ext.MessageBox){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; clearInterval(id);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; var ce = Ext.select('table');&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ce.each(function(tbl){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; var tr0 = tbl.select('tr', true).first();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; var hdrs = tr0.query('th');&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (hdrs.length&amp;gt;0 &amp;amp;&amp;amp; tr0.query("td").length===0 ) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; convertToGrid(tbl, hdrs);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; },true);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; },100);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; function convertToGrid(tbl, hdrs) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; var ct = tbl.insertSibling(),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; flds = [{name:'no'}],&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; cols = [];&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; for (var i=0, h; h=hdrs[i]; ++i) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; var text = h.innerHTML.replace(/&lt;a\s[^&gt;]+&amp;gt;(.+?)&amp;lt;\/a&amp;gt;/gi,'$1')&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; .replace(/&lt;br.+?&gt;\s*(:?↑|↓)\([\d]+\)/,''),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; name = 'tcol-' + i;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; var fld = {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; name: name,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; mapping: 'td:nth('+ (i+1) +')/@innerHTML'&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; };&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (text==='ページ名') {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; fld.sortType = function(val) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; var parts = val.replace(/&lt;a\s[^&gt;]+&amp;gt;(.+?)&amp;lt;\/a&amp;gt;/gi,'$1').split("/");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; for (var i=0,p; p=parts[i];++i) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (p.match(/^[\d]+$/)) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; parts[i]=String.leftPad(p, 5, '0')&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return parts.join('/');&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; flds.push(fld);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; cols.push({&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; header: text,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; dataIndex: name,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; width: h.offsetWidth,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; tooltip: h.title,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; align: 'left',&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; sortable: true&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; });&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; var ds = new Ext.data.Store({&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; reader: new Ext.data.XmlReader({&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; record: 'tbody tr'&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }, flds)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; });&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ds.loadData(tbl.dom);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; var r = ds.getAt(0);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (!(r.get(0))) ds.remove(r);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; i = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ds.each(function(r){r.set('no',++i)});&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ds.commitChanges();&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ct.setWidth(tbl.getWidth());&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; tbl.remove();&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; var grid = new Ext.grid.GridPanel({&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; stripeRows: true,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 'ds': ds,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 'cm': new Ext.grid.ColumnModel(cols),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 'sm': new Ext.grid.RowSelectionModel(),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; autoHeight: true,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; autoWidth: false,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; renderTo:ct&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; });&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; })();&lt;br /&gt;&lt;/a\s[^&gt;&lt;/br.+?&gt;&lt;/a\s[^&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4530875953866513005-3637391578687074268?l=mashiki-memo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mashiki-memo.blogspot.com/feeds/3637391578687074268/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://mashiki-memo.blogspot.com/2010/12/pukiwikitrackerlist.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4530875953866513005/posts/default/3637391578687074268'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4530875953866513005/posts/default/3637391578687074268'/><link rel='alternate' type='text/html' href='http://mashiki-memo.blogspot.com/2010/12/pukiwikitrackerlist.html' title='ブックマークレットでpukiwikiのtracker_listを並べ替え可能にする'/><author><name>mashiki</name><uri>http://www.blogger.com/profile/05693139459731866783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_7iGXa5ZU36s/TRDpqRfQniI/AAAAAAAAABo/4klTfVYWX9E/s72-c/aaa.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4530875953866513005.post-5182931007885790340</id><published>2010-12-20T23:44:00.011+09:00</published><updated>2010-12-31T12:57:32.798+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='ブックマークレット'/><category scheme='http://www.blogger.com/atom/ns#' term='ExtJs'/><category scheme='http://www.blogger.com/atom/ns#' term='Pukiwiki'/><title type='text'>ブックマークレットってすごい可能性を持っている　と思う</title><content type='html'>&lt;u&gt;&lt;b&gt;ブックマークレット&lt;/b&gt;&lt;/u&gt;&lt;br /&gt;Wikipedia&amp;nbsp; &lt;br /&gt;&lt;a href="http://ja.wikipedia.org/wiki/%E3%83%96%E3%83%83%E3%82%AF%E3%83%9E%E3%83%BC%E3%82%AF%E3%83%AC%E3%83%83%E3%83%88"&gt;http://ja.wikipedia.org/wiki/%E3%83%96%E3%83%83%E3%82%AF%E3%83%9E%E3%83%BC%E3%82%AF%E3%83%AC%E3%83%83%E3%83%88&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;ブックマークレットって実は最近まで注目していなかったのですが、フォームへの半自動入力で使えないかと、知り合いに頼まれて少し調べてみました。&lt;br /&gt;&lt;br /&gt;ブックマークレットはブラウザのURL入力欄に書ける1行のjavascriptをブックマークしたものです。たった1行ですが、javascriptなのでDOM操作や、ajax通信などもできます。DOM操作ができるということは、ボタンを表示したり、scriptタグを生成してjavascriptのライブラリを読み込んだり、linkタグを生成してスタイルシートを読み込んだりもできるわけです。&lt;br /&gt;「自分が管理していないが、よく利用しているちょっと不便なサイト」で、ブラウザ上にあるコンテンツを利用していろいろなことができます。&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;フォームの入力を自動で行う&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;入力のインターフェースを変えたり、入力のチェックを行う&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;自分の見やすいように表示を並べ替える&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;他のサイトの情報と合わせて加工して表示する&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;「javascriptを使えばそんなのできるの当たり前じゃん」と思われますが、自分の管理しているわけでないwebサイトのカスタマイズができちゃうわけです。&lt;br /&gt;&lt;br /&gt;サンプルとして、pukiwikiのページの編集で、編集中文書の編集前との差分をExtJSのWindowで表示するブックマークレットを作成してみました。これは標準のpukiwikiにはない機能です。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;サンプルの使い方&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;１．まず下記のURL?をブックマーク(IEはお気に入り)に登録します。名前はなんでもいいです。(たとえば「pukiwiki Diff」)&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: center;"&gt;&lt;a href="javascript:(function(){var%20e=document.createElement('script');e.charset='utf-8';e.src='http://www123.ddo.jp/tools/edit00.js';document.body.appendChild(e);})()"&gt;javascript:(function(){var%20e=document.createElement('script');e.charset='utf-8';e.src='http://www123.ddo.jp/tools/edit00.js';document.body.appendChild(e);})()&lt;/a&gt;&lt;br /&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;２．いつも使っているpukiwikiのサイトのページを編集中に、登録したブックマーク(お気に入り)を選びます。&lt;/li&gt;&lt;li&gt;３．すると、「ページの更新」ボタンの横に「Diff」ボタンが表示されます。&lt;/li&gt;&lt;li&gt;４．「Diff」ボタンを押すと、テキストエリアに何も変更を加えていない場合、「変更箇所はありません」とメッセージが表示され、変更があった場合、次のように変更点が表示されます &lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;ul&gt;&lt;/ul&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_7iGXa5ZU36s/TQ90qQ3f74I/AAAAAAAAABk/KpJDP0KQJlI/s1600/ss1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="233" src="http://2.bp.blogspot.com/_7iGXa5ZU36s/TQ90qQ3f74I/AAAAAAAAABk/KpJDP0KQJlI/s320/ss1.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;※このブックマークレットサンプルは、本家のPukiWikiや、派生版のPukiWikiPlus等で、使用可能です。utf-8、EUCのどちらで構築されていても動くと思います。&lt;br /&gt;&lt;ul&gt;&lt;/ul&gt;&lt;br /&gt;&lt;u&gt;&lt;b&gt;ブックマークレットとスクリプトの解説&lt;/b&gt;&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;見やすさのために改行とインデントを入れると以下のようになります&lt;br /&gt;&lt;blockquote&gt;&amp;nbsp;javascript:(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; function(){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; var e=document.createElement('script');&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; e.charset='utf-8';&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; e.src='http://www123.ddo.jp/tools/edit00.js';&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; document.body.appendChild(e);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;)()&lt;/blockquote&gt;見た通り、これでwww123.ddo.jpからedit.jsというスクリプトを読み込んで実行しているわけです。&lt;br /&gt;&lt;br /&gt;読み込んだedit00.jsは下記のような動作をします。&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;ExtJS 3.3.1を動かすために必要なライブラリやスタイルシートを読み込む&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;'write'という名前のサブミットボタン(ページの更新)があることを確認する&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;'wirte'ボタンの左に、押されたらdo_diffを実行するような「Diff」ボタンを生成する。&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;do_diffはフォーム中の'original'と'msg'という、フィールドの値を比べ結果を表示する&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;edit00.jsのソースは最後に添付します。まあ、http://www123.ddo.jp/tools/edit00.js をDLしソースを確認すればその通りなのですが。&lt;br /&gt;&lt;br /&gt;&lt;u&gt;&lt;b&gt;セキュリティについて&lt;/b&gt;&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;http://www123.ddo.jp/tools/edit00.js を信じない方は賢明です。サイトが誰かに乗っ取られ、悪意のあるロジックを混入される恐れはいつでもあります。edit00.jsを信頼できるサイトにコピーして使用いただいて結構です。GPL ver3としますので、適当に改変してください。便利な機能を追加したなら公開していただくとありがたいです。&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;edit00.dsで、cacheflyのサイトからExtJSのライブラリを読み込んでいます。より安全に使いたければ、上記と同様に自分の制御下のサーバに入れることを検討してください。&lt;/li&gt;&lt;/ul&gt;&lt;u&gt;&lt;b&gt;edit00.js ソースコード&lt;/b&gt;&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // edit.js v 00 -- pukiwikiの編集を支援&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;// Bookmarklet example&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;//&amp;nbsp;&amp;nbsp; javascript:(function(){var%20e=document.createElement('script');e.charset='utf-8';e.src='http://www123.ddo.jp/tools/edit00.js?';document.body.appendChild(e);})()&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;// Copyright(c) 2010 mashiki&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;// License: GPL version 3&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;(function(){&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;var cf='http://extjs.cachefly.net/ext-3.3.1/';&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;addEl('style', {type:'text/css',innerHTML:'td {background-color:transparent}'});&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;addEl('link',{rel:'stylesheet',type:'text/css',href:cf+'resources/css/ext-all.css'});&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;addEl('script',{src:cf+'adapter/ext/ext-base.js'});&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;addEl('script',{src:cf+'ext-all.js'});&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;function addEl(tag, cfg) {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;var e=document.createElement(tag);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;for (var key in cfg) e[key]=cfg[key];&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;document.body.appendChild(e);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;var id=setInterval(function(){&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;if(window.Ext &amp;amp;&amp;amp; Ext.MessageBox){&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;clearInterval(id);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;var pv = document.getElementsByName('write');&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;if (pv[0]) {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;pv = pv[0];&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;} else {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;Ext.Msg.alert(&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'pukiwiki編集支援機能',&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'「ページの更新」ボタンが見つかりません。&lt;br /&gt;'&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;+'この機能はpukiwikiの編集画面でご使用ください'&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;return;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;var df = document.createElement("input");&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;Ext.apply(df, {type:"button",value:"Diff",onclick:diff_click});&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;Ext.get(df).insertBefore(pv);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;},100);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;function diff_click() {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;var msg = document.getElementsByName('msg');&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;var org = document.getElementsByName('original');&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;if (msg[0] &amp;amp;&amp;amp; org[0]) {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;msg = msg[0].value;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;org = org[0].value;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;} else {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;Ext.Msg.alert(&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'pukiwiki編集支援機能',&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'"msg"または"original" フィールドが見つかりません。&lt;br /&gt;'&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;+'この機能はpukiwikiの編集画面でご使用ください'&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;return;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;if (msg===org) {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;Ext.Msg.alert('pukiwiki編集支援機能', '変更箇所はありません');&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;} else {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;var res = diff(&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;org.replace(/^\n+|\n+$/g,'').split("\n"),&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;msg.replace(/^\n+|\n+$/g,'').split("\n")&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;// 結果加工&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;var map = {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'-':{edit:'－',style:'background-color:#FFDDDD;'},&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'+':{edit:'＋',style:'background-color:#DDDDFF;'},&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;'=':{edit:'　',style:'background-color:#FFFFFF;'}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;var table = ['&lt;br /&gt;&lt;table cellspacing="1"&gt;']; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;for (var i=0; d=res[i]; ++i) { &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;  &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;table.push("&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;"+map[d.edit].edit+"&lt;/td&gt;" &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;+ "&lt;td&gt;"&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;+ d.arr[d.line].replace(//g,"&amp;gt;")&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;+ "&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;"); &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;} &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;table.push('&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;');&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;var win = new Ext.Window({&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;title:'pukiwiki編集支援機能',&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;html: table.join(''),&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;width:400,&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;height:400,&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;autoScroll:true,&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;closeAction:'close',&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;plain: true,&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;buttons: [{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;text: 'Close',&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;handler: function(){&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;win.close();&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;}]&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;});&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;win.show();&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;function diff(arr1, arr2, rev) {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;var len1=arr1.length,&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;len2=arr2.length;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;// len1 &amp;lt;= len2でなければひっくり返す&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;if (!rev &amp;amp;&amp;amp; len1&amp;gt;len2)&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;return diff(arr2, arr1, true);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;// 変数宣言及び配列初期化&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;var k, p,&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;offset=len1+1,&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;delta =len2-len1,&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;fp=[], ed=[];&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;for (p=0; p&lt;len1+len2+3; ++p)="" {=""&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;fp[p] = -1;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;ed[p] = [];&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;// メインの処理&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;for (p=0; fp[delta + offset] != len2; p++) {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;for(k = -p&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; k &amp;lt;&amp;nbsp; delta; ++k) snake(k);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;for(k = delta + p; k &amp;gt;= delta; --k) snake(k);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;return ed[delta + offset];&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;// snake&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;function snake(k) {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;var x, y, e0, o,&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;y1=fp[k-1+offset],&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;y2=fp[k+1+offset];&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;if (y1&amp;gt;=y2) { // 経路選択&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;y = y1+1;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;x = y-k;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;e0 = ed[k-1+offset];&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;o = {edit:rev?'-':'+',arr:arr2, line:y-1}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;} else {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;y = y2;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;x = y-k;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;e0 = ed[k+1+offset];&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;o = {edit:rev?'+':'-',arr:arr1, line:x-1}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;// 選択した経路を保存&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;if (o.line&amp;gt;=0) ed[k+offset] = e0.concat(o);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;var max = len1-x&amp;gt;len2-y?len1-x:len2-y;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;for (var i=0; i&lt;max &amp;amp;&amp;amp;="" ++i)="" arr1[x+i]="==arr2[y+i];" {=""&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;// 経路追加&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;ed[k+offset].push({edit:'=', arr:arr1, line:x+i});&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;fp[k + offset] = y+i;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;})();&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/max&gt;&lt;/len1+len2+3;&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4530875953866513005-5182931007885790340?l=mashiki-memo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mashiki-memo.blogspot.com/feeds/5182931007885790340/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://mashiki-memo.blogspot.com/2010/12/blog-post.html#comment-form' title='1 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4530875953866513005/posts/default/5182931007885790340'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4530875953866513005/posts/default/5182931007885790340'/><link rel='alternate' type='text/html' href='http://mashiki-memo.blogspot.com/2010/12/blog-post.html' title='ブックマークレットってすごい可能性を持っている　と思う'/><author><name>mashiki</name><uri>http://www.blogger.com/profile/05693139459731866783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_7iGXa5ZU36s/TQ90qQ3f74I/AAAAAAAAABk/KpJDP0KQJlI/s72-c/ss1.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4530875953866513005.post-4393045387089307419</id><published>2010-12-19T23:39:00.008+09:00</published><updated>2012-01-18T11:22:32.440+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><title type='text'>javascriptでdiff実装</title><content type='html'>高速とされるO(NP)のアルゴリズムをベースに 、javascriptで実装してみた。&lt;br /&gt;[1]E.W.Myers, "An O(ND) &lt;span class="highlight"&gt;diff&lt;/span&gt;erence algorithm and its variations", Algorithmixa, 1 (1986), pp.251-266 に論文を日本語に訳したものが載っており、参考になりました。&lt;br /&gt;&amp;nbsp;&lt;a href="http://hp.vector.co.jp/authors/VA007799/viviProg/doc5.htm"&gt;http://hp.vector.co.jp/authors/VA007799/viviProg/doc5.htm&lt;/a&gt;&lt;br /&gt;上記の論文中のコードは「ＳＥＤ Shotest Edit Distance」の値を求めるだけで、&lt;br /&gt;Diffの結果をどう組み立て格納していくかについてと、fpという配列の初期値を&lt;br /&gt;何で埋めればよいのかが分からず、 かなり苦労しました。&lt;br /&gt;&lt;br /&gt;アルゴリズムは上記のO(NP)そのままですが、javascriptで実装していく中で、&lt;br /&gt;メイン処理とした親関数内でのループの部分はかなりすっきりさせ、&lt;br /&gt;snakeへのパラメータは整数kを1つだけとする、snakeは値を返さない、等、&lt;br /&gt;サンプルコードの原形はほとんどなくなってしまった感じです。 &lt;br /&gt;&lt;br /&gt;また、O(NP)はarr1.lengthがarr2.length以下であることが前提なのですが、&lt;br /&gt;最初の段階でパラメータをチェックし、arr1.lengthがarr2.lengthより大きければ、&lt;br /&gt;順番をひっくり返して、自分自身を呼ぶことにより、前提を満たすようにしました。 &lt;br /&gt;&lt;br /&gt;動くサンプルページ &lt;a href="http://www123.ddo.jp/tools/diff.html"&gt;http://www123.ddo.jp/tools/diff.html&lt;/a&gt;&lt;br /&gt;&lt;pre class='brush: js'&gt;&lt;br /&gt;&lt;br /&gt;//@license http://www.opensource.org/licenses/mit-license.html MIT License&lt;br /&gt;//@author Mashiki&lt;br /&gt;//@see http://hp.vector.co.jp/authors/VA007799/viviProg/doc5.htm&lt;br /&gt;function diff(arr1, arr2, rev) {&lt;br /&gt;    var len1=arr1.length,&lt;br /&gt;        len2=arr2.length;&lt;br /&gt;    // len1 &amp;lt;= len2でなければひっくり返す&lt;br /&gt;    if (!rev &amp;&amp; len1&gt;len2)&lt;br /&gt;        return diff(arr2, arr1, true);&lt;br /&gt;    // 変数宣言及び配列初期化&lt;br /&gt;    var k, p,&lt;br /&gt;        offset=len1+1,&lt;br /&gt;        delta =len2-len1,&lt;br /&gt;        fp=[], ed=[];&lt;br /&gt;    for (p=0; p&amp;lt;len1+len2+3; ++p) {&lt;br /&gt;        fp[p] = -1;&lt;br /&gt;        ed[p] = [];&lt;br /&gt;    }&lt;br /&gt;    // メインの処理&lt;br /&gt;    for (p=0; fp[delta + offset] != len2; p++) {&lt;br /&gt;        for(k = -p       ; k &amp;lt;  delta; ++k) snake(k);&lt;br /&gt;        for(k = delta + p; k &gt;= delta; --k) snake(k);&lt;br /&gt;    }&lt;br /&gt;    return ed[delta + offset];&lt;br /&gt;&lt;br /&gt;    // snake&lt;br /&gt;    function snake(k) {&lt;br /&gt;        var x, y, e0, o,&lt;br /&gt;            y1=fp[k-1+offset],&lt;br /&gt;            y2=fp[k+1+offset];&lt;br /&gt;        if (y1&gt;=y2) { // 経路選択&lt;br /&gt;            y = y1+1;&lt;br /&gt;            x = y-k;&lt;br /&gt;            e0 = ed[k-1+offset];&lt;br /&gt;            o = {edit:rev?'-':'+',arr:arr2, line:y-1}&lt;br /&gt;        } else {&lt;br /&gt;            y = y2;&lt;br /&gt;            x = y-k;&lt;br /&gt;            e0 = ed[k+1+offset];&lt;br /&gt;            o = {edit:rev?'+':'-',arr:arr1, line:x-1}&lt;br /&gt;        }&lt;br /&gt;        // 選択した経路を保存&lt;br /&gt;        if (o.line&gt;=0) ed[k+offset] = e0.concat(o);&lt;br /&gt;&lt;br /&gt;        var max = len1-x&gt;len2-y?len1-x:len2-y;&lt;br /&gt;        for (var i=0; i&amp;lt;max &amp;&amp; arr1[x+i]===arr2[y+i]; ++i) {&lt;br /&gt;            // 経路追加&lt;br /&gt;            ed[k+offset].push({edit:'=', arr:arr1, line:x+i});&lt;br /&gt;        }&lt;br /&gt;        fp[k + offset] = y+i;&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4530875953866513005-4393045387089307419?l=mashiki-memo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mashiki-memo.blogspot.com/feeds/4393045387089307419/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://mashiki-memo.blogspot.com/2010/12/javascriptdiff.html#comment-form' title='3 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4530875953866513005/posts/default/4393045387089307419'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4530875953866513005/posts/default/4393045387089307419'/><link rel='alternate' type='text/html' href='http://mashiki-memo.blogspot.com/2010/12/javascriptdiff.html' title='javascriptでdiff実装'/><author><name>mashiki</name><uri>http://www.blogger.com/profile/05693139459731866783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4530875953866513005.post-1421859496766020951</id><published>2010-09-19T21:47:00.003+09:00</published><updated>2010-09-19T22:05:31.171+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='ExtJs'/><title type='text'>javascriptで配列やオブジェクトの中身をまとめて確認する</title><content type='html'>IEは８でも使えないが、FireFoxを使って開発/デバッグいる場合に、いちいちステップ実行を設定して変数の内容を確認しなくても、console.dir(変数)でサクッとFireBugである時点での変数の値を確認できる。&lt;br /&gt;下記はExtJSのAPIドキュメント内のExt.Ajax.requestのサンプルだが、&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Ext.Ajax.request({&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; url: 'aaa/bbb',&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; success: function(response, opts) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var obj = Ext.decode(response.responseText);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b&gt;&lt;span style="color: blue;"&gt;console.dir(obj);&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; },&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; failure: function(response, opts) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b style="color: blue;"&gt;console.log('server-side failure with status code ' + response.status);&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }); &lt;br /&gt;と、記述するだけでお手軽にFireBugのコンソールから確認できる。&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_7iGXa5ZU36s/TJYICxfDUdI/AAAAAAAAABc/EPhJqx1k4GM/s1600/ss1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_7iGXa5ZU36s/TJYICxfDUdI/AAAAAAAAABc/EPhJqx1k4GM/s320/ss1.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="color: black;"&gt;&amp;nbsp;また、 console.log(文字列)でコンソールに文字列を表示可能となる。alertの代わりに使えば、実行のタイミングを変えずにデバッグすることができるので、こっちも大いに利用したい。って何年か前に思ったけどあまり使っていないなあ。FireFoxでしか使えないこと(IEでしか発生しない問題なんてのもよくある)と、僕がすぐ忘れてしまうことが原因?!　と、ここにメモっておこう。&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4530875953866513005-1421859496766020951?l=mashiki-memo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mashiki-memo.blogspot.com/feeds/1421859496766020951/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://mashiki-memo.blogspot.com/2010/09/javascript.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4530875953866513005/posts/default/1421859496766020951'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4530875953866513005/posts/default/1421859496766020951'/><link rel='alternate' type='text/html' href='http://mashiki-memo.blogspot.com/2010/09/javascript.html' title='javascriptで配列やオブジェクトの中身をまとめて確認する'/><author><name>mashiki</name><uri>http://www.blogger.com/profile/05693139459731866783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_7iGXa5ZU36s/TJYICxfDUdI/AAAAAAAAABc/EPhJqx1k4GM/s72-c/ss1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4530875953866513005.post-8424953570776682462</id><published>2010-07-22T01:40:00.001+09:00</published><updated>2010-07-22T01:42:05.937+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Blogger'/><title type='text'>Blogger に Google Analytics でアクセス解析するするためのタグを埋め込む</title><content type='html'>そのものズバリの下記のサイトがあった&lt;br /&gt;「Blogger  を Google Analytics でアクセス解析する」&lt;br /&gt;&lt;a href="http://customize-your-blogger.blogspot.com/2010/07/how-to-add-google-analytics-code.html"&gt;http://customize-your-blogger.blogspot.com/2010/07/how-to-add-google-analytics-code.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4530875953866513005-8424953570776682462?l=mashiki-memo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mashiki-memo.blogspot.com/feeds/8424953570776682462/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://mashiki-memo.blogspot.com/2010/07/blogger-google-analytics.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4530875953866513005/posts/default/8424953570776682462'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4530875953866513005/posts/default/8424953570776682462'/><link rel='alternate' type='text/html' href='http://mashiki-memo.blogspot.com/2010/07/blogger-google-analytics.html' title='Blogger に Google Analytics でアクセス解析するするためのタグを埋め込む'/><author><name>mashiki</name><uri>http://www.blogger.com/profile/05693139459731866783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4530875953866513005.post-4359234569129502836</id><published>2010-07-20T10:17:00.003+09:00</published><updated>2010-07-20T10:33:18.591+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='ExtJs'/><title type='text'>ExtJS3.2.1 のマニュアルを改造しサンプルコードを検索</title><content type='html'>ExtJSのマニュアルをみていて、あるクラスの具体的なサンプルを見たくなることが多々ある。&lt;br /&gt;マニュアルには最低限の情報しか載っていないことが多く、サンプルはたくさんの例が用意されて&lt;br /&gt;いるのだが、見た目が派手なクラス以外、探しにくいこともおおい。&lt;br /&gt;&lt;br /&gt;そこで、マニュアルからサンプルコードを検索できるような改造をマニュアルページに仕込んでみた。&lt;br /&gt;&lt;a href="http://www123.ddo.jp/ext-3.2.1/docs/"&gt;http://www123.ddo.jp/ext-3.2.1/docs/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;マニュアルで左側のツリーでクラスを選択したとき、下の画像のような&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_7iGXa5ZU36s/TET7JuF7GnI/AAAAAAAAAAk/AJzI-mP9yhg/s1600/ss1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_7iGXa5ZU36s/TET7JuF7GnI/AAAAAAAAAAk/AJzI-mP9yhg/s320/ss1.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;「SearchExample」というボタンが表示される。サンプルを見たいクラスでこのボタンを押すと、下の画像のような、ファイルパスと行数とヒットした行の内容からなるリストが表示される。&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_7iGXa5ZU36s/TET71oTETrI/AAAAAAAAAAs/LqQVQdI7UKs/s1600/ss2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_7iGXa5ZU36s/TET71oTETrI/AAAAAAAAAAs/LqQVQdI7UKs/s320/ss2.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;このリストを右クリックすると、「Open」と「Download」と選択するメニューが表示されるので、ブラウザ上で軽く見たい時は「Open」を、エディタなどでじっくり見たい場合は「Download」 を選べばよい&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4530875953866513005-4359234569129502836?l=mashiki-memo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mashiki-memo.blogspot.com/feeds/4359234569129502836/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://mashiki-memo.blogspot.com/2010/07/extjs321.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4530875953866513005/posts/default/4359234569129502836'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4530875953866513005/posts/default/4359234569129502836'/><link rel='alternate' type='text/html' href='http://mashiki-memo.blogspot.com/2010/07/extjs321.html' title='ExtJS3.2.1 のマニュアルを改造しサンプルコードを検索'/><author><name>mashiki</name><uri>http://www.blogger.com/profile/05693139459731866783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_7iGXa5ZU36s/TET7JuF7GnI/AAAAAAAAAAk/AJzI-mP9yhg/s72-c/ss1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4530875953866513005.post-9157112445498120971</id><published>2010-07-07T00:20:00.014+09:00</published><updated>2010-07-18T07:11:37.827+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='ハングル'/><title type='text'>ハングルを入力する</title><content type='html'>ちょうど去年の今頃、DSiで「学研ハングル三昧DS」を通勤中に勉強していました。結局、韓国語を覚えるのには挫折してしまいましたが、その時、韓国語のIMEなど入っていないPCで、ブラウザだけでハングルを入力し、日本語に翻訳するためのjavascirptを作りました。最近、手を入れ使いやすくしましたので、リンクと使い方を簡単に説明します。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="javascript:var%20x=window.open(&amp;quot;http://www123.ddo.jp/tools/hangul-input.html&amp;quot;,&amp;quot;hangulinput&amp;quot;,&amp;quot;width=354,height=208,toolbar=0,location=0,directories=0,status=0,menubar=0&amp;quot;,false)"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_7iGXa5ZU36s/TEIYL7WIIPI/AAAAAAAAAAc/ug4CjCOqIbM/s320/ss2.png" /&gt;&lt;br /&gt;ハングル入力ツール表示&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;１．まず、上記のリンクをクリックし、ハングル入力ツールのウインドウをポップアップで開きます&lt;br /&gt;２．①子音ボタン、②母音ボタン、③パッチムボタン(必要なら)の順にボタンを押していくと、④のテキストフィールドにハングル文字が入力できます&lt;br /&gt;３．入力中に、スペースキー、数字、記号などキーボードから自由に入力することができます。&lt;br /&gt;４．④「削除」ボタン(もしくはバックスペース)を押すことで、入力中の文字、もしくは最後の1文字を削除することができます&lt;br /&gt;５．単語もしくは文章が入力できたら、テキストフィールドのハングル文字を切り取って、使用するか、⑥の「翻訳」ボタンを押し、Googleでの翻訳結果を表示することができます&lt;br /&gt;※韓国語翻訳はまだ&lt;a href="http://translate.google.co.jp/?hl=ja&amp;tab=wT#ko|ja|"&gt;Google翻訳&lt;/a&gt;より&lt;a href="http://www.excite.co.jp/world/korean/"&gt;Excite翻訳&lt;/a&gt;のほうが質が高い気がしますが、UTF-8で渡せるのでGoogleを翻訳のサイトとして指定しています&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4530875953866513005-9157112445498120971?l=mashiki-memo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mashiki-memo.blogspot.com/feeds/9157112445498120971/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://mashiki-memo.blogspot.com/2010/07/blog-post_07.html#comment-form' title='1 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4530875953866513005/posts/default/9157112445498120971'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4530875953866513005/posts/default/9157112445498120971'/><link rel='alternate' type='text/html' href='http://mashiki-memo.blogspot.com/2010/07/blog-post_07.html' title='ハングルを入力する'/><author><name>mashiki</name><uri>http://www.blogger.com/profile/05693139459731866783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_7iGXa5ZU36s/TEIYL7WIIPI/AAAAAAAAAAc/ug4CjCOqIbM/s72-c/ss2.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4530875953866513005.post-1683522245413844085</id><published>2010-07-06T02:15:00.009+09:00</published><updated>2010-07-06T08:45:40.534+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='coreserver'/><title type='text'>xrea+ と coreserver の仕様比較</title><content type='html'>&lt;b&gt;「core-mini」契約前に「XREA Plus」最終的な比較&lt;/b&gt;&lt;br /&gt;　・初年度は合計600円高くなる&lt;br /&gt;　・スペックは少しづつ高くなっている&lt;br /&gt;「XREA Plus」でスクリプトの実行速度以外制限に不満があったわけではないが、core-miniに変えてみるか&lt;br /&gt;&lt;table border=1 cellspacing=0&gt;&lt;tr&gt;&lt;th&gt;プラン&lt;th&gt;XREA Free  &lt;th&gt;XREA Plus  &lt;th&gt;Mail &amp; Backup&lt;th&gt;CORE MINI  &lt;th&gt;CORE A  &lt;th&gt;CORE B  &lt;br /&gt;&lt;tr&gt;&lt;th&gt;初期費用 &lt;td&gt;無料 &lt;td&gt;無料 &lt;td&gt;無料&lt;td&gt;500円 &lt;td&gt;1,000円 &lt;td&gt;2,000円 &lt;br /&gt;&lt;tr&gt;&lt;th&gt;月額 &lt;td&gt;無料 &lt;td&gt;400円 &lt;td&gt;200円&lt;td&gt;400円 &lt;td&gt;500円 &lt;td&gt;990円&lt;br /&gt;&lt;tr&gt;&lt;th&gt;年額 &lt;td&gt;無料 &lt;td&gt;2,400円&lt;td&gt;990円&lt;td&gt;2,500円&lt;td&gt;5,000円&lt;td&gt;9,900円&lt;br /&gt;&lt;tr&gt;&lt;th&gt;お試し期間 &lt;td&gt;- &lt;td&gt;7日 &lt;td&gt;7日&lt;td&gt;5日 &lt;td&gt;5日 &lt;td&gt;5日&lt;br /&gt;&lt;tr&gt;&lt;th colspan=7&gt;　容量・転送量&lt;br /&gt;&lt;tr&gt;&lt;th&gt;ディスク容量 &lt;td&gt;50MB &lt;td&gt;3GB &lt;td&gt;2GB&lt;td&gt;6GB &lt;td&gt;15GB &lt;td&gt;60GB &lt;br /&gt;&lt;tr&gt;&lt;th&gt;転送量目安(月)※1 &lt;td&gt;1GB&lt;td&gt;3GB &lt;td&gt;-&lt;td&gt;100GB &lt;td&gt;150GB &lt;td&gt;300GB &lt;br /&gt;&lt;tr&gt;&lt;th&gt;許容負荷率 ※ &lt;td&gt;&lt;td&gt;100%&lt;td&gt;&lt;td&gt;125%&lt;td&gt;250%&lt;td&gt;1000%&lt;br /&gt;&lt;tr&gt;&lt;th colspan=7&gt;　基本機能&lt;br /&gt;&lt;tr&gt;&lt;th&gt;コントロールパネル &lt;td&gt;○ &lt;td&gt;○ &lt;td&gt;○&lt;td&gt;○ &lt;td&gt;○ &lt;td&gt;○ &lt;br /&gt;&lt;tr&gt;&lt;th&gt;ファイルマネージャ &lt;td&gt;○ &lt;td&gt;○ &lt;td&gt;○&lt;td&gt;○ &lt;td&gt;○ &lt;td&gt;○ &lt;br /&gt;&lt;tr&gt;&lt;th&gt;CRONジョブ &lt;td&gt;× &lt;td&gt;○ &lt;td&gt;○&lt;td&gt;○ &lt;td&gt;○ &lt;td&gt;○ &lt;br /&gt;&lt;tr&gt;&lt;th&gt;MySQL &lt;td&gt;1個 &lt;td&gt;5個 &lt;td&gt;×&lt;td&gt;10&lt;td&gt;無制限 &lt;td&gt;無制限 &lt;br /&gt;&lt;tr&gt;&lt;th&gt;PostgreSQL &lt;td&gt;1個 &lt;td&gt;5個 &lt;td&gt;×&lt;td&gt;10&lt;td&gt;無制限 &lt;td&gt;無制限 &lt;br /&gt;&lt;tr&gt;&lt;th&gt;SQLite2/3 &lt;td&gt;&lt;td&gt;&lt;td&gt;&lt;td&gt;○ &lt;td&gt;○ &lt;td&gt;○ &lt;br /&gt;&lt;tr&gt;&lt;th colspan=7&gt;　ドメイン機能&lt;br /&gt;&lt;tr&gt;&lt;th&gt;マルチドメイン &lt;td&gt;10&lt;td&gt;20&lt;td&gt;×&lt;td&gt;50&lt;td&gt;無制限 &lt;td&gt;無制限 &lt;br /&gt;&lt;tr&gt;&lt;th&gt;サブドメイン &lt;td&gt;10&lt;td&gt;20&lt;td&gt;×&lt;td&gt;50&lt;td&gt;無制限 &lt;td&gt;無制限 &lt;br /&gt;&lt;tr&gt;&lt;th&gt;カスタムマッピング &lt;td&gt;○ &lt;td&gt;○ &lt;td&gt;×&lt;td&gt;○ &lt;td&gt;○ &lt;td&gt;○ &lt;br /&gt;&lt;tr&gt;&lt;th&gt;URL転送 &lt;td&gt;○ &lt;td&gt;○ &lt;td&gt;×&lt;td&gt;○ &lt;td&gt;○ &lt;td&gt;○ &lt;br /&gt;&lt;tr&gt;&lt;th&gt;共有SSL &lt;td&gt;○ &lt;td&gt;○ &lt;td&gt;×&lt;td&gt;○ &lt;td&gt;○ &lt;td&gt;○ &lt;br /&gt;&lt;tr&gt;&lt;th&gt;独自IP/SSL &lt;td&gt;&lt;td&gt;&lt;td&gt;&lt;td&gt;× &lt;td&gt;1500円/月 &lt;td&gt;1500 円/月 &lt;br /&gt;&lt;tr&gt;&lt;th&gt;&lt;td&gt;あり &lt;td&gt;なし &lt;td&gt;×&lt;td&gt;&lt;td&gt;&lt;td&gt;&lt;br /&gt;&lt;tr&gt;&lt;th&gt;提供サブドメイン &lt;td&gt;なし &lt;td&gt;3個&lt;td&gt;3個&lt;td&gt;10個&lt;td&gt;10個&lt;td&gt;10個&lt;br /&gt;&lt;tr&gt;&lt;th colspan=7&gt;　メール機能&lt;br /&gt;&lt;tr&gt;&lt;th&gt;メールアカウント数 &lt;td&gt;100&lt;td&gt;100&lt;td&gt;無制限&lt;td&gt;200&lt;td&gt;無制限 &lt;td&gt;無制限 &lt;br /&gt;&lt;tr&gt;&lt;th&gt;マルチドメイン数 &lt;td&gt;100&lt;td&gt;100&lt;td&gt;無制限&lt;td&gt;&lt;td&gt;&lt;td&gt;&lt;br /&gt;&lt;tr&gt;&lt;th&gt;送受信メール数(通/日) &lt;td&gt;1,000 通 &lt;td&gt;3,000 通 &lt;td&gt;10,000通&lt;td&gt;5000&lt;td&gt;10000&lt;td&gt;40000&lt;br /&gt;&lt;tr&gt;&lt;th&gt;POP / POPS &lt;td&gt;○ &lt;td&gt;○ &lt;td&gt;○&lt;td&gt;○ &lt;td&gt;○ &lt;td&gt;○ &lt;br /&gt;&lt;tr&gt;&lt;th&gt;SMTP / SMTPS &lt;td&gt;○ &lt;td&gt;○ &lt;td&gt;○&lt;td&gt;○ &lt;td&gt;○ &lt;td&gt;○ &lt;br /&gt;&lt;tr&gt;&lt;th&gt;IMAP / IMAPS &lt;td&gt;○ &lt;td&gt;○ &lt;td&gt;○&lt;td&gt;○ &lt;td&gt;○ &lt;td&gt;○ &lt;br /&gt;&lt;tr&gt;&lt;th&gt;APOP / Port 587 &lt;td&gt;○ &lt;td&gt;○ &lt;td&gt;○&lt;td&gt;○ &lt;td&gt;○ &lt;td&gt;○ &lt;br /&gt;&lt;tr&gt;&lt;th&gt;ウェブメール &lt;td&gt;○ &lt;td&gt;○ &lt;td&gt;○&lt;td&gt;○ &lt;td&gt;○ &lt;td&gt;○ &lt;br /&gt;&lt;tr&gt;&lt;th&gt;携帯ウェブメール &lt;td&gt;&lt;td&gt;&lt;td&gt;&lt;td&gt;○ &lt;td&gt;○ &lt;td&gt;○ &lt;br /&gt;&lt;tr&gt;&lt;th&gt;スパムフィルター &lt;td&gt;× &lt;td&gt;○ &lt;td&gt;○&lt;td&gt;○ &lt;td&gt;○ &lt;td&gt;○ &lt;br /&gt;&lt;tr&gt;&lt;th&gt;メール転送 &lt;td&gt;○ &lt;td&gt;○ &lt;td&gt;○&lt;td&gt;○ &lt;td&gt;○ &lt;td&gt;○ &lt;br /&gt;&lt;tr&gt;&lt;th&gt;カスタムフィルター &lt;td&gt;× &lt;td&gt;○ &lt;td&gt;○&lt;td&gt;○ &lt;td&gt;○ &lt;td&gt;○ &lt;br /&gt;&lt;tr&gt;&lt;th&gt;メーリングリスト &lt;td&gt;× &lt;td&gt;× &lt;td&gt;○&lt;td&gt;○ &lt;td&gt;○ &lt;td&gt;○ &lt;br /&gt;&lt;tr&gt;&lt;th&gt;ウィルスフィルター &lt;td&gt;○ &lt;td&gt;○ &lt;td&gt;○&lt;td&gt;&lt;td&gt;&lt;td&gt;&lt;br /&gt;&lt;tr&gt;&lt;th&gt;メールマガジン &lt;td&gt;× &lt;td&gt;× &lt;td&gt;準備中です&lt;td&gt;&lt;td&gt;&lt;td&gt;&lt;br /&gt;&lt;tr&gt;&lt;th&gt;添付ファイル容量 &lt;td&gt;20MB &lt;td&gt;50MB &lt;td&gt;100MB&lt;td&gt;&lt;td&gt;&lt;td&gt;&lt;br /&gt;&lt;tr&gt;&lt;th&gt;メールへの広告 &lt;td&gt;あり &lt;td&gt;なし &lt;td&gt;なし&lt;td&gt;&lt;td&gt;&lt;td&gt;&lt;br /&gt;&lt;tr&gt;&lt;th colspan=7&gt;　FTP機能&lt;br /&gt;&lt;tr&gt;&lt;th&gt;FTPアカウント &lt;td&gt;○ &lt;td&gt;○ &lt;td&gt;○&lt;td&gt;○&lt;td&gt;○&lt;td&gt;○&lt;br /&gt;&lt;tr&gt;&lt;th&gt;サブFTPアカウント &lt;td&gt;× &lt;td&gt;3&lt;td&gt;×&lt;td&gt;10&lt;td&gt;無制限 &lt;td&gt;無制限 &lt;br /&gt;&lt;tr&gt;&lt;th&gt;FTPS &lt;td&gt;○ &lt;td&gt;○ &lt;td&gt;○&lt;td&gt;○ &lt;td&gt;○ &lt;td&gt;○ &lt;br /&gt;&lt;tr&gt;&lt;th&gt;サーバー間コピー&lt;td&gt;× &lt;td&gt;○ &lt;td&gt;○&lt;td&gt;○&lt;td&gt;○&lt;td&gt;○&lt;br /&gt;&lt;tr&gt;&lt;th colspan=7&gt;　ログ&lt;br /&gt;&lt;tr&gt;&lt;th&gt;生ログ &lt;td&gt;○ &lt;td&gt;○ &lt;td&gt;×&lt;td&gt;○ &lt;td&gt;○ &lt;td&gt;○ &lt;br /&gt;&lt;tr&gt;&lt;th&gt;アクセス解析 &lt;td&gt;○ &lt;td&gt;○ &lt;td&gt;×&lt;td&gt;○ &lt;td&gt;○ &lt;td&gt;○ &lt;br /&gt;&lt;tr&gt;&lt;th colspan=7&gt;　ソフトウェア仕様&lt;br /&gt;&lt;tr&gt;&lt;th&gt;CGI/SSI &lt;td&gt;○ &lt;td&gt;○ &lt;td&gt;×&lt;td&gt;○ &lt;td&gt;○ &lt;td&gt;○ &lt;br /&gt;&lt;tr&gt;&lt;th&gt;Perl &lt;td&gt;○ &lt;td&gt;○ &lt;td&gt;×&lt;td&gt;○ &lt;td&gt;○ &lt;td&gt;○ &lt;br /&gt;&lt;tr&gt;&lt;th&gt;PHP5(モジュール版) &lt;td&gt;○ &lt;td&gt;○ &lt;td&gt;×&lt;td&gt;○ &lt;td&gt;○ &lt;td&gt;○ &lt;br /&gt;&lt;tr&gt;&lt;th&gt;PHP4/5/6(CGI版) &lt;td&gt;○ &lt;td&gt;○ &lt;td&gt;×&lt;td&gt;○ &lt;td&gt;○ &lt;td&gt;○ &lt;br /&gt;&lt;tr&gt;&lt;th&gt;Ruby &lt;td&gt;○ &lt;td&gt;○ &lt;td&gt;×&lt;td&gt;○ &lt;td&gt;○ &lt;td&gt;○ &lt;br /&gt;&lt;tr&gt;&lt;th&gt;SQLite &lt;td&gt;○ &lt;td&gt;○ &lt;td&gt;×&lt;td&gt;○ &lt;td&gt;○ &lt;td&gt;○ &lt;br /&gt;&lt;tr&gt;&lt;th&gt;Python &lt;td&gt;○ &lt;td&gt;○ &lt;td&gt;×&lt;td&gt;○ &lt;td&gt;○ &lt;td&gt;○ &lt;br /&gt;&lt;tr&gt;&lt;th&gt;C/C++ &lt;td&gt;○ &lt;td&gt;○ &lt;td&gt;×&lt;td&gt;○ &lt;td&gt;○ &lt;td&gt;○ &lt;br /&gt;&lt;tr&gt;&lt;th&gt;.htaccess &lt;td&gt;○ &lt;td&gt;○ &lt;td&gt;×&lt;td&gt;○ &lt;td&gt;○ &lt;td&gt;○ &lt;br /&gt;&lt;tr&gt;&lt;th&gt;CGI自動設置 &lt;td&gt;&lt;td&gt;&lt;td&gt;&lt;td&gt;○ &lt;td&gt;○ &lt;td&gt;○ &lt;br /&gt;&lt;tr&gt;&lt;th&gt;sendmail &lt;td&gt;○ &lt;td&gt;○ &lt;td&gt;○&lt;td&gt;&lt;td&gt;&lt;td&gt;&lt;br /&gt;&lt;tr&gt;&lt;th&gt;SSH &lt;td&gt;○ &lt;td&gt;○ &lt;td&gt;○&lt;td&gt;○ &lt;td&gt;○ &lt;td&gt;○ &lt;br /&gt;&lt;tr&gt;&lt;th colspan=7&gt;　ハードウェア仕様&lt;br /&gt;&lt;tr&gt;&lt;th&gt;CPU+ メモリー(※2) &lt;td&gt;2コアCPU 2GB&lt;td&gt;2コアCPU 2GB&lt;td&gt;2コアCPU 2GB&lt;td&gt;XEON 4GB &lt;td&gt;XEON 4GB &lt;td&gt;XEON4コア 8GB &lt;br /&gt;&lt;tr&gt;&lt;th&gt;バックアップ &lt;td&gt;RAID &lt;td&gt;RAID &lt;td&gt;RAID &lt;td&gt;RAID &lt;td&gt;RAID &lt;td&gt;RAID &lt;br /&gt;&lt;tr&gt;&lt;th&gt;最大アカウント数 &lt;td&gt;&lt;td&gt;&lt;td&gt;&lt;td&gt;300以下 &lt;td&gt;128以下 &lt;td&gt;64 以下 &lt;br /&gt;&lt;tr&gt;&lt;th&gt;ネットワーク・回線 &lt;td&gt;計2Gbps 以上&lt;td&gt;計2Gbps 以上&lt;td&gt;計2Gbps 以上&lt;td&gt;計4Gbps以上&lt;td&gt;計4Gbps以上&lt;td&gt;計4Gbps以上&lt;br /&gt;&lt;tr&gt;&lt;th&gt;サーバー管理 &lt;td&gt;自社&lt;td&gt;自社&lt;td&gt;自社&lt;td&gt;自社&lt;td&gt;自社&lt;td&gt;自社&lt;br /&gt;&lt;tr&gt;&lt;th&gt;設置 &lt;td&gt;国内&lt;td&gt;国内&lt;td&gt;国内&lt;td&gt;国内&lt;td&gt;国内&lt;td&gt;国内&lt;br /&gt;&lt;tr&gt;&lt;th colspan=7&gt;　サポート&lt;br /&gt;&lt;tr&gt;&lt;th&gt;24時間障害対応 &lt;td&gt;○ &lt;td&gt;○ &lt;td&gt;○&lt;td&gt;○&lt;td&gt;○&lt;td&gt;○&lt;br /&gt;&lt;tr&gt;&lt;th&gt;メールサポート &lt;td&gt;△ &lt;td&gt;○ &lt;td&gt;○&lt;td&gt;○&lt;td&gt;○&lt;td&gt;○&lt;br /&gt;&lt;tr&gt;&lt;th colspan=7&gt;　その他&lt;br /&gt;&lt;tr&gt;&lt;th&gt;アダルトサイト &lt;td&gt;× &lt;td&gt;× &lt;td&gt;-&lt;td&gt;×(テキストは可)&lt;td&gt;×(テキストは可)&lt;td&gt;×(テキストは可)&lt;br /&gt;&lt;tr&gt;&lt;th&gt;広告メールの送信 &lt;td&gt;&lt;td&gt;&lt;td&gt;&lt;td&gt;×※3&lt;td&gt;×※3&lt;td&gt;×※3&lt;br /&gt;&lt;tr&gt;&lt;th&gt;広告メールの宣伝サイト &lt;td&gt;&lt;td&gt;&lt;td&gt;&lt;td&gt;×※3&lt;td&gt;×※3&lt;td&gt;×※3&lt;br /&gt;&lt;tr&gt;&lt;th&gt;公開アップローダー &lt;td&gt;&lt;td&gt;&lt;td&gt;&lt;td&gt;△※4&lt;td&gt;△※4&lt;td&gt;△※4&lt;br /&gt;&lt;tr&gt;&lt;th&gt;商用利用 &lt;td&gt;△ &lt;td&gt;○ &lt;td&gt;○&lt;td&gt;&lt;td&gt;&lt;td&gt;&lt;br /&gt;&lt;tr&gt;&lt;th&gt;再販 &lt;td&gt;× &lt;td&gt;× &lt;td&gt;×&lt;td&gt;△※5 &lt;td&gt;○&lt;td&gt;○&lt;br /&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4530875953866513005-1683522245413844085?l=mashiki-memo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mashiki-memo.blogspot.com/feeds/1683522245413844085/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://mashiki-memo.blogspot.com/2010/07/xrea-coreserver_06.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4530875953866513005/posts/default/1683522245413844085'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4530875953866513005/posts/default/1683522245413844085'/><link rel='alternate' type='text/html' href='http://mashiki-memo.blogspot.com/2010/07/xrea-coreserver_06.html' title='xrea+ と coreserver の仕様比較'/><author><name>mashiki</name><uri>http://www.blogger.com/profile/05693139459731866783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4530875953866513005.post-9053518563934785550</id><published>2010-07-05T23:30:00.019+09:00</published><updated>2010-07-07T00:17:24.137+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Blogger'/><title type='text'>HTML直接記入テスト</title><content type='html'>Bloggerではhtmlの直接記入をかなり自由にできるようだ&lt;br /&gt;&lt;br /&gt;&lt;b&gt;実態参照&lt;/b&gt;&lt;br /&gt;「&amp;amp;lt;」で「&amp;lt;」を、「&amp;amp;gt;」で「&amp;gt;」を、「&amp;amp;amp;」で「&amp;amp;」を表示可能&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&amp;lt;pre&amp;gt;タグ&lt;/b&gt;&lt;br /&gt;&lt;pre&gt;あああ&lt;br /&gt;いいい&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;b&gt;&amp;lt;table&amp;gt;タグ&lt;/b&gt;&lt;br /&gt;&lt;pre&gt;&amp;lt;table border=1&gt;&amp;lt;tbody&gt;&lt;br /&gt;&amp;lt;tr&gt;&amp;lt;td&gt;あああ&amp;lt;/td&gt;&amp;lt;td&gt;いいい&amp;lt;/td&gt;&amp;lt;td&gt;ううう&amp;lt;/td&gt;&amp;lt;/tr&gt;&lt;br /&gt;&amp;lt;tr&gt;&amp;lt;td&gt;あああ&amp;lt;/td&gt;&amp;lt;td&gt;いいい&amp;lt;/td&gt;&amp;lt;td&gt;ううう&amp;lt;/td&gt;&amp;lt;/tr&gt;&lt;br /&gt;&amp;lt;tr&gt;&amp;lt;td&gt;あああ&amp;lt;/td&gt;&amp;lt;td&gt;いいい&amp;lt;/td&gt;&amp;lt;td&gt;ううう&amp;lt;/td&gt;&amp;lt;/tr&gt;&lt;br /&gt;&amp;lt;/tbody&gt;&amp;lt;/table&gt;&lt;br /&gt;&lt;/pre&gt;&lt;table border=1&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;あああ&lt;/td&gt;&lt;td&gt;いいい&lt;/td&gt;&lt;td&gt;ううう&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;あああ&lt;/td&gt;&lt;td&gt;いいい&lt;/td&gt;&lt;td&gt;ううう&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;あああ&lt;/td&gt;&lt;td&gt;いいい&lt;/td&gt;&lt;td&gt;ううう&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;b&gt;javascript&lt;/b&gt;&lt;br /&gt;&lt;pre&gt;&amp;lt;a href='javascript:alert("javascript テスト")'&gt;javascriptテスト&amp;lt;/a&gt;&lt;br /&gt;&lt;/pre&gt;&lt;a href='javascript:alert("javascript テスト")'&gt;javascriptテスト&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4530875953866513005-9053518563934785550?l=mashiki-memo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mashiki-memo.blogspot.com/feeds/9053518563934785550/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://mashiki-memo.blogspot.com/2010/07/blog-post_05.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4530875953866513005/posts/default/9053518563934785550'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4530875953866513005/posts/default/9053518563934785550'/><link rel='alternate' type='text/html' href='http://mashiki-memo.blogspot.com/2010/07/blog-post_05.html' title='HTML直接記入テスト'/><author><name>mashiki</name><uri>http://www.blogger.com/profile/05693139459731866783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4530875953866513005.post-3907646125917375363</id><published>2010-07-04T10:46:00.005+09:00</published><updated>2010-07-04T10:58:47.450+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='サクラエディタ'/><title type='text'>サクラでajax?!</title><content type='html'>サクラのマクロでブラウザなど使用せず、web上の情報にアクセスできる。&lt;br /&gt;&lt;blockquote&gt;//httptest.js&lt;br /&gt;var http = new ActiveXObject("WinHttp.WinHttpRequest.5.1");&lt;br /&gt;var url="http://www.php.net/";&lt;br /&gt;http.Open("GET", url);&lt;br /&gt;http.Send();&lt;br /&gt;var wsh = new ActiveXObject("WScript.Shell");&lt;br /&gt;wsh.Popup("Status:" + http.status+"  Result: " &lt;br /&gt; +http.ResponseText.substr(0,50), 0, "RESULT", 1);&lt;/blockquote&gt;&lt;br /&gt;ajax的なことは普通にできそうなのだが、サクラのマクロにはメニューやドロップダウンリスト的なものをコントロールする機能がないので、応用が思いつかない&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4530875953866513005-3907646125917375363?l=mashiki-memo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mashiki-memo.blogspot.com/feeds/3907646125917375363/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://mashiki-memo.blogspot.com/2010/07/ajax.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4530875953866513005/posts/default/3907646125917375363'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4530875953866513005/posts/default/3907646125917375363'/><link rel='alternate' type='text/html' href='http://mashiki-memo.blogspot.com/2010/07/ajax.html' title='サクラでajax?!'/><author><name>mashiki</name><uri>http://www.blogger.com/profile/05693139459731866783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4530875953866513005.post-7447511490371258263</id><published>2010-07-04T10:22:00.007+09:00</published><updated>2010-07-06T02:30:38.951+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='coreserver'/><title type='text'>XREA+ から coreserver への移行</title><content type='html'>XREA+の契約が7/6に切れるので、継続しようと思ったが、上位のcoreserverと金額を比較すると、年間の金額はほぼ変わらないで、性能や容量がアップする。&lt;br /&gt;XREA+(年間2400円) の機能や容量の制限で不満な部分があるわけではないが、100円プラスの年額2500円でコアサーバ(mini)に切り替えられるので、切り替えを検討。かなりドロナワ的。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;仕様比較&lt;/span&gt;&lt;br /&gt;&lt;a href="http://mashiki-memo.blogspot.com/2010/07/xrea-coreserver_06.html"&gt;仕様比較&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.coreserver.jp/"&gt;coreserer仕様 http://www.coreserver.jp/&lt;/a&gt;&lt;br /&gt;&lt;a href="https://www.value-domain.com/xrea.php"&gt;xrea仕様 https://www.value-domain.com/xrea.php&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;同じことをやった人の情報&lt;/span&gt;&lt;br /&gt;&lt;a href="http://lab.urume.net/2009,0203,800.html"&gt;http://lab.urume.net/2009,0203,800.html&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.fxtechnical.net/2008/10/_xreacoreserver_movablety.html"&gt;http://www.fxtechnical.net/2008/10/_xreacoreserver_movablety.html&lt;/a&gt;&lt;br /&gt;&lt;a href="http://gootara.jp/mt/2009/04/exreacoreserver.html"&gt;http://gootara.jp/mt/2009/04/exreacoreserver.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;お試し版を登録&lt;/span&gt;&lt;br /&gt;トップページには15日使用可能とあったが、実際には5日間。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;ファイルのコピー&lt;/span&gt;&lt;br /&gt;サーバー間コピー機能で全ディレクトリをコピー&lt;br /&gt;これは便利かも。&lt;br /&gt;構わずコピーしたら、.bash_historyまでコピーされてた&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;DNS登録変更&lt;/span&gt;&lt;br /&gt;ddo.jp にて新サーバのIPアドレスに変更&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;ネームバーチャルサーバ設定&lt;/span&gt;&lt;br /&gt;2つのサーバの「ドメインウェブ」の設定設定ページを開き内容を同じにする&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;必要なフォルダ/ファイルのパーミッション変更&lt;/span&gt;&lt;br /&gt;他のサイトの情報ではパーミッションは自動的に同じになるような情報もあったが、groupとotherへのwrite権限はなくなるみたい&lt;br /&gt;&lt;br /&gt;とりあえずはこれで試用してみる。といっても期限切れまで2日しかないが...。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4530875953866513005-7447511490371258263?l=mashiki-memo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mashiki-memo.blogspot.com/feeds/7447511490371258263/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://mashiki-memo.blogspot.com/2010/07/xrea-coreserver.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4530875953866513005/posts/default/7447511490371258263'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4530875953866513005/posts/default/7447511490371258263'/><link rel='alternate' type='text/html' href='http://mashiki-memo.blogspot.com/2010/07/xrea-coreserver.html' title='XREA+ から coreserver への移行'/><author><name>mashiki</name><uri>http://www.blogger.com/profile/05693139459731866783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4530875953866513005.post-6540201482577334302</id><published>2010-07-03T16:48:00.006+09:00</published><updated>2012-01-18T11:11:55.561+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='サクラエディタ'/><title type='text'>サクラでphpのマニュアルを検索する</title><content type='html'>エディターでphpのコードを編集する時、関数の正確なスペルや引数の仕様を調べるのに重宝します&lt;br /&gt;&lt;br /&gt;スクリプト(phpfunc.js)&lt;br /&gt;&lt;br /&gt;ほぼ、『英辞郎 on the WEB』と同じスクリプトですが、&lt;br /&gt;&lt;pre class='brush: js'&gt;&lt;br /&gt;// phpfunc.js&lt;br /&gt;// カーソル位置の単語で phpの関数マニュアル を検索する&lt;br /&gt;var word = Editor.ExpandParameter("$C");&lt;br /&gt;var url = "http://jp.php.net/manual-lookup.php?pattern="+word;&lt;br /&gt;(new ActiveXObject("Wscript.Shell")).run(url)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;登録方法は「&lt;a href="http://mashiki-memo.blogspot.com/2010/07/blog-post.html"&gt;サクラエディタでマクロの登録&lt;/a&gt;」を参照&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4530875953866513005-6540201482577334302?l=mashiki-memo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mashiki-memo.blogspot.com/feeds/6540201482577334302/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://mashiki-memo.blogspot.com/2010/07/php.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4530875953866513005/posts/default/6540201482577334302'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4530875953866513005/posts/default/6540201482577334302'/><link rel='alternate' type='text/html' href='http://mashiki-memo.blogspot.com/2010/07/php.html' title='サクラでphpのマニュアルを検索する'/><author><name>mashiki</name><uri>http://www.blogger.com/profile/05693139459731866783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4530875953866513005.post-5290053555098047466</id><published>2010-07-03T10:44:00.009+09:00</published><updated>2012-01-18T11:08:44.735+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='サクラエディタ'/><title type='text'>サクラエディタでマクロの登録</title><content type='html'>&lt;span style="font-weight: bold;"&gt;１．サクラエディタ導入フォルダに「macro」フォルダを作成する&lt;/span&gt;&lt;blockquote&gt;C:\Program Files\sakura\macro&lt;/blockquote&gt;&lt;span style="font-weight: bold;"&gt;２．  Javascriptのファイルを作成する&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;マニュアルを見てもマクロファイルの文字コードの指定は見つからなかったのでとりあえずS-JISで保存&lt;br /&gt;&lt;pre class='brush: js'&gt;&lt;br /&gt;// alc.js&lt;br /&gt;// カーソル位置の単語で 英辞郎on the Web を検索する&lt;br /&gt;var word = Editor.ExpandParameter("$C");&lt;br /&gt;var url = "http://eow.alc.co.jp/"+word+"/UTF-8/?ref=sa";&lt;br /&gt;(new ActiveXObject("Wscript.Shell")).run(url)&lt;br /&gt;&lt;/pre&gt;今回はalc.jsで保存した&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;３． テスト実行する&lt;/span&gt;&lt;br /&gt;エディタ上の検索したい単語にカーソルを当て&lt;br /&gt;[ツール]→[名前を指定してマクロを実行...]&lt;br /&gt;macroフォルダ内のalc.jsを指定すると無事ブラウザが開き、結果が表示された&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;４． マクロを登録する&lt;/span&gt;&lt;br /&gt;[設定]→[共通設定...]の[マクロタブ]を開き&lt;br /&gt;マクロ一覧で[参照]ボタンを押し、マクロを配置したフォルダを選択する&lt;br /&gt;C:\Program Files\sakura\macro\&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;名前: 英辞郎on the Web&lt;br /&gt;Id: 1&lt;br /&gt;file: alc.js&lt;br /&gt;■マクロを実行するたびにファイルを読み直す&lt;br /&gt;&lt;/blockquote&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;５． キー割り当て&lt;/span&gt;&lt;br /&gt;よく使うマクロの場合、簡単に呼び出したいもの。&lt;br /&gt;[設定]→[共通設定...]の[キー設定]タブを開き、&lt;br /&gt;&lt;blockquote&gt;種別: 外部マクロ&lt;br /&gt;機能: 英辞郎on the Web&lt;br /&gt;Ctrl： チェックを付ける&lt;br /&gt;キー： Ctrl+1&lt;br /&gt;&lt;/blockquote&gt;を選択し[OK]ボタンを押す&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;参考&lt;/span&gt;&lt;br /&gt;サクラエディタ マクロのマニュアル&lt;br /&gt;　&lt;a href="http://sakura.qp.land.to/SakuraMacro/"&gt;http://sakura.qp.land.to/SakuraMacro/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4530875953866513005-5290053555098047466?l=mashiki-memo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mashiki-memo.blogspot.com/feeds/5290053555098047466/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://mashiki-memo.blogspot.com/2010/07/blog-post.html#comment-form' title='2 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4530875953866513005/posts/default/5290053555098047466'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4530875953866513005/posts/default/5290053555098047466'/><link rel='alternate' type='text/html' href='http://mashiki-memo.blogspot.com/2010/07/blog-post.html' title='サクラエディタでマクロの登録'/><author><name>mashiki</name><uri>http://www.blogger.com/profile/05693139459731866783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4530875953866513005.post-3709568415046669229</id><published>2010-07-03T10:23:00.004+09:00</published><updated>2010-07-03T10:37:07.195+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Blogger'/><title type='text'>Bloggerアカウント取得</title><content type='html'>Googleのブログに登録してみました。&lt;br /&gt;&lt;br /&gt;登録時、本人確認のため、確認コードを携帯電話に自動音声通話で知らせるようになっています。&lt;br /&gt;悪戯防止には有効でしょうけど、携帯番号の入力は少々抵抗がありますね。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4530875953866513005-3709568415046669229?l=mashiki-memo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mashiki-memo.blogspot.com/feeds/3709568415046669229/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://mashiki-memo.blogspot.com/2010/07/blogger.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4530875953866513005/posts/default/3709568415046669229'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4530875953866513005/posts/default/3709568415046669229'/><link rel='alternate' type='text/html' href='http://mashiki-memo.blogspot.com/2010/07/blogger.html' title='Bloggerアカウント取得'/><author><name>mashiki</name><uri>http://www.blogger.com/profile/05693139459731866783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
