無限大な夢のあと

テニスとアニメが大好きな厨二病SEのブログ

【書評】独習Python ( @yyamada )

WINGSプロジェクトの書籍レビュアーに応募し、献本してもらったので、書評を書きました。
今回は表題にある通り「独習Python」の書評となります。

独習Python

独習Python

Pythonhは実務では使ったことがないというのがステータスです。

レビューに入ります。
こちらの書籍だと、実際にプログラムを書きながら、必要な処理を辞書的に調べるという用途で使えるだろうなと思っているので、一旦そのように読み進めておりました。
ただし、プログラムを書き始めるまでの環境、歴史的経緯も知りたかったので、1章だけは最初に読みました。(私自身としては、JetBrainsのPyCharmで検証してました

実際にプログラムを書く題材としては言語処理100本ノックの準備運動の最初5問を解きつつ、周辺のページを読むというような読み方をしました。
nlp100.github.io

解答例(参考にしたリンクなども記載しました

言語処理100本ノック 準備運動 0-4


上記の問題を解くにあたり、以下の章を特に重点的に読みました。

  • 第5章(標準ライブラリ(基本))
  • 第6章(標準ライブラリ(コレクション))
  • 第7章(標準ライブラリ(その他))

今回は問題を解くのには使わなかったですが、文字列/日付周りはどうしても業務などで処理を書くには必要な処理なので、しっかり内容を書かれているのはありがたいと思いました。
実際に問題を解くにあたっては、少し調べた中で、リスト内表記やスライス構文、lambdaなども使ったのですが、ここら辺の説明も記載があって、既存のコードも読めた感じです。


また、そこ以外だと以下の章にコルーチンがあることやdataClassもPythonに実装がされているのは知らなかったので、そこら辺の説明もしっかり読まさせていただきました。

ここではPythonの言語としての説明だけでなく、コルーチンのところのような概念のところもしっかりイラスト付きで説明もあって、プログラミング初学者自体にも優しい内容だと思いました。

業務で使う方は、こちらの書籍を横に置いて、ちょっとした調べ物もWebだけでなく、こちらも調べて見るとPythonの言語としての理解も深まるかなと思いました。
以上、レビューとなります。

最後に大きく影響はないですが、見つけた誤植部分を記載しておきます。

誤植
P348

(誤)ラムダ式を利用した例はmap関数(6.1.12項)、filter関数(6.1.13項)などでも
(正)ラムダ式を利用した例はmap関数(6.1.13項)、filter関数(6.1.14項)などでも


ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装

ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装

  • 作者:斎藤 康毅
  • 発売日: 2016/09/24
  • メディア: 単行本(ソフトカバー)

【書評】速修Django ( @yyamada )

WINGSプロジェクトの書籍レビュアーに応募し、献本してもらったので、書評を書きました。
今回は表題にある通り「速修Django」の書評となります。

速習 Django 3 速習シリーズ

速習 Django 3 速習シリーズ

Pythonhは実務では使ったことがなく、フルスタックフレームワークの経験としては他言語だとRubyのRubyOnRails、業務で使ったことがあるのはJavaのSpring、ScalaのPlayなどです。

早速レビューさせていただきます。
まず最初に思ったのはWindows前提でしたが、読む人のレベルもバラバラなので、大したページ数もなく大きく変わらないと思うので、Macの場合の記述もあっても良いかなと思いました。
ただ、Mac用のPython環境を整えるページがサポート側に用意されているのは良いと思いました。
サーバサイド環境構築・設定 - WINGS

次に冒頭の方で、この書籍で説明する範囲をちゃんと明確にしていった中で説明が進んだので、全体像を描いた上で読み進めつつ、手を動かせたのでここはすごく良い点でした。
f:id:noimpslmtbrk:20200720004542p:plain

最後に、完全に個人の感想になってしまうのですが、View側(templateのところ)の方は実際に説明があっても個人で使うにせよ、業務に使うにせよ、APIを受け取るクライアント側を別途作ることが多く、Djangoを使っていてもサーバ側はJSONを返すところに徹するように作ることが多いので、速修本では取り除いてもよかったのかなとは思いました。
ただ、その反面としてフォームをちゃんと使えるところまで一通り本書でカバーしている点は、フルスタックフレームワーク系を使ったことがない人に取ってはとても良い点とも思いました。

追加でよりもっとよくなる点があるとしたら、速修シリーズであっても実際に手を動かして動作を確認するので、エディタ系などの開発環境のおすすめは記載があった方が良いと思いました。
私は有料ではありますが、JetBrains社のPycharmで色々動かしたましたが、今時ならVSCodeでの動作を基本として動かすなどはあっても良いかもしれません。

以上、レビューになります。

独習Python

独習Python

SwiftDateで分、秒などを切り捨てる処理

標準を使う場合は以下の記事のようにCalednarオブジェクトを作って処理自体は可能。
https://www.letitride.jp/entry/2019/09/03/092513

ただ、例えば比較処理などをした場合に、それぞれCalendarオブジェクトを作って、比較するのが億劫ですが、SwiftDateを使うとCalendarオブジェクトを使わずに簡単に処理することができます。

SwiftDateを使って分、秒などを簡単に切り捨てる。

SwiftUI 徹底入門

SwiftUI 徹底入門

【書評】実践ドメイン駆動設計から学ぶDDDの実装入門 ( @yyamada )

WINGSプロジェクトの書籍レビュアーに応募し、献本してもらったので、書評を書きました。
今回は表題にある通り「実践ドメイン駆動設計」から学ぶDDDの実装入門」の書評となります。

「実践ドメイン駆動設計」から学ぶDDDの実装入門 (CodeZine Digital First)

「実践ドメイン駆動設計」から学ぶDDDの実装入門 (CodeZine Digital First)

DDDは実際に業務で2年ほど使用していて、復習の意味も込めて今回レビュー応募をさせていただきました。

では早速、本題のレビューをさせていただきます。

まず、書籍にざっと一通り目を通した感想をものすごく端的にいうと、
「IDDD本を要約して読み返すことができる和書としての書籍」という印象です。

簡潔に書籍の「良かった点」、「改善点」をまとめます。

良かった点

  • IDDD本に比べて抜粋して記載してあって、非常に読みやすいくらいの分量になっている。
  • コーディングするに当たって役立つ法則などについてまとめていた上で、書籍の引用元やブログなども参考として載せてあるので知識を深めやすい。
  • 今まで洋書の翻訳本ばかりで日本語的に読みにくいものばかりでしたが、和書として読みやすいので、気持ち的にも障壁が下がった。

改善点

  • 難しい点ではありますが、IDDD本とは別のサンプルがあったりしたら、今後DDDを始める人の参考にもなったかなとは思いました。
  • IDDD本と同じサンプルにするにしても、より読書層を広げるなら、モバイルアプリ開発に使われるSwift/Kotlinなどのサンプルもあっても良いかなと思いました。

エリック・エヴァンスのドメイン駆動設計(通称エリック本)とIDDD本を初めて読んだのは2016年で、部分的には読み返してはいたのですが、今回の書籍を通してあの時の自分の実装が正しかったのかなどを思い返すきっかけになりました。
また、IDDD本をしっかり読んだのがかなり昔なので、IDDD本ってここまで書いてたっけと復習するきっかけにもなりました。

エリック・エヴァンスのドメイン駆動設計 (IT Architects’Archive ソフトウェア開発の実践)

エリック・エヴァンスのドメイン駆動設計 (IT Architects’Archive ソフトウェア開発の実践)

実践ドメイン駆動設計 (Object Oriented SELECTION)

実践ドメイン駆動設計 (Object Oriented SELECTION)

実際にはしっかりとエリック本を読んだ上で読むべき書籍であるので、一番最初の書籍として、今回のレビュー書籍として飛びつくのはあまり良くないかもしれないですが、エリック本をしっかり読むのに心が折れてしまう人もいると思うので、その合間で併読して読むと実装のイメージも湧いて読みやすいかもしれません。

理想プランとしてはエリック本→IDDD本ですが、エリック本→今回のレビュー書籍→IDDD本でも悪くはないかなぁとは思います。
※私は社内研修でエリック本→DDDで実際に掲示板を作り、チームメンバーにレビューをしてもらう→実際に実装をするにあたりIDDD本を読むというのが最初の導入でした。

個人的にDDDに入門する人たちにとって、翻訳本以外の書籍の一つになると思いますので、取っ付きやすい書籍が一つ増えて嬉しいなと思いました。

以上、レビューとなります。

ユースケース駆動開発実践ガイド

ユースケース駆動開発実践ガイド

Swift, Rust, Elmで言語処理100本ノック2015 #1 00. 文字列の逆順+文字列のUnicodeコードポイント/バイト列表示

# はじめに
普段使いのSwiftに加えて、Rust, Elmに慣れるためにトライする実行環境紹介ページです。

言語処理100本ノック2015はこちら
http://www.cl.ecei.tohoku.ac.jp/nlp100/

この方がスマートあるいは処理効率が良いなどありましたら、コメントくださいませ。

## 00. 文字列の逆順

文字列"stressed"の文字を逆に(末尾から先頭に向かって)並べた文字列を得よ.
おまけで文字列のUnicodeコードポイント/バイト列表示。

### Swift

String peace = "azatoi";
> String("stressed".reversed())
String = "desserts"

> "stressed".reversed()
ReversedCollection<String> = {
  _base = "stressed"
}
# Stringで囲まないと、ReversedCollection<String>が返ってくるようです。
# 昔にSwift3の時に練習した時のを掘り出すと.charactersというString.CharacterViewを使わないとダメでしたが、
# Swift4からはStringから直接使えるようになりましたね。
> String("stressed".characters.reversed())

# 文字列のUnicodeのコードポイントを返す
# https://developer.apple.com/documentation/swift/unicode/scalar
# Unicode スカラは U+0000 〜 U+D7FF または U+E000 〜 U+10FFFF の範囲に含まれるコードポイントです。
# Unicode スカラは U+D800 〜 U+DFFF の範囲に含まれるコードポイントであるサロゲートペアのコードポイントは含まれません。
> "Go言語".unicodeScalars.map { print($0.value) }
71
111
35328
35486

# 文字列のバイト列を返す
> Array("Go言語".utf8)
$R1: [String.UTF8View.Element] = 8 values {
  [0] = 71
  [1] = 111
  [2] = 232
  [3] = 168
  [4] = 128
  [5] = 232
  [6] = 170
  [7] = 158
}
}

### Elm

> String.reverse "stressed"
"desserts" : String

> "stressed" |> String.reverse
"desserts" : String
-- パイプじゃないとまだ慣れないなぁ

-- Char型がUnicodeのコードポイント(32bit数値表現かな)ということで試してみました。
-- https://package.elm-lang.org/packages/elm/core/latest/Char#toCode
> "Go言語" |> String.toList |> List.map Char.toCode
[71,111,35328,35486] : List Int


-- バイト列を表示するには
-- ライブラリ導入が早いです。
-- https://package.elm-lang.org/packages/ktonon/elm-word/2.1.2/

> import Word.Bytes exposing (..)
> Word.Bytes.fromUTF8 "Go言語" 
[71,111,232,168,128,232,170,158]

### Rust

> "stressed".chars().rev().collect::<String>()
"desserts"

"stressed".chars().rev()
Rev { iter: Chars { iter: Iter([115, 116, 114, 101, 115, 115, 101, 100]) } }
// collectしないと文字列のバイト列が返ってくる。
// https://doc.rust-lang.org/std/primitive.char.html
"Go言語".chars()
Rev { iter: Chars { iter: Iter([71, 111, 232, 168, 128, 232, 170, 158]) } }
"Go言語".as_bytes()
[71, 111, 232, 168, 128, 232, 170, 158]
// StringはVec<u8>のラッパです。上記は単純にバイト列を返しているだけです。言と語はそれぞれ3バイト使います。
// Unicodeコードポイントの32bit数値表現だとしたら、Iter([71, 111, 35328, 35486]) で返ってくる。
// Unicodeコードポイントが返ってくる実装については一旦保留

【書評】作って楽しむプログラミング Androidアプリ超入門( @yyamada )

WINGSプロジェクトの書籍レビュアーに応募し、献本してもらったので、書評を書きました。
今回は表題にある通り「作って楽しむプログラミング Androidアプリ超入門」の書評となります。

作って楽しむプログラミング Androidアプリ超入門

作って楽しむプログラミング Androidアプリ超入門


Androidの経験は個人的にはFlutterでの検証を少々したことや、Kotlinでの開発も1ヶ月ほど行い、最近はレビューでコードを眺めているくらいの経験値です。

では早速、本題のレビューをさせていただきます。

まず、書籍にざっと一通り目を通した感想をものすごく端的にいうと、
「プログラミング初めての方がAndroidアプリにチャレンジするための入門書」という印象です。

簡潔に書籍の「良かった点」、「改善点」をまとめます。

良かった点

  • プログラミングが初めての人でもできるくらいスクリーンショットと共に詳細な手順が記載してある。(Enterを押して改行レベルまで記載
  • Kotlinで説明してあり、文法も基礎から説明している。
  • 他プログラミング経験者であっても手順が詳細なのでAndroidStudioの使い方がわかり、Android初学者にも優しい。
  • 章ごとに従って、おみくじアプリを作る流れなので、実際に進めていくと楽しい。
  • Androidの基礎の説明もありつつ、画面遷移やライフサイクルのことも言及し、リリースのやり方も丁寧に書いてある。


改善点

  • プログラミング完全初心者にとっては、アプリの最終的な動きとして入れたかったとしてもちょっとアニメーションは難しかったかなと思いました。
  • とりあえず、書いてある通りには作れるけれど、理解度を試す問題みたいなのが章末にあるとよかったかなと思いました(チェックポイントはありましたが


書籍を読みながら、中学生や高校生でもPCさえあれば、環境構築も含めるとこの1冊でおみくじアプリにチャレンジできるので、著者の人は詳細に手順を記載して、大変だったと思いましたが、すごく良い書籍だと思いました。
手順が詳細ゆえに、AndroidStudioのメジャーバージョンアップごとに書籍出しても有難いレベルの書籍かなと思いました。
プログラミング初学者でAndroidアプリ開発にチャレンジしてみたい人には勧めてみたいと思います。

以上、レビューとなります。

Kotlinスタートブック -新しいAndroidプログラミング

Kotlinスタートブック -新しいAndroidプログラミング

Kotlinイン・アクション

Kotlinイン・アクション

【書評】JavaScript逆引きレシピ 第2版 ( @yyamada )

WINGSプロジェクトの書籍レビュアーに応募し、献本してもらったので、書評を書きました。
今回は表題にある通り「JavaScript逆引きレシピ 第2版」の書評となります。

JavaScript逆引きレシピ 第2版

JavaScript逆引きレシピ 第2版


現在、久しぶりにWebのフロントエンドを実装中のため、書評レビューアーに応募しました。

では早速、本題のレビューをさせていただきます。

まず、書籍にざっと一通り目を通した感想をものすごく端的にいうと、
ECMAScript 2015の仕様も踏まえたうえのリファレンス」という印象です。

「改訂新版JavaScript本格入門 ~モダンスタイルによる基礎から現場での応用まで」も1度目を通していますが、よりコンパクトにさっと引けるリファレンスという印象です。

改訂新版JavaScript本格入門 ~モダンスタイルによる基礎から現場での応用まで

簡潔に書籍の「良かった点」、「改善点」をまとめます。

良かった点

fetchとXMLHttpRequestなど、古いバージョンだとこう使うみたいなレシピが用意してあってよかったこと
基礎としてブラウザオブジェクト(Windowsオブジェクトなど)の話も押さえていること
Webpack、Babel、ESLintなどのツール類の話も押さえていること
改善点

ES2015前提で、レシピ内のサンプルはアロー関数式で記述でもよかったこと
実開発で用いることの多いTypeScriptならこう書くみたいなのも併記してあったら嬉しいと思ったこと

実際に開発していると、JavaScriptの情報を調べようとした際に、Webの情報の質の差が大きい気がして、こちらのリファレンスのような書籍があって、すごく便利に使わせていただいています。
また、説明中で図でも表現してあったりもしているので、視覚的に理解しやすくて助かっています。
Webでの開発はいろんな知識が必要なのだなと改めて実感しました。

以上、レビューとなります。