GDB

GDBの使い方を調べてみた.将来的にはデバッガを使えるようになって効率的な開発をしていくのだ.入門編応用編GDBじゃないけど……入門編基本的なGDBの使い方とにかくちょっと使ってみる2003-07-20T15:13+09:00 matsugdbをとにかくちょっと使ってみた.breakポイント2003-07-20T15:13+09:00 matsuおそらく多くのデバッグ作業はbreakポイントとステップ実行で足りるものではないだろうか.ここではbreakポイントの設定方法を中心に記述する.breakポイントはいろんな方法で指定できるようだ.watch2003-07-20T15:13+09:00 matsu変数値の変化を追跡できるとうれしいかもしれない.continueとステップ実行2003-07-20T15:13+09:00 matsubreakした後処理を続けるにはcontinueで継続実行するか,step実行する.スタック2003-07-20T15:13+09:00 matsuJavaのExceptionクラスのprintStackTrace()は重宝する.で,gdbを使用するとCでもそれができる.シグナル2003-07-20T15:13+09:00 matsugdbではシグナルの制御もできる.ソースの表示2003-11-24T01:06+09:00 matsugdbからソースを表示できると嬉しい.GNU Emacsのgdbモード(?)を使用するとすごく便利でカッチョイイのだが,どのマシンにもGNU Emacsがあるとは限らないので,そんなときのためにソースの表示方法を示しておく.データの表示2003-07-20T15:13+09:00 matsuデータの表示ができないとデバッグもままならないしれない.処理を変更する2003-07-20T15:13+09:00 matsuデバッグ上で処理を変更してうまくいったらソースに反映する,なんてできると嬉しい.コマンド定義と初期化ファイル2003-07-20T15:13+09:00 matsu複数のgdbコマンドをまとめて定義したりgdb起動時に初期化ファイルに書いたコマンドを実行したりするとうれしい.コア2003-10-25T13:00+09:00 matsu多くのシステムにはgcoreというコマンドがあって,それを使用すると指定したプロセスのコアファイルを取得できるらしい.GNU/Linuxシステム(少なくとも私のマシン)には,gcoreはないが,gdbを使用すると容易にコアファイルを取得できる.さらにgdbにコアファイルを渡すことで,ダンプ時点のプロセスの状態を調べることができる.応用編入門編の事柄を踏まえて,GDBを使い込んでみたい.GDBによるテスト自動化への試み2004-01-20T23:45+09:00 matsu…GDBの機能を使用すると,テストを自動化できないだろうか…そんな疑問がよぎったのでちょっと試してみた.attach2003-11-29T21:00+09:00 matsuなんらかの理由でgdbからいきなり起動できないプログラムや,今運用環境で動いているプログラムをデバッグしたい場合などには,動いているプロセスにattachしてデバッグすることができる.GDBじゃないけど……GDBとは直接関係ないが,デバッグに役立ちそうなTIPsプロファイル(gcc)2003-07-20T15:13+09:00 matsuプログラムのパフォーマンスを効率的にあげるには,多く呼び出される関数や一番重い処理をする関数をチューニングする必要がある.ここではgccのプロファイルという機能を用いて呼び出し回数や実行時間を調べるための方法を書く.プログラムのフロー(cflow)2003-11-08T13:20+09:00 matsuctagsやetagsなんてすごいものがあるんだから,これぐらいできるだろうと思っていたら,やっぱりあった.cflowはある関数がどんな関数をコールするかを解析して表示してくれる.すなわちプログラムのフローを表示してくれる.cflowは結構古くからあるらしく,いろんな実装があるが,今回もcflow_2.0-15_i386.deb(これで一意に特定できるのかな?)を使用する.

Common Lisp

Lispを学んでどうするのか…emacsをカスタマイズしまくることぐらいしか思い浮かばないが,その思想等を学ぶことは何かと役に立つはずだ.というわけで,Emacs LispはおいといてCommon Lispをやってみる.基本編データ構造詳細入門編基本編なにはともあれCommon Lispでいろいろな式を書いてみる.準備2003-07-20T15:13+09:00 matsu実行環境についての記述とサンプルのための入出力についての記述.式と評価2003-07-20T15:13+09:00 matsu式の記述方法とその評価.データ2003-07-20T15:13+09:00 matsuLispにおけるデータについて概観する.変数の定義と代入2003-08-24T22:00+09:00 matsuLispにおける局所変数,大域変数,大域定数の定義と代入について.リストオペレータ2003-08-24T17:30+09:00 matsuリストオペレータについていくつか.if式2003-07-20T15:13+09:00 matsuLispプログラムは全てリストなので,if文といわずif式という.反復2003-08-24T21:00+09:00 matsuLispにおける反復の表現方法.関数の定義と呼び出し2003-08-24T20:25+09:00 matsuLispにおける関数の定義と呼び出しについて.練習 リストの最大値を返す2003-09-15T04:00+09:00 matsuここまで記述したLispの基本を踏まえて練習をいくつかやってみる.この頁ではリストの最大値を返す関数を作成してみる.練習 リストの要素のソート2003-09-15T06:00+09:00 matsu練習としてリストの要素をソートしてみる.データ構造LISt Processorという名前通り,リストはLispにおける基本的かつ中心的なデータ構造である.ここではコンスを通してまずリストについて前よりも詳しく記述し,さらにLispにおけるさまざまなデータ型やデータ構造についても記述する.コンス2003-09-23T18:30+09:00 matsuLispのリストはコンスと呼ばれる一対のポインタで構成される.このことを詳しく見ていくと,Lispにおけるリストをもう少し深く理解できる.リストの実体2003-10-08T21:00+09:00 matsu二つのオブジェクトへのポインタがあるとき,そのポインタが指す先は同じ実体なのか,同じ値の異なる実体なのか,といった疑問を解決してみたい.リストへのアクセス関数2003-10-11T18:00+09:00 matsuリストの任意のコンスや要素へのアクセスを可能にする関数の紹介.キューの実装にみる破壊的な関数2003-10-12T06:00+09:00 … More Common Lisp

PostgreSQL

PostgreSQLをやってみたいと思って早一年半,ようやく重い腰をあげてみた.引っかかっていたのは,DBで遊ぶためのデータがない,ということだ.この問題は依然残っているが,その内いいネタがなんか見付かるだろう.導入編PostgreSQLでSQL入門応用編メンテナンスlibpqを使用したDBアクセスプログラミングecpgを使用したDBアクセスプログラミングJDBCを使用したDBアクセスプログラミング 導入編PostgreSQLの導入についてインストールと設定2003-07-20T15:13+09:00 matsuPostgreSQLのインストールと設定について.psql2003-07-20T15:13+09:00 matsuPostgreSQLのフロントエンドpsqlについて.ちょっと使ってみる2003-07-20T15:13+09:00 matsupsqlでPostgreSQLに接続していろいろ試してみる.GRANTとREVOKE2003-07-20T15:13+09:00 matsuテーブル毎にユーザのアクセス権を設定できる.アクセス権を与えるのがGRANTで奪うのがREVOKEである.PostgreSQLでSQL入門恥かしながら,SQLに関してほとんど忘れてしまったので,PostgreSQLを実際に使用しながらSQL入門してみる.問題作成2003-12-07T00:00+09:00 matsuこのページでは練習用DBの問題作成を行なって,以降のページでそれをPostgreSQL上に構築し,その過程でSQL入門していこうと思う.テーブル作成2003-12-29T14:35+09:00 matsu制約とその指定方法について簡単に記述し,作成した問題に対して,テーブルを作成してみる.データ投入2003-12-13T20:50+09:00 matsuようやく準備ができたので,データを投入してみた.SELECT2003-12-14T11:15+09:00 matsuDBの構築ができたので,ここから本格的にSQLを試していこうと思う.まずはSELECT.SELECTその22003-12-14T21:50+09:00 matsuSELECTに関して前頁で書ききれなかったことを.表の演算2003-12-23T18:00+09:00 matsuなんかアレなタイトルだが,とにかく表を結合したりしてみた.UPDATE2003-12-23T20:30+09:00 matsuDBのレコードの更新にはUPDATEを使用する.DELETE2003-12-23T21:00+09:00 matsuDBのレコードの削除にはDELETEを使用する.VIEWとRULE2003-12-27T11:00+09:00 matsu仮想的なテーブルVIEWを使用すると頻繁に使用する複雑なSQL文の記述が楽になったりする.RULEはVIEWに対するINSERT,UPDATE,DELETEを行なうのに使用する.トランザクションと隔離レベルとロック2003-12-28T16:00+09:00 matsuPostgreSQLでのトランザクションについて調査してみた.さらにトランザクションの並列実行時の問題とそれに対処するためのトランザクション隔離レベルとロックについても調査した.カーソル2003-12-29T13:30+09:00 matsuSELECTではLIMITを使用しなければ,選択レコードを一気に出力する.これを任意の件数ずつ取り出すようにするには,カーソルを使用する.テーブルに関するTips2003-12-29T15:50+09:00 matsu一時テーブル,SELECT文の結果からテーブルを作成,既存テーブルの属性変更などをしてみた.参照整合性制約について2003-12-29T22:25+09:00 matsu参照整合性制約に関して,チェックの遅延と複数の外部キーがある場合の注意点について.シーケンスとシリアル型2003-12-30T17:00+09:00 matsuシーケンスという連番自動生成機能とシーケンスによるシリアル型について.継承2004-10-30T17:00+09:00 … More PostgreSQL

Nagiosのインストールと基本設定

ネットワーク監視ツールNagiosのインストールと基本設定を調査してみた.Nagiosって何だ?インストール設定hosts.cfgの記述hostgroups.cfgの記述services.cfgの記述設定確認 Nagiosって何だ? Nagiosはホスト,サービス,ネットワークを監視するプログラムである.本家サイトはこちら.NagiosはもともとLinux OS(?)のもとで動作するように設計されたが,*NIXでも動作する.デーモンは拡張プラグインを使用することで,ホストやサービスを断続的にチェックする.問題が発生したら,デーモンはemail,インスタントメッセンジャー,SMS等いろんな方法で通知する.また,現状,履歴,レポートがWebブラウザにて参照できる. インストール 設定 hostは一つ以上のhostgroupに属し,serviceはいずれかのhostにおけるサービスである.hostgroupはhostgroups.cfg,hostはhosts.cfg,serviceはservices.cfgにて設定する.以降にそれぞれにおける設定を記述する. hosts.cfgの記述 hostgroups.cfgの記述 hostgroupsにはhostgroupを設定する.hosts.cfgで設定したhostは必ず一つ以上のhostgroupに属さなければならない.hostgroups.cfgの設定項目の詳細はここ.設定項目は三つでいずれも必須である.hostgroup_namehostgroupのショートネーム.aliashostgroupのロングネームまたは記述.membershostgroupのメンバ.hostのショートネームをコンマ区切りで記述する.実はhostでも項目hostgroupsにてそのhostが属するhostgroupが設定できるが,当項目(members)はその代替あるいは追加設定である. services.cfgの記述 設定確認

条件,ステートメントブロックとif文

BASHスクリプトでの条件式とステートメントブロックについて説明し,それをもとにif文の書き方を説明する.条件ステートメントブロックtestと[ ]if文条件部の応用 条件 ステートメントブロック testと[ ] if文 if文は複雑な条件分岐を表現するのに使用する.また,条件分岐があるコードの可読性が増す(と思う).test -d hoge && echo true || echo falseはecho falseが実行される条件がtest -d hogeの結果なのか,echo trueの結果なのか不安になったりする.この例をif文を使用して書くと,以下のようになる.if … More 条件,ステートメントブロックとif文

JFreeChart

JFreeChartは劣等GPLで配付されている,グラフ生成機能をもつJavaクラスライブラリ及びフレームワークである.JFreeChartを使用すると棒グラフ,折れ線グラフ,円グラフ,ガントチャートなどを用意に作成できるようだ.なかなか強力な機能を持っているにも係わらず日本語サイトで詳しく紹介されているサイトがないようなので,調査してみる.入門編応用編入門編まずJFreeChartでのフレームワークを説明し,それからJFreeChartを使用していろいろなグラフを作成してみる.JFreeChartって何だ?2004-02-07T15:30+09:00 matsuJFreeChartの開発元についてちょっと触れ,JFreeChartのインストールとサンプル実行,JFreeChartのフレームワークについて記述する.円グラフの作成(JFreechart 0.9.16)2004-02-09T23:30+09:00 matsuJFreeChartを使用して円グラフを作成したみた.棒グラフの作成(JFreechart 0.9.16)2004-02-11T00:10+09:00 matsuJFreeChartを使用して棒グラフを作成してみた.関数のグラフの作成(JFreechart 0.9.16)2004-02-11T17:00+09:00 matsuJFreeChartを使用して関数のグラフを作成してみた.散布グラフの作成(JFreechart 0.9.16)2004-02-12T22:20+09:00 matsuJFreeChartを使用して散布グラフを作成してみた.HighLowOpenCloseグラフの作成(JFreechart 0.9.16)2004-02-12T22:00+09:00 matsuJFreeChartを使用してHighLowOpenCloseグラフを作成してみた.HighLowOpenCloseグラフは,ある閾値XinからXoutの代表値Xに対して最大(max(f(x)),{x|Xin <= x <= Xout}),最小(min(f(x)),{x|Xin < x <= Xout}),入値(f(Xin)),出値(f(Xout))を表示するグラフである.時間軸を持つグラフの作成(JFreechart … More JFreeChart

動的SQL

埋め込みで動的なSQLというのはなんだか矛盾するような何かをはらんでいるような気がするのは私だけだろうか…とにかくやってみた.動的SQLって何だ?サンプルecpgのDEALLOCATEにおけるバグ?雛型を使用しない動的SQL雛型を使用した動的SQL 動的SQLって何だ? 思うに埋め込みSQLというのは,文字通りプログラムが発行するSQLをソースコードに埋め込んでしまうというものだろう.で,動的SQL?動的?何を埋め込むんだっけ?…動的SQLでは大体雛型を埋め込むということになるという認識でよいだろうか.とにかくコーディングの段階で確定するSQLを静的SQLとして,動的SQLはプログラムの実行段階で確定するSQLのことを言うらしい.EXEC SQL INSERT INTO hoge VALUES (:i, ‘aaa’);上の埋め込みSQLは変数:iを使用しており,コーディング次第でその値は実行時に動的に変更することができる.ということはプログラム実行段階でSQLが確定することになり,動的SQLになるような気がする.だがこういうものは動的SQLと呼ばないらしい.上の埋め込みSQLをecpgで処理した結果は以下のようになる.{ ECPGdo(LINE, 0, 1, NULL, “insert into hoge values( ? , … More 動的SQL

一つのformで複数の操作ボタンを設置し,一つのアクションで受ける.

一つのformで複数の操作ボタンを設置し,一つのアクションで受けるには,「どのボタンが押されたのか?」に基づいて処理する必要がある.Strutsにはこのようなパターンを想定したActionのサブクラスがある.問題DispatchActionLookupDispatchActionサンプル注意点 問題 以下のような画面があったとする.この画面で,二つのテキストボックスに値を入力し,「足す」または「引く」ボタンを押すと,次の画面で三つ目のテキストボックスに計算結果(和または差)が出力されるようなアプリケーションを考える.以下は「足す」ボタンを押した結果である(※).以下は「引く」ボタンを押した結果である.以下は「未定義」ボタンを押した結果である.これらは本頁のサンプルの出力画面である.これらの画面は一つのフォームの中に三つのテキストフィールドと三つのボタンがある.したがって,Java Script等を使用しない場合,どのボタンを押しても一つのアクションに送信される.送信されたアクションのActionクラスでは,どのボタンが押されたかに応じて処理を行う必要がある.フォームのボタンは以下のようになっている. DispatchAction Actionクラスがorg.apache.struts.actions.DispatchActionを拡張している場合,submitボタンのvalueの値と同名のメソッドが,executeと同じパラメータで呼び出される.例えば というボタンが押されれば,該当Actionクラス(extends DispatchAction)でユーザが定義した(※)public ActionForward add(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response)throws Exceptionが呼ばれる.ただし,この仕組みを使用するにはstruts-config.xmlにて該当actionタグの属性にparameter=”command”などと記述しなければならない.属性parameterの値はsubmitボタンのname属性の値(すなわちJSP上ではhtml:submitカスタムタグの属性propertyの値)と揃えなければならない.※ 呼び出すメソッドが見付からなければunspedifiedメソッドが呼ばれる. LookupDispatchAction サンプル メッセージリソースファイルは先に示した.実行結果画面も先に示した.以下は実行時のcatalina.out.===setCommand called … More 一つのformで複数の操作ボタンを設置し,一つのアクションで受ける.

JavaでDOM

前回の「JavaでDOM」でXMLファイルを読み込んで,ツリーを作成しそのツリーを探索したり,ノード情報を表示したりした.今回はこのツリーに要素を付加したり削除したりする.要素の追加と削除 要素の追加と削除

JNI

ろくにCをやってないのにJava Native Interfaceをちょっとやってみた.基本編クラスやオブジェクトの取扱 基本編JNIの基本とりあえずHello2003-07-20T15:13+09:00 matsuJavaからhelloを出力するネイティブコードを呼んでみる.nativeメソッドの引数(プリミティブ型)2003-07-20T15:13+09:00 matsunativeメソッドから引数を渡せなければ,あんまり嬉しくない.なので,ここではいろんなプリミティブ型の引数を渡しみる.フィールドの取得2003-07-20T15:13+09:00 matsuネイティブコードからクラスやオブジェクトのフィールドを取得する.フィールドの設定2003-07-20T15:13+09:00 matsuネイティブコードからクラスやオブジェクトのフィールドを設定する.メソッドを呼び出す2003-07-20T15:13+09:00 matsuネイティブコードからクラスやオブジェクトのメソッドを呼び出す.クラスやオブジェクトの取扱ネイティブコードでもクラスやオブジェクトを取扱うことができる.参照2003-07-20T15:13+09:00 matsu参照とポインタは同じ概念のはずだが,JNIでは明確に区別する必要がある.オブジェクトの生成2003-07-20T15:13+09:00 matsuネイティブコードでもnewに相当することができる.TOPページ不安火FeatureAutomakeAXISBASHスクリプトCommon LispC++C言語GDBGTKHibernateJFreeChartJNIMPEGNMSPerlPostgreSQLRestletSpringStrutsTaglibXMLXUL埋火PC Clusterベンチマーク調査ギガビットイーサネットの調査MPIで並列プログラミングSoftwarehpl_filterSiteGeneratorGCMonHKBSoftware(En)SiteGenerator