Syntax highlighter

2009-10-31

MySQL: 涙が出そう・・・

最近、MySQLを使っている。自分用ではない。自分用なら間違いなくPostgreSQLを選ぶと思う・・

MySQLは他のRDBMSと違って、SQLにくせがある。拡張SQLというか制限SQLというかとにかく不便。Update関係で自己相関クエリが使えないのは以前書いたけど、Viewの中でselect句を使って結合ができないとは思わなかった・・・

こんなのはNG:
CREATE OR REPLACE VIEW adult_member AS
SELECT m.name, m.age
FROM (SELECT * FROM member WHERE age >= 20) AS m;
そんな・・・さすがに困るなぁこれ・・・
将来的にはOKになるらしい。ソースはここ

個人的Q&A
Q:将来まで待てない状態の人はどうしたらいいのでしょう?
A:from句の中を別viewにすればOKです。

もうね、涙がでるよ、マジで・・・

2009-10-27

IE6: フリーズする

玩具販売サイトの話。
経緯はこの辺
(といっても、2行しか書いてないが・・・)

通常はFirefoxで開発して、確認でIE6とかを使っている。
(Firebugいいよ~)
っで、持たせてたデータをファイルからMySQLに移行したら、IEがフリーズするようになった・・・orz
理由はいまいち分からない。
考えられそうな理由
  1. Javascriptで変なことがおきている
  2. CSSの解釈で起こしなことがおきている
  3. DB接続が遅すぎてTimeout
よく考えると、3はありえなかったりする。
単にAjaxでhtml取ってきてるだけだし・・・

なぜだ?
IE6だからか?

2009/10/28 追記

原因が分かった。
prototype.jsのAjax.Updater(たぶんRequestでも)で、asynchronous(非同期通信)をfalseにすると起きてた。
まぁ、Ajaxのいいとこを殺していたので(理由もあったのだが)オプションを除去。
そのページはAjax通信だけで4~5ほどあったので、なんとなく納得。っが、FirefoxはOKだったのはなぜだ?
同時通信数増やしてたっけ?

2009-10-26

SQL: MySQLで更新、削除時に起きた問題

こんな感じのクエリーが動かない。
delete from 
   child
where id in
    (select p.id as id
    from parent p
    left join child c
    on p.id = c.id
    where c.id is null);
SQLの内容自体はよくありそうな、親テーブルと子テーブルを左側外部結合して、親テーブルにはあるけど子テーブルにはない行の削除といった感じ。
Oracle、DB2、PostgreSQLでは動いた記憶があったので、当然MySQLでもいけるだろうと思ったら動かない。
こんなエラーが出た。
ERROR 1093 (HY000): You can't specify target table 'child' for update in FROM clause
(適当な)訳:更新にはFROM区で指定した特定のテーブル「child」を使えないよ~ん。

調べてみた。
どうやら、このタイプのクエリは自己相関サブクエリというらしい。
ソースはここ
鬼かと・・・

解決方法を考えてみた。
1.所詮はプログラムで行っているのだから、クエリーを2回投げればいいじゃん。
2.Viewを一個こしらえれば回避できるらしい。
3.そもそもこんなクエリ投げるってことはデータの持ち方がおかしいのでは?
4.気合で解決方法探してみる・・・
4は方法じゃないね。

誰かいい方法知りませんか?

2009-10-24

C++: MingwでWindowsDLLを使う

Mingw GCCでVCとかでコンパイルされたDLLを使う方法。
この辺参考。

pexportsを使ってDLLの中で定義されている関数を抜き出す。
その後、そいつを使ってDEFファイルを作る。
んで、Mingw付属のdlltoolを使って「.a」ファイルを作って完了。

字面は簡単、実際は面倒だった。
リンカ実行時に表示される、「undefined reference "hogehoge@4"」みたいなのを全部洗い出して、上記のDEFファイルに書き込む必要がある。しんどい。
この辺の互換性って何とかならんのかなぁ・・・

2009-10-17

ぼくらの

漫画の話。アニメではない。
実際のところ、この作品との出会いはアニメのオープニングテーマなのだが。
っで、全10巻読んでみた。

感想:よくこんなの思いついたな作者・・・
基本設定は、別次元の地球と存在をかけての戦い。方法はどっかから与えられたロボット。
操縦者はロボットを操る力を得る代わりに戦闘終了後に必ず死亡。
「勝って地球を守って死ぬか」「負けて地球と一緒に死ぬか」の2択。
選ばれた時点で(最終的には自分で契約する必要があるが)、「死」確定。

内容は面白い。というか考えさせられる。
しかし、パラレルワールドと戦うってどっかで見た設定だな。
ポンコツのヘルメット被って、木刀で戦う高校生だった気がするが、なんだっけ?
思い出せん・・・

2009-10-14

StyleSheet: 高さの異なるカラムを揃える

まさにタイトルどおりの話。
この辺を参考にした。

なるほど、:afterを隠しておいて、必要になったら勝手に表示といた感じかな?
かなり面白い。多分高さ32768pxまで対応してるんだろう。なぜこの数値なのかはよく分からんが?
ブラウザが認識する最大値かな?

ソースが載ってなかったので載せておこう。
#content {
    text-align: center;
    margin:0 auto;
    overflow:hidden;
    /* width: 700px; *//*これ僕は必要なかったので削除*/
}
#content:after {
    content:".";
    display:block;
    height:0;
    clear:both;
    visibility:hidden;
}

#column1, #column2, #column3{
    float:left;
    padding-bottom:32768px;
    margin-bottom:-32768px;
}

#column1 {
    float: left;
    width: 20%;
}

#column2 {
    float: left;
    width: 40%;
}

#column3 {
    float: left;
    width: 35%;
}
幅は適当に変えた。
後は、それぞれのIDを持つHTML要素を作るだけ。
ずっと探していたがようやっと見つかったわぁ。
(前にも見つけた気はするが・・・)

タグがprogramになってるけど、あまりそれ以外に選択肢がなかったから・・・
(増やしたくないという理由で・・・)

2009-10-12

C++: expatを使ってみた

激しく今更感があるがexpatを使ってみた。
ちなみに、expatはSAXでXMLを扱うためのライブラリ。C言語で実装されてるけど、問題なくC++で使える。

RSSを読み込んでデータ型に落とし込もうということをしてみたんだけど、意外と難しい。
SAXってイベント駆動型のAPIなので、全部自前で管理するのだが、結構どうしたもんかなと言うときがある。
基本の動きとしては、
開始エレメント -> 中身 -> 終端エレメント
という感じで動くんだけど、
こんな感じのXMLだとえらいことになる
<hoge>
  <fuga>中身</fuga>
</hoge>
XMLは性質上、空白文字とかもテキストノードとして扱うので、イベントがこんな感じになる。
hoge開始
 ↓
改行文字及び、空白文字
 ↓
fuga開始
 ↓
中身の文字
 ↓
fuga終了
 ↓
改行文字
 ↓
hoge終了

正直、無駄イベントが多すぎな印象。こんな場合個人的には、改行文字と空白文字を除いてほしいのだが、そうもいかんらしい。自前で無視するか、イベントハンドラを追加するか・・・悩ましい。

2009-10-10

Javascript: 苦労した話

JavascriptでIFrameを扱う話。
「tmpl.js」という誰かが作っているライブラリを見つけ、便利そうだったので使おうかと考えた。
この辺
incl.jsで外部HTMLを読み込んで、tmpl.jsで文字列の置換を行うつもりだった。
こんな感じ。

本体
<include id="navi.html"></include>

外側
{ヘッダー部分(tmpl.jsとかとか)}
<a href="hoge.html">{something}</a>

上手くいかなかった。
正確にはFirefoxでは動くがIEではだめといった感じ。
あきらめて、prototype.jsとAjaxにした。
読み込んだ後にごりごり文字列の置換を行っただけ。

同じようにIFrameで別ページを読み込んで、中身だけ取り出そうと試みた。
外側のHTMLではAjaxを使ってデータを取得し、中身だけ取り出す、そうすることでサイトの外観の定義を一箇所にできるかなぁなんて思ったり。
無理だった。
理由:遅延処理のせい。
IEのIFrameにはonreadystatechangeなんてのがあるし、Firefoxは単にonloadに入れればいいだけじゃん、外側はonloadで読み込んでるし。
こんな感じで。
if (/*@cc_on ! @*/ false) {
  iframe.onreadystatechange = function() {
    if (this.readyState == "complete") {
      doSomething(this);
    }
  }
} else {
  iframe.onclick = function() { doSomething(iframe);}
}
安易でした・・・orz
問題はdoSomethingの中の処理なんだけど、IFrameから中身の文書を取り出すときに、contentWindowをが必要になるんだけど、IEではnullになってる。
やり方が悪いんだと思うんだけど、あきらめて力技でやることにした。

IE7とか8ならいけるのだろうか・・・
未だにIE6が必要なのかも怪しいが・・・
(とはいっても、僕の環境はIE6。メインがFirefoxだからという理由)

台風18号

人に言われて思い出した。そういえば最大級の台風が日本に上陸したとか・・・
っで、ちょっと地元のニュースを読んでみたが、結構ひどい。
割とピンポイントで知っている地名とか出てるし・・・僕の地元は大丈夫か?

K氏とかS氏とかの地元の写真が出てたなぁ・・・大丈夫かね?

2009-10-02

ギター

更に連投。。。
(いや、ちまちま上げるの好きじゃないから、ネタがまとまったときにドカンとアップなんて考えてないですよ)

こっちに来てからギターを始めた。バンド仲間などいないので、アコギでソロギター・・・
仕事が見つかるまでものすごく暇なのでというだけではなく、音楽にかかわっていたいという思いもあったからである。
足掛け7ヶ月か・・・
最近になって、ようやく少し弾けるようになったかなぁって程度なので、あまり才能はないのだろう・・・(TДT)

っで、なんとなく気づいたこと。
  • 以外にも左手は器用だったということ
  • 器用だと思っていた右手はそうでもなく、不器用だったんだということ
狙った2弦(or 3弦)だけを人差し指もしくは中指だけで弾くなんてムリポ・・・
右手よ、器用になってくれ~・・・

Javascript: DOM操作でテキストだけ抜き取る

連投。

以前かいたWebサイトで、「ページ内にあるサムネイル画像の検索を行いたい」なんて要望がでて、テキストの検索だからできるだろうと思って作ってみた。
ちなみに、各サムネイルはこんな感じ。
<span class="product">
<img id="hoge" src="hogehoge" />
<div>Produce Name</div>
<div>€ 50</div>
</span>
先頭要素が「span」なのはIE6対策。
っで、prototype.jsを使ってるので、document.getElementsByClassNameでサムネイルの各要素を取り出して、以下のスクリプトでテキストノードだけ抜き取る。
var tags = $A(element.getElementsByTagName("*"));
var text = "";
tags.each(function(tag, index) {
    var children = $A(tag.childNodes);
    children.each(function(node, index) {
        if (node.nodeType == 3) {
            text += node.nodeValue + " ";
        }
    });
});
elementは取得した要素配列の一つ。
元々はここにあったソースだけど、これはFirefox限定だったので、prototype.js使ってクロスブラウザにした。
ただ、それだけ。

どうでもいい話だが、上記のスクリプトの「var text="";」の部分、初期化せずに「var text;」って書くと、for文の中の宣言にもかかわらず、あたかもC/C++のstatic宣言みたいな動作してた。Firefoxでしか確認してないけど。バグか?

免許ゲット

日本の運転免許をオランダのに書き換えた。

オリジナル(日本の)はRDWという免許関連のことをしている機関に納められる。要は取り上げ。
が、確認したところによると日本の免許はちょっと特別で、1ヶ月後くらいに日本大使館に送付されて、取りに行けば返してくれるらしい。便利。
今のところ必要ないのが、気が向いたら取りに行こう。ちなみに日本大使館はハーグにある。

こっちの免許はなのか、書き換えたからなのかは知らないが、10年有効で、日本の免許の最長より5年長いことになる。
10年ここにいるかどうかは分からないが、面倒な手続きは10年に一回でいいのはいいことだ。
ちなみに、ぜんぜん関係ないが、パスポートは最長5年らしい。日本のだと5年のと10年のが選べる。なんかひっくり返った感じだ。
当然僕のは日本のパスポートなので、期間だけ見ればいいとこ取りな感じで得した気分。

っま、免許だけあっても車はないので、あんまり意味はないんだけどね。

2009-09-21

オランダ人の話す英語

オランダ語関連の本でよく「オランダ人は英語で話しかければ英語で、フランス語で話しかければフランス語で返事をする」なんてくだりを見る。試したことないので、本当かどうかは知らない。
個人的に僕は人見知りなので、自分から話しかけるということはないのだが、必要に駆られるときはしばしばある。

とりあえず、今まで話した人が全員流暢に英語を話したかというと、そうでもない。
まぁ、確かに「日本人と比べれば」段違いで英語は話せると思う。でも、オランダではある程度英語が必要な時があるからそれはある意味当たり前な話。普段からある程度必要ならある程度話せるだろう。イギリスが近いし。
でも、かなり怪しい英語を話す人もやっぱりたくさんいる。

以下は体験談。
個人的に「いちご = strawberry(ストロベリー)」は「orange(オレンジ)」と一緒でユニバーサルな言葉だと思っていた、保育園児でも知ってる言葉だし。オランダに来る前までは。
近くにあるスーパーマーケットの中にちょっとしたスナックを売ってる店があって、毎週土曜日はミルクシェイクが50セントで売られている。
50セントなら買おうと思い、何があるか聞いてみると。
「banana, vanilla, chocolate, and aardbei」
ん?「aardbei」?なんだそれ?(その当時はまだ知らなかった単語)
「what was aardbei in English?」
店員さんは結局答えられずに他の人に尋ねていた・・・

ちなみに答え:いちご = strawberry

う~ん・・・なぜだろう?

オランダに来る可能性ががある人はあまりオランダ人の英語を信用しすぎない方がいいと思う。

2009-09-13

Elegy 小フーガ

2008年に公開された映画。
英語音声でオランダ語字幕という状態な上、いまいち話が好きになれないので適当に流し見。

その中で主人公(?)がピアノでクラッシクの曲を弾いていて、何の曲だろう?となる。
ビバルディ?いや、もっと教会音楽的な、バッハ?

ということで調べてみた。
というか、バッハに当たりをつけて自分の記憶の中にあるバッハの曲名をYoutubeで検索と言った方がいいか。
バッハの曲なんて、トッカータとフーガのニ短調しか知らんがな。


と思ったが、もう一つ知っている。
なんだったかな・・・
確か、ト短調。う~ん。
フーガト短調・・・検索・・・小フーガ。これか。


これだ。

それにしても、このあたりの曲なんて昔母親に名前聞きまくって覚えた記憶があるんだが、忘れるもんだね。

2009-09-11

「same」の意味

ちょっとした口論の話。

まずは、sameの意味
1. Being the very one; identical: the same boat we rented before.
2. Similar in kind, quality, quantity, or degree.
3. Conforming in every detail: according to the same rules as before.
4. Being the one previously mentioned or indicated; aforesaid.
from thefreedictionary.com

っで、口論の内容
例)二つの同じ型番号の椅子がある。これは「same」か?
ある人は言う、これは「similar」である、と。
また、ある人は言う、これは「same」である、と。
最初の人は言った、「辞書を引けば、これはsimilarだ。用法が間違っている」

要するに、本当に間違っているのかというのの確認の話になる。
1の意味だけで見れば、same = uniqueと言えるので、まぁ間違いかと。
でも、複数意味があるということは、会話または文章の無いようによって意味が変わるということで、もしuniqueの意味だけなら、uniqueを使えばいいわけだ。
つまり、辞書的に見ても、上記の例は「same」ではないかと思うのだが、どうだろう?

ついでに、「same」の和訳。
a. (the 〜) 同じ, 同一の, 同様な ((as)); 〔話〕 ((the 〜 asで)) …と同じように. (this [these, that, those] 〜) 前述の, 例の; 変らない, 単調な.
from goo辞書

他の人の意見が聞きたいなぁと思ったり。

2009-09-10

クロスブラウザな話

「玩具をネット販売したいからショッピングサイトを作れ。」
始まりはこの言葉からだった。

-- 略 --

異なるブラウザで同じ動作がある程度しか保障されていない話は有名だが、それを解消するために開発者の時間と精神力が大量に消費されているのはあまり有名ではない。

要するに上記のような問題である。つまり、異なるブラウザ間の動作が異なった際の解消方法の話。

問題その1
Firefoxでは「__hogehoge__」というスタイルシートの記述は許可されているが、IE6ではだめ。
先頭のアンダースコアを削ったら動いた。
気づくのに3時間かかった俺、涙目。
ちなみに、なぜそんな面倒なクラス名をつけたかというと、Javascript内で要素を勝手に作ってくっつけてるやつのクラス名だから。要は、名前を変更するなよって意味だけ。
他はHTMLファイルに書かれているので適当に編集してもらって構わないというだけの話。

問題その2
以下はFirefoxのみで動作可能
-- javascript --
function check(form) {
  var inputs = form.getElementsByClassName("hoge");
  // do something
}

-- html --
<form name="fuga" action="check(this)">
  <input type="text" class="hoge" value="hohoho" />
</form>
getElementsByClassNameはprototype.jsのdocumentに対する拡張メソッド。IEだとformに対しては使えないと怒られる。
しょうがないので、getElementsByTagNameでinputタグを抜き取って、Element.hasClassName()でクラス名を持っているかチェックして切り抜ける。入力チェックだしこの程度でいいだろう。
誰か、いい方法知ってたら教えて。

問題その3
opacityの話。これはどちらかといえばCSSの話か?
Firefox3は単に「opacity: 0.5」みたいに書けばOK。
IE6は 「filter: alpha(opacity=50); -moz-opacity:0.50; opacity:0.50;」と3行いる。
たぶんこれはCSS2とCSS3の違いか?IE6は古いのでしょうがないといえばしょうがないか・・・

一通り出来上がったら、Firefox3、IE6、7、8とチェックしないとなぁ・・・

2009-09-06

時をかける少女

今更ながらに、時をかける少女を観た。レンタルだが。
ま、内容については適当にネタバレサイトでも探せば山ほどあるので、ググってください。
本題は実はそれとは遠く(それほどでもないが)離れたところにある。

映画を観るとき、黙ってみますか(歓声等は除く)、それとも批評しながら観ますか?
ちなみに僕は黙って観る派。もちろん、胸のうちではそれはおかしいだろ、って突っ込みは入れるが。

この映画、に限ったことではないが、14歳の少女が主人公なだけあって、言動が幼い。若さとも言えるが、愚かさとも言える。
(個人的には14歳ならそんなもんだろうというのと、自分もそんな時代があったなぁなんて重ねる部分があってよかったと思うんだけど)
そうなると、批評したいタイプというか口に出しながら観るタイプの人はそれを口にするのですね。挙句の果てに、なぜこの映画を借りてきたのかを問う始末・・・
もうね、黙って観ろと、言ってやりたい。
(人のことは言えんところはあるけど・・・呪ビとか・・・観ずに寝てたけど邪魔にならないようにしてたけど・・・)
隣で「Idiot」とか「Stupid」とか言ってるのを聞きながら観ると、ちと(大分?)興が冷める。
14歳に何を求めているのだといえば、「Still」・・・

映画は一人で観るものだと実感。
そこまで映画熱があるわけでもないのでいいと言えばいいのだが、そうは言ってもねぇ・・・

2009-08-31

求めているもの、求められているもの

仕事探してほぼ丸2ヶ月。未だ無職なわけだが、2度ほど面接(といっても電話)を受けた。ちなみに、何かの間違いでどちらも同じ会社。
結果は未だ無職ということだ。

ただ、何度受けてもその会社の求めているものが満たせるとは思えないので、まぁ、いいのだろう。(泣いてないからね。。。)
Javaにおけるfinalキーワードの意味は?assertの意味は?ifとassertの違いは?immutableクラスとは?
いやね、分かりますよ。日本語ならね。そげな勉強英語ではしておりませんので、ぱっとは答えられんがね。んで、言われたのが、Java開発者になりたいなら、コースを受けるべきだね、って。ああ、そうかい。

個人的に、プログラミングの本質は問題の解決にあると思っているので、開発言語にこだわったことないんだよね。言語の特徴を活かす事は好きだが。
なので、Java最高、デザインパターン必須、ってのは肌が受け付けない感じはする。2度とも同じ人だったと思うが、いわゆるオタクなかほりがする話し方だったし。(まぁ、デザインパターンは知ってて損はないと思うが。でもあれって突き詰めていくとそうなるって物に名前が付いてるだけって気もするが)

Javaのプログラムが書ける人(幅が広い定義なるが)ではなく、Java言語の定義を知っている人がほしいなら募集要項にそう書いてほしい。
あぁ、負け犬の遠吠えさ。

2009-08-30

圧倒的じゃないか

某ガンダムの台詞ではない。
308議席獲得の民主党のこと。

初めて選挙権を行使しなかった(できなかったのだが)選挙。
それにしても、ネット(ぐらいしか情報源がない)でささやかれていることが本当で、この4年間の間に全部実現されたら、日本に帰れなくなるなぁ・・・
そもそも、個人献金とか西松建設の問題ってどうなったんだろう?今のところ容疑者扱いなのかね?真っ黒なグレーの人が総理大臣とか(そもそも政治家でそうではない人の方が少ないのかもしれないが)、日本列島は日本人だけのものではない発言の人が総理とかどうなんだろう?
国益のために動いてくれるならどっちでもいいんだけど、アメリカ寄りか、中韓寄りかの違いかね。

これだけ圧倒的な議席数をもたれたら、お手並み拝見では済まない状況ではないかと思ったり思わなかったり。

2009-08-27

総選挙

民主党の財源の話。

民主党は現行制度を抜本的に改め、職業に関係なくすべての人が同じ制度に加入する「一元化」を目指す。収入の15%の保険料を納付し、将来はそれに見合った額を受給する「所得比例年金」に「最低保障年金」を組み合わせる構想だ。

ソースはここ
おまけ

収入の15%…

       ヽ|/
     / ̄ ̄ ̄`ヽ、
    /         ヽ
   /  \,, ,,/    |
   | (●) (●)|||  |
   |  / ̄⌒ ̄ヽ U.|   ・・・・・・・・ゴクリ。
   |  | .l~ ̄~ヽ |   |
   |U ヽ  ̄~ ̄ ノ   |
   |    ̄ ̄ ̄    |

計算式
額面給料:400万(結構もらってんな)
民主党案:400 x 0.15 = 60万

これに対して、所得税、住民税、その他もろもろがかかる。
「憶測」
給料:400万
所得税(5%):20万
地方税(10%):40万
健保税(10%):40万 (これは減るのか?)
民主案(15%):60万

手取り額(年):240万
手取り額(月):20万

300万なら、月の手取りは15万に、200万(いわゆるワープア)なら、10万に。アルバイトも収入になるので、単純に時給 x 15%が税金に。
ちなみに、消費税は別途買い物すれば取られます。

うわさによると、これが施行されるのは政権を取った4年後。そのときには、民主党が野党になっている可能性がある。っで、野党としてこの法律のことを言及するとかなんとか。
まぁ、さすがにそれはうわさでしかないが。ありえそうな話。

TVでは民主300議席なんて騒がれてるらしいけど、あなたはそれでも民主党にいれますか?