GoのWebフレームワークginの日本語ドキュメントがでたらしい

Go言語にはRuby on RailsのようにデファクトのWebフレームワークがありません。

GoでWebプログラミングをしてて、次はどのWebフレームワークを使ってみようかなと考えていました。

echo? gin? beego? revel? どれがいいんだろうと迷ってました。
どれでもいいんだけど、どうせやるなら使ってる人が多いとかがいいんですよね。

こんな比較リストもあるようです。
github.com

そんな中にginの日本語ドキュメントを書いてくださった方がいるなんて!なんてありがたいんだっ!
Gin Web Framework

ぱっと見レンダリングとか簡単そうだな。
Gin Web Framework


ginやってみようかなと思います。
楽しみだーがんばろー



【PR】搾取されてない.....!?

客先常駐で働いているエンジニアの方お疲れ様です。
IT業界でSESとして働いている人は多いんですが、自分のマージンや月額単価を知らない人がけっこう多いみたいですね。
自分もそうでした。(^^;)
でもそれかなりもったいないですよ。理由はこちらリツアンSTCの紹介記事を見てみてください。
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
blog.suganoo.net

文字化けファイルをinodeで消す

探してみたらけっこうやり方あるみたいですね。
でも備忘のため書いておきます。

そもそもなんでinode番号指定で消す必要があるのか?ですが、こんなことがありました。

  • 一行一行ファイル名を書いたリストを作る
  • そのリストを読み込む
  • 1行づつ書いてあるファイル名にもとづいてファイルを作る

ってことをやってました。

そんでこの最初のファイル名のリストを作るところで、誰かがasciiコードのBOMありでファイルを作られたことがあったんですね。
BOMは詳しくないのでここでは説明を省きます。
とにかくファイルの最初に数バイト入ってしまいます。

そのためプログラムで読み込むと最初の一行目のファイル名が文字化けしてしまいます。
その文字化けのままファイルを作るとファイル名も文字化けしたまま作られてしまい、rm でファイル名を指定することができなくなりました。

対処方法

ls -li でinode番号を取得

$ ls -li
合計 0
1057945 -rw-rw-r-- 1 hoge hoge 0 11月 28 16:07 hoge.txt

inodeでfindしてファイル探して削除

find -inum 1057945 -exec rm -f {} \+

これでOK

ちなみに {} は見つかったファイルが一つ一つ入ってきます。
\+ はその一つ一つが一度に羅列して入ってきます。

qiita.com

「確かな力が身につくPHP「超」入門」を読んでみた

確かな力が身につくPHP「超」入門 (Informatics & IDEA)

確かな力が身につくPHP「超」入門 (Informatics & IDEA)

GoでWebプログラミングを学んでいるんですが、webプログラミングで有名どこのPHPやRailsはふつーどんな書き方するんだろと思って読んでみました。

プログラミング初心者向けの本ですね。
内容は最初から丁寧にわかりやすいです。

ページ遷移からSQL、さらにログイン管理のところまで網羅しています。

でもWebプログラミングをほぼやったことないですが、やっぱり初心者向けでありとっかかりはいいですがちょっと物足りない感じはします。

疑問点としては、htmlの構文をphpのソースにechoでガーッと書いてたんですがPHPってそう書くものなんでしょうか?
サンプルの中でとかえらい数になってたし、html分けないでこんなメンテナンス性悪く書いてるけどいいのかなと思ってしまいました。

あと関数の記述も少なかったですね。PHPって関数なしなのかなと思ってしまったくらい。なわけない!?よね?

プログラミングをやったことない人にはいい本でした!

【Go】goでhttp.Requestを使ってみる

Goでwebプログラミングを勉強してます。
この本をもとにして写経してます。
suganoo.hatenablog.com

http.Requestの値は何が取ってこられるかやってみました。

URIパスは RequestURIでとってこられるんですね。


httpのrequest

http - The Go Programming Language


Goプログラミング実践入門はほんんといい本だな。

【Go】exec.Commandで外部コマンドを実行する

たまたま気になったので調べてみました。

ざっくりいうと
exec.Command("hoge")で実行コマンドを指定します。

  • .Run() : 返却値を無視
  • .Output() : 返却値を取得
  • .Start() : 完了を待たない
  • .Wait() : 完了を待つ

ソースコードは後述の参考Qiitaを参考にしています。

Go で外部コマンド実行
exec - The Go Programming Language
知らなかったんですけど、動的引数を渡す時って「args...」というように「...」も必要だったんですね。

これが無いとこんなエラーになります

# command-line-arguments
./do_command.go:36:36: cannot use args (type []string) as type string in argument to exec.Command

<参考ページ>
qiita.com
stackoverflow.com

インフラエンジニアならpythonだよね

f:id:suganoo:20181105181116p:plain
「インフラエンジニアならプログラミング知識とかいらないよね?」
「プログラミング苦手だからインフラやろうかな。」

たまにこんなことを耳にします。


そんなこと言う人がいるんだな~とちょっと驚きました。

たしかにインスタンスはawsとかでボタンポチポチ押せばいいし、デプロイも設定ファイルに設定内容書いてボチッと実行すればいいだけかもしれません。

ですが、これまでの自分の(偏った)経験を振り返るとそんなことないなーと思います。

障害調査

インフラエンジニアの仕事ってかなり地味だなーと思うことが多いです。

ssh設定だとか、ネットワークだとか、ミドルウエアの管理とか....

そんな作業をしてると「Rubyとかでアプリ作ってるのいいなー」とうらやましくなってきます


そんなインフラエンジニアにもおお!っと脚光をあびることがありますが、それは障害対応の時です。
しかも原因が特定できた時だけです!

原因特定できなかった時はなんともカッコ悪く、存在意義がなくなるので将来的にクビになるのではドキドキしてしまいます。


これまでの経験からそういった障害調査のためログから特定の文字列を抜き出したりするときにコーディングができるとかなり調査がはかどります。
っというかコーディングできないとお話になりません!

Pythonの方がいい

じゃどの言語がいいのかというと、どれでもいいのですがPythonがおすすめです。

ほんと別になんでもいいんですけどね、自分はPythonかなと思います。

なぜなら、Linux標準にPythonが入ってるからです。

たいていインフラで使ってるOSはLinuxのディストリビューションだと思います。
Red-Hat, CentOS, Ubuntuとか。

障害が起きた時はどのサーバーで障害が起きるかなんてわかりません。
そんな時に標準で入ってるPythonであれば、インストールなど関係なく使えるのでどこでもすぐ調査ができます。


障害が起きた時はたいてい緊急です。

そんな時RubyやJavaが得意だからと言って、インストールからなんてやってられません。
ましてやコンパイルなんて面倒です。

なのでPythonがおすすめです。

もちろん標準のPythonはバージョンが古かったりして使える関数が使えなかったりすることなどありますが、基本的な使い方は変わらないでしょう。

また標準で入ってるものとしてPerlもあります。
はい、Perlでもいいですよ。正規表現処理早いし。
好みの問題ですが、私はユーザーが多いのでPythonを使ってます。

シェルスクリプトでもいいじゃん!?とも思いつきますが、ちょっと複雑なことするとすぐコードが読みにくくなるんですよね。
なので使うのを避けてます。それにシェル芸人になってもねえ....。


ああとそうだ、一応書いておきますが本番サーバーとかの中でログを読み出したりすると、メモリがいっぱいになっちゃったりして影響を及ぼすことがあるんでローカルにコピーしてから障害調査するなど気を付けましょうね。

ツール作るよ

業務でなにかしらのツールを作ることがよくあるかと思います。
ファイルをインポートする、ノードを監視する...など、そういったときの便利ツールを作るときにもコーディングができると便利です。

そういう時しかコーディングの機会がないので、俄然やる気が入っちゃいますけどね。

またログが取れるってことはデータ解析もできるんで、anacondaとかも使えるからPythonは有利ですね。


思えばansibleはpythonでできてるから、テンプレートとか書くときに便利ですね。
あ、chefはRubyだな.....。

できればGoもできた方がいい

そしてまた便利ツールを作ってると、CPUコストや処理速度が気になってきます。
さらに手を伸ばしてGoを学んでみるのもいいでしょう。

ポインタ使ったり、処理速度が速くなることがあるんでGoを学ぶのもおすすめです。

Docker, KubernetesはGoでできてるのでソースコードを見るのも勉強になるでしょう。

最後

っというようにインフラでもプログラミングが必要になることは多いですよ。なので日々機会を見つけて勉強しましょう。

なによりやっぱプログラミングは楽しいですよね。

インフラやってると確かになかなかコーディングの機会を得るのは難しいかもしれません。
ですが、どーにかして仕事をさぼろうと考えればコーディングの機会もできてくるので考えてみましょう。

インフラ監視でフロントエンドから作ってくのも楽しいですよ。

以上です。

JenkinsのMaster-Slave間のオンライン/オフラインの関係

ちょっとこりゃ知らなかったなあというネタを書いておきます。


前回こんな記事を書きました。
suganoo.hatenablog.com


関連してジョブの切り替えをもう少し知らべてみたところ、1つわかったことがありました。

短い言葉で説明がむずかしいのですが、
Slaveノードのオンライン/オフラインの関係は、Master-Slaveの1対1のものなんだなということでした。


どいうことかというと、簡単に状況としては下記です。

  • MasterとしてのJenkinsサーバーが2台あるとします。(Master01, Master02とします)
  • Masterはジョブの内容として別々のことをやっています。
  • Slave側は両方からアクセスされることがあります。

この時にMaster01からSlaveがオフラインであっても、Master02からオンラインになっていればMaster02からジョブ実行できるということでした。

f:id:suganoo:20181022131627p:plain

オンライン/オフラインの状態は(すべてのMasterから)共通した状態ではないってことです。

知らんかったなあ。
ということは各MasterノードからSlaveにオンライン状態を確認しなきゃならないなあ。

【Golang】Go言語でjsonを扱う

「Goプログラミング実践入門 標準ライブラリでゼロからWebアプリを作る」を読んでいたら、jsonを扱う項目があったので練習がてら自分でも書いてみました。

ほかにもやり方はあるようですが、まずはオーソドックスなやり方のencoding/json使ってやってみます。

ざっくり言うとこんな感じ。

  • Read
    • jsonの構造に沿って、Go側で構造体を作る。
    • json.Unmarshalで分解。
  • Write
    • 作りたいjsonの内容を構造体で書く。
    • json.MarshalIndentで読み込む。
    • ファイルに書きだす。

ソースコード

gistにあげてみました。

  • json_sample.jsonとjson_read_write.goをローカルに置いておきます。
  • プログラムを実行すると「03 program result」の結果が出力されて、json_output.jsonが作られます(はず!)。


Golangでjsonを扱う

Marshalについて

Marshalには2種類あって、json.Marsharlとjson.MarshalIndentがあるようです。

json.Marshal

https://golang.org/pkg/encoding/json/#Marshal
json.Marshalは単純にjson作るだけみたいです。やってみると下記のように1行で全部出力されました。

{"id":11111,"author":"toriyama akira","content":"","comment":{"comment_id":999999,"message":"sugeeeeeee"},"books":[{"book_id":1004,"title":"naushika"},{"book_id":2006,"title":"akira"},{"book_id":4005,"title":"inachu"}]}[

json.MarshalIndent

https://golang.org/pkg/encoding/json/#MarshalIndent
json.MarshalIndentはprefixとindentが指定できます。

func MarshalIndent(v interface{}, prefix, indent string) ([]byte, error)

リンクの例の通りですが、こんな風に書くとこうなります。

output, err := json.MarshalIndent(&post_write, "<prefix>", "<indent>")
{
<prefix><indent>"id": 11111,
<prefix><indent>"author": "toriyama akira",
<prefix><indent>"content": "",
<prefix><indent>"comment": {
<prefix><indent><indent>"comment_id": 999999,
<prefix><indent><indent>"message": "sugeeeeeee"
<prefix><indent>},
<prefix><indent>"books": [
<prefix><indent><indent>{
<prefix><indent><indent><indent>"book_id": 1004,
<prefix><indent><indent><indent>"title": "naushika"
<prefix><indent><indent>},
<prefix><indent><indent>{
<prefix><indent><indent><indent>"book_id": 2006,
<prefix><indent><indent><indent>"title": "akira"
<prefix><indent><indent>},
<prefix><indent><indent>{
<prefix><indent><indent><indent>"book_id": 4005,
<prefix><indent><indent><indent>"title": "inachu"
<prefix><indent><indent>}
<prefix><indent>]
<prefix>}

つまづいたところ

構造体はあまり書いたことなかったんですね。
たぶん自分だけだと思いますが、しょーもないミスをしてました。

てきとーに書いて実行してたらいろいろエラーがでました。
こんな感じ

# command-line-arguments
./json_read_write.go:55:26: syntax error: unexpected newline, expecting comma or }
./json_read_write.go:60:23: syntax error: unexpected newline, expecting comma or }

Go言語の構造体って最後の要素にもカンマが必要なんですね!うっかりしてた。

        post_write := Post {
                Id : 11111,
                Author : "toriyama akira",
                Comment : Comment {
                        Comment_id : 999999,
                        Message : "sugeeeeeee",    // <----こことか!
                },
                Books : []Book {
                        Book {
                                Book_id : 1004,
                                Title : "naushika",   // <----こことか!
                        },
                        Book {
                                Book_id : 2006,
                                Title : "akira",    // <----こことか!
                        },
                        Book {
                                Book_id : 4005,
                                Title : "inachu",  // <----こことか!
                        },
                },       // <----こことか!
        }

コメント

他にもjson.NewEncoderでもできるみたい。後日調べてみよう。たぶん。

Goプログラミング実践入門 標準ライブラリでゼロからWebアプリを作る impress top gearシリーズ

Goプログラミング実践入門 標準ライブラリでゼロからWebアプリを作る impress top gearシリーズ

これはかなりいい本でした。
後日感想かかないとなあ。

centos 7にmysql clientを入れる

mysqlのクライアントがほしかったのでインストールtipsを書いておく。

centos 7 からmariadbなんですね。なんだかややこしいなあ。

インストールするサーバーにはHadoop関連のコマンドもいれてある。
単純にyum install mariadbをするとこんなエラーが出てしまった。

Transaction check error:
  file /usr/share/mysql/charsets/Index.xml from install of MariaDB-common-10.3.10-1.el7.centos.x86_64 conflicts with file from package mysql-community-common-5.7.16-1.el7.x86_64
  file /usr/share/mysql/charsets/armscii8.xml from install of MariaDB-common-10.3.10-1.el7.centos.x86_64 conflicts with file from package mysql-community-common-5.7.16-1.el7.x86_64
................................

Hadoop関連のhadoop, hive, parquet コマンドらへんはmysql-community-commonを使ってるみたい。


なので仕方ないのでmysql クライアントをrpm からダウンロードしてインストールした。

gistcf686beaa9642ac59cc85487a00a4148

うまくいった。

JenkinsのSlaveノードの冗長化を考えてみた

f:id:suganoo:20181015183735p:plain
Jenkinsを構築しているんですが、障害対策を検討してみたお話です。

自分ところで使ってるJenkinsはそれほどクリティカルではないにせよ、Jenkinsのノードが落ちてしまったりするとリカバリがなかなか大変なので障害対策をしておきたかったわけです。

Masterに関しては、Docker上で動かしてイメージをエクスポートしてバックアップしておき復旧をお手軽にしておいた。

そんでSlave側ノード、つまり接続先が何かしらで応答しなくなった時どうしよっか?と考えて、対処tipsを書いておこうと思いました

何をしたいのか

  • 設定が全く同じSlaveノードを2台用意してある。(slave01, slave02とする)
  • 通常はslave01を使う。
  • 接続先のSlave01ノードが落ちてた場合、すぐに別の冗長化したSlave02ノードに接続してジョブを実行してもらいたい。

f:id:suganoo:20181015170343p:plain

これを考えた時、LBで振り分けるか、DNSで死活監視してIPを書きかえるか、を考えたけどめんどくさくなりそうなのでやめた。

  • LBで振り分ける
    • 書いてなかったけど、Jenkinsはaws EC2上でSlaveはオンプレ。ELB使おうと思ったけど、ELBはオンプレのIPを振り分けられない。
    • ALBとかほかのサービスとか、LBサーバー建てるかとか、考えたけど管理するものを増やしたくなかったのでボツ。
  • DNSで振り分ける
    • 監視して振り分けようかと思ったけど、これもそこまでDNS使う必要あるか?と思ってやめた。
    • また、監視スクリプトとかもDNSに紐づいてると、こちらも管理が増えそうだったのでやりたくなかった。

ちなみにだけどプラグインでそういうことができるものがあるか調べたのだけど、どうもやりたいことを実現できそうなプラグインが見つからなかった。

どうやって解決したか

プロジェクトの設定にある「実行するノードを制限」のラベル式を使ったのと、Jenkinsのapiを使ってノードをオンライン/オフラインで切り替えてみた。

ラベル式

プロジェクト設定の「実行するノードを制限」のラベル式を使ってみた。
f:id:suganoo:20181015181952p:plain
このラベル式はなかなか曲者で、これ使えば意図通りにできるんじゃないの!?っと淡い期待をした。
けども、いろいろ試した結果ラベル式はよくわからなかった。。。。

けども試したところ、|| (ラベルのOR条件)は使えそうとわかったのでOR条件を使うことにした。

ラベル式に(!hoge)とかhoge && fuga とか指定できるけど、正直振る舞いがよくわからない。
良くおできになるエンジニアの方は頑張って調査してみてほしいです。

ちなみに

ちなみに||でつなぐとこうなりました。

実行するノードを確認のため、ジョブで実行するシェルスクリプトにhostnameを実行し実行ノードを確認しています。

実行するノードのラベル式 実行ノード
slave01 || slave02 slave02
slave02 || slave01 slave02
hoge || slave02 || slave01 slave02

なぜslave02が優先されるのかはわからなかった。
名前順なのか?、接続レスポンスが短い順?かと思ったけどそうでもなさそう。わからんーー!

ですが、ノードのオフライン条件を加えると意図通りになった。

ラベル式 slave01の状態 slave02の状態 実行ノード
slave01 || slave02 online offline slave01
slave01 || slave02 offline online slave02

これを使おうというわけです。

Slaveのオンライン/オフラインの切り替え

探してみたところ切り替え用のapiがあるようです。ラッキー!!

下記のようにcurlを実行するとSlaveノードのオンライン/オフラインが切り替えられる。

curl -s -XPOST --user (user):(apitokenxxxx) 'http://localhost:8080/computer/slave02/toggleOffline'

APIトークンですが、jenkinsの画面の右上にある「ユーザー→設定」で下記のようにAPIトークンが取得できます。
f:id:suganoo:20181015181906p:plain
APIトークンは一回しか表示されないから注意!

またオフラインの状態確認は下記のcurlで取得できます。

curl -s -XGET --user (user):(apitokenxxxx) 'http://localhost:8080/computer/slave02/api/json?pretty=true'

結果は省略しますが、こんな感じの結果が取得できます。

{
  "_class": "hudson.slaves.SlaveComputer",
  "actions": [],
  "assignedLabels": [
    {
      "name": "slave02"
    }
........
  "offline": false,
........

この"offline"キーで状態が取れるので、それをもとにしてオンライン/オフラインを切り替えることにした。
"offline":falseオンライン状態
"offline":true オフライン状態
(間違えそうだー)

ちなみにですが、"temporarilyOffline"というのもあります。
これはノード設定の画面から「このノードを一時的にオフラインにする」を押すと"temporarilyOffline":trueになる。

例えばなにかしらの理由でslave01が使えなくなった時を想定して、slave01のremote.jarプロセスを全部killしてみると、"offline":trueだけど"temporarilyOffline":falseになります。
なので"offline"で判断したほうがよさげ。

ジョブの設定と監視

ジョブの設定

ジョブ側の設定については「実行するノードを制限」のラベル式を「slave01 || slave02」にするだけです。

監視側

  • 定常状態をslave01:オンライン、slave02:オフラインにしておきます。
  • apiで取得できる"offline"キーを定期的に監視します。
  • slave01がオフラインになってたらslave02をオンラインに復活させます。

これでジョブをなるべく止めることなく動かすようにしてみた。

監視のスクリプトは省略。

最後に

良く調べたらtoggleOfflineだけじゃなくてdoDisconnectやlaunchSlaveAgentもあるみたいですね。
stackoverflow.com


状態にかかわらず一方的にオフライン/オンラインできるならこれの方がいいかも。


オンライン/オフラインって言葉間違えてないかな,.......

【プログラミング】codewarsがすんごくいい教材だった

f:id:suganoo:20181010185308p:plain


twitterでフォローしてる @yuki_sato さんから(勝手に)知ったのですが、とてもいいプログラミング学習サイトを知りました。

codewars
https://www.codewars.com

どんな人使うといいの?

ざっくりいうと、初級者競プロのプログラミングの課題サイトって感じでしょうか。

progateなどのようにプログラミングを0から学ぶスタイルではありません。

すでにある程度、なんとかググりながらコーディングできるレベル、の人が使うといいでしょう。

対応言語がいっぱいある!

驚いたのですが、学べる言語がかなり豊富です。

Java, ruby, python, などの言語は対応してるんですが、Haskell, F, F#, solidity...まで対応してるんですよ!
(問題数にかたよりはあると思いますが。。)

自分はjavascriptを学びたいのでjavascriptやってます。

回答するとベストプラクティスが出る

またもう一ついいことに、課題を解くとベストプラクティスが出るんですね。
これは学ぶ上でかなり助かります。

例えばこれ

  • ある数値が与えられる。その数値を2進数で表す時の1の数を返しなさい。
  • ex. 5 → "101" → 2、 7 → "111" → 3

自分が書いたコードはこれです。

var countBits = function(n) {
  // Program Me
  var num_one = 0;
  while ( 0 < n ) {
    if ( n % 2 == 1 ) {
      num_one++;
    }
    n = Math.floor( n / 2 );
  }
  return num_one;
};

ですが、ベストプラクティスだとなんと1行でできます。

countBits = n => n.toString(2).split('0').join('').length;

おおーすごい!

最後

こういうベストプラクティスが出るのはありがたいですわ。

知らなけらばどうしてたってわからないですもん。


コツコツやってみようと思います。

【beeline】Required field 'client_protocol' is unset!

beelineでHadoopにつなごうとしたらこんなエラーがでて困った。

18/10/10 15:59:41 [main]: ERROR jdbc.HiveConnection: Error opening session
org.apache.thrift.TApplicationException: Required field 'client_protocol' is unset! Struct:TOpenSessionReq(client_protocol:null, configuration:{use:database=default, set:hiveconf:hive.server2.thrift.resultset.default.fetch.size=1000})

その時の解決方法。

条件とやりたいこと

やりたいこと

  • すでにHadoopクラスターができている。
  • そのクラスターに対して新しいノードからクライアントしてbeelineを使いたかった。

条件など

  • Hadoopはclouderaを使っている。
  • エラーが出た時、Hiveはapache hive からダウンロードして使っていた。

ちなみにhive 1.2.2も2.3.3も3.1.0も使ってみたが、どのバージョンも同じようなエラーだった。

解決方法

cloudera からHiveをインストールする!

stackoverflowなどをみて解決方法を探ってたら
「hive-jdbc-1.2...だとかバージョン落としてみたら」とか
「metasrore_dbの場所が違うんじゃ?」とか出てきたけど
全然関係なかった。

cloudera のHiveを使えば解決しました。

sudo su -

# OSのバージョンは適宜変更してね
wget http://archive.cloudera.com/cdh5/redhat/7/x86_64/cdh/cloudera-cdh5.repo


# clouderaのバージョンが異なるのであれば変えておくこと。
vi cloudera-cdh5.repo

# ex.
# -------------------------------------------------------
baseurl=https://archive.cloudera.com/cdh5/redhat/7/x86_64/cdh/5/
↓
baseurl=https://archive.cloudera.com/cdh5/redhat/7/x86_64/cdh/5.15.0/
# -------------------------------------------------------

mv cloudera-cdh5.repo /etc/yum.repos.d/

yum install hive

これでうまくいった。

依存関係でhadoopコマンドやhdfsコマンドもインストールされるのね。

「HTMLとCSSで基礎から学ぶJavaScript」を読んでみた

HTMLとCSSで基礎から学ぶJavaScript

HTMLとCSSで基礎から学ぶJavaScript

しばらく前に読んだので更新しておく。

Javascriptを学びたくて買ってみました。

感想としてはうーん...という感じ。


初心者向けの本なのですが、説明が多くて文章がいっぱいあり読むのがつらくなってしまいました。

内容も古くなっており、中古だったからしょうがないんですけどね、最近のHTML5などには対応してなさそう。


もっとほかにいい本があるだろう。

「いちばんよくわかるHTML5&CSS3デザインきちんと入門」を読んでみた

いちばんよくわかるHTML5&CSS3デザインきちんと入門 (Design&IDEA)

いちばんよくわかるHTML5&CSS3デザインきちんと入門 (Design&IDEA)

こんな本を読んでみました。

仕事では使わないのですが、やっぱりWebサービスを作ってみたいなという熱が出てきました。
そこでamazonを物色したりフロントエンド関連のブログを探したところ、これに行きつきました。

感想としては、かなりいい本でした。

仕事柄フロントエンドの知識ってネットに頼るしかないんですよね。
ですが、この本を読むことで体系的なHTML、CSSの知識がついてかなり満足です。

パンくずリスト、flex-boxのやり方、divやspanの使い方など
あーこうやって作るんだー!と理解できるところが多くてよかったです。


自分がWebサイトを作るとしたら不得意なCSSとかにはエネルギーを使わず、bootstrapみたいなツールを使うと思います。
ですが、それがどうやって表現されているのか?に理解があるとちょっとした修正がしやすくなったり、設計がへんてこりんにならなかったりするメリットがあると思います。

うーんかなりいい本でした。


(こっちの本もよかったです)
suganoo.hatenablog.com

【Solidity】CryptoZombiesはブロックチェーンの勉強にむちゃくちゃいい教材だ!【Blockchain】

f:id:suganoo:20181001171524p:plain
cryptozombies.io

ここしばらく昼休みにちょこちょこCryptoZombiesをやってたのですが、すごくいい教材でした。

何が学べるのか

ざっとピックアップしてみますが、こんな感じでした。

  • Solidity contractの書き方
  • 各種関数修飾子の使い方
  • ゲームアプリケーションでの使い方
  • ERC721規格について
  • オーバーフロー、アンダーフローの対策
  • フロントエンドからweb3.jsの使い方

などなど。
Ethereum, Solidityの知識が身に付きます。

正直課題をこなしてるだけになり意味の理解が手薄になってしまい、上に書いた以上のこともあったかもしれません。
ですがかなり内容は網羅されていると思います。

話し言葉が楽しかった

どうでもいいところなのですが、説明するときの話し言葉がなかなか楽しいんですよね。

レッスン 2までよくぞたどり着いた!

このレッスン 2では、人間に噛み付いてゾンビ軍団を倍増させる方法を教えてやるが、怖がらずにしっかり学ぶのだ。

なんかこう、よくあるRPG的にプログラミングを学ばす感じでね。

各国言語にやくされてるみたいなので、どなたか日本語版をがんばったんだなーとよくわかります。

学ぶのが楽しくなります!

感想

アプリケーションとして使うための基礎的な知識が学べたのではと思います。
実践的にHTML, javascriptを含めてweb3.js, solidityが学べるのはほんとによかったです。

正直後半1/3くらいからややこしくなってきて、こなしてるだけになってしまいました。
なので今は復習してます。

これをやるとフロントエンドの知識ないのですが、がぜんやる気になってしまいました。

レッスンは今のところ(2018/10/01現在)6レッスンまでで、今後増える様子です。
アップデートが楽しみだなあ。

CryptoZombies blockchainを学ぶにはほんとおすすめです。

この本もおすすめ!

ブロックチェーンアプリケーション開発の教科書

ブロックチェーンアプリケーション開発の教科書