Ruby on Rails チュートリアル 第12章をやったメモ
Ruby on Rails チュートリアル:実例を使って Rails を学ぼうのRails 5.1(第4版)
12章はパスワードを忘れたときのためにメールで再設定できるようにする。
モチベーションが結構つらくなってきたのでさくっと終わらせた。 11章に引き続き、まだ本番環境でメールの送信ができてない。
- Ruby on Rails チュートリアル 第1章をやったメモ - yskohtの日記
- Ruby on Rails チュートリアル 第2章をやったメモ - yskohtの日記
- Ruby on Rails チュートリアル 第3章をやったメモ - yskohtの日記
- Ruby on Rails チュートリアル 第4章をやったメモ - yskohtの日記
- Ruby on Rails チュートリアル 第5章をやったメモ - yskohtの日記
- Ruby on Rails チュートリアル 第6章をやったメモ - yskohtの日記
- Ruby on Rails チュートリアル 第7章をやったメモ - yskohtの日記
- Ruby on Rails チュートリアル 第8章をやったメモ - yskohtの日記
- Ruby on Rails チュートリアル 第9章をやったメモ - yskohtの日記
- Ruby on Rails チュートリアル 第10章をやったメモ - yskohtの日記
- Ruby on Rails チュートリアル 第11章をやったメモ - yskohtの日記
- Ruby on Rails チュートリアル 第12章をやったメモ - yskohtの日記
- Ruby on Rails チュートリアル 第13章をやったメモ - yskohtの日記
- Ruby on Rails チュートリアル 第14章をやったメモ - yskohtの日記
Ruby on Rails チュートリアル 第11章をやったメモ
Ruby on Rails チュートリアル:実例を使って Rails を学ぼうのRails 5.1(第4版)
11章はアカウントを有効化するためのメールを送れるようにする。
- 11.3.2
- できないと思ったら、
authenticated?
をミスっていた。
- できないと思ったら、
def authenticated?(attribute, token) digest = send("#{attribute}_digest") return false if digest.nil? # remember_digestのままになっていた BCrypt::Password.new(digest).is_password?(token) end
11.3.3
&&
演算子の方がand
よりも優先順位が高い- 括弧つけたほうが良いように見える
11.4
- クレジットカードを登録したのにアプリケーションにアドオンを追加するのができなかった
address is not permitted to install ~~
みたいなことを言われた
- クレカ登録し直してみるかと思って、いったんリムーブしたら次に登録するには2/1まで待たないといけないらしい…
- クレジットカードを登録したのにアプリケーションにアドオンを追加するのができなかった
- Ruby on Rails チュートリアル 第1章をやったメモ - yskohtの日記
- Ruby on Rails チュートリアル 第2章をやったメモ - yskohtの日記
- Ruby on Rails チュートリアル 第3章をやったメモ - yskohtの日記
- Ruby on Rails チュートリアル 第4章をやったメモ - yskohtの日記
- Ruby on Rails チュートリアル 第5章をやったメモ - yskohtの日記
- Ruby on Rails チュートリアル 第6章をやったメモ - yskohtの日記
- Ruby on Rails チュートリアル 第7章をやったメモ - yskohtの日記
- Ruby on Rails チュートリアル 第8章をやったメモ - yskohtの日記
- Ruby on Rails チュートリアル 第9章をやったメモ - yskohtの日記
- Ruby on Rails チュートリアル 第10章をやったメモ - yskohtの日記
- Ruby on Rails チュートリアル 第11章をやったメモ - yskohtの日記
- Ruby on Rails チュートリアル 第12章をやったメモ - yskohtの日記
- Ruby on Rails チュートリアル 第13章をやったメモ - yskohtの日記
- Ruby on Rails チュートリアル 第14章をやったメモ - yskohtの日記
9keyビルドログ
9keyを作りました
9key: qmk_firmware/keyboards/9key at master · qmk/qmk_firmware
デフォルトのキーマップは以下のようになっています。
/* LAYER 0 * ,-----------------------. * | 1 | 2 | 3 | * |-------+-------+-------| * | 4 | 5/ENT | 6 | Dbl Tap 5 for Enter * |-------+-------+-------| * | 7/0 | 8 | 9/FN | 7/0 = Dbl Tap 7 for 0 - 9/FN = Hold 9 for FN * `-----------------------' */ /* LAYER 1 * ,-----------------------. * | ESC | + | - | * |-------+-------+-------| * | BSPC | * | / | * |-------+-------+-------| * | 00 | . | | * `-----------------------' */
5
のダブルタップでEnter
、7
のダブルタップで0
が入力されます。
また、9
キーと同時押しで、演算子やバックスペースも入力できます。
キーボードのダブルタップって今まで使ったことがなかったので新鮮でした。
回路図
配線の交差をなくしたかったためROWとpro microの結線を変更しています。
組み立て
— yskoht (@_yskoht) 2018年1月8日
ユニバーサル基板に電動ドリルで穴を開けて無理やりキースイッチを取り付けています。
スイッチは千石電商でばら売りされているのを買ってきました。
ファームウェア
QMKのkeyboards/9key/config.h
を変更して、ピンの順番とダイオードの方向(スキャンする方向)を修正。
diff --git a/keyboards/9key/config.h b/keyboards/9key/config.h index eee8407..3e03474 100644 --- a/keyboards/9key/config.h +++ b/keyboards/9key/config.h @@ -33,7 +33,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. #define MATRIX_COLS 3 /* 9Key PCB default pin-out */ -#define MATRIX_ROW_PINS { D1, D0, D4 } +#define MATRIX_ROW_PINS { D4, D0, D1 } #define MATRIX_COL_PINS { F4, F5, F6 } #define UNUSED_PINS @@ -45,7 +45,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. #define ws2812_DDRREG DDRD /* COL2ROW or ROW2COL */ -#define DIODE_DIRECTION COL2ROW +#define DIODE_DIRECTION ROW2COL #define TAPPING_TERM 200
ビルド・書き込み
書き込みのためにUSBaspを購入しました。
ビルド
$ make 9key:default
書き込み
$ sudo avrdude -p atmega32u4 -c usbasp -e -U flash:w:9key_default.hex
これで無事に動作しました。よかった。
参考
キーマップの変更
今現在、MiSTEL BAROCCO MD600を使っていてDELキーと矢印キーがないのが辛いので、キーマップを以下のように変更しました。
,-----------------------. | HOME | BSCP | DEL | |-------+-------+-------| | END | ↑ | ENT | |-------+-------+-------| | ← | ↓ | → | `-----------------------'
参考
ROW_PINS, COL_PINSについてのメモ
以下、QMKのピンの指定方法について自分用のメモです。
ピンはconfig.h
で指定される。
#define MATRIX_ROW_PINS { D4, D0, D1 } #define MATRIX_COL_PINS { F4, F5, F6 }
このD?
、F?
はコントローラのピンを表していて、pro microの回路図を見ると基板のどのピンに繋がっているのかがわかる。
D?
、F?
はquantum/config_common.h
で定義されていて、
例えばD4
は0x94
。
quantum/matrix.c
を見てみると、
MATRIX_ROW_PINS, MATRIX_COL_PINS
は
それぞれrow_pins, col_pins
に入れられて、
init_rows
の中でピンの初期化をしている。
static void init_rows(void) { for(uint8_t x = 0; x < MATRIX_ROWS; x++) { uint8_t pin = row_pins[x]; _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI } }
ここで出てくる_SFR_IO8
については以下に詳しく書かれている。
pinがD4
のとき、以下の動作をしていることになる。
uint8_t pin = 0x94; // #define D4 0x94 _SFR_IO8(9 + 1) &= ~_BV(4); // IN _SFR_IO8(9 + 2) |= _BV(4); // HI
一方、AVRのIOピンは<avr/io.h>
で定義されていて、<avr/iom32u4.h>
を見てみると以下のように記述されている。
#define DDRD _SFR_IO8(0x0A) #define PORTD _SFR_IO8(0x0B)
つまり、DDRD &= ~_BV(4);
でD4を入力にして、
PORTD |= _BV(4);
でプルアップしている。
これなら入門書でよく見る記述なので分かりやすい。
参考
Ruby on Rails チュートリアル 第10章をやったメモ
Ruby on Rails チュートリアル:実例を使って Rails を学ぼうのRails 5.1(第4版)
10章はUsersのedit、update、index、destroyを作る。
- 10.1.1
- target="_blank"で新しいページを開くときはref="noopener"をつける
- 演習2
- 盛大にはまった。
- パーシャルを使ってリファクタリングするのは
users/new.html.erb
とusers/edit.html.rb
。自分は間違えてsessions/new.html.erb
を 編集して訳が分からなくなってたsessions/new.html.erb
は@user
じゃなくて:session
じゃないか!とか考えてた
- それから、新しく作るパーシャルは
/users/_form.html.erb
。自分は間違えてlayouts/_form.html.erb
を作っていた
- 10.1.4
- 10.14のテストが通らない。手動ではうまくいくのに
- 10.11に
@user.reload
が入ってなかった
- 10.11に
- 10.14のテストが通らない。手動ではうまくいくのに
- 10.2
- セキュリティモデル
- 10.2.1
- beforeフィルター
- 10.2.3
- フレンドリーフォワーディング
- 10.3.1
- 演習がつらくなってきた…
user_path(@user)
とedit_user_path(@user)
が使える
- 演習がつらくなってきた…
- 10.3.2
rails db:seed
が1回目はうまくいかなかった。何回か試したら出来てた。原因は不明
- 10.3.3
- ページネーション
- 10.3.5
<%= render user %>
user
という名前は関係ない。クラスが重要
- ぱっと見で何やってんだか分からなくなりそうで怖い
- Ruby on Rails チュートリアル 第1章をやったメモ - yskohtの日記
- Ruby on Rails チュートリアル 第2章をやったメモ - yskohtの日記
- Ruby on Rails チュートリアル 第3章をやったメモ - yskohtの日記
- Ruby on Rails チュートリアル 第4章をやったメモ - yskohtの日記
- Ruby on Rails チュートリアル 第5章をやったメモ - yskohtの日記
- Ruby on Rails チュートリアル 第6章をやったメモ - yskohtの日記
- Ruby on Rails チュートリアル 第7章をやったメモ - yskohtの日記
- Ruby on Rails チュートリアル 第8章をやったメモ - yskohtの日記
- Ruby on Rails チュートリアル 第9章をやったメモ - yskohtの日記
- Ruby on Rails チュートリアル 第10章をやったメモ - yskohtの日記
- Ruby on Rails チュートリアル 第11章をやったメモ - yskohtの日記
- Ruby on Rails チュートリアル 第12章をやったメモ - yskohtの日記
- Ruby on Rails チュートリアル 第13章をやったメモ - yskohtの日記
- Ruby on Rails チュートリアル 第14章をやったメモ - yskohtの日記
Ruby on Rails チュートリアル 第9章をやったメモ
Ruby on Rails チュートリアル:実例を使って Rails を学ぼうのRails 5.1(第4版)
9章は発展的なログイン機構の作成。Cookieを扱う。
- 9.1.1
- 9.1.2
- 署名付きcookieまだよくわかってない
- 9.2
- SCSSいじったときにまたエラーが出た。以下を消してサーバーを再起動したら動いた
- サーバー動いてるときにSCSSいじっちゃいけないのかなぁ
- SCSSいじったときにまたエラーが出た。以下を消してサーバーを再起動したら動いた
app/assets/stylesheets/.sass-cache/ app/assets/stylesheets/custom.css
- 9.32
- エラー出てテストが通らないとはまっていたらクラス名を間違っていた
ec2-user:~/environment/sample_app (advanced-login) $ rails test Running via Spring preloader in process 9228 Started with run options --seed 18715 ERROR["test_current_user_returns_nil_when_remember_digest_is_wrong", SessionHelperTest, 0.593626256000789] test_current_user_returns_nil_when_remember_digest_is_wrong#SessionHelperTest (0.59s) NoMethodError: NoMethodError: undefined method `remember' for #<SessionHelperTest:0x0000000650a770> test/helpers/sessions_helper_test.rb:6:in `setup' # ^^^^^^^ SessionsじゃなくてSessionになってる ERROR["test_current_user_returns_right_user_when_session_is_nil", SessionHelperTest, 0.6088529440003185] test_current_user_returns_right_user_when_session_is_nil#SessionHelperTest (0.61s) NoMethodError: NoMethodError: undefined method `remember' for #<SessionHelperTest:0x0000000648e878> test/helpers/sessions_helper_test.rb:6:in `setup' 28/28: [===============================================================================================================================================================================] 100% Time: 00:00:00, Time: 00:00:00 Finished in 0.64160s 28 tests, 68 assertions, 0 failures, 2 errors, 0 skips
- Ruby on Rails チュートリアル 第1章をやったメモ - yskohtの日記
- Ruby on Rails チュートリアル 第2章をやったメモ - yskohtの日記
- Ruby on Rails チュートリアル 第3章をやったメモ - yskohtの日記
- Ruby on Rails チュートリアル 第4章をやったメモ - yskohtの日記
- Ruby on Rails チュートリアル 第5章をやったメモ - yskohtの日記
- Ruby on Rails チュートリアル 第6章をやったメモ - yskohtの日記
- Ruby on Rails チュートリアル 第7章をやったメモ - yskohtの日記
- Ruby on Rails チュートリアル 第8章をやったメモ - yskohtの日記
- Ruby on Rails チュートリアル 第9章をやったメモ - yskohtの日記
- Ruby on Rails チュートリアル 第10章をやったメモ - yskohtの日記
- Ruby on Rails チュートリアル 第11章をやったメモ - yskohtの日記
- Ruby on Rails チュートリアル 第12章をやったメモ - yskohtの日記
- Ruby on Rails チュートリアル 第13章をやったメモ - yskohtの日記
- Ruby on Rails チュートリアル 第14章をやったメモ - yskohtの日記
リーダブルコード第4部を読んだメモ
O'Reilly Japan - リーダブルコード をざっと読んで気になったところのメモ。
第4部は選抜テーマ
14章 テストと読みやすさ
最近のC++では、以下のように配列リテラルをそのまま引数として渡せるようになっている。
CheckScoreBeforeAfter({-5, 1, 4, -99998.7, 3}, {4, 3, 1});
知らなかったので手元でやってみた。
#include <iostream> #include <vector> using namespace std; void f(vector<int> v) { for(size_t i = 0; i < v.size(); i++) { cout << v[i] << endl; } } int main() { f({1, 2, 3}); }
$ g++ -v 組み込み spec を使用しています。 COLLECT_GCC=g++ COLLECT_LTO_WRAPPER=/usr/lib/gcc/i686-pc-cygwin/5.4.0/lto-wrapper.exe ターゲット: i686-pc-cygwin configure 設定: (略) スレッドモデル: posix gcc バージョン 5.4.0 (GCC) $ g++ a.cpp -std=c++11 && ./a 1 2 3
おおー。
15章 「分/時間カウンタ」を設計・実装する
最近まともにコードを読んでなかったし、まともなコードも読んでなかったので楽しかった。
- リーダブルコード第1部を読んだメモ - yskohtの日記
- リーダブルコード第2部を読んだメモ - yskohtの日記
- リーダブルコード第3部を読んだメモ - yskohtの日記
- リーダブルコード第4部を読んだメモ - yskohtの日記