悠々としたTECH日記

「TECH日記」と言いながらそんなに面白いこと書いてない。備忘録的な感じ。 もちろん、宣伝とかもするけど、ブログを基本的にTwitterの延長としか考えてないので、その程度に。あと、作文の練習も兼ねて。

ゆ~さんがこの二か月で習得したこと

広告の危険ライン回避の記事で CoderDojo について書いてたけどなんかなかなか進まない(削れない)ので、こんなことを投稿。

ま、この二か月の日記というか振り返りというか。

(よーするに二か月くらいまえからたってるんじゃねーかという。)

Git / Github

といってもここ最近だけど。 いちいち書いてたら間に合わないのでこれ便利ーっていうのだけ。 メモメモ。

Git

git add -p (差分分割) :

変更、差分の分割に使う。 あー、同じファイルで目的違う 変更・差分つくちゃったわーって時に使う。多分ステージ状態にするのをきめたりできるんだっけ。

git stash (一回差分とか回避?) :

一回差分を保存できる。 回復は、 git stash list で番号をみて、 git stash pop stash@{#number} で復活。

git rebase -i (量産したコミットたちを縛り上げて一つにできる) :

おーー、コミット量産ー! でもこのまま push やら PR は汚いわー。って時に使う。HEAD~~~みたいな感じで頭からまとめるのを指定できる。ログで pick から s(sqash)なりなんなりでまとめるのを変更してそのまま保存すればまとめた後のコミット名の編集画面になる。

git commit --amend (しくじったコミットメッセージも治せる) :

いぇー!コミットメッセージ、Add を Ads にしてやったぜー、とか、 Update を Updata にしてやったぜー みたいな感じに使う。直前のコミットメッセージの変更ができる。

Github

以下のやつをサポートしてもらいながら作ってる(学習含めて)のでございますが...

coderdojo-konan-jp-rails.herokuapp.com

公開してるのは、 Gihub。なるほど、結構おもしろい。

github.com

Issues と Commit を紐づける

git commit するときに対応する番号を入力するだけ。

例:) issue id が #3 で、紐づけする時

git commit -m "#3 Add Hepler for Next Event URL"

あとは、 git push すれば... (ブランチは対象リポジトリあればなんでもOK)

f:id:yu-san-19:20180420232331p:plain

こういう風に追加される。

Issues や PR と Issues や PR を紐づける

コメント欄や説明版に #{id} を入れる、ただそれだけ。

PR の マージと一緒に Issue も Close

PR の説明欄に キーワード + #id キーワードは調べれば出てくるけど、

fix
fixed
resolve
resolved
close
closed

ぐらいは正しいと思う。

Rails / RSpec

といってもまああまり特筆事項はないか...

Rails

helper

意外に思ったのが、 root_url とか、 devise の current_user とかもHelper やったのね...(あれ、違う..?)

Dojo の HP では、次のイベントのページのURLをHelperで取得できるようにしてる。

RSpec

基本的なこと

テストの役割とか?

人間様でも見つけられないミスとか、やはり機械的に定義しなければ...

ただ、その機械に定義するのも人間というね... 勉強します...

基本的に、

  describe "検証するもの。next_event_url みたいな" do
    context "場合とか。現在が開催前の場合 みたいな" do
      it "検証することとかく。イベントURLを返すこと みたいな"  do
        expect('調べる値').to 期待すること # eq 'https://hoge.com' であれば hoge と等しいかを検証する
      end
    end
  end

という構文みたい。

これはなんというか、いかに期待することを再現して構文をするかっていう。訓練が必要ね。

Travis CI & Heroku

もう一項にまとめてしまう。

Travis CI は、テストを自動でやってくれるCIツール。

Heroku は Paas だったっけ、デプロイしたらすぐにアプリが公開できるサービスで、無料でも制約はあるけど使用できる。

そして、 Travis の設定次第で Travis のテストがパス => Heroku へそのまま自動デプロイ ということもできる。

Heroku

PostageSQL

Heroku はデフォルトで Rails に設定されてる SQLite ではなく、PostgreSQL なので、それ用の設定が必要。といっても設定ファイルはほとんど向こうで書き換えてくれるので、必要なのは、 Gemfile に gem 'pg' を追加すればよいだけ。(productionに入れなくてもよいという話も聞いたことあるけど...)

おしまい

これぐらい?

まだ間違った認識や、あと変数・クラス・メソッドの命名とかはへたくそだったり、うまくリファクタリングというかができなかったりするので... おもしろい。

ま、もっともっと精進してまいります。

Rails でいろいろやってる途中 CoffeeScriptで結構嵌ったのでメモ。

経緯

色々Railsでやってたんだけど、次のようなエラーが起きて、以降、二週間ぐらい嵌らせていただきました、どうもありがとうございます。

$(...).datetimepicker() is not function.

この DateTimePicker というのが、下のリンクので、確か Bootstrap を使ってごにょごにょできるんです。

Bootstrap 3 Datepicker

それを普通に Gemfile に追記して、きちんと普通に bundle install して、ドキュメント通り、以下のスクリプトを組んだんですけど、

全然動かない。んでブラウザーのコンソール見ると、上のエラーが起きてました。

最初、原因が全くわからなかったんですねー、もう調べまくって調べまくって。

解決までにやったこと

Gemfile の中身を再確認

インストール忘れないかなーとか。

JSで書き直す

コンパイルのミスかなーとか。

CoffeeScript もっかい勉強しなおす

構文間違ってんのかもなーとか。

ドキュメント読み直す

使い方間違えたりしてたのかなーとか。

ERBを確認

クラス名の指定で大文字とかになってないかなーとか。

二週間嵌ってたので、いろいろと無駄なこと試してました。

解決策

どこかの質問サイトだったかで、別のライブラリが $ 変数を使用している時があるよ、的な感じの掲載があって...

そこには、$関数の割り当てを初期化して、別の変数にもっかい割り当てるといいよー的な事が書いてあったので。

これで治りました。

ちょっとJQuery とかの仕組みがまだ理解できてないのが多いので、もっとしっかり勉強しようと思った。

参考

m-namiki.hatenablog.jp

DojoMeguri in Tottori で LEGO MINDSTORMS EV3 をいじったのでまとめ

前置き

次回もし僕がLEGODojoでやる時に、過去にどんな風なことをやったのか、記録的な感じで書いておきます。

あと、もしかしたら誰かほかの方の参考にもなるかと思いまして...

経緯

割愛します。 前の記事を参照。

yu-yu-nisshi.hateblo.jp

結構盛況でした、僕も結構はしゃぎましたし。

LEGO MINDSTORMS EV3 とは?

afrel.co.jp

上記参照。

うちの場合は、CoderDojo Japan https://coderdojo.jp/ に寄贈されたものをいただきました。

今回の投稿はやったこと重視なので詳細はこれも割愛。

やったこと (Ninja と一緒にやった方法)

環境

作ったもの

以下の自動運転ロボ。結構肝心なところまで行ったんだけども、発表でしくじるという。

進めていった方法

どうやってとっかかろうか、と思ったけど、案外Ninjaが食いついてきたので、しめしめ、と思い、 まずは、事前に作っておいた展示用のプログラムを起動して、興味を惹きつけた。

単純にやろうよ!よりも、実際に動く所見せたほうが、興味を持つかな、と思って。

今日は一日レゴロボットの研究ー!結構慣れればかんたんにできるようになってて、驚いた…😁さすが教育用…リモコン機能と、簡易自動運転機能つけたので、これで大山のイベントの展示用として使えるかな😅ただもっと体験ができるようにするにはどうすればいいか…🤔

「すげぇー」「どうやってやったん?」みたいな反応が上がったので、そこで「よっしゃ、じゃあ一緒にやろーぜ!」的な感じで開発に入った。

どんなふうにやったか。

と言っても具体的にどんなことが出来るのか初めてのNinjaにはわからないので、まずはいろいろ一緒に触ってみて、各ブロックの命令の意味などを教えてあげて...

そのうえで、「じゃあ、何をできるようにする?目標決めようでー!」といって一緒に考えた。

んで、詰まるようだったら(ていうか詰まった)ので、

ミッション

  • この範囲でピタッと止めるようにプログラム組んでみよー!(外れたらアウト)
  • 次にこの範囲でピタッと止まった後、Uターンしてこっちに来るようにしよう!

みたいなゲーム感覚で進めていきました。

だんだんと僕もNinjaも興に乗ってきて、最終的に障害物よけながらゴール地点にたどり着くようにしよう!という話に。

そこからはもう教える、とかじゃなくて一緒に遊ぶ域に入ってしまいました。(これが理想のDojo象だったりなのかも。)

「あああああ、ダメだー、どうすればええんやろ。」「う~ん、モーターの回転数を云々...」 「おぉ、それやってみよ... 駄目や、できんかった。」「こんなセンサーあるで!」「おお!それ使えるかも」

みたいな感じでいろいろ試して、ようやく完成...したかと思えば、発表会でうまく動かず残念賞でした...

(岡南でも毎度失敗するんですよね、テストはきちんと動くのに。)

それでも結構盛り上がって楽しそうでしたし、僕も楽しかったです。

もし、自分がやるかもしれない時の手引き

#1 開始しばらくは、センサーやモーターの働きと、プログラムの組み方、できる事を理解するために、ミッション形式でやってもらう

今回は、

  • この四角いの線の中でぴったり止まるように実装!
  • Uターンして戻ってくるように実装!
  • 障害物があったら止めるように実装!

だった。次の目標に繋がるような感じが良いのかも。(上三つ組み合わせて下のができる、みたいな感じ。)

ここは普通に助言をして、すすっと済ませて、モチベーションを保たせておく。

#2 大体理解してきたら、今回の目標を決める

  • 今回は、「自動で障害物よけながらゴール目指すロボ」でした。

#3 目標達成に向けて一緒に遊ぶ。

さあ、あそびましょうー(^^♪

まとめ

まずは、一緒に遊ぶNinjaの様子を見て、ツボを探りながら一緒に遊ぶのがいいのかもね。

Bestな方法なんて人それぞれだし。 一応、次の機会があれば参考にしようと残しておこうと思う。