wolfmasa's blog

フロンターレとプログラミング関係の話題を、気が向いたときにつぶやくブログです。

まずRails new

まずは rails newをしてみる。

もちろんバージョンは

Rails 6.0.0

チュートリアルの内容なので、ざっと手順を紹介。今回はSimpleNoteというサンプルアプリを作ってみる。

# railsのインストール
sudo gem install rails

# create project
rails new SimpleNote .

cd SimpleNote

# 昔はなかったと思うが、webpackerのインストールが必要そう。
rails webpacker:install

# bunder install自体はnewの中でされるが、追加gemについては改めてインストール
vim Gemfile
bundler install

# passはいらなかったかも。。。予定ではMD5のハッシュ値を保存して認証に使おうかと
rails g scaffold user name:string email:string pass:string
rails g scaffold article title:string contents:text
rails db:migrate

とりあえずここまででUserとArticleのモデルとRouteなどの一式が作成。

次はRouteを設定して、Userが複数のArticleを持つ構造を表現し、かつ認証なんかも着手したい。

まずRails new

まずは rails newをしてみる。

もちろんバージョンは

Rails 6.0.0

チュートリアルの内容なので、ざっと手順を紹介。今回はSimpleNoteというサンプルアプリを作ってみる。

# railsのインストール
sudo gem install rails

# create project
rails new SimpleNote .

cd SimpleNote

# 昔はなかったと思うが、webpackerのインストールが必要そう。
rails webpacker:install

# bunder install自体はnewの中でされるが、追加gemについては改めてインストール
vim Gemfile
bundler install

# passはいらなかったかも。。。予定ではMD5のハッシュ値を保存して認証に使おうかと
rails g scaffold user name:string email:string pass:string
rails g scaffold article title:string contents:text
rails db:migrate

とりあえずここまででUserとArticleのモデルとRouteなどの一式が作成。

次はRouteを設定して、Userが複数のArticleを持つ構造を表現し、かつ認証なんかも着手したい。

Rails 6.0

Rails 6.0がリリースされたようです。

railsguides.jp

version 4くらいからあまり真面目に追っていなかったので、改めてRailsを再入門したいと思います。

Rails 6の主な変更点

Action Mailbox

Action Mailboxは、受信メールをコントローラ的なメールボックスにルーティングできます。Action Mailboxの詳細はAction Mailboxの基礎を参照してください。

Railsアプリでメールを受信して、DBに格納できたりするらしい。確かに、例えばEvernoteみたいにメールを受け取ってそのままノートに登録したり、Webサービスでメールを受け取りたいシチュエーションはある気がする。

Rails6で導入されるAction Mailboxを試してみた - bagelee(ベーグリー)

調べていると、メールって簡単にハンドリングできるんだなと妙に感心してしまいました。昔はメールサーバ立てて、色々設定して、大変そうだなーってイメージしかなかったんだけど。。。

Action Text

Action Textは、リッチテキストコンテンツと編集機能をRailsで使えるようにします。Trixエディタは、リンク/引用/リスト/画像埋め込み/ギャラリーなどあらゆるものを扱えます。Trixエディタで生成されるリッチテキストコンテンツは独自のRichTextモデルに保存され、アプリ内にある既存のActive Recordモデルに関連付けられます。 埋め込み画像などの添付ファイルは自動的にActive Storageを用いて保存され、RichTextモデルに関連付けられます。

サンプルにあるような、リッチテキストをブラウザで編集する環境が簡単に(セットアップはいくつかいる模様)実装できるコンポーネントのよう。

ただ、エディタ機能が常にいるかというと、ちょっとニッチな気もするので、Rails本体にいるのか?bundlerインストールでも良いのでは?と思わなくもない。(何か理由があるんだろうなと思いつつ)

とはいえ、APIサーバではなくサイトを簡単に(1パッケージで)作る人からすると嬉しいのかな。それよりも認証系がもっと簡単に扱えないかな。

触ってみる(これから)

勉強も兼ねて、久しぶりに簡単なサービスを作ってみようと思います。

以前は、herokuを使いましたが、できればAWSかAzureも使ってみたいな。

挫折する可能性も高いですが、とりあえず頑張ろう。

囲碁プログラミング

囲碁ディープラーニングプログラミング

囲碁ディープラーニングプログラミング

少し前から、囲碁プログラミングの本を読んでいる。

読んでいるだけではわからないので、pythonの勉強も兼ねて実装もしているのだが、なかなか道のりは遠そうだ。

GitHub - wolfmasa/python-go

まずは、3章までのところは一通り終わり、ランダムに着手するbotを作り、多少の高速化(Zobristハッシュ)も適用し、botbot、人間対botが動くようになった。

とはいえ、ランダムに置きまくってくるので、途中まで対局してみたけど、疲れてあまりやる気はしなかった。

どうも、初版ということもあり、ちょいちょい誤字などがあるようで、詰まったら元々のソースコードを読み、確認しながら進めている。

特に、pythonの場合、関数の区切り(rubyのbegen〜end)が、空白やタブで表現されているので、本にした場合にインデントがずれるとそれだけで意味が大きく変わってしまう。

個人的に、関数などの区切りが明確でない表記は、あまり好きになれないなぁ。

GitHub - maxpumperla/deep_learning_and_the_game_of_go: Code and other material for the book "Deep Learning and the Game of Go"

あと逆に、サンプルソースコードがどう考えても本とあっていないところもあって、例えばzobristのハッシュを作るところ。各盤面にhashをあらかじめ割り当てることで、盤面が繰り返されている場合(囲碁で言うコウ)の判定を高速化するコードが、サンプルコードと本記載とでは結構違った。(白黒の状態だけでなくNoneにもハッシュを割り当てていたり、何もない盤面のハッシュ値など)

次はモンテカルロ法などの実装に進む予定(説明はすでに読んだ)

OSSへのコントリビュート

medium.com

このモチベーションは自分と同じで、すごくよくわかる。

でも、それを実際に行動に移して、目標を達成している、それが違う。

とはいうものの、心理的障壁が高くて、自分のような技術力でできる気がしなかったのと、ソースを読み進めようとしても、全然わからんということが多く、いつも断念していた。

ここ数年、自分はこの辺で立ち止まっている。

もちろん、この方と比べて自分はさらに何もできないので、比べるだけ失礼かもしれない。

それはそれとしても、最近エンジニアとして自信をなくすことが多かったので、こういう話で少し気が楽なったのは事実。

素直に、もうちょっと自分も頑張らなきゃと思えました。

oss-gate.github.io

ちなみに、OSSにコントリビュートすることにフォーカスするのであれば、このようなイベントがあるらしい。

すごく興味はあるので、ぜひ一度行きたいなと思っている。(でも勇気がない)

MacBook Proを買ってみた

MacBook Pro

ずっと使っていたMacは、late 2013のRetinaではない安いMacBook Pro

さすがにOSをアップデートし続けていると、最近は日本語変換だけでも2、3秒待たされたり、アプリがなかなか起動しなかったり、時間のロスが大きくなってきた。

思えば、当時はまだSSDが高価で、安いHDDにしてしまったし、メモリも増設していないしで、その辺が今になって響いてきているのではないかと思う。

www.apple.com

てな訳で、1年くらい前から検討を重ねていたのだけど、今回リニューアルされたMacbook Proの評判を見ていると、USB-C以外は(苦笑)良さそうなので、思い切って買い換えてみた。

f:id:wolfmasa:20170813154235j:plain

f:id:wolfmasa:20170813154300j:plain

色は、前回シルバーだったので、今回はスペースグレイ。

あと、話題のTouchBarモデルじゃなくて、物理キーボードモデルにした代わりに、SSDは512G、メモリは16Gに増設して、ある程度長く使えるようなマシンを目指してみました。

データ移行に関して

基本的にはiCloudに頼れば良いはずだけど、せっかくなので綺麗にしたいという気持ちもあり、まずは古いMacBookでデータを整理したのちに、Time Machineで外付けHDDにコピー。

その後、新しいMacBookを起動して、移行アシスタントで復元すると、設定とかおおよその設定はコピー完了。

最初の起動時には復元せずに、後からやったので、アカウントがバッティングしたりとかはあったけど、それ以外は特に問題なし。

良いところ

快適

当たり前だけど、まずは反応が早くて、ストレスが全くないところはGOOD!

キーボード

普段会社では、HHKを使っている私としては、今の賛否両論あるMacBookProのペタペタキーボードに慣れることとができるかどうかが不安だった。

多分、自分はキーボードの打ち心地にはこだわってしまう方で、打ちにくいキーボードを使っていると、本当に作業に集中できない反面、打っているのは気持ち良いキーボードだと、それだけで幸せになれる。

実際に使ってみると、音がそれなりにあるところと、思ったよりも反応がある気がして打ちやすい印象。これは打っていて楽しめる側なので、問題なし。正直ホッとしました。

Retina

会社ではRetinaなので、それほど驚きはないのだけど、家では初めてではあったので、時々その違いにびっくりする。

やっぱり、綺麗なことはいいことだ。

悪いところ

USB-C

正確には type C。

今まで使っていたUSBをつなぐためにアダプタが必要なことは、わかっていたことなので、それほど苦にならないのだけど、差し込み具合が結構引っかかるというか、固いのが不満。

Lightningのように、すんなり入ってくれるイメージを持っていたのだけど、結構固くて、入れにくく、抜けづらいには以外にストレス。

3D Touch

使い方が全くわからない。対応アプリも少ないし、存在をすぐに忘れてしまいそう・・・

余談

iCloudやTime Machine経由でデータを移行したおかげで、brewやgemのパッケージもそのまま移行された模様。

goのツリーも当然コピーされたので、長年蓄積されたいらないファイルを一層し損ねた感じはある。いや、移行してくれることは素敵なことなのだけど。

ハロー"Hello, World" OSと標準ライブラリのシゴトとしくみ

★★★★☆

きっかけ

なぜか地元の図書館にあったので、手にとってみたのだが、

タイトルと中身のギャップが半端ない!!

手にしていると、多くの人から「今更ハロー・ワールド?」と言われるのだが、これはれっきとしたOS、システムコール、標準ライブラリ(glibc等)のソースコードを読み、アセンブラデバッグをする、低レベルでハードな本である。

この手の本は多分あまり売れないこともあって、あまり種類は多くないが、1冊がとても濃密なので、過去のいくつか読んでみたがとても勉強になった。

Inside Linux Software オープンソースソフトウェアのからくりとしくみ

Inside Linux Software オープンソースソフトウェアのからくりとしくみ

Linuxカーネル2.6解読室

Linuxカーネル2.6解読室

Binary Hacks ―ハッカー秘伝のテクニック100選

Binary Hacks ―ハッカー秘伝のテクニック100選

読んだ中でパッと思い出すのはこの辺り。

今回の本は、それのどれとも微妙に違って、

という豪華な(?)内容になっている。本当に丁寧に説明してあって、素晴らしい入門書であると思う。

各章の感想

第1章 ハロー・ワールドに触れてみる

まずはビルドするところから。最初はビルドするだけで一苦労なので、これは地味に大切なこと。

あと、デバッグのやり方にも言及しており、その流れでアセンブラに突入。

ソフトランディングを期待していると、いきなり低レベルな世界に放り込まれた感じで面食らうが、説明は懇切丁寧なのでちゃんと読んでいけば置いていかれることはない。

第2章 printf()の内部動作を追う

printfを追っていくことで、その先のシステムコールの存在を解説する。

概念的にはみんな理解していることだが、実際に追っていくと想像以上に階層化されていたり、単純な仕組みだったりして、意外に発見が多い。

第3章 Linuxカーネルの処理を探る

システムコールの存在をキーに、今度はOS側のソースを使って解説する。

さらりとOSのカーネルの解説を始めるが、これも結構慣れていないと敷居が高く感じるもの。

実際にやりそうな流れで解析を説明しているようで、実は結構効率的に説明してくれているので、それほど混乱せずに説明についていくことができる。

OSとは何かということについても触れ始めており、この辺りで徐々に作者のこだわりが見え隠れするのが面白い。

第4章 ライブラリからのシステムコール呼び出し

共有ライブラリの仕組みなどを解説。

glibcのソースなども当然解説するのだが、あまり考えたことのない動的ライブラリについても仕組みを説明してくれる。

第5章 main()関数の前と後

プロセスの起動について、まずはデバッガを使ってアプリ側から、次にカーネル側から説明をする。

Binary Hacksにもあったが、main関数の前や後など、普通あまり考えたことはない。

システムコールについても、write以外を説明することで理解を深めてもらう工夫がある。

第6章 標準入出力関数の実装を見る

どちらかというとOSの仕組みの話。さらりと流す。

第7章 コンパイルの手順と仕組み

この後の実行バイナリの話のために、前提となるコンパイルとリンクの説明をする。

ここだけではないが、要所要所でobjdumpやreadelfなどのツールの使い方も丁寧に紹介してくれるのが良い。

コンパイラについては、個人的には他でも読んだことある内容だったので、それほど驚きはない。

第8章 実行ファイル解析

実行ファイル、ここではELFについて解説。

txtやdataの説明や、セグメントとセクションの話などがあった。

第9章 最適化

アセンブラを紹介していると、こんな説明もできるのかという章。

実際に最適化をして、どう変化するかと一緒に紹介してくれる。

O0/O1/O2などそれぞれに対して、有効となる最適化オプションは色々あるが、オプションの名前くらいだけで詳細に踏み込まないのも良い。

第10章 様々な環境と様々なアーキテクチャ

ARMなどでビルドしてみたりする。

ごめんなさい。興味がないので飛ばしました。。。

第11章 可変長引数の扱い

可変長の引数を、なぜか章を割いて説明。

x86の例だと思うが、解析しながら説明しているのだが、そりゃそうだよなーという感じではあった。

第12章 解析の集大成―システムコールの切替えを見る

まとめのような章。