N-01A

docomo PRIMEシリーズ,NECのN-01Aを買いました.

タッチパネル,ディスプレイの回転,…などいろいろ機能満載.

これを機にケータイの入力方式をT9にしてみた.予測変換と組み合わせてうまくいけば確かに速い.学習が進むともっと速くなるかも.

このケータイ,結構いい感じなんですが,あえて問題点を挙げるなら,応答速度の悪さ.

ショップでいろいろ触ったけど,最近のケータイは全体的に応答速度が遅いような気がする.もうちょいサクサク動いて欲しい.OSのアップデートでなんとかならないのかな?

namazu

研究室のサーバに全文検索システムのnamazuをインストールした.

基本的にはここを参照してインストールした.

なんかインデックスがめちゃくちゃな気がする・・・.検索キーワードと検索結果が合ってるのか合ってないのかよくわからん.年明けに修正する.

いろんな言語で A happy new year!

print "賀正"
(define (main args)
(print "迎春")
)
#include <iostream>
int main(int argc,char *argv[]){
std::cout << "謹賀新年" << std::endl;
return 0;
}
public class NewYear{
public static void main(String args[]){
System.out.println("恭賀新年");
}
}

いろんな言語で新年の挨拶してみた.

よく使うプログラミング言語

  • C/C++
    • 研究用の画像処理プログラム全般(本業)
    • WindowsAPI(某所での授業用)
    • .NET Framework(C++/CLIでWindows向け小物)
    • ARToolkitで遊ぶ(EeePC上での開発)
  • Java
    • 以前作ったプログラムのメンテ程度
  • Ruby
    • 日常的な適当なスクリプト(主にLinuxでの小物)
  • Scheme (Gauche)
    • Gaucheの勉強
    • Gauche-glとかにも挑戦してみたい
  • PHP
    • PukiWikiのプラグイン作成とか
  • Java Script
    • Rhino / Spider Monkeyでいろいろ遊ぶとか
    • GreaseMonkeyのスクリプト
    • プロトタイプベースオブジェクト指向の勉強
  • vimスクリプト
    • 編集用の小物をいろいろ

PerlやPythonは使ったことない.読める程度.PHPできるしPerlも書けるんじゃないかな?Pythonは覚えたい.

あと,覚えたい言語はHaskell.最近関数型言語にはまりだしたので.

基本はCUIプログラムを作るけど,GUIが必要な時は,Linuxなら適当な言語+wxWidgets,WindowsならC++/CLIで作る.

Gaucheで文字列操作その2

昨日の続き.

正規表現で

(rxmatch #/test/ "hellotestworld")

というのがあるけど,よく使うので

(#/t\w*t/ "hellotestworld")

という略記法があるらしい.

で,このrxmatchはregmatchオブジェクトを返すが,それをそのまま実行すると,マッチ部分の文字列を得られる.

(define m (#/t\w*t/ "hellotestworld"))
(m)    ;  "test"

さらに,引数で’beforeや’afterを渡すと,そのマッチした文字列より前,後ろの文字列が得られる.

(m 'before)    ;  "hello"
(m 'after)     ;  "world"

複数マッチした場合は,引数にインデックスを渡してやると,対応する番号のマッチした文字列が返される.

(define m2 (#/(t\w*?t).(t\w*?t)*/ "hellotestworld hellothatworld")
(m2 0)     ; "testworld hellothat" (マッチした全体)
(m2 1)     ; "test"(1番目の括弧にマッチしたもの)
(m2 2)     ; "that"(2番目の括弧にマッチしたもの)

これらにも’beforeや’afterが付けられる

(m2 'before 0)   ; "hello"
(m2 'after  1)   ; "world hellothatworld"
(m2 'before 2)   ; "hellotestworld hello"

ふむふむ.

GaucheでFizzBuzzその2

前に作ったFizzBuzzをもうちょっとSchemeぽくしてみる.

以前は「関数型言語⇒再帰呼び出し」と思ってたので,再帰呼び出しで実装したけど,mapとか使えばさらにすっきり書ける.

というわけで.

#!/usr/bin/env gosh
(use srfi-1)
(define (fizzbuzz max)
(map (lambda (x)
(cond
[(= (modulo x 15) 0 ) "FizzBuzz"]
[(= (modulo x 3) 0 ) "Fizz"]
[(= (modulo x 5) 0 ) "Buzz"]
[else x]
)
)
(iota max 1)
)
)
(define (main args)
(print (fizzbuzz 30))
)

1から始まるmax個のリストをiotaで作り,それの各要素に対してmapでlambda式を適用していっている.

Gaucheで文字列操作できるの?

というわけでいろいろ試してみた.

まずはじめに文字の扱い.

文字は#\のあとにその文字を書く.h,e,l,l,oからなるリストは,

'(#\h #\e #\l #\l #\o)

でできる.

で,文字列.

文字列はほかのプログラミング言語と一緒で””で囲めばよい.helloという文字列は

"hello"

で表せる.

複雑な処理をしようと思うと,基本的にはsrfi-13という文字列ライブラリがあるので,それを使えばよい.

というわけで,最初に

(use srfi-13)

これでライブラリの読み込みができた.

で,

(string->list "hello")

とすると,文字列⇒リストの変換.

(list->string '(#\h #\e #\l #\l #\o)) ; "hello"

とすると,リスト⇒文字列の変換.直観的.

大文字,小文字の置き替えは,

(character-upcase #\a)     ; A
(string-upcase "hello")    ; HELLO
(character-downcase #\A)   ; a
(string-downcase "HELLO")  ; hello

でOK.

頭文字だけ大文字にする時は

(string-titlecase "hello world")   ;Hello World

でOK.

部分文字列の取り出しは

(substring "Hello World!" 6 11)    ;World

で,6文字目から11文字目の前まで取り出せる.

連結,分割も簡単

(string-append "hello" "world")       ; "hello world"
(string-join ("hello" "world") ", ")  ; "hello, world"
(string-join ("hello" "world") "||")  ; "hello||world"
(string-split "hello world" " ")      ; ("hello" "world")

正規表現は,#/正規表現/で表せる.

その正規表現にマッチするかどうかのテストは

(rxmatch #/test/ "hellotestworld")

マッチした結果を使って何かをしたいときは上のrxmatchを使って

(rxmatch-if (rxmatch #/test/ "hellotestworld") (str) str "not match")

これは,マッチすればマッチした部分を(str)に入れて,strを,そうでなければ”not match”を返す.要は if-then-elseな文.

マッチした文字列を置き換えたいときは

(string-replace #/test/ "hellotestworld" " TEST ") ; hello TEST world"

でOK.

文字列まわりの関数で使いそうなやつを一通りおぼえた.

EeePCで画像処理

出来そうなことのメモ。

  • 遊戯王みたいなゲーム
  • じゃんけんゲーム
  • 顔認識
  • 表情認識
  • 表情でのPC操作〓

カードを認識して3Dモデルを重畳するのとか簡単そう。

じゃんけんは手の形状認識。

表情認識は難しい。顔のパーツを検出→各表情と対応付けして学習。と、ちょっと面倒。

もっと面白いことできないかなぁ?何か作って公開したい。

EeePCのOSをeeeUbuntuへ変えた理由

UbuntuからeeeUbuntuに変えた理由は,EeePCのカメラが使えなかったから.Ubuntuのときにもいろいろドライバ入れたりして戦ったけど,結局うまくいかなかった.

で,eeeUbuntuをインストールすると,あっさり利用できるようになった.

カメラを何に使うか?ですが,普通の人は,Skypeとかに使うと思う.しかしッ!画像処理屋がカメラを使うと…どこでも画像処理プログラムが書ける!顔認識,ジェスチャ認識,何でもできる!可能性が広がります.