OSC2017 Springで出展しました

久しぶりの更新です。

就活してる同期がスーツをピシッとキメて全力疾走してる中ダルダルのパーカーを着てナマケモノと課外活動、バイトをやりながら春休みを過ごしてる茶山です。もうすぐ長期休暇も終わりそうです。ヤバ。

では、本題です。投稿が遅れました。

今回もOSCに出典した

3月10日から二日間開催されたオープンソースカンファレンス(通称OSC)に出展側として参加してきました。

僕が所属しているプログラミングサークルのCPAWの皆と参加したのでサークルに興味がある方はサイトを眺めてみて下さい。

サークルで参加するのは二回目になり、今回もIoTに関係する作品を展示しました。ロボットアームをスマホで制御できるようにしました。

当日のブースの様子です。

f:id:Yuck:20170319005054j:plain:w500

今回は手軽に買えるキットをハック(?)することにしました。(0知識から2ヶ月で3Dプリンターを駆使してロボットアームをフルスクラッチで作るのは無理な気がしたので)

ちょうどいい感じの記事があったので以下の記事をベースに作品を作りました。(大変参考になりました)

www.itmedia.co.jp

上の記事で紹介されているMR-999Rという学習用のロボットアームキットをEdisonではなくラズパイ(Raspberry Pi3)のGPIOで制御できるように細工しました。

ただ制御できるだけじゃつまらないので、同じラズパイ上にWebサーバーを立て、同一ネットワークにつながってるデバイス(展示ではスマホ)からもラズパイのGPIOを制御できるようにしました。これは一回目の出展でお見せした『走る!自動販売機』と同様にwebiopiを使っています。

また、ロボットアームにカメラを取り付け映像をWebSocket経由で配信し、スマホからロボットアーム視点の景色を観れるようにもしました。

1回目のOSC出典では後輩を頑張らせすぎてしまったので、今回は僕も開発に加わりました。後輩3人(1年生二人、2年生一人)を巻き込んで次のことをやりました。

  • アーム本体+ラズパイで制御するためのリレーボードの組み立て
  • GPIOをリモートコントロールするためのWebサーバーと操縦ページの実装
  • アームに取り付けたカメラの映像を配信するためのカメラストリーミングサーバーの実装

レポジトリはロボットアーム制御とカメラストリーミングサーバー用に二つあります。

github.com

github.com

電子工作は普通の開発と違ってリモート作業が行えないので、週に1日大学で集まって作業しました。遠いところからわざわざ足を運んでくれた仲間に感謝。

当日は興味深そうにもじゃもじゃのリレーボードを眺めてくれるお客さんや、「ムズ!ムズいっすね~」と言いながらもゲームをクリアして楽しんでくれたお客さんが多く立ち寄ったので飽きませんでした。

次回出展する機会があれば、コントローラーのUIやカメラ周りをいじってもっと面白いロボットアーム作品を作りたいですね~(チラチラ

小ネタ

以下のことを一度に行っても電力不足等による不具合は見られなかったので「ラズパイ3すげー」って思いました。 - 5Vピンを含めた12ピンの使用 - Webサーバー+ストリーミングサーバー - カメラモジュールの使用 ただ上記に加えてラズパイのXウィンドウを利用するとクラッシュすることが展示中に何度かありました。限界ですかね。

Pythonのリスト内包表記について

※自分用勉強メモです

目指せワンライナー。実行速度は通常のfor文より速いらしい。
(filter, mapの代わりになる文法でもある)

基本

リスト内包表記はすべてリストで返ってくる。もとのリストは変更されない。

>>> array = [1,2,3]
>>> new_array = [x**2 for x in array]
>>> new_array
[1, 4, 9]
>>> array
[1, 2, 3]
for文のネスト

for文のネストもリスト内包表記だと一行で書ける。
例えば2重リストarrayをフラットにしたいとき、

>>> array = [[1,2,3],[4,5,6],[7],[8,9]]
>>> new_array1 = [item for sublist in array for item in sublist]
>>> new_array1
[1, 2, 3, 4, 5, 6, 7, 8, 9]

このように一行で書くことができる。ちなみにfor文で書いてみようとすると、

>>> array = [[1,2,3],[4,5,6],[7],[8,9]]
>>> new_array2 = []
>>> for sublist in array:
...     for item in sublist:
...         new_array2.append(item)
>>> new_array2
[1, 2, 3, 4, 5, 6, 7, 8, 9]

空の配列の定義を含めて4行使う。

以上。ではノシ


近況報告:
研究室の締め作業を先輩に教えてもらった。これで一人前のラボメン。早くマイマグを買わなくては。

Ruby on Railsの勉強_4

※自分用の勉強メモです。所々間違った解釈をしている箇所があると思います。

www.railstutorial.org

今日は"6章をやる"

内容は5章の最後に触れたUserのデータモデルを実際に作成し、ユーザーのデータの管理の仕方を勉強する。Twitterっぽいマイクロブログを作るのが本書の目的だから残りの12章までUser data modelに関わったことをやる。

7〜10章の内容は以下の通り:

  • 7章: ユーザーの作成とプロフィール画面を実装
  • 8章: ログイン・ログアウトの機能の実装
  • 9章: サイトを不正アクセスから守る方法を学ぶ
  • 10章: メールアドレスを利用したアカウントアクティベーションの実装

なかなか面白そうだ。早速とりかかろう

感想・メモ

  • 認証システムについて: ClearanceやAuthlogic, Devise, CanCanといったウェブフレームワークが提供してくれる認証システムは存在する。しかし、一般的に認証システムは細かな設定をする必要があるため、既存のものを自分の目的の用途にカスタマイズする手間を考えるとスクラッチから作ったほうが効率がいい(らしい)。
  • それに加えて、提供されてるものは基本ブラックボックスだから、自分が使うものは中身が分かってたほうがいいよねって意見もある。ただそこまで中身を気にするんだったら、Railsなんてブラックボックスの塊みたいなものそもそも使わないよなァ。
  • あと、最近のRailsでは認証システムが作りやすくなってるらしい。(それもブラックボックスやん)
  • MVCのM: Modelがウェブアプリで利用するデータの管理を行う。
  • Active Record: RailsはActive Recordというライブラリを使ってデータベースをいじる。それらに含まれているメソッドを使ってデータベースを操作するため、リレーショナル・データベースで使われるSQLを勉強する必要がない。migration機能のおかげでデータの定義をRubyで書ける。
  • 開発ではSQLite、Herokuへデプロイする際はPostgreSQLを利用
  • MVCのMとC: Controller名は複数形(Users)であるのに対して、Model名は単数形(User)だったりする。(慣習)
  • "migrating up": Migrationの実行のこと。SQLiteデータベースが作成され、DB Browser for SQLiteで内容が閲覧できる。
  • Userオブジェクトの操作インタプリタ終了時にデータベースの操作を全て破棄できるrails console --sandboxを使う。 (Model名).new(メモリ上にオブジェクトを作成)と.save(DB上に保存)を利用してオブジェクトをDB上に作成する方法と .createの1コマンドで作成する方法がある。 オブジェクトを破棄したい場合は .destroy。
  • .find(1), .find_by(name: "")などのメソッドからオブジェクトを検索することができる。
  • userの情報を更新した時は.saveをする。

6.1.5 Updating user objectsまでやった。2時間やってまだ章の1/3しか終わっていない事実。大学生は暇だね。最高だね。

Ruby on Railsの勉強_3

www.railstutorial.org

第5章を読む。第5章は主にレイアウト・デザイン(CSSフレームワークの取り込み)について。Partials、rails route、asset pipeline(Sassの導入)の勉強もやるっぽい。

 

感想・メモ

  • markupを使った編集とかは基本testを行わない。
  • CSSのidとclassの主な違いは、idは一意の識別idであって、classはページ中に複数使ってもいいこと。

(新学期が始まって実験やら研究室配属でいろいろと忙しくてここで3週間ブランクが空く)

  • Partialsを使うことでhtml.erbコードの一部分を別のファイルに隔離させることができる。コードが見やすくするのが目的。
  • 隔離したPartialsファイルの名前は"_(アンダースコア)"から始まるぞ。
  • Asset pipeline ""significantly"" improves the production and management of static assets. (Static assetsとはCSS, JS, 画像のことを指す。)
  • AssetsをPreprocessor Engineというもので処理してからブラウザに送る。
  • Syntactically awesome stylesheets(Sass)のnesting(CSSのネスト構造化)といった機能があるおかげでCSSを簡潔に記述することができる。
  • Sass自体はCSSの拡張といったものではなく、CSSを見やすく文法を工夫したもの。(nesting, variables, 'mixins'などの機能がある)
  • "named routes":
  • '_path'は"/"以降、'_url'はurl全体を指す。リダイレクトの時後者を使う。
  • Integration testを使うとリンクの確認やページが正しくレンダーされるかを確かめてくれる。

Ruby on Railsの勉強_2

日をまたいでしまったせいで連続ストリークならず。こんばんは。

 

学んだことを全てブログにまとめてるといくら時間があっても足りないからメモ・感想を綴る形式でいこう。

www.railstutorial.org

第4章は主にRubyの文法について書かれてた。

感想・メモ

  • RailsのViewにはHTMLとembedded Ruby(Erb)が含まれてる。
  • Rubyインスタンスメソッドがたくさんあるな??
  • "#{文字列が格納されてる変数} 文字列"で簡単に文字列の結合ができるのはCOOL
  • Stringの代わりにSymbol(機能の少ないString)をHashのKeyとして使う。そしてSymbolを省略した書き方もある(Ruby1.9から。制限付き)
  • 省略が好きな言語らしく、関数の小括弧()を失くしたり、Hashが関数の最後の引数としてある場合のみ中括弧{}を省略したりとやりたい放題。
  • Railsから生まれたSymbolが良すぎて大元のRubyに実装されたって話が面白い
  • インスタンス.superclass.superclass.superclass...を続けるとやがてBasicObjectに行き着き土にかえる。(継承のお話。Rubyに存在するものは全てオブジェクト。だから純オブジェクト指向言語って呼ばれたりする)
  • attr_accessor :name, :email でインスタンス変数(クラス内で使える変数)@nameと@emailのgetterとsetterを用意できる。
  • Rubyのbuilt-inクラスを直接編集することができる。(やばそう)

気になること

  • Gitの使い方がいまいち分かってない。
  • HashってPythonでいう辞書だよな(一応key-valueのペアだし)

この章は今日大学のガイダンス中に読んだり、帰宅後映画(エリジウム *1)を観ながら読んでたからすぐ頭から抜けそうだぞ。もう文法を忘れつつある。

 

 

*1 作業用BGMとして聞き流してたから全く内容が頭に入ってこなかったけど、そこそこ面白そうだった。スキンヘッドのマット・デイモンと変なアクセントのジョディ・フォスターが観れたから大満足。Netflixで絶賛配信中。

Ruby on Railsの勉強_1

*日本語のアウトプット用のメモ

 

友達から「この本いいよ!」と勧められたRailsの本。

www.railstutorial.org

第3版の和訳もあるみたい。

railstutorial.jp

これを少し前から読み始めて、第3章の本格的なWebアプリを組み立てる話まで来たからこの本の今のところ良かった点を挙げてみる。

良かったところ

  • 本文中各所に出てくる「とりあえず今は分からないと思うけどとりあえず実行してみて!あとで全部教えるから!」にちっとも不安にならない。それくらい後から親切におしえてくれる。*1
  • 第3版から面倒くさい環境構築のところを省いて、代わりにCloud9 *2を使った説明をしてくれるからネット環境さえあればすぐに取り掛かれる。
  • Railsフレームワークの説明のみならず、MVCモデル、RESTfulアーキテクチャといった概念の説明からgitでのバージョン管理の方法まで教えてくれる。凄くありがたい。

おわり

ブラウザ上で形になるものがすぐできてWebアプリ開発は楽しいね。

 

*1 ちなみにIT系の参考書によく出てくる「おまじない」という表現が大嫌いだ。

*2 Ubuntuの仮想上で走るIDEをブラウザを使って操作できるクラウドサービス。すごい。PythonRuby用に用意されてるプリセットを使うと環境構築にほとんど時間を取られない。

Ruby on Railsの勉強_0

*これはRuby on Railsの勉強を始めるまでに至る経緯をだらだらと説明しているだけだから第_0回。

PythonDjangoってやつがよさげ?

ウェブアプリケーションが作りたくてPythonのウェブフレームワークであるDjangoを始めたものの、公式チュートリアルのTDDの章まで行ったところで、

「これ(TDDに限らず)全部わっかんね」

となって投げた。(おそらく)既にWeb開発を行ったことのある人向けに書かれたこのチュートリアルは、全てにおいて初心者の俺にはなかなかハードルが高かった。

Railsにしよう

別のところでたまたまRailsの勉強会へ行く機会があって、「3時間で簡単なマイクロブログを作る」という内容だった。

Rubyが全く分からない自分が行っても本当に大丈夫だろうかという不安があったけど、普通にフレームワークから入っても問題ないと講師がはじめに言ってくれて安心した。勉強会に来てる周りの学生もWebアプリ開発は初めてで、皆で楽しくやれた。*1

MVCモデルやCRUDサイクル、アソシエーションといった難しい言葉とそれらの簡単な知識、あと環境変数がめちゃくちゃになったMBPを持ち帰った。RailsでWebアプリ開発をしようと決めた。勉強会はモチベを上げるにはいい場所だ。*2

まとめ

Rubyって国産でしょう?国産野菜はいいけどプログラミング言語はちょっとなあ」というくだらない理由から触ろうとしなかったけど、Railsを通じて少しずつ勉強していこうかなと思った。

 

 

*1 実は参加者の半数が開発環境の構築(El Capitan要するXcodeのアプデ、Brewのインストール、RbEnvのごにょごにょ、Gem・Railsのインストール)が出来てなくて、勉強会はグダってたけど、俺はそれくらいがちょうどいいと思った。

 

*2 ただし自分のレベルにあった勉強会へ行かないと、ただ会場(例:丸の内の巨大なビルの51290837418階にあるIT企業のセミナールーム)に見蕩れてほわほわした気持ちで帰り道、摩天楼のそびえ立つ大都会をお散歩しながら厨二病を発症させる体験になる。