Haskellを触って見る続き

とりあえずさしあたっての目標に前のエントリに書いたようにラボユース成果物(haru2036/laboyouth · GitHub)をHaskellに移植することを設定したので、とりあえずモデルの生成部分からやっていこうと思ってます。まあいきなりtrigramの数え上げやったら死ぬと思ったので、さしあたりunigramの数え上げからやっていこうと思ってます。
そんなこんなでとりあえず一つの単語に付いて何回出現するかを調べる関数を作ったのですが、なんかよくわからんことに。

countUnigram :: String -> [String] -> Int

countUnigram key items = length $ takeWhile (==key) items

main = return $ countUnigram "a" ["a", "a", "ba", "bb", "ab", "a"]

こんなコードを書いて実行すると

2

とか出てきました。ひとつ足りなくね?と思って検索対象(一つ目の引数)を"ab"にしたところ0と……じゃあ存在しない場合どうするのよと思って"cc"をしても0が帰ってきます、どういうこっちゃ。takeWhileがそういう感じなのかそれとも……

(たぶん)つづきます

    • 追記--

ありがたいことにTwitterですぐツッコミをもらったので。


とのことでtakeWhileをfilterに置き換えたらうまくいきました。
当初参考にしていたページ
Haskell のリスト操作 : tnomuraのブログ
にもtakeWhileとfilter両方乗ってたけどうっかりfilterを見落として書いてしまってたみたいで。
そこをもう一度見たら

条件に合う要素をリストの先頭から取り出す。条件が合わなくなったところで処理は終了する。
Hugs> takeWhile (<4) [1,2,3,4,5]

てて書いてありました。さいしょのa2つの次にbaが入ってたのでそこで終了しちゃってたみたいな。
ありがとうございます!

つづきました

業務と個人の開発では使う言語わけたほうがいいとおもったとかいろいろ

ってことなのですが。

半ば強制的に使わされる言語と個人的に使う言語は分けた方がいい?

実は最近Androidアプリケーション開発をアルバイトでやってるけど、その影響で個人的に書いてたJavaFXでゴニョゴニョの進捗が全くダメになってます。
その代わりというか、前のエントリでも書きましたけどHaskell使い出したら楽しくて意外と書ける(正確にはかけてない、意外と取り組めている)ので、やっぱり使う言語の違いって大きいと思いました。

かんすうがたこわい

割となにもかも怖い、よくわからない……Haskellに関しては日本語の情報がインターネッツにあんまり無いですね……というわけですごいH本

すごいHaskellたのしく学ぼう!

すごいHaskellたのしく学ぼう!

をそのうち買って読みながらなんかしたいと思います。というか誰かかって♡
今のところの目標だとラボユース成果物のharu2036/laboyouth · GitHubHaskellで書き直しつつ綺麗にして昨日追加できたらいいと思ってるのですが、そもそも関数型の書き方でやる処理として向いているのかわからないというか別に関数型だからってできないことはなにもないじゃろみたいなことになってよくわからない。
とりあえずゆったりやりたいことをやりたい。

やる気

正直いってなにかやりたくはあるんだけどそれを実行に移す気力時間体力お金その他もろもろリソースが足りてないっていうのがいちばん問題な気がしました。

気がついたらHaskell触りだしたけど全然わからない

( ^o^)なんか最近関数型はやってる!
( ˘⊖˘) 。o(待てよ?関数型って一体何だ?)
|Twitter|┗(☋` )┓三
( ◠‿◠ )☛ClojureというLisp方言があってな
関数型って何か理解したいならHaskellもいいよ!☚( ◠‿◠ )
( ◠‿◠ )☛▂▅▇█▓▒░(’ω’)░▒▓█▇▅▂☚( ◠‿◠ )
     うわああああああ

ってなって何故か結果的にHaskell触りだしました。触りだしたんだけどなんかIO型のところで詰まっている。
今回はRandomR使ってその乱数を元にランダムな分岐をしたかったわけですが……ってなんかこの辞典で殺されそうなきが。
IO Intをcase使って分岐させたかったのです。そしたらなんかNum(IO Int)実装しろやとか言われて泣いてる。

久々にGoogle Playにアプリケーションを公開した

なんかこれまでも結構どうでもいい物はたくさん作ってたんだけど自作のサーバと通信する関係上サーバがないと機能しなかったり色々GooglePlayに公開できない理由的なのがあったので上げてませんでした。

久々に人に渡しても使えそうなアプリケーションを書いたので公開しました。

https://play.google.com/store/apps/details?id=jp.haru2036.twitflow_Android&hl=ja

割りと何から何まで適当実装なのでこれから直していかないと……とか思ってますがいつになるやら。

今回はAndroid4.2から追加されたDaydreamを使ってみたいというのがモチベーションでやってみたのでDaydreamの画面で眺めるのに最適化したつもりだったり。Nexus7のドックに乗っけるとすぐにTLが流れだすのは我ながら嬉しかったりします。

まあそんなこんなで公開したのですが、よくよく考えたらこれまで公開した中で一番まともなアプリケーションだこれ……変なモチベーションの先には変な成果物が待ってるのです……

自作Botに自動ふぁぼ機能を追加した

しました。
中身的には自分のふぁぼ欄の単語ごとの頻度をとってTLのツイートの単語の重みとして使います。
そいでそのツイートの単語全部の重みの合計が閾値超えてればふぁぼ。それだけ。

------2013/09/18追記------
今のところそれっぽいふぁぼ結構あるけどセルフふぁぼが多すぎるのでそのうちしゅうせいしようかと。
あ、あとリポジトリこちら。
https://github.com/haru2036/autofav
------追記おしまい------

dendai sie;LT #3に参加しました

久々にLTできる機会があったので参加してきました。
LT大会は久しぶりだったしデモでもグダグダになってたりしましたが、このネタ部内発表回のほぼ使いまわしです。

内容的には一つ前のエントリみたいなかんじ。自然言語処理関連と言うより、今回のネタはAndroid端末とサーバ間でのWebsocket通信だったりします。

再掲になりますが、サーバ側のコードは
https://github.com/haru2036/laboyouth
にあります。

Websocket対応のために追記したコードは
https://gist.github.com/haru2036/6480203
です。


他の方の発表ではワンセグチューナで無線を聞けるのがわりかし楽しそうで今度秋葉原行ったら探してみようかなとか思ったり、コンパーチブルなToughbookの話とか聞いて中古屋覗いて見てみたくなってたりしました。

皆さん、お疲れ様でした。またよろしくお願いします!

AutobahnつかってWebsocketをお手軽にやる

最近やったことメモ。

 

自作人工無能と会話できるAndroid向けのフロントエンド的なアプリケーション組みたい→サーバとの通信どうするよ→Websocket使ってみたい→よくわからない+めんどくさい→ググる→Autobahnなる物を発見

ってな感じで使ってみた。

Autobahnについて

  • かなりお手軽に簡単にWebsocketを使うクライアント、サーバを組める
  • Autobahn単体でググるとえっちなさいとがトップに来る
  • Python,Javascript,Androidで使える、あとテストスイートもある

てなわけで、今回の用途には十分すぎる素晴らしいものです。

Android側のプログラムを書くときにAndroid Studioのプレビュー版を使ってみたのですが、そこで外部ライブラリを追加する時にちょっと手間取った以外は全く問題なくさくさくできちゃいましたし、サーバ側のPythonも40行足らずでかけちゃいました。

サーバ側のコードも凄まじく簡単で、イベントハンドラを書く感じでできちゃいました。素晴らしいです。

https://gist.github.com/haru2036/6480203

こんなかんじで。

いい感じでできるのでまた使うかもしれないです。