!kiyoka.blog.2011_10 RSSPLAIN

Related pages: !kiyoka.blog.list
5555555222222222222222222222222022255445555555555555555555555555555555555550555225222222522222222222222222222222222522222222255533352225055555555555555555555555555555555555550555555555555555555555555055555555555555555505555515555515515555555555555555515555555555555555555505555555555555555550555555555555555555505555555555555555555555505555555555555555555555555555555555555555555555555555505
5

kiyoka日記。NendoSekkaの開発や、最近思うことなど

5

最新10件!kiyoka.blog   過去記事一覧!kiyoka.blog.list

5

kiyoka.blog_header 

5

このブログを書いている人: 西山 清香(kiyoka) - twitter: @kiyokaEXT

5

5

 

5

 

2

kiyoka.2011_10_28[Nendo] Nendo 0.6.0 リリース

2

Nendo 0.6.0をリリースしました。(リリースノート: Nendo.ReleaseNote)

2

rubygems_icon_128

2

リリースの概要

2

nendo.rbをファイル分割しただけで、挙動は0.5.4から変化ありません。

2

ファイル分割しただけですが、ソースコード管理上は大きな変化であるということ、機能的に安定していることの二つの理由から、マイナーバージョン番号を0.6.0にを上げました。

2

 

2

以下リリースノートです。

2

version 0.6.0

2
nendo.rbを機能ブロックごとに以下のファイルに分割した。
2
  ruby/types.rb
2
  ruby/reader.rb
2
  ruby/builtin_functions.rb
2
  ruby/evaluator.rb
2
  ruby/printer.rb
2
  ruby/core.rb
2
  ruby/out_of_module.rb
2

 

2

 

2

次の目標

2

version 0.5.4の時から変化なしです。

2

参考 (kiyoka.2011_10_26 [Nendo] Nendo 0.5.4 リリース)

2

 

2

 

0

comment (disabled)

2

2

 

2

 

5

kiyoka.2011_10_27[スマートフォン] どうしたらAndroidアプリで儲けられるのか? という発想自体が間違い。

5

アプリで儲けるという発想自体が間違いであると思っている。

4

3619129333_460863c451_m

4

 

5

アプリ単体で売る発想だとゲームをヒットさせるという話しか残らなくなるだろう。

5

みんなでAngry Birdを目指してどうする。

5

これは、どうしたら音楽業界で一山当てられるのかという感覚に似ている。

5

そのためには、まずギターを弾けるようになろう。ってなんか安易すぎないか?

5

 

5

しかーし、世間ではそれに似た話がまかり通っているようなので紹介する。

5

 

5

先日テレビでTHE PRIMEという経済番組?を10分ほど見た。

5

ある地方でスマートフォンアプリの開発講習会に1000人規模の生徒がくるというような状況を取材していた。

5

まさにアプリ開発はレッドオーシャン。アプリ開発自体に未来はない。

5

ここまでされると技術的にもニッチでは無い。スマートフォンが普及して目に触れる機会が増えた関係で、さて自分もできるんじゃないかと思えるようになっただけなんじゃないかな。単なる流行だ。

5

 

5

番組では、地域経済の活性化の名目でスマートフォンアプリ開発者を養成する方向で行政が動き、スマートフォンアプリ開発が活性化しているという紹介の仕方だった…

5

音頭をとった人が、表面的なことしか知らない人(行政側?)なんではと推測してしまう。たぶんそうなんだろう。

5

 

5

これで儲かるのは、講習会をやる側の企業だけだと思うけどなぁ。

5

まさにエクセル、ワードの使い方講習会の現代版というやつだ。

5

実際に講習会を卒業した個人開発者はアプリを出してみたものの、小遣い稼ぎにしかならないという悲しい結末も紹介。

5

ちゃんと食べて行ける人は、結局スマートフォンアプリの受託でやっている人だけみたいだ。

5

 

5

番組のレベルの低さを脇に置いてまじめに書くと、ちゃんと儲けようと思ったらサービスが主軸になっている必要がある。アプリはUIのおまけであって大事なのはサービス開発だと思う。

5

テレビ番組としてはキャッチーなところだけを取り上げて素人にもわかる構成にしているのもあるのだろうけど。

5

自分としては、1000人規模のアプリ開発者が毎年養成されているという不可思議な現実を知れてよかったのだけど。

5

 

5

こちらは、もう少しちゃんとしてそうな開発者向けの記事。

5
 アイデアと開発力があっても「なかなか儲からない」-- アプリ開発者が抱く不安と課題とは - インターネットコムEXT
5

 

5

とはいえ、この記事でも「センス」や「感動」や「驚き」という言葉を使って

5

いてるので同じといえば同じか…「アプリ開発者」というキーワードに終始し

5

ているけど、「アプリ開発者」ってなに?

5

 

5

自分はスマートフォンアプリは作る予定は無いのだけど、Webサービスを作っていって必要になった段階で作るかもしれない。

5

単にサービスへのアクセス対応デバイスを増やすという意味しか無いけど…

5

そんなにアプリ開発者がいるんなら作ってもらってもいいかな(笑)

5

 

5

 

0

comment (disabled)

5

5

 

5

 

2

kiyoka.2011_10_26[Nendo] Nendo 0.5.4 リリース

2

Nendo 0.5.4をリリースしました。(リリースノート: Nendo.ReleaseNote)

5

rubygems_icon_128

2

リリースの目玉

2

例外をハンドリングできるようになりました。道具立てはguardとunwind-protectです。

2

GaucheとAPIをなるべく似せて、Gaucheに慣れた人が新しく覚えることを少なくしました。 (Nendo.ReferenceManual のguardのあたり参照)

2

テストフレームワークの nendo.testもgauche.test同様のAPIにしています。

2

Gaucheは独自の例外オブジェクトを持っていますが、Nendoでは例外オブジェクトとしてRubyのそのものを使うことになっているので、Rubyのオブジェクトをそのまま指定できるようにしました。

2

RuntimeErrorやArgumentErrorやTimeout、Errno::ECONNREFUSEDなんかがそのまま書けます。

5

 

2

GaucheとRubyの両方知っている人は、(exc.is_a? TypeError)のくだりなんかは非常に気持ち悪いかもですね。GaucheとRubyのどっちになりたいんだよと。

2

例)

2
(guard
2
 (exc (else (sprintf "Type is [%s]" (exc.class))))
2
 (error "This is RuntimeError"))
2
 → "Type is [RuntimeError]"
2

 

2
(guard
2
 (exc (else (sprintf "Type is [%s]" (exc.class))))
2
 (raise ArgumentError))
2
 → "Type is [ArgumentError]"
2

 

2
(guard
2
    (exc ((exc.is_a? RuntimeError)
2
          "Type is [RuntimeError]")
2
         ((exc.is_a? TypeError)
2
          "Type is [TypeError]"))
2
  (+ (Array.new) 1)
2
  (error "This is RuntimeError"))
2
 → "Type is [TypeError]"
2

 

2

ついでにguardを使って、unwind-protectも実装しました。

2

Nendoでも衛生的なマクロ(syntax-rules)をサポートしたおかげで、このようなマクロもあっという間に書けるようになりました。

2

だいぶライブラリが積み上ってきた感があります。

2

 

2

 

5

以下リリースノートです。

2

version 0.5.4

2
guardフォームをサポートした。
2
unwind-protectフォームをサポートした。
2
raiseフォームの引数を可変長引数にした。
2
 Gauche 0.9.2の仕様に似せた。
2
テストフレームワーク nendo.test に期待した例外が上がるかどうかテストする機能を追加した。
2
 Gauche 0.9.1に付属のgauche.testをポーティングし、(test-error <例外>)関数などを実現した。
2
util.listのテストケースにRuntimeErrorが発生するテストケースを追加した。
2
 Nendo 0.5.3まではコメントアウトしていたもの。
5

 

5

 

5

次の目標

3

もうそろそろNendoで実践的なWebサービスを作っていってもだいじょうぶかなと思い始めました。

3

Webフレームワーク、ドキュメントStore(MongoDB)などと組み合わせて使う場合、どんなやりかたが良いのかを考えながらライブラリを拡張していきたと思います。

3

それから、副作用のあるコードブロックのチェック機能(pure S式)もぼちぼち考えていきます。こちらは優先度低いです。

5

 

2

あっ、その前にリファクタリングする予定がありました。

2

nendo.rbの行数がとんどもないことになっているので、ファイル分割します。

2

それからいろいろ手をつけていきます。

5

 

0

comment (disabled)

5

5

 

5

 

5

kiyoka.2011_10_15[Sekka] Sekka 0.9.5 リリース

5

SKKライクな日本語入力メソッド Sekka 0.9.5をリリースしました。(リリースノート Sekka.ReleaseNote)

5

 

5
 NbpKsE
5

 

5

大きな変更点は、sekka.elのカスタマイズ変数のデフォルト設定変更です。

5

 

5

これまで、Ctrl-Jとスペースキーの両方で変換確定する操作をデフォルトで有効にしてきましたが、今回スペースキーでの変換確定を無効に戻しました。

5

スペースキーで変換確定する操作はMS-IMEなどの一般的なIMEと操作感が同じになるため、良い面もありますが、Sekkaの最大の特徴である「モードレス」が失なわれるという大きな問題がありました。

5

(スペースキーの挙動を止めるためにCtrl-Gを押して、日本語変換モードを抜ける必要がある)

5

 

5

プログラミング中に日本語コメントや文章を入力する頻度が高くなるとモードレスでないとモード切替忘れによる入力ミスが出ます。

5

数ヶ月使ってみて、やはりSekkaのアイデンティティはモードレスでないといけないと思い至りました。

5

sekka.before_henkan

5
   ↓[Ctrl-J]を押す。
5

sekka.after_henkan

5

 

5

変換モードがあっても許せる人なら、カスタマイズ変数でスペースキーでの変換を有効にしてもらう、もしくはSKKなどを使ってもらえればいいと思います。:(

5

 

5

 

5

version 0.9.5

5
sekka.el: url-host関数が呼び出せず、mode-lineのSekka[]の表示が消えるバグを修正した。
5
  (require 'url-parse)が必要だった。
5
sekka.el: sekka-kakutei-with-spacekey のデフォルト値を nil に戻した。
5
sekka.el: sekka-muhenkan-key のデフォルト値をnilに設定した。
5
 また、指定したキーをkeymapに設定する必要があるので、カスタマイズ変数でなくした。
5
 例えば、.emacsで(setq sekka-muhenkan-key "q") する必要がある。
5
sekka-serverの辞書追加/既に登録済みのメッセージをシンプルなものに変更した。
5

 

5

 

5

次の目標

5

Nendoに新しい例外処理機能を付けている最中です、その機能を使って例外まわりのテストを拡充する予定です。

5

 

5

 

0

comment (disabled)

5

5

 

5

 

5

kiyoka.2011_10_09[Youtube] Youtubeを使った編集無しのマッシュアップ遊び

5

これすごい。

5
   Impossible Youtube duet: Miles Davis improvising on LCD Soundsystem
5

 

5

 

5

 

5

と思ったけど、自分でもそこそこできるじゃん。ピッタリ合うわけじゃないないけど。

5

Sadeの歌い出しでMilesのVideoの再生ボタンを押すとそこそこ合う。

5
   Sade - Cherish The Day
5

↑の再生が23秒くらいになったタイミングで↓の再生ボタンを押してみよう。

5

Milesのほうのボリュームを大きくしたほうが、バランスが良いかも。

5
   Miles Davis - Louis Malle's Elevator To The Gallows Recording Session
5

 

5

 

5

というか、このVideoでもそこそこできるじゃん。

5

これも歌い出し(43秒あたり)でMilesのVideoの再生ボタンを押してみてほしい。

5
   Sade (17/17) - Jezebel       - YouTube
5

 

5

Jazzのインプロビゼーションというのはなんといいかげんなことよ。

5

Milesのが映画音楽だからなんにでも合うのかな。

5

 

0

comment (disabled)

5

5

 

5

 

5

kiyoka.2011_10_08[Jazz][Youtube] 楽譜をなぞるアニメーション付きJazzシリーズが楽しい

5

速いフレーズで知られるチャーリー・パーカーとかジョン・コルトレーンとかは自分が聴き慣れている分楽しめる。

5

やっぱりアニメーションで見てもフレーズが速いぞこの人たち。

5

 

5
   Confirmation by Charlie Parker
5

 

5
   Giant Steps by John Coltrane
5

 

5

So Whatも相当聴いたので楽しい。Bill EvansファンなのでMiles Davisよりもそっちに目がいきがちだけど。

5

Miles Davisの少ない音数とColtraneの無駄に多い音数の対比を目で見るという楽しみも。

5
   So What by Miles Davis (Clean Audio)
5

 

5

残念ながら、このシリーズはYoutubeへの登録数が少ないなぁ。もっと登録してくれー。

5

 

5

 

0

comment (disabled)

5

5

 

5

 

5

kiyoka.2011_10_07[Nendo][Ruby] コードブロックに副作用が混在するかを検出できるかどうか

5

 

1

先日のScalaの本からの流れで勝手に盛り上ってしまっている話題を前へ進めてみる。

5

 

5

さて、Nendoにimmutableなコードブロックを保証するスペシャルフォームを追加したいと考えている。

5

こんな感じ。もしコード中に破壊的操作を行うメソッドが混在していたら、例外を発生させる。

5
(immutable S式)
5

 

1

immutableはNendoの予約語で、引数に取ったS式はマクロ展開されたあと破壊的操作が無いかを検査される。

5

ランタイムではなくて、コンパイルフェーズでチェックができればベスト。

5

これができたら画期的だと思う。

1

やりたい理由は、テスタビリティの確保だ。破壊的操作が無いコードはテストコードが非常に書きやすい。

5

 

5

破壊的操作があるプログラムは、環境を用意するのも一苦労だ。

5

以下の引用は、テスト環境を用意するのが大変という話を説明するのにもってこいのやつ。

5
 4274068471  Coders at Work プログラミングの技をめぐる探求
5
  Joe Armstrong
5
   「再利用性の欠如はオブジェクト指向言語から来るもので、関数型言語では
5
   話が違います。オブジェクト指向言語の問題は、それが周りに引きずってい
5
   る暗黙の環境にあります。バナナが欲しかったのに、手に入れてみたら、バ
5
   ナナを握ったゴリラと、それにジャングルまでついてきたというようなもの
5
   なのです。」
5

つまり、オブジェクト指向の方法ではテストデータや環境を準備するための依存を断ち切るのが非常に困難だということだ。

5

 

5

話を戻して、破壊的操作のある/なしを切り分けることが本当にできるのか?というのは、今はできると思っておいたほうが楽しいので、しばらくはつっこまないで頂きたい(笑;)

5

難しいと思っている理由は、いろいろあるんだけど、NendoはRubyへのトランスレータとして実装しているので、ターゲットが生粋のオブジェクト指向言語だというところ。

5

 

5

オブジェクト指向は、基本的にはオブジェクトに状態を持つパラダイムであり、オブジェクトの状態を変更しながらプログラムが走行させるのが基本だ。

5

つまり、状態の破壊的操作が基本にあるということ。

1

かたや、私がやりたいのはあるコードブロック内では非破壊的なメソッドだけを集めてプログラミングしたいという要求であり、Rubyを選んだ時点で矛盾があるような気もするが…

5

(ただ、似たような状況に立っている言語のScalaがうまくやっているということわかったので少し楽観的だ)

5

 

5

図で説明してみる。

5
 8ju3sHEwIE6iWrI5-B7327
5

 

5
 8ju3sHEwIE6iWrI5-2299F
5

 

5
 8ju3sHEwIE6iWrI5-AFB4E
5

 

5

いくら書いても、具体的にどうやればできるという話が出てこないけれども、それはこれから考えるのだよ(笑)。

5

最後の手段としては、人間が慎重に破壊的操作の無いメソッドを選び出してリストを作るということになるのだけど…

5

ブラックリストではなく、ホワイトリストになるのかな。

5

因みに、ScalaではSet/Mapはひとつの親クラスからimmutable版とmutable版のそれぞれをtraitで継承して作りだしている。Listはimmutable版しかなくArrayはmutable版しかない。あとはプログラマが慎重に部品を選びなさいというような感じだと思う。(本を読んだだけのレベルだけど)

5

 

5

Nendoはどうするか。これからじっくり考えます。

5

 

5

 

5

COMMENTshiro

コンパイル時にやるには、型情報があった方が圧倒的に楽ですね。生のSchemeの場合、そこから参照している手続きを全部追っかけていかねばならず、結局それはその場で一種の型情報をつけようとするのと同じですから。参照透明かどうかって情報だけ追えば良いので完全な型付けほど大変じゃないですが、外から引数で渡される関数なども追っかけることになるので、グローバルなプログラムの解析になりそうです (外から渡される関数引数に型情報をアノテートできるようにしていれば別ですが)。

あと、immutableは「対象が変更不可」という形容詞だと思うので、変数やオブジェクトに対して使う形容詞であって、「式」に対して使うのは違和感があります。式に対して形容するならreferentially transparentが正確だと思いますが、長いので (pure <式>) とかかな? (no-side-effect <式>) はちょっとださいし。

5

COMMENTkiyoka

コメントありがとうございます。

shiroさんのコメントを読むまで、外から渡される関数に思い至っていませんでした。そうか、それもありますね。

参照透明かどうかをグローバルに解析しないといけないのは大変ですね。Rubyのライブラリクラスのメソッドが参照透明かどうかを自動で検査するのも難しいという問題もあります。

やはり参照透明な関数や変数(というか定数)をリストアップするホワイトリスト方式が有力なのかもしれません。

それはある意味、型情報のアノテーションを手作業でやるということに相当するのかな。

ホワイトリストなので、必要な分だけをアノテーションすればいいので始めやすいですが、関数が増えるごとに手作業で追従しないといけないのが難点です。

漏れが出ると便利さが半減するので…

5

COMMENTkiyoka

もうひとつ。immutableは形容詞ですね。(pure <式>) がかっこいいので実現できたらこれにするかもしれません。但し実現できたらの話ですが。 :)

0

comment (disabled)

5

5

 

5

 

5

kiyoka.2011_10_06[Sekka] Sekka 0.9.4 リリース

5

SKKライクな日本語入力メソッド Sekka 0.9.4をリリースしました。(リリースノート Sekka.ReleaseNote)

5

 

5
 NbpKsE
5

 

5

緊急バグ修正リリースです。sekka.elに3つのsekka-serverを自動切替する機能を付けた時、どこにも接続できなくなるバグを埋め込んでました。

5

その修正です。

5

 

5

version 0.9.4

5
sekka.elが変数の初期化不良でsekka-serverに接続できないバグを修正した。
5
  変数 current-sekka-server-url の初期化不良
5

 

5

次の目標

5

Nendoに新しい例外処理機能が付く予定なので、その機能を使ってテストを拡充する予定です。

5

 

0

comment (disabled)

5

5

 

5

 

5

kiyoka.2011_10_05[Scala][Nendo] Scaleの関数プログラミングのアプローチについて(3)

5

しつこくScalaについて調べる。使うのはこの本。

5
 0981531644  Programming in Scala: Martin Odersky, Lex Spoon, Bill Venners
5

 

5

第7章で「Refactoring imperative-style code」というタイトルを見つけたのでその章をじっくり読む。

5

varを見つけてはvalを使うコードに変換し、副作用のあるコードを排除し、ループ変数を使ったコードからimmutableなコレクションと高階関数の組みあわせに書きかえていくという内容。

5

ただ、どこまでもやったらリファクタリング完了なのかは書いていない。どこまでもやったら副作用の無いコードになったのかを確認する術も書かれていない。

5

やっぱりそんな仕組みは無いのかな。

5

自分は、ずっとそこに拘っているけど、一般人はそこまで拘るものでは無いのかなと思えてきた。「現場のプログラミングの世界ではそこまで拘っても別のところのコストの下にかくれて誤差の範囲になるんだよ」というような声が聞こえてくるような気がした。

5

しかーし、ここは気を取りなおして、副作用の無いコードと十分な件数のテストコードの安心感を体で知っている自分としては、とことん拘っていくつもりだ。

5

ScalaができていないならNendoが達成してやろうじゃないかというところだ。

5

もしそれがいいものであったら、べつの言語に輸出すればいい。

5

 

5

今回の調査ではScalaからは盗めなかったけど、Nendoは独自に考えてimmutable範囲チェックを実現してみたいと思う。

5

 

5

 

0

comment (disabled)

5

5

 

5

 

5

kiyoka.2011_10_04[Sekka] Sekka 0.9.3 リリース

5

SKKライクな日本語入力メソッド Sekka 0.9.3をリリースしました。(リリースノート Sekka.ReleaseNote)

5
 NbpKsE
5

 

5

Emacsから接続するSekkaサーバを複数登録しておき、生きているサーバを自動的に使うようにしました。

5
 zHiv
5

 

5

version 0.9.3

5
sekka.elに最大3つの接続先sekka-serverのURLを登録できるようにした。
5
カスタマイズ変数 sekka-server-url、sekka-server-url-2、sekka-server-url-3の3つ。
5
第一サーバが落ちていたら、第二サーバ、第三サーバを順に試す。
5
モードラインに接続中のsekka-serverのホスト名を常に表示する。
5
  これにより、ユーザが意識しなくても自宅で変換した時は自宅サーバーの
5
  sekka-serverを使い、オフラインで変換した時は、localhostの
5
  sekka-serverを使うという運用ができる。
5

 

5

 

5

次の目標

5

Nendoに新しい例外処理機能が付くのでそれを使って、テストを拡充する予定です。

5

 

0

comment (disabled)

5

5

 

5

 

5

kiyoka.2011_10_03[Scala][Nendo] Scaleの関数プログラミングのアプローチについて(2)

5
 4274068579  7つの言語 7つの世界: Bruce A. Tate
5

Scalaの章を読了した。

5

しかしこの本だけでは、Scalaがどうやって破壊的操作を検出するか/あるいはしないのかについての全体像はわからなかった。

5

わかったのは、varとvalがあり、valが破壊的操作を許さない変数を定義するためのもので、静的に破壊的操作を禁止するものだ。

5

ものによっては静的には検出できないので、その場合はランタイムで破壊的操作のエラー(例外)が出るというレベル。かなり浅い。

5

 

5

そこで、次の本で調べ始めた。

5
 0981531644  Programming in Scala: Martin Odersky, Lex Spoon, Bill Venners
5
 
5
 ※ 後で知ったが、下のリンクで本の中身が公開されている。
5
 紙の本でいうとChapter 2だ。
5
 First Steps to ScalaEXT
5
 Summary In this article, you'll follow twelve steps that are designed
5
  to help you understand and gain some basic skills in the Scala
5
  programming language.
5

 

5

 

5

さっそく、O'REILLY Safari Bookshelfで上記「Programming in Scala」を本棚

5

に登録し、まえがきにも、チュートリアルの章にも目もくれず、目次から一直線

5

に「Chater 17のCollectionsの章」にジャンプした。

5

そこから、「前のChapterで説明した…」とかのリンクを辿ること数回、次の文

5

章に辿りついた。どうも各Collection型の操作ライブラリにはimmutableと

5

mutableの二つのバージョンがあるようだ。ものによると、immutableバージョ

5

ンしか無い型もあるようだ。

5
 [Page 47]
5
 Step 10. Use Sets and Maps
5
  imperative styles, its collections libraries make a point to
5
  differentiate between mutable and immutable collection classes. For
5
  example, Arrays are always mutable, whereas Lists are always
5
  immutable. When it comes to Sets and Maps, Scala also provides
5
  mutable and immutable alternatives, but in a different way. For Sets
5
  and Maps, Scala models mutability in the class hierarchy.
5

sets

5

 

5

これで概略が掴めた。プログラマがそのメソッドを完全にimmutableにしたけれ

5

ば、注意してimmutableな部品を選んでプログラミングする必要があるわけだ。

5

また、必要な部品郡は概ね足りているのだろう。

5

 

5

ただ、私が一番知りたいのは、immutableなコードの中にmutableなコードが混在し

5

たことを検出できるかどうかだ、うっかり混在させることはよくあることだと

5

思うからだ。できればコンパイル時に検出されるのが望ましい。

5

 

5

もし、Actorモデルなどの並行性を構築したい場合、うっかり破壊的なコード

5

(mutableなどコード)が混在してしまっては非常に原因を調べるのが難しいと考

5

えられる。

5

 

5

もうちょっと調査が必要。

5

 

5

 

0

comment (disabled)

5