<?xml version="1.0" encoding="UTF-8"?><rss version="0.92">
<channel>
	<title>進・日進月歩</title>
	<link>http://blog.gijutsuya.jp/harajune</link>
	<description>IT, Jazz, study, engineering, すべての真実とクリエイティビティのために</description>
	<lastBuildDate>Tue, 13 Sep 2011 08:59:51 +0000</lastBuildDate>
	<docs>http://backend.userland.com/rss092</docs>
	<language>en</language>
	<!-- generator="WordPress/3.0.1" -->

	<item>
		<title>ブログお引っ越し</title>
		<description><![CDATA[wordpressのwysiwygがあまりすきではなかったのでmarkdownで書くために微妙にURLかえましたw 特に書くことも無いのだけど、最近書いたコードとかやってる実験や興味のあることをちょこちょこまとめて書いてみたいと思います。 新アドレス: http://blog.gijutsuya.jp/hrjn/]]></description>
		<link>http://blog.gijutsuya.jp/harajune/2011/09/13/%e3%83%96%e3%83%ad%e3%82%b0%e3%81%8a%e5%bc%95%e3%81%a3%e8%b6%8a%e3%81%97/</link>
			</item>
	<item>
		<title>XSS対策手法のひとつの提案</title>
		<description><![CDATA[ドラフト。ドラフトじゃなくなることはあるんだろうか。コメント求む。 XSS対策手法のひとつの提案 概要 XSS (cross site scripting)というのは、特にwebプログラミングの文脈でよくつかわれる、セキュリティホールの一種である。webプログラミングが一般的になった現在でもこのセキュリティホールは頻繁に発生しており、必ずしも素人だけがしてしまう失敗とも限らない。近年で有名な例としてtwitterでの事件がある。 >本投稿では、XSSの事例と背景について説明するとともに、その対策として「コンテキストを減らす」「コンテキストごとのエスケープ」「安全なプログラミングの手法」を示しひとつのXSS対策の指針を示す。 また最後に、もともこもない対策方法として「base64で対策したらこうなった」という話をする。 本投稿は、「安全な」対策方法としてはまだ開発段階にあり、鵜呑みにするのは危険であることをご了承いただきたい。自己責任。 目次 XSSとは XSSの原理と背景： コンテキストとエスケープの関係 XSS対策が困難な理由と、その対策 コンテキストの削減 コンテキストごとのエスケープ 安全なプログラミング指針 すべてをhtmlエスケープしてしまうfail safeの欠点 もともこもない対策： base64 まとめ XSSとは XSSとはCross Site Scriptingの略であり、掲示板などのユーザ投稿型のwebサービスに対して「悪意のあるスクリプト」を投稿し、開発者の意図しない動作をさせるセキュリティーホールの一種である。 Smartyテンプレートとphpでの具体的な例を挙げる。以下の様なtest.phpとtest.tplがあったとする。ここでは、簡単のため必要なrequireや定数・変数の定義などは省いている。 PLAIN TEXT CODE: // test.php &#160; &#60;?php &#160; $smarty = new Smarty&#40;&#41;; &#160; $smarty-&#62;assign&#40;"value1", $_GET&#91;"form1"&#93;&#41;; &#160; $smarty-&#62;display&#40;"test.tpl"&#41;; &#160; ?&#62; PLAIN TEXT CODE: &#123;* test.tpl *&#125; &#160; &#123;$value1&#125; [...]]]></description>
		<link>http://blog.gijutsuya.jp/harajune/2010/11/19/one-method-for-xss-protection/</link>
			</item>
	<item>
		<title>本当は怖い3&#215;5!=5&#215;3</title>
		<description><![CDATA[ネタもと404 blog not found 3x5!=5x3 ここ最近よく話題になっていたので、なんとなく見ていたのだけど、ネットのほとんどの人は「交換してもマルでいいじゃないか」「これで誤答扱いはひどい」と思っているようです。 個人的には、これらの指摘こそひどいなぁと思って、久しぶりにブログ書いてみました。 主な論点は、4つ。 「文章題」は、問題文の理解を問うている 書式のなってない報告書・レポートは正当化されない 書式に理由なんかない じゃぁ3x5は5x3でいいのかなぁ？ 「文章題」は、問題文の理解を問うている。 じぶんも実はこれにひっかかりました。というか、もっとひどかったかもしれません。 なにしろ私は、式すら書かず答えしか書かなかったのですから 「皿が5皿ある。1つのお皿に3つずつりんごが載っている。全部でいくつか。」 答え：15こ 小学生でもこのくらいの暗算は出来る人はいると思います。しかし、当たり前ですが減点対象です。当時小学生だった私は納得いきません。「答えは合っているのになんで減点されなくちゃいけないわけ？」あぁかわいく無い俺。 「3x5でも5x3でもいいじゃないか！」と言ってる皆さんは、もちろん「式なんか書かなくたっていいじゃないか！」というのにご賛同いただけると信じております。 冗談はともかく。 そのとき先生に言われたのはこんな感じのことだったと思います。 はらだくんが暗算得意なのは先生もよくわかっているよ。けど、この問題は「問題文がきちんと理解できているか」も点数になるの。だから、問題がきちんとわかっていることを書いてくださいね。 まぁこんなので納得する私ではないので（自分のことながら恥ずかしい・・・）、この後「かける数かけられる数の順番が違う」だとか「15この『こ』が抜けてるので減点」とか、ことあるごとにひっかかり、その度ごとに先生につっかかり偉い迷惑かけました・・・・いや、まじですみません・・・・ けど、今から思ってみれば、「問題の意図をつかみ」「相手に正確に伝える」ことの重要性から納得できるなと思います。 書式のなってない報告書・レポートは正当化されない 今時は、大学のレポートなんかろくに返却されないし、返却されても見ない人がほとんどかもしれません。まぁ私は取りにすら行きません。（死 そんなある日、某教授から「最近の若者の国語教育がひどい」という話を聞かされました。 だいたいこんな感じの内容でした。 言葉というのは時代とともに変わるので、言葉遣いがおかしいのはまだ我慢できなくも無い。しかし、論理展開や書式があまりにも稚拙でそれが我慢ならない。 国語教育は情操教育という理念の元に、感想文ばかりかかせる。そのせいかわからないが、感想文のような文章ばかり提出される。 えぇっと死にたくなりました私・・・・・・ もちろん良識ある社会人の皆様なら、報告書や論文の書式の重要さは十分に理解されてることでしょう。けど、参考までにいくつかURLを列挙しましょう。 報告書の性質とよくある勘違い 上司がうなる報告書の書き方 あまり思い出せなかった・・・・けど、この2つをみれば「内容の重要性」と同じくらい「書式」が重要であることがわかるでしょう。 むしろ、「書式が整ってないと重要であることが伝わらない」ことすらあり得ます。 書式というのは「読む側」になるとその重要性がわかります。不真面目ながら院生をしている私もたくさんの論文に目を通すので必然的に似通ったフォーマットに慣れてきます。 そうすると、なんとなく効率的に読む方法が見えてきます。 しかし逆に書式に従ってない論文というのはものすごく読みにくいことがわかります。 プログラマの人にわかりやすい例を考えてみました。JavaとかPHPのドキュメントは優れてると思いませんか？なんででしょう。 それは、各メソッドが全ページにわたって同じ書式で書かれているからな気がしませんか？ 書式に理由なんかない あるのかもしれませんが、生まれてから27年納得のいく理由を聞いたことがありません。 もちろん内容に合わせて、項目が設定され、項目ごとにそれなりに合理的なスペースが割かれているのですが、 詳細なレベルでは学会やドキュメントなどによってまちまちであると思います。 じゃぁ3x5は5x3でいいのかなぁ？ もちろん数式としては等価なわけですね。けど、あの文章題の答えとしてはどうでしょうか？ 当時小学生だった私は、先生に「私は、リンゴと皿の関係を理解し、正しく式に直し、そこから答えを導きだせました」ということを示さないといけなかったわけです。 それにはまず、「3x5」という共通の書式で式を立てる必要があるわけです。この書式が守れてないと「この人は数字を適当に拾ってきてかけただけなんじゃないか？」と解釈されても文句は言えないと思いませんか？ まとめ 文章題というのは、まず「問題の理解」を問うていることをお話ししました。 そして、それを伝えるためには「書式」が重要であること、そして「書式」に理由をもとめることは難しいことをお話ししました。 正直な感想を言えば「3x5とかそんなのどっちでもいいよなぁ」とも思うわけです。しかし、昨今の諸先輩方の「若者の文章が崩壊しすぎててヤバい」というのを聞いたり、たくさんの書類／文章を見ているうちに、この「3x5」に潜む本質的な問題というのに恐怖を覚えずに入られませんでした。 終わりに この文章は感想文です。 [...]]]></description>
		<link>http://blog.gijutsuya.jp/harajune/2010/11/16/3x5/</link>
			</item>
	<item>
		<title>rubyが激しくメモリを消費する件</title>
		<description><![CDATA[rubyが激しくメモリを消費する件についてです。 だいたい以下のような感じのコードを動かしていたのですが、あっというまにbad_allocを吐いて落ちる。 PLAIN TEXT CODE: while 1 doc = Nologiri::HTML&#40;text&#41; # 何かの処理 end topを見ていたらメモリを消費する消費する・・・・・ しょうがないのでこういうコードを付け足しました。 PLAIN TEXT CODE: while 1 counter += 1 doc = Nologiri::HTML&#40;text&#41; # 何かの処理 doc=nil GC.start if counter % 10 == 0 end これで大分マシになりました。 けどこれでも少しずつメモリを浸食してる。 ううーむ。]]></description>
		<link>http://blog.gijutsuya.jp/harajune/2010/09/28/ruby-consumes-memor/</link>
			</item>
	<item>
		<title>構造化テキストと文法と言語</title>
		<description><![CDATA[最近twitterでXSSによる攻撃があって大騒ぎだったというのがよく話題になっているようです。 自分も実は某社でwikiのような記法を使って記事が書けるwebサイトを作っているのですが、よく考えないで正規表現でごりごり実装したのでXSSを連発して苦い経験をしました。 そこで今日は、文法とか言語についてだらだらと書きます。 （ちなみに計算機系の学部では、授業で形式言語とか正規文法とかならうと思いますが、それです。） wiki記法は文脈自由文法だと思ってパースした方がわかりやすいかも？ 結局記法パーサをど根性で正規表現を駆使して書いたんですが、よく文法構造を考えてみればもっと簡単にパースが出来ただろうことに最近ふと気づきました。 細かい話は端折りますが、大抵のwiki記法というのは文脈自由文法というもので表現できそうです。 文脈自由文法で生成される言語というのは、正規表現では記述できない文があるので、どうしても無理矢理な実装になってしまうようです。（チョムスキー階層） 文脈自由文法と正規表現をメールアドレスを例にわかりやすく書いてる記事があったのでとりあえずそれをご紹介。 正規表現よりも文脈自由文法を なるほど。確かに入れ子構造とかがあると正規文法よりは文脈自由文法であると考えた方がみやすそうです。（ただしメールアドレスは正規表現だけでかけるようです。） wiki記法には、例えばテーブル要素などの、入れ子構造を持ったものがあるので正規表現だけでごりごりやっていくのはなかなかに難しそうです。 twitterの文法は何だろな で、twitterなんですが、基本的に入れ子構造がない文法なのであれはどうやら正規文法である気がします。 なので基本的には正規表現ですっきり記述可能なはずです。（※一行の正規表現でかけるという意味ではありません） 一般的な構造テキストの解析の仕方 構造化テキストの間違ったエスケープ手法についてや(Twitter の XSS 脆弱性に関連して) 構造化テキストの正しいエスケープ手法についてでも軽く触れられてますが、もうちょっとはっきりまとめるとこういう風につくるのが一般的である様に思います。コンパイラのつくりに似てる気がする。（ある意味これもコンパイルなわけですが） 字句解析（トークナイズ） : 文字列をトークンに分割 構文解析（パーサ） : トークンに文法を元に構造を持たせる 出力生成 ちょっとコードを書くのが面倒なので(Twitter の XSS 脆弱性に関連して) 構造化テキストの正しいエスケープ手法についてから拝借します。 PLAIN TEXT CODE: my $html = ''; for my $token &#40;split m&#123;&#40;http://[0-9A-Za-z_\.\%\?\#\@/]+&#124;\@[0-9A-Za-z]+)}, $tweet) {     if &#40;$token =~ m&#123;^http://}) {   [...]]]></description>
		<link>http://blog.gijutsuya.jp/harajune/2010/09/23/text-grammer-language/</link>
			</item>
	<item>
		<title>面白くなるために必要だと思うこと</title>
		<description><![CDATA[先日twitterをやめたんですが、割りと大きな理由としては、皮肉っぽい発言が多い私がtwitterを使うと敵ばっかり増えて粘着されて（自業自得）気分も悪くなるからだったりします。 けど一方でtwitter見ててもあまり面白く無いなぁと思ったのもあります。 その上、色々考えた結果、あんまり俺も面白いこと書けなくなってるなぁと凄く自省しました。 （もとが面白かったかは知らないけど・・・・多分いまよりは大分ましだった気がする） 書かなくなった で、それはなんでかなぁと考えたんですが、原因のひとつには「書かなくなった」ことである気がしました。 以前は一日中プログラム書いたり、文章書いたりメール書いたり一日中してたんですよね。 半分は受託開発関連だったので、必ずしも好き好んで書いていたわけではない（HTMLとCSSは未だに嫌い）ですが、今と比べればそらもう一日中怒濤の様に何か書いてました。 なんで書くと面白くなれるのか プログラミングでも文章でも色々書いたりして、そのために色々調べたりすると色々と小ネタがたまるんですよね。 javascriptのブラウザ間の差異を吸収するためのbad know-howとか、railsの中見てみたら"Spellだらけ"でよくわからなかったとか。 ビジネスプランを書いていれば、送金事業の規制緩和に関する法律改正とかにくわしくなったりとか。 こういうのをブログのネタにしたり、飲み会で話したりとかすると結構これがウケるわけです。 なんでそれがウケるのかというのをちょっと考えてみました。 たぶんそれはこういう理由からだと思います。 ひとつの目的に沿って色々なことが調べられているから 根拠がしっかりしているから（単に私が思っただけではない！） もしくは、少なくとも個人の体験に沿った事実であるから 大なり小なり系統的に調べた/経験した立場から、聞いてるひとにとって新しい情報を与えることができるから つまり、何か目的を持って「書こう！」と思い、様々なことについて体験したり調べたりしたことは、単なる思いつきの感想文よりは面白い何かを含んでいるということなんだと思います。 久しぶりに書いてみると、これが意外に難しい 色々言ったみたものの、この文章は基本的に感想文なんですが（ぉぉ じゃぁちょっと、まとめて特定のことについて書いてみようかなと思って筆を執ってみたんですが、実にこれが結構難しい。 最近だと、某会社に長く関わってるので開発上の注意点みたいの（デプロイどうしようとかタスク共有どうしようとか）は色々と事細かに語れますが、それ以外のことは中々難しいなと感じました。 そういえば、シュウカツの面接でこれプレゼンしたら大分感心されたので、きっとそれなりに面白かったんでしょう。 結局どういうことなのかと言えば、目の前に起こっている問題に対して自分なりに仮説を立てて本を買ったり対策を講じていたり、プレゼン資料を作ったりしていたのです。 そういう「書く」努力をしていたことに対しては、割りと容易に面白いことがかけるのかもしれないなという風に思いました。（トートロジーですが　苦笑） 面白いひとになるためには普段から書く癖を付けよう 結局おもしろい人間になるためには普段から物事を書く習慣をつけ、調べたりまとめたりすることが必要なのかなということを9月3日くらいに思いました。 書くというのは何も文章ではなくても良くて、プレゼンだったりプログラムだったりスピーチだったり、そういう特定の目的にそってまとめあげる形のものが良い様に思います。 すくなくとも、私が「これは面白いな」と感じるものはニュースサイトやはてブのURLをコピーして140文字程度の感想をつけたものではないようです。 その人の興味や関心に基づいて、少なくとも2つ以上の情報源を元に、一定上の時間をかけてある、感想以上の知見を得られるものです。 何となくそう言うことを思いました。 参考リンク 文章力向上のための10の基本的心構え Dangerous Ideas: Getting Started is Overrated 最近始めたこと 修士論文を真面目に視野に入れ始めたというのもあるのですが、プライベートなpukiwikiを作って、そこに色々なネタを書き貯める様にし始めました。 基本的に「日誌」を毎日簡単に書き、特定の関心事には個別のページを作り#relatedでまとめて行く様にしています。 まだ効果が出てるのかは謎ですが、きっとtwitterにバラバラ書いていることよりは面白いことをたくさん書いている気がします。]]></description>
		<link>http://blog.gijutsuya.jp/harajune/2010/09/14/to-be-interesting/</link>
			</item>
	<item>
		<title>shでスクリプトの実行ディレクトリを取得する</title>
		<description><![CDATA[bashでスクリプトのあるディレクトリの場所を取得する方法です。 rubyで言うところの File.dirname(File.expand_path(__FILE__)) を、bashでやりたかったのですが、今まで適当に誤摩化してました。こたえはこちらにありました。 Bashシェルスクリプトで自分の絶対パスを取得 echo $(cd $(dirname $0);pwd) shの理屈はよくわかってないのですが、どうやらこういうことのようです。 かっこ()内はサブシェルになるらしく、cdしても外側には影響がない $は括弧内の出力を文字列として展開する なるほどなるほど。 追記： と、思ったんですが、$()が単にバッククオートと同じ動作をするということっぽいです。単純に左右の対応がとれるので、バッククオートを入れ子にするようなややこしい事をするよりは簡単みたい？]]></description>
		<link>http://blog.gijutsuya.jp/harajune/2010/08/31/how-to-get-script-working-dir/</link>
			</item>
	<item>
		<title>X window を ssh 経由で止める</title>
		<description><![CDATA[修論に向けて大学にPCを持ち込んで実験環境を整えたのですが、自宅からsshでこれにアクセスして続きをしたりしています。 で、なんとなくメモリを見てみたら、相当X関係がメモリの無駄遣いをしている（様に見える 実際はcacheなので気にすることもないかなぁと思ったのですが、いらないので終了させてみました。 sudo /etc/init.d/gdm stop これでOK。 ちなみに、モノは試しでcacheをクリアするには。 echo 3 &#62; /proc/sys/vm/drop_caches でいけるらしい。]]></description>
		<link>http://blog.gijutsuya.jp/harajune/2010/08/26/how-to-stop-x-server-from-ssh/</link>
			</item>
	<item>
		<title>ruby 1.9.3 で readline6 を使ってコンパイルできない</title>
		<description><![CDATA[なぜか以下の様になって出来ない。 ext/readline % ruby extconf.rb checking for tgetnum() in -lncurses... yes checking for readline/readline.h... no checking for editline/readline.h... no checking for tgetnum() in -lncurses... yes checking for readline/readline.h... no checking for editline/readline.h... no extconf.rbを開いてみたらオプションを発見したので試してみたらこれでいけた。 ext/readline % ruby extconf.rb --enable-readline-v6 これで解決。]]></description>
		<link>http://blog.gijutsuya.jp/harajune/2010/08/21/ruby-1-9-3-%e3%81%a7-readline6-%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%a6%e3%82%b3%e3%83%b3%e3%83%91%e3%82%a4%e3%83%ab%e3%81%a7%e3%81%8d%e3%81%aa%e3%81%84/</link>
			</item>
	<item>
		<title>Vim7.3 が Mac でコンパイルできなかったのでpatchを書いた</title>
		<description><![CDATA[たぶん、--enable-multibyte をつけるとiconvが呼ばれる（？）らしく、そのときにコンパイルがこけます。 ので、簡単なパッチを書きました。 もし困ってる人がいたらご利用ください # よくよく使ってみたらSEGVしまくるので、あまりオススメできないかもしれないです]]></description>
		<link>http://blog.gijutsuya.jp/harajune/2010/08/18/vim73_compile_patch/</link>
			</item>
</channel>
</rss>

