yak shaving life

遠回りこそが最短の道

Rust勉強にっき(2)

日記と言いつつ何日かの隙間時間にやったことのまとめみたいになってしまっているが特に気にしないことにしようそうしよう。

Chapter 3, 4, 5が終わった。とりあえずデータ型とstructが分かったのでC言語の基礎文法(ポインタ除く)に相当するようなところは理解できたはず。4章はOwnershipだったのだが、これまで全く知らなかった概念が出てきたことにより何故だかテンションが上がってきた。知的好奇心を刺激されてるということなのか、それともRustの設計に感心というか感動しているのか。よくわからないけどなんか楽しいです(^q^)

Chapter 6を今やっている。Enumとパターンマッチング。モダンな言語はこの辺が強い印象があるので、Javaももっとパターンマッチングとかできるようになって欲しいなー。なー。JEPとかJSRにあったりするのだろうか。知らんけど。

しかし、普段は仕事にほとんど関係ない技術を勉強していてもなかなかモチベーションが保てないタイプなのだが、何故だかRustはやりたくなる。なんでだろう。the bookを完走して、自分で何かモノを作ってみたらその理由が見えてくるのかもしれないなあ。

例によってDiscordのメモ:

rustup docs --book でthe bookをオフラインで開けるのか。これで新幹線でも飛行機でもthe bookし放題☆
そんなやつはいなさそう

時間ないがすこしでもchapter 3進めよう
statement(文)とexpression(式)の違いがRustのfunctionにとっては大切、らしい。ほう?
statement does not return a value
なのでx = y = 1 とかができない。なるほど
ブロック{} は式
式は終わる時セミコロンいらない、セミコロンつけたら文になる。理解
最後に評価された式が関数の返り値になる。明示的にやるときはreturn。Rubyと同じ!
RubyとRustって字面似てるよね

おお、Rustにもrangeがある!yay
しかし1..4 はを含まないらしい。含みたい場合は1..=4
これはRubyやってると混乱するな…なんで逆なんだ

やっとChapter 3が終わった!じっくりやりすぎかな…Chapter 20にたどり着くのはいつなんだ。。

お、Chapter 4は噂のOwnershipか

string literalとString型は違うのか…
信じられないくらい丁寧だなこのチュートリアル
変数への代入、または関数に引数を渡すとmove/copyが発生すると。
returnするとownershipも帰ってくる
The ownership of a variable follows the same pattern every time: assigning a value to another variable moves it. When a variable that includes data on the heap goes out of scope, the value will be cleaned up by drop unless the data has been moved to be owned by another variable.
これを毎日唱えて暗記しよう

this is too much ceremony
なかなか面白い表現だなーこれ。日常会話で使ってみたい。too much ceremony!

参照で& とか* とか出てくると急にC言語みがあるな
We call having references as function parameters borrowing
borrowing完全に理解した
なるほどborrowしてるだけなのでmutationはできない。この辺はCと真逆感あってまた混乱しそうだ…Rust脳にならないと…

References and Borrowingが終わった。もうRustはマスターしたと言っても過言ではないだろう。(過言)
次はSlice.
また明日

enumerate はインデックスと要素へのreferenceを返す。のでfor (i, &item) in hoge.enumerate() と書く。ふむ

String sliceとな。&s[0..5]

早速borrowing ってなんだっけ…となっている。記憶力ェ..
あれ、引数に参照を取るのがborrowingじゃなかったっけ?s.clear() のs もborrowingなのか。ふーむ
レシーバも含まれるのか・・・?
Slice &str はimmutable。そしてString literalはslice。ほえー
Ownershipが終わった、2㍉くらいは理解できたかな…
Chapter 5は struct
field init shorthand, JavaScriptみがあるな

5.3 に答えがあった Rust makes borrowing implicit for method receivers
first parameterにselfを取らない場合Associated Functionになる。static methodみたいなもんか。
日本語ではなんて訳されてだろうこれは
関連関数 とな
Chapter 5終わり。次は6、enum and pattern matching
今日はここまでかな。いつ終わることやら

Rust勉強にっき(1)

前回のは(0)ということで(1)から始めることにした。やっぱ数字は0から始めないとね。

というわけで Rust The Programming Language 通称 the book のChapter 1, 2をやって、Chapter 3の途中で終わった。進み遅っ。2章のハンズオンが楽しいし分かりやすいしプログラムを少しずつ作って進化させていく過程を初心者に教えるのにいいんじゃないかと思った。あまりの出来のよさに感動してしまい、全てのプログラミング言語がこのChapter 2のクローンを作れば全初心者が幸せになれるのでは…!?などと思ったり、早速Rubyバージョンを書いてみたりしていた。結果的には多少アレンジが必要そうなので途中で保留中。

そんなこんなでChapter 3を終わらせられなかった。くそう。何となく基本中の基本は分かった気がするけど。GWのうちになるべく進めたい。

例によってDiscordのコピーをペースト俗にいうコピペをしておく。意味あんのかなこれ。Twitterで連ツイとかにしとけば見やすいんだろうけど、いちいちツイートするのは正直面倒。。まあいいか。

朝Rustしよ
Hello Cargoする。.tomlってなんだ?みたことない
cargo newで勝手にgitの設定されるのか。
crate:果物・ガラス器具・家具などの運送・荷造りに用いる)わく箱,竹かご
Cargo.lockとかもあるしGemは本当偉大だな。Gemが発祥なのかどうか知らないけど。
cargo runはgo runと同じ感じか
ソースに変更がなければ再コンパイルしない。賢い
Hackmdのコードブロックがrustに対応していた
素晴らしい
intricate:(構造・模様など)こみ入った / 分かりにくい
やっとChapter 1が終わった。Chapter 2はハンズオンらしいので楽しみ
Vimで書いてたけど良い加減IDE使うか。とりあえずVSCodeかな
RustとBetter TOMLという拡張を入れた
VSCodeってauto saveの設定できるのか。知らなかった。もっと早くやっておけばよかった
std::preludeってなんかかっこいいな。名前が。プレリュード
変数はdefaultでimmutable!最高!
growableってどういう意味だろう?
 String is a string type provided by the standard library that is a growable, UTF-8 encoded bit of text.
static method呼び出しは:: ね。言語によってまちまちだからいつも忘れる。Javaで:: とかやると悲惨
& は参照。今のところC言語ファミリーっぽい記法だ
参照もデフォでimmutableなので、&hoge をmutableにするには &mut hoge
io::Result がErr の時、そのままクラッシュさせたければ expect() を使うっていうのがなんとなくわかりにくい気がするのは気のせいだろか。expectというメソッド名微妙では…?exitっぽい気がする
crab pincers:カニのハサミ
時間切れー

諸事情により再開
rand crateはlibcに依存してるのね。Cに依存ってのはこういうことか
Crates.io はRubyGems.orgとかMavenCentralとかnpmみたいなやつだな。多分
cargo doc, 便利だしおしゃれだしイケてる感あるなこれ
この2章まじで今まで見たチュートリアルの中でも最高クラスに最高だな…
タスクばらしとインクリメンタルな開発のお手本中のお手本という感じだし。プログラミング自体の入門にも良さそう。2章の丸コピRuby版でも作ろうかな
あーでも静的型付けじゃないと内容が結構変わってしまいそうだな。うーむ

integerのデフォルトは32bit。ふぅん
Chapter 2が終わった。素晴らしかった。
Ruby版の作成はまた後日。。
Chapter 3は変数、データ型、関数、コメント、制御フロー
rustc --explain E0384 でなんか色々教えてくれるの面白いな
そういやJSとかSwiftとかRustとか変数の宣言にlet を使うのってなんでだろ、letってどういう意味?と思って調べたらすぐ答え出てきた。インターネットすごい
http://piyopiyo-singapore.hatenadiary.jp/entry/2016/07/03/Swift_%E3%81%AE%E5%AE%9A%E6%95%B0_let_%E3%81%A3%E3%81%A6%E3%81%AA%E3%82%93%E3%81%A6%E4%BD%95%E3%81%AE%E7%95%A5%E8%AA%9E%EF%BC%9F
Lispなんだなー。いやBASICなのか。どっちもわからんけど。
Goはvar を選択したけど、Rustはlet を選んだ。ES6とSwiftのどっちが先にlet を使い始めたのか知らないけど、このどちらかがRustに影響を与えてるのは間違いない気がするな。いや知らんけど
Goはvar を省略できるけどRustは let を省略できないっぽい。
Goで省略できるのは初期化を伴うときだけだっけか。Goもまともにやってないからもう忘れた。
あーletがあるから再代入とshadowingを区別できるんだー。なるほどなあ
mutable variableは型を変えられないけどshadowingなら型も変えられる
two's complementって何かと思ったら2の補数か
お、float/doubleじゃなくてf32 , f64 なのね。わかりやすい良かった良かった
doubleってなんやねんっていう、ね
charはシングルクオート、stringはダブルクオート。javaと同じか

Rustに入門した

doc.rust-lang.org

これをやってみることにした。せっかくなので英語版で。分からない言葉が出てきたらメモるようにしてたらRustというより英語の勉強してるみたいになっている。英語力ェ…。

以前これの日本語版を多少読んだはずなのに全く覚えていなくて最近の記憶力の衰えにゲンナリしつつ、新しいことを学ぶワクワクも感じている。なんか楽しい。頑張ってやるぞー。ちなみに今日はHello Worldしただけ。もう眠いので寝る。

何かを勉強する過程をブログに書くみたいなことをやったことがないので、一度やってみるのも良いかもしれないなあ。

Discordに垂れ流したメモをここにも貼っておく。いつか振り返ってあの時は若かったなーなどと懐かしむ時が来るかもしれないので。

さあやろう
rustlingsより前に公式のThe Rust Programming Languageをやるかー
https://doc.rust-lang.org/book/
The Rust Programming Language - The Rust Programming Language
日本語版もあるみたいだけどせっかくなので英語で
読めない単語が出てきた時用にこのChrome Extention入れてる。くっそ便利
https://chrome.google.com/webstore/detail/mouse-dictionary/dnclbikcihnpjohihfcmmldgkjnebgnj
Mouse Dictionary
A super fast dictionary for language learners

さて
このサイト、ふつうバージョンとHTMLバージョンとebookがあるのね。ほー
普通バージョンとHTMLの違いはなんぞや
まあ良いやForewordを読もう
Forewordってなんだっけ
Foreword: 前書き
arcane: 神秘的な、不可思議な
てか以前一回読んだはずなのに全く覚えがないぞ
at odds: 対立して、衝突して
elusive:うまく逃げる、捕まえにくい、理解しにくい
Cargoはbuildツール件依存管理ツールでmaven/gradleみたいだけど、言語組み込みなのがGemとかnpmっぽいし、Rustfmt
はgofmtっぽいし、Language Serverについて初めから触れてるなんて超現代的だし、本当現代の言語って感じだ
delve:探求する、詮索する
get your hands dirty:実際に手を動かしてやってみる
meticulous:細かく気を配る
Rustじゃなくて英語の勉強になってしまってる感
smorgasbord:バイキング料理[の一種] / 種々様々の取り合わせ
Introductionがすごく面白いんだけどなかなか読み終わらない・・・
なんか蟹が出てきた:crab:
Ferris:crab:
やっと
Let’s start your Rust journey!
って言われた嬉しい。はよインストールしたい
RustのリンカはCのコンパイラに含まれている?よく分からんな
Also, some common Rust packages depend on C code and will need a C compiler
そうなんかー。Cを駆逐するにはまだまだ時間がかかるということか…
うちのMacさんにはちゃんとgcc(という名のclang)が入っているからきっと動くはずだ
gccって打ったらclangが起動するの、なんか笑っちゃうな。誰のアイデアだクリスラトナーか?
$ rustc --version
rustc 1.51.0 (2fd73fabe 2021-03-23)
めでたい:tada:
The Official Discord Channelがあるらしい、勢いで入ってみよう
Code of Conductに同意しないと参加できないシステムになってるみたい。読む。
これ良いな。↓
Please be kind and courteous. There’s no need to be mean or rude.
Code of Conduct 全文読んでから日本語版あることに気づいた。。くぅー
お、チャンネル入れた
やっと1.1が終わった。。。。
もうだいぶ眠いけどHello worldせずに寝たくないからなんとかやろう。。
Hello worldでけた!
congratulations! You’ve officially written a Rust program. That makes you a Rust programmer—welcome!
これで僕もRust programmerやで
寝よ…

未経験にJavaが人気ないらしい

Javaを使っている企業はパワハラが横行しているというツイートが流れてきた。

思わずクスッと笑ってしまったが、未経験者はある程度真に受けてしまいそうな気もする。きっと問題視している人もいるだろうと思って色々見ていると以下のような素晴らしい記事が既に書かれていた。

zenn.dev

この件に関する真面目な見解はもうこの記事を見て貰えば良いだけなので特に言うことはないが、このツイートを見て思ったのはPHPが嫌われてる理由に似ているなーということである。いや、PHPの方はガチでダメな部分もあるとか、環境構築は大変じゃないとか学習コストもそうでもないという違いはあれど、結局のところ、広く使われているかつ敷居が低いのでヤバい案件が大量にあり、苦い経験をした人たちが大量にいるというのが共通していそう。Javaはいい言語だと思います。PHPは…嫌いじゃないよ。うん。

最近はRailsで昔作られたレガシーシステムに苦しんでいるみたいな話もちょいちょい観測するので、あと5年10年したら「未経験にRubyが人気ない」とかになりそうだし、15年後は未経験にGoが人気ないかもしれない。Webの世界は栄枯盛衰、盛者必衰の理でございますな。そう考えると、いかにWeb以外の領域で人気を得られるかが重要なのかもしれない。Pythonとかまさにアレだし。

Javaには組み込みやGUIAndroidやたくさんのライブラリ/ミドルウェアが、Rubyはツール系(Goに置き換えられつつあるが…)や組み込み(mruby)があるしワンライナーやちょっとしたスクリプトにも便利なので、Webの世界が様変わりしてもなくなりはしないだろう。というわけで一番ヤバいのはPHPである。がんばれPHP。負けるなPHPPHP 7ですごく良くなったぞPHP。実行速度とメモリ効率がメキメキ改善されてて素晴らしいぞPHP。最近Union型とかできたらしいしカッコいいぞPHP

個人的にはJava勉強中なのだけど、確かに未経験者には少し難しいかもしれないと思う部分もある。maven/gradleとか、Java 8以降の関数型っぽいAPI群とか。コンパイル言語よりインタプリタ言語の方がとっつきやすいというのもわかる。けどまあ、未経験でRailsやるかSpring Bootやるかにさほど違いはない気がする。とりあえずパワハラされない/しないように気をつけたいと思います。

芸術闘争論 を読んだ

芸術闘争論 (幻冬舎文庫)

芸術闘争論 (幻冬舎文庫)

  • 作者:村上 隆
  • 発売日: 2018/12/06
  • メディア: 文庫

なぜ読もうと思ったか

これまた奥さんのススメで。村上隆とはどういう人物か、現代美術とは何なのか、現代美術の作品をどのように理解すればいいのかが学べるということで。

どのような本か

日本の現代美術においてもっとも有名かつ最重要人物の一人であるところの村上隆の著作であり、現代美術とは一体何なのか、現代美術の歴史、現代美術における今の日本の立ち位置、現代美術のアーティストになるにはどうすればいいのか、そして著者自身がどういう風に考え、行動してきたのか等が書かれているアツい本。

書評というか感想

現代美術というものは複雑なコンテキストの上に成り立っていて、複雑なルールと環境があり、それらをちゃんと学んで理解しないと作品が成り立たない。しかし今の日本の美術界でこれが分かっている人がほとんどいない。だから俺が教えてやる。的な本。とても良いです。

確かに現代美術作品を見てもどうやって理解すればいいのか途方に暮れるレベルでワケワカラン状態になることが多く、こんなのみんなどうやって鑑賞してんだろうなあくらいに思っていたのだが、何冊か本を読んでいく上で少しずつ歴史やコンテキスト、そしてルールがわかり始めた気がする。いやまだ全然なんですが。

村上隆レベルのアーティストでもこうやって歴史を勉強し、コンテキストを理解し、ルールに則った上で戦略的に作品を作っているのだというのは驚きだった。もっと「俺はこれが伝えたいんだ!これが俺の芸術じゃ!オラァ!」みたいな感じで作ってるのかと思った。全然違った。アート、奥が深い。深すぎる…。

あとは日本のアート界とか教育機関をぶった斬りまくってて面白かった。説得力もある。決して文章が上手いという感じではないけど、この人の熱量がガンガン伝わってきてよかった。他の著作も読んでみたい。

しかし、アートのこの勉強して知識をつけると少しずつ理解できるようになっていく感じ、思っていたより理系っぽいというか、コンピュータサイエンスに近しいものすら感じる今日この頃。いろんな分野を学ぶのも面白いなあ。

Webエンジニアのためのデータベース技術[実践]入門を読んだ

Webエンジニアのための データベース技術[実践]入門 (Software Design plus)

Webエンジニアのための データベース技術[実践]入門 (Software Design plus)

  • 作者:松信 嘉範
  • 発売日: 2012/03/09
  • メディア: 単行本(ソフトカバー)

なぜ読もうと思ったか

RDBの書籍ってあまり読んでないなーと思い、入門っぽいやつを何冊か読んでみようと思った。

どのような本か

RDBの基本からSQL、運用、管理までいろいろ解説しつつ、終盤はMySQLのソースの話やデータ分析、NoSQL、Mobageでの事例なども載っていてなかなか読み応えのある本。ちょっと教科書っぽい。

書評というか感想

思ったよりカバーしている範囲が広くて面白かった。HDD/SSDの話とか。何か新しい発見があったという感じではないけど、復習であったり、曖昧だった部分の補完、考え方の参考などに有用だった。2012年の本なので、もう出版されて10年近く経っていることになるが、今でも役に立つ良い本だと思う。

MySQLのバージョンが5.6とか、クラウドについての記述がほぼないのでRDSやらAuroraの話題は皆無とかそういう部分はあるけど、まあ新しい情報はWeb上のリソースで補えばいいので、書籍としてはこういう基礎的な内容を広めにカバーしている本はとても価値があると思う。

一つ言うとするならば、Amazonのレビューにも書かれているが「[実践]入門」という割にはそこまで実践的じゃないというか、この本を読んだらDB設計や運用管理ができるようになるのか?というとそうではない気がする。

学習目的に読むには良いけど、今すぐMySQLでクエリを書いたりスキーマを設計したりする必要があるんです!と言う人には向いてない。その辺の記述めちゃ薄い。「MySQLほにゃらら」みたいな本を読んだ方が良い。また、今だとDBサーバはクラウド上にあるものだと思うので、その辺の情報がゼロなのも痛い。そこらへんを知りたい人はもっと新しい本を読んだ方がいいです。

いやほんと、実践というよりも理論というか考え方や知識の方に寄っているので、タイトルが微妙だなーという気持ち。教科書っぽい。内容は良いです。

肩こりと頭痛の解消を期待してMYTREX REBIVE を買った

買いました。こんなやつです。

MYTREX REVIVE
肩用のアタッチメント着用時

衝動買いはあまりしない質なんですが、たまたま電器屋の前を通りかかった時に奥さんが手にとって「これめっちゃよくない!?買おう!!」ってことで盛り上がったのち、家に帰ってネットで口コミやらなんやらを調べて、その日のうちにポチってしまいました。健康にお金をかけたい年齢に…なってきたんです…。

どうやらこういう製品はマッサージガンと呼ばれているらしい。へー。全然知らんかった。ストレッチやらフォームローラー、筋膜リリース、とにかく色々やって肩や腰や背中のケアを試みてきたけど、マッサージガンが一番楽に継続できそうな気がする。スイッチ入れてヴィィイイインあ゛あ゛あ゛〜〜気持ちええ〜〜〜〜で終わり。なんて楽なんだ。楽すぎる。楽 is 正義。良い。

まだ買って三日目なのでどれだけ効果があるのかはよく分からないけど、少なくともすごく気持ちが良いです。マッサージチェアと比べて自分の好きなところをピンポイントでほぐせるのが良い。あと肩とか体の背面って自分ではなかなかほぐしたりしづらいものだけどこいつなら結構届きます。特に肩やりやすいのがいい。REBIVE MINIというのもあるらしいけどこちらは小さくて背中とか腰がやりづらいらしいので買うなら普通のやつがいいんじゃないかな。

こないだ頭痛があまりにもひどいので病院に行ったら「それ筋収縮性頭痛じゃない?肩凝りすぎなのよ肩ほぐしなさい(要約)」と言われたのもあり、REBIVEさんにはすごく期待しています。とりあえず毎日肩ヴィィィィイインしてみて頭痛が治ったら万々歳、そうでなくても肩こりや背中や腰の痛みが軽減されたらいいなー。また報告します。

せっかくなのでアフィリンク貼っときますね(ニッコリ)