!kiyoka.blog.2012_08 RSSPLAIN

Related pages: !kiyoka.blog.list
5555555222122222222212022233333333333333333333333303334444444444444444444444444444444044455555555555555555555550555555555555555555555555555555555555555555555555555555555505555555555555555555555555555555555555555555555555555555555555505
5

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

5

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

5

kiyoka.blog_header 

5

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

5

5

 

5

 

2

kiyoka.2012_08_30[MacOS] 非エンジニアのMacユーザってどんな感じ?

2

B008YJ18DC  Mac Fan (マックファン) 2012年 10月号 <雑誌>

2

この数ヶ月は新しいサービスをリリースすべく、プログラミングしたりMacOS Xアプリの作り方を調べたり、Ruby on Railsをやったりしている。(念のため書いておくと、仕事では無いです)

1

MacOS X用のクライアントアプリについては、AppStoreに上げたいと思っていて、ごく普通の(非エンジニアの)方にも使ってもらえたらいいなぁと画策中。

2

そんなわけで、今日のMacOS Xまわりの話をざっと把握するためにMac Fanを買った。

2

 

2

Mountain Lionの使い方(iCould中心)からフリーソフトウェア、シェアウェアとしてどんなレベルのものが出ていて、アプリの値段がどれくらいかが大方わかった。

2

フリーソフトウェアやシェアウェアの総称として「ダウンロードソフトウェア」と呼んでいるのが印象に残った。たしかに非エンジニアにはわかりやすいと思う。

2

まあ、実際のユーザーがMacOS Xをどう使っているかは実際のところわからないんだけど…

2

それにしても雑誌というのは、これほどの情報量のものを毎月よく出せるよなぁと関心する。

2

 

2

作っているサービスの話に戻ると、サーバーサイドからクライアントアプリまで全部考えるのは時間がかかるけど、なんか楽しい。

2

DynamoDBからRailsからVert.x(Node.jsのJava実装のようなフレームワーク)からMacOS Xアプリから認証プロトコルまで、やっていることは幅が広い。

1

こんだけやって、できることはすんごく地味なのだけど乞御期待。

2

 

0

comment (disabled)

2

2

 

2

 

3

kiyoka.2012_08_28[Rails] 今時のユーザー登録、ユーザー認証とは

3

 

3

ちょっと調べてみたが、最近の認証はtwitterやFacebookのOAuthプロバイダを使ってログインしてもらうのが流行りのようだ。

3

その後、自前サービスのアカウントと紐付けて登録を完了させるパターンが多い。

3

そうかそうかということで、omniauthというgemを使って認証をするような情報を調べていくと、どうもそう簡単な話では無いらしい。

3

気づいた問題は3つだ。

3

 

3
twitterで認証してしまうと、twitter APIの約款に従う必要がある。Facebookも同じ。
3

たとえ、最初の仮登録のために使うだけでも、約款を守らなければならないと思う。

3

そんなわけで腰掛けだけに使うのは アウトだと思われる。

3

 

3
twitterはメールアドレスを渡してくれない
3

メールアドレスが無いので、メールでの本登録確認ができない。

3

 

3
サービスのイメージに色が付く
3

自分のサービスが、twitterやFacebookと何の情報もやりとりしないとしても、いつか情報が送信されるんじゃないかとユーザーに疑われても仕方が無い。

3

もし、そのような疑念を持たれと困るサービスにはOAuthプロバイダを利用しないほうが良いだろう。

3

 

3

なんというか、考えてみればあたり前のことだろうけど、なんとなく惰性でOAuthプロバイダに依存しよう思っている人は一度考えてみて欲しいと思う。

3

 

3

参考:

3
 この方のスライドでも同じようなニュアンスの話が出てくる。
3
 Herokuで作るdevise認証サイトEXT
3

 

0

comment (disabled)

3

3

 

3

 

4

kiyoka.2012_08_24[Rails] Webサービスのユーザー登録ページの練習

4

 

4

Webサービスのユーザー登録ページは一度もまともに作ったことも無かった。

4

さらには、Railsについての知識があまり無い。

4

こんな状態でRailsを使ってユーザー登録ページの作成に挑戦している。

4

 

4

とにかくユーザー登録とユーザーがプロファイルを編集する一連のページができればいいので、Railsでアプリらしいアプリを作ることもせず、一直線でユーザー登録を作っている。

4

 

4

やったこと

4

 

4
この本に目を通した。
4

dWy5

4

はじめる! Rails3(1) - 達人出版会EXT はじっくり読んだ。Hello Worldはやった。

4

はじめる! Rails3(2) - 達人出版会EXT はさらっと最初のほうだけ読んだ。今は、モデル同士の関連付けはいらない。

4

はじめる! Rails3(3) - 達人出版会EXT はじっくり読んだ。今回やりたいのは、とにかくこの認証まわりである。

4

 

4
DeviseのREADME.mdの手順を通した
4
 plataformatec/devise · GitHubEXT
4

これをやりながら、何度も はじめる! Rails3(3) - 達人出版会EXT に立ち返った。

4

Deviseのチュートリアルにも書いてあるが、Deviseを使う前に自分で認証まわりを一度は作って理解しとかないと駄目だそうだ。確かにやってみると、そう思う。

4

あまりに、Deviseが完成した雛形を生成しすぎる。生成しただけで、それなりに動いている。

4

そんなわけで、手を入れるとなると原理をちゃんと把握している必要があり、何度もRails本を読み直すことになった。

4

 

4

ファーストインプレッション

4

 

4

感想を書くには早すぎる感があるが、とにかくDeviseのチュートリアルを見ながら作業すると、1時間くらいでユーザーのsign in、sign out、パスワード変更などのページができた。

4

きっとバリデーションは適当で、メールでの登録承認も動いていないのではこれから有効にするのだが、Deviseの機能一覧を見てると、そんなに苦労するとは思えない。

4

今さらながら凄い時代になったなぁと感慨深い。

4

 

4

これから、自動テストやらメール送信やらをやって、まともなものにしていこうと思う。

4

 

0

comment (disabled)

4

4

 

4

 

5

kiyoka.2012_08_14[Sekka] Sekka 1.2.0 リリース

5

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

5
 iStock_000016378483XSmall
5

 

5

お待たせしました。

5

安定板を出すまで長くかかってしまいました。

5

 

5

リリースの概要

5

前回の安定板 Sekka 1.0.0 からの変更点はAZIKデータを標準辞書から外し、メモリ消費量を減らしたことです。

5

もちろん、AZIKを使いたい方は環境変数を指定すればAZIK入りの辞書もセットアップできます。

5

しかし、ほとんどの人はAZIKは不要でしょう。

5

 

5

また、曖昧検索用のインデックスとして、distributed-trieEXT を使うようにしました。

5

これにより、検索レスポンスのムラを無くし、時々重くなる問題を解決しました。

5

 

5

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

5

version 1.2.0

5
version 1.1.4 preからの変更無し
5

 

5

モードの無いSKKの世界を試してみたい方、是非トライしてください。

5
 リンク: Sekka
5

 

0

comment (disabled)

5

5

 

5

 

5

kiyoka.2012_08_12[Nendo][Lisp] Kyoto.Lisp Hackathon で作ったけどボツになったコード

5

Kyoto.lisp Hackathon #1EXT に参加してきた。

5
 logo120x80
5

話としては(kiyoka.2012_08_11[Nendo][Lisp] Kyoto.Lisp Hackathon でやったことのまとめ) の続き。

5

 

5

本エントリの目的は、Hackathon当日の作業のうち直近ではボツだが、今後再利用できそうなテクニックをメモしておくこと。

5

次のような場面で使うスペシャルフォームをマクロ定義した。

5

 

5

ちょっと恣意的な例ではあるが、長いベクタに対して高階関数による多段処理をする例だ。

5

大きなテキストファイルをまるごと読み込んだArrayも長いベクタになるので、実用的なプログラミングでも良く出てくるパターンだ。

5

入力データは巨大だが、最終的に takeメソッドで最初の数要素のみ使い、あとは不要な場合は遅延評価を使って無駄な計算は省きたい。

5
(use srfi-1)
5
5
(let ([vec (Range.new 0 1000000)])
5
  (for-each
5
   print
5
   (. 
5
    (map
5
     (lambda (x) (sprintf "<%05d>" x))
5
     (filter
5
      (lambda (num) (< num 100))
5
      vec))
5
    take 5)))
5

 

5

最後から2行目の vec を vec.lazy もしくは (lazy-vector vec)にすれば遅延評価を実現できるが、どこにlazyを指定するのが適当かを考えるのが面倒だ。

5

できれば、次のように(lazy S式)で囲めばその範囲で可能な限りよろしくやってくるのが嬉しい。(schemeのlazyと予約語がぶつかっているので、lazy-realmとかにしたほうが良いかな…)

5

 

5
(use srfi-1)
5
5
(lazy ;; この中のvector(すなわちRubyのArray型)は全てlazyに扱われる
5
 (let ([vec (Range.new 0 1000000)])
5
   (for-each
5
    print
5
    (. 
5
     (map
5
      (lambda (x) (sprintf "<%05d>" x))
5
      (filter
5
       (lambda (num) (< num 100))
5
       vec))
5
     take 5))))
5

 

5

それを実現するのがHackathon当日に書いた次のマクロ。

5

健全なマクロを使っている。コードが長いので、gistに貼りつけた。

5
 lazy special form sample — GistEXT
5

 

5

あとは%lazy-map、%lazy-for-each、%lazy-filterを関数で実装すれば、(lazy S式)で囲った中身のmap、for-each、filterの実装をlazy版に差しかえることができる。

5

便利そうな気もするが、影響範囲が大きいわりにはメリットが少ないような気もして、現段階では自分で(lazy-vector vec)する上の案に落ちついた。

5

それに、Nendoのsyntax-rulesはchibi-scheme 0.3からsyntax-rulesの実装のポーティングだが、ネストした "..." が扱えないという問題もあり、すっきり定義できていない。

5

このあたりも今後の課題として残る。

5

 

5

ただ、このテクニックを使ってpure(副作用無しのコードブロック宣言)も実現できるんじゃないかと考えているので、今後はそちらを試す予定。

5

pureのアイデアについてはこちらの過去記事を参照のこと。

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

こういう、できるかどうかわからないけど試す価値のある実験は1日かけて作業するHackathonが向いていると思った。

5

 

0

comment (disabled)

5

5

 

5

 

5

kiyoka.2012_08_11[Nendo][Lisp] Kyoto.Lisp Hackathon でやったことのまとめ

5

Kyoto.lisp Hackathon #1EXT に参加してきた。

5
 logo120x80
5

KyotoでLisperが10人以上集ったのだけど、他の大きなイベントとぶつかっていたわりにはよく集ったのかも。

5

 

5

私は、前からやってみようと考えていたRuby 2.0(Trunk)のlazyをNendoで簡単に使えるようにする拡張にトライした。

5

 

5

解決したいこと

5

大きなテキストファイルを処理する際、メモリを節約するために逐次処理を意識した汚いコーディングに書き直すことがある。

5

これをなんとか、手続き型スタイルに書き直さずに関数型スタイルのまま、内部ではメモリ効率の良い処理をしてくれないか。

5

そんな都合の良い方法が見つかったのでトライしてみた。

5

遅延評価されたEmumerableを使えば思ったような効果が期待できると考えた。

5

 

5

Hackathon後、家に帰ってからコードを整理していくつかの勘違いも正すことができたので、ここに実験結果を書いておく。

5

後日、大袈裟な解決方法だと気がついてボツにしたコードも掲載し解説する予定。

5

 

5

実験対象のプログラム

5

約100MByteのテキストファイルを読み込んで加工・出力する、いわゆるフィルタプログラムで実験した。

5

書き捨てプログラムでは一番よく出てくるパターンだ。

5

 

5

効果

5

既存の仕組みだと、全ての入力行をプロセスにいったん蓄積するので、プロセスのピークメモリが大きい。

5

 

5

eagar.nndが、(f.readlines)した一番メモリを使う例。

5

generator.nndが、(f.lines)でジェネレータスタイルで書いた例。

5

lazy.nndが、Ruby 2.0のlazyを使った例。1.9.3ではLazyの機能が無いので自動的にフォールバックして遅延評価なしで動いている。

5

 

5

lazy_for_nendo_exam_graph

5

 

5

 

5

コード解説

5

 

5

eager.nnd

5

example #1 eager filter — GistEXT

5

赤色の部分は入力ファイルの全ての行をメモリ中に保持する。

5

全ての行を "<" ">" で囲んだ中間データもメモリ中に保持するので、入力行の2倍のメモリを消費する。

5

eager.nnd

5

 

5

generator.nnd

5

example #2 filter with generator — GistEXT

5

青色の部分(入力ストリーム)をジェネレータにして、入力行を全て読み込まないようにする。

5

但し中間データは入力行数分のメモリを消費する。

5

generator.nnd

5

 

5

lazy.nnd

5

example #3 lazy filter — GistEXT

5

入力ストリームをlazy指定するとlazyが伝搬する。緑色の部分はlazyなvectorとなっている。

5

このプログラムでは、どんなに入力テキストデータが巨大になってもメモリは60MByte程度しか消費しない。

5

しかも、関数型プログラミングスタイル(高階関数のチェーンによる宣言的プログラミング)が維持できている。

5

lazy.nnd

5

 

5

今後の予定

5

実験がうまくいったので、lazy-vectorという関数はそのままリリースする予定。(Nendo 0.6.5)

5

ただし、srfi-1のtakeなどの多くの関数がlazy-vectorをサポートしないとNendoの処理系全体での旨味が出し切れないので順次対応していく。Nendo 0.6.6以降かな…

5

 

5

学び

5

やっぱりブログ記事で文章化しないと、成果はまとまらないことを実感した。

5

今後はHackathon中もブログ(またはDokyumentoj)を書きながら頭を整理して作業しようと思う。

5

 

0

comment (disabled)

5