Shammer's Philosophy

My private adversaria

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

文字列の連結-snprintf_ver2

C

文字列の連結-snprintf_ver1 - Shammerismの問題を修正。 #include <stdio.h> #include <stdlib.h> #include <string.h> char * returnString(char * v){ char * prefix = "[RES]"; int length = strlen(prefix) + strlen(v) + 1;// 1 is for '\0' char * response = (char *)malloc(lengt</string.h></stdlib.h></stdio.h>…

文字列の連結-snprintf_ver1

C

文字列の連結 - Shammerismでいろいろ悩んでいたが、どうやらsnprintfを使用するのが一番よさそうだ。まず、snprintfを使用しない力技バージョン。 #include <stdio.h> #include <stdlib.h> #include <string.h> char * returnString(char * v){ char * response; response = (char *)mall</string.h></stdlib.h></stdio.h>…

Makefile デビュー

C

初めて書いてみました。 # Makefile CC=gcc CFLAG=-g all: clean build clean: -rm *.o build: hello.o $(CC) -o hello hello.cポイントは以下。 最初に書かれたアクションが実行される(上の例ではall) ハイフンを付けたアクションは、エラーになっても無視…

文字列を返す関数

C

文字列を返す関数を書いてみた。非常にシンプルな例だが。。。 #include <stdio.h> #include <stdlib.h> #include <string.h> char * returnString(char * v){ char * response; response = (char *)malloc(strlen(v)); strcpy(response, v); return response; } int main(int argc, char </string.h></stdlib.h></stdio.h>…

Lisp Condition Level 1

コンディション超入門 - Shammerismの続き。with-open-socket で試した。サンプルコードは以下のような感じで、意図的に同一ポートの Socket を Open してみる。 (defun open-http-server (listen-addr listen-port) (let ((host listen-addr) (port listen-…

同一ソケットから HTTP リクエストを繰り返し実行するクライアント Ver 1.0

HTTP で何か動作確認するときには、Cookie を追加したくなったりもするので、同一ソケットから HTTP リクエストを繰り返し実行するクライアント(修正版) - Shammerismにさらに手を加えて Cookie も送付できるように変更。また、Sleep する時間も調整できるよ…

同一ソケットから HTTP リクエストを繰り返し実行するクライアント(修正版)

同一ソケットから HTTP リクエストを繰り返し実行するクライアント - Shammerismを実際に動作させてみたが、一部期待通りに動作しなかったので修正。ただ、マルチバイト文字を問題なくハンドルできるようにするのは難しそうだ。当然だが、サーバー側が Keep-…

同一ソケットから HTTP リクエストを繰り返し実行するクライアント

ちょっと書いてみたのでメモ。 import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.Socket; public class RepeatClient { public static void main(Str…

ファイルのタイムスタンプを取得【その3】

ファイルのタイムスタンプを取得【その2】 - Shammerismの内容をさらに改良。月と曜日をアルファベットにした。さらに、書いていて気付いたが、時間を引数で渡す方がいい。まだ具体的に活用する前だけれども、今の時点でも ファイルのタイムスタンプ 現在(…

ファイルのタイムスタンプを取得【その2】

ファイルのタイムスタンプを取得【その1】 - Shammerismを少し改良した。月や時間の桁数を揃えるようにしてみた。 (defun get-decoded-file-timestamp-as-string (file) (labels ((padding (n) (if (< (length (write-to-string n)) 2) (concatenate 'strin…

ファイルのタイムスタンプを取得【その1】

get-decoded-time - Shammerismで、少しだけ時刻の扱いをやった。今回は、ファイルのタイムスタンプの扱いにこれを応用する。file-write-date という関数があり、これを使用することでファイルのタイムスタンプを取得できる。API のサイトはCLHS: Function F…

ccl::get-user-home-dirの方がいい場合

Lispでディレクトリを操作する場合、Lisp functions to handle directries - ShammerismとかでやったようにPathnameを使用するのが基本。しかし、Pathnameだとファイルを指定するときにタイプを指定してやらないといけなかったり、文字列で指定してしまえば…

標準入力から文字を読み込む【その4】

C

標準入力から文字を読み込む際、標準入力から文字列を読み込む【その3】 - Shammerismの通り、一時的に文字列の入力を受け取る buffer を普通に用意することに。単純に fgets で読み込ませてみたが、 #include <stdio.h> int main(int argc, char * args[]){ char va</stdio.h>…

標準入力から文字列を読み込む【その3】

C

標準入力から文字列を読み込む【その2】 - Shammerism以来、標準入力から文字列を読み込む件が中途半端になっていた。 考えられる方法として、1. 文字列格納用ポインタ変数を宣言 2. 文字入力を受付ける 3. 一文字だけ読み込む 4. 読み込んだ文字が改行でな…

コンディション超入門

Common Lisp のサイトではないが、Common Lisp 入門で Lisp の例外機構について説明があった。 どうやら、例外というものをさらに進化させたコンディションなるものが使用されているようだ。とりあえず with-open-file マクロで試す。意図的に存在するファイ…

Lisp の例外処理超入門

Java の例外処理は以下のように書く。 public void sample(){ try { throwException(); } catch(Exception e){ e.printStackTrace(); } } あらかじめ、このメソッドはこういう例外を投げる、というのを 把握しておかないといけない。まあ、JavaDoc があれば…

Lisp functions to handle directries

Lisp でディレクトリを作成する - Shammerismでは、ディレクトリの作成についてやった。作成するディレクトリをプログラム内で決定する際に使えそうな関数をいくつか見つけたのでメモ。 ? (merge-pathnames (make-pathname :directory (list :relative "Dir1…

ソースコードをHTML表示用に整形するLISPver1.0

ソースコードをHTML表示用に整形するLISPver0.4 - Shammerismの継続にして、これをバージョン1.0にしよう。とりあえず、半角スペースと <> とダブルクォート、&の対応は済ませた。ソースコードでよく使用するのはとりあえずこれくらいだろうか。あとは、行数…

ソースコードをHTML表示用に整形するLISPver0.4

ソースコードをHTML表示用に整形するLISPver0.3 - Shammerismの継続。labels を使用してコード量を減らしてみた。 (defun tr (&rest contents) (let ((line "<tr>")) (cond ((typep contents 'string) (setf line (concatenate 'string line contents))) ((typep</tr>…

Lisp の文字列操作

数値を文字列に変換する write-to-string など、いくつか記事にしたこともあるが、整理したことがないっぽいので整理してみる。 数値を文字列に変換する->write-to-string ? (setf a 1) 1 ? (type-of a) BIT ? (setf string-1 "aaa") "aaa" ? (concatenate '…

ソースコードをHTML表示用に整形するLISPver0.3

ソースコードをHTML表示用に整形するLISPver0.2 - Shammerismの続きで、空白、というか半角スペースを にするようにした。あと、インデントも入れるつもりだったが、よくよく考えてみるとオリジナルのソースコードの方で既にインデントはされているはずなの…

Common Lisp 型判定

Lisp にも、Java の instanceOf のような関数があるようだ。type-of というのがそれ。CLHS: Function TYPE-OFに説明がある。 ? (type-of '1) BIT ? (type-of '(1 2 3)) CONS ? (type-of (list 1 2)) CONS ? (type-of "aaa") (SIMPLE-BASE-STRING 3) ?うーん…

ソースコードをHTML表示用に整形するLISPver0.2

ソースコードをHTML表示用に整形するLISPver0.1 - Shammerismの続き。まだエスケープ文字もそのままだが、defparameter をなくして、行を生成する関数を入れてみた。 (defun tr (&rest contents) (let ((line "<tr>")) (cond ((typep contents 'string) (setf li</tr>…

ソースコードをHTML表示用に整形するLISPver0.1

以下のようなものを作成。まだ空白の扱いや、予約語の扱いはない。それは今後の課題。 (defparameter first-line-html "<tr><td>1</td><td rowspan=\"~A\" style=\"width: 1pm; height: 12px; background-color:green;\"></td><td>~A</td></tr>~%") (defparameter other-line-html "<tr><td>~A</td><td>~A</td></tr>~%") (defun calc-indent (indent) (* 4 indent)) …

整形されたソースコードHTML

ソースコード整形表示 - Shammerismで書いた、ソースコードを整形した状態で表示するHTMLを書いてみた。 <html> <head> <title>TestSource</title> </head> <body> <table border="0"> <tr><td>1</td><td rowspan="6" style="width: 1pm; height: 12px; background-color: blue;"></td><td>#include &lt;stdio.h&gt;</td></tr> <tr><td>2</td><td></td></tr> <tr></tr></table></body></html>

ソースコード整形表示

いろいろなサイトで、ソースコードをきれいに整形してカラフルにしているのをよく見る。あれ、なかなか便利でいいなと思う。調べてみると、SyntaxHighlighter - What's new in 3.0?あたりのJavaScriptを使用しているみたいだ。自分でサイトを立ち上げていた…

標準入力から文字列を読み込む【その2】

C

標準入力から文字列を読み込む【その1】 - Shammerismの続きで、変数宣言部をポインタにしてみた。 #include <stdio.h> #include <string.h> int main(int argc, char * args[]){ char * value; printf("Type message:"); fgets(value, sizeof(value), stdin); printf("%s\n", </string.h></stdio.h>…

標準入力から文字列を読み込む【その1】

C

昔やったような気がしていたが見つからないので。。。一番の基本型は以下だろうか。入力バッファクリア方法 - Shammerismをベースにscanfは使用しない。fgetsを使用する。 #include <stdio.h> #include <string.h> int main(int argc, char * args[]){ char value[10]; printf("</string.h></stdio.h>…

char[] のサイズ

C

char[] で文字列データを宣言する際、あらかじめ領域を確保しておく必要がある。strlen では、最後の '\0' はサイズに含まれていなかったけれども、宣言する際には含めておかなければならないようだ。以下のようにすれば問題なくコンパイルできるが、 #inclu…

char* と char[]

C

char[] として文字列データを宣言した場合は、最後に '\0' を入れないといけない。この場合のサイズの差が気になったので確認してみた。 #include <stdio.h> #include <string.h> int main(int argc, char* args[]){ char * value = "0123456789"; char array[] = {'0','1','2',</string.h></stdio.h>…