!kiyoka.blog.2011_02 RSSPLAIN

Related pages: !kiyoka.blog.list
5555555444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444344444222222222222222222222204445555555555555555105555555555555555555555555555550555555555555555555555555550555555555555555555555555555555555555555555555555555555555555555555555555055
5

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

5

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

5

kiyoka.blog_header 

5

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

5

5

 

5

 

4

kiyoka.2011_02_26[Nendo] 「10分でコーディング」をやってみた

4
 10分でコーディング|プログラミングに自信があるやつこい!!EXT
4
 今日の問題はかなり簡単です。
4
 できるだけ早い時間でエレガントなコードを書きましょう。
4
 あまりに簡単なので制限時間を10分としてやってみてください。
4
 これ以上かかった人は
4
 自分はかなりプログラミングができない。
4
 とつらい事実を認識しましょう。
4

 

4

Nendoで書いてみた

4

5分くらい考えて5分くらいでコードを書いた。

4

やっぱり時間を切ると、いつものコーディングパターンになっちゃうなあ。

4

副作用をなるべく起こさないように、そして、計算量は気にしないスタイル。

4

Sekkaの辞書作成に時間がかかるのもきっと、それに違いない。と、思った…

4

 

4

[ソースコード:cards.nnd]

4
(use srfi-1)
4
4
(define (deal players deck)
4
  (let* ((lst (to_list (deck.split "")))
4
         (idx (append-map
4
               (lambda (x)
4
                 (range players))
4
               (range (/ deck.size players))))
4
         (idx-lst (zip idx lst)))
4
    (map
4
     (lambda (p)
4
       (string-join
4
        (filter-map
4
         (lambda (x)
4
           (when (= p (first x))
4
             (second x)))
4
         idx-lst)))
4
     (range players))))
4
4
(define (main argv)
4
  #?=(deal 3 "123456")
4
  #?=(deal 3 "1234567")
4
  #?=(deal 2 "")
4
  #?=(deal 1 "012345012345012345"))
4

 

4

[実行結果]

4
$ nendo cards.nnd 
4
#?="cards.nnd":24:(deal 3 "123456")
4
#?-    ("14" "25" "36")
4
#?="cards.nnd":25:(deal 3 "1234567")
4
#?-    ("14" "25" "36")
4
#?="cards.nnd":26:(deal 2 "")
4
#?-    ("" "")
4
#?="cards.nnd":27:(deal 1 "012345012345012345")
4
#?-    ("012345012345012345")
4

 

4

Gaucheで書いてみた

4

このプログラムを作ってみて感じたのは、Gaucheには、ぴったりのライブラリがあるので凄く早く書けそうだということ。

4

それは、slicesとtakeだ。

4

ちょっと書いてみよう。

4

[ソースコード:cards.scm]

4
(use srfi-1)
4
(use util.list)
4
4
(define (deal players deck)
4
  (let1 lst (map (lambda (x) (string x))
4
                 (string->list deck))
4
    (if (or (eq? 1 players)
4
            (eq? 0 (length lst)))
4
        deck
4
        (take
4
         (map (lambda (x) (apply string-append x))
4
              (slices lst (quotient (length lst) players)))
4
         players))))
4
  
4
(define (main argv)
4
  #?=(deal 3 "123456")
4
  #?=(deal 3 "1234567")
4
  #?=(deal 2 "")
4
  #?=(deal 1 "012345012345012345"))
4

 

4

[実行結果]

4
$ gosh cards.scm
4
#?="./cards.scm":16:(deal 3 "123456")
4
#?-    ("12" "34" "56")
4
#?="./cards.scm":17:(deal 3 "1234567")
4
#?-    ("12" "34" "56")
4
#?="./cards.scm":18:(deal 2 "")
4
#?-    ""
4
#?="./cards.scm":19:(deal 1 "012345012345012345")
4
#?-    "012345012345012345"
4

 

4

うーん、そうでもないか。

4

ライブラリが自分の思うような仕様でなく、リファレンスを調べたりしているうちに結構時間がかかってしまった。

3

string-splitのデリミタに空文字列が指定できない制限と、slicesが1で切れない制限とであまり短かく書けなかった…

4

Nendoにutil.listライブラリを追加したら、Rubyのライブラリとの組み合わせでもっと短かく書けそうだ。

4

 

4

やっぱり短い時間で書き捨てスクリプトを作るにはライブラリだなぁと再認識した次第。

4

util.list は take*とか日常的によく出会うリスト処理が入っているので、そろそろNendoにポーティングしよう。

4

 

2

追記:Gauche版修正

2

もっと綺麗に書けるだろうと思ってリファクタリングしてみた。

2
(use srfi-1)
2
(use util.list)
2
2
(define (deal players deck)
2
  (let1 lst (string->list deck)
2
    (if (null? lst)
2
        lst
2
        (take (map (lambda (x) (list->string x))
2
                   (slices lst (quotient (length lst) players)))
2
              players))))
2
2
(define (main argv)
2
  #?=(deal 3 "123456")
2
  #?=(deal 3 "1234567")
2
  #?=(deal 2 "")
2
  #?=(deal 1 "012345012345012345"))
2

 

2

ちょっとだけ短かくなったかな。

2

Nendoにutil.listライブラリを追加したら、さらに再度Nendoで書いてみよう。

2

 

0

comment (disabled)

4

4

 

4

 

5

kiyoka.2011_02_24[Sekka] Sekka 0.8.4 リリース

5

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

5
 NbpKsE
5

 

5

概要

5
ローマ字表記に xa xi xu xe xo xya xyu xyo xwa xtu を追加した。
5
  それぞれ、「ぁぃぅぇぉゃゅょゎっ」に対応する。
5
Sekka最新版のインストールパスを返す sekka-path コマンドを追加した。(Emacs用load-path設定用)
5
その他、バグ修正。
5

 

5

今回はバグ修正がメインです。

5

残りのTODO項目がだいぶ減ってきましたねー。(Sekka.TODO)

5

 

5

残りの大きな変更は、10kagetuを 10ヶ月に変換する、数字混じりの変換機能くらいになってきました。

5

それから、sekka-serverがインストール済みのVirtualBox仮想イメージのほうも、そろそろリリースしたいですね。

5

 

1

COMMENTJoviliana

Gee wlielikrs, that's such a great post!

0

comment (disabled)

5

5

 

5

 

5

kiyoka.2011_02_22[Emacs] 自分的に超重要な eshell 用設定

5

.emacsにこれを定義している。

5

個人的に最も多様するキーシーケンスだ。

5

 

5

キーシーケンス "[Ctrl-C] d" で今いるバッファと同じディレクトリに change-directory しながら eshellを起動する。

5
(defun eshell-cd-default-directory ()
5
  (interactive)
5
  (let ((dir default-directory))
5
    (eshell)
5
    (cd dir)
5
    (eshell-interactive-print (concat "cd " dir "\n"))
5
    (eshell-emit-prompt)))
5
(global-set-key "\C-cd" 'eshell-cd-default-directory))
5

 

5

(twitterには文字数の関係上、無理があるのでblogに書いた)

5

 

5

 

5

追記:

5

こちらのブログで引用されている。

5
 2011-02-22 - わからんEXT
5
 eshell と直前のバッファを行き来するコマンド改造版
5

 

5

*eshell*バッファから元のバッファに戻るというのはいいアイデアだねぇ。

5

自分も同様コマンドを作りたくなってきた。

5

ただ、自分の好みは eshellのコマンドラインから特定のshellコマンドで戻るのが好みかな。

5

良いアイデアを思いついたら作ってみる予定だ。

5

 

0

comment (disabled)

5

5

 

5

 

5

kiyoka.2011_02_12[Sekka] Sekka 0.8.3 リリース

5

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

5
 NbpKsE
5

 

5

概要

5
ユーザー定義語彙の登録UIを追加。
5
Gogole IME APIを使った未知語の解決をサポート。
5
popup.elを使った候補選択をサポート。
5

 

5

やっとユーザー語彙登録のユーザ・インタフェースを追加しました。

5

これで、辞書に無い単語を簡単に追加できるようになります。

5

 

5

どれくらい簡単かお見せしましょう。

5

変換候補に期待した単語が無いぞと思ったら、すぐに[Ctrl-R]を押しましょう。

5

次の画面のように変換候補を外部(GoogleImeAPI)から取得してリストアップしてくれます。

5
 sekka.newword_selection
5

この中から「これだ!」と思う単語を選ぶだけで自分のユーザー定義語彙登録が完了します。

5

GoogleImeAPIが最新の流行語や有名人、会社名なんかもリアルタイムで追いかけてくれているのでかなり強力です。

5

また、Sekkaの辞書に登録された単語は曖昧検索が可能になるので、さらにパワーが増幅されます。

5

 

5

EmacsでSKKを使っている方は、SKKでは得られないこのパワーを体験してみてください。

5

単語登録が楽しくなりますよ。

5

 

0

comment (disabled)

5

5

 

5

 

5

kiyoka.2011_02_04[JRuby][Nendo] JRuby 1.6.0-RC1のバグの切りわけができない

5

 

5

久々にブログを書いてみました。

5

Nendoのテストスイートを走らせているのだが、JRuby 1.6.0-RC1のバグっぽい挙動に悩されている。

5

なぜか、次のように失敗する。( CRuby 1.9.2-p136では正常にパスする )

5

expectedとgotの文字列を見ても同じように見えるのだが。

5

 

5

現象

5
ruby -I ./lib /usr/local/bin/rspec -b ./test/nendo_spec.rb
5
.........F.F..................FFFFFFFFFFFFFFFFFFFFFFF
5
5
Failures:
5
5
  1) Nendo when call evalStr() with literals should
5
     Failure/Error: @nendo.evalStr( ' "日本語" ' ).should eql( '"日本語"' )
5
       
5
       expected "\"\xE6\x97\xA5\xE6\x9C\xAC\xE8\xAA\x9E\""
5
            got "\"\xE6\x97\xA5\xE6\x9C\xAC\xE8\xAA\x9E\""
5
       
5
       (compared using eql?)
5
     # /usr/local/stow/ruby-1.6.0.RC1-jruby/lib/ruby/gems/1.8/gems/rspec-expectations-2.4.0/lib/rspec/expectations/fail_with.rb:29:in `fail_with'
5
     # /usr/local/stow/ruby-1.6.0.RC1-jruby/lib/ruby/gems/1.8/gems/rspec-expectations-2.4.0/lib/rspec/expectations/handler.rb:19:in `handle_matcher'
5
     # /usr/local/stow/ruby-1.6.0.RC1-jruby/lib/ruby/gems/1.8/gems/rspec-expectations-2.4.0/lib/rspec/expectations/extensions/kernel.rb:27:in `should'
5
     # ./test/nendo_spec.rb:226:in `(root)'
5
     # org/jruby/RubyBasicObject.java:1682:in `instance_eval19'
5
     # /usr/local/stow/ruby-1.6.0.RC1-jruby/lib/ruby/gems/1.8/gems/rspec-core-2.4.0/lib/rspec/core/example.rb:49:in `run'
5
     # /usr/local/stow/ruby-1.6.0.RC1-jruby/lib/ruby/gems/1.8/gems/rspec-core-2.4.0/lib/rspec/core/example.rb:98:in `with_around_hooks'
5
     # /usr/local/stow/ruby-1.6.0.RC1-jruby/lib/ruby/gems/1.8/gems/rspec-core-2.4.0/lib/rspec/core/example.rb:46:in `run'
5
     # /usr/local/stow/ruby-1.6.0.RC1-jruby/lib/ruby/gems/1.8/gems/rspec-core-2.4.0/lib/rspec/core/example.rb:91:in `with_pending_capture'
5
     # org/jruby/RubyKernel.java:1208:in `rbCatch19'
5
     # /usr/local/stow/ruby-1.6.0.RC1-jruby/lib/ruby/gems/1.8/gems/rspec-core-2.4.0/lib/rspec/core/example.rb:90:in `with_pending_capture'
5
     # /usr/local/stow/ruby-1.6.0.RC1-jruby/lib/ruby/gems/1.8/gems/rspec-core-2.4.0/lib/rspec/core/example.rb:45:in `run'
5
     # /usr/local/stow/ruby-1.6.0.RC1-jruby/lib/ruby/gems/1.8/gems/rspec-core-2.4.0/lib/rspec/core/example_group.rb:261:in `run_examples'
5
     # org/jruby/RubyArray.java:2471:in `collect19'
5
     # /usr/local/stow/ruby-1.6.0.RC1-jruby/lib/ruby/gems/1.8/gems/rspec-core-2.4.0/lib/rspec/core/example_group.rb:257:in `run_examples'
5
     # /usr/local/stow/ruby-1.6.0.RC1-jruby/lib/ruby/gems/1.8/gems/rspec-core-2.4.0/lib/rspec/core/example_group.rb:231:in `run'
5
     # /usr/local/stow/ruby-1.6.0.RC1-jruby/lib/ruby/gems/1.8/gems/rspec-core-2.4.0/lib/rspec/core/command_line.rb:27:in `run'
5
     # org/jruby/RubyArray.java:2471:in `collect19'
5
     # /usr/local/stow/ruby-1.6.0.RC1-jruby/lib/ruby/gems/1.8/gems/rspec-core-2.4.0/lib/rspec/core/command_line.rb:27:in `run'
5
     # /usr/local/stow/ruby-1.6.0.RC1-jruby/lib/ruby/gems/1.8/gems/rspec-core-2.4.0/lib/rspec/core/reporter.rb:12:in `report'
5
     # /usr/local/stow/ruby-1.6.0.RC1-jruby/lib/ruby/gems/1.8/gems/rspec-core-2.4.0/lib/rspec/core/command_line.rb:24:in `run'
5
     # /usr/local/stow/ruby-1.6.0.RC1-jruby/lib/ruby/gems/1.8/gems/rspec-core-2.4.0/lib/rspec/core/runner.rb:55:in `run_in_process'
5
     # /usr/local/stow/ruby-1.6.0.RC1-jruby/lib/ruby/gems/1.8/gems/rspec-core-2.4.0/lib/rspec/core/runner.rb:46:in `run'
5
     # /usr/local/stow/ruby-1.6.0.RC1-jruby/lib/ruby/gems/1.8/gems/rspec-core-2.4.0/lib/rspec/core/runner.rb:10:in `autorun'
5

 

5

UTF-8の文字列の扱いがうまくいかないのかな?

5

Nendoの処理系は instance_eval() を使っているので、次のようなspecファイルでも失敗すると予想したが、失敗しない。

5
 [t_spec.rb]
5
#!/usr/bin/env ruby
5
# -*- encoding: utf-8 -*-
5
#
5
describe Kernel, "when call evalStr() with literals" do
5
  it "should" do
5
    instance_eval( ' "\"abc\"" ' ).should == '"abc"'
5
    instance_eval( ' "\"日本語\"" ' ).should eql '"日本語"'
5
  end
5
end
5

 

5
 実行結果
5
 $ rspec t_spec.rb 
5
.
5
5
Finished in 0.01 seconds
5
1 example, 0 failures
5
 $
5

 

5

そんなわけで、バグ報告したいけど問題を絞り込めないのでちょっと保留かなー。

5

CRubyでは動くので、JRuby側に問題があると思うだけどなー。

5

 

0

comment (disabled)

5

 

5