!kiyoka.blog RSSPLAIN

Related pages: !kiyoka.blog.2005_04 !kiyoka.blog.2005_03 !kiyoka.blog.2005_02 !kiyoka.blog.2005_01 !kiyoka.blog.2004_12 !kiyoka.blog.2004_11 !kiyoka.blog.2004_10 !kiyoka.blog.2004_09 !kiyoka.blog.2004_08 !kiyoka.blog.2004_07
5555555000000000000000000000000000000000111111111111111114344444444444444444444444444444445555555555555555555555555555555555555555555555555555555555555222222222222222222555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555
5

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

5

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

5

kiyoka.blog_header 

5

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

5

5

 

5

 

0

kiyoka.2014_03_15[PasteHub] PasteHub.netは「コピペをいろんなWebサービスのハブにする」

0
 iStock_000019296334XSmall
0

PasteHub.netの大改造中。

0

 

0

コンセプト

0

コンセプトは「コピペをいろんなWebサービスのハブにする」にしようかと考えている。

0

もう、サーバーサイドのコードはgitのmasterからきれいに削除し、Dropbox必須とした。

0

おかげでクライアント側のコードも半分以上は不要となった。

0

それでも「コピペを同期する」という本来の機能の利便性と安定性が上がった。

0

 

0

大改造のきっかけ

0

きっかけは自分がスマートフォン(iPod touchなんだけど)を買っていろんなアプリが動くようになったことだろう。

0

 

0

今迄使っていたiPod touchはとても古く、iOS 4.2までしかインストールできなかった。なにせ2014年におけるiOS 4.2というのは、とんでもない時代遅れのシロモノなのだ。

0

どんなアプリ作者もiOS 6.0以上で動くアプリしか作らない(当然か…)。iOS 4.2ではTwitterクライアントはなぜか起動せず、Feedly、Safari to go 、Kindle、Evernoteは非対応だ。

0

 

0

それが一変した。

0

最新のiPod touchを買ってiOS 7.xが使えるようになり、EvernoteやTwitterクライアント、Feedly、Safari to go、Kindleが動くようになった。

0

今までスマートフォンのサービスがここまで便利になっているとは知らずに来たもんだから、その進化には正直たまげた。

0

EvernoteもブラウザベースのWebサービスとして使っていると、それほど便利さは実感できない、なので使う意味はほとんど無い。おまけに古いiPod touchにはカメラさえ付いていないので、写真でメモを取るということもできなかった。それはEvernoteと言えるのか?…

0

 

0

時代の流れとDropboxの普及

0

2012年に作り始めたPasteHubというプログラムは、当初、コピペ情報を仲介するためのサーバーサイドを時前で持っていた。

0

2014年の今ではDropboxが事実上の標準となり、使っていない人はいないというところまで来た。(Google DriveとかOneDriveも含めたクラウドストレージというくくりで見ると、ほぼ100%だろう)

0

そんな背景もあり、Dropboxに完全依存することに決めた。

0

 

0

というわけで、ぼちぼち使えるプログラムとして生まれ変わる最中です。応援よろしく。

0
 kiyoka/pastehub · GitHubEXT
0

 

0

comment please => kiyoka.2014_03_15

0

0

 

0

 

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

 

1

comment please => kiyoka.2014_02_25

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

 

4

comment please => kiyoka.2014_02_22

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

 

5

comment please => kiyoka.2014_02_12

5

5

 

5

 

5

kiyoka.2014_01_26[Sekka] Sekka 1.5.0 リリース

5

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

5
 iStock_000016378483XSmall
5

 

5

ついにWindowsでも動くようになりました。

5

Cygwinは不要で、RubyInstaller.org 1.9.3 上で動きます。

5

 

5

comment please => kiyoka.2014_01_26

5

5

 

5

 

5

kiyoka.2013_11_02[Nendo] 静的型チェックの設計メモ(1)

5
 iStock_000019986662XSmall
5

自分用備忘録。

5

 

5

型付けと、型チェックは2フェーズにする必要あり

5

 

5

理由は、再帰的に定義された関数は自身を定義するまで自身の型が不明なので、1パス目ではチェックできない。

5

 

5
 サンプルコード
5
;; fact
5
(define (fact n)
5
  (if (zero? n)
5
      1
5
      (* n (fact (- n 1)))))
5

 

5

このコードは、コンパイルフェーズで以下のようにマクロ展開される。

5
(define fact
5
  (lambda (n)
5
    (if (zero? n)
5
        1
5
        (%tailcall (* n (fact (- n 1)))))))
5

 

5

上のコードで使われている関数群 zero? %tailcall * - と フォーム (if a b c) が全て副作用なしとして型付けされていたとする。

5

ここで、変数factの型を1パス目で型チェックしようすると、factの型が未定義なので失敗する。

5

従って、1パス目でfactの型を決定してから、2パス目で型チェックをする必要がある。

5

 

5

応用編

5

次のようなletrecで定義された束縛変数においても同様。

5
(define (append a b)
5
  (letrec ((append-reverse
5
            (lambda (a b)
5
              (if (pair? a)
5
                  (append-reverse (cdr a) (cons (car a) b))
5
                  b))))
5
    (append-reverse (reverse a) b)))
5

 

5

それにしてもこのappendの定義ってよくできているなぁ。

5

誰が書いたのだろう… Chibi-Schemeから持ってきたハズ…

5

 

5

comment please => kiyoka.2013_11_02

5

5

 

5

 

5

kiyoka.2013_10_24[MacOS] MavericksにバージョンアップしてもX11を使う

5

 

5

無料と聞いて、MacBook ProのOSをLionからMavericksにバージョンを上げた。

5

「タダより高いものはない」というわけで、それなりの手間賃を払うことになった。

5

X11 serverがMountain Lionから非標準になって当然Mavericksでも動かなくなっているので、復活するところからスタートした。

5

 

5

普段は、X11プロトコルをsshで転送して北海道のDebianマシンと手元のMacOSXとを繋いでいる。

5
 
5
 X11 server                           X11 client
5
 
5
  [MacOSX]  ----- Internet -------  Debian/GNU Linux
5
 
5

 

5

用意するソフトウェア

5

XQuartzEXT 2.7.4 のdmgファイル。Lion付属のX11の代わりとして使える。

5
 ※ MacOSXのマシンからリモートのLinuxマシンには ssh でログインできる状態であること。
5

 

5

環境設定

5
XQuartzEXT 2.7.4をインストールする。
5

 

5
XQuartzを起動し、設定を行う。
5

 

5
 認証の設定
5

XQuartz_input

5

 

5
 キーボードの設定
5

XQuartz_security

5

 

5

 

5
XQuartzを再起動する(これで設定値が反映される)
5

 

5
MacOS X側の ~/.ssh/config に1行追加する
5
ForwardX11 yes
5

 

5
MacOS X側の ~/.bashrc に1行追加する
5
export DISPLAY=localhost:0.0
5

 

5

 

5

起動

5
XQuartzが起動していることを確認する
5

 

5
ssh -Y オプションを付けてログインする
5
$ ssh -Y remote_host_name
5
$ xterm &
5
 → xterm が起動する
5

 

5

キーボードの調整も完璧だし、やはりX11 serverはMacOS Xの上が一番良い。

5

 

5

comment please => kiyoka.2013_10_24

5

5

 

5

 

5

kiyoka.2013_10_18[TaPL] 演習問題をやってみた

5

4274069117 型システム入門(TaPL)

5

TaPL読書会に向けて11章の演習問題をやってみた。

5
 TaPL_exercise 
5

TaPLの演習問題をまじめにやるのは結構大変だ。

5

 

5

どの演習問題も証明せよと書いてあるのだが、証明しようとするとけっこう時間がかかる。

5

付録の模範解答ページには証明の流れは書いておらず、例えば「構造的帰納法」を使うとしか書いてなかったりする。

5

ああでもない、こうでもないと寄り道してなんとか証明した気になっているが、これで合っているのかどうか。

5

 

5

読書会での答え合わせの場があるのが幸いです。

5

 

5

自分としては11章を読み終わったら、この本を卒業して、Nendoに型検査を実装する作業に時間を使いたいなぁと考えているんだけど…

5

 

5

comment please => kiyoka.2013_10_18

5

5

 

5

 

5

kiyoka.2013_10_12[Lisp][言語] Lisperの楽園: 脳内モデルに一番近い島

5

2779598066_b9c6540175_m

5

タイトルが、リゾートのパンフレットみたいになっているのは御愛嬌。

5

 

5

どの言語よりもLispが自分に合っているようだ。

5

脳内モデルを現実世界にdumpする手段としてLispがストレスが少ない気がする。

5

 

5

Rubyはどうなのかと聞かれてもないのに答えると(笑)、Rubyはそんなに自分の脳にぴったりフィットする感じではないのだよねー。

5

熱狂的なRubyistの方々には悪いけれども、RubyコミュニティのパワーとRuby関連へのお金の流れ込むスピードは圧倒的なのでそこは利用させてもらうのだ。(腹黒いねぇ)

5

時にはまとまったコードをgemとして提供することもあるけれど、メインのプログラム言語としてRubyを選択することは無いかなぁ。

5

であるからしてNendoの「gemが使えるLisp」という路線は今後も健在なのだ。

5

5

 

5

 

5

kiyoka.2013_10_09[Lisp][言語] 処理系開発の効用

5
 このエントリは二年前くらいに書いたものなのでちょっと古いのだが、もったいないので公開。
5

 

5

新しい視点

5

オレ処理系 Nendoの開発は単に楽しいからやっているのだが、開発してみるとアプリケーション開発では得られない視点が得られる。

5

言語の中でもLisp処理系を作るのは貴重な体験だ。

5

Lisp処理系を作るためには、Lispの内部構造やプリミティブの制御構文などについて詳細に落とし込んで考える必要がある。

5

自分で考えた処理系がある程度動くようになるころには、特定の言語に依存しない抽象的な脳内モデルが生まれる。

5

自分は処理系を作って初めて明確な形を取るようになったが、Lispでプログラミングしただけでも脳内モデルが形成される人もいるかもしれない。

5

 

5

コードの中にlambdaの存在が見えるようになる

5

私の場合は脳内モデルとして、抽象的な lambda式の連鎖(lambda計算)として見えるようになった。

5

以前は、PHPでプログラムをする時はPHP、Rubyでプログラムする時はRubyの見た目に近い脳内モデルだったような気がするが、最近は全部lambdaになっている気がする。

5

そういえば、shiroさんのブログ記事にも似たような話があった。

5
 Island Life - グラフ指向理解EXT
5
  で、おもしろいなあと思ったのは、私はプログラムを考える時も頭の中には
5
  グラフがあって、プログラムはそのグラフをテキストとしてダンプしたもの
5
  になっている。WiLiKi:Lisp:S式の理由で書いたけれど、だからプログラムを
5
  書くときにいちいち頭の中のグラフを翻訳しなければならないプログラミン
5
  グ言語よりも、グラフを生に近い形でダンプできるLispの方がずっと書きや
5
  すい。
5
 
5
  でも非Lisperなプログラマに脳内グラフのことを話してみてもあまり賛同さ
5
  れないので、Lispを好むか好まないかの境目は案外そのへんにあるんじゃな
5
  いかという仮説を持っているのだけれどどうだろう。
5

 

5

lambdaの連鎖で見えていることを言葉で説明するのが非常にわかりにくいのも同じかなぁ。

5

図で描いたほうが良いのだろうな。

5

描いて説明したところで、フウンで終わってしまってセツナイので描かないが。

5

 

5

設計に役に立つこともある

5

例えば、RESTベースのWebAPIを考える時や、1ページを超える長い関数を追う時、それぞれのパーツがlambda単位(クロージャ単位)に分割して見えるようになった。

5

長いソース中だろうと、ブロックさえあればなんでもlambda化して切断面が見える能力。意識しなくてもコード中に切断面が飛び出して見えているような。

5

うまく言えないけど便利で強力な特殊能力だと思う。

5

これは設計時、リファクタリング時に威力を発揮する。もしかしてこれが悟り体験?

5

 

5

comment please => kiyoka.2013_10_09

5