Oh! Can Not Diary

おきゃんなダイアリー

reverse

テスト。

(define A "abcde")
(define B "1234")

(define rev-list
  (lambda (list new-list)
    (cond
     ((null? list) new-list)
     (else (rev-list (cdr list) (cons (car list) new-list))))))

(define rev
  (lambda (str)
    (cond
     ((null? str) null)
     (else (list->string (rev-list (string->list str) '()))))))

(rev (string-append (rev A) (rev B))) ;1234abcde

reverse

例の30minプログラミングから。

問題1

文字列 A と B があり、C を A+B とする。文字列を逆順にする関数 rev() をつかって、
rev(rev(A) + rev(B)) という操作をすると結果はどうなるか。
まず予想したあと、実際にプログラムを書いて確かめよ。
例: A="abcde"、B="1234"、C="abcde1234"

予想はC="1234abcde"
Schemeで書きました。

(define A "abcde")
(define B "1234")

(define rev-list
  (lambda (list new-list)
    (cond
     ((null? list) new-list)
     (else (rev-list (cdr list) (cons (car list) new-list))))))

(define rev
  (lambda (str)
    (cond
     ((null? str) null)
     (else (list->string (rev-list (string->list str) '()))))))

(rev (string-append (rev A) (rev B))) ;1234abcde

# ハイライトされてないけど…

実行結果
http://ideone.com/oXJPh
# ideoneだとwriteしないとoutputに出なかったのでちょっと変えています。

rev()を使ってswapができますよという話でした。でも再帰向いてないですよね。
あとこの時の勉強会で、何割のプログラマが再帰を使ったプログラムが書けるかという話になり、9割、3割、1割、1%という意見が出ました。さあどれくらいいるでしょう。

30minプログラミングのこと

私はいま客先常駐の身なのですが、常駐組の同僚数名で週一回、昼休みにスマホ勉強会というのを開催しています。雑談で終わる時もあるゆるい感じですが、私が常駐始めた時には既に始まっていたので、なんだかんだで2年以上続いていることになります。そもそもAndroid勉強会という名前だったのが、私がiPhoneにしたこともあってスマホ勉強会になったといういきさつがあります。が、いまやスマホも関係なくなっています。ちょっと前まではカードゲームとかやっていました。(フランスのDixitとか。これはこれで面白かった。)で、最近はというと、オフラインという環境を生かしてネットレスコーディング修行というのをやっています。制限時間30分、言語自由、調べていいのは言語仕様のみというルールでその日の用意された課題から選んでプログラムを書いています。実際は、昼ごはん食べ終わってからとりかかると10分ぐらいしかありませんが…。私はいつもSchemeで挑戦してますが、上司が苦笑いしているのでそろそろPythonとかにしたほうがいいかなと思っています!!!しかし、2年前とはAndroidをとりまく環境も変わりましたし(HT-03Aが出たばかりでした)、勉強会の情報共有の手段もGoogle WaveからGoogle+に移行しましたし、時間の流れをしみじみと感じる今日この頃ですね。

diredメモ

先日の関西Emacs勉強会で、「diredでファイルとか開くときに今のディレクトリを表示したままにしたい」という話が出たような気がするんですが、私もとっさに出てこなかったりしたので、関連するコマンドをメモしておきます。

  • i

指定したサブディレクトリの内容をバッファの終りに追加する。

  • o

ファイルのバッファを別のウィンドウに表示する。ウインドウが分割されて、選択ウインドウもうつる。

  • c-o

ファイルのバッファを別のウィンドウに表示する。ウインドウが分割されるけど、選択ウインドウは今のウインドウのまま。


このoとC-oの微妙な違いが、Emacsらしいというか、奥が深くて好きです。

NyARToolKit for ProcessingをMacBookで試してみた

NyARToolKit for ProcessingのサンプルアプリをMacBookで動かしてみました。

ダウンロード

まずはNyARToolKit for Processingをここからダウンロード→http://sourceforge.jp/projects/nyartoolkit/releases/?package_id=8920
わたしが落としてきたのはnyar4psg-1.1.4です。

外部ライブラリ追加

そのままでサンプルアプリを動かしたら、ライブラリみつからんで!って怒られるので、Processingの外部ライブラリの追加方法を調べます。で、以下の通りいくつかあることがわかった。
(参考)"[Processing][仕様]外部ライブラリ(*.jar)の設置方法 : うえちょこ@ぼろぐ"
http://labs.uechoco.com/blog/2008/03/processingjar.html

codeフォルダに置く

nyar4psg-1.1.4/example以下にいくつかサンプルアプリがあり、それぞれにcodeフォルダがあるので、その中にnyar4psg-1.1.4/library/以下の*.jarをコピーします。(*.jarファイルだけ。)

ただし、当然アプリ毎にやらなきゃいけないので面倒ですよね。

ライブラリシステムを使う

いくつか規約があってややこしいですが、とりあえず…

Processing/Resources/java/modes/java/libraries以下に
・Nyar4psg/library/Nyar4psg.jar
・NyARToolkit/library/NyARToolkit.jar

というフォルダ構成でjarファイルをコピーします。

それからProcessingを再起動し、Skecheメニュー→import Libraryを選択すると、
Nyar4psgとNYARToolkitが増えてるので二つともクリックしてimportします。

すると、ずらずらっとimport文が出ます。多いですね。

マーカを用意

もうあとはマーカをかざすだけです。簡単ですね。
と思いきや(わかってたけど)問題発生。Hiroマーカが手元ありません。プリンタもありません。本は会社。

iPhoneでHiroマーカの画像検索して試してみましたがだめでした。

これは明日かなーと諦めかけましたが、暇だったので手書きでマーカを書いてみた。

f:id:oh_cannot_angel:20110623232355j:image:w360
さすがに適当すぎるかな〜wと思いつつかざすと…








f:id:oh_cannot_angel:20110624004341p:image


動いたー
マーカもすばやく認識してくれました。

どうでもいいですが、こういう写真に手が映るとなまなましくて嫌ですね。

まとめ

(手書きマーカでも)動いた

本家でも動くかもしれませんが、これくらいなら認識してくれるようです。

3Dプログラミング手軽にいろいろできそう

ARToolKitOpenGLとかメタセコとか難しそうで手を出しにくいイメージがありましたが、
Processingだったらもっと手軽にできそうでいいですね。

モテるEmacs女子力を磨くための4つの心得

こんにちは、BL文学を専攻しているおきゃんです。私はEmacsでメールもネットも見たりしませんが、Emacs恋愛に関してはプロフェッショナル。今回は、モテるEmacs女子力を磨くための4つの心得を皆さんにお教えしたいと思います。

1. あえて21を使う

あえてバージョン21のEmacsを使うようにしましょう。そして飲み会の場で好みの男がいたら話しかけ、わざとらしくEmacsを立ち上げいじってみましょう。そして「あ〜ん! このEmacs本当にマジでチョームカつくんですけどぉぉお〜!」と言って、男に「どうしたの?」と言わせましょう。言わせたらもう大成功。「Emacsとか詳しくなくてぇ〜! ずっとコレ使ってるんですけどぉ〜! フォント汚いし使いにくいんですぅ〜! ぷんぷくり〜ん(怒)」と言いましょう。だいたいの男は新しいバージョンのEmacsを使いたがる習性があるので、古かったとしても22を使っているはずです。

そこで男が「新しいバージョンにしないの?」と言ってくるはず(言ってこない空気が読めない男はその時点でガン無視OK)。そう言われたらあなたは「なんかなんかぁ〜! 最近24とかsomethingが人気なんでしょー!? あれってどうなんですかぁ? 新しいelisp作りたいんですけどわかんなぁぁああい!! 私かわいそーなコ★」と返します。すると男は「23でしょ? 24はまだ開発中だよ。それにsomethingじゃなくてanythingね。本当に良くわからないみたいだね。どんなelispが作りたいの?」という話になって、次の休みの日にふたりでanythingプログラミングできるというわけです。あなたの女子力が高ければ、男がついでに晩ご飯も作ってくれるかも!?

2. ピンクのカラーモードを使うとモテる

カラーモードをピンクにしていると、多くの男性ユーザーは「なんかこの子カワイイなぁ」や「支えてあげたいかも」と思ってくれます。男性は比較的ダークなテーマを使うことが多いので、あなたを可憐で女の子らしいと勘違いしてくれるのです。そういうテーマにするとほぼ絶対に同性に「ほんとは見にくいくせに」と陰口を叩かれますが、気にしないようにしましょう。
f:id:oh_cannot_angel:20110510024544p:image

3. とりあえず男には「えー! なにそれ!?  知りたい知りたーい♪」と言っておく

飲み会などで男が女性に話すことといえばeshellや入力システムの話ばかり。よって、女性にとってどうでもいい話ばかりです。でもそこで適当に「へぇーeshellって便利なんですかぁ〜?」とか「よくわかんないですけどT-Codeってすごいんですねぇ」と返してしまうと、さすがの男も「この女まさかターミナルアプリ使ってるのか? T-CodeどころかSKKも使ってないなんてダメEmacserだな」と気がついてしまいます。ダメEmacserだとバレたら終わりです。そこは無意味にテンションをあげて、「えー! なにそれ!?  知りたい知りたーい♪」と言っておくのが正解。たとえ興味がない話題でも、テンションと積極性でその場を乗り切りましょう。積極的に話を聞いてくれる女性に男は弱いのです。
いろいろと話を聞いたあと、「eshellはlsやgrepが自前で実装されてて、T-Code使ってる人は全員変態なんですね! 覚えたぞぉ! メモメモ!」とコメントすればパーフェクト。続けて頭に指をさして「カチカチカチ! カチカチカチ!」と言って、「どうしたの?」と男に言わせるのもアリ。そこで「C-x C-sして私のハードディスクに保存しているのでありますっ☆」と言えば女子力アップ! そこでまた男は「この子おもしろくてカワイイかも!?」と思ってくれます。私は学歴も知識もありませんしブスですが、こういうテクニックを使えば知識がない私のようなEmacs女子のほうがモテたりするのです。男は優越感に浸りたいですからね。

4. key-chordを使えない女をアピールせよ

男とペアプロ状態に入ったら、ネットでkey-chordの紹介記事を探して「あーん! 私これ使えないんですよねぇ〜(悲)」と言いましょう。するとほぼ100パーセント「どうして? 嫌いなの?」と聞かれるので、「嫌いじゃないし使いたいけど使えないんですっ><」と返答しましょう。ここでまた100パーセント「嫌いじゃないのにどうして使えないの?」と聞かれるので、うつむいて3〜5秒ほど間をおいてからボソッとこう言います。「……だって、……だって、key-chord使ったらControlキーいらないじゃないですかぁっ! 小指さんかわいそうですぅ! まだEmacs小指になってないのにぃぃ〜(悲)。小指さんももっとControlキー押したいって言ってますぅ……」と身を震わせて言うのです。

その瞬間、あなたのEmacs女子力がアップします。きっと男は「なんて優しい天使のようなコなんだろう! 絶対にゲットしてやるぞ! コイツは俺の女だ!」と心のなかで誓い、あなたに惚れ込むはずです。意中の男と付き合うことになったら、そんなことは忘れて好きなだけkey-chordを使って大丈夫です。「使えないんじゃなかったっけ?」と言われたら「大丈夫になった」とか「慣れた」、「小指痛い」と言っておけばOKです。

(文=腐女子Emacser・おきゃん)