|
・今日も今日とて CGI 。リンクログを「今日の日付のファイル」に保存するように変更。ところが、家でなら open( HFILE, ">$WriteFileName" ); で新規ファイルを作れるのに、サーバー上だと作れない。なぜに? と思ったらディレクトリのパーミッションが go+w でないとダメだった(汗)。よく考えれば当然かも。
・余談だけど、パーミッション変えたらなぜかディレクトリに入れないとゆー目に遭ってしまう。と思ったらディレクトリは ugo+x でないとダメなんすね(汗)。うむー、うにくすって奥が深い。ま、これで自動的に「その日のログ」を作成できるようになったんでひと安心。現在テスト中、テストが終わったらアクセスログも作って設置だなー。 ・なんでパッケージは 1; で閉じなきゃいけないんだろう。では今日のお便り。 |
|
・どうもですー。えっとまず、最初のバージョンで「派生クラス TEST のデストラクタ ( f ) が実行されない」のは、 REFCOUNT::~REFCOUNT() が virtual じゃないからなんです。「デストラクタは必ず仮想関数にしましょう」っていうのはこういうことなんです。仮想関数にしないと、最初に作られた時の型のデストラクタが呼び出されないからなんですね。というわけで、デストラクタを virtual にして、前のシンプルなバージョンにするのが一番でしょう。
・…… KTL にスマートポインタがあったとは(爆)。自分で作っといて忘れてた<ダメ過ぎ。コピーのできるスマートポインタなら、 std::auto_ptr を使うのが一番でしょう。使い方は1月14日に書いたんでそちらを。 std::auto_ptr を使えば REFCOUNT から継承する必要もないです。でもこういう構造もアイディアとしては面白いんでとっとくといい感じかも。あとでなんかに使えそう。 ・細かいことー。「インプリメント」はちょっと違うかなー、今のはやりだと「関数の中身を書く」って意味として多いよーな気がするけど、でもこの言葉って氾濫してるしなんか意味ぐちゃぐちゃにされてるような気もするし、使わないのが一番?(笑) あとクラス内に直接関数定義を書いた場合には、自動的に inline とみなされるんで inline は必要ないです。もちろんあっても大丈夫。 ・でわまたっ! |
・今日も今日とて CGI 。昨日の夜中にアクセスログを設置しました。まだ一部のページにしか設置してないけど。あと、今回のアクセスログは Java スクリプトを使わないで直に埋め込んであるから「 Java スクリプトがオフだから検出できなかった」とかがなくなるんでかなりいい感じのデータが取れると思うです。ただ、ファイル名ちゃんと変えないとやばいことに(汗)。あと今回はホントに「ログ」しか取らないんで、それをカウントするプログラム組まないと。
・今回の謎。なぜかヒアリングデリミタのあとにコメントを入れたら動かなかった。家じゃ大丈夫だったのに……。あと、フツーのファイル名でもちゃんと通りました。なんかきっと、奇妙な法則があるんだなぁ。 ・あと超大ぼけ、日付を gmtime() で受け取ってて「あれー17日になったのに新しいファイルできひん」とか(爆)。正解は localtime() ですねー。あ、こーゆーのは Perl と C++ 同じなんです。さらに大ぼけ、月が 0 から始まるの忘れてて「はて、なぜに1月」とか(爆)。ちゃんと家でやって見ててそれで気付かなかったのもバカなら、3年前にしたミスをまたしたってのもバカ……。 ・今日はホームページのメールアドレスとかを置換するスクリプトを作成。うむー、正規表現の表現方法が難しい……これについて書いてある本でも買うかな。それにしても、変数名の書き間違いや、 $ の付け忘れがたびたび、しかもエラー出ないし。やっぱむつかしいっすね。 ・では今日のお便り。まずひとつめ。 |
|
・こんにちはー。んっと、実は分かんない(爆)。たぶんだけど、「ピクチャーコントロール」を貼り付けるんだと思います。矢印の隣のね。けしかぶのときは、これを貼り付けて、「タイプ」を「四角形」にして、ほそーくしたりくぼませたりして「らしく」見せました。とりあえず他のアプリのを Spy++ で見てみると、 STATIC コントロールなのは確かなんで、たぶんこれじゃないかなーと。
・もしかして「あれ、1日遅れで載った」と思ったかもしんないんで補足。かぶゆ〜は毎日午後9時頃に書きます。だから、それ以降に送られたものは次の日に持ち越しになりますのでご注意を。ちなみになんで午後9時かってゆーと、9時半からクロ現があって、10時からはニューステ見ながら日記の方書くから(爆)。 ・では次のお便り。 |
|
・どうもですー。さてこの関数テンプレートですが、実は「グローバル変数の代わり」に使います。グローバル変数には「アクセスを管理できない」「作成される順番を決められない」などの問題点があります。こーゆー関数を作って、この関数でのみアクセスできるようにすればグローバル変数としての問題点がクリアできるとゆーわけですね。ま、よーするにわての「絶対にグローバル変数は作らないぞ!!」とゆー意地の現れです(爆)。
・ちなみにこれはわてが作ったものではないのですよ。これは Effective C++ という本の244ページに載っているのをテンプレート化したものです。この本は、かぶゆ〜読んでる人すべてにお奨めってくらいの良書なんで、ぜひ買いましょう。ちょっと高いけど(汗)。 ・でわまたっ! |
・今日はお便りが来てないから、 Perl の話をしましょう。えーっと、現在手元にあるドキュメントは、今日買ったすぐわかる Perl 、図書館で借りたプログラミングPerl 改訂版、あとCマガジンの連載。ま、これだけあればいい感じかな。
・プログラムは、アクセスログの集計とか、それの HTML 化とか、引越のためのアドレス置換なんかを色々試してます。アドレス置換はCマガの連載にずばり載っててなんか無駄なもん作ったかなって感じが(汗)。ま、勉強も兼ねてるからいいんだけどね。 ・ Perl 、純粋に面白いです。なんてゆーかね、 C と見た目は似てるんだけど、なんか違う、でも似てる、なんか不思議。わての感じはね、根底に流れてるものは同じな気がする。 C ってなんでもできるでしょ。その「なんでも」の部分を言語が勝手にしてくれてる、それが Perl って気がする。 ・たとえば C なら printf( "%d", i ) ってプログラムが Perl なら print "$i" ってなる。 $i の「ドルマーク」は変数の証。つまり、 C がプログラムとしてしていることを、 Perl は言語としてしてくれてるってこと。だから、わて的にはかなり親和性高いです。 ・ただねー、その変数に $ を付け忘れたりとか、変数名を途中で変えたのに気付かないとか( Perl の変数は「変数宣言」の必要がありません)、そーゆーのが通っちゃうのが結構きつい。でも通るってことがすごいのかも。つまりエラーがなかなか出ないんだよね。 Perl が勝手に解釈しちゃう。その辺も面白いかも。ホント、自然言語って感じです。 ・今はまだ、 C っぽく書くクセが着いちゃってるんで長くなっちゃうんだけど、デフォルト変数とか foreach とかをどんどん使うようになれればかなり短くなるかな。でも逆に「あーっ STL アルゴリズム使いたい!」とかも思う(爆)。ま、とにかくいまんとこかなり面白いです。 CGI に触れる機会でもあれば、使ってみてはどうでしょー。ってゆーか今さら触れたわてが遅すぎるのか(汗)。 ・でわまたっ! |
・今日はCマガジンに載っていたC言語テストをしてました。結構間違えちゃったけど、わて的にはOK(爆)。ちなみに C++ の方は明日するつもり。わて的にはそっちの方が良くないと(汗)。
・んで間違ったとこ。まず問2 a4 。グローバル変数なんて作んないから知らないもん(爆)。問3 c と問6 List18 をボンミス。なんかこれは笑えない(汗)。こーゆーのはコンパイルエラーになんないからなー。問9 (2) b7, b8 。これ、クとキだよねぇ。答は逆になってるけど。出力結果見ると左が日付で右が予定名だし……。 ・問10 (2) e3 。union なんて使いません(爆)。問11 (2) 。だからグローバル変数なんて使わないんだって(これはちょっといいわけかも)。問12。答の4つに List47 と List50 も加えちゃいました。ま、答にあるのは分かったんでよし。問13 (1) a3, (2) b3 。fgets() なんて使わないですー。 (2) b3 の方はボンミス。これもちょっとやばいかも。 ・っつーわけで、わて的には「落としちゃまずいとこ」は全部クリアできてたんで問題なし。落としたのは C++ じゃ滅多に使われないのばかり。ってゆーかグローバル変数も union も使っちゃあかんよ(汗)。ただ、こーゆー部分の知識が足りないってことがはっきり分かったのはめっけもんかも。ちなみに所要時間は1時間。……ちょっとかかり過ぎかなぁ。 ・……基本的には「 C 言語入門」の連載レベルなんだから、これくらい満点取れないとまずかったかなぁ……。少なくともかぶヘッダーとかで教えてる身なんだし。ちょっと反省。んで明日は C++ の方をするつもり。はっきし言ってこれは満点取れないとまずいです、はい。 ・あとまたもやごめんなさい。 KAB-studio.h の No.042 と No.043 ( 2/31 と 2/7 ) の金菜さんの憂鬱が同じでした(汗)。むー、大ぼけだ。単なるべたべたなミスです、ごめんなさい。やっぱりシステム的にミスしやすいと、ホントにミスしちゃうなぁ……。 ・でわまたっ! |
・昨日に引き続きCマガジンのテスト。今日は C++ 言語テストをしてみました。うむー、結構分かんなかったとこあったかも。
・間違えたとこ。問5 (1) (a) 。 std::vector あんま使わないことバレバレ(汗)。あと問5 (1) (e) 。これはポカミス。わてながらイテレーターとか問6のメンバポインタとか当たってたとこが怖い(笑)。問7 (2) (c) はずるいー。ま、これやると継承元のが呼べなくなるのは知ってたからおっけ。ちなみにわては「 is-a 関係が崩れるからこーゆー仕様」なのではないかなと考えてます。 ・問8 (1) (a) (b) 。これもポカ。問8 (1) (d) 、 static_cast はポインタ型変換はできないですよ(汗)。……あ、違うわ。この問の解説、 static_cast と dynamic_cast が逆になってるんだわ。なんだかなぁ。explicit はほぼ正解。 STL には頻繁に出てくるからねー。使ったことないけど。最後の例外が全滅(泣)。 Effective C++ にもコンストラクタと例外の話が載ってるんだけど、しっかり読んでなかったんです(泣)。これは要勉強ですね。 ・実際の所、当たってたけどちょっとあやふやなとこが結構あったんで、その点も反省。こーゆーテストって、自分の足りない部分とかを洗い出すためには役だってくれます。ま、テストってのは実力を計るためじゃなくてこーゆーことに使うべきものってことですね。たとえ同じテストでもガッコの単位もらうのだったらスゲーやだろうなぁ(笑)。 ・とゆーわけでこれ関係のお便り。 |
|
・大丈夫ですよー、やっぱ「実際の意味」の方が重要だと思うです。だから注意点とか分かってればOKってことで。しかし「俺の友達」とか言わせといてなんだけど、もっと問題に出すべきものがあるような……たとえば const 関係とか、継承とコンストラクタの初期化子の関係とか……うむ、来年は C 言語並の問題量にして欲しいです(爆)。
・でわまたっ! |
・今日は久々に Perl プログラミング。かぶスタの各ページを、引っ越し用に変換するプログラムを組んでました。全ページに書いてあるメールアドレスとトップページへのリンクを置き換えて、さらに <BODY> タグの直後にアクセスログを設置するっていう機能。んでこれは完成。でもまだ置き換えてない(爆)。バックアップとかしてからじゃないとと思って。
・正規表現って不思議。はっきし言って無茶苦茶分かりにくいんだけど、でも知っちゃえば全然問題なし。この辺が不思議。同じようなことを C で組んだらえらい長くなっちゃうだろうなーと思うと、どっちがいいのかって結構難しいかも。知っちゃえばいいんだけど、コードって知らない人向けってことも考えるべきだと思うし。わて、 Perl じゃ { の前に改行入れないし(笑)。 ・ C って、 Java や Pascal とかとかなり似てるでしょ、だからプログラミングスタイルも統一して、誰が見ても分かるようにとかとも考えるんだけど、 Perl は Perl を知ってる人にしか分からない構文ばっかだから、逆に Perl に染まりきったスタイルで書くようになっちゃいますね。こういうのって面白いかも。でも C の方に影響でないようにしないとあかんかな(笑)。 ・あと……なぜか glob() でファイル一覧取得しようとしたら、無限ループみたいになっちゃった。 Win32 だからか Cygwish を使ってるからかは不明。ま、これまで opendir() で処理してたからこれからもそれでいーや。あと最近、コンソールの代わりになるアプリを作ろうかなと画策中。んでもめんどそう(爆)。マイナーな API を調べんのは大変です。 ・でわまたっ! |
・今日はプログラミング自体はしてないです。代わりにぷらとわ2話と辞書。ぷらとわは49話まで完成。確かに最初は全然予定立ててなかったけど、ここまで伸びるとはなぁ。とりあえず3年、150話くらいを予定してます(爆)。
・毎週連載を3年なんて、まーこんなの商業ベースじゃないからできるんだろうけど、別に商業ベースの方が優れてるとも思わんし(爆)、こーゆー形でしか教えられないもんとかもあるんじゃないかなと。何度か言ってるけど、ぷらとわでは「わてが持つプログラミング技術のすべて」を伝えられたらなと思ってます。実際、ここまで来るのに3年くらいは掛かってるから、そのくらい掛かるのも当たり前なのかも。 ・あと辞書とか。そういえば、 CGI 使えるようになったんだからこれで検索システムとか組み込むこともできるんやね。送信前に「ありますよ」って言うこともできます(爆)。でも検索システムが完璧でないと送れなくなっちゃったりしそうだなぁ。それはともかくとして、かぶスタ内の全文検索とかできたらいいかもしんない。でも文字コード関係の処理もしなきゃいけないか。 ・でわまたっ! |
・ Perl で「辞書の単語数」をカウントするスクリプトを作成。なんと今度の更新で300を超えることが判明(爆)。よくもまぁこんなに……。しかしながら、わて的には「あの単語も追加したい!」とか結構あったり(爆)。この辞書、ズバリ言えば読者の皆さんは関係ないんですよねー。皆さんの投稿は「トリガー」で、わてはそれに応えて書くだけ。
・ホントなら、もうわての気の向くままばりばり書いちゃえばいいんだけど、それだと本当に死ねちゃうんで(汗)。そこで皆さんの投稿があった単語を、ってゆーふーにして、追加単語数をうまくセーブししてるんです。でもそれだからこそ、わての思いも寄らなかった単語を追加できたりもするし、そういう点でもこの企画は良かったかなーと。できればもっとヒット数欲しい(爆)。 ・ちなみに昨日の辞書のヒット数、80。あ、結構多いか……。では今日のお便り。 |
|
・うむー、これは難しいですねぇ。わて的には、難しくても Codian の「シェルエクステンション」を見てがんばった方が、結局は楽なんじゃないかなーとは思うんだけどね。んでも他の取得方法を知っておくのもいいかもしんないし、とりあえず方法を教えちゃいましょう。
・まず、デスクトップやマイコンピュータのアイコンはレジストリに書き込まれてます。例えばマイコンピュータのアイコンは HKEY_CLASSES_ROOT\CLSID\ {20D04FE0-3AEA-1069-A2D8-08002B30309D}\DefaultIcon に入ってます。マイコンピュータなんて全部のウィンドウズに必ずあるんだから、こーゆーので決め打ちしても大丈夫でしょう。たぶん……。 ・コントロールパネルとかのアイコンは SHELL32.DLL の中に入ってます。コントロールパネルのアイコンなんか変える人いない……と決め打ちして(またか)この DLL からアイコンを取り込んで表示するとか。ま、なんとでもなるもんよ。特にこーゆー関係の決め打ちは、うまくいかなかったって表示が少し変になるだけなんだから気にせんでええ!<おいおい……。 ・あと、デスクトップの中のは「Windows\デスクトップ」の(あ、マルチユーザーだと違うかも)。コントロールパネルの各ファイルは「Windows\system」の拡張子が .cpl のファイルなんで、これから拾うって方法があります。仮想フォルダなんてものは、所詮は「実際に存在するもの」をいいように見せてるだけ。それがなんなのかを見極めりゃ、なんとかなるもんです。 ・ただね、こういう方法だと、場合場合で違う処理しなきゃいけないでしょ。COM インターフェイス使って処理すれば全部同じように扱えるからプログラムが簡単になるんです。あとから苦労しないためにも……ね。 ・でわまたっ! |
・今日は引っ越し前の準備をしてました。まずバックアップ取って、ホームページをコピーして、んで Perl スクリプトに掛ける、っていう手順。スクリプトは、古いメールアドレスと URL を新しいのに置き換えるものと、アクセスログを呼ぶ IMG タグの設置、そして古いアクセスログを呼ぶ Java スクリプトを取り除くもの。
・いきなり、すべてのファイルにアクセスログが設置できなくてびびる(汗)。これは、マッチ演算子の最後に s を付けてなかったんで、改行が判断されなかったのが原因。うむー、これ分かるのにちょっと時間が掛かってしまった……。でも、これ以外はかなりあっけなくうまくいって、ひと安心。 ・特に、 Java スクリプトを取り除くのがうまくいって良かったです。このスクリプトは関数形式になってないんで、実は取り除くのが(正確に言えば見つけだすのが)難しかったりします。でも取り除けたのは、スクリプトの前にコメントを付けてあったから。このコメントを目印に削除できたんでうまくいったです。 ・この Java スクリプトのを含めて、かぶスタの HTML としてのスタイルが全体で統一されていたからこそ、ここまで簡単に処理できたんじゃないかなと思いますです。これを、テキストエディタを使って作っていたからと言うべきか、テキストエディタを使っていたのにと言うべきか(汗)。ま、とりあえず引っ越しへの道のりは順調っぽいです。 ・でわまたっ! |
・引っ越し関係のめどが立ったんで、本格的に STL & iostream 入門を書き始めました。知らない人に言っておくと、これは4月から発行する新しいメールマガジンです。毎週発行、全25回を予定しています。とゆーわけで今から書き貯めておくんです(爆)。かぶヘッダーと違って、ニュースとかないから。
・これのサンプルプログラムは、 VC だけでなく gcc for Win32 でもコンパイルチェックをしています。標準 C++ ライブラリのウリは「どのコンパイラでも使えること」っていうのもあるんで(もちろんそれが一番のウリじゃない!)。新しく別ファイルを作って、その中にサンプルコードを埋め込んで、そのコードは VC と gcc 両方でコンパイルできるような形にしています。 ・ホントはうにくす系でちゃんとチェックした方がいいんだけどね。例えば「インクルードファイル名は全部小文字じゃなきゃいけない」とか、ウィンドウズ上だと分かんないし。でも gcc でコンパイルする価値は充分あります。型チェックとか、 VC が見逃しちゃったりするものも引っかかってくれるから。 ・それにしても、「 STL & iostream 入門」って名前、長いなぁ(汗)。なんかいい略しかたってないもんかな。まー入力は単語登録したからいいんだけど、かぶスタのもんはやっぱ略表記がないと(爆)。 ・そーそー、ここの投稿欄を引っ越し先のものに置き換えました。一応テストして送れることは確認したけど、もしうまくいかなかったらメールくんさいね。 ・でわまたっ! |
・まず Perl な話から。リンクログを HTML 化しようとして、そーゆーファイルを FTP で送ったらパーミッションでないどな感じ。なぜかと思ったら、 Perl スクリプト上から作ったからファイルのユーザーが違うんですね。まだうにくす系ってなれてないとこあるなぁ。
・ここ最近、「 VB から VC の DLL を呼ぶ」って質問が2通ほど来ました。しかぁし! わては VB 持ってないんです(爆)。だから答えられませんでした。持ってれば分かるんでしょうけど、持ってないんでまったく知識ナシ、試すこともできず、あうーですな。 ・実際、わては VC を含めた C++ 専門って感じです。そーゆー意味で、現場とのずれみたいなのが結構あるのかなぁとも思う。まだ情報系のバイトってしたことないし。だから、就職するのちょっと不安だったり。できればわては、SEは避けて、ウィンドウズ向けのパッケージアプリケーションを作ってるとこに入りたいと思ってます。 ・ただ、パッケージアプリったって販売元と製造元は違ったりするし、製造元は思いっきり零細だったりSEも受けてたりとかありそうなんで、なかなか難しいとは思うんだけどね。ま、のんびり探そうと思います<それまずいって。 ・なぬっ、 SHGetSpecialFolderPath() なんて API があったとわっ! ・でわまたっ! |
・今日は STL アルゴリズムを整理してました。これはかなり数があるんで、うまくまとめとかないとと思って。解説の順番が、まずアルゴリズム、次に関数オブジェクト、って順番なんで、関数オブジェクトを使うのと使わないのとかに分けたり。結構面倒だけど、考えてみたらこれを載っけるだけでページを埋められるんだな(爆)。
・今日はプログラミングはこれだけよん。明日もできないかも。 ・でわまたっ! |
・ちょっとごめんなさい。辞書の方で<NAME>タグのミスで新規追加単語のリンクが働いてませんでした。これを掲載するときには直ってる……はず。今日はこれだけ(汗)。
・でわまたっ! |
・今日は Perl で CGI プログラミング。かなりおミョーな CGI 、アクセスランキングを作ってました。各ページのアクセス数をアクセスログから読み取って、棒グラフ化するとゆー素晴らしいものです(爆)。前に作ったのと違って、新しいアクセスログは「ただログを取るだけ」なんで、リアルタイムに集計できるシステムが欲しかったんです。
・もちろんそれだけじゃなくて、やっぱしなんだかんだ言っても「はやりもの」には弱いもんで、「今かぶスタではこのページが人気!」みたいにすればそのページのヒット数がさらに上がるんではないかと(爆)。あとコンテンツとしても面白いかも。だいたいこんな棒グラフまで表示するかフツー(笑)。ちなみにこれはテーブル使って描いてます。 ・デフォルトでは、前日のベスト30が表示されるようになってます。前日の方がちゃんとしたデータかなと思って。パラメーターを変えることで、当日やベスト100とかも表示できるようにしてます。でもベスト100だとファイルサイズが大きくなっちゃうんでね。ちなみに、現在はうまく表示されないと思います。旧ページはすべてのページにアクセスログを張ってないから。29日のが全ページ揃っているのは、昨日の夜に引っ越しさせてそのテストをしたからよん。 ・あ、プログラミングの話もしなきゃね。ホームページ全体は、雛形になるページから読み込んでそれをそのまま出力、って形にしてます。スクリプトに直接日本語書き込むのは不安だったんで。「前日」の日付は time から 86400 を引いて localtime() に渡して求めてます。 ・ランクデータは、ログのものをハッシュテーブルに格納したあと値で逆ソートして片っ端から表示、って形。かなりべたべただなー。ただ速度自体は遅くないです。サーバーの性能がいいってことなのかな? ・とりあえず、最初に作ろうと思ってた CGI はほぼすべて作ったんでひと安心。あ、そういえばあとひとつあったな、 index.html を自動生成するっての。まーこれは簡単にできるだろうからいっか。 ・でわまたっ! |
(C)KAB-studio 2000 ALL RIGHTS RESERVED. |