<?xml version='1.0'?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>M-OZ BLOG</title>
  <link href="http://www.m-oz.com/blog/"/>
  <updated>2010-01-26T14:12:38Z</updated>
  <auther>
    <name>M-OZ.com</name>
  </auther>
  <id>http://www.m-oz.com/blog/</id>
  <entry>
    <title>Scheme Quiz 1 問目</title>
    <link href="http://www.m-oz.com/blog/blog.cgi?20100126"/>
    <id>http://www.m-oz.com/blog/blog.cgi?20100126</id>
    <updated>2010-01-26T14:11:21Z</updated>
    <content type="html"><![CDATA[Twitter にて Scheme を使ったクイズを出題した。<br />  <p> <a href="http://twitter.com/baal5084/status/8226643131">baal</a>: スキームクーイズ！さて突然ですがここで Schemer の皆さんに問題です。<br /> Q1. リストの最初の要素を car と list-ref を使わず取り出してください。<br /> </p>  <p>A. SRFI-1 の first を使う。</p>  <p>A. reverse して最後の要素を match で取り出す。</p>  <p>A. 頭に何か cons して cadr を使う。</p>  <p>A. (apply (lambda (x . _) x) xs)</p>  <p>A. (apply #'identity (last (reverse x))) ;CL?</p>  <p>A. (dolist (i l) (return i)) ;CL?</p>  <p>A. (def mycar (l) (ccc[map _ l])) ;Arc</p>  <p>A. (call/cc (λ (c) (for-each (λ (x) (c x)) xs)))</p>  <p>A. (vector-ref (list-&gt;vector xs) 0)</p>  <p>A. (call/cc (cut map &lt;&gt; l))</p>  <p>A. (find idfn l) ;Arc</p>  <p>A. (find-if'identity l) ;CL</p>  <p>A. (find-if (constantly t) l) ;CL</p>  <p>A. (find[+]l) ;Arc?</p>  <p>A. (find[*]l) ;Arc?</p>  <p>A. (define (my-car lst) (set-cdr! lst '()) (apply (lambda (x) x) lst))</p>  <p>A. (find (lambda _ #t) '(a b c))</p>  <p>A. (reduce-right (lambda (x . _) x) #f lst)</p>  <p>A. (define-syntax syntax-car (syntax-rules () ((_ (a . _)) a)))</p>  <p>A. (syntax-&gt;datum (syntax-case lst () [(x . _) #'x]))</p>]]></content>
  </entry>
  <entry>
    <title>Vim からつぶやく。</title>
    <link href="http://www.m-oz.com/blog/blog.cgi?20100120"/>
    <id>http://www.m-oz.com/blog/blog.cgi?20100120</id>
    <updated>2010-01-20T09:45:39Z</updated>
    <content type="text"><![CDATA[Vim からつぶやく。  mztweet.scm  (define (main . args) 	(if (pair? args) 		(tweet *id* *pw* (car args))))  $VIMRUNTIME/autoload/mylib.vim  function mylib#MzTweet(...) 	let msg = getline('.') 	if a:0 > 0 		let msg = a:1 	endif 	if len(msg) > 0 		echo system("mztweet \"" . msg . "\"") 	endif endfunction  :call mylib#MzTweet()]]></content>
  </entry>
  <entry>
    <title>MzScheme でつぶやく</title>
    <link href="http://www.m-oz.com/blog/blog.cgi?20100115"/>
    <id>http://www.m-oz.com/blog/blog.cgi?20100115</id>
    <updated>2010-01-15T03:47:23Z</updated>
    <content type="text"><![CDATA[MzScheme で twitter に投稿するプログラムを書いてみた。  (require net/url 		net/uri-codec 		net/base64)  (define (tweet id pw msg) 	(let ((port 			(post-pure-port 				(string->url (string-append 					"http://twitter.com/statuses/update.xml?" 					(alist->form-urlencoded `((status . ,msg))))) 				#f 				(list (string-append "Authorization: Basic " 					(bytes->string/utf-8 (base64-encode 						(string->bytes/utf-8 (string-append id ":" pw))))))))) 		(display-pure-port port) 		(close-input-port port)))  (tweet id password message)  ポイントは POST なのに GET 風にパラメータを送ってるところ。]]></content>
  </entry>
  <entry>
    <title>SONY SRS-M50 購入</title>
    <link href="http://www.m-oz.com/blog/blog.cgi?20090531"/>
    <id>http://www.m-oz.com/blog/blog.cgi?20090531</id>
    <updated>2009-05-31T13:11:31Z</updated>
    <content type="html"><![CDATA[MacBook と iPhone のためにアクティブスピーカーを購入。<br /> 事前にネットで調べて SONY の SRS-M50 にした。<br /> 評判通りのなかなか良い音に満足。<br /> <br /> <img src="/blog/img/20090531.jpg" alt="20090531.jpg" /><br />]]></content>
  </entry>
  <entry>
    <title>Macbookを買いました。</title>
    <link href="http://www.m-oz.com/blog/blog.cgi?20090426"/>
    <id>http://www.m-oz.com/blog/blog.cgi?20090426</id>
    <updated>2009-04-26T07:53:56Z</updated>
    <content type="text"><![CDATA[Macbookを買いました。 ポリカーボネートの白のやつ。 届いたのは二週間くらい前なんだけど、まだあんまり触れてない。 ちょっとづつ手探りで環境を整えているところ。  Apple Developer Connection * http://developer.apple.com/jp/ 	Xcode という開発ソフトをダウンロード。  MacPorts * http://www.macports.org/ 	Unix系ソフトをいろいろダウンロード。  MacVim * http://code.google.com/p/macvim/ 	MacOSX版Vimはここでダウンロード。 	日本語もOK!]]></content>
  </entry>
  <entry>
    <title>[MEMO] VB.NETで外部DLLを動的に呼び出す</title>
    <link href="http://www.m-oz.com/blog/blog.cgi?20090422"/>
    <id>http://www.m-oz.com/blog/blog.cgi?20090422</id>
    <updated>2009-04-22T09:22:50Z</updated>
    <content type="text"><![CDATA[おしごとめも。 Dim asm As System.Reflection.Assembly asm = System.Reflection.Assembly.LoadFrom("plugins\PluginTest.dll") Dim plgin As Object plgin = asm.CreateInstance("PluginTest.PluginTestClass") Dim params() As Object = {} Dim mi As System.Reflection.MethodInfo mi = plgin.GetType.GetMethod("Open") mi.Invoke(plgin, params)]]></content>
  </entry>
  <entry>
    <title>Twitter はじめました。</title>
    <link href="http://www.m-oz.com/blog/blog.cgi?20090321"/>
    <id>http://www.m-oz.com/blog/blog.cgi?20090321</id>
    <updated>2009-03-21T12:34:57Z</updated>
    <content type="text"><![CDATA[Twitter はじめました。 http://twitter.com/baal5084]]></content>
  </entry>
  <entry>
    <title>iPhone 3G (16GB WHITE) 買ってきた。</title>
    <link href="http://www.m-oz.com/blog/blog.cgi?20090307"/>
    <id>http://www.m-oz.com/blog/blog.cgi?20090307</id>
    <updated>2009-03-08T14:52:34Z</updated>
    <content type="html"><![CDATA[急にものすごく欲しくなって iPhone 3G (16GB WHITE) 買ってしまった。<br /> <img src="http://www.m-oz.com/blog/data/2009/03/iphone.jpg" alt="iPhone 3G" /><br />]]></content>
  </entry>
  <entry>
    <title>Scheme を作ろう 9</title>
    <link href="http://www.m-oz.com/blog/blog.cgi?20090205"/>
    <id>http://www.m-oz.com/blog/blog.cgi?20090205</id>
    <updated>2009-02-05T08:28:44Z</updated>
    <content type="text"><![CDATA[Y Combinator が動くようになった。 未だにコレの原理が理解できてないけど、動いた。  	(define Y 		(lambda (f) 			((lambda (proc) 				(f (lambda (arg) ((proc proc) arg)))) 			(lambda (proc) 				(f (lambda (arg) ((proc proc) arg))))))) 	(define fact 		(lambda (f) 			(lambda (n) 				(if (= 0 n) 1 (* n (f (- n 1))))))) 	((Y fact) 5) 	;=> 120]]></content>
  </entry>
  <entry>
    <title>Scheme を作ろう 8</title>
    <link href="http://www.m-oz.com/blog/blog.cgi?20090203"/>
    <id>http://www.m-oz.com/blog/blog.cgi?20090203</id>
    <updated>2009-02-04T09:41:42Z</updated>
    <content type="text"><![CDATA[再帰ができるようになった。 (begin   (define f (lambda (n) (if (= n 0) 1 (* n (f (- n 1))))))   (f 8)) ;=> 40320]]></content>
  </entry>
  <entry>
    <title>Scheme を作ろう 7</title>
    <link href="http://www.m-oz.com/blog/blog.cgi?20090126"/>
    <id>http://www.m-oz.com/blog/blog.cgi?20090126</id>
    <updated>2009-01-26T14:26:44Z</updated>
    <content type="text"><![CDATA[↓このへんを参考に lex + yacc 勉強中。  http://www.linux.or.jp/JF/JFdocs/Lex-YACC-HOWTO.html  なかなか面白い仕組みだ。 パーサは flex + bison で作ろうと思う。]]></content>
  </entry>
  <entry>
    <title>Scheme を作ろう 6</title>
    <link href="http://www.m-oz.com/blog/blog.cgi?20090119"/>
    <id>http://www.m-oz.com/blog/blog.cgi?20090119</id>
    <updated>2009-01-19T15:16:52Z</updated>
    <content type="text"><![CDATA[ごくごく単純なLisp処理系が出来てきた。 こうなるとMy処理系向けプログラムを書きたくなってくるんだけれど... まだパーサは書けてないので、 例えば 1 + 2 を計算するプログラムはこんな感じになる。  CONS(make_symbol("+"),CONS(make_number(1),CONS(make_number(2),NIL))) ;-> 3  パーサがほしいな。 lex とか yacc とかいうソフトを使うのがセオリーらしい。 Flex と GNU Bison というのもよく使われてるようだ。]]></content>
  </entry>
  <entry>
    <title>2009年の目標</title>
    <link href="http://www.m-oz.com/blog/blog.cgi?20090104"/>
    <id>http://www.m-oz.com/blog/blog.cgi?20090104</id>
    <updated>2009-01-04T06:25:15Z</updated>
    <content type="text"><![CDATA[あけましておめでとうござます m(_ _)m さてさて、遅くなってしまったけど、今年も目標を立てておこうと思う。  * Scheme 処理系を作る。 * お金を貯める。  とりあえずこの２つ。 後で追加するかもしれない。]]></content>
  </entry>
  <entry>
    <title>Intel G33 (DG33BUC) 機に Debian インストール成功!!</title>
    <link href="http://www.m-oz.com/blog/blog.cgi?20081223"/>
    <id>http://www.m-oz.com/blog/blog.cgi?20081223</id>
    <updated>2008-12-24T06:01:29Z</updated>
    <content type="html"><![CDATA[<img src="/blog/data/2008/12/debian-320x256.png" /><br /> lenny RC1 リリースのインストーラでは失敗。<br /> dailyビルドイメージ名刺サイズのisoファイルでうまくインストールできた。<br />]]></content>
  </entry>
  <entry>
    <title>[ORACLE] [SQL] [PERL] お仕事メモ</title>
    <link href="http://www.m-oz.com/blog/blog.cgi?20081212"/>
    <id>http://www.m-oz.com/blog/blog.cgi?20081212</id>
    <updated>2008-12-12T02:55:03Z</updated>
    <content type="text"><![CDATA[ ・レコードに行番号(連番)を割り当てる  	(1) ROWNUM を使う 		Ex: SELECT ROWNUM ,... FROM ... 		※注意※ ROWNUM は ORDER BY で並び替えを行う前に番号を割り当てる。  	(2) ROW_NUMBER を使う 		Ex: SELECT ROW_NUMBER() OVER (ORDER BY ...) ,... FROM ...  ・グループ毎にレコードに行番号(連番)を割り当てる  	(1) ROW_NUMBER と PARTITION BY を使う 		Ex: ROW_NUMBER() OVER (PARTITION BY ... ,... ORDER BY ... ,...)  ・Windows 環境で ActivePerl と Oracle を同時に使うには  	そのままだとライブラリの検索パスが衝突するので、以下のようにソース内でライブラリの検索パスを設定する。  	BEGIN { 		@INC = ('/Perl/site/lib','/Perl/lib'); 		$ENV{'NLS_LANG'} = 'Japanese_Japan.UTF8'; 	}  ・UTF8 で出力する  	binmode STDOUT,':utf8'; 	binmode STDERR,':utf8'; 	use utf8;  ・UTF8 フラグを付ける  	use utf8; 	utf8::decode($str) # 破壊的  	use Encode; 	$str = Encode::decode('utf8',$str);  Perl の Unicode まわりは悪夢のようだ...]]></content>
  </entry>
  <entry>
    <title>[Scheme] 言語仕様について</title>
    <link href="http://www.m-oz.com/blog/blog.cgi?20081208"/>
    <id>http://www.m-oz.com/blog/blog.cgi?20081208</id>
    <updated>2008-12-08T15:08:24Z</updated>
    <content type="text"><![CDATA[Scheme は理想的な言語だと書いたが... 実は気に入らないところもあったりする。  * マクロ   構文そのものを組み換える重要な機能だとは思うし、私もたまに使う。   けれど...何故かあまり好きになれない。   フィルタで実現できそうな気がする。   もちろん機能としてあったほうが良いとは思うけれど、   仕様としては、わざわざ入れる必要はあるんだろうか。  * eval   実行中にS式を評価する。言わばLispの奥の手ではあるが...   REPL にも大変お世話になっているが...   何故か使いたくないなぁ。なんでだろ。   これは言語の外側（外枠？）に属する機能のような気がする。  * R6RSライブラリで定義されている束縛は変更できない   この仕様は汚すぎる。   なんとかならなかったのだろうか。   ライブラリの束縛名が衝突したときにエラーが出るというのは、まぁ、ギリギリ許容範囲。   ライブラリの中も Scheme ではあるけれど、レイヤーが違うと納得できる。   しかし、プログラムの中で、特定の束縛を変更できないというのは、これはちょっと許せない。   括弧の内側は完全に自由なのが Scheme の良いところだと思う。   例えば define や if などの最も基本的な要素さえも他の束縛と同じように変更できる一貫した規則性が綺麗だと思う。   これだけは我慢ならない。なんとかしたいな。   次のR7RS(?)で文句を言えるよう英語を勉強しておこうか。]]></content>
  </entry>
  <entry>
    <title>[Scheme] 言語仕様について</title>
    <link href="http://www.m-oz.com/blog/blog.cgi?20081206"/>
    <id>http://www.m-oz.com/blog/blog.cgi?20081206</id>
    <updated>2008-12-08T14:19:49Z</updated>
    <content type="text"><![CDATA[プログラミング言語の仕様というのは、純粋に数学的な理論や概念のみで構築されていてほしい。また最小の構成であってほしいと思う。  Scheme の R6RS は必要最小限の言語仕様とライブラリの仕様を分けている。それ以外の派生的なライブラリやシステム環境に依存する機能などの仕様は、処理系実装者間の緩い約束事として SRFI という仕組みでまとめている。  この仕様の階層的な構造によって、単純な綺麗さを保ったまま、多彩な機能を実現することができる。  Scheme は私にとっては理想的な言語だぁね。]]></content>
  </entry>
  <entry>
    <title>[Scheme] [Gauche] 炬燵で写真の整頓</title>
    <link href="http://www.m-oz.com/blog/blog.cgi?20081130"/>
    <id>http://www.m-oz.com/blog/blog.cgi?20081130</id>
    <updated>2008-11-30T14:41:20Z</updated>
    <content type="text"><![CDATA[奮発して(?)コタツ買ってきた。 今年の冬はあったかく過ごせそうだ。  ↓はデジカメで撮った写真を整頓するために作ったファイル名を変更するスクリプト。  (use file.util) (use srfi-19)  (define (main args) 	(directory-fold "./photo" 		(lambda (path seed) 			(receive 				(d f x) 				(decompose-path path) 				(if (string=? "CIMG" (substring f 0 4)) 					(let ((newpath (build-path d (string-append 									(date->string (time-utc->date 											(make-time time-utc 0 (file-mtime path))) 										"~Y~m~d~H~M~S") "." x)))) 						(move-file path newpath :if-exists #f)))) 			seed) 		#f) 	0)]]></content>
  </entry>
  <entry>
    <title>[VB.NET] [ORACLE] お仕事メモ</title>
    <link href="http://www.m-oz.com/blog/blog.cgi?20081127"/>
    <id>http://www.m-oz.com/blog/blog.cgi?20081127</id>
    <updated>2008-11-29T09:30:52Z</updated>
    <content type="text"><![CDATA[VB.NET + ORACLE にて、接続文字列の Data Source に tnsnames.ora の中身をそのまま書いても接続できた。 これで tnsnames.ora が不要になる。  Dim conn As New OracleConnection("User ID=XXX;Password=XXX;Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=orcl)))") Try 	conn.Open() 	Dim cmd As OracleCommand = New OracleCommand("SELECT * FROM XXX", conn) 	Dim reader As OracleDataReader = cmd.ExecuteReader() 	Do While reader.Read() 		Console.WriteLine(reader.Item(0).ToString()) 	Loop Catch ex As Exception 	MessageBox.Show(ex.Message, "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error) Finally 	conn.Close() End Try]]></content>
  </entry>
  <entry>
    <title>[Scheme] [R6RS] import で束縛名を衝突させると</title>
    <link href="http://www.m-oz.com/blog/blog.cgi?20081126"/>
    <id>http://www.m-oz.com/blog/blog.cgi?20081126</id>
    <updated>2008-11-29T09:31:53Z</updated>
    <content type="text"><![CDATA[↓のように簡単な二つのライブラリを作成する。  	$ cat my/lib1.ss 	#!r6rs 	(library (my lib1) 		(export test) 		(import (rnrs base) (rnrs io simple)) 		(define (test) (display "LIB1") (newline)))  	$ cat my/lib2.ss 	#!r6rs 	(library (my lib2) 		(export test) 		(import (rnrs base) (rnrs io simple)) 		(define (test) (display "LIB2") (newline)))  ライブラリでそれぞれ test という名前で手続きを定義している。  	$ cat test.scm 	(import (my lib1) (my lib2)) 	(test)  そのまま import すると...  	$ plt-r6rs test.scm 	test.scm:2:0: module: identifier already imported from: (lib "my/lib1.ss") at: test in: (lib "my/lib2.ss")  エラーになる。(PLTの場合)  	$ cat test.scm 	(import (prefix (my lib1) lib1:) (prefix (my lib2) lib2:)) 	(lib1:test) 	(lib2:test)  プレフィックスを付けると...  	$ plt-r6rs test.scm 	LIB1 	LIB2  エラーにならない。]]></content>
  </entry>
  <entry>
    <title>[Scheme] 継続スレッド</title>
    <link href="http://www.m-oz.com/blog/blog.cgi?20081125"/>
    <id>http://www.m-oz.com/blog/blog.cgi?20081125</id>
    <updated>2008-11-25T14:55:13Z</updated>
    <content type="text"><![CDATA[前回(11/12)の継続を使った疑似並列処理をさらに考えてみる。 複数のループを扱えるようにしてみた。  (define loop 	(lambda (cc ls) 		(cond 			((pair? ls) 				(display (car ls)) 				(loop (and (procedure? cc) (call/cc cc)) (cdr ls))) 			((procedure? cc) (cc #f)) 			(else 'end))))  (let x ((ccs (list 			(call/cc (lambda (cc) (loop cc '(1 2 3 4 5)))) 			(call/cc (lambda (cc) (loop cc '(a b c d e f g)))) 			(call/cc (lambda (cc) (loop cc '(X Y Z)))))) 		(result '())) 	(if (pair? ccs) 		(let ((cc (call/cc (car ccs)))) 			(if (procedure? cc) 				(x (append (cdr ccs) (list cc)) result) 				(x (cdr ccs) (cons cc result)))) 		result))  (newline)  もうちょっと綺麗に書けそうな気がするな。]]></content>
  </entry>
  <entry>
    <title>どう書く？orgのお題 (215) に</title>
    <link href="http://www.m-oz.com/blog/blog.cgi?20081112"/>
    <id>http://www.m-oz.com/blog/blog.cgi?20081112</id>
    <updated>2008-11-12T14:27:52Z</updated>
    <content type="text"><![CDATA[継続を使った疑似並列処理なコード (#7985) を投稿した。 あれはあの条件なら動くが、よくよく考えると、 リストの長さがまちまちの場合にはうまく動かない。 修正版を考えてみた。  (define loop 	(lambda (cc ls) 		(cond 			((pair? ls) 				(display (car ls)) 				(loop (and (procedure? cc) (call/cc cc)) (cdr ls))) 			((procedure? cc) (cc #f)))))  (let ((cc (call/cc (lambda (cc) (loop cc '(1 2 3 4 5 6 7 8 9 10)))))) 	(if (procedure? cc) (loop cc '(A B C D E F G H I J)) cc)) (newline)  どう書く？のほうも修正できるといいのにね... 次からはもうちょっと慎重に考えてから投稿しよう。]]></content>
  </entry>
  <entry>
    <title>Java SE 6 Update 10</title>
    <link href="http://www.m-oz.com/blog/blog.cgi?20081023"/>
    <id>http://www.m-oz.com/blog/blog.cgi?20081023</id>
    <updated>2008-10-23T10:22:24Z</updated>
    <content type="text"><![CDATA[Sun JDK を 6u10 にバージョンアップした。 Applet の起動がかなり速くなったような気がする。 これなら Flash の代わりにも使えるんじゃなかろうか。]]></content>
  </entry>
  <entry>
    <title>文字列操作マクロ</title>
    <link href="http://www.m-oz.com/blog/blog.cgi?20081020"/>
    <id>http://www.m-oz.com/blog/blog.cgi?20081020</id>
    <updated>2008-10-20T09:03:49Z</updated>
    <content type="text"><![CDATA[この前 (10/14) のマクロの続き。 汎用的に使えるものを考えてみた。  (use srfi-13) ;; string-trim  (define-syntax $str-proc 	(syntax-rules (trim-both replace-all) 		((_ str) str) 		((_ trim-both str) (string-trim-both str)) 		((_ replace-all str r s) (regexp-replace-all r str s))))  (define-syntax $str 	(syntax-rules () 		((_ str) str) 		((_ str (proc x ...)) ($str-proc proc str x ...)) 		((_ str proc) ($str-proc proc str)) 		((_ str p1 p2 ...) ($str ($str str p1) p2 ...))))  ↓こんな感じに、文字列操作関数のネストをパラメータ的に記述できる。  (display 	($str "1234ABCD5678" 		(replace-all #/[0-9+]/ "+") 		(replace-all #/[+]/ (string #\space)) 		trim-both)) (newline)  これはなかなか実用的かも。]]></content>
  </entry>
  <entry>
    <title>今日のマクロ</title>
    <link href="http://www.m-oz.com/blog/blog.cgi?20081014"/>
    <id>http://www.m-oz.com/blog/blog.cgi?20081014</id>
    <updated>2008-10-14T14:43:59Z</updated>
    <content type="text"><![CDATA[Gauche には regexp-replace-all という文字列置換の便利な手続きがあるが、 ネストするとかっこわるいので、  (regexp-replace-all #/[A-Z]/ 	(regexp-replace-all #/[0-9]+/ "ABC1234GHI" "DEF") 		"abc")  まとめて書けるマクロを考えてみた。  (define-syntax $replace 	(syntax-rules () 		((_ str r s) (regexp-replace-all r str s)) 		((_ str r1 s1 r2 s2 ...) 			($replace ($replace str r1 s1) r2 s2 ...))))  string-tr も組み合わせて、 文字列操作に特化したマクロを考えてみるのもいいかもしれない。]]></content>
  </entry>
</feed>
