This feed does not validate.
In addition, interoperability with the widest range of feed readers could be improved by implementing the following recommendations.
<id>hatenablog://blog/17680117127136072067</id>
^
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ja">
line 18, column 51: (30 occurrences) [help]
<id>hatenablog://entry/17680117127136072191</id>
^
line 42, column 0: (54 occurrences) [help]
<pre class="code" data-lang="" data-unlink>$ret = ...
line 42, column 0: (54 occurrences) [help]
<pre class="code" data-lang="" data-unlink>$ret = ...
line 425, column 42: (3 occurrences) [help]
<updated>2019-05-17T03:30:17+09:00</updated> <summary type="h ...
^
line 427, column 0: (16 occurrences) [help]
そこで、sun-java6+eclipse3.5+PDT2.1+pleiades1.3.0 をインストールしてみます。</p><p&g ...
line 427, column 0: (16 occurrences) [help]
そこで、sun-java6+eclipse3.5+PDT2.1+pleiades1.3.0 をインストールしてみます。</p><p&g ...
line 427, column 0: (32 occurrences) [help]
そこで、sun-java6+eclipse3.5+PDT2.1+pleiades1.3.0 をインストールしてみます。</p><p&g ...
line 783, column 0: (4 occurrences) [help]
「<<MAIN MENU>>」の「3) TEST MODE」選択(リモコンの3を押す)</p><p>3. ...
# RequestはPOST/GETですね </p><p>!!20080822 tokushima <form rt:re ...
line 2370, column 0: (3 occurrences) [help]
<updated>2019-05-17T03:30:40+09:00</updated> <summary type="h ...
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ja">
<title>gounx2の日記</title>
<link href="https://gounx2.hatenadiary.org/"/>
<updated></updated>
<author>
<name>gounx2</name>
</author>
<generator uri="https://blog.hatena.ne.jp/" version="70066b864cc9c7033e1b42340e8b05">Hatena::Blog</generator>
<id>hatenablog://blog/17680117127136072067</id>
<entry>
<title> バンクーバーオリンピック、競技日程&放映スケジュール</title>
<link href="https://gounx2.hatenadiary.org/entry/20100212/1265933361"/>
<id>hatenablog://entry/17680117127136072191</id>
<published>2010-02-12T09:09:21+09:00</published>
<updated>2019-05-17T03:30:09+09:00</updated> <summary type="html">各公式とおもわれるPDFへリンク競技日程競技日程(HTML)民放地上民放BSNHK</summary>
<content type="html"><p>各公式とおもわれるPDFへリンク</p><p><a href="http://www.joc.or.jp/vancouver/schedule/sj.pdf">&#x7AF6;&#x6280;&#x65E5;&#x7A0B;</a></p><p><a href="http://www.joc.or.jp/vancouver/schedule/index.html">&#x7AF6;&#x6280;&#x65E5;&#x7A0B;(HTML)</a></p><p><a href="http://nab.or.jp/index.php?plugin=attach&refer=2010%C7%AF01%B7%EE18%C6%FC%20%A1%CA%CA%F3%C6%BB%C8%AF%C9%BD%A1%CB%A5%D0%A5%F3%A5%AF%A1%BC%A5%D0%A1%BC%A5%AA%A5%EA%A5%F3%A5%D4%A5%C3%A5%AF%20%CC%B1%CA%FC%A5%C6%A5%EC%A5%D3%CA%FC%C1%F7%CF%C8%A4%CB%A4%C4%A4%A4%A4%C6&openfile=20100118TV.pdf">&#x6C11;&#x653E;&#x5730;&#x4E0A;</a></p><p><a href="http://nab.or.jp/index.php?plugin=attach&refer=2010%C7%AF01%B7%EE18%C6%FC%20%A1%CA%CA%F3%C6%BB%C8%AF%C9%BD%A1%CB%A5%D0%A5%F3%A5%AF%A1%BC%A5%D0%A1%BC%A5%AA%A5%EA%A5%F3%A5%D4%A5%C3%A5%AF%20%CC%B1%CA%FC%A5%C6%A5%EC%A5%D3%CA%FC%C1%F7%CF%C8%A4%CB%A4%C4%A4%A4%A4%C6&openfile=20100118BS.pdf">&#x6C11;&#x653E;&#xFF22;&#xFF33;</a></p><p><a href="http://www9.nhk.or.jp/olympic/onnhk/nhkvancouverbroadcast.pdf">&#xFF2E;&#xFF28;&#xFF2B;</a></p>
</content>
<category term="memo" label="memo" />
<link rel="enclosure" href="https://cdn.blog.st-hatena.com/images/theme/og-image-1500.png" type="image/png" length="0" />
<author>
<name>gounx2</name>
</author>
</entry>
<entry>
<title>preg_replaceでutf8文字列からコントロール文字を削除する。</title>
<link href="https://gounx2.hatenadiary.org/entry/20091127/1259291487"/>
<id>hatenablog://entry/17680117127136072377</id>
<published>2009-11-27T12:11:27+09:00</published>
<updated>2019-05-17T03:30:10+09:00</updated> <summary type="html">Unicode文字プロパティなるものを使うと、コントロール文字は「\p{Cc}」と表記できる。最初、 $ret = preg_replace('@\p{Cc}@', '', $utf8string);とやっていたのだけど、どうもうまく動いていない。結論、 $ret = preg_replace('@\p{Cc}@u', '', $utf8string);PHP: Unicode 文字プロパティ - Manual に「PHP 4.4.0 および 5.1.0 以降、UTF-8 モード を設定した場合に」と書いてあったのを見逃してた。。。</summary>
<content type="html"><p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Unicode">Unicode</a>文字プロパティなるものを使うと、コン<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C8%A5%ED%A1%BC%A5%EB">トロール</a>文字は「\p{Cc}」と表記できる。</p><p>最初、</p>
<pre class="code" data-lang="" data-unlink>$ret = preg_replace(&#39;@\p{Cc}@&#39;, &#39;&#39;, $utf8string);</pre><p>とやっていたのだけど、どうもうまく動いていない。</p><p>結論、</p>
<pre class="code" data-lang="" data-unlink>$ret = preg_replace(&#39;@\p{Cc}@u&#39;, &#39;&#39;, $utf8string);</pre><p><a href="http://jp2.php.net/manual/ja/regexp.reference.unicode.php">PHP: Unicode &#x6587;&#x5B57;&#x30D7;&#x30ED;&#x30D1;&#x30C6;&#x30A3; - Manual</a> に「<a class="keyword" href="http://d.hatena.ne.jp/keyword/PHP">PHP</a> 4.4.0 および 5.1.0 以降、<span style="font-weight:bold;"><a class="keyword" href="http://d.hatena.ne.jp/keyword/UTF-8">UTF-8</a> モード</span> を設定した場合に」と書いてあったのを見逃してた。。。</p>
</content>
<category term="php" label="php" />
<link rel="enclosure" href="https://cdn.blog.st-hatena.com/images/theme/og-image-1500.png" type="image/png" length="0" />
<author>
<name>gounx2</name>
</author>
</entry>
<entry>
<title> Iceweasel で URL を / 終わりで指定すると2回アクセスされる?</title>
<link href="https://gounx2.hatenadiary.org/entry/20091112/1258037475"/>
<id>hatenablog://entry/17680117127136072511</id>
<published>2009-11-12T23:51:15+09:00</published>
<updated>2019-05-17T03:30:11+09:00</updated> <summary type="html">アクセスの都度、DBにレコードをInsertする index.php を書いたのだけど、1アクセスにつき2レコードがInsertされるので悩んだ。調べてみると・・・ Iceweasel で http://hoge.com/fuga/ にアクセスすると、サーバ側では、get fuga/index.php が 連続で2回呼ばれてた。該当バージョンは・・・ $ dpkg -l | grep iceweasel ii iceweasel 3.0.6-3 lightweight web browser based on Mozilla ii iceweasel-gnome-support 3.0.6-3…</summary>
<content type="html"><p>アクセスの都度、DBにレコードをInsertする index.<a class="keyword" href="http://d.hatena.ne.jp/keyword/php">php</a> を書いたのだけど、1アクセスにつき2レコードがInsertされるので悩んだ。</p><p>調べてみると・・・<br />
<a class="keyword" href="http://d.hatena.ne.jp/keyword/Iceweasel">Iceweasel</a> で <a href="http://hoge.com/fuga/">http://hoge.com/fuga/</a> にアクセスすると、サーバ側では、get fuga/index.<a class="keyword" href="http://d.hatena.ne.jp/keyword/php">php</a> が 連続で2回呼ばれてた。</p><p>該当バージョンは・・・</p>
<pre class="code" data-lang="" data-unlink>$ dpkg -l | grep iceweasel
ii iceweasel 3.0.6-3 lightweight web browser based on Mozilla
ii iceweasel-gnome-support 3.0.6-3 Support for GNOME in Iceweasel
ii iceweasel-l10n-ja 1:3.0.6+debian-1 Japanese language package for Iceweasel</pre><p>念のため、別ブラウザ(<a class="keyword" href="http://d.hatena.ne.jp/keyword/Epiphany">Epiphany</a>/2.22)も調べたが再現せず。従って <a class="keyword" href="http://d.hatena.ne.jp/keyword/Iceweasel">Iceweasel</a> の問題のようだ。(apache2側の問題ではなさそう)</p>
</content>
<category term="debian" label="debian" />
<category term="lenny" label="lenny" />
<link rel="enclosure" href="https://cdn.blog.st-hatena.com/images/theme/og-image-1500.png" type="image/png" length="0" />
<author>
<name>gounx2</name>
</author>
</entry>
<entry>
<title>一次資料見ればいいじゃない。</title>
<link href="https://gounx2.hatenadiary.org/entry/20090903/1251972840"/>
<id>hatenablog://entry/17680117127136072680</id>
<published>2009-09-03T19:14:00+09:00</published>
<updated>2019-05-17T03:30:12+09:00</updated> <summary type="html">元の報道番組見たわけではないが、記事書いた人に踊らされている。 何はともあれ。一次資料見ればいいじゃない。と思った。はてなブックマーク - 民主党「渋滞しそうな高速道路は無料化しない。選挙前は言いにくかった」|デジタルマガジン民主党マニフェストより引用 30.高速道路を原則無料化して、 地域経済の活性化を図る 【政策目的】 ○流通コストの引き下げを通じて、生活 コストを引き下げる。 ○産地から消費地へ商品を運びやすいよ うにして、地域経済を活性化する。 ○高速道路の出入り口を増設し、今ある 社会資本を有効に使って、渋滞などの 経済的損失を軽減する。 【具体策】 ○割引率の順次拡大などの社会実験…</summary>
<content type="html"><p>元の報道番組見たわけではないが、記事書いた人に踊らされている。<br />
何はともあれ。一次資料見ればいいじゃない。と思った。</p><p><a href="http://b.hatena.ne.jp/entry/digimaga.net/2009/09/dpj-said-only-a-part-of-the-highway-is-free.html">&#x306F;&#x3066;&#x306A;&#x30D6;&#x30C3;&#x30AF;&#x30DE;&#x30FC;&#x30AF; - &#x6C11;&#x4E3B;&#x515A;&#x300C;&#x6E0B;&#x6EDE;&#x3057;&#x305D;&#x3046;&#x306A;&#x9AD8;&#x901F;&#x9053;&#x8DEF;&#x306F;&#x7121;&#x6599;&#x5316;&#x3057;&#x306A;&#x3044;&#x3002;&#x9078;&#x6319;&#x524D;&#x306F;&#x8A00;&#x3044;&#x306B;&#x304F;&#x304B;&#x3063;&#x305F;&#x300D;&#xFF5C;&#x30C7;&#x30B8;&#x30BF;&#x30EB;&#x30DE;&#x30AC;&#x30B8;&#x30F3;</a></p><p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%CC%B1%BC%E7%C5%DE">民主党</a><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%DE%A5%CB%A5%D5%A5%A7%A5%B9%A5%C8">マニフェスト</a>より引用</p>
<pre class="code" data-lang="" data-unlink>30.高速道路を原則無料化して、
地域経済の活性化を図る
【政策目的】
○流通コストの引き下げを通じて、生活
コストを引き下げる。
○産地から消費地へ商品を運びやすいよ
うにして、地域経済を活性化する。
○高速道路の出入り口を増設し、今ある
社会資本を有効に使って、渋滞などの
経済的損失を軽減する。
【具体策】
○割引率の順次拡大などの社会実験を実
施し、その影響を確認しながら、高速
道路を無料化していく。
【所要額】
1.3 兆円程度</pre><p>ところで、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%DE%A5%CB%A5%D5%A5%A7%A5%B9%A5%C8">マニフェスト</a>だけど、民主と自民でアプローチの仕方がまったく違うよね。<br />
まだ見たこと無い人は、さっと見てみるといいよ。<br />
提案書として考えると、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%CC%B1%BC%E7%C5%DE">民主党</a>のがいいのかね? だがプレゼンうけするのは、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%BC%AB%CC%B1%C5%DE">自民党</a>っぽい気もする。<br />
<a href="http://www.dpj.or.jp/special/manifesto2009/pdf/manifesto_2009.pdf">&#x6C11;&#x4E3B;&#x515A;&#x30DE;&#x30CB;&#x30D5;&#x30A7;&#x30B9;&#x30C8;</a><br />
<a href="http://www.jimin.jp/sen_syu45/seisaku/pdf/2009_yakusoku_a.pdf">&#x81EA;&#x7531;&#x6C11;&#x4E3B;&#x515A;&#x30DE;&#x30CB;&#x30D5;&#x30A7;&#x30B9;&#x30C8;</a></p>
</content>
<link rel="enclosure" href="https://cdn.blog.st-hatena.com/images/theme/og-image-1500.png" type="image/png" length="0" />
<author>
<name>gounx2</name>
</author>
</entry>
<entry>
<title> EccPC701SD-X 最適化&プチフリ対策</title>
<link href="https://gounx2.hatenadiary.org/entry/20090824/1251099809"/>
<id>hatenablog://entry/17680117127136072788</id>
<published>2009-08-24T16:43:29+09:00</published>
<updated>2019-05-17T03:30:13+09:00</updated> <summary type="html">最適化はそこそこやってたんだけど、久々に使ってみると、SSDのプチフリが強烈すぎて、もうね。使えないレベル。こんなのだったっけ?調べてみると、701SD-Xは使用時間に比例してどんどんひどくなるらしい。地雷踏んじゃったかな。で、結論としては、使えるレベルに復旧できた。OSレベルの設定見直しは、購入時点でやっていたので、その他の対策を実施した。 FlashFire導入 EWFとかいうのは失敗したときのリスクが大きそうだったので導入せず。代替でFlashFireを見つけた。これお勧め。 FlashFire: SSD Accelerator デフラグ SSDではあまりやるべきではない。というような情…</summary>
<content type="html"><p>最適化はそこそこやってたんだけど、久々に使ってみると、<a class="keyword" href="http://d.hatena.ne.jp/keyword/SSD">SSD</a>の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D7%A5%C1%A5%D5%A5%EA">プチフリ</a>が強烈すぎて、もうね。使えないレベル。こんなのだったっけ?調べてみると、701SD-Xは使用時間に比例してどんどんひどくなるらしい。地雷踏んじゃったかな。で、結論としては、使えるレベルに復旧できた。OSレベルの設定見直しは、購入時点でやっていたので、その他の対策を実施した。</p>
<div class="section">
<h4>FlashFire導入</h4>
<p>EWFとかいうのは失敗したときのリスクが大きそうだったので導入せず。代替でFlashFireを見つけた。これお勧め。<br />
<a href="http://flashfire.org/xe/">FlashFire: SSD Accelerator</a><br />
</p>
</div>
<div class="section">
<h4><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%D5%A5%E9%A5%B0">デフラグ</a></h4>
<p><a class="keyword" href="http://d.hatena.ne.jp/keyword/SSD">SSD</a>ではあまりやるべきではない。というような情報もあったけど実施。</p>
</div>
<div class="section">
<h4>メモリ増設は実施せず。</h4>
<p>これまでの対策で使えるレベルに復帰したので、標準の512Mのまま使ってます。</p>
</div>
<div class="section">
<h4><a class="keyword" href="http://d.hatena.ne.jp/keyword/firefox">firefox</a>のキャッシュ先をramディスクに変更。</h4>
<p>そもそもメモリ512Mしかないので、それをramディスクに割り当てるのはもったいないのですが、キャッシュの更新って頻繁にあるでしょうから、あえて割り当ててみた。たったの32Kですが。。。<br />
<a href="http://hp.vector.co.jp/authors/VA000363/release/index.htm">ERAM for WindowsNT3.51/4.0/2000/XP Ver 2.20 &#x30C9;&#x30E9;&#x30A4;&#x30D0;</a>を使用<br />
<a href="http://nofx2.txt-nifty.com/it/2008/11/firefox-055d.html">firefox&#x306E;&#x30AD;&#x30E3;&#x30C3;&#x30B7;&#x30E5;&#x5148;&#x3092;RAMDisk&#x3078;&#x5909;&#x66F4;</a><br />
</p>
</div>
<div class="section">
<h4><a class="keyword" href="http://d.hatena.ne.jp/keyword/%B2%BE%C1%DB%A5%E1%A5%E2%A5%EA">仮想メモリ</a>を0にしてたら、アプリがたまに強制終了する。</h4>
<p>そんなにたくさんのアプリ立ち上げて無いんだがな。まぁ、512Mしかないから。。。SDカードスロットにあまってた1Gを刺して、これを<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B2%BE%C1%DB%A5%E1%A5%E2%A5%EA">仮想メモリ</a>用に割り当てて使ってます。</p>
</div>
<div class="section">
<h4><a class="keyword" href="http://d.hatena.ne.jp/keyword/andLinux">andLinux</a>インストールした。</h4>
<p>普通に使えてます。(そもそも、これをやりたかった)</p>
</div>
<div class="section">
<h4>参考にさせてもらったサイト</h4>
<p><a href="http://hyamada.ddo.jp/hiki/hiki.cgi?eeepc#l4">&#x3072;&#x3083;&#x307E;&#x3060;&#x306E;&#x30C6;&#x30AD;&#x30B9;&#x30C8;&#x3067;&#x884C;&#x3053;&#x3046; - eeepc</a><br />
<a href="http://masabuu.com/pc-joy/2009/01/ssd.html">SSD&#x306E;&#x30D7;&#x30C1;&#x30D5;&#x30EA;&#x5BFE;&#x7B56;&#x3001;&#x5EF6;&#x547D;&#x63AA;&#x7F6E;&#x3000;&#x307E;&#x3068;&#x3081;&#xFF0E; - &#x30D1;&#x30BD;&#x30B3;&#x30F3;&#x3042;&#x305D;&#x3073;&#xFF0E;</a><br />
<a href="http://project-r.org/eeepc/optimaizeeee.html">&#x30BC;&#x30ED;&#x304B;&#x3089;&#x59CB;&#x3081;&#x308B;Eee PC-Windows XP&#x3092;Eee PC&#x306B;&#x6700;&#x9069;&#x5316;&#x3059;&#x308B;</a></p>
</div></content>
<category term="eeepc" label="eeepc" />
<link rel="enclosure" href="https://cdn.blog.st-hatena.com/images/theme/og-image-1500.png" type="image/png" length="0" />
<author>
<name>gounx2</name>
</author>
</entry>
<entry>
<title>debian lenny に nilfs2 をインスールする。</title>
<link href="https://gounx2.hatenadiary.org/entry/20090817/1250505063"/>
<id>hatenablog://entry/17680117127136072923</id>
<published>2009-08-17T19:31:03+09:00</published>
<updated>2019-05-17T03:30:14+09:00</updated> <summary type="html">lenny(stable)のパッケージを使う。 公式 NILFS Download にOSに応じたインストール方法がまとめられています。要約すると、次の通りカーネルに応じたmoduleと、toolのパッケージをインストールするだけです。 aptitude install nilfs2-modules-2.6.26-2-686 aptitude install nilfs2-tools簡単ですね。しかしながら、lenny(stable)でインストール可能な nilfs2 は 2.0.6 と古いです。 新しいのを使いたいので、stable以外を探してみます。なお、stable以外からのパッケージの…</summary>
<content type="html">
<div class="section">
<h4>lenny(stable)のパッケージを使う。</h4>
<p>公式 <a href="http://www.nilfs.org/ja/download.html">NILFS Download</a> にOSに応じたインストール方法がまとめられています。要約すると、次の通り<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%AB%A1%BC%A5%CD%A5%EB">カーネル</a>に応じたmoduleと、toolのパッケージをインストールするだけです。</p>
<pre class="code" data-lang="" data-unlink>aptitude install nilfs2-modules-2.6.26-2-686
aptitude install nilfs2-tools</pre><p>簡単ですね。しかしながら、lenny(stable)でインストール可能な nilfs2 は 2.0.6 と古いです。<br />
新しいのを使いたいので、stable以外を探してみます。</p><p>なお、stable以外からのパッケージの借り方は <a href="http://d.hatena.ne.jp/gounx2/20090814/1250259343">debian lenny(stable) &#x3067; stable &#x4EE5;&#x5916;&#x306E;&#x30D1;&#x30C3;&#x30B1;&#x30FC;&#x30B8;&#x3092;&#x4F7F;&#x3046;&#x3002; - gounx2&#x306E;&#x65E5;&#x8A18;</a> を参照ください。</p>
</div>
<div class="section">
<h4>lenny-backports のパッケージを使う。</h4>
<p>nilfs2は kernel 2.6.30 から<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%AB%A1%BC%A5%CD%A5%EB">カーネル</a>本体に含まれています。これを backports からインストールしてみます。</p><p>まず、2.6.30があるか確認</p>
<pre class="code" data-lang="" data-unlink>$ aptitude search linux-image-2.6.30
p linux-image-2.6.30-bpo.1-486 - Linux 2.6.30 image on x86
p linux-image-2.6.30-bpo.1-686 - Linux 2.6.30 image on PPro/Celeron/PII/PIII/P4
p linux-image-2.6.30-bpo.1-686-bigmem - Linux 2.6.30 image on PPro/Celeron/PII/PIII/P4
p linux-image-2.6.30-bpo.1-amd64 - Linux 2.6.30 image on AMD64 </pre><p>念のため、出所を確認してからインストール&リブート</p>
<pre class="code" data-lang="" data-unlink>$ apt-cache policy linux-image-2.6.30-bpo.1-686
linux-image-2.6.30-bpo.1-686:
インストールされているバージョン: (なし)
候補: 2.6.30-5~bpo50+1
バージョンテーブル:
2.6.30-5~bpo50+1 0
1 http://www.backports.org lenny-backports/main Packages
$ sudo aptitude install linux-image-2.6.30-bpo.1-686
:
$ sudo reboot
:
$ uname -a
Linux debianlenny 2.6.30-bpo.1-686 #1 SMP Wed Aug 5 18:28:33 UTC 2009 i686 GNU/Linux</pre><p>nilfs2の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D1%A1%BC%A5%C6%A5%A3%A5%B7%A5%E7%A5%F3">パーティション</a>をマウント</p>
<pre class="code" data-lang="" data-unlink>$ sudo mount -t nilfs2 /dev/sdb1 /nilfs
mount.nilfs2: WARNING! - The NILFS on-disk format may change at any time.
mount.nilfs2: WARNING! - Do not place critical data on a NILFS filesystem.</pre><p>警告出すようになったんですね。(stable のパッケージでは警告でませんでした)<br />
自己責任でってことで。</p><p>次にツールを入れようとしたんですが、残念ながら</p>
<pre class="code" data-lang="" data-unlink>$ aptitude search nilfs2-tool
i nilfs2-tools - Continuous Snapshotting Log-structured Filesystem
$
$ apt-cache policy nilfs2-tools
nilfs2-tools:
インストールされているバージョン: 2.0.6-1
候補: 2.0.6-1
バージョンテーブル:
2.0.14-2 0
200 http://ftp.jp.debian.org squeeze/main Packages
*** 2.0.6-1 0
500 http://ftp.jp.debian.org lenny/main Packages
100 /var/lib/dpkg/status</pre><p>lenny-backports には nilfs2-tools が存在しませんでした。仕方がないので、testing の 2.0.14 を使うことにします。<br />
(kernel 2.6.30 上で、2.0.6のツールを使うとエラーになります。ioctlまわりのI/Fが変ったようです)</p>
</div>
<div class="section">
<h4>仕方がないので、squeeze(testing) から nilfs2-tools をインストールする。</h4>
<pre class="code" data-lang="" data-unlink>goun@debianlenny:~$ sudo aptitude install nilfs2-tools/testing
パッケージリストを読み込んでいます... 完了
:
以下のパッケージが削除されます:
module-assistant{u} nilfs2-source{u}
以下のパッケージが更新されます:
nilfs2-tools
更新: 1 個、新規インストール: 0 個、削除: 2 個、保留: 6 個。
102kB のアーカイブを取得する必要があります。展開後に 684kB のディスク領域が解放されます。
先に進みますか? [Y/n/?] y</pre><p>あれっ、2パッケージ削除されるみたい。<br />
まぁ、いっか。。。</p><p>一応コマンド動いてるようです。</p>
</div></content>
<category term="debian" label="debian" />
<category term="lenny" label="lenny" />
<category term="nilfs2" label="nilfs2" />
<link rel="enclosure" href="https://cdn.blog.st-hatena.com/images/theme/og-image-1500.png" type="image/png" length="0" />
<author>
<name>gounx2</name>
</author>
</entry>
<entry>
<title>debian lenny(stable) で stable 以外のパッケージを使う。</title>
<link href="https://gounx2.hatenadiary.org/entry/20090814/1250259343"/>
<id>hatenablog://entry/17680117127136073069</id>
<published>2009-08-14T23:15:43+09:00</published>
<updated>2019-05-17T03:30:15+09:00</updated> <summary type="html">基本 lenny(stable) を使っているが一部パッケージを stable 以外から持ってくる方法を書きます。 注意点 testing,unstableのパッケージを導入すると、基本となるライブラリ(glibcなど)から変っていることがあるので連鎖的に大量のアップグレードが発生することがあり、環境が壊れてしまう可能性もあるようです。 backportsのパッケージ導入は、上記のような危険性はありませんが、Debian公式パッケージではないので、stableと比較すると信頼性に劣るようです。 /etc/apt/sources.listの設定 (使わないものはコメントアウトしておいた方がよい)…</summary>
<content type="html"><p>基本 lenny(stable) を使っているが一部パッケージを stable 以外から持ってくる方法を書きます。</p>
<div class="section">
<h4>注意点</h4>
<ul>
<li>testing,unstableのパッケージを導入すると、基本となるライブラリ(<a class="keyword" href="http://d.hatena.ne.jp/keyword/glibc">glibc</a>など)から変っていることがあるので連鎖的に大量のアップグレードが発生することがあり、環境が壊れてしまう可能性もあるようです。</li>
<li>backportsのパッケージ導入は、上記のような危険性はありませんが、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Debian">Debian</a>公式パッケージではないので、stableと比較すると信頼性に劣るようです。</li>
</ul>
</div>
<div class="section">
<h4>/etc/apt/sources.listの設定</h4>
<p>(使わないものは<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B3%A5%E1%A5%F3%A5%C8%A5%A2%A5%A6%A5%C8">コメントアウト</a>しておいた方がよい)</p>
<pre class="code" data-lang="" data-unlink># lenny(stable)
deb http://ftp.jp.debian.org/debian/ lenny main non-free
deb-src http://ftp.jp.debian.org/debian/ lenny main non-free
deb http://security.debian.org/ lenny/updates main non-free
deb-src http://security.debian.org/ lenny/updates main non-free
deb http://volatile.debian.org/debian-volatile/ lenny/volatile main
deb-src http://volatile.debian.org/debian-volatile/ lenny/volatile main
# lenny-backports
deb http://www.backports.org/debian lenny-backports main contrib non-free
deb-src http://www.backports.org/debian lenny-backports main contrib non-free
# squeeze(testing)
deb http://ftp.jp.debian.org/debian/ testing main non-free
deb-src http://ftp.jp.debian.org/debian/ testing main non-free
# sid(unstable)
deb http://ftp.jp.debian.org/debian/ unstable main non-free
deb-src http://ftp.jp.debian.org/debian/ unstable main non-free</pre>
</div>
<div class="section">
<h4>lenny-backports用 公開鍵インストール</h4>
<p>updateすると次のように公開鍵が無いと言われます。</p>
<pre class="code" data-lang="" data-unlink>$ sudo aptitude update
:
取得:16 http://security.debian.org lenny/updates/main Sources [47.2kB]
発見 http://security.debian.org lenny/updates/non-free Sources
583kB を 3s 秒でダウンロードしました (156kB/s)
パッケージリストを読み込んでいます... 完了
W: GPG error: http://www.backports.org lenny-backports Release: 公開鍵を利用できないため、以下の署名は検証できませんでした: NO_PUBKEY EA8E8B2116BA136C
W: これらの問題を解決するためには apt-get update を実行する必要があるかもしれません</pre><p>公開鍵をインストールしてから再度updateします。</p>
<pre class="code" data-lang="" data-unlink>$ sudo aptitude install debian-backports-keyring
$ sudo aptitude update</pre>
</div>
<div class="section">
<h4>設定ミスしていないか念のため確認</h4>
<p>設定を誤るとupgradeでtestingやsid環境へ移行してしまうかもしれません。upgrade を -s オプションを付けて確認します。</p>
<pre class="code" data-lang="" data-unlink>$ sudo aptitude -s safe-upgrade</pre>
</div>
<div class="section">
<h4>インストールのミス防止の為に。</h4>
<p>1.情報を最新にしておく。</p>
<pre class="code" data-lang="" data-unlink>aptitude update</pre><p>2.インストールしたいパッケージの使用可能なバージョン等を確認する。</p>
<pre class="code" data-lang="" data-unlink>apt-cache policy パッケージ名</pre><p>3.明示的に<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A2%A1%BC%A5%AB%A5%A4%A5%D6">アーカイブ</a>名(stable,lenny-backports,testing,unstableなど)も指定する。<br />
(さらに慎重にするなら -s オプションでテストしておく)</p>
<pre class="code" data-lang="" data-unlink>aptitude install パッケージ名/アーカイブ名</pre><p>例えば、libapache2-<a class="keyword" href="http://d.hatena.ne.jp/keyword/svn">svn</a> をインストールしたいとき。まず apt-cache policy で使用可能なバージョンを調べる。</p>
<pre class="code" data-lang="" data-unlink>$ apt-cache policy libapache2-svn
libapache2-svn:
インストールされているバージョン: (なし)
候補: 1.5.1dfsg1-4
バージョンテーブル:
1.6.4dfsg-1 0
90 http://ftp.jp.debian.org unstable/main Packages
1.6.3dfsg-1 0
100 http://ftp.jp.debian.org testing/main Packages
1.5.1dfsg1-4 0
500 http://security.debian.org lenny/updates/main Packages
1.5.1dfsg1-2 0
500 http://ftp.jp.debian.org lenny/main Packages</pre><p>以上より、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A2%A1%BC%A5%AB%A5%A4%A5%D6">アーカイブ</a>名を指定すれば希望のバージョンをインストールできる。</p>
<pre class="code" data-lang="" data-unlink>aptitude install libapache2-svn/unstable -- 1.6.4dfsg-1 をインストール
aptitude install libapache2-svn/testing -- 1.6.3dfsg-1 をインストール
aptitude install libapache2-svn/stable -- 1.5.1dfsg1-4 をインストール</pre>
</div>
<div class="section">
<h4>アップグレードのミス防止の為に。</h4>
<p>1.情報を最新にしておく。</p>
<pre class="code" data-lang="" data-unlink>aptitude update</pre><p>2.アップグレードされるパッケージを確認</p>
<pre class="code" data-lang="" data-unlink>apt-show-versions -u</pre><p>例</p>
<pre class="code" data-lang="" data-unlink>$ apt-show-versions -u
libmagick++10/lenny upgradeable from 7:6.3.7.9.dfsg2-1~lenny1 to 7:6.3.7.9.dfsg2-1~lenny3
libmagick10/lenny upgradeable from 7:6.3.7.9.dfsg2-1~lenny1 to 7:6.3.7.9.dfsg2-1~lenny3
libruby1.8/lenny upgradeable from 1.8.7.72-3 to 1.8.7.72-3lenny1
libxml2/lenny upgradeable from 2.6.32.dfsg-5 to 2.6.32.dfsg-5+lenny1
libxml2-utils/lenny upgradeable from 2.6.32.dfsg-5 to 2.6.32.dfsg-5+lenny1
python-libxml2/lenny upgradeable from 2.6.32.dfsg-5 to 2.6.32.dfsg-5+lenny1</pre><p>3.アップグレード</p>
<pre class="code" data-lang="" data-unlink>aptitude safe-upgrade
aptitude full-upgrade -- 不要パッケージの削除も行う。</pre>
</div>
<div class="section">
<h4>参考</h4>
<ul>
<li><a href="http://backports.org/dokuwiki/doku.php?id=instructions">instructions - Debian Backports</a></li>
<li><a href="http://www.debian.org/doc/manuals/debian-reference/ch02.ja.html">&#x7B2C;2&#x7AE0; Debian&#x30D1;&#x30C3;&#x30B1;&#x30FC;&#x30B8;&#x7BA1;&#x7406;</a></li>
<li><a href="http://debian.fam.cx/index.php?AptGet#f2d52afb">testing &#x3084; unstable &#x306E;&#x30D1;&#x30C3;&#x30B1;&#x30FC;&#x30B8;&#x3092;&#x501F;&#x308A;&#x305F;&#x3044; - D: AptGet - Debian GNU/Linux &#x30B9;&#x30EC;&#x30C3;&#x30C9;&#x30C6;&#x30F3;&#x30D7;&#x30EC;</a></li>
</ul>
</div></content>
<category term="debian" label="debian" />
<category term="lenny" label="lenny" />
<link rel="enclosure" href="https://cdn.blog.st-hatena.com/images/theme/og-image-1500.png" type="image/png" length="0" />
<author>
<name>gounx2</name>
</author>
</entry>
<entry>
<title> eclipse3.5+PDT2.1 環境で、新規PHPプロジェクトが作れない。</title>
<link href="https://gounx2.hatenadiary.org/entry/20090813/1250175473"/>
<id>hatenablog://entry/17680117127136073197</id>
<published>2009-08-13T23:57:53+09:00</published>
<updated>2019-05-17T03:30:17+09:00</updated> <summary type="html">「ファイル→新規→PHPプロジェクト」から作成すると、次のエラーになった。 要素の作成に失敗しました。 Reason: プロジェクト sample001 のビルド・パスには重複エントリー 'usr/local/eclipse/ecl3.5pdt2.1/plugins/org.eclipse.php.core_2.1.0.v20090617-2341/Resources/language/php5/' が含まれていますで、「ライブラリー」から「PHP言語ライブラリー」を削除することで回避できました。情報は以下から。thxTakeWeblog: Eclipse3.5(Galileo) PDTで、新…</summary>
<content type="html"><p>「ファイル→新規→<a class="keyword" href="http://d.hatena.ne.jp/keyword/PHP">PHP</a>プロジェクト」から作成すると、次のエラーになった。</p>
<pre class="code" data-lang="" data-unlink>要素の作成に失敗しました。
Reason:
プロジェクト sample001 のビルド・パスには重複エントリー
&#39;usr/local/eclipse/ecl3.5pdt2.1/plugins/org.eclipse.php.core_2.1.0.v20090617-2341/Resources/language/php5/&#39;
が含まれています</pre><p>で、「ライブラリー」から「<a class="keyword" href="http://d.hatena.ne.jp/keyword/PHP">PHP</a>言語ライブラリー」を削除することで回避できました。</p><p>情報は以下から。thx</p><p><a href="http://takeweblog.blogspot.com/2009/07/eclipse35galileo-pdtphp.html">TakeWeblog: Eclipse3.5(Galileo) PDT&#x3067;&#x3001;&#x65B0;&#x898F;PHP&#x30D7;&#x30ED;&#x30B8;&#x30A7;&#x30AF;&#x30C8;&#x4F5C;&#x6210;&#x304C;&#x3067;&#x304D;&#x306A;&#x3044;&#x5834;&#x5408;</a></p>
</content>
<category term="php" label="php" />
<link rel="enclosure" href="https://cdn.blog.st-hatena.com/images/theme/og-image-1500.png" type="image/png" length="0" />
<author>
<name>gounx2</name>
</author>
</entry>
<entry>
<title> debian上にPHPのeclipse環境(PDT)を構築してみます。</title>
<link href="https://gounx2.hatenadiary.org/entry/20090812/1250085132"/>
<id>hatenablog://entry/17680117127136073293</id>
<published>2009-08-12T22:52:12+09:00</published>
<updated>2019-05-17T03:30:17+09:00</updated> <summary type="html">lennyのmainコンポーネントで提供されているパッケージを使った場合、javaはgcj、eclipseは3.2 しかインストールできないようです。 そこで、sun-java6+eclipse3.5+PDT2.1+pleiades1.3.0 をインストールしてみます。 sun-java6 インストール /etc/apt/sources.list に non-free コンポーネントが含まれることを確認 deb http://ftp.jp.debian.org/debian/ lenny main non-free deb-src http://ftp.jp.debian.org/debian…</summary>
<content type="html"><p>lennyのmain<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B3%A5%F3%A5%DD%A1%BC%A5%CD%A5%F3%A5%C8">コンポーネント</a>で提供されているパッケージを使った場合、<a class="keyword" href="http://d.hatena.ne.jp/keyword/java">java</a>は<a class="keyword" href="http://d.hatena.ne.jp/keyword/gcj">gcj</a>、<a class="keyword" href="http://d.hatena.ne.jp/keyword/eclipse">eclipse</a>は3.2 しかインストールできないようです。<br />
そこで、sun-java6+eclipse3.5+PDT2.1+pleiades1.3.0 をインストールしてみます。</p><p><span itemscope itemtype="http://schema.org/Photograph"><a href="http://f.hatena.ne.jp/gounx2/20090812225020" class="hatena-fotolife" itemprop="url"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/g/gounx2/20090812/20090812225020.png" alt="f:id:gounx2:20090812225020p:image" title="f:id:gounx2:20090812225020p:image" class="hatena-fotolife" itemprop="image"></a></span><br />
</p>
<div class="section">
<h4>sun-java6 インストール</h4>
<p>/etc/apt/sources.list に non-free <a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B3%A5%F3%A5%DD%A1%BC%A5%CD%A5%F3%A5%C8">コンポーネント</a>が含まれることを確認</p>
<pre class="code" data-lang="" data-unlink>deb http://ftp.jp.debian.org/debian/ lenny main non-free
deb-src http://ftp.jp.debian.org/debian/ lenny main non-free
deb http://security.debian.org/ lenny/updates main non-free
deb-src http://security.debian.org/ lenny/updates main non-free</pre><p>パッケージをインストール</p>
<pre class="code" data-lang="" data-unlink>$ sudo aptitude update
$ sudo aptitude install sun-java6-jre</pre><p>sun-java6 をデフォルトの<a class="keyword" href="http://d.hatena.ne.jp/keyword/java">java</a>とする。</p>
<pre class="code" data-lang="" data-unlink>$ sudo update-java-alternatives -s java-6-sun</pre><p>sun-java6が有効になったか確認</p>
<pre class="code" data-lang="" data-unlink>$ java -version
java version &#34;1.6.0_12&#34;
Java(TM) SE Runtime Environment (build 1.6.0_12-b04)
Java HotSpot(TM) Client VM (build 11.2-b01, mixed mode, sharing)</pre>
</div>
<div class="section">
<h4>eclipse3.5+PDT2.1+pleiades1.3.0 インストール</h4>
<p>PDT公式サイトより、eclipse3.5+PDT2.1 の オールインワンパッケージ <a class="keyword" href="http://d.hatena.ne.jp/keyword/eclipse">eclipse</a>-<a class="keyword" href="http://d.hatena.ne.jp/keyword/php">php</a>-<a class="keyword" href="http://d.hatena.ne.jp/keyword/galileo">galileo</a>-<a class="keyword" href="http://d.hatena.ne.jp/keyword/linux">linux</a>-<a class="keyword" href="http://d.hatena.ne.jp/keyword/gtk">gtk</a>.tar.gz をダウンロードします。<br />
<a href="http://www.eclipse.org/pdt/downloads/">PHP Development Tools (PDT) - Downloads</a></p>
<pre class="code" data-lang="" data-unlink> PDT 2.1 All In Ones / Eclipse PHP Package
These downloads include PDT 2.1, Eclipse 3.5, Mylyn and all other required plugins.
:
*All-In-One Linux x86/GTK 2 32-bit 139M</pre><p>次に、<a class="keyword" href="http://d.hatena.ne.jp/keyword/pleiades">pleiades</a>公式サイトより、<a class="keyword" href="http://d.hatena.ne.jp/keyword/pleiades">pleiades</a>_1.3.0.zip をダウンロードします。(日本語化不要なら、<a class="keyword" href="http://d.hatena.ne.jp/keyword/pleiades">pleiades</a>のインストールは不要です)<br />
<a href="http://mergedoc.sourceforge.jp/pleiades.html">Pleiades - Eclipse &#x30D7;&#x30E9;&#x30B0;&#x30A4;&#x30F3;&#x65E5;&#x672C;&#x8A9E;&#x5316;&#x30D7;&#x30E9;&#x30B0;&#x30A4;&#x30F3;</a></p>
<pre class="code" data-lang="" data-unlink> Pleiades 本体ダウンロード
既にインストール済みの Eclipse に適用したい場合や、Windows 以外で使用する場合は
下記の Pleiades 本体のみをダウンロードしてください。Pleiades のソースを Eclipse
プロジェクトとしてチェックアウトする場合は こちら を参照してください。
*安定版 1.3.0</pre><p>/usr/local/<a class="keyword" href="http://d.hatena.ne.jp/keyword/eclipse">eclipse</a> 以下にを置く。</p>
<ul>
<li><a class="keyword" href="http://d.hatena.ne.jp/keyword/eclipse">eclipse</a>-<a class="keyword" href="http://d.hatena.ne.jp/keyword/php">php</a>-<a class="keyword" href="http://d.hatena.ne.jp/keyword/galileo">galileo</a>-<a class="keyword" href="http://d.hatena.ne.jp/keyword/linux">linux</a>-<a class="keyword" href="http://d.hatena.ne.jp/keyword/gtk">gtk</a>.tar.gz</li>
<li><a class="keyword" href="http://d.hatena.ne.jp/keyword/pleiades">pleiades</a>_1.3.0.zip</li>
</ul><p><a class="keyword" href="http://d.hatena.ne.jp/keyword/eclipse">eclipse</a>+pdtを解凍</p>
<pre class="code" data-lang="" data-unlink>/usr/local/eclipse$ sudo tar zxvf eclipse-php-galileo-linux-gtk.tar.gz </pre><p><a class="keyword" href="http://d.hatena.ne.jp/keyword/pleiades">pleiades</a>を重ねて解凍</p>
<pre class="code" data-lang="" data-unlink>/usr/local/eclipse$ sudo sh -c &#34;cd eclipse; unzip ../pleiades_1.3.0.zip&#34;</pre><p>オーナーを変更</p>
<pre class="code" data-lang="" data-unlink>/usr/local/eclipse$ sudo chown -R root:staff eclipse</pre><p>フォルダ名を変更</p>
<pre class="code" data-lang="" data-unlink>/usr/local/eclipse$ sudo mv eclipse ecl3.5pdt2.1</pre><p><a class="keyword" href="http://d.hatena.ne.jp/keyword/eclipse">eclipse</a>.ini の最後に以下を追加</p>
<pre class="code" data-lang="" data-unlink>/usr/local/eclipse$ sudo vi ecl3.5pdt2.1/eclipse.ini
--pleiades
-javaagent:plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar</pre><p>起動<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%AF%A5%EA%A5%D7%A5%C8">スクリプト</a> <a class="keyword" href="http://d.hatena.ne.jp/keyword/eclipse">eclipse</a>-pdt を作る。</p>
<pre class="code" data-lang="" data-unlink>/usr/local/eclipse$ sudo sh -c &#34;cat &gt; /usr/local/bin/eclipse-pdt&#34;
#!/bin/bash
#
# eclipse 起動
#
HOME_ECLIPSE=/usr/local/eclipse/ecl3.5pdt2.1
cd $HOME_ECLIPSE
./eclipse &#34;$@&#34;</pre><p>実行権を付与</p>
<pre class="code" data-lang="" data-unlink>/usr/local/eclipse$ sudo chmod a+x /usr/local/bin/eclipse-pdt </pre><p>起動する。</p>
<pre class="code" data-lang="" data-unlink>$ eclipse-pdt &amp;</pre>
</div></content>
<category term="debian" label="debian" />
<category term="lenny" label="lenny" />
<category term="php" label="php" />
<link rel="enclosure" href="https://cdn-ak.f.st-hatena.com/images/fotolife/g/gounx2/20090812/20090812225020.png" type="image/png" length="0" />
<author>
<name>gounx2</name>
</author>
</entry>
<entry>
<title>壊れたlzhファイルを復旧する。</title>
<link href="https://gounx2.hatenadiary.org/entry/20090526/1243335207"/>
<id>hatenablog://entry/17680117127136073415</id>
<published>2009-05-26T19:53:27+09:00</published>
<updated>2019-05-17T03:30:19+09:00</updated> <summary type="html">途中までしか解凍できない1Gを超えるlzhファイルの復旧を試みた記録。 ファイル数が多く大変だったのでツールを作り、全てではないが復旧できた。 ============================= lzhrecover v0.1 20090526 ============================= これは何? ----------- 解凍できないlhaファイルから、出来る限りのファイルを救出する 作業を補助するツールです。 といっても、解凍できない理由はいろいろあるでしょうから、 とても限定的なツールです。あまり期待はできません。 +Lhaca もしくは Lhaplus で作られ…</summary>
<content type="html"><p>途中までしか解凍できない1Gを超える<a class="keyword" href="http://d.hatena.ne.jp/keyword/lzh">lzh</a>ファイルの復旧を試みた記録。<br />
ファイル数が多く大変だったのでツールを作り、全てではないが復旧できた。</p>
<pre class="code" data-lang="" data-unlink>=============================
lzhrecover v0.1 20090526
=============================
これは何?
-----------
解凍できないlhaファイルから、出来る限りのファイルを救出する
作業を補助するツールです。
といっても、解凍できない理由はいろいろあるでしょうから、
とても限定的なツールです。あまり期待はできません。
+Lhaca もしくは Lhaplus で作られた、途中までしか解凍できない
lzhファイルをある程度復元することができます。
(詳細は以下「後日談」参照)
作った背景
----------
とある1G以上ある巨大lhaファイルを解凍していたところ、
半分ぐらいのところでエラー発生してしまい、
さまざまな解凍ツールを試してみるもやはりエラーになった。
「解凍できないファイルを少しでも救出できないか?」
ネット上でツール探すも見つからず。幸いバイナリエディタで対応
する方法を見つけるが、あまりに巨大なlhaファイルである為、
思うようにゆかず、作ったツールです。
自分のケースに使うだけの捨てツールっぽいものなので、
わりと手抜きです。他のケースで役に立つかは謎です。
lhaのファイルのファイル構造
----------------------------
ものすごく簡略化すると
+----------------------------+ ----
|ファイル1(ヘッダ+データ) | 1レコード
+----------------------------+ ----
|ファイル2(ヘッダ+データ) |
+----------------------------+
| |
: :
| |
+----------------------------+
|ファイルn(ヘッダ+データ) |
+----------------------------+
|0x00(エンドマーク) |
+-------------------+
となっています。
このファイル構造で重要なのは、レコード間で相関関係がまったくないので、
単純に、壊れているレコードを特定し、これを削除してしまえば、正常な
lhaファイルになる(可能性がある)ということです。
壊れているレコードをどのように特定すればよいのか?
---------------------------------------------------
lzhrecover(本ツール)では、次の2つのアプローチが行えます。
A) UNLHA32.DLLで読み込み
最も有名なlhaの圧縮/解凍ライブラリです。
本ツールでは、このライブラリを使ってlzhファイル中の
ファイルを読みます。
エラー検出は厳密ですが一度エラーになると、それ以降の
レコードは解析できません。(オプションで破損ヘッダ読み
飛ばしは可能ですが)
B) 独自解析
本ツール独自で本当に最低限の解析を行うツールで、
UNLHA32.DLLと比べるとお粗末もいいところです。
ただし、エラー発生しても次レコードを予測して
無理やり最後まで解析を継続します。
予測といっても、ヘッダ中の圧縮方式 &#34;-lhX-&#34; をさがし
ているだけです。
動作に必要なもの
-----------------
.NET Framework 2.0
[UNLHA32.DLLで読み込み] を使う場合、以下も必要です。
CaldBase.dll, CaldBase.ini (CaldBase.dll Ver.0.10 に含まれます)
WrapperDLL - CaldBase.NET Website
http://caldbase.sourceforge.jp/old_wiki/index.php?WrapperDLL
UNLHA32.DLL (ulh3265d.exe に含まれます)
Common Archivers Library: UNLHA32.DLL
http://www.csdinc.co.jp/archiver/lib/unlha32.html
使い方
-------
1.[lzh選択]で、壊れたlzhファイルを選択(drag&amp;dropでも可)
2.[UNLHA32.DLLで読み込み]で、エラー発生するか確認
一覧に表示されたレコードは、正常と思われる。
(この操作は、本ツールの必須操作ではありませんが、
非力な独自解析を補助する情報が得られます)
3.[独自解析]で、エラー発生するか確認
エラー発生しても最後まで処理継続させる。
このときあきらかにエラーのレコードについては、
チェックOFFになる。
4.必要であれば、エラーと思われるレコードをチェックOFFする。
5.[lzh出力]で、新たなlzhを出力する。
6.出力したlzhを使って、1から繰り返す。
エラーが無くなれば、おそらく解凍できるはず。
解凍できないようなら、正常に解凍できたファイルの次の
ファイルがエラーレコードなので、これを除外して新たなlzhを作る。
これの繰り返し。
解凍するツールはLHMeltがお勧め
--------------------------------
LHMelt のダウンロード
http://www2.nsknet.or.jp/~micco/mysoft/lhmelt.htm
-----------------------------------------------------------------------
初心者の方や書庫関係に明るくない方は, 解らない設定は弄らないほうがいいです。
少なくとも『オプション設定』ダイアログから呼び出せる各 DLL の設定ダイアログ
の項目は弄ってはダメです。 LHMelt どころか, 他のアプリまで正常に動作しなく
なります。
-----------------------------------------------------------------------
とあるので注意は必要ですが、UNLHA32.DLL の作者さん作成のツールなので
信頼できると思います。
機能的にも、書庫テストできる・破損ヘッダ読み飛ばしできる・ログが一覧で見られる
と充実しているので、今回のように壊れたlzhファイルを見るのには最適でした。
他のツールもいくつか試してみたのですが、特殊事情(巨大なlzhファイルで、かつ
ヘッダ周りがあやしいレコードが含まれている)があっても素直に動いてくれたのは
LHMeltだけでした。
1.[編集→書庫のテスト]で書庫テスト
2.[編集→展開]で解凍
「ヘッダ CRC が存在しません」が発生したとき。
警告であって解凍はできるので無視しても構いません。
「格納ファイルのハフマンコードが壊れています」が発生したとき。
[モード→破損ヘッダを読み飛ばす]をチェックONしていれば
そのファイルをスキップして処理(解凍/書庫テスト)を継続してくれます。
後日談
-------
復元できなかったファイル名を見ていて気が付いたのですが、
エラーになっているlzhファイルは、+Lhaca もしくは Lhaplus で作られた
可能性がありました。(以下以外にもCRCエラーが大量に出ましたし)
『+Lhaca 1.24』について
http://www2.nsknet.or.jp/~micco/notes/soft/Lhaca124.htm
-----------------------------------------------------------------------
+Lhaca が作成する書庫については以下の制限が存在します:
* 作成される書庫は h1 形式ヘッダーです。
* 基本は上記のとおりなのですが, 基本ヘッダーのファイル名項目 (のみ) で
表現可能な 255 バイトまで作成を行ってしまうため,自身を含めて取り扱い
不可能な書庫が作成されてしまいます。 ヘッダー読み込み時のリカバリーは
行われませんので,当該箇所以降の全てのメンバーは無視されます。
-----------------------------------------------------------------------
『Lhaplus 1.56』について
http://www2.nsknet.or.jp/~micco/notes/soft/Lhaplus156.htm
にも同様の指摘があります。
これが原因で読めないlzhファイルについては、本ツールで
独自解析→lzh出力 とすれば一部「格納ファイルのハフマン
コードが壊れています」が発生しますが、それ以外は復元できます。
備考
-----
・本ツール自身は圧縮/解凍機能を持ちません。
・元のlzhファイルはReadオンリーで開いているので、このツールがバグを
もっていたとしても、オリジナルのlzhファイルには影響ないはずです。
・唯一Writeしているのは、[lzh出力]ボタンの処理だけです。
・処理速度とかまったくチューニングしてません。
・内部32bitで処理しているので、lzhファイル4Gまでなら扱えるはず。
・ヘッダレベルは1,2のみ対応しています。
参考にしたもの
---------------
LHAの書庫構造
http://www2m.biglobe.ne.jp/~dolphin/lha/lha-header.htm
開けなくなったLZHの解凍 : データ復旧のオントラック
http://knowledge.ontrack-japan.com/ontrack_now/20040515_mamechisiki.html
Common Archivers Library: UNLHA32.DLL
の ulh3265d.exe の API.TXT
http://www.csdinc.co.jp/archiver/lib/unlha32.html
動作・サポートについて
-----------------
動作保障・サポート保障はありません。
いかなる責任も負いません。
gounx2 at gmail.com</pre><p>ダウンロードは以下。<br />
<a href="http://goungoun.dip.jp/app/fswiki/wiki.cgi/devnotebook?page=lzhrecover%2Eexe">lzhrecover.exe - goungoun&#x6280;&#x8853;&#x7CFB;&#x96D1;&#x8A18;&#x5E33;</a></p>
</content>
<link rel="enclosure" href="https://cdn.blog.st-hatena.com/images/theme/og-image-1500.png" type="image/png" length="0" />
<author>
<name>gounx2</name>
</author>
</entry>
<entry>
<title> WindowsでPHP環境を超簡単に構築</title>
<link href="https://gounx2.hatenadiary.org/entry/20090505"/>
<id>hatenablog://entry/17680117127136073556</id>
<published>2009-05-05T00:00:00+09:00</published>
<updated>2019-05-17T03:30:20+09:00</updated> <summary type="html">1年ぶりにPHP環境を構築してみることに。何とXAMPPも入っていたので以前にもまして簡単にインストールできました。使用させてもらったのは↓で配布されているもの。Eclipse 3.4.2 Ganymede SR2 ベース / Pleiades All in One 3.4.2.20090316解凍&バッチファイル1つ実行するだけで、以下が使えるようになります。 Eclipse3.4.2 PDT2.0.0 XAMPP1.7.0 PHP5.2.8 こんなに簡単でいいのかしら。PHP、Eclipse PDT (PHP Development Tool) - goungoun技術系雑記帳</summary>
<content type="html"><p>1年ぶりに<a class="keyword" href="http://d.hatena.ne.jp/keyword/PHP">PHP</a>環境を構築してみることに。何とXAMPPも入っていたので以前にもまして簡単にインストールできました。使用させてもらったのは↓で配布されているもの。</p><p><a href="http://mergedoc.sourceforge.jp/index.html#/pleiades_distros3.4.html">Eclipse 3.4.2 Ganymede SR2 &#x30D9;&#x30FC;&#x30B9; / Pleiades All in One 3.4.2.20090316</a></p><p>解凍&バッチファイル1つ実行するだけで、以下が使えるようになります。</p>
<ul>
<li>Eclipse3.4.2
<ul>
<li>PDT2.0.0</li>
</ul></li>
<li>XAMPP1.7.0
<ul>
<li>PHP5.2.8</li>
</ul></li>
</ul><p>こんなに簡単でいいのかしら。</p><p><a href="http://goungoun.dip.jp/app/fswiki/wiki.cgi/devnotebook?page=PHP%A1%A2Eclipse+PDT+%28PHP+Development+Tool%29#p17">PHP&#x3001;Eclipse PDT (PHP Development Tool) - goungoun&#x6280;&#x8853;&#x7CFB;&#x96D1;&#x8A18;&#x5E33;</a></p>
</content>
<category term="PHP" label="PHP" />
<link rel="enclosure" href="https://cdn.blog.st-hatena.com/images/theme/og-image-1500.png" type="image/png" length="0" />
<author>
<name>gounx2</name>
</author>
</entry>
<entry>
<title> Sony スゴ録 RDR-HX8、電源投入→「WELCOME」表示のまま固まる</title>
<link href="https://gounx2.hatenadiary.org/entry/20090429/1241010252"/>
<id>hatenablog://entry/17680117127136073631</id>
<published>2009-04-29T22:04:12+09:00</published>
<updated>2019-05-17T03:30:21+09:00</updated> <summary type="html">保障期間切れてるのでメーカー修理は選択支として無し。 自己解決までの過程をメモしておく。 (本当はファームウェアのバージョンアップしてもらうのが正攻法らしいが) 予兆・・・ 数日前から、番組表(G-GUIDE)が1,2日分空白になる現象発生 タイトル名が入らないので、電源入れ直したら直るだろうと考えた・・・ 電源ボタン押してOFF→電源コード抜く→ちょっと待って電源コード接続 としたら、「WELCOME」表示のまま固まったorz 保証期限切れだったので、中開けて掃除してみたが直らない。 HDDのモーター音も、振動もない。動作していないようだ。 HDD抜いてPCにつないでみた。つなげた。SMAR…</summary>
<content type="html"><p>保障期間切れてるのでメーカー修理は選択支として無し。<br />
自己解決までの過程をメモしておく。<br />
(本当は<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D5%A5%A1%A1%BC%A5%E0%A5%A6%A5%A7%A5%A2">ファームウェア</a>のバージョンアップしてもらうのが正攻法らしいが)</p><br />
<p>予兆・・・<br />
数日前から、番組表(G-GUIDE)が1,2日分空白になる現象発生</p><br />
<p>タイトル名が入らないので、電源入れ直したら直るだろうと考えた・・・<br />
電源ボタン押してOFF→電源コード抜く→ちょっと待って電源コード接続<br />
としたら、「WELCOME」表示のまま固まったorz</p><br />
<p>保証期限切れだったので、中開けて掃除してみたが直らない。<br />
HDDのモーター音も、振動もない。動作していないようだ。<br />
HDD抜いてPCにつないでみた。つなげた。SMARTチェックまぁまぁな値。<br />
HDDは壊れてなさそう?</p><br />
<p>ネットで情報探ってみた。</p><br />
<p><a class="keyword" href="http://d.hatena.ne.jp/keyword/SONY">SONY</a> DVDレコーダー <a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%B4%CF%BF">スゴ録</a> RDR-HX 6 8 10 ハードディスク修理<br />
<a href="http://www1.plala.or.jp/evolution/hx10.html">http://www1.plala.or.jp/evolution/hx10.html</a></p><p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%B2%C1%B3%CA.com">価格.com</a> - 『か、固まった!』 <a class="keyword" href="http://d.hatena.ne.jp/keyword/SONY">SONY</a> <a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%B4%CF%BF">スゴ録</a> RDR-HX10 のクチコミ<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B7%C7%BC%A8">掲示</a>板<br />
<a href="http://bbs.kakaku.com/bbs/20277010051/SortID=3536515/">http://bbs.kakaku.com/bbs/20277010051/SortID=3536515/</a></p><p>レコーダーネタ2日目、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%B4%CF%BF">スゴ録</a>をサクッとふわっと直しつつXD72D経過は良好・ハヤテ第36話なのですよ。 - パソコン改造記の憂鬱 セカンドシーズン - <a class="keyword" href="http://d.hatena.ne.jp/keyword/%B3%DA%C5%B7">楽天</a>ブログ(Blog)<br />
<a href="http://plaza.rakuten.co.jp/nxuser/diary/200712230000/">http://plaza.rakuten.co.jp/nxuser/diary/200712230000/</a></p><br />
<p>工場出荷時の状態に戻すことで自己解決した。<br />
手順は次の通り。</p><p>1.<br />
「録画一時停止」「システムメニュー」「ツール」ボタン押しながら電源コードさす。<br />
「WELCOME」表示される。そのままボタン押し続け10秒ぐらいでサービスモード画面が表示される。</p><p>2.<br />
「<<MAIN MENU>>」の「3) TEST MODE」選択(リモコンの3を押す)</p><p>3.<br />
「<<TEST MODE MENU>>」の「4) NAND Factory Setup」選択(リモコンの3を押す)<br />
さらに 決定ボタン を押す。</p><p>4.<br />
電源切って再投入</p><p>録画予約とか、番組表とか、全部リセットされてるが、HDDに録画してたのは残ってた。<br />
また発生したらメンドクサイな。<br />
そろそろ購入時期かな。</p>
</content>
<category term="日記" label="日記" />
<link rel="enclosure" href="https://cdn.blog.st-hatena.com/images/theme/og-image-1500.png" type="image/png" length="0" />
<author>
<name>gounx2</name>
</author>
</entry>
<entry>
<title> リードオンリー インターフェース って言うのか?</title>
<link href="https://gounx2.hatenadiary.org/entry/20090408/1239151374"/>
<id>hatenablog://entry/17680117127136073747</id>
<published>2009-04-08T09:42:54+09:00</published>
<updated>2019-05-17T03:30:22+09:00</updated> <summary type="html">データを扱うクラスを作ってたんだけど、コード量や複雑度が増してくると「ここは参照系の処理だから、オブジェクトの変化を伴うようなメソッドをCallすることはあり得ない」というのを何とか機械的に保証したくなってくる。C++ に constメンバ関数 ってのがあって、それでコンパイルエラーを発生させてたんだけど、C# には そんな機能はありません。googleで「constメンバ c#」とか検索してみたものの「C#には無い機能」という情報はヒットするのだが「ではどうすればいいの?」というのが無い。困ってたのだが「あー、こういうときにインターフェース使えばよさげ?」と気が付いた。もう実装しちゃったので…</summary>
<content type="html"><p>データを扱うクラスを作ってたんだけど、コード量や複雑度が増してくると「ここは参照系の処理だから、オブジェクトの変化を伴うようなメソッドをCallすることはあり得ない」というのを何とか<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B5%A1%B3%A3%C5%AA">機械的</a>に保証したくなってくる。</p><p><a class="keyword" href="http://d.hatena.ne.jp/keyword/C%2B%2B">C++</a> に const<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%E1%A5%F3%A5%D0%B4%D8%BF%F4">メンバ関数</a> ってのがあって、それで<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B3%A5%F3%A5%D1%A5%A4%A5%EB">コンパイル</a>エラーを発生させてたんだけど、<a class="keyword" href="http://d.hatena.ne.jp/keyword/C%23">C#</a> には そんな機能はありません。</p><p><a class="keyword" href="http://d.hatena.ne.jp/keyword/google">google</a>で「constメンバ <a class="keyword" href="http://d.hatena.ne.jp/keyword/c%23">c#</a>」とか検索してみたものの「<a class="keyword" href="http://d.hatena.ne.jp/keyword/C%23">C#</a>には無い機能」という情報はヒットするのだが「ではどうすればいいの?」というのが無い。</p><p>困ってたのだが「あー、こういうときにインターフェース使えばよさげ?」と気が付いた。</p><p>もう実装しちゃったので結果オーライなんだけど。</p><p>「こういうこと先人は悩んでいないのか?」と思うわけで「キーワード何で検索するのが正解なのか?」が、ずっと気になってた。</p><p>で、今現在何とか<a class="keyword" href="http://d.hatena.ne.jp/keyword/IPA">IPA</a>の <a href="http://www.ipa.go.jp/security/awareness/vendor/programming/a03_02_main.html">3-2. &#x30AB;&#x30D7;&#x30BB;&#x30EB;&#x5316;&#x306E;&#x3059;&#x3059;&#x3081;</a> にたどり着けたんだけど。</p><p>「リードオンリー インターフェース」で検索してもそれほどたくさんヒットしない。<br />
それほどメジャーな概念ではないのかな?<br />
もっと一般的な名称があるのかな?<br />
う〜ん・・・</p>
</content>
<category term="C#" label="C#" />
<link rel="enclosure" href="https://cdn.blog.st-hatena.com/images/theme/og-image-1500.png" type="image/png" length="0" />
<author>
<name>gounx2</name>
</author>
</entry>
<entry>
<title>そのデータちゃんとファイルに書けてますか?</title>
<link href="https://gounx2.hatenadiary.org/entry/20090315/1237081949"/>
<id>hatenablog://entry/17680117127136073836</id>
<published>2009-03-15T10:52:29+09:00</published>
<updated>2019-05-17T03:30:23+09:00</updated> <summary type="html">Ext3のコミット間隔を当てにしたアプリケーションは、Ext4でデータロスの恐れあり - スラッシュドット・ジャパンOSクラッシュしたときにドットファイルが空になるという話。 今までもあった現象だが、コミット間隔がext4で長くなったことにより表面化。「closeしたらHDDに書き込まれる」とか思って無いかい? 完全に保証するには、fsyncとか、renameとか考えること多いよと。</summary>
<content type="html"><p><a href="http://slashdot.jp/hardware/09/03/13/1311252.shtml">Ext3&#x306E;&#x30B3;&#x30DF;&#x30C3;&#x30C8;&#x9593;&#x9694;&#x3092;&#x5F53;&#x3066;&#x306B;&#x3057;&#x305F;&#x30A2;&#x30D7;&#x30EA;&#x30B1;&#x30FC;&#x30B7;&#x30E7;&#x30F3;&#x306F;&#x3001;Ext4&#x3067;&#x30C7;&#x30FC;&#x30BF;&#x30ED;&#x30B9;&#x306E;&#x6050;&#x308C;&#x3042;&#x308A; - &#x30B9;&#x30E9;&#x30C3;&#x30B7;&#x30E5;&#x30C9;&#x30C3;&#x30C8;&#x30FB;&#x30B8;&#x30E3;&#x30D1;&#x30F3;</a></p><p>OSクラッシュしたときに<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C9%A5%C3%A5%C8%A5%D5%A5%A1%A5%A4%A5%EB">ドットファイル</a>が空になるという話。<br />
今までもあった現象だが、コミット間隔が<a class="keyword" href="http://d.hatena.ne.jp/keyword/ext4">ext4</a>で長くなったことにより表面化。</p><p>「closeしたらHDDに書き込まれる」とか思って無いかい?<br />
完全に保証するには、fsyncとか、renameとか考えること多いよと。</p>
</content>
<category term="linux" label="linux" />
<link rel="enclosure" href="https://cdn.blog.st-hatena.com/images/theme/og-image-1500.png" type="image/png" length="0" />
<author>
<name>gounx2</name>
</author>
</entry>
<entry>
<title>NECのモデム、Atermので2009/11からIP電話使えない?</title>
<link href="https://gounx2.hatenadiary.org/entry/20090216/1234797176"/>
<id>hatenablog://entry/17680117127136073918</id>
<published>2009-02-16T00:12:56+09:00</published>
<updated>2019-05-17T03:30:24+09:00</updated> <summary type="html">ついさっき、 NECモデムでIP電話不具合2009/11から通話できなくなる。 ってのがTVニュースに流れてた。いやな予感・・・ IP電話対応機器の不具合について お詫びとお願い やっぱり、我が家のモデム該当してるわorz</summary>
<content type="html"><p>ついさっき、<br />
<a class="keyword" href="http://d.hatena.ne.jp/keyword/NEC">NEC</a>モデムで<a class="keyword" href="http://d.hatena.ne.jp/keyword/IP%C5%C5%CF%C3">IP電話</a>不具合2009/11から通話できなくなる。<br />
ってのがTVニュースに流れてた。</p><p>いやな予感・・・<br />
<a href="http://www.aterm.jp/web/voip81/eaccess.html">IP&#x96FB;&#x8A71;&#x5BFE;&#x5FDC;&#x6A5F;&#x5668;&#x306E;&#x4E0D;&#x5177;&#x5408;&#x306B;&#x3064;&#x3044;&#x3066;&#x3000;&#x304A;&#x8A6B;&#x3073;&#x3068;&#x304A;&#x9858;&#x3044;</a><br />
やっぱり、我が家のモデム該当してるわorz</p>
</content>
<category term="日記" label="日記" />
<link rel="enclosure" href="https://cdn.blog.st-hatena.com/images/theme/og-image-1500.png" type="image/png" length="0" />
<author>
<name>gounx2</name>
</author>
</entry>
<entry>
<title>RCWはファイナライズで自動的にReleaseするっぽい。検証してみた。</title>
<link href="https://gounx2.hatenadiary.org/entry/20090211/1234336272"/>
<id>hatenablog://entry/17680117127136074006</id>
<published>2009-02-11T16:11:12+09:00</published>
<updated>2019-05-17T03:30:24+09:00</updated> <summary type="html">正攻法で考えると、ReleaseComObject を必ず行う。なのだけど。。。CLR 徹底解剖: オブジェクトの有効期間を管理する マネージ コードから COM コンポーネントを使用する場合、tlbimp.exe を使用 していわゆるランタイム呼び出し可能ラッパー (RCW) を生成します。RCW によっ て COM コンポーネントの機能がマネージ環境に公開されます。なお、tlbimp.exe は、Visual Studio® で COM コンポーネントを参照するとバックグラウンドで実行 されます。RCW はデバッガで System.__ComObject と表示されるので、簡単に識別 でき…</summary>
<content type="html"><p>正攻法で考えると、ReleaseComObject を必ず行う。なのだけど。。。</p><p><a href="http://msdn.microsoft.com/ja-jp/magazine/cc163316.aspx">CLR &#x5FB9;&#x5E95;&#x89E3;&#x5256;: &#x30AA;&#x30D6;&#x30B8;&#x30A7;&#x30AF;&#x30C8;&#x306E;&#x6709;&#x52B9;&#x671F;&#x9593;&#x3092;&#x7BA1;&#x7406;&#x3059;&#x308B;</a></p>
<pre class="code" data-lang="" data-unlink>マネージ コードから COM コンポーネントを使用する場合、tlbimp.exe を使用
していわゆるランタイム呼び出し可能ラッパー (RCW) を生成します。RCW によっ
て COM コンポーネントの機能がマネージ環境に公開されます。なお、tlbimp.exe
は、Visual Studio® で COM コンポーネントを参照するとバックグラウンドで実行
されます。RCW はデバッガで System.__ComObject と表示されるので、簡単に識別
できます。RCW は、COM オブジェクトへのアンマネージ ポインタを 1 つ保持し、
オブジェクトで AddRef および Release を呼び出す .NET 型です。AddRef はコン
ポーネントが作成されると呼び出され、Release は RCW がファイナライズされると
呼び出されます。</pre><p>という記事をみつけた。<br />
「ReleaseはRCWがファイナライズされると呼び出されます。」と書かれてる。</p><p>これはつまり、<br />
ReleaseComObject を全く行わずとも、<a class="keyword" href="http://d.hatena.ne.jp/keyword/GC">GC</a>でファイナライズを強制実行させればCOMも解放できるということか?</p><p>試してみる。<br />
流れとしては、<br />
フォームの上のボタンを押すと<a class="keyword" href="http://d.hatena.ne.jp/keyword/Excel">Excel</a>呼び出してセルに書いたりする。<br />
最後にファイナライズを強制実行する。</p>
<pre class="code lang-cs" data-lang="cs" data-unlink><span class="synStatement">using</span> System.Runtime.InteropServices;
:
<span class="synType">private</span> <span class="synType">void</span> button1_Click(<span class="synType">object</span> sender, System.EventArgs e)
{
<span class="synStatement">this</span>.excel_ctrl();
<span class="synComment">// 以下を、excel_ctrl の中に入れてしまうと、Excelプロセスが残るのでここに配置してみた。</span>
System.GC.Collect(); <span class="synComment">// アクセス不可能なオブジェクトを除去</span>
System.GC.WaitForPendingFinalizers(); <span class="synComment">// ファイナライゼーションが終わるまでスレッド待機</span>
System.GC.Collect(); <span class="synComment">// ファイナライズされたばかりのオブジェクトに関連するメモリを開放</span>
}
<span class="synType">private</span> <span class="synType">void</span> excel_ctrl()
{
Excel.Application excel = <span class="synStatement">new</span> Excel.Application();
excel.Visible = <span class="synConstant">true</span>;
excel.Workbooks.Add(Type.Missing);
Excel.Worksheet worksheet = (Excel.Worksheet)excel.ActiveSheet;
((Excel.Range)worksheet.get_Range(<span class="synConstant">&quot;C6&quot;</span>, Type.Missing)).Value2 = <span class="synConstant">&quot;Hello&quot;</span>;
((Excel.Range)worksheet.get_Range(<span class="synConstant">&quot;C6&quot;</span>, Type.Missing)).Interior.ColorIndex = <span class="synConstant">6</span>;
((Excel.Worksheet)excel.ActiveSheet).get_Range(<span class="synConstant">&quot;C7&quot;</span>, Type.Missing).Value = <span class="synConstant">&quot;xxx&quot;</span>;
((Excel.Worksheet)excel.ActiveSheet).get_Range(<span class="synConstant">&quot;C7&quot;</span>, Type.Missing).Borders.ColorIndex = <span class="synConstant">7</span>;
((Excel.Worksheet)excel.ActiveSheet).Copy(excel.ActiveSheet, Type.Missing);
excel.Quit();
}
</pre><p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Excel">Excel</a>プロセス残らない。<br />
ちょっと驚いた。</p><p>ただし、Finalizeでのリソース解放は最終手段であるし、実際<br />
<a href="http://msdn.microsoft.com/ja-jp/library/system.object.finalize(VS.80).aspx">Object.Finalize &#x30E1;&#x30BD;&#x30C3;&#x30C9; (System)</a><br />
によると、</p>
<ul>
<li>ガベージ コレクション実行中のファイナライザの実行時期は未定義です。</li>
<li>2 つのオブジェクトのファイナライザが特定の順序で実行されることは保証されません。</li>
</ul><p>とあるので、これに頼ってしまってよいのか疑問は残るんだけどね。</p>
</content>
<category term="C#" label="C#" />
<category term="Excel" label="Excel" />
<link rel="enclosure" href="https://cdn.blog.st-hatena.com/images/theme/og-image-1500.png" type="image/png" length="0" />
<author>
<name>gounx2</name>
</author>
</entry>
<entry>
<title>C#からExcelを操作するライブラリ</title>
<link href="https://gounx2.hatenadiary.org/entry/20090209/1234195164"/>
<id>hatenablog://entry/17680117127136074126</id>
<published>2009-02-09T00:59:24+09:00</published>
<updated>2019-05-17T03:30:26+09:00</updated> <summary type="html">はじめに。 C#からPIAでExcelCOM使うとリークしてしまうのが難点。ExcelCOMに1枚クラスを被せることで 使いにくいExcelCOMの存在をできるだけ隠蔽することを試みます。 クラスを被せることのメリット COMの解放(Marshal.ReleaseComObject)のことを考えなくてよくなる。 わずらわしいリークに悩まされることが激減する。 COMの戻り値を適切な型にキャストしたりしなくてよい。 キャストミスによるトラブルに悩まされることが激減する。 インテリセンス(入力支援)が効くので作業効率アップ。 クラスを被せることのデメリット ExcelのCOMオブジェクト、メソッド…</summary>
<content type="html">
<div class="section">
<h4>はじめに。</h4>
<p><a class="keyword" href="http://d.hatena.ne.jp/keyword/C%23">C#</a>からPIAでExcelCOM使うとリークしてしまうのが難点。</p><p>ExcelCOMに1枚クラスを被せることで<br />
使いにくいExcelCOMの存在をできるだけ隠蔽することを試みます。</p>
<ul>
<li>クラスを被せることのメリット
<ul>
<li>COMの解放(Marshal.ReleaseComObject)のことを考えなくてよくなる。
<ul>
<li>わずらわしいリークに悩まされることが激減する。</li>
</ul></li>
<li>COMの戻り値を適切な型にキャストしたりしなくてよい。
<ul>
<li>キャストミスによるトラブルに悩まされることが激減する。</li>
<li>インテリセンス(入力支援)が効くので作業効率アップ。</li>
</ul></li>
</ul></li>
</ul>
<ul>
<li>クラスを被せることのデメリット
<ul>
<li><a class="keyword" href="http://d.hatena.ne.jp/keyword/Excel">Excel</a>のCOMオブジェクト、メソッド、プロパティを1つずつラッピングする必要がある。
<ul>
<li>膨大なので全てをラッピングするのは不可能なので、よく使いそうなものだけ対応。</li>
</ul></li>
</ul></li>
</ul>
</div>
<div class="section">
<h4>ライブラリ仕様</h4>
<ul>
<li>開発環境
<ul>
<li><a class="keyword" href="http://d.hatena.ne.jp/keyword/.NET%20Framework">.NET Framework</a> 1.1 以上、<a class="keyword" href="http://d.hatena.ne.jp/keyword/C%23">C#</a></li>
<li>Excel2000 or ExcelXP(2002) PIA</li>
</ul></li>
</ul>
<ul>
<li>特徴
<ul>
<li>Marshal.ReleaseComObject はライブラリ側で自動で行う。</li>
<li>Excel2000、ExcelXP(2002) PIA 対応。(#defineで指定)</li>
</ul></li>
</ul>
<ul>
<li>その他
<ul>
<li>Excel2003、2007 PIA でも使えるかもしれません。</li>
<li>PIAは.NETとCOMのI/Fなので、開発をExcel2000PIAで行っていれば、(COMレベルの互換性によりますが)ExcelXP以上でも動くはず。</li>
</ul></li>
</ul><p>Visual <a class="keyword" href="http://d.hatena.ne.jp/keyword/C%23">C#</a> Express 2008 で作ったもの一式はこちら。<br />
<a href="http://goungoun.dip.jp/app/upload/libSimpleExcel/libSimpleExcel20090210.zip">http://goungoun.dip.jp/app/upload/libSimpleExcel/libSimpleExcel20090210.zip</a></p>
</div>
<div class="section">
<h4>対応してる<a class="keyword" href="http://d.hatena.ne.jp/keyword/Excel">Excel</a>オブジェクト、メソッド、プロパティ一覧</h4>
<p>対応しているのは次のクラス(<a class="keyword" href="http://d.hatena.ne.jp/keyword/Excel">Excel</a>オブジェクト)、メソッド、プロパティ<br />
のみです。足りないものは既存のものを参考に追加してください。</p>
<ul>
<li>class Application
<ul>
<li>bool Visible</li>
<li>bool DisplayAlerts</li>
<li>Workbooks Workbooks</li>
<li>void Quit()</li>
</ul></li>
<li>class Workbooks
<ul>
<li>Workbook Open(string filename_,bool read_only_,<a class="keyword" href="http://d.hatena.ne.jp/keyword/Excel">Excel</a>.XlFileFormat format_,string delimiter_)</li>
<li>Workbook Open(string filename_, bool read_only_)</li>
<li>Workbook Add()</li>
<li>int Count</li>
<li>Workbook this[int idx_]</li>
<li>Workbook this[string name_]</li>
</ul></li>
<li>class Workbook
<ul>
<li>Sheets Sheets</li>
</ul></li>
<li>class Sheets
<ul>
<li>int Count</li>
<li>Worksheet this[int idx_]</li>
<li>Worksheet this[string name_]</li>
</ul></li>
<li>class Worksheet
<ul>
<li>string Name</li>
<li>void Delete()</li>
<li>void CopyAfter(Worksheet aft_)</li>
<li>void CopyBefore(Worksheet bef_)</li>
<li>Range Cells</li>
<li>Range Range</li>
<li>Range Rows(int row_)</li>
<li>Range Columns(int col_)</li>
</ul></li>
<li>class Range
<ul>
<li>Range this[int row_, int col_]</li>
<li>Range this[Range cell1_, Range cell2_]</li>
<li>Range Resize(int row_, int col_)</li>
<li>bool Delete()</li>
<li>bool Delete(<a class="keyword" href="http://d.hatena.ne.jp/keyword/Excel">Excel</a>.XlDeleteShiftDirection direction_)</li>
<li>object <a class="keyword" href="http://d.hatena.ne.jp/keyword/Value">Value</a></li>
<li>Font Font</li>
<li>Interior Interior</li>
</ul></li>
<li>class Font
<ul>
<li>int ColorIndex</li>
<li>bool Bold</li>
</ul></li>
<li>class Interior
<ul>
<li>int ColorIndex</li>
<li><a class="keyword" href="http://d.hatena.ne.jp/keyword/Excel">Excel</a>.XlPattern Pattern</li>
</ul></li>
</ul>
</div>
<div class="section">
<h4>PIAの入手方法</h4>
<p>Office2000なら、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Interop">Interop</a>.<a class="keyword" href="http://d.hatena.ne.jp/keyword/Excel">Excel</a>.dll<br />
OfficeXPなら、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Microsoft">Microsoft</a>.Office.<a class="keyword" href="http://d.hatena.ne.jp/keyword/Interop">Interop</a>.<a class="keyword" href="http://d.hatena.ne.jp/keyword/Excel">Excel</a>.dll</p><p>入手先は、</p><p>Office2000なら。<br />
プロジェクト→参照の追加→COMタブ→<br />
<a class="keyword" href="http://d.hatena.ne.jp/keyword/Microsoft">Microsoft</a> <a class="keyword" href="http://d.hatena.ne.jp/keyword/Excel">Excel</a> 9.0 Object Livraly 1.3<br />
X:\Program Files\<a class="keyword" href="http://d.hatena.ne.jp/keyword/Microsoft%20Office">Microsoft Office</a>\Office\EXCEL9.OLB</p><p>Office XP PIAなら。<br />
<a class="keyword" href="http://d.hatena.ne.jp/keyword/Microsoft%20Office">Microsoft Office</a> XP 用の PIA (Primary <a class="keyword" href="http://d.hatena.ne.jp/keyword/Interop">Interop</a> Assemblies) のダウンロード<br />
<a href="http://support.microsoft.com/kb/328912/ja">http://support.microsoft.com/kb/328912/ja</a></p><br />
<p></p>
</div>
<div class="section">
<h4>ソース</h4>
<div class="section">
<h5>lib.SimpleExcel.cs(ライブラリ側)</h5>
<p>使用するPIAの種類に応じて先頭のdefineを切り替える。</p>
<pre class="code lang-cs" data-lang="cs" data-unlink><span class="synComment">//#define PIA_OFFICE_2000</span>
<span class="synPreProc">#define PIA_OFFICE_XP</span>
<span class="synStatement">using</span> System;
<span class="synStatement">using</span> System.Collections;
<span class="synStatement">using</span> System.Runtime.InteropServices;
<span class="synPreProc">#if PIA_OFFICE_XP</span>
<span class="synStatement">using</span> Excel = Microsoft.Office.Interop.Excel;
<span class="synPreProc">#endif</span>
<span class="synType">namespace</span> lib.SimpleExcel
{
<span class="synComment">/// </span><span class="synIdentifier">&lt;</span><span class="synStatement">summary</span><span class="synIdentifier">&gt;</span>
<span class="synComment">/// Excel関連のオブジェクトを分類する為の独自クラス</span>
<span class="synComment">/// </span><span class="synIdentifier">&lt;/</span><span class="synStatement">summary</span><span class="synIdentifier">&gt;</span>
<span class="synType">public</span> <span class="synType">class</span> Object : Base
{
<span class="synType">private</span> <span class="synType">string</span> _type_name = <span class="synConstant">&quot;&quot;</span>;
<span class="synType">public</span> Object(Base parent_, <span class="synType">object</span> comobj_)
: <span class="synStatement">base</span>(parent_, comobj_)
{
<span class="synStatement">if</span> (comobj_ == <span class="synConstant">null</span>)
{
<span class="synStatement">this</span>._type_name = <span class="synConstant">&quot;null&quot;</span>;
}
<span class="synStatement">else</span> <span class="synStatement">if</span> (Marshal.IsComObject(comobj_))
{
<span class="synStatement">if</span> ((comobj_ <span class="synStatement">as</span> Excel.Range) != <span class="synConstant">null</span>)
{
<span class="synStatement">this</span>._type_name = <span class="synConstant">&quot;Excel.Range&quot;</span>;
}
<span class="synStatement">else</span> <span class="synStatement">if</span> ((comobj_ <span class="synStatement">as</span> Excel.Range) != <span class="synConstant">null</span>)
{
<span class="synStatement">this</span>._type_name = <span class="synConstant">&quot;Excel.Range&quot;</span>;
}
}
<span class="synStatement">if</span> (<span class="synStatement">this</span>._type_name == <span class="synConstant">&quot;&quot;</span>)
{
Type t = comobj_.GetType();
<span class="synStatement">this</span>._type_name = t.FullName;
}
}
<span class="synType">public</span> <span class="synType">string</span> TypeName
{
<span class="synStatement">get</span> { <span class="synStatement">return</span> <span class="synStatement">this</span>._type_name; }
}
}
<span class="synComment">/// </span><span class="synIdentifier">&lt;</span><span class="synStatement">summary</span><span class="synIdentifier">&gt;</span>
<span class="synComment">/// Base</span>
<span class="synComment">/// </span><span class="synIdentifier">&lt;/</span><span class="synStatement">summary</span><span class="synIdentifier">&gt;</span>
<span class="synType">public</span> <span class="synType">abstract</span> <span class="synType">class</span> Base : IDisposable
{
<span class="synType">private</span> <span class="synType">static</span> <span class="synType">int</span> _com_object_counter = <span class="synConstant">0</span>;
<span class="synType">private</span> Base _parent = <span class="synConstant">null</span>;
<span class="synType">private</span> ArrayList _childs = <span class="synConstant">null</span>;
<span class="synType">protected</span> <span class="synType">object</span> _comobj = <span class="synConstant">null</span>;
<span class="synComment">/// </span><span class="synIdentifier">&lt;</span><span class="synStatement">summary</span><span class="synIdentifier">&gt;</span>
<span class="synComment">/// 現在使用中の Excel COM の数</span>
<span class="synComment">/// 0 でない場合、Excelプロセス が開放されていないことになるので、</span>
<span class="synComment">/// 本ライブラリでExcel操作後は、必ず0になっている*はず*</span>
<span class="synComment">/// </span><span class="synIdentifier">&lt;/</span><span class="synStatement">summary</span><span class="synIdentifier">&gt;</span>
<span class="synType">public</span> <span class="synType">static</span> <span class="synType">int</span> ComObjectCounter
{
<span class="synStatement">get</span> { <span class="synStatement">return</span> Base._com_object_counter; }
}
<span class="synComment">/// </span><span class="synIdentifier">&lt;</span><span class="synStatement">summary</span><span class="synIdentifier">&gt;</span>
<span class="synComment">/// Excelのプロセスを取得</span>
<span class="synComment">/// IDとウィンドウタイトルから素性を判断できる。</span>
<span class="synComment">/// </span><span class="synIdentifier">&lt;/</span><span class="synStatement">summary</span><span class="synIdentifier">&gt;</span>
<span class="synComment">/// </span><span class="synIdentifier">&lt;</span><span class="synStatement">param</span><span class="synIdentifier"> </span><span class="synType">name</span>=<span class="synConstant">&quot;msg_&quot;</span><span class="synIdentifier">&gt;&lt;/</span><span class="synStatement">param</span><span class="synIdentifier">&gt;</span>
<span class="synComment">/// </span><span class="synIdentifier">&lt;</span><span class="synStatement">returns</span><span class="synIdentifier">&gt;&lt;/</span><span class="synStatement">returns</span><span class="synIdentifier">&gt;</span>
<span class="synType">public</span> <span class="synType">static</span> System.Diagnostics.Process[] GetExcelProcess(<span class="synStatement">ref</span> <span class="synType">string</span> msg_)
{
System.Diagnostics.Process[] ps =
System.Diagnostics.Process.GetProcessesByName(<span class="synConstant">&quot;Excel&quot;</span>);
msg_ = <span class="synConstant">&quot;&quot;</span>;
<span class="synStatement">foreach</span> (System.Diagnostics.Process p <span class="synStatement">in</span> ps)
{
msg_ += <span class="synType">string</span>.Format(<span class="synConstant">&quot;Id:{0} Title:{1} </span><span class="synSpecial">\r\n</span><span class="synConstant">&quot;</span>, p.Id, p.MainWindowTitle);
}
<span class="synStatement">return</span> ps;
}
<span class="synType">public</span> Base(Base parent_, <span class="synType">object</span> comobj_)
{
<span class="synComment">// if (parent_ == null)</span>
<span class="synComment">// {</span>
<span class="synComment">// System.Windows.Forms.MessageBox.Show(&quot;null&quot;);</span>
<span class="synComment">// }</span>
<span class="synStatement">this</span>._parent = parent_;
<span class="synStatement">if</span> (parent_ != <span class="synConstant">null</span>)
{
parent_.AddChild(<span class="synStatement">this</span>);
}
<span class="synStatement">this</span>._childs = <span class="synStatement">new</span> ArrayList();
<span class="synStatement">this</span>._comobj = comobj_;
<span class="synStatement">if</span> (Marshal.IsComObject(<span class="synStatement">this</span>._comobj))
{
Base._com_object_counter++;
}
}
<span class="synType">public</span> <span class="synType">object</span> ComObject
{
<span class="synStatement">get</span> { <span class="synStatement">return</span> <span class="synStatement">this</span>._comobj; }
}
<span class="synType">protected</span> <span class="synType">void</span> AddChild(Base obj_)
{
<span class="synStatement">this</span>._childs.Add(obj_);
}
<span class="synType">public</span> <span class="synType">void</span> Dispose()
{
<span class="synComment">// 子を破棄</span>
<span class="synStatement">if</span> (<span class="synStatement">this</span>._childs != <span class="synConstant">null</span>)
{
<span class="synStatement">for</span> (<span class="synType">int</span> idx = <span class="synConstant">0</span>; idx &lt; <span class="synStatement">this</span>._childs.Count; idx++)
{
Base obj = (Base)<span class="synStatement">this</span>._childs[idx];
obj.Dispose();
}
<span class="synStatement">this</span>._childs = <span class="synConstant">null</span>;
}
<span class="synComment">// 自分を破棄</span>
<span class="synStatement">if</span> (<span class="synStatement">this</span>._comobj != <span class="synConstant">null</span> &amp;&amp; Marshal.IsComObject(<span class="synStatement">this</span>._comobj))
{
Marshal.ReleaseComObject(<span class="synStatement">this</span>._comobj);
Base._com_object_counter--;
}
<span class="synStatement">this</span>._comobj = <span class="synConstant">null</span>;
<span class="synComment">// 親情報を削除</span>
<span class="synStatement">this</span>._parent = <span class="synConstant">null</span>;
GC.Collect(); <span class="synComment">// 一応と思っていたら、これがないとExcelで一般保護違反がでることがあった。</span>
}
}
<span class="synComment">/// </span><span class="synIdentifier">&lt;</span><span class="synStatement">summary</span><span class="synIdentifier">&gt;</span>
<span class="synComment">/// Excel.Application</span>
<span class="synComment">/// </span><span class="synIdentifier">&lt;/</span><span class="synStatement">summary</span><span class="synIdentifier">&gt;</span>
<span class="synType">public</span> <span class="synType">class</span> Application : Base
{
<span class="synType">public</span> Application()
: <span class="synStatement">base</span>(<span class="synConstant">null</span>, <span class="synStatement">new</span> Excel.Application())
{
}
<span class="synType">private</span> Excel.Application _application
{
<span class="synStatement">get</span> { <span class="synStatement">return</span> (Excel.Application)<span class="synStatement">this</span>._comobj; }
}
<span class="synType">public</span> <span class="synType">bool</span> Visible
{
<span class="synStatement">get</span> { <span class="synStatement">return</span> <span class="synStatement">this</span>._application.Visible; }
<span class="synStatement">set</span> { <span class="synStatement">this</span>._application.Visible = <span class="synStatement">value</span>; }
}
<span class="synType">public</span> <span class="synType">bool</span> DisplayAlerts
{
<span class="synStatement">get</span> { <span class="synStatement">return</span> <span class="synStatement">this</span>._application.DisplayAlerts; }
<span class="synStatement">set</span> { <span class="synStatement">this</span>._application.DisplayAlerts = <span class="synStatement">value</span>; }
}
<span class="synType">public</span> Workbooks Workbooks
{
<span class="synStatement">get</span> { <span class="synStatement">return</span> <span class="synStatement">new</span> Workbooks(<span class="synStatement">this</span>, <span class="synStatement">this</span>._application.Workbooks); }
}
<span class="synType">public</span> <span class="synType">void</span> Quit()
{
<span class="synStatement">this</span>._application.Quit();
}
}
<span class="synComment">/// </span><span class="synIdentifier">&lt;</span><span class="synStatement">summary</span><span class="synIdentifier">&gt;</span>
<span class="synComment">/// Excel.Workbooks</span>
<span class="synComment">/// </span><span class="synIdentifier">&lt;/</span><span class="synStatement">summary</span><span class="synIdentifier">&gt;</span>
<span class="synType">public</span> <span class="synType">class</span> Workbooks : Base
{
<span class="synType">public</span> Workbooks(Base parent_, <span class="synType">object</span> comobj_)
: <span class="synStatement">base</span>(parent_, comobj_)
{
}
<span class="synType">private</span> Excel.Workbooks _workbooks
{
<span class="synStatement">get</span> { <span class="synStatement">return</span> (Excel.Workbooks)<span class="synStatement">this</span>._comobj; }
}
<span class="synType">private</span> <span class="synType">object</span> _workbooks_open(<span class="synType">string</span> Filename, <span class="synType">object</span> UpdateLinks, <span class="synType">object</span> ReadOnly, <span class="synType">object</span> Format, <span class="synType">object</span> Password, <span class="synType">object</span> WriteResPassword, <span class="synType">object</span> IgnoreReadOnlyRecommended, <span class="synType">object</span> Origin, <span class="synType">object</span> Delimiter, <span class="synType">object</span> Editable, <span class="synType">object</span> Notify, <span class="synType">object</span> Converter, <span class="synType">object</span> AddToMru, <span class="synType">object</span> Local, <span class="synType">object</span> CorruptLoad)
{
<span class="synPreProc">#if PIA_OFFICE_2000</span>
<span class="synType">object</span> ret = <span class="synStatement">this</span>._workbooks.Open(Filename, UpdateLinks, ReadOnly, Format, Password, WriteResPassword, IgnoreReadOnlyRecommended, Origin, Delimiter, Editable, Notify, Converter, AddToMru);
<span class="synPreProc">#endif</span>
<span class="synPreProc">#if PIA_OFFICE_XP</span>
<span class="synType">object</span> ret = <span class="synStatement">this</span>._workbooks.Open(Filename, UpdateLinks, ReadOnly, Format, Password, WriteResPassword, IgnoreReadOnlyRecommended, Origin, Delimiter, Editable, Notify, Converter, AddToMru, Local, CorruptLoad);
<span class="synPreProc">#endif</span>
<span class="synStatement">return</span> ret;
}
<span class="synType">public</span> Workbook Open(
<span class="synType">string</span> filename_,
<span class="synType">bool</span> read_only_,
Excel.XlFileFormat format_,
<span class="synType">string</span> delimiter_
)
{
<span class="synStatement">return</span> <span class="synStatement">new</span> Workbook(<span class="synStatement">this</span>, <span class="synStatement">this</span>._workbooks_open(
filename_,
Type.Missing,
read_only_,
format_,
Type.Missing,
Type.Missing,
Type.Missing,
Type.Missing,
delimiter_,
Type.Missing,
Type.Missing,
Type.Missing,
Type.Missing,
Type.Missing,
Type.Missing));
}
<span class="synType">public</span> Workbook Open(<span class="synType">string</span> filename_, <span class="synType">bool</span> read_only_)
{
<span class="synStatement">return</span> <span class="synStatement">new</span> Workbook(<span class="synStatement">this</span>, <span class="synStatement">this</span>._workbooks_open(
filename_,
Type.Missing,
read_only_,
Type.Missing,
Type.Missing,
Type.Missing,
Type.Missing,
Type.Missing,
Type.Missing,
Type.Missing,
Type.Missing,
Type.Missing,
Type.Missing,
Type.Missing,
Type.Missing));
}
<span class="synType">public</span> Workbook Add()
{
<span class="synStatement">return</span> <span class="synStatement">new</span> Workbook(<span class="synStatement">this</span>, <span class="synStatement">this</span>._workbooks.Add(Type.Missing));
}
<span class="synType">public</span> <span class="synType">int</span> Count
{
<span class="synStatement">get</span> { <span class="synStatement">return</span> <span class="synStatement">this</span>._workbooks.Count; }
}
<span class="synType">public</span> Workbook <span class="synStatement">this</span>[<span class="synType">int</span> idx_]
{
<span class="synStatement">get</span> { <span class="synStatement">return</span> <span class="synStatement">new</span> Workbook(<span class="synStatement">this</span>, <span class="synStatement">this</span>._workbooks.get_Item(idx_)); }
}
<span class="synType">public</span> Workbook <span class="synStatement">this</span>[<span class="synType">string</span> name_]
{
<span class="synStatement">get</span> { <span class="synStatement">return</span> <span class="synStatement">new</span> Workbook(<span class="synStatement">this</span>, <span class="synStatement">this</span>._workbooks.get_Item(name_)); }
}
}
<span class="synComment">/// </span><span class="synIdentifier">&lt;</span><span class="synStatement">summary</span><span class="synIdentifier">&gt;</span>
<span class="synComment">/// Excel.Workbook</span>
<span class="synComment">/// </span><span class="synIdentifier">&lt;/</span><span class="synStatement">summary</span><span class="synIdentifier">&gt;</span>
<span class="synType">public</span> <span class="synType">class</span> Workbook : Base
{
<span class="synType">public</span> Workbook(Base parent_, <span class="synType">object</span> comobj_)
: <span class="synStatement">base</span>(parent_, comobj_)
{
}
<span class="synType">private</span> Excel.Workbook _workbook
{
<span class="synStatement">get</span> { <span class="synStatement">return</span> (Excel.Workbook)<span class="synStatement">this</span>._comobj; }
}
<span class="synType">public</span> Sheets Sheets
{
<span class="synStatement">get</span> { <span class="synStatement">return</span> <span class="synStatement">new</span> Sheets(<span class="synStatement">this</span>, <span class="synStatement">this</span>._workbook.Sheets); }
}
}
<span class="synComment">/// </span><span class="synIdentifier">&lt;</span><span class="synStatement">summary</span><span class="synIdentifier">&gt;</span>
<span class="synComment">/// Excel.Sheets</span>
<span class="synComment">/// </span><span class="synIdentifier">&lt;/</span><span class="synStatement">summary</span><span class="synIdentifier">&gt;</span>
<span class="synType">public</span> <span class="synType">class</span> Sheets : Base
{
<span class="synType">public</span> Sheets(Base parent_, <span class="synType">object</span> comobj_)
: <span class="synStatement">base</span>(parent_, comobj_)
{
}
<span class="synType">private</span> Excel.Sheets _sheets
{
<span class="synStatement">get</span> { <span class="synStatement">return</span> (Excel.Sheets)<span class="synStatement">this</span>._comobj; }
}
<span class="synType">public</span> <span class="synType">int</span> Count
{
<span class="synStatement">get</span> { <span class="synStatement">return</span> <span class="synStatement">this</span>._sheets.Count; }
}
<span class="synType">public</span> Worksheet <span class="synStatement">this</span>[<span class="synType">int</span> idx_]
{
<span class="synStatement">get</span> { <span class="synStatement">return</span> <span class="synStatement">new</span> Worksheet(<span class="synStatement">this</span>, <span class="synStatement">this</span>._sheets.get_Item(idx_)); }
}
<span class="synType">public</span> Worksheet <span class="synStatement">this</span>[<span class="synType">string</span> name_]
{
<span class="synStatement">get</span> { <span class="synStatement">return</span> <span class="synStatement">new</span> Worksheet(<span class="synStatement">this</span>, <span class="synStatement">this</span>._sheets.get_Item(name_)); }
}
}
<span class="synComment">/// </span><span class="synIdentifier">&lt;</span><span class="synStatement">summary</span><span class="synIdentifier">&gt;</span>
<span class="synComment">/// Excel.Worksheet</span>
<span class="synComment">/// </span><span class="synIdentifier">&lt;/</span><span class="synStatement">summary</span><span class="synIdentifier">&gt;</span>
<span class="synType">public</span> <span class="synType">class</span> Worksheet : Base
{
<span class="synType">public</span> Worksheet(Base parent_, <span class="synType">object</span> comobj_)
: <span class="synStatement">base</span>(parent_, comobj_)
{
}
<span class="synType">private</span> Excel.Worksheet _worksheet
{
<span class="synStatement">get</span> { <span class="synStatement">return</span> (Excel.Worksheet)<span class="synStatement">this</span>._comobj; }
}
<span class="synType">public</span> <span class="synType">string</span> Name
{
<span class="synStatement">get</span> { <span class="synStatement">return</span> <span class="synStatement">this</span>._worksheet.Name; }
<span class="synStatement">set</span> { <span class="synStatement">this</span>._worksheet.Name = <span class="synStatement">value</span>; }
}
<span class="synType">public</span> <span class="synType">void</span> Delete()
{
<span class="synStatement">this</span>._worksheet.Delete();
}
<span class="synType">public</span> <span class="synType">void</span> CopyAfter(Worksheet aft_)
{
<span class="synComment">// 指定したワークシートの右側へコピー</span>
<span class="synComment">// this._worksheet を aft_ の 右側へコピー</span>
<span class="synStatement">this</span>._worksheet.Copy(Type.Missing, aft_._comobj);
}
<span class="synType">public</span> <span class="synType">void</span> CopyBefore(Worksheet bef_)
{
<span class="synComment">// 指定したワークシートの左側へコピー</span>
<span class="synComment">// this._worksheet を bef_ の 左側へコピー</span>
<span class="synStatement">this</span>._worksheet.Copy(bef_._comobj, Type.Missing);
}
<span class="synType">public</span> Range Cells
{
<span class="synStatement">get</span> { <span class="synStatement">return</span> <span class="synStatement">new</span> Range(<span class="synStatement">this</span>, <span class="synStatement">this</span>._worksheet.Cells); }
}
<span class="synType">public</span> Range Range
{
<span class="synStatement">get</span> { <span class="synStatement">return</span> <span class="synStatement">new</span> Range(<span class="synStatement">this</span>, <span class="synStatement">this</span>._worksheet.Cells); }
}
<span class="synType">public</span> Range Rows(<span class="synType">int</span> row_)
{
<span class="synStatement">return</span> <span class="synStatement">new</span> Range(<span class="synStatement">this</span>, <span class="synStatement">this</span>._worksheet.Rows[row_, Type.Missing]);
}
<span class="synType">public</span> Range Columns(<span class="synType">int</span> col_)
{
<span class="synStatement">return</span> <span class="synStatement">new</span> Range(<span class="synStatement">this</span>, <span class="synStatement">this</span>._worksheet.Columns[Type.Missing, col_]);
}
}
<span class="synComment">/// </span><span class="synIdentifier">&lt;</span><span class="synStatement">summary</span><span class="synIdentifier">&gt;</span>
<span class="synComment">/// Excel.Range</span>
<span class="synComment">/// </span><span class="synIdentifier">&lt;/</span><span class="synStatement">summary</span><span class="synIdentifier">&gt;</span>
<span class="synType">public</span> <span class="synType">class</span> Range : Base
{
<span class="synType">public</span> Range(Base parent_, <span class="synType">object</span> comobj_)
: <span class="synStatement">base</span>(parent_, comobj_)
{
}
<span class="synType">private</span> Excel.Range _range
{
<span class="synStatement">get</span> { <span class="synStatement">return</span> (Excel.Range)<span class="synStatement">this</span>._comobj; }
}
<span class="synType">public</span> Range <span class="synStatement">this</span>[<span class="synType">int</span> row_, <span class="synType">int</span> col_]
{
<span class="synStatement">get</span> { <span class="synStatement">return</span> <span class="synStatement">new</span> Range(<span class="synStatement">this</span>, <span class="synStatement">this</span>._range.get_Item(row_, col_)); }
}
<span class="synType">public</span> Range <span class="synStatement">this</span>[Range cell1_, Range cell2_]
{
<span class="synStatement">get</span> { <span class="synStatement">return</span> <span class="synStatement">new</span> Range(<span class="synStatement">this</span>, <span class="synStatement">this</span>._range.get_Range(cell1_._comobj, cell2_._comobj)); }
}
<span class="synType">public</span> Range Resize(<span class="synType">int</span> row_, <span class="synType">int</span> col_)
{
<span class="synStatement">return</span> <span class="synStatement">new</span> Range(<span class="synStatement">this</span>, <span class="synStatement">this</span>._range.get_Resize(row_, col_));
}
<span class="synType">public</span> <span class="synType">bool</span> Delete()
{
<span class="synStatement">return</span> (<span class="synType">bool</span>)<span class="synStatement">this</span>._range.Delete(Type.Missing);
}
<span class="synType">public</span> <span class="synType">bool</span> Delete(Excel.XlDeleteShiftDirection direction_)
{
<span class="synStatement">return</span> (<span class="synType">bool</span>)<span class="synStatement">this</span>._range.Delete(direction_);
}
<span class="synType">public</span> <span class="synType">object</span> Value
{
<span class="synPreProc">#if PIA_OFFICE_2000</span>
<span class="synStatement">get</span> { <span class="synStatement">return</span> <span class="synStatement">this</span>._range.Value; }
<span class="synStatement">set</span> { <span class="synStatement">this</span>._range.Value = <span class="synStatement">value</span>; }
<span class="synPreProc">#endif</span>
<span class="synPreProc">#if PIA_OFFICE_XP</span>
<span class="synStatement">get</span> { <span class="synStatement">return</span> <span class="synStatement">this</span>._range.get_Value(Excel.XlRangeValueDataType.xlRangeValueDefault); }
<span class="synStatement">set</span> { <span class="synStatement">this</span>._range.set_Value(Excel.XlRangeValueDataType.xlRangeValueDefault, <span class="synStatement">value</span>); }
<span class="synPreProc">#endif</span>
}
<span class="synType">public</span> Font Font
{
<span class="synStatement">get</span> { <span class="synStatement">return</span> <span class="synStatement">new</span> Font(<span class="synStatement">this</span>, <span class="synStatement">this</span>._range.Font); }
}
<span class="synType">public</span> Interior Interior
{
<span class="synStatement">get</span> { <span class="synStatement">return</span> <span class="synStatement">new</span> Interior(<span class="synStatement">this</span>, <span class="synStatement">this</span>._range.Interior); }
}
}
<span class="synComment">/// </span><span class="synIdentifier">&lt;</span><span class="synStatement">summary</span><span class="synIdentifier">&gt;</span>
<span class="synComment">/// Excel.Font</span>
<span class="synComment">/// </span><span class="synIdentifier">&lt;/</span><span class="synStatement">summary</span><span class="synIdentifier">&gt;</span>
<span class="synType">public</span> <span class="synType">class</span> Font : Base
{
<span class="synType">public</span> Font(Base parent_, <span class="synType">object</span> comobj_)
: <span class="synStatement">base</span>(parent_, comobj_)
{
}
<span class="synType">private</span> Excel.Font _font
{
<span class="synStatement">get</span> { <span class="synStatement">return</span> (Excel.Font)<span class="synStatement">this</span>._comobj; }
}
<span class="synType">public</span> <span class="synType">int</span> ColorIndex
{
<span class="synStatement">get</span> { <span class="synStatement">return</span> (<span class="synType">int</span>)<span class="synStatement">this</span>._font.ColorIndex; }
<span class="synStatement">set</span> { <span class="synStatement">this</span>._font.ColorIndex = <span class="synStatement">value</span>; }
}
<span class="synType">public</span> <span class="synType">bool</span> Bold
{
<span class="synStatement">get</span> { <span class="synStatement">return</span> (<span class="synType">bool</span>)<span class="synStatement">this</span>._font.Bold; }
<span class="synStatement">set</span> { <span class="synStatement">this</span>._font.Bold = <span class="synStatement">value</span>; }
}
}
<span class="synComment">/// </span><span class="synIdentifier">&lt;</span><span class="synStatement">summary</span><span class="synIdentifier">&gt;</span>
<span class="synComment">/// Excel.Interior</span>
<span class="synComment">/// </span><span class="synIdentifier">&lt;/</span><span class="synStatement">summary</span><span class="synIdentifier">&gt;</span>
<span class="synType">public</span> <span class="synType">class</span> Interior : Base
{
<span class="synType">public</span> Interior(Base parent_, <span class="synType">object</span> comobj_)
: <span class="synStatement">base</span>(parent_, comobj_)
{
}
<span class="synType">private</span> Excel.Interior _interior
{
<span class="synStatement">get</span> { <span class="synStatement">return</span> (Excel.Interior)<span class="synStatement">this</span>._comobj; }
}
<span class="synType">public</span> <span class="synType">int</span> ColorIndex
{
<span class="synStatement">get</span> { <span class="synStatement">return</span> (<span class="synType">int</span>)<span class="synStatement">this</span>._interior.ColorIndex; }
<span class="synStatement">set</span> { <span class="synStatement">this</span>._interior.ColorIndex = <span class="synStatement">value</span>; }
}
<span class="synType">public</span> Excel.XlPattern Pattern
{
<span class="synStatement">get</span> { <span class="synStatement">return</span> (Excel.XlPattern)<span class="synStatement">this</span>._interior.Pattern; }
<span class="synStatement">set</span> { <span class="synStatement">this</span>._interior.Pattern = <span class="synStatement">value</span>; }
}
}
}
</pre>
</div>
<div class="section">
<h5>Form1.cs(使用例)</h5>
<pre class="code lang-cs" data-lang="cs" data-unlink><span class="synStatement">using</span> System;
<span class="synStatement">using</span> System.Collections.Generic;
<span class="synStatement">using</span> System.ComponentModel;
<span class="synStatement">using</span> System.Data;
<span class="synStatement">using</span> System.Drawing;
<span class="synStatement">using</span> System.Text;
<span class="synStatement">using</span> System.Windows.Forms;
<span class="synType">namespace</span> WindowsFormsApplication1
{
<span class="synType">public</span> <span class="synStatement">partial</span> <span class="synType">class</span> Form1 : Form
{
<span class="synType">public</span> Form1()
{
InitializeComponent();
}
<span class="synType">private</span> <span class="synType">void</span> button1_Click(<span class="synType">object</span> sender, EventArgs e)
{
lib.SimpleExcel.Application obj_app = <span class="synStatement">new</span> lib.SimpleExcel.Application();
<span class="synComment">// 確実にオブジェクトを開放する為、usingは必須</span>
<span class="synStatement">using</span> (obj_app)
{
obj_app.DisplayAlerts = <span class="synConstant">false</span>;
obj_app.Visible = <span class="synConstant">true</span>;
<span class="synComment">// 新規Workbookを開く</span>
lib.SimpleExcel.Workbook obj_workbook = obj_app.Workbooks.Add();
<span class="synComment">// 不要なSheetを削除</span>
<span class="synComment">// MessageBox.Show(obj_workbook.Sheets.Count.ToString());</span>
<span class="synStatement">while</span> (obj_workbook.Sheets.Count != <span class="synConstant">1</span>)
{
obj_workbook.Sheets[<span class="synConstant">2</span>].Delete();
}
<span class="synComment">// MessageBox.Show(obj_workbook.Sheets.Count.ToString());</span>
<span class="synComment">// Sheet名付け</span>
lib.SimpleExcel.Worksheet obj_sheet = obj_workbook.Sheets[<span class="synConstant">1</span>];
obj_sheet.Name = <span class="synConstant">&quot;data&quot;</span>;
<span class="synComment">// 配列データをシートへ複写</span>
<span class="synType">object</span>[,] data = {
{ <span class="synConstant">&quot;データ0-0&quot;</span>, <span class="synConstant">&quot;データ0-1&quot;</span> },
{ <span class="synConstant">&quot;データ1-0&quot;</span>, <span class="synConstant">&quot;データ1-1&quot;</span> },
};
obj_sheet.Cells[<span class="synConstant">1</span>, <span class="synConstant">1</span>].Value = data; <span class="synComment">// これでは1セルしかコピーされない。</span>
obj_sheet.Range[obj_sheet.Cells[<span class="synConstant">3</span>, <span class="synConstant">1</span>], obj_sheet.Cells[<span class="synConstant">4</span>, <span class="synConstant">2</span>]].Value = data; <span class="synComment">// 明示的に範囲指定</span>
obj_sheet.Cells[<span class="synConstant">5</span>, <span class="synConstant">1</span>].Resize(data.GetLength(<span class="synConstant">1</span>), data.GetLength(<span class="synConstant">0</span>)).Value = data; <span class="synComment">// 配列データをGetLengthして範囲指定</span>
<span class="synComment">// セル値を読む</span>
<span class="synType">object</span> val_obj = obj_sheet.Cells[<span class="synConstant">4</span>, <span class="synConstant">2</span>].Value;
<span class="synStatement">if</span> ((val_obj <span class="synStatement">as</span> <span class="synType">string</span>) != <span class="synConstant">null</span>)
{
MessageBox.Show((<span class="synType">string</span>)val_obj);
}
<span class="synComment">// 取得した型を読む</span>
lib.SimpleExcel.Object obj1 = <span class="synStatement">new</span> lib.SimpleExcel.Object(<span class="synConstant">null</span>, val_obj);
<span class="synComment">// MessageBox.Show(obj1.TypeName);</span>
<span class="synComment">// 範囲でセル値を読む</span>
val_obj = obj_sheet.Range[obj_sheet.Cells[<span class="synConstant">3</span>, <span class="synConstant">1</span>], obj_sheet.Cells[<span class="synConstant">3</span>, <span class="synConstant">2</span>]].Value;
<span class="synType">string</span> str = <span class="synConstant">&quot;&quot;</span>;
<span class="synStatement">if</span> ((val_obj <span class="synStatement">as</span> <span class="synType">object</span>[,]) != <span class="synConstant">null</span>)
{
<span class="synType">object</span>[,] obj2 = (<span class="synType">object</span>[,])val_obj;
<span class="synStatement">for</span> (<span class="synType">int</span> row = <span class="synConstant">1</span>; row &lt;= obj2.GetLength(<span class="synConstant">0</span>); row++)
{
<span class="synStatement">for</span> (<span class="synType">int</span> col = <span class="synConstant">1</span>; col &lt;= obj2.GetLength(<span class="synConstant">1</span>); col++)
{
<span class="synStatement">if</span> ((obj2[row, col] <span class="synStatement">as</span> <span class="synType">string</span>) != <span class="synConstant">null</span>)
{
str += (<span class="synType">string</span>)obj2[row, col] + <span class="synConstant">&quot;,&quot;</span>;
}
}
str += <span class="synConstant">&quot;</span><span class="synSpecial">\n</span><span class="synConstant">&quot;</span>;
}
}
<span class="synComment">// MessageBox.Show(str);</span>
<span class="synComment">// 行削除</span>
obj_sheet.Rows(<span class="synConstant">1</span>).Delete();
obj_sheet.Rows(<span class="synConstant">1</span>).Delete();
obj_sheet.Rows(<span class="synConstant">1</span>).Delete();
obj_sheet.Rows(<span class="synConstant">1</span>).Delete();
obj_app.Quit();
<span class="synComment">// MessageBox.Show(&quot;ComObjectCounter=&quot; + lib.SimpleExcel.Base.ComObjectCounter.ToString());</span>
}
<span class="synComment">// MessageBox.Show(&quot;ComObjectCounter=&quot; + lib.SimpleExcel.Base.ComObjectCounter.ToString());</span>
obj_app = <span class="synConstant">null</span>;
}
}
}
</pre>
</div>
</div></content>
<category term="c#" label="c#" />
<category term="excel" label="excel" />
<link rel="enclosure" href="https://cdn.blog.st-hatena.com/images/theme/og-image-1500.png" type="image/png" length="0" />
<author>
<name>gounx2</name>
</author>
</entry>
<entry>
<title>google chrome で pukiwiki の セクション編集ができない。</title>
<link href="https://gounx2.hatenadiary.org/entry/20090207/1233979217"/>
<id>hatenablog://entry/17680117127136074564</id>
<published>2009-02-07T13:00:17+09:00</published>
<updated>2019-05-17T03:30:30+09:00</updated> <summary type="html">google chrome 試してみた。 速くていいんだけど、pukiwikiのセクション編集(secedit.inc.php)ができない。 pukiwikiはbasic認証を使ってる。 普通の「編集」は行える。 ところが、セクションの横に編集アイコンが表示されない。 $_SERVERを見てみると、PHP_AUTH_USER が含まれていないので、 chromeが ユーザ名/パスワード を送ってきていないのだろう。 (firefoxでは含まれてた)解決方法は今のところ不明。</summary>
<content type="html"><p><a class="keyword" href="http://d.hatena.ne.jp/keyword/google%20chrome">google chrome</a> 試してみた。<br />
速くていいんだけど、<a class="keyword" href="http://d.hatena.ne.jp/keyword/pukiwiki">pukiwiki</a>のセクション編集(secedit.inc.<a class="keyword" href="http://d.hatena.ne.jp/keyword/php">php</a>)ができない。</p>
<ul>
<li><a class="keyword" href="http://d.hatena.ne.jp/keyword/pukiwiki">pukiwiki</a>は<a class="keyword" href="http://d.hatena.ne.jp/keyword/basic%C7%A7%BE%DA">basic認証</a>を使ってる。</li>
<li>普通の「編集」は行える。</li>
<li>ところが、セクションの横に編集アイコンが表示されない。</li>
</ul><p>$_SERVERを見てみると、<a class="keyword" href="http://d.hatena.ne.jp/keyword/PHP">PHP</a>_AUTH_USER が含まれていないので、<br />
<a class="keyword" href="http://d.hatena.ne.jp/keyword/chrome">chrome</a>が ユーザ名/パスワード を送ってきていないのだろう。<br />
(<a class="keyword" href="http://d.hatena.ne.jp/keyword/firefox">firefox</a>では含まれてた)</p><p>解決方法は今のところ不明。</p>
</content>
<category term="pukiwiki" label="pukiwiki" />
<link rel="enclosure" href="https://cdn.blog.st-hatena.com/images/theme/og-image-1500.png" type="image/png" length="0" />
<author>
<name>gounx2</name>
</author>
</entry>
<entry>
<title>lingr rhaco-ja 私的メモ 2008-08から今日まで</title>
<link href="https://gounx2.hatenadiary.org/entry/20080910/1221044219"/>
<id>hatenablog://entry/17680117127136074659</id>
<published>2008-09-10T19:56:59+09:00</published>
<updated>2019-05-17T03:30:31+09:00</updated> <summary type="html">最近rhacoから遠のいてたので rhaco-ja を読んでみた。 ついでに私的メモ!!20080801、nazo LivedoorAuth作る http://www.lingr.com/room/rhaco-ja/archives/2008/08/01#msg-43866443!!20080801、tokushima Variable::parseJson作る(Variable::toJsonの逆) http://www.lingr.com/room/rhaco-ja/archives/2008/08/01#msg-43880050!!20080804、riaf mixiエコーで遊んでる h…</summary>
<content type="html"><p>最近<a class="keyword" href="http://d.hatena.ne.jp/keyword/rhaco">rhaco</a>から遠のいてたので <a class="keyword" href="http://d.hatena.ne.jp/keyword/rhaco">rhaco</a>-ja を読んでみた。<br />
ついでに私的メモ</p><p>!!20080801、nazo LivedoorAuth作る<br />
<a href="http://www.lingr.com/room/rhaco-ja/archives/2008/08/01#msg-43866443">http://www.lingr.com/room/rhaco-ja/archives/2008/08/01#msg-43866443</a></p><p>!!20080801、tokushima Variable::parseJson作る(Variable::toJsonの逆)<br />
<a href="http://www.lingr.com/room/rhaco-ja/archives/2008/08/01#msg-43880050">http://www.lingr.com/room/rhaco-ja/archives/2008/08/01#msg-43880050</a></p><p>!!20080804、riaf <a class="keyword" href="http://d.hatena.ne.jp/keyword/mixi">mixi</a>エコーで遊んでる<br />
<a href="http://www.lingr.com/room/rhaco-ja/archives/2008/08/04#msg-44131805">http://www.lingr.com/room/rhaco-ja/archives/2008/08/04#msg-44131805</a><br />
submitボタンに名前がないとBrowser->submit()できないとかなんとか</p><p>!!20080805、<a class="keyword" href="http://d.hatena.ne.jp/keyword/google">google</a> groupsに投稿<br />
<a href="http://www.lingr.com/room/rhaco-ja/archives/2008/08/05#msg-44140336">http://www.lingr.com/room/rhaco-ja/archives/2008/08/05#msg-44140336</a><br />
# network.http.RequestLoginでは同一ブラウザセッションで複数ログイン情報を保持するようにはなっていません。<br />
# 仕様です。 </p><p>!!20080805、shigepon YahooMAServiceうごかんで悩む<br />
<a href="http://www.lingr.com/room/rhaco-ja/archives/2008/08/05#msg-44173755">http://www.lingr.com/room/rhaco-ja/archives/2008/08/05#msg-44173755</a><br />
arboとかはtrunkに追従してないので地雷っと<br />
ん?Yahoo側?ま。いいか。</p><p>!!20080805、riaf <a class="keyword" href="http://d.hatena.ne.jp/keyword/mysql">mysql</a>の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C8%A5%E9%A5%F3%A5%B6%A5%AF%A5%B7%A5%E7%A5%F3">トランザクション</a>エラーにはまる<br />
<a href="http://www.lingr.com/room/rhaco-ja/archives/2008/08/05#msg-44187832">http://www.lingr.com/room/rhaco-ja/archives/2008/08/05#msg-44187832</a></p><p>!!20080806、tokushima <a class="keyword" href="http://d.hatena.ne.jp/keyword/Rhaco">Rhaco</a>::import("org.<a class="keyword" href="http://d.hatena.ne.jp/keyword/rhaco">rhaco</a>.arbo.network.SvnLogger") <br />
<a href="http://www.lingr.com/room/rhaco-ja/archives/2008/08/06#msg-44212067">http://www.lingr.com/room/rhaco-ja/archives/2008/08/06#msg-44212067</a><br />
# いまさらなんだけど<br />
# <a class="keyword" href="http://d.hatena.ne.jp/keyword/Rhaco">Rhaco</a>::import("org.<a class="keyword" href="http://d.hatena.ne.jp/keyword/rhaco">rhaco</a>.arbo.network.SvnLogger")<br />
# にしてもいい? </p><p>!!20080806、frameworkfightは9末<br />
<a href="http://www.lingr.com/room/rhaco-ja/archives/2008/08/06#msg-44248001">http://www.lingr.com/room/rhaco-ja/archives/2008/08/06#msg-44248001</a></p><p>!!20080806、Variable::parseJsonのバグとか<br />
<a href="http://www.lingr.com/room/rhaco-ja/archives/2008/08/06#msg-44256530">http://www.lingr.com/room/rhaco-ja/archives/2008/08/06#msg-44256530</a></p><p>!!20080806、yabeken projext.<a class="keyword" href="http://d.hatena.ne.jp/keyword/xml">xml</a>デザイナ作る<br />
<a href="http://www.lingr.com/room/rhaco-ja/archives/2008/08/06#msg-44270972">http://www.lingr.com/room/rhaco-ja/archives/2008/08/06#msg-44270972</a><br />
20080813 サービス化<br />
<a href="http://www.lingr.com/room/rhaco-ja/archives/2008/08/13#msg-44707280">http://www.lingr.com/room/rhaco-ja/archives/2008/08/13#msg-44707280</a></p><p>!!20080807、shigepon TableObjectUtil::extractionTableColumnが消えててはまる<br />
<a href="http://www.lingr.com/room/rhaco-ja/archives/2008/08/07#msg-44311102">http://www.lingr.com/room/rhaco-ja/archives/2008/08/07#msg-44311102</a><br />
# !<a href="http://rhaco.org/svn/rhaco/3155/trunk/database/TableObjectUtil.php">http://rhaco.org/svn/rhaco/3155/trunk/database/TableObjectUtil.php</a><br />
# 1.4.9でdeprecated<br />
# きっとやってることが単純で、使用することがなかったから消したんだなぁ </p><p>!!20080807、<a class="keyword" href="http://d.hatena.ne.jp/keyword/kanonji">kanonji</a> project.<a class="keyword" href="http://d.hatena.ne.jp/keyword/xml">xml</a>を書くのに<a class="keyword" href="http://d.hatena.ne.jp/keyword/XML">XML</a>エディタとか使ってます? <br />
<a href="http://www.lingr.com/room/rhaco-ja/archives/2008/08/07#msg-44312403">http://www.lingr.com/room/rhaco-ja/archives/2008/08/07#msg-44312403</a></p><p>!!20080807、project*.xsdの話<br />
<a href="http://www.lingr.com/room/rhaco-ja/archives/2008/08/07#msg-44312825">http://www.lingr.com/room/rhaco-ja/archives/2008/08/07#msg-44312825</a><br />
xsdはテキトー</p><p>!!20080807、riaf む、<a class="keyword" href="http://d.hatena.ne.jp/keyword/COOKIE">COOKIE</a>の値は request->session に入るのか <br />
<a href="http://www.lingr.com/room/rhaco-ja/archives/2008/08/07#msg-44321364">http://www.lingr.com/room/rhaco-ja/archives/2008/08/07#msg-44321364</a><br />
クッキーなんかー</p><p>!!20080807、riaf LoginCondition だけ使い回そうと思ってるので <br />
<a href="http://www.lingr.com/room/rhaco-ja/archives/2008/08/07#msg-44321761">http://www.lingr.com/room/rhaco-ja/archives/2008/08/07#msg-44321761</a><br />
あー。singletonじゃないんだよね。。。<br />
newすれば同じオブジェクトが生成されるんだろうけど。ちょっときもい。<br />
cloneすればいいのか。</p><p>!!20080807、shigepon PDTってちゃんとコメントの@paramにクラス名書いたら補完してくれるんだ!知らなかった<br />
<a href="http://www.lingr.com/room/rhaco-ja/archives/2008/08/07#msg-44322181">http://www.lingr.com/room/rhaco-ja/archives/2008/08/07#msg-44322181</a><br />
# tokushima<br />
# それでフルパスで書くかクラス名だけにするか悩みます <br />
補完優先=クラス名だけ<br />
がいいなぁ。。</p><p>!!20080807、shigepon データ作成君は<a class="keyword" href="http://d.hatena.ne.jp/keyword/sqlite">sqlite</a>のdbが必須になるんですが(しかもサイズが・・・)どうしましょう? <br />
<a href="http://www.lingr.com/room/rhaco-ja/archives/2008/08/07#msg-44327086">http://www.lingr.com/room/rhaco-ja/archives/2008/08/07#msg-44327086</a></p><p>!!20080808、shigepon あれーBirthday型でinsert出来ないっすよ>< <br />
<a href="http://www.lingr.com/room/rhaco-ja/archives/2008/08/08#msg-44354082">http://www.lingr.com/room/rhaco-ja/archives/2008/08/08#msg-44354082</a><br />
<a href="http://www.lingr.com/room/rhaco-ja/archives/2008/08/08#msg-44377570">http://www.lingr.com/room/rhaco-ja/archives/2008/08/08#msg-44377570</a></p><p>!!20080808、shigepon <a class="keyword" href="http://d.hatena.ne.jp/keyword/rhaco">rhaco</a>か<a class="keyword" href="http://d.hatena.ne.jp/keyword/conveyor">conveyor</a>で出展してくれないかと言われたんですが、どーしよーか悩み中・・・ <br />
<a href="http://www.lingr.com/room/rhaco-ja/archives/2008/08/08#msg-44380625">http://www.lingr.com/room/rhaco-ja/archives/2008/08/08#msg-44380625</a></p><p>!!20080808、tokushima つーわけで<a class="keyword" href="http://d.hatena.ne.jp/keyword/CSV">CSV</a>のパーサ作った <br />
<a href="http://www.lingr.com/room/rhaco-ja/archives/2008/08/08#msg-44384350">http://www.lingr.com/room/rhaco-ja/archives/2008/08/08#msg-44384350</a></p><p>!!20080808、tokushima <a href="http://blog.shigepon.com/snippet42">http://blog.shigepon.com/snippet42</a> へのつっこみ<br />
<a href="http://www.lingr.com/room/rhaco-ja/archives/2008/08/08#msg-44394358">http://www.lingr.com/room/rhaco-ja/archives/2008/08/08#msg-44394358</a></p><p>!!20080809、tokushima php4捨てて、rhaco2.0へな話<br />
<a href="http://www.lingr.com/room/rhaco-ja/archives/2008/08/09#msg-44420539">http://www.lingr.com/room/rhaco-ja/archives/2008/08/09#msg-44420539</a></p><p>!!20080809、frameworkfightとかrhaco2とかtry〜catchとかphp5.3の話<br />
<a href="http://www.lingr.com/room/rhaco-ja/archives/2008/08/09#msg-44454830">http://www.lingr.com/room/rhaco-ja/archives/2008/08/09#msg-44454830</a></p><p>!!20080809、tokushima parseJson vs <a class="keyword" href="http://d.hatena.ne.jp/keyword/json">json</a>_decode<br />
<a href="http://www.lingr.com/room/rhaco-ja/archives/2008/08/09#msg-44459650">http://www.lingr.com/room/rhaco-ja/archives/2008/08/09#msg-44459650</a></p><p>!!20080810、shigepon potファイル辞書変換サービス作った<br />
<a href="http://www.lingr.com/room/rhaco-ja/archives/2008/08/10#msg-44487854">http://www.lingr.com/room/rhaco-ja/archives/2008/08/10#msg-44487854</a></p><p>!!20080811、jigen <a class="keyword" href="http://d.hatena.ne.jp/keyword/mysql">mysql</a><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%AB%A5%E9%A5%E0%CC%BE">カラム名</a>に<a class="keyword" href="http://d.hatena.ne.jp/keyword/%CD%BD%CC%F3%B8%EC">予約語</a>使える?<br />
<a href="http://www.lingr.com/room/rhaco-ja/archives/2008/08/11#msg-44606038">http://www.lingr.com/room/rhaco-ja/archives/2008/08/11#msg-44606038</a></p><p>!!20080811、<a class="keyword" href="http://d.hatena.ne.jp/keyword/kanonji">kanonji</a> 配列から<a class="keyword" href="http://d.hatena.ne.jp/keyword/XML">XML</a>を生成できたりするクラス、あったりしませんか?<br />
<a href="http://www.lingr.com/room/rhaco-ja/archives/2008/08/11#msg-44617705">http://www.lingr.com/room/rhaco-ja/archives/2008/08/11#msg-44617705</a></p><p>!!20080812、tokushima 仕様かえまくりますよ?w <br />
<a href="http://www.lingr.com/room/rhaco-ja/archives/2008/08/12#msg-44697761">http://www.lingr.com/room/rhaco-ja/archives/2008/08/12#msg-44697761</a><br />
rhaco2.0の話。はりきってらっしゃる。イヒ</p><p>!!20080813 tokushima arbo,jajaのPHP5棲み分けをした方がいいのか、全部PHP5で書き直すのかw <br />
<a href="http://www.lingr.com/room/rhaco-ja/archives/2008/08/13#msg-44705089">http://www.lingr.com/room/rhaco-ja/archives/2008/08/13#msg-44705089</a></p><p>!!20080813 tokushima すでに1.6.0もreleasedだったり <br />
<a href="http://www.lingr.com/room/rhaco-ja/archives/2008/08/13#msg-44733978">http://www.lingr.com/room/rhaco-ja/archives/2008/08/13#msg-44733978</a></p><p>!!20080813 <a class="keyword" href="http://d.hatena.ne.jp/keyword/kanonji">kanonji</a> <a class="keyword" href="http://d.hatena.ne.jp/keyword/Rhaco">Rhaco</a>::constant()に使える定数名って何かルールありますか?<br />
<a href="http://www.lingr.com/room/rhaco-ja/archives/2008/08/13#msg-44746764">http://www.lingr.com/room/rhaco-ja/archives/2008/08/13#msg-44746764</a></p><p>!!20080813 nazo 普通にnetwork.services.WassrAuthで作りますよw <br />
<a href="http://www.lingr.com/room/rhaco-ja/archives/2008/08/15#msg-44877724">http://www.lingr.com/room/rhaco-ja/archives/2008/08/15#msg-44877724</a></p><p>!!20080813 tokushima ところで、今後getter/setter的なメソッド定義はやめるよ <br />
<a href="http://www.lingr.com/room/rhaco-ja/archives/2008/08/15#msg-44888541">http://www.lingr.com/room/rhaco-ja/archives/2008/08/15#msg-44888541</a><br />
rhaco2.0の話<br />
# tokushima<br />
# ところで、今後getter/setter的なメソッド定義はやめるよ<br />
# $<a class="keyword" href="http://d.hatena.ne.jp/keyword/hoge">hoge</a>->getAbc() とかしてたのは $<a class="keyword" href="http://d.hatena.ne.jp/keyword/hoge">hoge</a>->abc()になっていくよ public $abc だよ<br />
# いいね?<br />
# lang.model.Obj継承するよ いいね?<br />
# ついでにsetは$<a class="keyword" href="http://d.hatena.ne.jp/keyword/hoge">hoge</a>->abc("bbbb"); だよ<br />
# ついでに、boolean を返すのは $<a class="keyword" href="http://d.hatena.ne.jp/keyword/hoge">hoge</a>->isAbc() だよ<br />
# だから、全部アプリ書き直す覚悟してねw<br />
# tokushima<br />
# getVariable()<br />
# とかもvar()かvariable()に変えると思うよ わかったね?w<br />
# tokushima<br />
# static なライブラリ系はあんまり使い方変わらないと思うよ よかったねw<br />
# ただObject系は、内部仕様かわるかもよ ハッシュ返してたのをstdClass返したりするかもよ<br />
# だいたいの方針は分かったね? 今2.0.0に手を出すのは危険な事は分かったね?w </p><p>!!20080818 tokushima<br />
<a href="http://www.lingr.com/room/rhaco-ja/archives/2008/08/18#msg-45113530">http://www.lingr.com/room/rhaco-ja/archives/2008/08/18#msg-45113530</a><br />
rhaco2.0の話</p><p>!!20080819 shigepon テンプレート内容を当てはめた結果を出力しないで得る方法って他にありましたっけ? <br />
<a href="http://www.lingr.com/room/rhaco-ja/archives/2008/08/19#msg-45166007">http://www.lingr.com/room/rhaco-ja/archives/2008/08/19#msg-45166007</a><br />
# tokushima<br />
# Flow->parser()->read()ですかね </p><p>!!20080819 tokushima 誰か<a class="keyword" href="http://d.hatena.ne.jp/keyword/wassr">wassr</a>の購読ユーザ一覧を取得するの作って>< <br />
<a href="http://www.lingr.com/room/rhaco-ja/archives/2008/08/19#msg-45166669">http://www.lingr.com/room/rhaco-ja/archives/2008/08/19#msg-45166669</a></p><p>!!20080819 tokushima <a class="keyword" href="http://d.hatena.ne.jp/keyword/conveyor">conveyor</a> 1.6.0で動くようにするべきかなぁ <br />
<a href="http://www.lingr.com/room/rhaco-ja/archives/2008/08/19#msg-45177721">http://www.lingr.com/room/rhaco-ja/archives/2008/08/19#msg-45177721</a></p><p>!!20080819 <a class="keyword" href="http://d.hatena.ne.jp/keyword/kanonji">kanonji</a> 以前<a class="keyword" href="http://d.hatena.ne.jp/keyword/rhaco">rhaco</a>はMTVを採用している見たいな事を聞いたような聞かなかったような<br />
<a href="http://www.lingr.com/room/rhaco-ja/archives/2008/08/19#msg-45183578">http://www.lingr.com/room/rhaco-ja/archives/2008/08/19#msg-45183578</a></p><p>!!20080819 tokushima 要約すると <br />
<a href="http://www.lingr.com/room/rhaco-ja/archives/2008/08/19#msg-45185229">http://www.lingr.com/room/rhaco-ja/archives/2008/08/19#msg-45185229</a><br />
rhaco2.0の話</p><p>!!20080820 <a class="keyword" href="http://d.hatena.ne.jp/keyword/kanonji">kanonji</a> 1.5から1.6に変えたらaddr.Lがimportされなくなってて若干はまったりしましたけどw <br />
<a href="http://www.lingr.com/room/rhaco-ja/archives/2008/08/20#msg-45213970">http://www.lingr.com/room/rhaco-ja/archives/2008/08/20#msg-45213970</a></p><p>!!20080820 <a class="keyword" href="http://d.hatena.ne.jp/keyword/kanonji">kanonji</a> Logger::setPublisherって function debug($<a class="keyword" href="http://d.hatena.ne.jp/keyword/value">value</a>){独自の処理}等を定義したobjを渡すんですか?<br />
<a href="http://www.lingr.com/room/rhaco-ja/archives/2008/08/20#msg-45215264">http://www.lingr.com/room/rhaco-ja/archives/2008/08/20#msg-45215264</a></p><p>!!20080820 <a class="keyword" href="http://d.hatena.ne.jp/keyword/kanonji">kanonji</a> あっれ、テンプレートの{$f.text2html}の$fって中身なんですか?<br />
<a href="http://www.lingr.com/room/rhaco-ja/archives/2008/08/20#msg-45245328">http://www.lingr.com/room/rhaco-ja/archives/2008/08/20#msg-45245328</a></p><p>!!20080821 shigepon DbUtilにcreateは無いって書きましたが良かったでしょうか?<br />
<a href="http://www.lingr.com/room/rhaco-ja/archives/2008/08/21#msg-45308108">http://www.lingr.com/room/rhaco-ja/archives/2008/08/21#msg-45308108</a></p><p>!!20080821 yabeken generic.Viewsでproject.<a class="keyword" href="http://d.hatena.ne.jp/keyword/xml">xml</a>でdefineした定数をテンプレート内から呼ぶ方法ってありますか? <br />
<a href="http://www.lingr.com/room/rhaco-ja/archives/2008/08/21#msg-45318275">http://www.lingr.com/room/rhaco-ja/archives/2008/08/21#msg-45318275</a></p><p>!!20080821 <a class="keyword" href="http://d.hatena.ne.jp/keyword/kanonji">kanonji</a> いろんなクラスがsetVariable()、getVariable()持ってるじゃないですか? <br />
<a href="http://www.lingr.com/room/rhaco-ja/archives/2008/08/21#msg-45344657">http://www.lingr.com/room/rhaco-ja/archives/2008/08/21#msg-45344657</a><br />
# tokushima<br />
# んー<br />
# <a class="keyword" href="http://d.hatena.ne.jp/keyword/Rhaco">Rhaco</a>は<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B0%A5%ED%A1%BC%A5%D0%A5%EB%CA%D1%BF%F4">グローバル変数</a>なイメージで<br />
# TagParserはテンプレート変数で<br />
# RequestはPOST/GETですね </p><p>!!20080822 tokushima <form rt:reference="true"> の話<br />
<a href="http://www.lingr.com/room/rhaco-ja/archives/2008/08/22#msg-45348524">http://www.lingr.com/room/rhaco-ja/archives/2008/08/22#msg-45348524</a></p><p>!!20080822 shigepon nazoさんが<a class="keyword" href="http://d.hatena.ne.jp/keyword/OpenID">OpenID</a>を実装してくれるんですか!?すげー! <br />
<a href="http://www.lingr.com/room/rhaco-ja/archives/2008/08/22#msg-45382720">http://www.lingr.com/room/rhaco-ja/archives/2008/08/22#msg-45382720</a></p><p>!!20080822 tokushima Atom0.3とかRSS1.0/0.9ってまだいりますかねー? <br />
<a href="http://www.lingr.com/room/rhaco-ja/archives/2008/08/22#msg-45384531">http://www.lingr.com/room/rhaco-ja/archives/2008/08/22#msg-45384531</a></p><p>!!20080822 yabeken DateUtil::weekday($year,$month,$day); //曜日を返す。が欲しいけどどうしたものか・・・<br />
<a href="http://www.lingr.com/room/rhaco-ja/archives/2008/08/22#msg-45391118">http://www.lingr.com/room/rhaco-ja/archives/2008/08/22#msg-45391118</a></p><p>!!20080822 yabeken 1.6.1コミットルール<br />
<a href="http://www.lingr.com/room/rhaco-ja/archives/2008/08/22#msg-45395810">http://www.lingr.com/room/rhaco-ja/archives/2008/08/22#msg-45395810</a><br />
# yabeken<br />
# 1.6.1コミットルール<br />
# テストに通っていないコードはコミットしない。<br />
# テストの追加は認めるが、バグ以外でのテストの修正は認めない。<br />
# コミットログに追加したメソッドと、追加した理由を書く。<br />
# phpdocとdoctestはきちんと書く。</p><p>!!20080822 nazo <a href="http://nazone.info/tmp/openidrhaco.zip">http://nazone.info/tmp/openidrhaco.zip</a><br />
<a href="http://www.lingr.com/room/rhaco-ja/archives/2008/08/22#msg-45401901">http://www.lingr.com/room/rhaco-ja/archives/2008/08/22#msg-45401901</a></p><p>!!20080822 <a class="keyword" href="http://d.hatena.ne.jp/keyword/kanonji">kanonji</a> Variable::toSimpleTag()で配列を<a class="keyword" href="http://d.hatena.ne.jp/keyword/XML">XML</a>に変換してるんですが、配列の値に<とか>とか&があるのを何とかしてくれる機能って無いですか?<br />
<a href="http://www.lingr.com/room/rhaco-ja/archives/2008/08/22#msg-45402664">http://www.lingr.com/room/rhaco-ja/archives/2008/08/22#msg-45402664</a></p><p>!!20080823 tokushima getHoge setHoge verifyHoge arrayHoge <br />
<a href="http://www.lingr.com/room/rhaco-ja/archives/2008/08/23#msg-45429899">http://www.lingr.com/room/rhaco-ja/archives/2008/08/23#msg-45429899</a><br />
rhaco2.0の話</p><p>!!20080823 <a class="keyword" href="http://d.hatena.ne.jp/keyword/kanonji">kanonji</a> <a class="keyword" href="http://d.hatena.ne.jp/keyword/rhaco">rhaco</a>だとvalidateとverifyは同じ意味だったんですか? <br />
<a href="http://www.lingr.com/room/rhaco-ja/archives/2008/08/23#msg-45440083">http://www.lingr.com/room/rhaco-ja/archives/2008/08/23#msg-45440083</a></p><p>!!20080823 tokushima dbUtilでのチェックでverify失敗したら***Exceptionがraisされていて、それを<rt:invalid />で表示できます <br />
<a href="http://www.lingr.com/room/rhaco-ja/archives/2008/08/23#msg-45440648">http://www.lingr.com/room/rhaco-ja/archives/2008/08/23#msg-45440648</a></p><p>!!20080826 tokushima Objって名前どうなんだろとか思いだしている今日この頃 <br />
<a href="http://www.lingr.com/room/rhaco-ja/archives/2008/08/26#msg-45697305">http://www.lingr.com/room/rhaco-ja/archives/2008/08/26#msg-45697305</a><br />
<a class="keyword" href="http://d.hatena.ne.jp/keyword/%CC%BF%CC%BE">命名</a>ってむずかしい</p><p>!!20080823 tokushima <a class="keyword" href="http://d.hatena.ne.jp/keyword/Pear">Pear</a>::DocTest vs <a class="keyword" href="http://d.hatena.ne.jp/keyword/Rhaco">Rhaco</a><br />
<a href="http://www.lingr.com/room/rhaco-ja/archives/2008/08/26#msg-45718444">http://www.lingr.com/room/rhaco-ja/archives/2008/08/26#msg-45718444</a></p><p>!!20080827 NEKOGET rhacoTシャツ着たアバタ<br />
<a href="http://www.lingr.com/room/rhaco-ja/archives/2008/08/27#msg-45793585">http://www.lingr.com/room/rhaco-ja/archives/2008/08/27#msg-45793585</a><br />
cool!</p><p>!!20080829 nazo <a class="keyword" href="http://d.hatena.ne.jp/keyword/rhaco">rhaco</a>のtrunkって今はもう動いてないんですか? <br />
<a href="http://www.lingr.com/room/rhaco-ja/archives/2008/08/29#msg-45933357">http://www.lingr.com/room/rhaco-ja/archives/2008/08/29#msg-45933357</a><br />
# tokushima<br />
# 1.6.*は<a class="keyword" href="http://d.hatena.ne.jp/keyword/google">google</a> codeでバグ修正程度をやってます<br />
# sfのtrunkは2.0が固まるまで放置<br />
# ので、1.6.<br />
# 1.6.*は<a class="keyword" href="http://d.hatena.ne.jp/keyword/google">google</a> codeが最新です </p><p>!!20080829 tokushima DBもPDOにしようかね <br />
<a href="http://www.lingr.com/room/rhaco-ja/archives/2008/08/29#msg-45974174">http://www.lingr.com/room/rhaco-ja/archives/2008/08/29#msg-45974174</a></p><p>!!20080831 toHashでintval <a href="http://fixdap.com/p/rhaco/16968/">http://fixdap.com/p/rhaco/16968/</a><br />
<a href="http://www.lingr.com/room/rhaco-ja/archives/2008/08/31#msg-46124590">http://www.lingr.com/room/rhaco-ja/archives/2008/08/31#msg-46124590</a></p><p>!!20080901 riaf テンプレートで変数を国際化関数にぶちこみたいときはどうしたらいいですか <br />
<a href="http://www.lingr.com/room/rhaco-ja/archives/2008/09/01#msg-46137834">http://www.lingr.com/room/rhaco-ja/archives/2008/09/01#msg-46137834</a><br />
# tokushima<br />
# _({$<a class="keyword" href="http://d.hatena.ne.jp/keyword/hoge">hoge</a>}) でうまくいかなかったら $parser->setVariabe("<a class="keyword" href="http://d.hatena.ne.jp/keyword/hoge">hoge</a>",Message::_("ほげほげ"));<br />
# どっちか </p><p>!!20080901 <a class="keyword" href="http://d.hatena.ne.jp/keyword/kanonji">kanonji</a> # RewriteRule ^(.+)$ index.<a class="keyword" href="http://d.hatena.ne.jp/keyword/php">php</a>?%{<a class="keyword" href="http://d.hatena.ne.jp/keyword/QUERY_STRING">QUERY_STRING</a>}&pathinfo=$1 [L] これってindex.<a class="keyword" href="http://d.hatena.ne.jp/keyword/php">php</a>?foo=bar&pathinfo=<a class="keyword" href="http://d.hatena.ne.jp/keyword/hoge">hoge</a>見たいになると思うんですが <br />
<a href="http://www.lingr.com/room/rhaco-ja/archives/2008/09/01#msg-46138494">http://www.lingr.com/room/rhaco-ja/archives/2008/09/01#msg-46138494</a></p><p>!!20080901 <a class="keyword" href="http://d.hatena.ne.jp/keyword/kanonji">kanonji</a> validateの話、TableObjectUtil::cast、TableObjectVerify::verifyとか<br />
<a href="http://www.lingr.com/room/rhaco-ja/archives/2008/09/01#msg-46178390">http://www.lingr.com/room/rhaco-ja/archives/2008/09/01#msg-46178390</a></p><p>!!20080901 nazo 前に言ったformのvalidationの話の予感! <br />
<a href="http://www.lingr.com/room/rhaco-ja/archives/2008/09/01#msg-46179212">http://www.lingr.com/room/rhaco-ja/archives/2008/09/01#msg-46179212</a><br />
そのあたりは、みんなテキトー?にやってるんだー<br />
2ヶ月前ぐらいからおいらも悩んで、<br />
<a class="keyword" href="http://d.hatena.ne.jp/keyword/rhaco">rhaco</a>の上に俺俺<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D5%A5%EC%A1%BC%A5%E0%A5%EF%A1%BC%A5%AF">フレームワーク</a>?作ってとかやってたんだけど放置。<br />
project.<a class="keyword" href="http://d.hatena.ne.jp/keyword/xml">xml</a>に書いてるValidateを取り込めるようにした<br />
FormValidaterクラス作って、それを各クラス用にカスタマイズしてとかやろうとしてた。</p><p>!!20080901 <a class="keyword" href="http://d.hatena.ne.jp/keyword/kanonji">kanonji</a> Request::isValid()で見るExceptionTrigger::invalid("request");ってどういった類の例外が入るんでしょう? <br />
<a href="http://www.lingr.com/room/rhaco-ja/archives/2008/09/01#msg-46182006">http://www.lingr.com/room/rhaco-ja/archives/2008/09/01#msg-46182006</a></p><p>!!20080902 tokushima search_fields,ordering,form_display,list_display <br />
<a href="http://www.lingr.com/room/rhaco-ja/archives/2008/09/02#msg-46258523">http://www.lingr.com/room/rhaco-ja/archives/2008/09/02#msg-46258523</a><br />
# tokushima<br />
# です<br />
# list_displayが一覧表示<br />
# search_fieldsが一覧での検索対象<br />
# orderingが一覧での表示順序"ordering"=>"column1,-column2" </p><p>!!20080903 <a class="keyword" href="http://d.hatena.ne.jp/keyword/kanonji">kanonji</a> $result=$db->select(new Product(),new Criteria(...)); new Product()ってなんか冗長じゃないのかな<br />
<a href="http://www.lingr.com/room/rhaco-ja/archives/2008/09/03#msg-46352746">http://www.lingr.com/room/rhaco-ja/archives/2008/09/03#msg-46352746</a></p><p>!!20080904 <a class="keyword" href="http://d.hatena.ne.jp/keyword/kanonji">kanonji</a> TableObjec、beforeInsert() beforeUpdate() verify*() とかの話<br />
<a href="http://www.lingr.com/room/rhaco-ja/archives/2008/09/04#msg-46422660">http://www.lingr.com/room/rhaco-ja/archives/2008/09/04#msg-46422660</a></p><p>!!20080904 <a class="keyword" href="http://d.hatena.ne.jp/keyword/kanonji">kanonji</a> potの話<br />
<a href="http://www.lingr.com/room/rhaco-ja/archives/2008/09/04#msg-46424559">http://www.lingr.com/room/rhaco-ja/archives/2008/09/04#msg-46424559</a><br />
potは未開拓>おいら</p><p>!!20080904 nazo 最近のらこらーはViewsを使うのが基本なんでしょうか>< <br />
<a href="http://www.lingr.com/room/rhaco-ja/archives/2008/09/04#msg-46427208">http://www.lingr.com/room/rhaco-ja/archives/2008/09/04#msg-46427208</a></p><p>!!20080904 shigepon <a class="keyword" href="http://d.hatena.ne.jp/keyword/rhaco">rhaco</a>のデフォルトテンプレートを<a class="keyword" href="http://d.hatena.ne.jp/keyword/css">css</a>だけ書き換えたいなーと思ったことあります <br />
<a href="http://www.lingr.com/room/rhaco-ja/archives/2008/09/04#msg-46435657">http://www.lingr.com/room/rhaco-ja/archives/2008/09/04#msg-46435657</a><br />
# shigepon<br />
# ¶ 例えば<a class="keyword" href="http://d.hatena.ne.jp/keyword/rhaco">rhaco</a>のresources/templates/generic/views以下とか<br />
# Viewsで特にテンプレート指定しないとここのファイルが使われるはずなんですが<br />
# 中身はこのままで良いんですが、デザイン(<a class="keyword" href="http://d.hatena.ne.jp/keyword/CSS">CSS</a>)だけ変えたいなーと思ったことがあるんです <br />
# shigepon<br />
# form_displayで順序や表示したい内容を呼び出すというやり方もここに書いてます。ここを参考にしないとまず分からないっすw </p><p>!!20080905 nazo <a class="keyword" href="http://d.hatena.ne.jp/keyword/OpenID">OpenID</a>が動かないのを調べる <br />
<a href="http://www.lingr.com/room/rhaco-ja/archives/2008/09/05#msg-46512561">http://www.lingr.com/room/rhaco-ja/archives/2008/09/05#msg-46512561</a></p><p>!!20080905 yabeken <a class="keyword" href="http://d.hatena.ne.jp/keyword/IE">IE</a>+<a class="keyword" href="http://d.hatena.ne.jp/keyword/HTTPS">HTTPS</a>でダウンロードするときは、session_cache_limiter("public")とかないわー <br />
<a href="http://www.lingr.com/room/rhaco-ja/archives/2008/09/05#msg-46521501">http://www.lingr.com/room/rhaco-ja/archives/2008/09/05#msg-46521501</a><br />
# yabeken<br />
# usesessionオーバーライドすることにします<br />
# 普段はnocache<br />
# DL時はpublic</p><p>!!20080905 nazo <a class="keyword" href="http://d.hatena.ne.jp/keyword/OpenID">OpenID</a> <a class="keyword" href="http://d.hatena.ne.jp/keyword/livedoor">livedoor</a>とyahooもログインできるようになった <br />
<a href="http://www.lingr.com/room/rhaco-ja/archives/2008/09/05#msg-46525223">http://www.lingr.com/room/rhaco-ja/archives/2008/09/05#msg-46525223</a></p><p>!!20080905 <a class="keyword" href="http://d.hatena.ne.jp/keyword/kanonji">kanonji</a> RequestLoginはstaticに使うみたいな事を見かけたんですがExample extends Flowのメソッドで$this->loginRequired($condition, $this);こう使うのはNGですか? <br />
<a href="http://www.lingr.com/room/rhaco-ja/archives/2008/09/05#msg-46531515">http://www.lingr.com/room/rhaco-ja/archives/2008/09/05#msg-46531515</a></p><p>!!20080905 shigepon <rt:invalid>はExceptionの全件表示以外の個別表示とかできませんよね <br />
<a href="http://www.lingr.com/room/rhaco-ja/archives/2008/09/06#msg-46559098">http://www.lingr.com/room/rhaco-ja/archives/2008/09/06#msg-46559098</a></p><p>!!20080909 <a class="keyword" href="http://d.hatena.ne.jp/keyword/kanonji">kanonji</a> いつの間にかtrunkは2.0化していたのか! <br />
<a href="http://www.lingr.com/room/rhaco-ja/archives/2008/09/09#msg-46811833">http://www.lingr.com/room/rhaco-ja/archives/2008/09/09#msg-46811833</a><br />
rhaco2.0 がtrunkに</p><p>!!20080909 tokushima cast不評なのか!?>< <br />
<a href="http://www.lingr.com/room/rhaco-ja/archives/2008/09/09#msg-46861795">http://www.lingr.com/room/rhaco-ja/archives/2008/09/09#msg-46861795</a></p>
</content>
<category term="rhaco" label="rhaco" />
<link rel="enclosure" href="https://cdn.blog.st-hatena.com/images/theme/og-image-1500.png" type="image/png" length="0" />
<author>
<name>gounx2</name>
</author>
</entry>
<entry>
<title>男性にもわかるネイルの話。</title>
<link href="https://gounx2.hatenadiary.org/entry/20080906/1220670332"/>
<id>hatenablog://entry/17680117127136074887</id>
<published>2008-09-06T12:05:32+09:00</published>
<updated>2019-05-17T03:30:33+09:00</updated> <summary type="html">私が思って*た*ネイルのイメージ 「マニキュア」っていう言葉は知ってる。それ以外はなんだかよくわからん。。。 カラフルだったり、つやがでてたり。 もこもこいろいろつけてたりする人もいる。 小さなビンに入っていて、においがきつい。 すごい綺麗なのはネイルサロンでやってもらう。高そう。 ひょんなことから、いろいろ調べた。 想像していたより興味深かったので、メモっておく。 女性との話題づくりに悩んでいる人には、ネイルをネタにするのお勧め。 ネイルサロン、マニキュア、アクリルネイル、ジェルネイル の超手抜き説明 ネイルサロンでは、マニキュアとかアクリルネイルとかジェルネイルとかをプロがやってくれる。 …</summary>
<content type="html"><p>私が思って*た*ネイルのイメージ</p>
<ul>
<li>「マニキュア」っていう言葉は知ってる。それ以外はなんだかよくわからん。。。</li>
<li>カラフルだったり、つやがでてたり。</li>
<li>もこもこいろいろつけてたりする人もいる。</li>
<li>小さなビンに入っていて、においがきつい。</li>
<li>すごい綺麗なのはネイルサロンでやってもらう。高そう。</li>
</ul><p>ひょんなことから、いろいろ調べた。<br />
想像していたより興味深かったので、メモっておく。<br />
女性との話題づくりに悩んでいる人には、ネイルをネタにするのお勧め。</p>
<div class="section">
<h4>ネイルサロン、マニキュア、アクリルネイル、ジェルネイル の超手抜き説明</h4>
<p>ネイルサロンでは、マニキュアとかアクリルネイルとかジェルネイルとかをプロがやってくれる。<br />
ネイルサロンで使ってる材料とか器具が何か特別かといえば、必ずしもそうではない。</p><p>ネイルかわいいよね。<br />
↓<br />
ネイルサロン行ってみる。</p>
<ul>
<li>さすがにプロだから綺麗だ。</li>
<li>だが、金額も高価。シンプルに塗るだけでも両手で1万円とか。</li>
</ul><p>↓<br />
普段は、自分でささっと、ほどほどに綺麗にできたらなぁ。<br />
↓<br />
「マニキュア」塗ってみる。</p>
<ul>
<li>塗るだけなので、お手軽。入手も簡単。</li>
<li>塗ってる途中で固まってしまい、綺麗に塗るのはあんがい難しい。</li>
<li>綺麗に塗れても、部分的にはがれやすい。(持ちが悪い)</li>
<li>強烈なにおいがある。</li>
</ul><p>↓<br />
「アクリルネイル」ってどうよ?</p>
<ul>
<li>強度、光沢は文句なし。</li>
<li>しかし、いろいろと高度なテクニックが必要。</li>
<li>個人じゃハードル高いよね。</li>
</ul><p>↓<br />
「ジェルネイル」ってどうよ?</p>
<ul>
<li>強度、光沢いいよ。</li>
<li>樹脂を塗る→UVライト当てる→硬化</li>
<li>UVライトに当てるまでは、自由にできる。</li>
<li>個人でも比較的容易</li>
</ul><p>これで決定!ってものは無い。どの方法も一長一短<br />
*自分にあった方法*を模索する必要がある。</p><p>あと、用語はすごくたくさんあって、<br />
それがブランド名なのか、技術名なのか、一般名称なのか、ネイルやってる女性でも難解かと。</p>
</div>
<div class="section">
<h4>ネイルする人が気にするところ。</h4>
<ul>
<li>つやが良いか?(照り、クリア感がよいほうがよいねって話)</li>
<li>日常生活においてはがれ難い、ハゲにくいか?(持ちがよいか?って話)
<ul>
<li>リフトしないか?(自爪が部分的に浮いてくること)</li>
</ul></li>
<li>自爪へのダメージが小さいか?(綺麗に見えても、剥がしたときに自爪ぼろぼろとかやだよ。って話)</li>
<li>リムーブ(自爪のみに戻すこと)が容易か?(剥がすのに、削るのに、何時間もかかるって大変よね。って話)</li>
<li>コスト</li>
</ul>
</div>
<div class="section">
<h4>主なネイルアート</h4>
<p>細かいのをあげるときりがないので、主なもののみ。</p><p>爪自身の話</p>
<ul>
<li>スカルプチュア(スカルプ):爪を伸ばす(人工爪)</li>
</ul><p>塗料の塗り方の話</p>
<ul>
<li>グラデーション:色を段階的に変えていくこと(説明するまでもないか)</li>
<li>フレンチ:爪のベースと、先っぽの色を変えて塗ること。(ベース透明で、先っぽが白とか)</li>
</ul><p>塗料以外の何かを使う話</p>
<ul>
<li>3Dアート:爪の上に立体的なアートを施す(ぬるだけじゃなくって、何かをのっける)</li>
<li>ラメ:主に金とか銀とかきらきらしたパウダーのこと。(透明なジェルに混ぜて塗ったり、ふりかけて使ったり)</li>
</ul><p>これらを組み合わせる。<br />
フレンチにしておいて、ワンポイントに3D使ってみたりとか。<br />
ラメを徐々に加えていって、グラデーションしてみたりとか。</p>
</div>
<div class="section">
<h4>ネイルの手順の超手抜き説明</h4>
<p>まず、自爪のお手入れ(甘皮をあげたり取ったり)をして、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D9%A1%BC%A5%B9%A5%B3%A1%BC%A5%C8">ベースコート</a>を全体に塗ります。<br />
その上に、別の色を塗ったり、3Dを置いたり。デザインによっては何度かこれを繰り返します。<br />
最後に、仕上げの<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C8%A5%C3%A5%D7%A5%B3%A1%BC%A5%C8">トップコート</a>を塗って完成。<br />
その後のメンテナンスとしては、数日おきに<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C8%A5%C3%A5%D7%A5%B3%A1%BC%A5%C8">トップコート</a>を塗りなおしたりもします。</p><p>構造はこんな感じ。</p>
<pre class="code" data-lang="" data-unlink> --------------
トップコート(透明)
--------------
必要なら色付きを重ねたり、3Dを置いたり。
--------------
ベースコート(透明とか色付き)
--------------
自爪
--------------</pre><p>まぁ、サンドウィッチ構造ですね。<br />
<br />
</p>
</div>
<div class="section">
<h4>女性と話するときのきっかけに使えるんじゃないかな。</h4>
<p>別に、合コンとかそういうのじゃなくっても、奥さんとか彼女とかとの話題としてもいいと思う。</p><p>予備知識無しに話をふっても「全く知らないくせに」と軽くあしらわれるだろうから、ちょっと予習しておくのが良いと思います。<br />
少しでも知識を持っておけば、相手の説明も理解しやすいはずです。</p>
<ul>
<li>専門用語を覚えておく。
<ul>
<li>上に上げたものだけでも十分かと。</li>
</ul></li>
<li>爪が長かったら「それスカルプ?」とか。</li>
<li>グラデーションとフレンチは簡単に見分けられる。</li>
<li>ワンポイントで3Dつかってたら、そこは見逃すなってこと。(要は誉めポイント)</li>
<li>難しい用語がたくさんあるから、そういうのが出てきたら「xxxってどういう意味?」とか話をふればよい。
<ul>
<li>ネイルやってる人でも知らない用語はたくさんある。</li>
</ul></li>
<li>爪の見た目で話して、次に「ネイルする人が気にするところ」に話題を展開すれば広がりが出る。</li>
<li>「ネイル自分でやってるの?」とか。「綺麗に仕上げるのは難しいって聞いたよ」とか。</li>
</ul><p>"ネイルアート 基本" でネット検索してみてください。<br />
<br />
</p>
</div>
<div class="section">
<h4>その他</h4>
<ul>
<li>最近はネイルアート用品が簡単に入手できるので、個人でもプロ顔負けのネイルアートを行っている人も多い。</li>
<li>足にするのは「ペディキュア」って呼ぶ。</li>
<li>女性が化粧として行うことが多いが、爪の割れを防止する目的でスポーツ選手が使うこともある。</li>
</ul><p>「ジェルネイル」の話</p>
<ul>
<li><del datetime="2009-03-23T00:39:36+09:00">赤外線</del><span style="color:#FF0000;">紫外線</span>で硬化するアクリル樹脂を用いる。</li>
<li>マニキュアと比べると、特有のにおいがない。紫外線に当てるまで硬化しないので造形が自由。硬い。</li>
</ul><p>「付け爪」の話</p>
<ul>
<li>人工の爪を自分の爪に付ける。2種類ある。</li>
<li>「ネイルチップ」
<ul>
<li>通常付け爪といえばこれのこと。</li>
<li>主にプラスチック製でテープや接着剤で自爪に付けて使用する。</li>
</ul></li>
<li>「スカルプチュア」
<ul>
<li>アクリル樹脂(粘度のある液体)などを直接盛り、爪の延長や補強を行う。</li>
</ul></li>
</ul><p>マニキュア<br />
<a href="http://ja.wikipedia.org/wiki/%E3%83%9E%E3%83%8B%E3%82%AD%E3%83%A5%E3%82%A2">http://ja.wikipedia.org/wiki/%E3%83%9E%E3%83%8B%E3%82%AD%E3%83%A5%E3%82%A2</a></p><p>ネイルアート<br />
<a href="http://ja.wikipedia.org/wiki/%E3%83%8D%E3%82%A4%E3%83%AB%E3%82%A2%E3%83%BC%E3%83%88">http://ja.wikipedia.org/wiki/%E3%83%8D%E3%82%A4%E3%83%AB%E3%82%A2%E3%83%BC%E3%83%88</a></p>
</div></content>
<link rel="enclosure" href="https://cdn.blog.st-hatena.com/images/theme/og-image-1500.png" type="image/png" length="0" />
<author>
<name>gounx2</name>
</author>
</entry>
<entry>
<title>大勢で集まったとき、俺がカルパッチョを独占することを世間の常識とせよ</title>
<link href="https://gounx2.hatenadiary.org/entry/20080829/1220022807"/>
<id>hatenablog://entry/17680117127136075022</id>
<published>2008-08-29T00:13:27+09:00</published>
<updated>2019-05-17T03:30:35+09:00</updated> <summary type="html">http://anond.hatelabo.jp/20080829053234増田がブクマに反応して追記してるんだが、それを読んで思うところがあったので書いてみる。「カルパッチョが好きでたまらない。独占したい」が第一優先事項であるなら 「一人で食いに行く」のは、自分の行動だけで実行できる、最も簡単な対処方法でしょ。 それを否定するのに全力投球で追記ってさ。 もはや目的は「大勢で集まったとき、俺がカルパッチョを独占することを世間の常識とせよ」にしか見えないよ? おちつけっての。増田への返信はこれぐらいにしておいて、本題ですが。 仕事でこういう人と付き合わざるを得ない状況だと最悪。世の中には「相手…</summary>
<content type="html"><p><a href="http://anond.hatelabo.jp/20080829053234">http://anond.hatelabo.jp/20080829053234</a></p><p>増田がブクマに反応して追記してるんだが、それを読んで思うところがあったので書いてみる。</p><p>「<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%AB%A5%EB%A5%D1%A5%C3%A5%C1%A5%E7">カルパッチョ</a>が好きでたまらない。独占したい」が第一優先事項であるなら 「一人で食いに行く」のは、自分の行動だけで実行できる、最も簡単な対処方法でしょ。<br />
それを否定するのに全力投球で追記ってさ。<br />
もはや目的は「大勢で集まったとき、俺が<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%AB%A5%EB%A5%D1%A5%C3%A5%C1%A5%E7">カルパッチョ</a>を独占することを世間の常識とせよ」にしか見えないよ?<br />
おちつけっての。</p><p>増田への返信はこれぐらいにしておいて、本題ですが。<br />
仕事でこういう人と付き合わざるを得ない状況だと最悪。</p><p>世の中には「相手を自分色に染めないと納得できない人」がいる。</p>
<ul>
<li>うかつにも「人それぞれだよね」的な意見をいっちゃうと「お前のいうことももっともだけどさ。これこれだから、うんたらかんたら・・・。ということで、俺のが理にかなってるんだ!」とか必死に誘導してくる。</li>
<li>「じゃぁ、こうしてみればお互いハッピーになれるんじゃないかな?」とか提案しても、「ちがうちがう。今までの話聞いてんの?うんたらかんたら・・・。ということで、俺のが理にかなってるんだ!」とか必死に誘導してくる。</li>
</ul><p>もうね。<br />
「自分の中で答えが決まってて、自分語りに必死で、一分も折れるつもりないなら、最初からそういってくれ。<br />
変なゲームに付き合いたくないわ」って言いたくなる。</p><p>もっとも、相手が愚痴聞いて欲しいだけなら「うんうん」って聞き役に徹すればいいんだけどねぇ。<br />
"普通" とか "常識" って言葉を多様するのもどうかと思う。経験上そういう人ほど "自分=普通=常識" をより所として、"自分の意見を一分でも変えるつもりはない" な人が多いと感じる。</p>
</content>
<category term="どうなんだろ?" label="どうなんだろ?" />
<link rel="enclosure" href="https://cdn.blog.st-hatena.com/images/theme/og-image-1500.png" type="image/png" length="0" />
<author>
<name>gounx2</name>
</author>
</entry>
<entry>
<title>スタバのデカフェ(カフェインレス)を飲んだ。</title>
<link href="https://gounx2.hatenadiary.org/entry/20080823/1219459796"/>
<id>hatenablog://entry/17680117127136075109</id>
<published>2008-08-23T11:49:56+09:00</published>
<updated>2019-05-17T03:30:36+09:00</updated> <summary type="html">日本のメジャーなコーヒーチェーンでは、唯一スターバックスだけがデカフェでコーヒーが飲めるらしいので、飲んでみたよ。まず、オーダーするまで。 「本日のコーヒー」と「カフェミスと」の2品に限りデカフェでオーダーできる。 デカフェはホット・アイスどちらも可。 オーダーしてから作るので20分ぐらいかかる。 (自分の近所の2店は扱ってましたけど)デカフェを扱っていない店舗もあるらしい。 普通のとデカフェを飲み比べてみた。 といっても、コーヒーの味に普段からこだわりがあるわけではないので、大雑把な味覚だと思います(汗 条件は以下 「本日のコーヒー」をホットで普通のとデカフェでオーダー どんな豆使ってるのか…</summary>
<content type="html"><p>日本のメジャーなコーヒーチェーンでは、唯一<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%BF%A1%BC%A5%D0%A5%C3%A5%AF%A5%B9">スターバックス</a>だけが<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%AB%A5%D5%A5%A7">デカフェ</a>でコーヒーが飲めるらしいので、飲んでみたよ。</p><p>まず、オーダーするまで。</p>
<ul>
<li>「本日のコーヒー」と「カフェミスと」の2品に限り<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%AB%A5%D5%A5%A7">デカフェ</a>でオーダーできる。</li>
<li><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%AB%A5%D5%A5%A7">デカフェ</a>はホット・アイスどちらも可。</li>
<li>オーダーしてから作るので20分ぐらいかかる。</li>
<li>(自分の近所の2店は扱ってましたけど)<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%AB%A5%D5%A5%A7">デカフェ</a>を扱っていない店舗もあるらしい。</li>
</ul><p>普通のと<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%AB%A5%D5%A5%A7">デカフェ</a>を飲み比べてみた。<br />
といっても、コーヒーの味に普段からこだわりがあるわけではないので、大雑把な味覚だと思います(汗<br />
条件は以下</p>
<ul>
<li>「本日のコーヒー」をホットで普通のと<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%AB%A5%D5%A5%A7">デカフェ</a>でオーダー</li>
<li>どんな豆使ってるのかは確認せず。スゲー適当だなw>俺</li>
<li>2つも一度に飲めないので、持ち返って冷蔵庫でアイスにしてから飲んだ。邪道だなw>俺</li>
<li>アイス用のミルクと砂糖を入れて試飲。</li>
</ul><p>風味:普通の > <a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%AB%A5%D5%A5%A7">デカフェ</a><br />
酸味:普通の >>> <a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%AB%A5%D5%A5%A7">デカフェ</a><br />
苦味:普通の <<< <a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%AB%A5%D5%A5%A7">デカフェ</a></p><p>風味は、今回持ち帰り&冷蔵庫でアイスにしたので大きく失われてるはず。<br />
「<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%AB%A5%D5%A5%A7">デカフェ</a>=風味が落ちる」とか聞くんで、そのあたりはちゃんと評価できてないと思われます。</p><p>個人的には、どちらも美味しかったです。<br />
<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%AB%A5%D5%A5%A7">デカフェ</a>だからといって劣っているとか全く思いませんでした。</p><p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%AB%A5%D5%A5%A7">デカフェ</a>をオーダーすると、挽きたて(なのかな)&注ぎたてが飲めるので、そこは普通のより条件がいいんじゃないかな。</p>
</content>
<category term="どうなんだろ?" label="どうなんだろ?" />
<link rel="enclosure" href="https://cdn.blog.st-hatena.com/images/theme/og-image-1500.png" type="image/png" length="0" />
<author>
<name>gounx2</name>
</author>
</entry>
<entry>
<title>日本の人口と労働市場の変化、50年分をグラフ化しました。</title>
<link href="https://gounx2.hatenadiary.org/entry/20080808/1218175809"/>
<id>hatenablog://entry/17680117127136075278</id>
<published>2008-08-08T15:10:09+09:00</published>
<updated>2019-05-17T03:30:38+09:00</updated> <summary type="html">blogやニュースで話題になりますが、正確なところはよく理解していなかったので、自分の理解を深める為にまとめてみました。 まず、用語を理解しよう。 用語の解説(PDF:41KB)(統計局ホームページ/労働力調査)より間違えやすいところでは、「労働力(者)」「就業者」「雇用者」の関係や「完全失業者」の位置はよく理解しておきましょう。例えば、次の理解は誤りです。 「20年間で*雇用者*が1000万人増えた」という記事を見て、 「20年で*働く人*が1000万人も増えた」と理解 次に、日本の人口構成にまつわる基本を見ておこう。 「働く」のは「人」です。おのずと人口が労働市場に与える影響は大きなものに…</summary>
<content type="html"><p>blogやニュースで話題になりますが、正確なところはよく理解していなかったので、自分の理解を深める為にまとめてみました。</p>
<div class="section">
<h4>まず、用語を理解しよう。</h4>
<p><a href="http://www.stat.go.jp/data/roudou/pdf/definit.pdf">用語の解説(PDF:41KB)</a>(<a href="http://www.stat.go.jp/data/roudou/index.htm">統計局ホームページ/労働力調査</a>)より</p><p><span itemscope itemtype="http://schema.org/Photograph"><a href="http://f.hatena.ne.jp/gounx2/20080808135943" class="hatena-fotolife" itemprop="url"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/g/gounx2/20080808/20080808135943.png" alt="f:id:gounx2:20080808135943p:image" title="f:id:gounx2:20080808135943p:image" class="hatena-fotolife" itemprop="image"></a></span></p><p>間違えやすいところでは、「労働力(者)」「就業者」「雇用者」の関係や「完全失業者」の位置はよく理解しておきましょう。</p><p>例えば、次の理解は誤りです。<br />
「20年間で*雇用者*が1000万人増えた」という記事を見て、<br />
「20年で*働く人*が1000万人も増えた」と理解</p>
</div>
<div class="section">
<h4>次に、日本の人口構成にまつわる基本を見ておこう。</h4>
<p>「働く」のは「人」です。おのずと人口が<a class="keyword" href="http://d.hatena.ne.jp/keyword/%CF%AB%C6%AF%BB%D4%BE%EC">労働市場</a>に与える影響は大きなものになります。<br />
日本の人口構成がどのようなものなのか理解しておきましょう。<br />
キーワードは、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C3%C4%B2%F4%A4%CE%C0%A4%C2%E5">団塊の世代</a>(ベビーブーム)、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%BE%AF%BB%D2%B9%E2%CE%F0%B2%BD">少子高齢化</a><br />
<a href="http://www.stat.go.jp/kids/datastore/world/miniwin/06/06.htm">&#x306A;&#x308B;&#x307B;&#x3069;&#x30C7;&#x30FC;&#x30BF;for&#x304D;&#x3063;&#x305A; - &#x5E74;&#x9F62;&#x968E;&#x7D1A;&#x5225;&#x4EBA;&#x53E3;</a><br />
<a href="http://www.stat.go.jp/kids/datastore/index.htm">&#x306A;&#x308B;&#x307B;&#x3069;&#x30C7;&#x30FC;&#x30BF;for&#x304D;&#x3063;&#x305A; - &#x5E74;&#x9F62;&#xFF13;&#x533A;&#x5206;&#x5225;&#x4EBA;&#x53E3;(&#x6642;&#x7CFB;&#x5217;)</a><br />
</p>
</div>
<div class="section">
<h4>さて、本題の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%CF%AB%C6%AF%CE%CF%BF%CD%B8%FD">労働力人口</a>分布グラフです。</h4>
<p><a href="http://www.stat.go.jp/data/jinsui/">&#x7D71;&#x8A08;&#x5C40;&#x30DB;&#x30FC;&#x30E0;&#x30DA;&#x30FC;&#x30B8;/&#x4EBA;&#x53E3;&#x63A8;&#x8A08;</a><br />
<a href="http://www.stat.go.jp/data/roudou/longtime/03roudou.htm">&#x7D71;&#x8A08;&#x5C40;&#x30DB;&#x30FC;&#x30E0;&#x30DA;&#x30FC;&#x30B8;/&#x52B4;&#x50CD;&#x529B;&#x8ABF;&#x67FB;&#x3000;&#x9577;&#x671F;&#x6642;&#x7CFB;&#x5217;&#x30C7;&#x30FC;&#x30BF;</a><br />
をグラフ化しました。<br />
なお、「雇用者」の「正規/非正規」については、<a class="keyword" href="http://d.hatena.ne.jp/keyword/1984">1984</a>年からのみとなり、それ以前のものは便宜上「正規」としてグラフ化しています。</p><p><span itemscope itemtype="http://schema.org/Photograph"><a href="http://f.hatena.ne.jp/gounx2/20080808135942" class="hatena-fotolife" itemprop="url"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/g/gounx2/20080808/20080808135942.png" alt="f:id:gounx2:20080808135942p:image" title="f:id:gounx2:20080808135942p:image" class="hatena-fotolife" itemprop="image"></a></span><br />
</p>
</div>
<div class="section">
<h4>グラフを見て考えてみましょう。</h4>
<p>このグラフは人口のみなので、年齢間の違いや、報酬額の違いなどはわかりませんが、それでもいろいろと見えてきます。</p><p><span itemscope itemtype="http://schema.org/Photograph"><a href="http://f.hatena.ne.jp/gounx2/20080808135946" class="hatena-fotolife" itemprop="url"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/g/gounx2/20080808/20080808135946.png" alt="f:id:gounx2:20080808135946p:image" title="f:id:gounx2:20080808135946p:image" class="hatena-fotolife" itemprop="image"></a></span><br />
<span itemscope itemtype="http://schema.org/Photograph"><a href="http://f.hatena.ne.jp/gounx2/20080808135945" class="hatena-fotolife" itemprop="url"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/g/gounx2/20080808/20080808135945.png" alt="f:id:gounx2:20080808135945p:image" title="f:id:gounx2:20080808135945p:image" class="hatena-fotolife" itemprop="image"></a></span><br />
<span itemscope itemtype="http://schema.org/Photograph"><a href="http://f.hatena.ne.jp/gounx2/20080808135947" class="hatena-fotolife" itemprop="url"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/g/gounx2/20080808/20080808135947.png" alt="f:id:gounx2:20080808135947p:image" title="f:id:gounx2:20080808135947p:image" class="hatena-fotolife" itemprop="image"></a></span><br />
</p>
</div>
<div class="section">
<h4>y軸を%としたグラフです。</h4>
<p><span itemscope itemtype="http://schema.org/Photograph"><a href="http://f.hatena.ne.jp/gounx2/20080808135944" class="hatena-fotolife" itemprop="url"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/g/gounx2/20080808/20080808135944.png" alt="f:id:gounx2:20080808135944p:image" title="f:id:gounx2:20080808135944p:image" class="hatena-fotolife" itemprop="image"></a></span></p><p>グラフを見て考えてみる。<br />
<span itemscope itemtype="http://schema.org/Photograph"><a href="http://f.hatena.ne.jp/gounx2/20080808135949" class="hatena-fotolife" itemprop="url"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/g/gounx2/20080808/20080808135949.png" alt="f:id:gounx2:20080808135949p:image" title="f:id:gounx2:20080808135949p:image" class="hatena-fotolife" itemprop="image"></a></span><br />
<span itemscope itemtype="http://schema.org/Photograph"><a href="http://f.hatena.ne.jp/gounx2/20080808135950" class="hatena-fotolife" itemprop="url"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/g/gounx2/20080808/20080808135950.png" alt="f:id:gounx2:20080808135950p:image" title="f:id:gounx2:20080808135950p:image" class="hatena-fotolife" itemprop="image"></a></span><br />
<span itemscope itemtype="http://schema.org/Photograph"><a href="http://f.hatena.ne.jp/gounx2/20080808135948" class="hatena-fotolife" itemprop="url"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/g/gounx2/20080808/20080808135948.png" alt="f:id:gounx2:20080808135948p:image" title="f:id:gounx2:20080808135948p:image" class="hatena-fotolife" itemprop="image"></a></span></p><p>どうも、見事な?バランス感覚で労働力が人口比50%をキープしてます。<br />
女性や高齢者の社会進出がなにかと話題になってるので、右肩上がりで労働力[%]は増加してるんだと思ってましたが、違っていたのですね。今回調べてみて、一番意外だった点です。</p>
</div></content>
<category term="どうなんだろう?" label="どうなんだろう?" />
<link rel="enclosure" href="https://cdn-ak.f.st-hatena.com/images/fotolife/g/gounx2/20080808/20080808135943.png" type="image/png" length="0" />
<author>
<name>gounx2</name>
</author>
</entry>
<entry>
<title>サーバ/インフラ Tech Meeting</title>
<link href="https://gounx2.hatenadiary.org/entry/20080808/1218210008"/>
<id>hatenablog://entry/17680117127136075198</id>
<published>2008-08-08T00:40:08+09:00</published>
<updated>2019-05-17T03:30:37+09:00</updated> <summary type="html">24svr-TechMTG サーバ/インフラ Tech Meeting[開催概要]:WEB+DB PRESS plusシリーズ新刊発売記念,サーバ/インフラ勉強会開催ustから見ました。いやー、すごく面白かった。 後書きメモなので、ざくっとだけ。 Linuxカーネル話 まず目次を読め! カーネル読みたくなった。(昔ちょっと見たような気もするけど) 負荷って何?って気になりますよねー ソース見るのって結構大変なんですよね。 ま、ハマると面白いんですけど。新しい発見もあるしね。 個人的には、GCC特有なところ、Linux開発環境周り、は知識が弱いので補完したいんだけど。 たまにblogとか雑誌で知…</summary>
<content type="html"><p>24svr-TechMTG<br />
<a href="http://gihyo.jp/event/2008/24svr-tech-meeting">&#x30B5;&#x30FC;&#x30D0;/&#x30A4;&#x30F3;&#x30D5;&#x30E9; Tech Meeting&#xFF3B;&#x958B;&#x50AC;&#x6982;&#x8981;&#xFF3D;&#xFF1A;WEB+DB PRESS plus&#x30B7;&#x30EA;&#x30FC;&#x30BA;&#x65B0;&#x520A;&#x767A;&#x58F2;&#x8A18;&#x5FF5;&#xFF0C;&#x30B5;&#x30FC;&#x30D0;/&#x30A4;&#x30F3;&#x30D5;&#x30E9;&#x52C9;&#x5F37;&#x4F1A;&#x958B;&#x50AC;</a></p><p>ustから見ました。いやー、すごく面白かった。<br />
後書きメモなので、ざくっとだけ。</p>
<ul>
<li><a class="keyword" href="http://d.hatena.ne.jp/keyword/Linux">Linux</a><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%AB%A1%BC%A5%CD%A5%EB">カーネル</a>話
<ul>
<li>まず目次を読め!</li>
<li><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%AB%A1%BC%A5%CD%A5%EB">カーネル</a>読みたくなった。(昔ちょっと見たような気もするけど)</li>
<li>負荷って何?って気になりますよねー</li>
<li>ソース見るのって結構大変なんですよね。</li>
<li>ま、ハマると面白いんですけど。新しい発見もあるしね。</li>
<li>個人的には、<a class="keyword" href="http://d.hatena.ne.jp/keyword/GCC">GCC</a>特有なところ、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Linux">Linux</a>開発環境周り、は知識が弱いので補完したいんだけど。</li>
<li>たまにblogとか雑誌で知識補充に留まってるんだよなぁ。。。</li>
</ul></li>
</ul>
<ul>
<li><a class="keyword" href="http://d.hatena.ne.jp/keyword/DSAS">DSAS</a>・負荷分散話
<ul>
<li>ダイナミック!</li>
<li>サーバの役割切替は、今は人手らしい。</li>
<li>でも、完全自動化は難しいような。</li>
<li>アプリバグを負荷増加と勘違いして、負荷を分散するつもりが余計に悪い状況にしちゃうとか。あり得そうなんだけど。</li>
<li>自分なら、最後のトリガは人間系がやらないと不安だな。</li>
<li>ま、そのあたりがノウハウなんだろうけど。。。</li>
<li><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%DE%A5%EB%A5%C1%A5%AD%A5%E3%A5%B9%A5%C8">マルチキャスト</a>でファイル配信っていいね。</li>
<li>そういうの<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%AA%A1%BC%A5%D7%A5%F3%A5%BD%A1%BC%A5%B9">オープンソース</a>で既にあってもおかしくなさそうだけど作ったってことは、存在しなかったってことなのかな。</li>
<li>配信を受け損ねたら。とかエラー処理難しそうだ。</li>
</ul></li>
</ul><p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A4%CF%A4%C6%A4%CA">はてな</a>の今昔</p>
<ul>
<li>
<ul>
<li>興味深い。</li>
<li>各時期でのトラブル発生率や、その原因の統計が知りたいな。公開難しいだろうけど。</li>
<li>やっぱりオンメモリが最強ってことで。</li>
<li><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%B9%A5%AF%A5%EC%A5%B9">ディスクレス</a>サーバとかいいですね。</li>
<li>障害発生時セッションは引き継がれないのは、割りきりってことか。</li>
</ul></li>
</ul><p>何はともあれ、まずはこの本読めってことかな(笑</p><p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%CB%A5%B3%A5%CB%A5%B3%C6%B0%B2%E8">ニコニコ動画</a>で公開されるそうです。<br />
おそらく <a href="http://techtalk.jp/">TechTalk.jp - &#x65E5;&#x672C;&#x306E;&#x6280;&#x8853;&#x7CFB;&#x30D7;&#x30EC;&#x30BC;&#x30F3;&#x30C6;&#x30FC;&#x30B7;&#x30E7;&#x30F3;&#x53C2;&#x52A0;&#x8005;&#x306E;&#x305F;&#x3081;&#x306E;&#x30CF;&#x30D6;&#x30B5;&#x30A4;&#x30C8;</a> にアナウンスされると思われます。</p><p>2008-08-11追記<br />
サーバ/インフラ Tech Meeting の資料など - naoyaの<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A4%CF%A4%C6%A4%CA%A5%C0%A5%A4%A5%A2%A5%EA%A1%BC">はてなダイアリー</a><br />
<a href="http://d.hatena.ne.jp/naoya/20080810/1218328035">http://d.hatena.ne.jp/naoya/20080810/1218328035</a></p>
</content>
<category term="24svr-TechMTG" label="24svr-TechMTG" />
<link rel="enclosure" href="https://cdn.blog.st-hatena.com/images/theme/og-image-1500.png" type="image/png" length="0" />
<author>
<name>gounx2</name>
</author>
</entry>
<entry>
<title>20年で非正規雇用プラス1000万人はどこから来たのか?</title>
<link href="https://gounx2.hatenadiary.org/entry/20080805/1217948080"/>
<id>hatenablog://entry/17680117127136075381</id>
<published>2008-08-05T23:54:40+09:00</published>
<updated>2019-05-17T03:30:39+09:00</updated> <summary type="html">正社員ポジションはどこへ? - Chikirinの日記 なんだこりゃ? 自分の得たい結論を導き出すのに都合の良い計算してるだけにみえるんだけどな。。。よい機会なので、日本の労働状況について自分なりに考えてみる。検証したいところはたくさんあるが、 ネタ元は『20年で非正規雇用プラス1000万人はどこから来たのか?』 を分析せず、世代間格差の話に突入してる。 これを明確にしないと話が始まらないんじゃないか?と感じたので、これを調べてみた。統計データは以下から拝借 統計局ホームページ/人口推計 統計局ホームページ/労働力調査 用語の解説(PDF:41KB)(統計局ホームページ/労働力調査)まず、この…</summary>
<content type="html"><p><a href="http://d.hatena.ne.jp/Chikirin/20080803">&#x6B63;&#x793E;&#x54E1;&#x30DD;&#x30B8;&#x30B7;&#x30E7;&#x30F3;&#x306F;&#x3069;&#x3053;&#x3078;&#xFF1F; - Chikirin&#x306E;&#x65E5;&#x8A18;</a><br />
なんだこりゃ?<br />
自分の得たい結論を導き出すのに都合の良い計算してるだけにみえるんだけどな。。。</p><p>よい機会なので、日本の労働状況について自分なりに考えてみる。</p><p>検証したいところはたくさんあるが、<br />
ネタ元は『20年で非<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%B5%B5%AC%B8%DB%CD%D1">正規雇用</a>プラス1000万人はどこから来たのか?』<br />
を分析せず、世代間格差の話に突入してる。<br />
これを明確にしないと話が始まらないんじゃないか?と感じたので、これを調べてみた。</p><p>統計データは以下から拝借<br />
<a href="http://www.stat.go.jp/data/jinsui/">&#x7D71;&#x8A08;&#x5C40;&#x30DB;&#x30FC;&#x30E0;&#x30DA;&#x30FC;&#x30B8;/&#x4EBA;&#x53E3;&#x63A8;&#x8A08;</a><br />
<a href="http://www.stat.go.jp/data/roudou/index.htm">&#x7D71;&#x8A08;&#x5C40;&#x30DB;&#x30FC;&#x30E0;&#x30DA;&#x30FC;&#x30B8;/&#x52B4;&#x50CD;&#x529B;&#x8ABF;&#x67FB;</a><br />
<a href="http://www.stat.go.jp/data/roudou/pdf/definit.pdf">用語の解説(PDF:41KB)</a>(<a href="http://www.stat.go.jp/data/roudou/index.htm">統計局ホームページ/労働力調査</a>)</p><p>まず、このグラフから。<br />
1997年と2007年の労働力に関連している項目をピックアップしてグラフ化した。<br />
グラフ中の小さな赤字は増加数。<br />
<span itemscope itemtype="http://schema.org/Photograph"><a href="http://f.hatena.ne.jp/gounx2/20080805234334" class="hatena-fotolife" itemprop="url"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/g/gounx2/20080805/20080805234334.png" alt="f:id:gounx2:20080805234334p:image" title="f:id:gounx2:20080805234334p:image" class="hatena-fotolife" itemprop="image"></a></span></p><p>気になるのは、欄外の赤字部分<br />
パッと見て思うのは、全て増加しているが、+500ぐらい、1000ぐらい、1500ぐらいと<br />
増加幅がいろいろある点。これらの意味を考えてみる。<br />
(雇用とか就業者とかの定義を把握する)<br />
<span itemscope itemtype="http://schema.org/Photograph"><a href="http://f.hatena.ne.jp/gounx2/20080805234333" class="hatena-fotolife" itemprop="url"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/g/gounx2/20080805/20080805234333.png" alt="f:id:gounx2:20080805234333p:image" title="f:id:gounx2:20080805234333p:image" class="hatena-fotolife" itemprop="image"></a></span></p><p>黄色い部分は、グラフ中の数字を取ってきた。<br />
で、注目すべきは*自営がマイナス*になっている点。<br />
(就業者数=自営+雇用であるが、ネタ元はこのことを考慮していない)<br />
ここまでは、数値を並べただけなので、誰がやっても同じ結果が得られるだろう。</p><p>この数字からストーリーを考えてみる。</p>
<ul>
<li>労働力(実際働いている人+働く意思はあるが職がない人)は20年で645万人増えた。</li>
<li>自営業は衰退し537万人が雇用される側となった。</li>
<li>つまり、雇用者1000万人とは「労働力純増500万+自営業からの<a class="keyword" href="http://d.hatena.ne.jp/keyword/%CE%AE%C6%FE">流入</a>500万人」となる。</li>
<li><a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%B5%B5%AC%B8%DB%CD%D1">正規雇用</a>増は無いに等しく、1000万人はほぼそのまま非<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%B5%B5%AC%B8%DB%CD%D1">正規雇用</a>されている。</li>
</ul><p>さらに書くと、</p>
<ul>
<li>この20年で労働力は増えたが、企業は<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%B5%B5%AC%B8%DB%CD%D1">正規雇用</a>を追従して増加させることはできなかった。維持することで精一杯。</li>
<li><a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%B5%B5%AC%B8%DB%CD%D1">正規雇用</a>を守る為のしわ寄せが零細企業を直撃。</li>
<li>同様に、20年で新たに増加した労働力も行き場は非<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%B5%B5%AC%B8%DB%CD%D1">正規雇用</a>しかなかった。</li>
</ul><p># 継続的な数字を見ないことにはなんともいえないので、<br />
# 20年前の数値と*だけ*比較しても、真実は見えない可能性が高いと思う。<br />
# 非労働力が圧倒的に増えてる点が実は一番認識しておくポイントでしょ。</p>
</content>
<category term="どうなんだろ?" label="どうなんだろ?" />
<link rel="enclosure" href="https://cdn-ak.f.st-hatena.com/images/fotolife/g/gounx2/20080805/20080805234334.png" type="image/png" length="0" />
<author>
<name>gounx2</name>
</author>
</entry>
<entry>
<title>ログをFirebugのコンソールへ出力してみる(その2)</title>
<link href="https://gounx2.hatenadiary.org/entry/20080731/1217486722"/>
<id>hatenablog://entry/17680117127136075464</id>
<published>2008-07-31T15:45:22+09:00</published>
<updated>2019-05-17T03:30:40+09:00</updated> <summary type="html">ログをFirebugのコンソールへ出力してみる。 - gounx2の日記の続き。詳しい説明は、LoggerPublisherDD.php のヘッダ部分に記述しているのでポイントだけ書きます。 主な変更点 「firebugが要素をソートして表示するので、順序がでたらめになる」欠点を解決しました。 ポップアップした別Windowに、rhacoのログ出力を行えるようにしました。 サンプル gg-sample/LoggerPublisherDD-sample.php <?php include_once(dirname(__FILE__).'/../rhaco/Rhaco.php'); Rhaco::…</summary>
<content type="html"><p><a href="http://d.hatena.ne.jp/gounx2/20080711/1215762567">&#x30ED;&#x30B0;&#x3092;Firebug&#x306E;&#x30B3;&#x30F3;&#x30BD;&#x30FC;&#x30EB;&#x3078;&#x51FA;&#x529B;&#x3057;&#x3066;&#x307F;&#x308B;&#x3002; - gounx2&#x306E;&#x65E5;&#x8A18;</a>の続き。</p><p>詳しい説明は、LoggerPublisherDD.<a class="keyword" href="http://d.hatena.ne.jp/keyword/php">php</a> のヘッダ部分に記述しているのでポイントだけ書きます。</p>
<div class="section">
<h4>主な変更点</h4>
<ul>
<li>「<a class="keyword" href="http://d.hatena.ne.jp/keyword/firebug">firebug</a>が要素をソートして表示するので、順序がでたらめになる」欠点を解決しました。</li>
<li>ポップアップした別Windowに、<a class="keyword" href="http://d.hatena.ne.jp/keyword/rhaco">rhaco</a>のログ出力を行えるようにしました。</li>
</ul>
</div>
<div class="section">
<h4>サンプル</h4>
<p><a href="http://code.google.com/p/gounx2repo/source/browse/trunk/rhaco/gg-sample/LoggerPublisherDD-sample.php?r=64">gg-sample/LoggerPublisherDD-sample.php</a></p>
<pre class="code lang-php" data-lang="php" data-unlink><span class="synSpecial">&lt;?php</span>
<span class="synPreProc">include_once</span><span class="synSpecial">(</span><span class="synIdentifier">dirname</span><span class="synSpecial">(</span><span class="synConstant">__FILE__</span><span class="synSpecial">)</span><span class="synStatement">.</span>'<span class="synConstant">/../rhaco/Rhaco.php</span>'<span class="synSpecial">)</span>;
Rhaco<span class="synStatement">::</span><span class="synIdentifier">constant</span><span class="synSpecial">(</span>&quot;<span class="synConstant">LOG_DISP_LEVEL</span>&quot;,&quot;<span class="synConstant">deep_debug</span>&quot;<span class="synSpecial">)</span>;
Rhaco<span class="synStatement">::</span>import<span class="synSpecial">(</span>'<span class="synConstant">generic.Flow</span>'<span class="synSpecial">)</span>;
Rhaco<span class="synStatement">::</span>import<span class="synSpecial">(</span>'<span class="synConstant">gg.util.LoggerPublisher.LoggerPublisherDD</span>'<span class="synSpecial">)</span>;
Rhaco<span class="synStatement">::</span>setVariable<span class="synSpecial">(</span>'<span class="synConstant">LOGGERPUBLISHER_DD_POPUP</span>', <span class="synConstant">true</span><span class="synSpecial">)</span>; <span class="synComment">// or false 別Windowへ表示するか?</span>
Rhaco<span class="synStatement">::</span>setVariable<span class="synSpecial">(</span>&quot;<span class="synConstant">LOGGERPUBLISHER_DD_FIREBUG</span>&quot;, <span class="synConstant">true</span><span class="synSpecial">)</span>; <span class="synComment">// or false Firebugのconsoleへ出力するか?</span>
Rhaco<span class="synStatement">::</span>setVariable<span class="synSpecial">(</span>'<span class="synConstant">LOGGERPUBLISHER_DD_STYLE</span>', '<span class="synConstant">dbug</span>'<span class="synSpecial">)</span>; <span class="synComment">// or 'var_dump' or false 出力形式</span>
<span class="synStatement">$</span><span class="synIdentifier">flow</span> <span class="synStatement">=</span> <span class="synPreProc">new</span> Flow<span class="synSpecial">()</span>;
<span class="synType">class</span> Test<span class="synSpecial">{</span>
<span class="synType">private</span> <span class="synStatement">$</span><span class="synIdentifier">v_xxx</span> <span class="synStatement">=</span> <span class="synConstant">123</span>;
<span class="synStatement">var</span> <span class="synStatement">$</span><span class="synIdentifier">v_int</span> <span class="synStatement">=</span> <span class="synConstant">99</span>;
<span class="synStatement">var</span> <span class="synStatement">$</span><span class="synIdentifier">v_string</span> <span class="synStatement">=</span> &quot;<span class="synConstant">string</span>&quot;;
<span class="synStatement">var</span> <span class="synStatement">$</span><span class="synIdentifier">v_array</span> <span class="synStatement">=</span> <span class="synType">array</span><span class="synSpecial">(</span><span class="synConstant">1</span>,<span class="synConstant">2</span>,<span class="synConstant">3</span><span class="synSpecial">)</span>;
<span class="synStatement">var</span> <span class="synStatement">$</span><span class="synIdentifier">v_hash</span> <span class="synStatement">=</span> <span class="synType">array</span><span class="synSpecial">(</span>&quot;<span class="synConstant">keyA</span>&quot;<span class="synStatement">=&gt;</span><span class="synConstant">111</span>,&quot;<span class="synConstant">keyB</span>&quot;<span class="synStatement">=&gt;</span>&quot;<span class="synConstant">222</span>&quot;<span class="synSpecial">)</span>;
<span class="synSpecial">}</span>
<span class="synStatement">$</span><span class="synIdentifier">o</span> <span class="synStatement">=</span> <span class="synPreProc">new</span> Test<span class="synSpecial">()</span>;
DD<span class="synSpecial">()</span>;
DD<span class="synSpecial">(</span><span class="synStatement">$</span><span class="synIdentifier">flow</span><span class="synSpecial">)</span>; <span class="synComment">// すぐに出力するときはDD()</span>
DD<span class="synSpecial">(</span><span class="synStatement">$</span><span class="synIdentifier">o</span><span class="synSpecial">)</span>; <span class="synComment">// すぐに出力するときはDD()</span>
<span class="synPreProc">echo</span> &quot;<span class="synConstant">↓ここからrhacoログ &lt;br/&gt;</span><span class="synSpecial">\n</span>&quot;;
Logger<span class="synStatement">::</span>info<span class="synSpecial">(</span><span class="synStatement">$</span><span class="synIdentifier">flow</span><span class="synSpecial">)</span>; <span class="synComment">// 普通に書けばいい。オブジェクトなので自動で展開される。</span>
Logger<span class="synStatement">::</span>deep_debug<span class="synSpecial">(</span><span class="synStatement">$</span><span class="synIdentifier">o</span><span class="synSpecial">)</span>; <span class="synComment">// 普通に書けばいい。オブジェクトなので自動で展開される。</span>
<span class="synSpecial">?&gt;</span>
</pre>
</div>
<div class="section">
<h4>実行例</h4>
<p>↓先のサンプルを実行すると、別Windowがポップアップして、以下が表示されます。<br />
<span itemscope itemtype="http://schema.org/Photograph"><a href="http://f.hatena.ne.jp/gounx2/20080731153122" class="hatena-fotolife" itemprop="url"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/g/gounx2/20080731/20080731153122.png" alt="f:id:gounx2:20080731153122p:image" title="f:id:gounx2:20080731153122p:image" class="hatena-fotolife" itemprop="image"></a></span></p><p>↓色つきの部分はクリックで展開できます。<a class="keyword" href="http://d.hatena.ne.jp/keyword/PHP">PHP</a><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%BD%A1%BC%A5%B9%A5%B3%A1%BC%A5%C9">ソースコード</a>も表示できます。<br />
<span itemscope itemtype="http://schema.org/Photograph"><a href="http://f.hatena.ne.jp/gounx2/20080731153121" class="hatena-fotolife" itemprop="url"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/g/gounx2/20080731/20080731153121.png" alt="f:id:gounx2:20080731153121p:image" title="f:id:gounx2:20080731153121p:image" class="hatena-fotolife" itemprop="image"></a></span></p><p>↓同時に、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Firebug">Firebug</a>のconsoleに、以下が表示されます。<br />
<span itemscope itemtype="http://schema.org/Photograph"><a href="http://f.hatena.ne.jp/gounx2/20080731153123" class="hatena-fotolife" itemprop="url"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/g/gounx2/20080731/20080731153123.png" alt="f:id:gounx2:20080731153123p:image" title="f:id:gounx2:20080731153123p:image" class="hatena-fotolife" itemprop="image"></a></span></p><p>↓オブジェクトや配列はクリックで展開できます。<a class="keyword" href="http://d.hatena.ne.jp/keyword/Firebug">Firebug</a>が勝手にソートしてしまうので、名称に強引にナンバリングして、<a class="keyword" href="http://d.hatena.ne.jp/keyword/PHP">PHP</a>上でのプロパティ(メンバ)の順を再現するようにしました。<br />
<span itemscope itemtype="http://schema.org/Photograph"><a href="http://f.hatena.ne.jp/gounx2/20080731153124" class="hatena-fotolife" itemprop="url"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/g/gounx2/20080731/20080731153124.png" alt="f:id:gounx2:20080731153124p:image" title="f:id:gounx2:20080731153124p:image" class="hatena-fotolife" itemprop="image"></a></span><br />
</p>
</div>
<div class="section">
<h4>ソース</h4>
<p><a class="keyword" href="http://d.hatena.ne.jp/keyword/rhaco">rhaco</a>はtrunkと、以下が必要。<br />
<a href="http://code.google.com/p/gounx2repo/source/browse/trunk/rhaco/gg/util/LoggerPublisher/LoggerPublisherDD.php?r=62">gg/util/LoggerPublisher/LoggerPublisherDD.php</a><br />
<a href="http://code.google.com/p/gounx2repo/source/browse/trunk/rhaco/gg/util/LoggerPublisher/dBug.php?r=62">gg/util/LoggerPublisher/dBug.php</a><br />
</p>
</div>
<div class="section">
<h4><a class="keyword" href="http://d.hatena.ne.jp/keyword/rhaco">rhaco</a>について</h4>
<p><a class="keyword" href="http://d.hatena.ne.jp/keyword/rhaco">rhaco</a>は<a class="keyword" href="http://d.hatena.ne.jp/keyword/PHP">PHP</a>の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D5%A5%EC%A1%BC%A5%E0%A5%EF%A1%BC%A5%AF">フレームワーク</a>というかライブラリみたいなもの。<br />
自作のアプリで<a class="keyword" href="http://d.hatena.ne.jp/keyword/rhaco">rhaco</a>のログ機能だけ使う。というようなこともできます。</p>
</div></content>
<category term="rhaco" label="rhaco" />
<link rel="enclosure" href="https://cdn-ak.f.st-hatena.com/images/fotolife/g/gounx2/20080731/20080731153122.png" type="image/png" length="0" />
<author>
<name>gounx2</name>
</author>
</entry>
<entry>
<title>Lingrのログをシンプルに表示してみた。</title>
<link href="https://gounx2.hatenadiary.org/entry/20080726/1217055770"/>
<id>hatenablog://entry/17680117127136075608</id>
<published>2008-07-26T16:02:50+09:00</published>
<updated>2019-05-17T03:30:42+09:00</updated> <summary type="html">http://goungoun.dip.jp/app/open/LingrArchiveViewer/index.php?room=rhaco-jaさらにシンプルに画像をなくしたもの。 http://goungoun.dip.jp/app/open/LingrArchiveViewer/index.php?room=rhaco-ja&simpleソースはここ</summary>
<content type="html"><p><a href="http://goungoun.dip.jp/app/open/LingrArchiveViewer/index.php?room=rhaco-ja">http://goungoun.dip.jp/app/open/LingrArchiveViewer/index.php?room=rhaco-ja</a></p><p>さらにシンプルに画像をなくしたもの。<br />
<a href="http://goungoun.dip.jp/app/open/LingrArchiveViewer/index.php?room=rhaco-ja&simple">http://goungoun.dip.jp/app/open/LingrArchiveViewer/index.php?room=rhaco-ja&simple</a></p><p>ソースは<a href="http://code.google.com/p/gounx2repo/source/browse/trunk/rhaco/gg-sample/LingrArchiveViewer/index.php">&#x3053;&#x3053;</a></p>
</content>
<category term="php" label="php" />
<category term="rhaco" label="rhaco" />
<link rel="enclosure" href="https://cdn.blog.st-hatena.com/images/theme/og-image-1500.png" type="image/png" length="0" />
<author>
<name>gounx2</name>
</author>
</entry>
<entry>
<title>systemの戻りをob_start,ob_get_cleanで取得しようとしてハマるの巻</title>
<link href="https://gounx2.hatenadiary.org/entry/20080724/1216890444"/>
<id>hatenablog://entry/17680117127136075901</id>
<published>2008-07-24T18:07:24+09:00</published>
<updated>2019-05-17T03:30:45+09:00</updated> <summary type="html">次のようなスクリプトを実行すると、 <?php $out = ''; //exec("cd", $out); ob_start(); system("cd"); $out = ob_get_clean(); header("Content-Type: text/html;"); // ←10行目 print phpversion() . "<br />\n"; print "hello!<br />\n"; print_r($out); ?> 次のエラーになります。 Warning: Cannot modify header information - headers already sent…</summary>
<content type="html"><p>次のような<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%AF%A5%EA%A5%D7%A5%C8">スクリプト</a>を実行すると、</p>
<pre class="code lang-php" data-lang="php" data-unlink><span class="synSpecial">&lt;?php</span>
<span class="synStatement">$</span><span class="synIdentifier">out</span> <span class="synStatement">=</span> '';
<span class="synComment">//exec(&quot;cd&quot;, $out);</span>
<span class="synIdentifier">ob_start</span><span class="synSpecial">()</span>;
<span class="synIdentifier">system</span><span class="synSpecial">(</span>&quot;<span class="synConstant">cd</span>&quot;<span class="synSpecial">)</span>;
<span class="synStatement">$</span><span class="synIdentifier">out</span> <span class="synStatement">=</span> <span class="synIdentifier">ob_get_clean</span><span class="synSpecial">()</span>;
<span class="synIdentifier">header</span><span class="synSpecial">(</span>&quot;<span class="synConstant">Content-Type: text/html;</span>&quot;<span class="synSpecial">)</span>; <span class="synComment">// ←10行目</span>
<span class="synPreProc">print</span> <span class="synIdentifier">phpversion</span><span class="synSpecial">()</span> <span class="synStatement">.</span> &quot;<span class="synConstant">&lt;br /&gt;</span><span class="synSpecial">\n</span>&quot;;
<span class="synPreProc">print</span> &quot;<span class="synConstant">hello!&lt;br /&gt;</span><span class="synSpecial">\n</span>&quot;;
<span class="synIdentifier">print_r</span><span class="synSpecial">(</span><span class="synStatement">$</span><span class="synIdentifier">out</span><span class="synSpecial">)</span>;
<span class="synSpecial">?&gt;</span>
</pre><p>次のエラーになります。</p>
<pre class="code" data-lang="" data-unlink>Warning: Cannot modify header information - headers already sent in hoge.php on line 10
5.2.2
hello!
C:\xampp\htdocs\hoge </pre><p>これは <a class="keyword" href="http://d.hatena.ne.jp/keyword/Windows">Windows</a> PHP5.2.2 の話<br />
<a class="keyword" href="http://d.hatena.ne.jp/keyword/Linux">Linux</a> PHP5.2.0でも同様のエラーになりました。</p><p>変わりに</p>
<pre class="code" data-lang="" data-unlink>exec(&#34;cd&#34;, $out);</pre><p>使えばエラーになりませんでした。</p><p>なんだこりゃ。<br />
systemとob_startは相性が悪いようです。</p><p># <a class="keyword" href="http://d.hatena.ne.jp/keyword/PHP">PHP</a>のバグなのかな・・・</p>
</content>
<category term="php" label="php" />
<link rel="enclosure" href="https://cdn.blog.st-hatena.com/images/theme/og-image-1500.png" type="image/png" length="0" />
<author>
<name>gounx2</name>
</author>
</entry>
<entry>
<title>バグ、SvnLogger::TYPE_SHELL()モードで使用してSvnLogger->toRss()するとWarningになる。</title>
<link href="https://gounx2.hatenadiary.org/entry/20080724/1216890443"/>
<id>hatenablog://entry/17680117127136075765</id>
<published>2008-07-24T18:07:23+09:00</published>
<updated>2019-05-17T03:30:43+09:00</updated> <summary type="html">どんな現象か? このスクリプトを実行すると、Rss出力できるんですが、 Warning: Cannot modify header information - headers already sent in ...も表示されるorz <?php //ini_set("display_errors","On"); //ini_set("display_startup_errors","On"); include_once(dirname(__FILE__).'/__init__.php'); Rhaco::import('arbo.network.SvnLogger'); chdir(dirna…</summary>
<content type="html">
<div class="section">
<h4>どんな現象か?</h4>
<p>この<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%AF%A5%EA%A5%D7%A5%C8">スクリプト</a>を実行すると、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Rss">Rss</a>出力できるんですが、</p>
<pre class="code" data-lang="" data-unlink>Warning: Cannot modify header information - headers already sent in ...</pre><p>も表示されるorz</p>
<pre class="code lang-php" data-lang="php" data-unlink><span class="synSpecial">&lt;?php</span>
<span class="synComment">//ini_set(&quot;display_errors&quot;,&quot;On&quot;);</span>
<span class="synComment">//ini_set(&quot;display_startup_errors&quot;,&quot;On&quot;);</span>
<span class="synPreProc">include_once</span><span class="synSpecial">(</span><span class="synIdentifier">dirname</span><span class="synSpecial">(</span><span class="synConstant">__FILE__</span><span class="synSpecial">)</span><span class="synStatement">.</span>'<span class="synConstant">/__init__.php</span>'<span class="synSpecial">)</span>;
Rhaco<span class="synStatement">::</span>import<span class="synSpecial">(</span>'<span class="synConstant">arbo.network.SvnLogger</span>'<span class="synSpecial">)</span>;
<span class="synIdentifier">chdir</span><span class="synSpecial">(</span><span class="synIdentifier">dirname</span><span class="synSpecial">(</span><span class="synConstant">__FILE__</span><span class="synSpecial">)</span><span class="synStatement">.</span>'<span class="synConstant">/../rhaco</span>'<span class="synSpecial">)</span>;
<span class="synComment">//echo getcwd() . &quot;\n&quot;;</span>
<span class="synComment">//system(&quot;/usr/bin/svn info&quot;);</span>
<span class="synStatement">$</span><span class="synIdentifier">svn</span> <span class="synStatement">=</span> <span class="synPreProc">new</span> SvnLogger<span class="synSpecial">(</span>SvnLogger<span class="synStatement">::</span>TYPE_SHELL<span class="synSpecial">()</span>, ''<span class="synSpecial">)</span>;
<span class="synStatement">$</span><span class="synIdentifier">to</span> <span class="synStatement">=</span> <span class="synStatement">$</span><span class="synIdentifier">svn</span><span class="synType">-&gt;</span>last<span class="synSpecial">()</span>;
<span class="synStatement">$</span><span class="synIdentifier">from</span> <span class="synStatement">=</span> <span class="synStatement">$</span><span class="synIdentifier">to</span> <span class="synStatement">-</span> <span class="synConstant">100</span>;
<span class="synStatement">$</span><span class="synIdentifier">svn</span><span class="synType">-&gt;</span>revision<span class="synSpecial">(</span><span class="synStatement">$</span><span class="synIdentifier">from</span>, <span class="synStatement">$</span><span class="synIdentifier">to</span><span class="synSpecial">)</span>;
<span class="synStatement">$</span><span class="synIdentifier">svn</span><span class="synType">-&gt;</span>toRss<span class="synSpecial">(</span>'<span class="synConstant">rhaco-svn-sourceforge-net</span>', '<span class="synConstant">rhaco リポジトリのリビジョン</span>', '<span class="synConstant">http://sourceforge.net/projects/rhaco/</span>'<span class="synSpecial">)</span>;
<span class="synSpecial">?&gt;</span>
</pre>
</div>
<div class="section">
<h4>修正してみた。</h4>
<p>arbo/network/SvnLogger.<a class="keyword" href="http://d.hatena.ne.jp/keyword/php">php</a>(Rev15)</p>
<pre class="code lang-php" data-lang="php" data-unlink><span class="synSpecial">&lt;?php</span>
<span class="synStatement">:</span>
<span class="synType">class</span> SvnLogger<span class="synSpecial">{</span>
<span class="synStatement">:</span>
<span class="synPreProc">function</span> _cmd<span class="synSpecial">(</span><span class="synStatement">$</span><span class="synIdentifier">cmd</span><span class="synSpecial">){</span>
Logger<span class="synStatement">::</span>debug<span class="synSpecial">(</span><span class="synStatement">$</span><span class="synIdentifier">cmd</span><span class="synSpecial">)</span>;
<span class="synStatement">$</span><span class="synIdentifier">out</span><span class="synStatement">=</span>'';
<span class="synIdentifier">exec</span><span class="synSpecial">(</span><span class="synStatement">$</span><span class="synIdentifier">cmd</span>,<span class="synStatement">$</span><span class="synIdentifier">out</span><span class="synSpecial">)</span>;
<span class="synStatement">return</span> <span class="synIdentifier">implode</span><span class="synSpecial">(</span>&quot;<span class="synSpecial">\n</span>&quot;,<span class="synStatement">$</span><span class="synIdentifier">out</span><span class="synSpecial">)</span>;
<span class="synIdentifier">ob_start</span><span class="synSpecial">()</span>;
<span class="synIdentifier">system</span><span class="synSpecial">(</span><span class="synStatement">$</span><span class="synIdentifier">cmd</span><span class="synSpecial">)</span>;
<span class="synStatement">return</span> <span class="synIdentifier">ob_get_clean</span><span class="synSpecial">()</span>;
<span class="synSpecial">}</span>
<span class="synSpecial">}</span>
<span class="synSpecial">?&gt;</span>
</pre><p>しかしながら、なぜこのように修正すれば改善されるのか謎です。<br />
詳しくは次の記事で。</p>
</div></content>
<category term="rhaco" label="rhaco" />
<link rel="enclosure" href="https://cdn.blog.st-hatena.com/images/theme/og-image-1500.png" type="image/png" length="0" />
<author>
<name>gounx2</name>
</author>
</entry>
<entry>
<title>.htaccessの設定とかアクセス制限って。</title>
<link href="https://gounx2.hatenadiary.org/entry/20080724/1216882082"/>
<id>hatenablog://entry/17680117127136075690</id>
<published>2008-07-24T15:48:02+09:00</published>
<updated>2019-05-17T03:30:43+09:00</updated> <summary type="html">setup.php については、member からパスワード設定するとして。こんな感じかな。/apppath/.htaccess <Files ~ "^__.*$"> deny from all </Files> <Files ~ "^.*\db$"> deny from all </Files>/apppath/{library,resources,setup,work}/.htaccess order deny,allow deny from allもしくは・・・ mod_rewrite 使って1ファイルにまとめてみたり。/apppath/.htaccess RewriteEngine O…</summary>
<content type="html"><p>setup.<a class="keyword" href="http://d.hatena.ne.jp/keyword/php">php</a> については、member からパスワード設定するとして。</p><p>こんな感じかな。</p><p>/apppath/<a class="keyword" href="http://d.hatena.ne.jp/keyword/.htaccess">.htaccess</a></p>
<pre class="code" data-lang="" data-unlink>&lt;Files ~ &#34;^__.*$&#34;&gt;
deny from all
&lt;/Files&gt;
&lt;Files ~ &#34;^.*\db$&#34;&gt;
deny from all
&lt;/Files&gt;</pre><p>/apppath/{library,resources,setup,work}/<a class="keyword" href="http://d.hatena.ne.jp/keyword/.htaccess">.htaccess</a></p>
<pre class="code" data-lang="" data-unlink>order deny,allow
deny from all</pre><p>もしくは・・・<br />
<a class="keyword" href="http://d.hatena.ne.jp/keyword/mod_rewrite">mod_rewrite</a> 使って1ファイルにまとめてみたり。</p><p>/apppath/<a class="keyword" href="http://d.hatena.ne.jp/keyword/.htaccess">.htaccess</a></p>
<pre class="code" data-lang="" data-unlink>RewriteEngine On
RewriteBase /apppath/
RewriteRule ^_ /apppath/ [R,L]
RewriteRule ^.*\.db$ /apppath/ [R,L]
RewriteRule ^library/ /apppath/ [R,L]
RewriteRule ^resources/ /apppath/ [R,L]
RewriteRule ^setup/ /apppath/ [R,L]
RewriteRule ^work/ /apppath/ [R,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)$ index.php?%{QUERY_STRING}&amp;pathinfo=$1 [L]</pre><p># 最後の2行は、cool url 用ですけど。。</p>
</content>
<category term="rhaco" label="rhaco" />
<link rel="enclosure" href="https://cdn.blog.st-hatena.com/images/theme/og-image-1500.png" type="image/png" length="0" />
<author>
<name>gounx2</name>
</author>
</entry>
</feed>