Shammer's Philosophy

My private adversaria

2011-01-01から1年間の記事一覧

with-open-passive-socket 改 ver 20110709

with-open-passive-socket 改 ver 20110706 - Shammerismの内容でもいいのだが、このマクロの場合はメインの処理に相当する部分が when に渡されることになるので、メインの処理をつなぎ合わせるときに progn はなくてもいい。と、いうわけで progn を外して…

with-open-passive-socket 改 ver 20110706

with-open-passive-socket 改 ver 20110703 - Shammerismでは、呼出側でメインの処理を記述する際に progn を記述する必要があったが、その記述をマクロ側に吸収したバージョン。open-socket-server は version 20110703 から変更なし。 (defmacro with-open…

with-open-passive-socket 改 ver 20110703

with-open-passive-socket を自作 - Shammerismで作成した with-open-socket を改良した。毎回 0.0.0.0 で listen するようになっていたが、listen-address を指定できるように改良。もともとの実装にSBCLで文字列をドット表記のIPアドレスに変換する - Sham…

SBCLで文字列をドット表記のIPアドレスに変換する

SBCLでSocketをオープンする時に使用するIPアドレスは、配列(vector)で表現する必要がある。具体的には以下のような感じにする。 (let ((server-socket (make-instance 'sb-bsd-sockets:inet-socket :type :stream :protocol :tcp))) (sb-bsd-sockets:socket…

未定義のメソッドが呼び出されたときに備える

文字列と同名の関数を呼出す - Shammerismで動的メソッド呼出し(?)について書いたけれども、 すぐに「未定義のメソッドを呼び出そうとしてしまった場合にどうなるか」が疑問になった。処理系ごとに 異なってくるかもしれないが、とりあえず sbcl ではこうす…

文字列と同名の関数を呼出す

Java のリフレクションのようなことをやりたい。具体的には、文字列と同名の関数を呼出したい。 例えば、文字変数(String Symbol?)の値が hello のとき、関数 hello を呼出す、ということをしたい。 * (defun hello () (format t "Hello!~%")) HELLO * (func…

sbcl で socket からアドレスとポートの情報を取得する

clisp の SOCKET:SOCKET-STREAM-LOCAL SOCKET:SOCKET-STREAM-PEER に相当する関数を使ってみた。sbcl だと、 sb-bsd-sockets:socket-name sb-bsd-sockets:socket-peername が相当するようだ。multiple-value-bind で返り値を受け取ってやらないといけない点…

sbcl で文字列を扱う

Common Lisp と 日本語 と 文字コードが参考になった。ここのサイトの例をマネしてみたり、ちょっと自分でアレンジしていろいろやってみた結果。 UTF-8 の byte 配列を文字列にしてみる。 * (octets-to-string (concatenate '(vector (unsigned-byte 8)) #(6…

sbcl で Socket を使う

いろいろなサイトで情報を収集。とりあえず、(require :sb-bsd-sockets) を事前に実行しておく必要がある。以下、clozure と汎用性を持たせるために汎用関数を独自に定義。 (defun open-socket-server (port) (let ((interface #(0 0 0 0))) (handler-case (…

apt-get でインストールできる clisp は thread 未サポート

clozure は、Debian だと apt-get でインストールできないので、apt-get でインストールできる clisp がいいなと思っていじっていたが、apt-get でインストールされた clisp には thread を扱うパッケージが含まれていないことがわかった。http://www.clisp.…

技術志向革命

今日現在自分が思っていることを少々。一部、天才技術者と呼ばれる人たちがいる。そういう人たちとそうでない人の差は何か、と考えて、ひたすら技術を追い求めて、そうならんと勉強してきたが、最近は技術の勉強をし続けたところでそういう人の仲間になれる…

do-loop の終了判定タイミング

do でループさせる処理を書いていて、思った通りの箇所でループを抜けずにいろいろ試してみた。どうやら、ループ内で使用する変数の初期化処理があると、それを行うまで判定処理が実行されないらしい。時系列で整理すると、 do 内で使用する変数の初期化 終…

with-open-passive-socket を自作

with-open-file や、with-open-socket のように、 ストリームへのアクセスシンボルを呼出側で定義できるようにする passive socket(server socket) とわかっているので、そのためのオプションを指定せずに済むようにする クローズをするようにしたいが、わか…

何事にも限度があるよねぇ・・・

製品のサポートをしていて、様々な問い合わせを受けていると、トラブルシューティングにもパレートの法則(80:20の法則)があると感じる。よく起きる80の問題は、調査時間の20、そして、なかなか発生しない20の問題に調査時間の80を割く、というようなことを…

CLISP で server-socket に with-open-stream を使うと・・・

CLISP echo-server & echo-client - Shammerismの補足情報。 サーバーに対しても、with-open-stream を使用したいと思ったが、使用した場合は 停止の際に毎回以下のエラーが出てしまう。 *** - NO-APPLICABLE-METHOD: When calling #<STANDARD-GENERIC-FUNCTION CLOSE> with arguments (#<SOCKET-SERVER 0.0.0.0:7001>), no</socket-server></standard-generic-function>…

CLISP echo-server & echo-client

CLISP による echo-server と echo-client。 サーバーの実装は32.4. Socket Streamsをベースに、というかほとんどコピー。read-eval-print の部分だけを少し書き換え。 (let ((server (socket:socket-server $listen-port))) (format t "~&Waiting for a con…

MacにGoogle日本語入力インストール

Mac

MobileMeの期限が切れて、ことえりにこだわる理由がなくなったので、Google日本語入力インストールしてみました。サイトと同じで、言葉を打っていくと候補がいくつか出てくる。慣れればかなり便利そうだ。個人的に、メールアドレスは@と数字の組み合わせで…

HelloWorld, EJB 3.0(StatelessSessionBean)

WLS付属のEJB3.0のサンプルは、複雑すぎる・・・一応、構成図もついているが、サンプルなんてHelloWorldレベルのものでいいと思う。と、言う訳で自分で書いた。どうもテストケースとかの管理が下手なので、いつでもアクセスできるようにここに書いておく事に…

CLISP string size

CLISP でも文字列のサイズを調べたい。以下のようにすればできるようだ。 (defun utf-8-string-byte-size (s) (if (stringp s) (length (ext:convert-string-to-bytes s (ext:encoding-charset "UTF-8"))) 0)) Clozure CL とハイプリッドにするには以下のよ…

スクリプトでもコンパイルしても引数の扱いを統一したい

*unprocessed-command-line-arguments* と *command-line-argument-list* - Shammerismでやったように、*unprocessed-command-line-arguments*はコンパイルしてしまうと使用できないことがわかったので、直接これを使用しないことにした。とりあえず、'--'の…

CommonLispの整数表記方法メモ

巨大な数を扱うようなプログラムを書く場合は、2進数や16進数表記を使用できると便利。以下にそれぞれの表記方法を備忘録としてメモ。 ? #b10000000000 1024 ? #o2000 1024 ? 1024 1024 ? #x400 1024 ?#b で始めると2進数、#o で始まるのが8進数、#x で始ま…

*unprocessed-command-line-arguments* と *command-line-argument-list*

Clozure CL でコンパイルしたバイナリの引数処理 - Shammerismの要点整理。 どちらも起動時に渡されたコマンドライン引数等が格納されている、という点は共通。 しかし、以下のような違いがある。 *unprocessed-command-line-arguments* は引数の -- より後…

CLOSエクササイズ_slot-boundp

LISP の Class で null check(nil check) をする場合、Java のように slot(instance 変数)のデータを取得 取得した値が nil か確認 という手順では NG だとわかった。この手順だと、Unbound slot という趣旨のエラーが出る。値を取得する前に nil でないかを…

WebLogic Server 10.3.4 を MacOS X Leopard にインストール

Oracleになってからリリースされたバージョンを試すのは初めて。 うまくいくだろうか。MacのJavaは、他のJavaと多少異なるディレクトリ構成になっているので、 その点を他のJavaと合わせる必要がある。下記のブログを参考にした。 http://blogs.oracle.com/s…

CLOSエクササイズ第05回

クラスを生成した後でフィールドにアクセスするために accessor を使用していたが、reader と writer というものを使用して setter と getter を分割することもできると知った。Java をやっていた自分としてはこの方が使い易いと思う。 ? (defclass foo () (…

ソースコードを複数の処理系に対応させる

#+ccl とか #+clisp というのを使用すればできるようだ。以下のような感じ。 (defun open-socket-server () (make-socket :connect :passive :reuse-address t :local-port 7001)) (defun open-echo-server () #+CCL (let ((server (open-socket-server))) (…

CLOSエクササイズ第04回

かなり前回から間があいてしまっているが、再び書く機会があったので。インスタンスの初期化の方法について。具体的には initform と initarg の使い方を簡単にメモ。まずは initform から。 ? (defclass foo () ((a :accessor accessor-a :initform "Hello"…

Xyzzyで書いたJavaソースがコンパイル不可

Windowsマシンだと、デフォルトでSHIFT_JISが使用される。 自宅だとMacなのでこの文字コードをUTF-8にしたいなぁ・・・と思っていて、 数日前に自分の使っているエディタ(Xyzzy)で設定を変更。 変更方法は、%XYZZY_HOME%\site-lisp\siteinit.lに次の1行を…

Win7+TeraTermで文字化け

文字コード以外の原因で文字化けしていたのでメモ。 TeraTermでUNIX/Linuxに接続した場合、気にするのはログインユーザのLANGと、TeraTermメニューの文字コードだと思う。今回、LANG=ja_JP.UTF-8になっていて、TeraTermメニューの文字コードもUTF-8。だが、…

ClozureCL で文字のバイト数を判定する関数があった・・・

ClozureCL で文字のバイト数を判定 - Shammerismで UTF-8 限定の関数を書いてみたが、改行の判定がうまくできず、改行を含む場合に行数分だけサイズが小さくなってしまうことがわかった。よくよく調べると、ClozureCL の標準関数で文字のバイト数を取得でき…