!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
5555555000000000000000000000000000000011111111111111111111111111111111122222222222222222545555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555533333333333333333355555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555
5

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

5

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

5

kiyoka.blog_header 

5

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

5

5

 

5

 

0

kiyoka.2014_07_16[Sekka] sekka.elからpure emacsでhttp通信しようするも断念

0
 iStock_000016378483XSmall
0

Emacsも年々進化していることだし、もうそろそろcurlコマンドを使わなくてもEmacsだけでHTTP通信できるのでは?と思ってチャレンジしてみた。

0

今回はあきらめたのだが、理由を忘れそうなのでここにメモしておく。

0

gibthubのSekka作業ブランチは "http_pure_elisp" 。

0
  https://github.com/kiyoka/sekka/tree/http_pure_elisp
0

 

0

url.elのリクエストが不正?な問題

0

Emacs-24に入っている url.elを使ってsekka-serverにアクセスするも、webrickが400 Bad Requestを返す。

0

url-retrieve-synchronously関数の返却バッファには、200 OKのレスポンスの後ろに、400 Bad Requestのレスポンスがくっついてくるので原因がよくわからない。

0

curlコマンドからWebrickにリクエストした時は発生しないので、url.elのリクエストがRFCに準拠していないのか、Webrickの潜在バグを突いているのか…

0

 

0

url.elからのリクエスト中にEmacsのキーイベントが消費される問題

0

url-retrieve-synchronously関数を実行している間にCtrl-jを押しても効かない。

0

キーイベントがどこかで消費されているのかもしれない。

0

curlコマンドをプロセス起動した場合にはそのような現象は発生しないので、url.elの作りの問題なのかもしれない。

0

url*.elで "discard" や "event"  などで検索したがあやしい処理は見つからず…

0

 

0

Webrickの代替が見つからない問題

0

Webrickの代わりに別のRackドライバを探したが、thinくらいしか見つからなかった。

0

thinを使ってみるも、Segmentation Faultで動かず断念。

0

 

0

こんな感じで、あまり時間をかけていないが、一旦断念。

0

また一年後くらいに再チャレンジするかも。

0

ただ、curlが非常に安定していることもあって、EmacsからHTTPリクエストする場合はcurlがデファクトスタンダードになっているようだ。

0

いっそEmacs本家にcurlをリンクしてくれたりいいのにと思うんだけどなぁ。

0

 

0

comment please => kiyoka.2014_07_16

0

0

 

0

 

1

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

1
 iStock_000019296334XSmall
1

PasteHub.netの大改造中。

1

 

1

コンセプト

1

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

1

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

1

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

1

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

1

 

1

大改造のきっかけ

1

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

1

 

1

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

1

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

1

 

1

それが一変した。

1

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

1

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

1

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

1

 

1

時代の流れとDropboxの普及

1

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

1

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

1

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

1

 

1

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

1
 kiyoka/pastehub · GitHubEXT
1

 

1

comment please => kiyoka.2014_03_15

1

1

 

1

 

2

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

2
 iStock_000019296334XSmall
2

自分用メモ。

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

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

2

 

2

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

2

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

2

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

2

 

2

comment please => kiyoka.2014_02_25

2

2

 

2

 

5

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

4
 iStock_000019296334XSmall
5

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

5

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

5

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

5

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

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

 

5

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

5

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

5

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

5

 

5

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

5

 

5

PasteHub.netを使うには、

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

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

5

 

5

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

5

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

5

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

5

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

5

 

5

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

5

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

5

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

5

 

5

comment please => kiyoka.2014_02_22

5

5

 

5

 

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

 

3

追記 ( 2/23 )

3

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

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

...

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

 

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