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企業のセミナールーム)に見蕩れてほわほわした気持ちで帰り道、摩天楼のそびえ立つ大都会をお散歩しながら厨二病を発症させる体験になる。

RaspberryPi 備忘録 Hostname変更+AvahiDaemonについて

何度も調べてる気がするから自分用のメモを残す。

 

Host名の確認はhostnameコマンドから

 

Host名の変更

/etc/hosts

/etc/hostname

を編集

sudo /etc/init.d/hostname.sh

↑Initializing hostname?

AvahiDaemonのインストール

sudo apt-get update

sudo apt-get install avahi-daemon

AvahiDaemonの使い方

次回からssh接続する際に

ssh pi@host名.local

ESP-WROOM-02(ESP8266)を動かせた

見事にブログを開設してから数日で飽きたようで、久しぶりの更新になります。
最近の出来事をたらたらと綴りたい気持ちもあるけど、
今日は早速本題に入ります。

丸一日(25時間ほど)かけて格安無線モジュールESP-WROOM-02を動かすことが出来ました。
(ATコマンドの確認までです。)

そもそもESP-WROOM-02を買ったきっかけは、
ものすごく安く(2015/11/3時点 秋月で550円)、それなりに実用的なものが作れると思ったからです。

それと、Cerevo✕DMM.makeのイベントに2度も参加を逃し、
くやしかったから自分で真似られるところまで頑張ってみようかと。

部品

  • ESP-WROOM-02 Wifiモジュール
  • ESP-WR00M-02用DIP化ボード スイッチサイエンス製
  • 10kΩ抵抗 x 4
  • 3.3V出力レギュレーターTA48MO33F(秋月のは回路用コンデンサー込で100円)
  • FT232RL シリアルUSB変換モジュール(組み立て式は800円)
  • ジャンパーワイヤー

はんだ付け

f:id:Yuck:20151106213550j:plain

ボードにはんだ付けするのはちょっと頑張ります。マスキングテープ必須です。
組立済みのが千石に売ってたような気がする。1000円ちょいで。

f:id:Yuck:20151106213648j:plain

FTF232RLにピンヘッダをはんだ付けするのも一苦労でした。固定台があったほうが良い。
これも組立済みのが950円で秋月に売ってます。

配線

ESP-WROOM-02側

ピン 接続先
3v3 電源
EN pull up
IO15 pull down
IO2 pull up
IO0 pull up*
TXD RXD
RXD TXD
RST pull up
GND GND

*ブートモードによってつなぎ方が変わります。

モード IO0ピン
FLASH Boot(通常時) pull up
UART Download pull down

UART Download modeはFWの書き換えなどを行うときに利用します。

FT232RL側のUSBピンをレギュレーターにつなぎ5Vを3.3Vに降圧させる。
3.3Vで動作する無線モジュールを壊しちゃうからね。
TXD, RXD, USB, GND*2を含めた5ピンを利用してます。

並列接続でプルアップ・ダウン回路を作れたら抵抗は2本で済みそうです。 回路がわからないので↓のようにゴリ押しで4本使いました。

f:id:Yuck:20151106212119j:plain

それと、Cerevoのボードはブートモードの切り替えが簡単にできるのでそちらのほうがいいかもしれませんね。 今回は千石に売ってるスイッチサイエンス製のものを使いました。

変換ボードの横幅が広すぎてブレッドボードを2つ使う必要がありました。

f:id:Yuck:20151106213332j:plain

f:id:Yuck:20151106213349j:plain

f:id:Yuck:20151106213354j:plain

回路を読めない僕はこういうブレッドボードの完成画像をまず参考にするので、
自分のも上手く撮れないだろうかと頑張ってみましたが案外難しいですね。

接続

配線ができたら早速PCに繋げます。

ArduinoIDEからTools -> Serial Portで目的のポートを選択します。
僕の環境ではttyUSB0を選択しました。

同じくTools -> Serial Monitorを選択しウィンドウが開いたら
改行コードをBoth NL&CR、Baud rate(シリアル通信の通信速度)を115200 baudに設定します。
日本語にローカライズされてるIDEではたしかCRおよびLFだった気がします。

AT -> OK, You got it.

最後にシリアルモニターで「AT」と入力し、OKが返ってきたら正常に動いてることが確認できます。

f:id:Yuck:20151106220132p:plain:w450

次は実際にネットワークに繋げる工作とトラブルシューティングガイドを書こう。