サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
災害への備え
www.nurs.or.jp/~sug
C文法との違い(オブジェクト指向関連以外) 基本型のサイズは規格で固定されている。int = 4byte, short = 2byte, long = 8byte, byte = 1byte など。すべて符号付きである。 基本型の中に、boolean 型が存在する。if文などで使われる条件判定式の評価結果は、Cでは int 値であるが、Java では boolean型(true と false の2値を取る)であると定義されている。だから、C言語風の0値とそれ以外を判定する条件文はもう許されない。 C Java int x; if( x ) { if( x != 0 ){ 型キャストや代入について、実行時例外が発生する可能性がある。つまり、代入可能な型であるかどうか、動的にチェックしている。 クラスの場合「代入可能」とは次のことを意味する。 基底クラス = 派生クラス; この場合はより一般
Deep Side of Java~Java 言語再入門 第2回 ~ Java 文法を中心に 組み込みクラスライブラリ・パッケージ java.util パッケージには、大体2通りの内容がある。1つは stdlib.h に相当するようなユーティリティであり、もう1つはリストやハッシュテーブルのような便利なデータ構造が定義されている。まず、ユーティリティについて解説するが、これらはすべて「国際化」を前提に設計されていることに注意されたい。つまり、「Locale」(どの国の慣習に従うか)を設定でき、設定された Locale に従って出力をすることができる。 java.util.Locale その Java VM(インタプリタ)がどういうロケールで動作するか、ということの基本データは、System.getProperties() メソッドで取得できる「システムプロパティ」の中にある。このシステムプ
皆さんも Java でプログラミングをするとなると、「JavaBeans」することが超多い...のは当り前のことだ。でだけど、 いちいち変数を定義するごとに setter/getter を作るのは面倒だ... とお思いの諸兄もきっと多いに違いない。まあ、Eclipse とかだったら、自動生成する、というのは一番間単で、マギレのない手段だからそうしちゃってる方も多いことだろう。勿論そうするのが一番いい。 けど、ここではちょいと勉強を兼ねて、 アノテーションから setter/getter を生成する、ってのはどうだ? というのをやってみようと思う。まあ、実際、 public class MyBean { @Bean(kind=Bean.Kind.GETTER) private String message; .... といったかたちで、そういうアノテーションを作るのは簡単なんだが、それをどう
Tcl/Tk によるGUI(2) John Ousterhout の作った言語 Tcl/Tk は、非常に便利な言語である。これは簡単なスクリプト言語の側面と、GUIツールキットの二面性を持ち、そのために多彩な理用法が可能である。ここで、筆者が経験した多様な使い方を紹介し、Tck/Tk の有効性について議論しよう。やや未完成なかたちで公開するが、それでも有益だろう。そのうち追加するので待っていて欲しい...とかつて書いたが、約1年開いてしまったがここに後編をお届けする。考えてみるとすでに結構「レトロコンピューティング」になってしまったような気がしないでもない(苦笑)。 1年開いてしまった理由は、ちょっと 8.0 系にバグがあるようで、Tk 自前ウィジットがうまく作れなかった...どうしよう?と思っているうちに忘れちゃったんだな、これが。で、新マシンに移行して 8.3 系を入れて、それでやって
さて、今まで後回しにしてきた「例外」である。C言語で言えば、setjmp(3),longjmp(3)を使って実装する非ローカル分岐である(setjmp,longjmp が判らない人は、次の解説を見よ!)が、これを形式化して catch & throw 機構に整理したものが「例外」である。C++ でも、例外は言語機能として実装されているが、それは C++ の機能の1つに過ぎない。しかし、Java では「例外」は言語の本質に関わる重大な機能を担当している。だから、Java の理解は「例外」の理解なくしてはおぼつかない。 例外の使い方 「例外」はどういう状況で使われるものであるかをまず説明しよう。これは「例外的な状況」に対する「エラー処理」である。例外を使わないエラー処理と言うと、NULL や -1 に代表される「帯域外の値」を戻り値として返すというのが一般的である。だから、関数の呼び出し結果を
Deep Side of Java~Java 言語再入門 第2回 ~ Java 文法を中心に 組み込みクラスライブラリ・パッケージ Java の入出力は抽象クラスを多重に使って実現されている。なので、一種のイディオムとして理解するのが良かろう。ここでは、ケース別に分けて理解することにする。 テキスト入出力 普通にファイルから行指向のテキストの Read/Write をするには次のようにする。入出力は JDK のバージョンによってかなり大きな変更があったが、現在使われるモデルは Reader/Writer モデルである。特に入出力は、バッファリングを行って効率の良い BufferedReader/Writer クラスを使うべきである。この Reader/Writer はそのプラットフォームでデフォルトである日本語コーディング(UNIX=EUC, Win=SJIS)の文字列を正しく扱う。 tr
ここでは、80年代前半のアニメーション作品を中心に、盛んだった技法について若干の解説をしよう。当時は当然、8ミリフィルムによる制作が中心だった。だから、8ミリフィルム固有の技法も数多く含まれる。 シネカリ フィルム固有の技法。多く黒味のフィルムを使って、それに針で傷をつけて1コマづつ直接イメージを作る。マクラレンの「ブリンキティ・ブランク」がおそらく独立作品としては創始者だろう。バリエーションとしてはすでに映像が映っているフィルムに傷をつける、定規などを使って全体に渡って傷をつけるなどの技法がある。どちらか言えば、アニメーション80ではメイン技法として使われた例はそう多くない。これで有名だったのはPAFの二木真希子である。二木は「8ミリの限界を超える」とまで言われる細かいシネカリを作り、おかげで随分視力を悪化させたと言われている。 写真アニメ スチル写真をコマ撮りに準じて撮影し、後でそれを
「オブジェクト指向」には以下の3つの特徴があるとされる。 カプセル化(情報隠蔽) どのようなシステム開発でも、情報管理は重要である。各モジュールの間の「結合性」を減らし、モジュール同士が互いに相手の情報を参照し合わないようにすることが、開発効率を上げるという事実がある。つまり、公開すべきデータ(や手続き)を制限し、あたかも各モジュールが「ブラックボックス」であるかのように扱うことで、開発効率を上げることができる、という結論を得るのである。 これはつまり、さまざまなデータや手続きの中で、本来インターフェイスとなる、そのクラスの機能として定義された手続きと、効率的に実装するための手続きとを分離することになるのである。 しかし、C言語ではデフォルトのスコープは「広すぎる」。デフォルトではすべてのグローバル変数と関数は、結合単位のすべてから参照可能である。だから、C言語の「良い」スタイルでは、st
www.nurs.or.jp/~sugi
●emacsのシェルモード ( M-x shell )で文字化けするのですが emacsのシェルモード ( M-x shell) で文字化けすることがありませんか? 例えばこんなかんじです。 [sugi@yumi /usr]$ ls ^[[00m^[[01;34mX11R6^[[00m/ ^[[01;34mdoc^[[00m/ ^[[01;34mi386-redhat-linux^[ [00m/ ^[[01;34minfo^[[00m/ ^[[01;34mlocal^[[00m/ ^[[01;34mshare^[[00m/ ^[ [01;34mvine^[[00m/ ^[[01;34mbin^[[00m/ ^[[01;34metc^[[00m/ ^[[01;34mi486-linux-libc5^[[00m/ ^[[01;34mlib^[[00m/ ^[[01;34mman^[[00m/
さて、前ページで「マジックな機能」として紹介したのが、「使えるAPIを自動判定する!」という強烈な機能だ。ただし、これはちょっと調査してみたが、ブログだからと言って「必ずある!」というものではない。まだまだ普及の途中のようだが、実に良い機能なので、ぜひぜひ紹介したい。 MovableType のインデックス・テンプレートの中に、「Atomフィード」や「RSS 1.0」などと並んで「RSD」というテンプレートがあるのは御存じか? これがマジックの根源である。このファイルはブログのトップページに atom.xml とか index.rdf なんかとどう様に作られる。中身はたとえばこんな感じだ。 <?xml version="1.0" ?> <rsd version="1.0" xmlns="http://archipelago.phrasewise.com/rsd"> <service> <e
ここでは、変数には、整数型int,文字型char,浮動小数点型doubleなどの型があることに注意してポインタを見て行こう。 これらの変数の型は、その変数の値が必要とするメモリのサイズの情報を持っている。一般的なUNIXでは、int = 4byte, char=1byte, double=8byte が普通であり、変数の型に合わせてその変数がメモリ上で占めるべきサイズが確保されている。サイズを知るためには printf("size of int=%d\n", sizeof(int)); printf("size of char=%d\n", sizeof(char)); printf("size of double=%d\n", sizeof(double)); printf("size of pointer to char=%d\n", sizeof(char *)); printf("
と設定ファイルが定められている。blojsom.xml は更にその中で blojsom-helper-beans-include.xml と blojsom-plugins.xml を読み込んでおり、後の2つの xmlrpc と commentapi のものは blojsom-helper-beans-include.xml をやはり読み込んでいる。で、このサーブレットクラスの中で、 protected String[] BLOJSOM_CONFIGURATION_FILES = {"blojsom.xml"}; protected ClassPathXmlApplicationContext _classPathXmlApplicationContext; public void init(ServletConfig servletConfig) throws ServletExcept
●ファイル名の一部に日付を付ける シェルスクリプト bashサンプル 毎日更新されるあるデータをバックアップするサンプル #!/bin/sh TDAY=`date +%Y%m%d` cd /home/sugi cp -p ./access.log ./access.log.$TDAY
RedhatLinuxインストール直後にホスト名を変更するには /etc/sysconfig/network 及び /etc/hosts (固定IPの時) を変更します。 おそらく他のredhat系でも同じと思います^^; 但しホスト名の変更は多くのアプリケーションに影響し、アプリケーション固有の設定ファイル等に記載されてしまっている場合にはそれらを個別に変更しなければなりません。 ■固定IPの時 /etc/sysconfig/network の変更 NETWORKING=yes HOSTNAME=ホスト名 とします。 /etc/hosts の変更 127.0.0.1 ホスト名 localhost.localdomain xxx.xxx.xxx ホスト名 エイリアス名 とします。 DHCPの時は/etc/hostsの指定は127.0.0.1 の行のみの指定にします。 ■DHCPの時 /et
postgresqlの基本コマンドをまとめてみました。 ■はコマンドラインから●はpsqlから実行するものです。
諸君、私は関数プログラミングが好きだ 諸君、私は関数プログラミングが好きだ 諸君、私は関数プログラミングが大好きだ Lispが好きだ Schemeが好きだ Haskellが好きだ Erlangが好きだ map関数が好きだ fold関数が好きだ 継続が好きだ クロージャが好きだ モナドが好きだ ユニフィケーションが好きだ 再帰呼び出しが好きだ 業務で 趣味で 人工知能で シミュレーションで カスタマイズで Emacsで 並列プログラミングで サーバで 画像処理で 巡回セールスマン問題で この地上に存在するありとあらゆる関数プログラミングが大好きだ 関数プログラミングがエレガントな構造を作り上げるのが好きだ 再帰で複雑な構造を簡潔に記述できた時など心がおどる 副作用で計算を主導しない関数プログラミングの特性が好きだ 副作用を排除した並列プログラミングでサーバを記述した時など胸がすくような気持ち
ポインタ虎の巻 extern宣言の罠--配列とポインタの違い このような配列とポインタの違いを十分頭の中に入れた上で、次のコードを見てみよう。 extern char *str; char *p; p = str; 何の変哲もないコードであるが、strというポインタは外部定義がされていることになっている。だから、このコードのファイルとは別なファイルで、str の定義がなされているのであり、リンク時に2つのファイルが結合されて1つの実行ファイルが作られる、という状況設定である。 このとき、別なファイルのstrの定義が char *str = "test";
このページでは、中級C言語プログラマがぜひ勉強すべき他の言語を紹介することにする。C言語は「何でもできる」言語であるのだが、逆に言えば「何をするにも面倒な」言語である。だから特にある処理が得意な言語があるのならば、それをCプログラムと組み合わせて使うことも、生産性を上げるコツである。 しかし、他の言語のメリットはそれだけではない。C言語しか勉強していないと、意外に「ダサい手法」しか知らないこともありうる。他の言語のアイデア、発想はC言語であっても模倣できることもあるし、何よりもプログラミングの視野を広げることができるのである。そういうメリットは、中級以上では馬鹿にならない。 オブジェクト指向言語 -- C++ か Java Lisp -- Scheme, Common Lisp いわゆる「スタック指向言語」 -- forth, PostScript Eiffel Tcl/Tk UNIX シ
以前書いた「バイナリサーチ」徹底解説の続編みたいなものである。筆者はこのところ、業務プログラムを書き倒しているのだが、その時に結構頻繁に遭遇するちょっとした問題を解決するにあたって、同僚たちがあまりうまいやり方を知らない....というのを、少し気にしているのである。その問題とはこういうタイプのものだ。 データベースのあるテーブルが、実際には階層構造になっているにも関わらず、フラットに定義されているために、実際に欲しい階層データを構築するのに何回も SQL を呼んでいる....サブキーを考慮して order by してやれば、正しい順番で1回で取れるのにねぇ... そういうデータで、階層ごとに合計が欲しいんだが、Map を使って合計やってるぞ...これも Map とか使わずに、1回ループさせるだけでできるのにね.... という問題だ。これ要するに、階層データがベタな SQL のテーブル1個で
目次 AsyncAppdender LF5Appdender NullAppender AsyncAppdender さて、これはちょっと特殊用途である。基本的に Appender たちは「同期して」動作するものである。ネットワーク系など中にはちょっとばかり動作が遅い可能性のあるものもあるんだが、その場合でもロギングが終ってから、呼び元に戻るわけである。この AsyncAppender は、動作を「非同期」にするものだ。つまり、一旦ロギングのリクエストをキューに貯めたら、すぐに呼び元に戻り、テキトーに別スレッドの別スケジュールでロギングの実行をしてやる...というものだ。 そういうものなので、設定は超特殊だ。まず、log4j.properties に書けないあたりからイカれてる。log4j.xml に書くんである。また、当然 AsyncAppender の中に更に実際の作業をする Appe
怪説!「音楽大戦」 「音楽大戦」とは? 現在、筆者は300HTMLファイル記念「ヅカって何?」の準備のため、いろいろと調査をしているのだが、良い機会なので雄松堂出版から出ている「復刻版 歌劇」を読んでいる。「歌劇」創刊号から大正期にかけてのものの復刻である。これがなかなか面白い上、「宝塚歌劇」の本質について実にさまざまな照明を当ててくれるのである。 そんな中で、発見したのがこの「音楽大戦」(歌劇第4号・大正8年)である。直接には宝塚歌劇とは関係がないのだが、大正期のクラシック音楽受容について、なかなか面白い資料となっている。 なんていうのは、この「音楽大戦」の面白さをまったく伝えていない。筆者はこの「音楽大戦」を一読した後、呵呵と大笑し、ノケゾったのである。これぞ「怪説」である。一時流行した言い方で言うのならば「トンデモ論文」である。しかし、単なる「トンデモ」ならばわざわざ紹介する必要もな
現実にはプロキシ・ソフトは非常に多様である。元々、サーバ業界は圧倒的シェアを誇るプラットホームがないので、採用されているプロキシソフトも実に多様であり、そのプロキシソフトが出力する情報も実に多様である。だから、この項の情報は執筆時の情報に過ぎず、新たなプロキシソフトの登場、あるいはバージョンアップによって変化すること、及び筆者の狭い範囲での調査報告に過ぎないことを前提として読んで頂きたい。 基本的にはどのサーバソフトを使っているかは、HTTP_VIA か、HTTP_FORWARDED に出る。これを自動的に解析するのは割と難しいだろう。 squid Traffic-Server NetCache DeleGate MS Proxy NetScape-Proxy まず、比較的定型的な出力パターンを持つプロキシから始めよう。 squid 現在、もっともメジャーなプロキシソフトは squid で
malloc(3) はメモリを確保する、と malloc(3) を解説する際に述べた。しかし、1つのプロセスが使うメモリにはいくつかの種類がある。標準的なUNIXでは、仮想メモリと共に、以下のレイアウトでメモリが使われる。 00000000 空きメモリ(NULLポインタによる参照を検出する) 00001000 コードセグメント(CS)の開始 00001FFF コードセグメント(CS)の終了 00002000 データセグメント(DS)の開始 0000FFFF データセグメント(DS)の終了 00010000 空き領域の開始 FFFFC000 スタックトップ FFFFFFFF スタックのボトム ここで重要なのは「スタック」である。データには2通りの区別がある。比喩で語るのが良いだろう。 例えば企業の経理のアルバイトをすると考えよう。この時、帳簿と手順書とメモ帳と電卓を揃えて仕事を開始するだろう
目次 課題! ImageReady のアニメの原理 ImageReady の起動方法 重要な3つのウィンドウ 作業の手順 理屈面での補足 課題! 次の課題を「画像」について勉強した成果として、作成して欲しい。 GIFアニメーションを制作する。制作ソフトは何を使っても構わない。 条件 アニメのコマ数(フレーム数)は2つとする。 サイズは 100 pixel × 100 pixel とする。 フレームの提示の時間間隔は任意。速いアニメだけが良いとは限らないから、表現意図にしっかりと合った時間間隔を見つける。 原則として、無限に繰り返すアニメにする。 ImageReady のアニメの原理 ImageReady は Adobe 社が開発したGIFアニメ制作ソフトであり、Adobe 社の看板ソフトである Photoshop と操作にかなりの互換性がある。Photosh
このページでは、大体 使い方(1,2)でやったのに準じて、Logback の使い方を解説する。 目次 Logback の呼び方、というか slf4j 解説 slf4jのロガー実装切替えメカニズム logback.xml ログ出力 レイアウト Logback の呼び方、というか slf4j 解説 まあ、抽象論よりも、具体的なコードを見ようじゃないか。サンプルコードはこんなものだ。 import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class Test { protected static Logger log = LoggerFactory.getLogger( TestLogback.class ); public static void main( String [] args ) { new SimpleTe
で、/etc/syslog.conf に追加する行はこんなもんだろう。この出力は /var/log/log4j.log に出る。 local6.* /var/log/log4j.log /etc/syslog.conf を直したら、「リモート受信モード」で syslogd を起動し直す。RedHat 系 Linux だと、 # /etc/rc.d/init.d/syslog stop # /sbin/syslogd -r でとりあえず遊ぶ準備は整う。 SyslogAppender のオプションは次の通りだ。 SyslogHostリモート受信モードの syslogd が起動しているリモートログサーバのマシン名。1.2.14 で仕様が追加され、ここの表現としてログサーバのポートを指定できるようになった。後述。 Facility 使うfacility名。今回の設定だと「local6」である。 F
Java 言語再入門 第3回 ~クラス設計とデザインパターン
プロキシとは、HTTPアクセスを代行するシステムの総称である。現在インターネット上ではいくつかの理由から広く使われている。 アクセス効率を上げるため。 プロキシには以前アクセスしたホームページを蓄積し、再度のアクセス要求に対して実際にそのホームページがあるサーバにアクセスするのではなくて、手持ちのホームページを返す機能がある。これを一般に「キャッシュ」と呼ぶ。インターネットの混雑緩和に有効である。このタイプのプロキシサービスはほとんどHTTPに関するもののみの場合が多い。 ファイアウォールを越えるため。 セキュリティ上の配慮から、LAN内部とインターネットの接続を認めないLANの設定がある。これをファイアウォールと呼ぶ。しかし、LAN内部からインターネット上での情報が得られないのは困るので、LAN内部からはLANとインターネットの境界上にある特定のマシンに接続し、このマシンに自分の代わりに
次のページ
このページを最初にブックマークしてみませんか?
『www.nurs.or.jp』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く