問題を生じる可能性のあるアドオン2009年10月17日 13時37分47秒

Firefox の主張

これ、どちらも Express 版の Visual Studio と一緒にインストールされたものだと思うのだが (製品版でも入るのかな?)、今日 Firefox を起動したらこんな alert が表示されて、ブロックされてしまいました。もともとこいつら 3.5 には対応していなかったよーな気もするんだが… (WPF はんなことなかったっけかな?)

IE のテーブルセルに width スタイルを指定する気力が失せる例2009年04月23日 11時13分33秒

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>

<head>
	<meta http-equiv="content-style-type" content="text/css" />
	<title>teble cell width test</title>
	<style>
table {
	width: 100%;
	border-collapse: collapse;
}
table td, table th {
	border: 1px solid #666;
}
table th {
	width: 10ex;
	background: #cef;
	text-align: right;
	padding-right: 1ex;
}
table td {
	text-align: left;
	padding-left: 2px;
}
	</style>
</head>

<body>

<table>
  <tr>
    <th>name</th> <td colspan="3">T.MURACHI</td>
  </tr>
  <tr>
    <th>age</th> <td>31</td>
    <th>sex</th> <td>male</td>
  </tr>
  <tr>
    <th>comment</th>
    <td colspan="3">
      Hi! I'm a fat programmer.
      I like music, playing, listening, singing, and so on...
      I own a company named "Harapeko Inc."
    </td>
  </tr>
</table>

</body>

</html>
  • Firefox での表示例:
    firefox で表示
  • Safari での表示例:
    safari で表示
  • IE7.0 での表示例:
    IE7 で表示

結論: 神は死んだ

…いや、とぼけている場合ではなくて、この現象、ネットでうまく検索することができないので、対策が分からずにいます。誰か教えて下さると有り難いデス…。

Visual Studio で日本語を入力すると「アクションが完了できませんでした。」と怒られたりする。2009年01月22日 16時50分13秒

とってもうざいアラート。

Visual Studio 2008 Express Edition の Visual Web Developer 2008 を使用しているのですが、 Javascript ファイル (.js ファイル) の編集中に、特定の日本語を入力した際、アラート「アクションが完了できませんでした。」が表示される。例えば、「時刻」の「刻」の時が入力されたときにこのアラートが表示される。「刻一刻」のように入力すると、最初の「刻」の字がエディタに反映されるタイミングで 1回と、次の「刻」の字がエディタに反映されるタイミングで 1回の、計 2回表示される。

コメントを入力中にひっきりなしにアラートに遭遇するため、はっきり言ってうざい。生産性が著しく低下する。でも整形ルールをこいつのエディタにお任せしちゃっているので、今更他のエディターを併用するのも面倒くさい。ぐぐってみたけど、特に情報も出てこないので困った。似たような症状に見舞われた方、何か情報を提供していただけると助かりまする…。


2009年 1月 24日 土曜日 18:10:27 JST - 追記

id:dsl さめが追加調査をしてくださいました。多謝!!

  • Unicode の下位オクテットが 0x3B となるような文字で再現する模様。
    • この中の「画」の字は当方でも当初より再現を確認していました。
  • 再現するのは一行コメントを入力中のみで、リテラルや C のコメントを入力中には再現しない (これは手元の環境でも確認しました)。
  • 下位オクテットが 0x3B ではない字でも再現するものが存在する模様 (「好」など)。

あんまりしつこく原因探っても仕方ないような気もしてきたw やっぱり .js ファイルの編集だけ他のエディター使って凌ごうかなぁ。あるいはいっそのことおいらも Eclipse に乗り換えるか…。

ちなみに Javascript (in HTML) で記述されていた力作ですが、 Perl の場合だとこんな感じで書けるっぽいです。

$ perl -MEncode -e 'print encode("UTF-8", pack("U", ($_ << 8) + 0x3b)) for (0..0xff); print "\n"'

ただ、結果がこんな感じで激しく乱雑になったりする訳ではありますがw

;ĻȻ̻лԻػܻ࠻ऻ਻଻఻഻฻༻ျᄻሻጻᐻᔻᘻ᜻ᠻ᤻ᨻᬻ᰻ᴻḻἻ※℻∻⌻␻┻☻✻⠻⤻⨻⬻ⰻⴻ⸻⼻〻ㄻ㈻㌻㐻㔻㘻㜻㠻㤻㨻㬻㰻㴻㸻㼻䀻䄻䈻䌻䐻䔻䘻䜻䠻䤻䨻䬻䰻䴻主伻倻儻刻医吻唻嘻圻堻夻娻嬻尻崻帻弻总愻戻挻搻攻昻朻栻椻樻欻氻活渻漻瀻焻爻猻琻画瘻眻砻礻稻笻簻紻縻缻耻脻舻茻萻蔻蘻蜻蠻褻註謻谻贻踻輻逻鄻鈻錻鐻锻阻霻頻餻騻鬻鰻鴻鸻鼻ꀻꄻꈻꌻꐻꔻ꘻ꜻ꠻ꤻ꨻ꬻ갻괻긻꼻뀻넻눻댻됻딻똻뜻렻뤻먻묻밻봻븻뼻쀻섻숻쌻쐻씻옻윻젻줻쨻쬻찻촻츻켻퀻턻툻팻퐻픻혻휻��������;;碌層כּﰻﴻ︻[

…ってそこ、張り合うところじゃないから! >ヲレ (^_^;A

ブログ内スクリプトが Firefox 3 でも動くようになったー2008年12月06日 19時25分19秒

Firebug でエラーが出てる正確な場所を突き止めることができたので追ってみたら、スタイルシートにスタイルを追加している部分で複数あるスタイルシートすべてに同じスタイルを追加しようとしていて、それでこけてたらしい。最初に見つけたスタイルシートにだけ書き込むようにしたら動くようになった。よかったよかった。

Ubuntu 入れてみた。2008年11月13日 16時24分34秒

あんまりにもあっさり入ってしまうんで逆に怖くなるんですがw

しばらく腰を据えて使いつづけてみますかな…。


2008年 11月 14日 金曜日 00:45:02 JST - 追記

オンボードのサウンドデバイスがあるマシンで別途サウンドデバイスを増設して使用したい場合、オンボードのサウンドデバイスを BIOS の設定で無効化しないといけないらしい。Windows だと両方同時に使えたりするんだけど、この辺はもう Linux カーネル 2.6 の制限事項、なのかなぁ。 2.4 + ALSA のときは両方同時もいけたような気がしたんだけど…。

あと、ネットで拾った PDF ファイルでうまく閲覧できないのがあった。これなんだけど、日本語部分がまったく表示されない。多分フォントの問題だな。うちの会社の決算報告書は問題なく見れたけど。

デスクトップアプリも概ね充実してる。動画とかも大抵のファイルはそのまま見れちゃう。.fla とかも見れちゃう。knoppix では見れなかったからこれはちょっと嬉しかった。うん。もうちょっとゆっくり使ってみますw


2008年 11月 14日 金曜日 10:58:53 JST - 追記

Ubuntu には標準で PulseAudio というサウンドマネージャが入っていて、アプリケーションごとの音量コントロールとかができるようになっているらしいんだけど、各方面で重い重いと結構不評らしい。まぁ重いのも厭なんだけど、それ以前においらが使っている Delta 66 が PulseAudio と相性が悪いようで、 PulseAudio のプロセスが生きている間は音が鳴らないという有様だった。

で、これは PulseAudio を削除すれば解決するんだけど、Ubuntu 8.10 だと PulseAudio を起動しようとするセッションスクリプトを自分で削除する必要がある。その辺のやり方も含め、やり方が書かれているブログがあったので紹介します。超絶感謝 m(_ _)m 。

「妄信」とやらがプログラムを「複雑」にするという迷信2008年10月27日 16時04分38秒

職場からなので簡潔にw

  1. 「変数のスコープは狭いほど良い」と妄信する
  2. 「同じロジックのコードを2度以上書くな」と妄信する
  3. 「プログラミング言語を極めるのが大切」と妄信する

変数でもメソッド名でもクラス名でも言えることだが、単純に「スコープは狭いほどよい」という方針でプログラムすると、逆に保守性も可読性も悪いプログラムができあがることがけっこうある。

同じようなパターンがプログラムの複数箇所に現れる場合、それらを抽象化して一つの共通ロジックへのパラメータ渡しとして実装し、それを複数箇所から呼び出すように実装すると、プログラムコード量が小さくなり、保守性が良くなったような気がするので、未熟なプログラマが、なんでもかんでも共通ルーチン化しまくって、非常に保守性の悪いプログラムにしてしまうことがある。

レベルの高いエンジニアは、同じロジックのコードが複数箇所に現れている方が、適切な判断の結果であることはけっこうあるということをよく知っている。

とりあえずこの、最初の二つ。個人的な経験においては、この二つでそれほど困ったことになったということって、実はあんまりない。それは、多分、おいらの個人的な仕事経験において、こういうことで困るほど、周囲の方々に能力的に拙い方が多くいらっさるような現場に、お世話になっていたということが、まったくと言っていいほど無かったからなんだと思う。

そういう意味ではおいらはこれまで非常に幸運なんだけれども、反面、そういう意味での不幸な状況というのは、個人的には異常事態なんじゃないか、とも思う。

とりあえず、シンボルのスコープは必要以上に大きくなりすぎないように気をつけようとか、安易なコピペはなるべく避けよう、といった指針は、作業効率を考慮した場合において、逆の指針にしておくより明らかに安全であるはずだ。もちろん、「無理に」スコープを狭くしようとしたり、「無理に」抽象化しようとしたりさえしなければね。逆に言えば、無理のないスコープの限定の仕方、無理のない抽象化の方策が考えつくのであれば、多くの場合、これはやるに越したことはない。初心者の方がこういう部分でトライ&エラーに躍起になるのは、おいらが上司なら応援したいところだし、それが原因でスケジュールに多少の支障をきたしたとしても、かばってあげたいと思う。各人の戦力を考慮し、そういう部分も織り込んだ上でスケジュールを組むのが、多分最も正しい。

セオリーとされる物事に対して、「必要以上に○○すべきじゃない」と言ってしまうのは、その○○に技術的な難しさを感じる「未熟な」プログラマーに、妥協の余地を与えてしまいかねない。プログラマーとして、技術者として先輩風を吹かせたいのであれば、そう言う部分については政治的な考慮がもう少しあってもいいんじゃないかなぁ、とは思った。

一方で、この件に関して大きく対立する意見を表明されている方がいらっしゃるんだけれども、

まず,実際には多くのフレームワークやライブラリを用意するだけで事足りる場合が多い.独自の言語仕様を制作するのは『車輪の再発明』でしかなく,作られた言語は一般的に普及した言語に比べより未熟で質が悪いことが多い.開発者にとってアプリのデバッグだけでなく言語のデバッグも同時に行うことは非常に大きな負担となる.なにより似て非なる二つの言語を覚えることは単なる時間の浪費だ.よほど大きなメリットがない限り,独自仕様『粗悪』言語の出番はない.

プログラミング経験がほとんどない初心者に毛が生えた人が,このように主張する事が多い.特に抽象の取り扱いは開発者の素質に大きく依存するらしいので,素質のない人がこういう結論に至るのは驚くに値しない.自分のプログラミングテクニックの未熟さを棚に上げて,抽象に責任転嫁することがないよう注意しよう.

ひじょーに Java 屋さんらしい意見だなぁとか思った。いや、厭味とかではなくて。世の中にはこういう技術者さんも確実に必要だと思う。

でも、「おいらは今 Lua でプログラムを書いているはずなのに、言語仕様には存在しない MVC モデルに躍起になっている…」なぁんて環境での開発を1年間ほど経験させていただいたりしたおいらとしては、言語拡張にも近い現場ルールの適用程度の「自由度」も楽しめないプログラミングというのも面白くないなぁとか思ってしまうしw、単に抽象化と言ってしまうよりもアクロバティックなテクニック (演算子オーバーロードとか TMP とかw) も、「正しく」活用できるところでは活用したいよなぁとか思う人なのでw、そういう意味では若干相容れないかなぁ、とか、ちょっと悲しいことを言ってみたりもするわけなのですよ。

よーするに論を決してしまうならば、言語仕様的にも設計テクニック、セオリー的にも間違っていない事柄について、知識も向上心も無い人たちを前提とした職場づくりというのは、下策なんじゃねーの? ということ。自分たちが現場において要求すべき技術レベルというのをある程度高めに設定したうえで、そういったレベルでの開発についていけない方々に、無理に仕事をお任せする必要もないんじゃないかなぁ。厳しいことを言うようだけれども。

もちろん、現場はそうせざるを得ないんだと断末魔を上げたい気持ちもよく分かる。そんな優秀な人を雇い入れるお金もない。でも、安全で住み心地の良い街に住みたいなら税を高くして福祉に金を賭けろ、って言う議論があるのと同様、モチベーションを維持しつつ気持ちよく仕事をしていきたいならば、経営者が従業員に金をかけるべきなのは至極当然なんだよね。本来そうやって技術に明るい技術者を育てたいなら、積極的に技術に明るい人間を雇い入れ、根っこから技術に特化した風土を社内に培っていかなきゃならないんじゃないかな。それが、技術で食っていく会社の、経営者の責任だと、おいらは思うわけですよ。

せめて、PHP で「関数の引数以外の場所での参照渡しは禁止」みたいな、あるいは値の型でモンゴリアン、じゃなかった、ハンガリアンの強制とか、そういう、優秀な人々の生産性を抑制するようなルール作りは、廃絶していくべきなんじゃあないかなぁ。

始めてみようプログラミング - その12008年07月16日 08時52分53秒

amachang が悪戦苦闘しているのを見て面白そうだったので、真似してみる。とりあえず、言語がどうとか言うのは意識せずに、小学生とか相手にプログラミングたいけ~んみたいなノリで書いてみようかな。

コンピュータを知ろう

コンピュータは、いろんな機械にくっついて、その機械を動かすことができます。洗濯機にも、湯沸かしポットにも、テレビやビデオデッキやケータイや iPod にも、コンピュータがくっついています。

コンピュータを使うのは、人がその機械を直接使うよりも、使い方をコンピュータに教えて、お仕事をまかせてしまった方が、楽ちんだからです。スイッチひとつで洗濯から脱水、乾燥まで全部やってくれる洗濯機ですが、コンピュータが使われる前までは、自分で洗剤の量を量り、自分で水の量を量り、洗う時間はタイマーで計り、水を何回か入れ替えながらすすぎをし、脱水機に手で入れ替え、脱水時間もタイマーで計り、ちゃんと絞り切れたのを確認してから干す、ということを全部お母さんが手でやっていたんです。昔のお母さんは偉大ですね! 今のお母さんも十分偉大ですけどね!!

パソコン (パーソナルコンピュータ) には、大きなテレビ画面 (ディスプレイ) やスピーカー、キーボードにマウス、それからプリンターやスキャナー、電子楽器など、いろんな物をくっつけることができます。洗濯機にくっついているコンピュータは、洗濯機を動かすことしかできませんが、パソコンには、いろんな物をくっつけて、いろんな事をさせることができるのです。

さらに、パソコンはネットワークにつながることができます。ネットワークには世界中のパソコンや、サーバーと呼ばれるネットワーク専用のコンピュータがつながっていて、インターネットと呼ばれる世界を作り出しています。ネットワークを介して、お友達にメールを送ったり、サーバーに日記などの情報を置いて、ホームページやブログを開くこともできるのです。みんなの大好きなモバゲーも、もとはパソコンを使って作られているんですよ。

プログラミングってなんだ?

洗濯機にくっついているコンピュータは、洗濯機の動かしかたを知っています。では、洗濯機の動かしかたをコンピュータに教えたのは、誰でしょう? それは、その洗濯機にコンピュータをくっつけた、洗濯機工場のおじさんです。(嘘ですw 本当は工場の人じゃなくて、ビルで働いているおじさんですw)

じゃあ、そのおじさんは、洗濯機のコンピュータに、どうやって洗濯機の動かしかたを教えたのでしょうか?

実は、それこそが、プログラミングと呼ばれるお仕事なのです。人は、プログラミングを行うことによって、コンピュータに、機械の動かしかたを教えることができるんです。

では、プログラミングとは、いったいどんなことをやるのでしょうか?

(...たぶんつづく)

ちょwwwwはやwwwwww2008年04月16日 10時50分46秒

harapeko.jp の後継サーバはこいつにしてみました。専用サーバのくせして安いのはいいが、CentOS プリインストールのまま何もいじってないしコントロールパネルみたいな便利なものもセキュリティやら監視やらの特別なサービスもなあんもないよー、全部 ssh で設定がんがってねーという、実に漢らしいサービス内容に惚れ込みましたw。収容データセンターがソフトバンク IDC だってのが微妙に気にはなりますが。。。

で、オンライン登録時に「納品できるのに 2週間ぐらいかかります」とか表示されてたので、まぁ現行 harapeko.jp ドメイン消滅やら登記完了やらが重なってむしろ丁度いいかな、設定に時間かかったらドメイン取り直したのにもてあましちゃってあれかもしれないけど、とりあえず気長に待つかぁ、とか思っていたわけですが、登録した翌日には納品書が届きましたよ。これにはさすがに驚いた。設定も完了していて、既に自由に使える状態に。これはうれしい誤算だ。w

そんなわけで、取り急ぎ、apache だけ設定を済ませてみました。いや、 mod_perl とか組み込んでないし全然完璧じゃないですが、とりあえず動いてるっちゅーことで。

sendmail と sftp も設定しちゃわないとなぁ。。。

mod_perl の無い環境で Apache::Registry みたいなことをする方法を考える2008年04月10日 23時59分27秒

まだやってないけど。

CGI 呼び出しによって毎回起動するプロセスを「呼び出し側プロセス」、実際の処理と出力を行うプロセスを「処理側プロセス」と呼ぶことにして。

呼び出し側プロセスの処理は以下の通りかな。

  1. 名前付きパイプ pipe_A が無ければ作る。
  2. 名前付きパイプ pipe_B を作る。これは毎回、違う名前で作る。
  3. 処理側プロセスが存在しなければ fork し、子プロセスを処理側プロセスとして、そのプロセス ID をファイルに記録する。
  4. pipe_A を開き、pipe_B のファイル名と環境変数、そして標準入力からの入力を出力する。
  5. pipe_B を開き、入力した内容を標準出力に書き出す。
  6. pipe_B を削除する。

処理側プロセスの処理は以下の通りかな。

  1. pipe_A を開き、pipe_B のファイル名と環境変数、そして標準入力からの入力を入力する (その単位でデータを適切に読み出せるよう、データのサイズがわかるようになっている必要がある)。
  2. 処理を行い、結果を pipe_B に書き出す。
  3. 1 に戻る。

懸念点。つか、おいらの知識が圧倒的に足りてないだけの話なんだけど。

  • 呼び出し側プロセスは毎回起動するわけだからあんまり解決になっていないのでは?
    • 処理側プロセスが大量のモジュールを読み込むような場合には、それなりに効果はあるのかも。
  • mod_perl が使えないような環境、すなわちさくらのレンサバみたいなレンタルサーバー環境では、処理側プロセスみたいなのは短時間で kill されちゃうだろうから運用的には効果は薄いのでは?
    • その辺、ログを録ったりして実際の動きを確認してみたい。
    • 実際に使われているシグナルの種類次第では、トラップして無視って運用もありかも。。。 (危険!!^_^;)
  • パイプによる通信コストは無視できないのでは?
    • これが一番のネックになりそうな気がする。もっとマシな方法がありそうなんだよなぁ確かに。。。
  • pipe-A はセマフォ的なアクセス制御が必要では?
    • アクセスが集中した場合、呼び出し側プロセスの待ち行列を DB か何かで管理して、行列が一定数を超える場合は 503 エラーにしちゃう、みたいな運用かなぁ。
  • mod_perl で動かせる環境との間で可搬性が失われるのでは?
    • そこはあまり心配してない。 mod_perl 用に別途インタフェースを用意して、どっちからでも同じように呼び出せるような作りにするのはいくらでも可能なはず。

以上、妄想メモ。

Trac に TracBlogPlugin を入れてみたよ。2008年04月07日 01時08分13秒

  • だいたいこちらさんの書かれていらっさる通りにセットアップできました。
  • 本家にも書かれているけど、TagsPlugin のバージョンは 0.3 以上 0.5 未満じゃないとダメ (いまんところ)。こいつの最新版が現在 0.6 なのですが、それだと (テストしてないだとかそういうレベルではなくて) 動きません。おいらは 0.4.1 を入れたよ。
  • インストールは基本的に、python setup.py install prefix=<libディレクトリを配下に持つディレクトリへのパス> って感じで ok 。依存関係とかもチェックしてくれるので、 python setup.py bdist_egg するよりも断然オススメ。
  • インストール後、trac-admin <env-path> upgrade するのを忘れずに。おいらはこれでハマッタ\(^O^)/
  • trac.ini の [components] ディレクティブには、本家に書かれている tBlog.* = enabled 必要 (こっちを鵜呑みにしちゃうと欠けちゃうので)。但し、[trac] ディレクティブの default_handler 行は、トップページもブログにしてしまいたいのでなければ TracBlogPlugin ではなくて TagsWikiModule にしておくべき。
  • そして絶対に忘れちゃいけないのがパーミッションの変更trac-admin の対話モードで以下のように type するのを忘れずに (但し myuser はあなたのユーザ ID に置き換えること)。これをやらないと誰もブログにアクセスできなくなる (これも微妙にハマッタw)。
    permission add anonymous BLOG_VIEW
    permission add myuser BLOG_ADMIN
    
  • セットアップに成功すればメニューに「Blog」というのが出てくるので、[[BlogShow]] だの [[BlogPost]] だのは基本的にはどこかに書く必要なし。但し Wiki ページのどこかに組み込んで使いたいのであれば、これらのタグはそれなりに有用。