!kiyoka.blog.2014_02 RSSPLAIN

Related pages: !kiyoka.blog.list
555555511111111111110111434444444444444444444444444440444555555555555555555555555555555555555555555555555555555555555522222222222222222205
5

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

5

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

5

kiyoka.blog_header 

5

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

5

5

 

5

 

1

kiyoka.2014_02_25[PasteHub] 新PasteHub.netは何を優先するか

1
 iStock_000019296334XSmall
1

自分用メモ。

1
インストールが簡単(設定なし)
1
Mac/Windowsはインストーラーにてインストールするだけ。
1
Linuxはrpm/debをインストールするだけ。
1
Emacsはmelpaからelispをインストールするだけ。
1

※ 但し、Dropbox以外のストレージサービスを使っている場合は、設定値変更が必要。

1

 

1

最後のEmacsクライアントは実装がけっこう大変そうな気がするが、やってやれないことは無い。

1

使うのが簡単なものほど作るのは大変というのはよくある話。

1

実装が多くなるという意味で当然といえば当然なのだが…

1

 

0

comment (disabled)

1

1

 

1

 

4

kiyoka.2014_02_22[PasteHub] 大きなピボット

3
 iStock_000019296334XSmall
4

PasteHub.netというコピーペーストを複数のマシンで共有するサービスを作った。

4

しかし、ここへきてPasteHub.netの「コレジャナイ感」が大きくなってきた。

4

自分が欲しいのは、複数のOS、複数のマシンでコピーペーストが同期されるシステムだ。

4

PasteHub.netではそれだけのために、次のような手順を踏む必要があった。

4
サイトを用意
4
ユーザーアカウントを登録
4
アプリケーションをインストール
4

 

4

これはなかなか敷居が高い。

4

サービスを提供する側にとっても、ユーザーにとっても。

4

実際にこの敷居の高さのせいか、ツールを使う人は皆無に近かった。

4

 

4

そんなわけで、しきり直しをします。

4

 

4

PasteHub.netを使うには、

4
アプリケーションをインストール
4

だけでいけるようにしたい。

4

 

4

自分でサイトを構築・維持するのではなく、Dropboxのような共有ストレージサービスを利用しようと考えている。

4

Dropboxのような共有ストレージは既に誰もが使っているだろう。

4

有名なドリルの喩えでいうと、「ドリルを買う理由は"穴"が必要だからである。ドリルが無くても、穴が得られれば良いのである。」ということだ。

4

自分も"穴"だけが欲しいので、ここいらでピボット(方針変更)しよう思う。

4

 

4

共有ストレージも、同期のタイムラグの問題などいろいろ課題は出るだろうが、それを解決できれば簡単に使えるものになるだろう。

4

仕組みが単純になる分、Dropboxと連携するIFTTTなどのサービスとも連携できるなど、価値も増える。

4

というわけで、いろいろ実験しながら可能性を探っていきます。

4

 

0

comment (disabled)

4

4

 

4

 

5

kiyoka.2014_02_12[Ruby][Nendo] CRuby 2.1.0の非互換性-Symbolクラスにモンキーパッチできなくなった件

5
 iStock_000019986662XSmall
5

忘れないうちにNendoをCRuby 2.1.0で動かすのに苦労した話を書いておこう。

5

多分、SymbolにモンキーパッチしているプログラムはCRuby 2.1.0で動かなくなるので、その時に誰かの役に立つかもしれない。

5

 

5

CRuby 2.1.0に持ち込まれた非互換

5

 

5

.以下は、CRuby 2.0.0で動いて、CRuby 2.1.0で動かないコード

5
# Symbolへのモンキーパッチ
5
class Symbol
5
  def set_lineno(value)
5
    @lineno = value
5
  end
5
  def lineno
5
    return @lineno
5
  end
5
end
5
5
sym1 = :a
5
sym1.set_lineno( 10 )
5
p sym1.lineno
5
5
sym2 = :a
5
sym2.set_lineno( 20 )
5
p sym2.lineno
5

 

5
結果(ruby-2.0.0-p353)
5
$ ruby symbol.rb
5
10
5
20
5

 

5
結果(ruby-2.1.0)
5
$ ruby symbol.rb 
5
symbol.rb:5:in `set_lineno': can't modify frozen Symbol (RuntimeError)
5
        from symbol.rb:13:in `<main>'
5

 

5

何がしたかったのか

5

NendoはRubyで実装したScheme処理系(サブセット)である。

5

Nendo 0.6.6ではSchemeのソースコードをパースしたツリーの内部で、SchemeのシンボルはRubyのSymbol型に変換して保持していた。

5

そうするメリットは絶大で、Schemeの処理系の中で:quoteのようなRubyのSymbolと == 演算子で比較できる。

5

また、同時にそのシンボルがSchemeプログラムのソースコードのどの位置(ファイル名、行番号)に出現したかを保持したい。

5

つまり、同じSymbol型でも、位置情報を持っているものと持っていないものがあり、かつ、同じSymbol型として操作できる。

5

Ruby 2.0.0までは、乱暴だが上のようなモンキーパッチを使うことで、このトリックを実現していた。

5

 

5

Ruby 2.1.0

5

Ruby 2.1.0では上記のようなモンキーパッチは許されなくなった。

5

最適化のためか、はたまた安全性のためか、その両方かもしれないが、そのような挙動になった。

5

puppetも同様の問題でひっかかってpuppet側で対応したようだ。

5
 (maint) Fix can't modify frozen Symbol error on Ruby 2.1.0 by jeffmccune · Pull Request #2184 · puppetlabs/puppet · GitHubEXT
5

 

5

Nendo 0.6.8

5

Nendoも同様に0.6.8で地道に対応した。

5

Symbolへのモンキーパッチをやめて、ParsedSymbolという型を新規に作り、RubyのビルトインSymbolとの比較箇所などを地道に修正していった。

5

影響範囲は大きく、なかなか骨の折れる作業だった。

5

 

5

感想

5

本来はモンキーパッチは良くないコーディングだとわかっていたが、このような逃げを許してくれるのがRubyの良いところかと思っていた。

5

多分、モンキーパッチを許さないことで最適化しやすくなり実行効率は高まりそうな気がするので、CRubyの進化として良いことだろう。

5

ただ、ちょっと固くるしいなぁと思わなくもない。

5

言語が洗練するとはこういうことなのかなぁ。

5

 

2

追記 ( 2/23 )

2

SymbolもGCできるようにする改善だったようだ。それなら従おう。

2
 Feature #8906: Freeze Symbols - ruby-trunk - Ruby Issue Tracking SystemEXT
2
  Now, Integer and Float objects are frozen objects.
2
  How about to freeze Symbol objects, too?
2
  I think Symbol is friend of Integer.
2

...

2
  Background of this proposal:
2
  
2
  Now, I'm working on "GC-able Symbols" feature.
2
  Freezing symbols make this feature easier.
2
  
2
  for example:
2
  (1) set an instance variable @iv for symbol s
2
  (2) collect s
2
  (3) generate s
2
  (4) what value of @iv for s returns?
2

 

0

comment (disabled)

5