2007年02月21日(水) [過去の今日]
#1 「赤信号、みんなで渡れば恐くない」を実際にやると……
痛いニュースの記事 で見つけたのだが、YouTubeに上海市内の交差点の映像があった。これがすさまじい。
まさに「赤信号、みんなで渡れば恐くない」を体現している。言葉ではよく聞くが、実際にやったところなんて見たことないので非常に驚いた。
物事の善悪はともかくとして、興味深い映像だ。
(@059)
#2 Super/Hyperキーの由来
こないだSuperキーの話を日記に書いたことから、Super/Hyperキーってのはどこから来たものなのか、という話題がIRCであった。Superキーは最近Windowsキーに割り当てて利用する人が増えているようで、KDE環境などではMetaキーがAltキーという表記になってるのと同様、Winキーという表記でSuperキーが使えるようになっている。
そんな話をしていたら、検索のうまい人というのはいるもので、またたくまに Space Saver II Keyboard で遊ぼう! 第3回 という記事を見つけて来てくれた。ありがとう、変なマシン好きの某氏。そこから引用すると
突然、かつマイナーネタですが、皆さん LMI 社の Lisp Machine の キーボードというのをご存じでしょうか?(中略)Space Bar の両脇に、Control, Meta, Super, Hyper という、強そうな、しかし何につかうのか、いまいち判らないキーが並んでいたそうです。
なんと、Lisp Machine由来だったのか。道理で対応してるアプリケーションがEmacsくらいしかなかったはず。
キー配列はその記事にもあるように、 HHKキーボードコレクション LISP Machine の項目で見ることができる。 俺も実機に搭載されてるのは初めて見た。写真で見てみたいなあ。 コンピュータ博物館 に行けばあるかなあ。
(@372)
#3 文系ブロガーでプログラミングやってますが
文系ブロガーがプログラミング習得するのは無理。 という記事。まあ見事に釣られたわ。
まあ確かに三十路になってからまったく未経験の状態でプログラミングをやろうってのは難しいかもなあ。
でもね、不可能ってことは無いと思うよ。波長の合う解説書にさえ出会えれば、そして夢中になってプログラミングするだけの時間があれば、年齢の壁なんて関係無いと信じたい。
そりゃスタート遅けりゃ不利だし、俺も本格的にプログラム書きはじめたのは20代半ばだ。10代という吸収力の高い時期に夢中になって書いてた人には絶対かなわないってことくらい、わかってる。
でも、今は高速道路があるから。ドキュメントも豊富だし、ぐぐればコード片は山程でてくるし、 コードサーチ なんかもあるしね。参考にできる物は山程ある。
簡単な所から始めてみればいい。まずはUNIXシェルで使える簡単なフィルタを書いてみるのが一番。標準入力からデータを読んでそのまま標準出力に出すプログラムでも書いてみるといいんじゃないかな。そこからデータを加工して出力するように改造して行く。たとえば順番を変えるとか、一部の文字を置換するとかね。
そういうものを作りながら、「標準入力ってなんだ?」とか「文字の置換はどうやるんだ?」とかいう疑問を一つ一つクリアしてくという過程で、調べ方が身につくと思うんだよね。少なくとも俺はそうだった。
それである程度プログラムが書けるようになったら、オープンソースのコードを読む。普段使ってるツールがどうやって動いてるのか理解する。咀嚼する。書き写す(コピペじゃなくね)。書き写したら改変する。とにかく動かしてエラーを見る。
そうこうしてるうちになんとなく書けるようになる……と思うんだけどなあ。まあ、自分がそうだからってだけなんだけどね。俺みたいな三流プログラマの見解なんて、あてになるかわからんしな。
(@617)
2007年02月22日(木) [過去の今日]
#1 Amazon Simple URI Version 2
Amazonのデザイン変更で動かなくなったので、新しいの作りました。以下よりどうぞ。
AmazonのURLを短くするAmazon Short URI
@ 以前のものは以下:
id:otsuneさんの調査 が面白かったので、前に作ったAmazon Simple URIをちょっと作り直してみた。
もちろんuser scriptなのでGreaseMonkey入ったFirefoxとかじゃないと使えないが、 これでotsuneさんが確認した3種類のURIを切り替えてテキストボックスに表示できるようになる。
んでもってこれ入れると、
こんな風になる。
チャットやメールでAmazonのURIを示すとき、やっぱり長いURIを張るのは気が引けるし、マナーとしてもどうかと思う。ぜひこれを使って短いURIをチャットやメールに張って欲しい。
どこぞのサイトを真似して俺もオチアフィリエイト付けてみるか。
(@106)
@ 翌日追記:
ShiraiさんがEmacs-w3m版を作 ってらっしゃるので、Emacsな漢はこちらでGo!
@ 2007-04-18追記:
いろいろバリエーションが増えてしまったので、ここにリンクだけ列挙する。
- Amazon Simple URI version 2.1 ……さらに短くなる改良版
- Amazon Simple URI bookmarklet ……IEなどでも使えるブックマークレット版
- AmazonのURIがうざったい件について ……最初に作った奴
2007年02月23日(金) [過去の今日]
#1 Emacsの世界は奥が深い
先日作った Amazon Simple URI Version 2 だが、 なんと Emacs-w3m版 を作られた方がいらっしゃる。
っていうかEmacs-w3mってこんなこともできるのね……。すごいなあ……。なんかJavaScriptをelisp変換して実行とかいう妄想を思い付いたのだが、さすがに自分でやろうとは思わないな。
(@454)
#2 腰が痛いので温泉……行きたいなあ
那須連山の麓という地域特性のおかげか、このへんはどこ掘っても温泉がでるらしく、市営の温泉銭湯なんかもある。
しかし老人向けなせいで昼間も夜もすいてたりはしないんだよなあ。とりあえず営業時間いつだっけと検索してたら、 Google Mapsにその温泉銭湯がある ことに気付いた。地図上だけじゃなくてちゃんと電話番号も載ってるのね。これ広告料払って載せてもらってるのかなあ。
自前のサイトも持ってないようなところがGoogleに広告出すとも思えないしなあ。Googleがユーザーの利便性のために調べまわってるのか? だとしたらすごいマンパワーが必要な気がするんだが。
うーん、Googleは謎が多いな。
(@474)
2007年02月24日(土) [過去の今日]
#1 ネットに慣れた人でも情報を見分けるのは難しい
ネット弁慶増加のおかげで、アナログな生き方の彼は勝ち組になれた というはてな匿名ダイアリーの記事が注目エントリに入っていた。
わかってる人はわかると思うが、これは完全な釣り記事だろう。 なんせ締めがこうだ。
人と会うときに
- 1通のメールを送る
- 1本の電話をする
ここが勝ち組負け組の分かれ道だという最後の言葉が、
とても印象的な木曜の夜だった。
こんなものは状況によって違う。
そりゃ慣れたコミュニケーション手法のほうがいいに決まってる。相手がメールに慣れてなければ電話、電話に慣れてなければ対面、対面に慣れてなければメール、大切なのは状況判断だろう。
片っ端から電話をかけて会ってくれる人を探すのと、片っ端からメールを投げて会ってくれる人を探すのと、どちらがいいかなんてくだらない。電話のほうが確率は高いとしても、メールは電話の数倍から数十倍は軽く投げられる。どっちもspamには変わり無いけどね。
さて、この記事に見られる特徴を挙げてみよう。
- 「勝ち組」というキーワード。儲け話は釣りの基本(ほんとうに儲かる話は表に出ないよ)
- ネットジャンキーが集まる場所でネットを否定してみる(釣りやすい)
- メールじゃなくて電話という簡単な結論(似非科学の結論と同じ)
大雑把にはこんなところだろうか。匿名ダイアリーなら発言の責任もないだろうし、俺もこういう記事捏造してみようかな。
しかし、電話などという相手にとってコストの高い手法が効果的だなんてなあ。アポ無し訪問の次くらいに迷惑な気もするんだが、まだまだそういう手法に効果があるというのは事実だろうな。なんせ名簿買ってきて片っ端から電話メソッドがまだまだ多いくらいだからな。
(@044)
2007年02月25日(日) [過去の今日]
#1 新聞の言論レベルは圧倒的に低い
毎日新聞……という昨今ではもう名前を出すだけで笑いがこみあげて来る誌名となったが、そこに「ネット君臨:識者座談会」という記事が掲載されている( 前編 ・ 後編 )。
そもそもネットを知らずに批判してる人がいるのはどういうわけか。まるで自動車がガソリンで走ることも知らぬまま自動車を非難してるようではないか。
柳田邦男氏 ネット上の発信者が突き止められるというのは建前論であって、市井のネット技術に詳しくない人や子供たちは中傷されたり、プライバシーを暴かれても、直ちに相手を捕まえられないので泣いているのが現状だ。
それは方法を知らないだけだ。abuse@にメールを投げるという RFC2142 に示された方法を知った上での発言とは到底思えない。「そんなもの技術者しか知らない」などという言いわけは成り立たない。それこそ検索すればいくらでも出てくるし、「悪用した人間を突き止めたいときはどうしたらいいんだ?」と詳しそうな人に聞くくらいのことはすべきだ。そもそも警察が市民に対してそういう回答をできないのはおかしい。
故意ではなく偶然に画像をダウンロードしたようなケースは、ログを示すなどの方法で過失によることが証明されると考える。
ログで故意かどうか確認できるとでも? 俺はエンジニアとして断言するが、そんなことは技術的に無理。恣意的な運用になるのは間違いない。
さらに匿名発言で泣いてる人がいるという話が出ていたが、実際そんなに傷ついてる人間がいるのか、俺は知らない。
柳田氏 (中略)受け手には一生ついて回ることでも、加害者は1回限りの「祭り」の楽しみで終わる。そこの差が認識されないと本質に迫れない。
そういうが、「祭り」の対象になるのはそれなりの理由がある。俺が今までに見てきた祭りの9割以上は、祭りのターゲットにされたサイトが「世界中に公開されてる記事」だということを認識して書かれてない場合や、そもそもサイトの記事のほうが非倫理的である場合ばかりだ。悪意だけでそんな大量の人間が集まったりしない。むしろ正義感の暴走こそが「祭り」なのである。
後編の最後に「連載第一部のあらまし」という形でこの座談会の文脈が示されている。 いまは既に読めないのだが、
- 第1回 難病の子 あざける「祭り」
- 第2回 嫌がる女児を撮影、知らぬ同士で「狩り」
- 第3回 静かな職場 システムが社員監視
という内容だそうだ。第1回は例の「死ぬ死ぬ詐欺」の話で、それについては 以前にも書いたとおり 、問題点がすでにネットで叫ばれてた中で起きたこと。それを理解せずに表面だけなぞるから馬鹿みたいな見解を出すはめになる。第2回はそれこそテロリストもインターネットを使って連絡を取り合ってるこの時代に、それだけ取り上げてネットの問題とするのはお門違いなのは明白だろう。第3回は社内人間関係の希薄化をOA化のせいだとする記事らしい。コメントする気も失せるほど馬鹿馬鹿しい話だ。第4回以降はまだ読めるが、一言で言えば「ネットに頼ると人間性が低くなる」という論調。 野球害毒論 と何が違うのか。
しかし、これくらいのことはblogやチャット、掲示板などであればすぐに反応が帰ってくるレベルの話だ。ネットでの言論はそういう意味ではかなりレベルが高い。悪の温床のように言われる2chだってこの座談会よりはマシな議論をしてる。
そう考えると新聞の言論レベルは非常に低いと言わざるを得ない。ネットによって失われるものは、むしろ権威をかさにきた低レベルな言論なのではないか?
司会がまとめにこう言っている。
新聞社も紙の媒体と同時にウェブサイトにニュースを流すネット社会の当事者です。ネット情報に誤りがあれば、訂正やおわびを掲載し、信頼される情報提供を目指しています。
そう言うのであれば、 J-CAST を見習え。ネットの議論に参加しろ。
それをやらなければ、この連載自体が「ネットは悪です。新聞を読みましょう」という利益誘導以外の何ものでもないと邪推されるのは間違いないだろう。 人に風の息づかいを感じろという なら、自分自身がネットの息づかいを感じて見せろ。それは自然の声を聞くより、ずっと簡単なことだ。
(@281)
2007年02月26日(月) [過去の今日]
#1 LdRでずっと出てこなかったフィードが出てきた
Livedoor Reader を利用するようになったのが昨年の初夏くらいだったと記憶してるが、それ以来一度も新着フィードに上ったことの無いフィードがある。 iwatamの個人サーバ というサイトのフィードなのだが、ここのコラムが秀逸で楽しみにしてただけに、何とかして欲しいと要望を送ったこともあった。こんな現象、うちだけだったのだろうか。
しかし今日、Firefox 2.0.0.2のビルドが終ってなんとなくLdRにアクセスしてみたら、新着フィードのトップに出てるではないか。
いやー、嬉しい。いままでどうして出てこなかったのかも不明だが、やっと出てきてくれるようになった。ちょうど ネット世代の心の闇を探る という新シリーズも始まったところで、今後見のがさずに済むと思うと非常にありがたい。
Livedoor Readerはもはや手放せない重要なツールになってるので、今後ともがんばってもらいたいと思う。
(@272)
#2 Firefox 2.0.0.2 は無事ビルドできた
2007年02月27日(火) [過去の今日]
#1 技術のガラパゴス諸島、ニッポン──日本が貧しくなっていく理由
なんとなく ?B を眺めていたら、 なぜiPhoneは日本で使えないの? という記事と IntelはWiMAXを促進するのか阻害するのか という記事が目に止まった。
二つの記事の共通点は、「日本の携帯電話が独自進化してるために使えない/使いにくい製品になっている」ということだ。
これを見て思い出したのが、 日本は「OSS界のガラパゴス諸島」か? という記事。ITmediaの 日本におけるOSSの幻想──OSS界のガラパゴス諸島、ニッポン という記事に対する/.-jのストーリーだ。
もしかして携帯電話に限らず、日本の技術はガラパゴス諸島のように、他の地域から隔離され始めてるのではないか?
だとしたら、輸出量が低下し、国内需要でどうにかしてることになる *1 。実際、携帯電話はほとんどそうだろう。
80年代まで、日本の製品はコンパクトで壊れにくいという評価をもらい、世界中に輸出されてきた。それが日本の高度経済成長の一因になったのは間違いないだろう。そこから国内需要だけに頼るような商売になっているなら、そりゃ内側で食い合ってるだけで儲かったりしないだろう。ますます貧乏になるだけだ。
俺は経済について詳しくもないからなんとも言えないが、やはりガラパゴス化した技術ばかりじゃ、国全体の利益にはならないだろうとは思うのである。
(@412)
#2 hnsにYOUTUBEコマンドを作ってみるテスト
hnsにyoutubeを貼り付けるテスト なんてものを見つけて、HNS熱再燃。IRCで相談したりして、themes.phに以下のような記述を追加。
package HNS::Hnf::Command::YOUTUBE; use vars qw(@ISA $Template $EndTemplate $NumAttr $IsOneline $AllowCommands $IsBeginSection $CountName $OmittableEnd); @ISA = qw(HNS::Hnf::Command::Decoration); $Template = qq( <div class="youtube"> <object width="425" height="350"><param name="movie" value="http://www.youtube.com/v/%1"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/%1" type="application/x-shockwave-flash" wmode="transparent" width="425" height="350"></embed></object> </div> ); $NumAttr = 1;
んでもって日記には
YOUTUBE bNF_P281Uu4
というようにyoutubeのvidを書く。すると、こうなる。
(@553)
#3 調子にのってhnsにASINコマンドも作ってみた
YOUTUBEコマンドができたことが嬉しくて、ついついamazonの個別商品リンクを作るコマンドも作ってしまった。
package HNS::Hnf::Command::ASIN; use vars qw(@ISA $Template $EndTemplate $NumAttr $IsOneline $AllowCommands $IsBeginSection $CountName $OmittableEnd); @ISA = qw(HNS::Hnf::Command::Decoration); $Template = qq( <div class="amazon"> <iframe src="http://rcm-jp.amazon.co.jp/e/cm?t=kitsune-22&o=9&p=8&l=as1&asins=%1&fc1=000000&IS2=1<1=_blank&lc1=0000FF&bc1=000000&bg1=FFFFFF&f=ifr" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe> </div> ); $NumAttr = 1;
中身はほとんどおんなじ。kitsune-22んとこは自分のアフィリエイトIDに書き換えてね(といっても今時HNS使ってる人なんてなかなかいないだろうけど……)。
(@574)
#4 嫁シリーズを読んで汚れた自分を知る
嫁シリーズ というはてな匿名ダイアリーの連載されてる記事があるそうだ。
内容はほのぼのとした嫁いじりの話であり、ノロケと言ってもいい内容。「うらやましいなあ」などという感想が上がっている。 俺もそんな風に思ったりもした。
「ああ、いいなあ」「嫁かわいいなちくしょう」「新婚さんなんだろなあ」
「きっとこんな夫婦も、10年もすればお互い罵りあうようになるんだろなあ」
……アレ?
どうやら俺の結婚というものに対する思考回路は、とことん汚れきってるらしい。一生独身間違い無しだな、こりゃ。
(@765)
2007年02月28日(水) [過去の今日]
#1 ホンダF1マシンと環境問題の本質
Honda Racing F1 Team 、環境をテーマにした新コンセプトを発表 という記事にも写真があるが、Google Earthから写真提供を受けたマシンのカラーリングが評判悪いらしい。
俺は別に悪いとは思わなかったのだがな。むしろスポンサーロゴをここまで排除できたホンダの交渉力と、写真をペインティングするという塗装技術の高さに驚いた。
myearthdream.comのHonda F1:360Rotation というページでは、このカラーリングのF1マシンをぐるぐるまわして遊ぶ事ができる。いろんな角度からじっくり見れるので、おすすめ。
もちろんホンダのイメージとはかけ離れたカラーリングだし、伝統のナショナルカラー *1 とも違う。そういう意味では非常に残念だ。しかし、今までのようなナショナルカラーを施せてたことが、スポンサーの色を使わなくてはならない現代F1では奇跡のような事だったのである。
そしてもちろん、環境問題への真剣な取り組みは重要だ。環境保護活動は勘違いした連中が目立つので、取り組む事自体が馬鹿馬鹿しく思えるかもしれない。しかしリアルな問題として、我々の孫や曾孫の時代には、地球に人間が住めなくなってるかもしれないのだ。
特に 団塊から上の世代に食い物にされてる ことを感じ取れる団塊ジュニア以降の世代には、上の世代の尻拭いをする辛さが身に染みるだろう。それをまた我々が子孫に尻拭いさせてはいけないのだ。
そのためにもできるだけ早く、地球環境を保護しなくてはならない。これは偽善でもなんでもない。ぶっちゃけて言えば 「人間が住むのに都合のいい状態を維持する」ための活動だ。地球というのは、どうも調べると人間が住むのに適した気温や湿度であったことのほうが少ないらしい。それでは困るので、どうにか地球のご機嫌を取って人間が住める状態にしておかなくてはならない。ただそれだけのことなのだ。
もちろんそのためにはたくさんの学問を総動員しなくてはならないし、いざというときのために宇宙や他の惑星に人間が住めるような研究も進めなくてはならないだろう。食料をどこから得るかという問題も解決しなくてはならない。地球の生物を採集して食べられるのはいつまでか、いつまでも採集できるようにするにはどうしたらいいか、それも考えなくてはならない。
そういう事を世間に知らしめるためにも、ホンダのような活動は重要だろう。もちろん企業としてクレームを避けるためのポーズも必要だろうが、それだけじゃ済まないのである。
「そういう事は学者や政治家に任せておけばいい」と言う人もいるが、それは社会主義国家の国民が言うことである。民主主義、資本主義の世界では、彼等に予算を与えたり権力を与えたりするのは一般国民なのだ。世論で学者や政治家を動かさなくてはならないのである。
そのためにも、ネットを使って情報を集めよう。選挙に行って「マシそうな人」、あるいは「ダメそうな人以外」に票を入れよう。機会を見つけて、話題にしよう。
それが子孫に尻拭いをさせないための、活動の一歩になる。
(@257)
#2 超間接的に貢献(?)
実は俺は元々Emacs-w3mのユーザーであった *2 のだが、うちの環境だとFirefoxのほうが速かったりして、結局あまり使わなくなってしまった。それでもEmacs上で見たほうが便利なHTMLドキュメントや、辞書を引きながら読みたい英文 *3 など、Emacs-w3mを利用する機会はまだ多少ある。
そんなわけで昔々にemacs-w3m MLにはsubscribeしてあったのだが、ふと気がつくと この前のGreaseMonkeyスクリプトのEmacs-w3m版 が commitされ ていた。
もちろんこれは 猫熊さん の功績であって俺は何もしてないのだが、なんとなく自分も間接的に貢献できたような気がしてとてもうれしい。いや、ホントに何もしてないけども、やっぱりなぜかうれしいのである。
@ 返信:
*3: Firefoxでも辞書は引けなくもないのだが、やはりlookup.elが便利なのである。
#3 ドラクエっぽく写真とセリフを演出
ドラクエふうしゃしんメーカー なるサイトができていた。おもしろそうなので例によってDQMAKERコマンドを作成して張り付け。
おもしろいのだが、ネタがなかなか思い付かない。笑える感じの写真とセリフの組み合わせはどうしたら見つけられるだろうか。
(@861)
#4 HTMLコマンドがあればいいじゃないか
なんかいろいろコマンド作ってて虚しくなって来た。そもそもHTMLを直接張り付けられるコマンドがあればいいのだ。
というわけで、Command.pmとDiary.pmをRTコマンドの実装を参考にいじくってみた。
--- Diary.pm.orig 2007-03-01 05:46:43.000000000 +0900 +++ Diary.pm 2007-03-01 05:56:09.000000000 +0900 @@ -44,7 +44,7 @@ use vars qw(%Head %Foot); use vars qw($BaseTemplate $NameTemplate $HrefTemplate %BaseTemplate %NameTemplate %HrefTemplate); # HNS::Diary::Template -use vars qw($RTMode @RTBuf); +use vars qw($RTMode @RTBuf $HTMLMode @HTMLBuf); use vars qw($YoteiHead $YoteiVal $YoteiFoot); @ISA = qw(ObjectTemplate HNS::Diary::Template); @@ -97,6 +97,9 @@ $RTMode = 0; # [0:Normal 1:Push 2:Convert] @RTBuf = (); +$HTMLMode = 0; +@HTMLBuf = (); + $YoteiVal = "<li>%value</li>"; $YoteiHead = "Schedule\n<ul>"; @@ -546,6 +549,23 @@ $RTMode = 0; } + ### HTML + if( $hnf_ =~ /^<\!--HTML START-->/ ) { $HTMLMode = 1; @HTMLBuf=(); return; } + if( $hnf_ =~ /^<\!--HTML END-->/ ) { $HTMLMode = 2; } + if( $HTMLMode == 1 ) { + push(@HTMLBuf, $hnf_); + return; + } elsif( $HTMLMode == 2 ){ + $hnf_ = '<div class="html">'; + $hnf_ .= join("", @HTMLBuf); + $hnf_ .= '</div>'; + $hnf_ =~ s/>/>/g; + $hnf_ =~ s/</</g; + $hnf_ =~ s/&/&/g; + $HTMLMode = 0; + } + + if ($HNS::System::Caching) { print X $hnf_; } --- Command.pm.orig 2007-03-01 06:12:05.000000000 +0900 +++ Command.pm 2007-03-01 06:12:18.000000000 +0900 @@ -35,7 +35,7 @@ $Entities{'Image'}, $Entities{'Replace'}, $Entities{'Comment'}]; -$Entities{'Cite'} = ['CITE', 'PRE','INCLUDE','RT']; +$Entities{'Cite'} = ['CITE', 'PRE','INCLUDE','RT','HTML']; $Entities{'List'} = ['UL', 'OL', 'DL']; $Entities{'Block'} = [$Entities{'Cite'}, $Entities{'List'}, 'P', 'DIV']; @@ -472,6 +472,16 @@ $Template = qq(<div class="%1">\n); $EndTemplate = "</div>\n"; +# HTML command +package HNS::Hnf::Command::HTML; +use vars qw(@ISA $Template $EndTemplate $NumAttr $IsOneline $AllowCommands +$IsBeginSection $CountName $OmittableEnd); +@ISA = qw(HNS::Hnf::Command::Cite); +$AllowCommands = ['']; +$Template = "<!--HTML START-->\n"; +$EndTemplate = "<!--HTML END-->\n"; +$OmittableEnd = 1; + ################################################################ # Sub Entities package HNS::Hnf::Command::Sub;
うちは好みで<p>の補完も入れることにした。
+ $hnf_ = '</p><div class="html">'; + $hnf_ .= join("", @HTMLBuf); + $hnf_ .= '</div><p>';
これで以下のようになる。
うまくいってるかな。
(@876)