at backyard

Color my life with the chaos of trouble.

そのうちコードリーディングしようと思っているオープンソースのプロジェクト

最初に

ずっと"下書き"の状態のまま、保存されていた記事。
最近Rubyを触り始めた、と書かれているので去年に書かれた投稿であると思う。
ふと思い立って読み返してみたら、やはりコールドリーディング欲が掻き立てられたので記事を公開することにした。

ここから本編

f:id:shinshin86:20160911080843p:plain

タイトルのままである。
ソースコードを読もうと思っているオープンソースプロジェクトを幾つか、
自分へのメモがてら書いていく。

Ruby on Rails (Ruby)

github.com

最近Rubyを、そしてRailsを触り始めたので読んでみようと思った次第。

下記の記事もRailsを読もうと思うに至った要因の一つ。

tango-ruby.hatenablog.com

qiita.com


Bottle

github.com

1つのpythonファイルのみで構成されている、軽量なPython製Webフレームワーク。
自身もちょくちょく触っているので、ちゃんと中身も理解しておこうと思った次第。

Bottle自体の解説については、触り始めた当時この記事にとても助けられました。

myenigma.hatenablog.com


Janome (Python)

github.com

Pure Pythonで実装された日本語の形態素解析ライブラリ。
依存ライブラリなしで簡単にインストールでき、とても使いやすい。
ユーザーフレンドリーというのは実に素晴らしい、というのを改めて感じたライブラリでもある。

下記はライブラリの作者自身が書いているDocument。

Welcome to janome's documentation! (Japanese) — Janome v0.4 documentation (ja)

Pythonに触れ始めてまだ間もない時期に出会ったライブラリの一つであり、mocobetaさんはPython使う際の私の目標の一つとなっている。

形態素解析というものがどのように実装されていのか?
ずっと上手くイメージができていなかったので、ソースコードを読んで学んでいきたい。


ここから下は息切れ的なメモとなっています。
後日、加筆していきます。


D3.js (Javascript)

github.com

下記の記事を読み、そのうち読んでみようと思った次第。

D3はJavaScript関数型言語としての側面を最大限に活用して作成されているライブラリです。

shimz.me


kilo (C)

github.com

最近関心を集めているらしい、Salvatore Sanfilippo氏によって開発されたエディタ「Kilo」。
KiloはC言語1000行程度で実装されている、"実用的"なエディタとのこと。

news.mynavi.jp

HTML5テトリス

github.com

今回のブログのテーマとは少し離れるが、勉強としてこちらにも触れておきたい。

www.chrome-life.com


Java関連

Javaオープンソース関連は

d.hatena.ne.jp

qiita.com

個人的に買ってよかった歯磨きペースト

ここ最近、興味が湧いたものについてはすぐに手をのばすようにしている。
今年に入ってから手を伸ばしてみたものをいくつか上げてみると、
サウナにはまり(Podcastでfogmog 森さんと話したのがハマったきっかけだ -> Episode 6 - Sadou's philosophy)、
週末にジョギングするようになり(fitbitとiPod touch + ankerのbluetoothイヤホンの力は偉大である)、
そして今回記事のタイトルになった"歯磨き"にもハマった。

歯磨きにハマった理由

理由というほどでもないが、私はそれほど歯が強い方ではなく、小さい頃からよく虫歯になっていたし、20代もよく歯科医院に通っていた。
どこかでそろそろ歯の健康管理を意識せねばという思いもあったが、他に歯磨きという行為が思いの外、気分転換になるということにも気づいたのである
作業に行き詰まった時に散歩に出るのと同じような効果が、歯磨きにはある。
また、当然のことだが口の中がきれいになると気分も良くなるし、口の中もきれいになるし、いいことづくしだ。
そして、せっかく歯磨きに興味をもったのだから普段使ったことのない歯磨きペーストをこの機会に購入してみようと思った。

この記事は自身が試してみた歯磨きペーストに対する感想を備忘録的に書いている。いわば、個人的な日記のようなものだ。
なお、歯磨きペーストの画像はそれぞれAmazonの商品詳細ページへのリンクとなっている。

コンクール ジェルコートF

見た目に惹かれて購入した。
一般的にミントの香りがしっかりとある歯磨き粉とは香りの種類が違うが、すぐに慣れるし、この香りが好きになる。
またジェル状になっており、泡も不必要に出ないので細かく磨けて良い。
磨き終わった後の歯のツルツル具合に衝撃を受けたと同時に、ちょっとばかりお金を出しても良い歯磨きペーストを使ったほうが良いと思うきっかけにもなった。

クリーニングジェル ソフト

研磨剤入りということで、歯をクリーニングする用途で使われる。
これは毎日は使わずに週二日のペースで使用しており、使用後は上に書いたジェルコートで再度歯を磨く。
最初使った時に多少刺激が強いと思ったが、今では気にならなくなった。
私はよくコーヒーを飲むので歯に着色があるが、これを使い始めてから多少白くなってきたようなきがする。。。あくまで気がするレベルだが。
上にも書いたように週二日ペースでの使用なので、持ちは良い。
引き続き使用して経過をチェックしたい。

余談だが、高校時代にデンタルヘルスに詳しい教師がいて、その方も研磨剤入りの歯磨き粉を週二日で使用していると行っていた。
こういうのを使い続けると歯が健康的な白(正確にはクリーム色)になっていくらしい。

プロスペック歯みがきペースト

最近購入したもの。フッ素配合のよう。
ペーストはジェル状でほのかなミントの香り。これもジェルコートと同様に、泡が少なめなので細かく磨けて良い。
歯磨き後の感じもジェルコートと似ており、良い感じに歯がつるつるになる。
まだ使い始めて日が浅いので、引き続き使用してみよう。

プラッカーズ フロスアップミント

歯磨きペーストではないが、歯磨きを意識し始めて使い始めたフロス。
以前はフロスの、あの歯の隙間に入ってくる感じが嫌いだったが、今となっては食後にこれをしないと気持ち悪いぐらいになってしまった。
おまけに私は歯並びが悪いので、よくものが挟まってしまうというのもある。旅先でも忘れたくない、必需品である。

さて、そのフロスだが、いくつか試してみたが、私はプラッカーズのをよく使っている。
ほんのりとミントの香りがするのも良いが(本当にほのかな感じ)、糸の張り具合が自身の歯に馴染むというのがよく使っている理由かもしれない。

引き続き、機会を見て他のものも試してみる。

Railsで複数テーブルのjsonデータを一度に返したい。

Railsのrender jsonを用いて、複数テーブルのjsonデータを返す方法。

調べてもぱっと出てこなかったので、一応メモとしておく。
(そもそも常識なのかもしれない)
そのため、あくまで個人的な備忘録の意味が強い。

最近RailsAPIを作っているのだが、"render json"で複数の関連テーブルを
1つのjsonとして返したかったので、そのやり方をメモ。

"posts"というテーブルに関連する"comments"と"images"データも一緒に返したいときは、
下記のようにrenderメソッドに記載する。
("@posts"にはpostsデータが入っているものとする。

respond_to do |f|
  f.json { render json: @posts.to_json(:include => [:comments, :images]) }
end


また、関連しないテーブルの情報を"render json"で一度に返すときは下記のようにした。

respond_to do |f|
  f.json { render json: [@posts.to_json(:include => [:comments, :images]), [user: @user.to_json]] }
end

# または

respond_to do |f|
  f.json { render json: [posts: @posts.to_json(:include => [:comments, :images]), user: @user.to_json] }
end

これで希望する情報をjson形式で返せる。
のだけど、あまりこういうやり方が検索情報で出てこなかったので、
rails的にありなのかはいまいち自信が持てない。


※一応、このポストを行う前に同じケースを今一度探してみたが、
たぶんこのstack overflowの記事が該当する気がする。

stackoverflow.com

追記

上記のやり方で出力した場合、postsデータはjson文字列となって出力されるが、
(js側で一度JSON.parseをする必要がある)
下記のようにして取得すると、そのままオブジェクトとして取得できる。個人的なメモとして残しておく。

# postとuserをそれぞれオブジェクトとして取得
respond_to do |f|
  f.json { render json: {posts: @posts, user: @user }}
end

geohotでおなじみのComma.aiが$88でローンチした "Panda"について

日本では上野動物園のシンシンとその赤ちゃんパンダ🐼が話題になっている、ここ最近ですが、
先日geohotことGeorge Hotzの設立したスタートアップ"Comma.ai"のリポジトリを何気なく見に行ったら、
どうやら彼らが新しいプロダクトを作っていることが判明。
プロダクトの名前は"Panda"。
調べてみるとTechCrunchに記事があった。

techcrunch.com


どうやら、日本語版のTechCrunchにはこの記事が翻訳されて掲載されていないようだったので、
簡単にこのブログで紹介する。

なお、私はこれらの分野に関する知識について非常に疎いため、記載内容に誤りがある可能性がある。
その際はコメント欄やツイッターなどから間違いを指摘いただけるとありがたい。

なお、comma.aiとは何か?どういうプロダクトを作っているか?などについては割愛する。

※昨年の彼らの動向について知らない方々のために、下記の記事を参考として貼っておく。

thebridge.jp

bita.jp



Pandaについて

comma – introducing comma three


Panda自体は上記Comma.aiのトップページにも写っている、白と黒のドングルであり、
このようなドングルは例えば"Mojio"のような他のプロットフォームでも使用されているものらしい。

www.moj.io


Pandaは"Chffr"というアプリとペアにすると、車内のすべてのセンサーから録画を開始できるようで、
このChffrは基本的にクラウドに接続されたダッシュカメラであり、事故のビデオを録画したい人や、運転している様子を見たい人に便利なようだ。
iPhone版アプリのサムネイルを見てみたが、色々と情報を取得できそうで面白そうだった。

https://itunes.apple.com/us/app/chffr-dash-cam-that-remembers/id1146683979?at=10l8JW&ct=hatenablog


このChffrを使って得たデータを"Cabana"と呼ばれる、CAN(Controller Area Analysis)ツールで、取り込んで解釈するようだ。

CabanaのDemoはこちらから見れる↓
(アクセスペダルやステアリングコントロールなど、様々なデータが取れていることが分かる)

comma.ai cabana



なお、Pandaは車のOBDII portに繋いで使うらしい。
(1996年以降の車は皆このportを持っているらしいが、車に疎い私にはよくわからない。)


comma – introducing comma three


medium.com


TechCrunchの記事によると、少なくとも1000台を販売すること望んでいるとのこと。
また、現在73人のComma.ai愛好家がテストをしているようだ。


以下はTechCrunchからの記事の引用である

“We’re trying to solve a really hard problem and basically there are only three real competitors:
Waymo, Tesla and us. We’re all coming at it from a different angle,” he said. “I can get a lot of smart people working on it for me if I open everything up like this.”

私たちはとても難しい問題を解決しようとしている。
そして基本的には、Waymo、Tesla、私たちという3つの本当の競争相手しかいない、とのこと。
WaymoやTeslaもクールな企業だし、今後のgeohotとComma.aiの動向からも、やはり目が離せなそうだ。

Warning: unmountComponentAtNode(): The node you're attempting to unmount was rendered by another copy of React. という警告を直した際のメモ

react-railsでアプリを書いていると、下記のような"warning"に出会った。

Warning: unmountComponentAtNode(): The node you're attempting to unmount was rendered by another copy of React.

調べてみると下記のissueにたどり着いた。

github.com

内容を見てみると、以前に修正されてはいるんだけど、バージョン上げたらまた出てきたよ!という内容のようだ。
なお、この時点での最新バージョンは下記のとおりとなる。
・react-rails (v2.2.0)
・webpacker gem (v2.0)

---------追記---------

そうそう、自身の環境を書き忘れていたので、下記に追記
Rails 5.0.2
・react-rails (1.11.0)

なお、webpackerは使用していない。

------追記終わり------

そして、以前あがっていたissueとは下記のものになるよう。

github.com

issue内にも書かれているとおり、下記のコードを"application.js"に追記したら、warningが出なくなった。

ReactRailsUJS.handleEvent('turbolinks:before-cache', function() {
  window.ReactRailsUJS.unmountComponents();
});


ちなみにreact-railsは今年リリースした"Sauna Map of Japan"にて使用中。
フロント側は元々jQueryで書いていたのだが、今回react-railsを使って、絶賛書き直し中。
自身の勉強を兼ねてもいる。今更な話ではあるが、react良いですね〜

react-rails

github.com


ちなみにSauna Map of Japanはまだベータ版。少しずつではあるが、使いやすいものにしていきます。

Sauna Map of Japan

https://sauna-map-of-japan.herokuapp.com/


そういえば、久しぶりのブログ更新になりました。
あと、少し前にMediumにも近況載せました。
最近フロントエンド側でコード書いていますよ、という話。

medium.com

Sauna Map of Japan - β

先日Sauna Map of JapanをBetaにあげました。
どんな機能追加が行われたかについては当サイトのChange logを引用します。

Betaリリースに伴い、下記の機能が追加されています。
・日本地図からの検索が県単位で行えるようになりました
・ユーザがサウナ情報の登録を行えるようになりました(ログイン時のみ)
・ユーザのコメント履歴をユーザページに追加
・ユーザアカウント作成時のメールアドレス認証

Railsで作られているSauna Map of Japanでは認証周りに"sorcery"を使用しているのですが、
とても使いやすくて重宝しています。
今回実装したメールアドレス認証もsorceryのおかげ。