『独習Python入門 1日でプログラミングに強くなる』は1日で終わるのか(Python学習記録②)

A.終わります。

今回はこちらの本を学習しました。

独習Python入門――1日でプログラミングに強くなる!

独習Python入門――1日でプログラミングに強くなる!


そもそもなぜこの本に出会ったかというと、以下の記事の影響があります。

shinyorke.hatenablog.com

めちゃくちゃバズったので覚えている方もいると思います。

僕は仕事ではJavaを書いていることが多いですが、「第二言語」が欲しいなと常々思っていて、今年はPythonを学ぶことにしました。

僕はPythonに関しては初心者ですので、まずは初心者向けの書籍を一冊購入して進めることにしました。

初めに判明する想定外

『1日でプログラミングに強くなる』は3冊の中で何となく*1選びました。

家で開封して裏表紙のSummaryにこんなことが書いてあります。

本書は、まったくプログラミングの経験がない方、これから仕事でプログラミングをされる方に向けて執筆しました。

。。。

もしかしたら、簡単すぎるのではないかという不安に駆られました。

実際にやってみて

プログラミング経験者であっても、初めの一冊としては結構いいのではないかと思いました。その理由としては、

  • 書籍の分量が少ない
    • 270ページ、小さくて軽い
  • 章末の練習問題がほどよい難易度
    • 本を見ながら解ける
  • オブジェクト指向、Webアプリケーション開発の入り口を学べる
    • 概念を紹介することは入門書において重要だと思います。
  • 8時間程度で終わった=タイトルに偽りなし
    • 環境構築は終わっていたのでスキップ
    • 練習問題は全部解いた

ちょちょっとプログラム書いてスクレイピングできるぞ~ってなるのは楽しくていいですね。

ただ、この本を終えてすぐに、上記ブログ記事にあるような、天気予報サイトのスクレイピングや、Excelでやっていた分析をPythonにおきかえ、といったプログラムを作るのはやや難しいかなと思います。

次はPyQにチャレンジします。

*1:ブログ内で紹介されていた他の2冊でもよかったはずなのに本当に覚えていない

『はじめてのブロックチェーンアプリケーション』挫折しました

以下の書籍を写経しようとしていましたが、タイトルの通り断念しました。

はじめてのブロックチェーン・アプリケーション Ethereumによるスマートコントラクト開発入門 (DEV Engineer's Books)

はじめてのブロックチェーン・アプリケーション Ethereumによるスマートコントラクト開発入門 (DEV Engineer's Books)

挫折した理由は「書籍の手順で実装することが困難な箇所が多く、代替手段はかなりしっかり調べないと分からない」ためです。
具体的にリストアップすると以下の通りでです。

  • 最新のGethでスマートコントラクトをコンパイルできない
  • Browser-SolidityのUIが変わっている
    • 入力項目もガラッと変わっているので、どこに何の値を入れたらいいかわからない

そういうわけでこの本をあてにできる箇所が、3章では相当少なくなってきていることがわかりました。

腰を据えてやっていくのはとりあえず今はちょっとつらいです……。すぐ撤退すると何も身につかないので、根性出すべきところは出したい……。

『はじめてのブロックチェーンアプリケーション』を実装してみた①第2章

最近ブロックチェーンを理解する必要が出てきたので、こちらを使って手を動かしながら勉強しています。

はじめてのブロックチェーン・アプリケーション Ethereumによるスマートコントラクト開発入門 (DEV Engineer's Books)

はじめてのブロックチェーン・アプリケーション Ethereumによるスマートコントラクト開発入門 (DEV Engineer's Books)

こちらの書籍は、サンプルのアプリケーションを3種類紹介しているのが特徴で、本文にも明記してありますがエンジニアを対象としています。

ブロックチェーンの開発環境の進化スピードが非常に速いです。ブロックチェーン自体、進化の途上にある技術であるため、半年後には仕様がガラッと変わっていたなんてことはザラです。調べれば解決できますが、なかなか大変です。

そこで、2017年12月の今実装したとき、本文通りにやってもうまくいかないハマりどころを紹介します。もっと先まで進めてからにするつもりでしたが、一旦2章のみで挙げます。

環境の相違

ハマりどころ

Genesis block のフォーマットが違う

書籍が発売されたのがGeth1.6リリースの直前であり、1.5と1.6でGenesis Blockのフォーマットが違うことが記載されていますが、1.7でも変わっています。公式を参考にしましょう。 github.com

ちなみにサンプルはdifficultyが高すぎるので、ブロックを速く作成したいなら少し下げるといいと思います。

miner.start(1)の返り値がtrueではなくnull

P.34でminer.start(1)の返り値はtrueとなっていますが、実際に叩いてみるとnullが返ります。nullで問題ありません。

difficultyが高い状態のままこれに遭遇すると、ブロックが一向に生成されないのでバグっているのかと勘違いすることになります(なりました)。

curl -X POSTが使えない

P.44からJSON-RPCを用いてコマンドを叩いていますが、P.45以降の

curl -X POST --data ・・・を実行すると、

invalid content type, only application/json is supported

というエラーが出ます。これを解決するには、

curl -H "Content-Type: application/json" --data ・・・に置き換えればOKです。


以上が2章のハマりどころでした。ちなみに3章もちょっとだけ触ってみましたが、Geth1.6以降はスマートコントラクトのコンパイルができなくなったという大きな仕様変更が入っていて、いきなり(そしておそらく最後まで)本文の方法が使えないということになりました。

そこら辺は別記事で書きます。


おまけ

Windowsでやったためにハマったところもあって

  • cURLの導入に時間がかかった
  • ダブルクォーテーションのエスケープがめんどくさい
  • コマンドプロンプトのコマンドをいちいち調べるせいで時間食った。プロセスのキル周りとか

あとなんかバグったときにWindows関連でミスっているのかもと考えなければいけないのが結構しんどい

#しがないラジオ と僕の1年

アレクと申します。この記事は しがないラジオAdventCalendar 16日目の記事です。

adventar.org

はじめに、僕が何者かということを簡単に書くと、ガミさんの高校からの友人で、現在SIer勤務です。完全アウェー。

しがないラジオをエピソード1からずっと聞き続けてきて、僕という一人のリスナーにどのような変化があったか、書いていきたいと思います。それっぽい建前をこじつけましたが、要するに自分語りです。

①Rebuild.fmを聞くようになった

Tech系の頂点に君臨し続けるポッドキャストです。しがないラジオ開始前から存在は知っていましたが、ポッドキャストを聞く習慣がなく、「1エピソード1時間超え?!長すぎ……」と敬遠していました。そんな中、しがないラジオを聞くようになり、自然とRebuild.fmにも興味が湧いて聞くようになりました。

その結果、「2時間半でも余裕です!」となり半年かけてエピソード1から完走することができました……!

僕の推しひげぽんさんです。最近だとおじさんが写るバグの話とか大好き。

②週報仲間を始めた

ep.3aのshow noteに「週報仲間」の項目があり、ガミさんが週報始めましたという話をしていると思います。その週報仲間の一人が僕です。しがないラジオ開始前後の今年の3月から始めて、僕自身はほぼ毎週書き続けています。(休んだのは一回だけ)kibe.lawikiを使っています。はくどーさんがテンプレとリマインダー(毎週日曜日にslackで通知される)を作成してくれたこともあり、定着しました。

大体日曜日に今週何したっけ……と思い出して書いているだけですが、たまに振り返って今後の予定の参考にしたりしています。

ちなみにガミさんは2ヶ月でやらなくなりました(ToT)

③Gitを勉強して仕事の役に立った

これは4~5月くらいの話です。当時の僕はSI的なプロジェクトに所属していて、バージョン管理はSubversionを使っていました。しかし、ラジオを聞いているうちにいくらなんでもGitくらい使えないとダメだろうということで、入門書を買ってきて勉強したり、趣味で書いていたコードをGitで管理したりしていました。その時の思い出は、唐突に発生するdetached headとの格闘でしょうか。直すのにめっちゃ苦労した思い出があります。

その後しばらくして、僕は別プロジェクトへ。そこのプロジェクトでは当然のようにGitが使われていて、無事僕はすました顔でGitを扱うことができました。このように勉強したことがすぐに役立つことが多いのは、IT業界にいてよかったことですね。

好きなGitコマンドはgit checkout -- .です。

まとめ

しがないラジオAdventCalendar、全部埋まりきったし盛り上がりがすごいですね!今後のラジオも楽しみです。

Python・Django学習記録①

背景

  • 最近はJava(Spring)でWebアプリを作っている。
  • サーバーサイドで第二の言語を学習したい。
  • よしPythonやろう。

JavaでWebアプリ書くのって結構敷居高いなーって思っています。なぜかというと、全部自分で作らなければいけないからというのと、色々な部品を組みあせなければいけないからという事情があると思います。 他言語の様子を見るともっと簡単に作れそうな雰囲気を感じるので、じゃあ実際どうなんだということで学んでみようとなりました。

とはいえWebアプリのフレームワークRuby on Railsを名前だけ知っているくらいでしたので、少し調べてみました。すると、どうやらPythonにもDjangoというフレームワークがあるらしい。結局Pythonを選んだのは最近流行ってるっぽいからとかそういうのが強いです。

環境

  • windows 10
  • Python 3.6.3
  • Django 1.11
    • 勉強している間に2.0が出てしまいました。
  • PyCharm

やったこと

Qiitaや公式のチュートリアルを実施しました。

①Qiita入門記事

qiita.com

Django公式チュートリアル(日本語対応あり)

docs.djangoproject.com

DjangoプロジェクトをHerokuにデプロイする

qiita.com

herokuへのデプロイは成功して、指定したURLを見るとローカルと同じように動いています。

身についたこと・感想

  • 結果: github.com

  • 初歩的なgit技術

    • とりあえずinitしてー、addしてcommitしてー、GitHubの方にレポジトリ作ってーのあたり
    • Pycharm使っていると.ideaフォルダが発生するので、それを.gitigoreに放り込む
  • フレームワークはめちゃくちゃ楽
    • 自動で管理ページが作られていておったまげた。
  • Heroku基礎
    • Procfileとかrequierment.txtとか
    • HerokuはPostgreSQLじゃないとうまくいかないよ、という謎の先入観がありましたが、Djangoのデフォルトのsqlite3でも普通に動いていそう

僕のツイッターのTLだとRuby on Railsの人が多くて、Django使っている・関心がある人どれくらいいるのかなって不安でしたが、つい先日の2.0リリースでDjango勢があぶり出されていったのが良かったです。

次はPythonそのものの学習かしら。

JJUG CCC 2017 Fall 参加日記 #jjug_ccc

JJUG CCC という、Javaユーザーのカンファレンスにいってきました。

JJUG 2017 Fall

プログラミングも経験浅く、Javaさわり始めて1年くらいですが、どれくらい理解できるかなと思ってやってきました。

■聞いたセッション

ユニットテストアサーション 流れるようなインターフェースのAssertJを添えて 入門者仕立て

うちたてりょーすけ (@b1a9idps) | Twitter

Slideshare

JUnitだったのをもうちょい短く書けるぜ!って内容だと思います。記述量とメンテナンス性が良くなるって話だけど、劇的に変わる感じではなさそう。

OCJP for good coding

slideshare

恥ずかしながらOCJTが何なのか知らなかったのだけど、Javaの資格のことでした。技術力とはコードを読む力だ、という主張を聞いて、読むコードが良いコードばかりだったらいいなと思いました。

劇的改善 Ci4時間から5分へ〜私がやった10のこと〜

slideshare

CIについてはあんまり関わったことがないので分からないが、どれが一番短縮に貢献したのか、あるいは全く貢献していないものがあるのか気になった。

Spring Security にできること・できないこと

Qiita

今回のセッションで一番興味があったところで、なおかつ最も面白かったです。Spring Securityの実装の解説は少なめでしたが、ウェブサイトの脆弱性について、デモを交えてわかりやすく解説していました。

新しいプログラミング言語の学び方 ~HTTPサーバーを作って学ぶJavaScalaClojure

スライド見つかりませんでした……。

特にLL言語の学習の場合、簡単なウェブアプリを作成することが最有力な学習法とされていますが、HTTPサーバーを作るのも有用ですよという内容でした。

僕の場合はDBとかHTMLとかも書きたいし大事だと思っていますが、プレゼン内で指摘されていたように、それが煩わしいと感じる気持ちもわかります。

発表者のノリがツイッターっぽいなと思いました。

■振り返って

ちょっとでも触ったことあるのは聞いててなんとなくわかるし、全く触ったことないのは聞いても全然わからないという当たり前の感触になりました。

ぼっちで参戦したので懇親会は行かずに帰ってしまったのですが、ややもったいない気もしたので次は友達作って行けたらなと思いました。

JUnit、Spring Secuirityについて学ばないとなーと思いました。

■おまけ

今回メモは手書きでとろうと思ってました。ところが、セッションルームには机がありません。こういう場合、太ももにノートPCを置いて下敷きにするとめちゃくちゃ書きやすいのでオススメです!!

PCでメモ取ればいいじゃんってツッコミはなし!!!!

以上です。

3分で読めるSQLアンチパターンまとめ #sqlap

発売されてしばらく経ちましたがまとめました。

SQLアンチパターン

SQLアンチパターン

電子書籍はこちら https://www.oreilly.co.jp/books/9784873115894/

ご存じない方に概要を説明すると、DBを扱う際の「やってはいけないこと」集です。

まとめにあたっては、各章1行で終わることを重視して、アンチパターンのみを否定文の形式で記載し、解決策については省きました。

論理設計

タイトル 一言まとめ
1. Jaywalking 一つのフィールドにカンマ区切りで複数の値を格納するな
2. Naive Trees 再帰的に参照する親を直接参照するな
3. Id Required すべてのテーブルでId列を設定しようとするな
4. Keyless Entry 外部キーを避けるな
5. Entity-Attribute-Value 汎用的な属性テーブルを作成するな
6. Polymorphic Associations 複数テーブルを参照しようとする外部キーを作るな
7. Multi-Column Attributes Tag1,Tag2,Tag3...のような列挙のために複数の列を作成するな
8. Metadata Tribbles テーブルの行数を減らすために列やテーブルを分割するな

物理設計

タイトル 一言まとめ
9. Rounding Errors FLOATデータ型は避けろ
10. 31 Flavors ENUMデータ型は避けろ
11. Phantom Files 画像ファイルを必ずしも外部に格納するな
12. Index Shotgun インデックスを全くしない、またはテキトーに設定するのやめろ

クエリ

タイトル 一言まとめ
13. Fear of the Unknouwn NULLとその他の一般値を混同するな
14. Ambiguous Groups 単一値の原則に反するクエリを書くな
15. Random Selection データをランダムにソートするな
16. Poor Man's Search Engine パターンマッチ述語を使用して全文検索するな
17. Spaghetti Query 無理に一つのクエリにまとめるな
18. Implicit Columns Select * やめろ

アプリケーション開発

タイトル 一言まとめ
19. Readable Passwords パスワードを平文で保存するな
20. SQL Injection 動的SQLクエリの入力に対する検証を省くな
21. Pseudokey Neat-Freak 欠番は埋めるな
22. See No Evil 例外処理をおろそかにしたり、最終的に発行されたSQLを確認しようとしないのやめろ
23. Diplomatic Immunity データベース開発を特別扱いしてアプリケーション開発から切り離すな
24. Magic Beans データベースアクセスクラスをモデルクラスとして使用するな
25. 砂の城 サービスの長期的な安定稼働のための施策を怠るな

この書籍では一つのアンチパターンを簡潔にワンフレーズで言い表しています。すると、二人とも内容を身に着けている場合、以下のようにコミュニケーションを洗練できます。例えばジェイウォーキングの場合、

「このテーブルのこの列、データをカンマ区切りで複数入れられるようになっているけど、これって良くないよね。なんでかっていうとえーっと…」

「このカラム、ジェイウォーキングだね」

補足