無限大な夢のあと

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

Google Colaboratory で Julia を使いたい場合

何度も調べていて忘れるので、メモレベルです。

基本は以下のNotebookをコピーした上で、STEP1を実行した後にブラウザをリロードすればOKです。
colab.research.google.com


参考にしたブログ
blog.goo.ne.jp

中身を詳しく知りたくなったら参考にするブログ
qiita.com

【書評】Vue3 フロントエンド開発の教科書 ( @yyamada )

WINGSプロジェクトの書籍レビュアーに応募し、献本してもらったので、書評を書きました。
今回は表題にある通り「Vue3 フロントエンド開発の教科書」の書評となります。

早速、レビューに入ります。

TL;DR

端的にいうと、ここ半年以内でVue3で新たにアプリケーションを作る人は必読というくらいに内容のボリューム、質の書籍です。また、特にゼロから立ち上げる場合はどう考えてもJavaScriptよりTypeScriptの方が良いということを考えると、この書籍がTypeScriptで記載されているのもとても良いと思いました。

前提としての自分の実務経験や知識など

私の今回の書籍に関係するところで考えると、経験したことがあるプログラミング言語を記載するのが良いと思ったので以下に列挙します。

    • React(実務で1年半)
    • Vue2(実務で半年)
    • Angular2(実務で1年)
    • TypeScript(実務で2年)
    • JavaScript(実務で2年)

書籍を読んだ率直な感想

実際に手を動かすハンズオン形式というのも良いと思いましたし、プロジェクト作成時の質問まで細かく書いてあったところには初心者の人向けの配慮としてとても感動しました。
ちょうどプログラミングとJavaScriptを勉強し始めた妻に対して、手を動かす教材としてもとても良さそうだと思いました。
あとは中身的なところだと、Vue2と結構変わっているなーというのとこんなにReactに近くなってきたんだなぁというところも感想ですw

良かった点

P43のプロジェクトのフォルダの構成から、P46のVueプロジェクトの動作原理の図などわかりやすさにも特化しているなと思いました。また、P69のColmunでもUIライブラリを使うとしたらの部分の説明も実務やっている人が書いていて、自分が実際に開発するとしたら調べるだろうなーということが記載しているのはすごく嬉しかったです。
また、実務でどんどんユニットテストを導入していくべきだと思っている派なので、ユニットテストの章があること、その中身としていろんなケースでの使いかたも説明していて、書籍で取り扱っていたのは嬉しかったです。ここら辺は実務で使うとなると、間違いなく検索するポイントでもあるので時間も節約できます。

悪かった点

ところどころでNuxtの話題を取り扱っていただいたのは良かったのですが、P311のColumnにも書いてあったステート管理の話などを見たりして、ページ数短くてもNuxtで動作させる部分もカバーする内容があっても良かったのかなぁとは思いました。
ただ、これはページ数の尺の都合上+Nuxt3が正式版になっていないという点でしょうがないと思いますので、Nuxt3が正式リリースされることになったら解説する書籍の出版をぜひお待ちしています!!

まとめ

最近ずっとFlutter、Unity、Reactなどを触ってきて、Vueを触る機会はなかったですが、小さい個人のサービスなどはこの書籍を元に妻と一緒にVue3で作ってみるのも良さそうだなぁと思いました。

以上、書評とさせていただきます。

Nuxt.jsビギナーズガイド

Nuxt.jsビギナーズガイド

Amazon

【書評】独習C# ( @yyamada )

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

早速、レビューに入ります。

TL;DR

端的にいうと、初心者からC#を書いたことがある人、ある程度実務でもC#バリバリこなしている人も含めて、1度は目を通したい、辞書的に持っておきたい1冊です。
自分は通っている社会人大学院のPBL(Project Based Learning)、いわゆる研究室のようなところで、Unityでゲームアプリを作ることになり、初めてC#を書いたくらいのレベルです。

前提としての自分の実務経験や知識など

私の今回の書籍に関係するところで考えると、経験したことがあるプログラミング言語を記載するのが良いと思ったので以下に列挙します。

  • フロントエンド/ネイティブアプリなど
    • Swift(実務3年)
    • Kotlin(実務半年)(コードレビューは2年ほど参加)
    • Dart(実務で半年)
    • TypeScript(実務で2年)
    • JavaScript(実務で2年)
    • C#(大学院のPBL活動で2ヶ月!)
  • バックエンド

書籍を読んだ率直な感想

実は辞書的にパラパラ使った紹介を書評レビューをする予定だったのですが、細かい部分も記載してあることが多かったので、一通り書籍には目は通しました。
どのC#のバージョンからこの機能が入ったなどラベリングで紹介されているのがよく、こういうことをやりたいユーザがいてそれによって追加されたんだなという経緯も読み取れてよかったです。
また、コラムなどが結構示唆に富んでいるものが多く、プログラミング初心者向けのものから、C#初心者にとっても悩ましいなというところが紹介されているのがポイントが高かったです。

良かった点

実務的に必要になるかなり細かい点まで記載してある点はとても良かったです。
例えば「7.6.4 値渡しと参照渡し」についても図付きでかなり丁寧に説明してあり、概念を知らないエンジニアにとってはここら辺はかなり有益だなと思いました。
また、所々にある「エキスパートに聞く」も良かったです。
上記の「7.6.4 値渡しと参照渡し」についてに付随するとP328の記載はとても良かったです。(気になる方は書籍を購入しましょう)

他の書籍でもしっかり説明されているものなのかはわからないですが、P97の「同一性や同値性」やP505の「共変と反変」などもしっかり説明してあるのも初心者向けでも良いと思いました

悪かった点

良かった点の裏返しになるのですが、初心者向けにもサポートされた記載があることで書籍がとても分厚くなってしまっていることです。
こればかりは書籍の「独習」シリーズの縛りなのでしょうがないとは思いますが、中級者向けに限定した書籍があっても良いかと思いました。
実際にはこれは実務ではあんまり使わない機能のような紹介を少しでも減らせることにもなるので良いと思いました。

良かった点の深掘り

書籍を読んで明日から使えるC#の機能の紹介

基本的にはUnityを開発するのはRiderを使っていて、Lineter+Formatterを強制しているのですがそれを使っている中であんまり気にしなかったけどそういえばそうだった、全く知らなかった機能がありました。
上記について簡単に列挙します。

  • P68
    • new式での省略
  • P399
    • パターンマッチ
      • 思ったより強力に使えることに気づいたので、コード書き換えたい部分があります。
  • P479
    • レコード型
      • withで複製できたりするのも知らなかったので良かったです。(ScalaやKotlinなど他の言語にある機能)
  • P491
    • パーシャルクラス
      • Swiftのextension的に使えそうで、使い所ありそうと思いました。
  • P534
    • デリゲート
      • Swiftのように使えそうで、使い所ありそうと思いました。
なんじゃーそりゃーっていうC#の機能の紹介

色々プログラミング言語をやってきましたが、他の言語での呼び方が違うからなのか?直感的にへぇーっていう機能が記載してありました。
上記について簡単に列挙します。

  • P83
    • ジャグ配列
      • こう呼ぶのを知らなかった。
  • P370
    • インデクサー
      • 自分が理解しきれていないだけな気もするが、他の言語にはない概念な気がしました。
  • P464
    • 列挙定数
      • Allみたいに足し算したのをおけるのはびっくりしました。

今回の書籍の続編やページ数があれば+αで欲しかった点

  • Effectiveシリーズにあるようなこういう書き方は禁止されているよ、こういう書き方ができるよなどの紹介
    • 実際には実務ではどうするべきなどの指針を「エキスパートに聞く」とそれに加えた内容の加筆などが良いと思いました。
  • Unityでのサンプルなどの紹介
    • 現状サーバサイドで使っている会社も多いと思いますが、UnityでC#を使うケースも増えているはずなのであると良いと思いました。
  • 実務で使うUnitTestなどの紹介
    • 簡単でも良いので触れられているのと良いと思いました。

まとめ

プログラミングの言語仕様をガッツリ読むというのがとても久々だったので、こんなに仕様が重厚なんだなと思いつつ、なるほどーと言って一気に読んでしまいました。
普段自分が使っている言語でもまだまだ知らない機能がありそうだなーと新たな気づきを得られました。

最後に目次や中身のソースコード、今後追加されるであろう正誤表については、こちらのリンクから確認できます。
www.shoeisha.co.jp

以上、書評とさせていただきます。

fpdartの使い方

Flutterを開発する際に、Dartを使用しますが、その中でいわゆる関数型をサポートしているライブラリがあります。

関数型と聞くと難しく考えがちですが、コレクション(Listなど)を便利に扱えるメソッドが揃っているライブラリとも言えます。

pub.dev
www.sandromaglione.com


上記にあるサンプルを紹介します。

上記で紹介したメソッドなどはコレクションが豊富なScalaなどでもあるメソッドでもあります。


【書評】基礎から学ぶReact Native入門 ( @yyamada )

WINGSプロジェクトの書籍レビュアーに応募し、献本してもらったので、書評を書きました。
今回は表題にある通り「基礎から学ぶReact Native入門」の書評となります。

早速、レビューに入ります。

TL;DR

端的にいうと、実務でReactNative扱っている方が情報をうまく取捨選択しながら、執筆した書籍だなという印象でした。
React開発経験 or モバイルアプリ開発がある人なら、こちらの書籍でReactNative開発のスタートをしっかりできそうに見えました。
もし、チームでReactNativeを扱うことになったら、この書籍を一冊目に薦めます。

前提としての自分の実務経験や知識など

私の今回の書籍に関係するところでの実務経験や知識はこんな形です。

  • モバイルの知識
    • iOSアプリ開発 実務3年弱
    • Androidアプリ開発 実務半年弱(コードレビューは2年ほど参加)
    • Flutter 副業で3ヶ月弱(技術検証のみ)
    • React Native/Expoでの検証(技術検証のみ) 副業で1ヶ月弱
  • Webの知識
    • HTML/CSSは苦手、JavaScript/TypeScriptは問題なく使える
    • AngularJS、Angular2での開発 半年弱
    • Vueでの開発 0から立ち上げ 半年弱
    • 直近 React(FC、Hooks含む)、StyledComponentsでの開発 4ヶ月ほど

実務でReactNative扱っている方が執筆したと感じた点

具体的にはそう感じたのは以下でした。

  • 関数コンポーネント+Hooksでの説明があること
  • 影の付け方などのiOS/Androidが違うなどのレイアウトの説明があること
  • UIライブラリ/画面遷移/データ永続化/TypeScript活用などの説明があること
  • 細かい部分だと日付周りライブラリがmoment.jsではなく、date-fns使っていたりすること
  • 書籍全体で紹介してきた集大成としての実際のアプリ作成の紹介があること

上記以外の書籍の中身について

個人的に非常に嬉しいなと思ったのは、以下のスタイルでの装飾、レイアウト、UIライブラリを丁寧に紹介している点でした。

  • 第6章 React Nativeでアプリの見た目を整えよう - スタイルでコンポーネントを装飾する
  • 第7章 React Nativeでアプリの見た目を整えよう - スタイルでコンポーネントをレイアウトする
  • 第8章 UIライブラリで美しいデザインを手軽に利用する

ここまで丁寧に紹介されていると、私のようにReactやり始め、HTML/CSSなどが苦手勢でも、これでアプリをまずは動かす最初の一歩から、実際にアプリを作り始めて細かくレイアウトを組んでいく2歩目を踏み出せるなぁと思いました。

また、そこそこアプリ開発の他の経験があったとしてもリリース周りは、今回のExpo使うケースだと別知識なのでそこの紹介も「第13章 リリース用のアプリファイルを用意しよう」にあったのもありがたかったです。

他の部分だと、説明の都合上とは思いますが、4章/ClassComponentでの実装→5章FunctionalComponent/Hooksでの実装という例で紹介していますが、実際はFunctionalComponent/Hooksでの実装をメインで使うと思いますので、最初この説明順だったときに混乱はしました。
ただ、React自体の知識が全くなかったり、FunctionalComponent/Hooksの知識がなかったら、この方がすっと頭には入ってくるので、より広い層に向けては良いように思いました。

今回の書籍の続編やページ数があれば+αで欲しかった点

個人的には入門という範囲ではとてもベストな内容/分量に収まっていると思います。
逆にもっとページ数があればor応用編みたいなところなどが今後出版できるなら、以下の知識周りがあるとより嬉しいなと思いました。

  • FirebaseやCognitoなどを使った認証機能の実装など(可能なら、FirebaseAuthやFirebaseAuthUI使ったものとか)
  • ネイティブアプリだけではなく、PWAのサンプルなど
  • ReactNative周りで、簡易にPush通知できるサンプルがあれば(ダメならOneSignalでの実装例とか)

まとめ

2018年頃にReactNativeの書籍を読んだりした際には、レイアウト部分などがそこまで詳しく書いていなく、私のようにCSS弱い勢には大変で諦めてしまい、個人開発でちょっとしたものを作るのにはiOS/AndroidネイティブやFlutterに寄っていてしまっていました。
ただ、現在の自分の知識だとReactの知識も活用できるうえ、こっちの方が実務側にも知識を還元でき、将来モバイル対応などが発生した際には今のチームにはReactNativeがマッチする選択肢もあるので、本腰入れて使ってみようかなと思いました。

最後に目次や中身のソースコード、今後追加されるであろう正誤表については、こちらのリンクから確認できます。
wings.msn.to

以上、書評とさせていただきます。

React.js&Next.js超入門

React.js&Next.js超入門

stripeでfp-tsを活用した例 #1 決済入力項目のクリア

最近、TypeScript/ReactでWebフロントエンドをやっています。
stripeの接続をやっている中で、とにかくundefinedかnullかを判定したりなどでとても面倒になり、本来はTypeScriptの機能だけを活用するべきですが、fp-tsを導入しました。
今までSwiftやScalaをやっていく中でOptionとか、for式楽だなぁと思っていたので、そこもうまく活用してみた感じです。
一旦、備忘録的に書いていきます。

今回紹介するのは画面でstripeで決済した際に、入力していたクレジットカード番号、有効期限、CVCなどの項目のクリアを行っています。

大枠の処理自体はgistに貼り付けました。
もうちょい見やすくかけるかもしれないので、ご意見欲しいです。

今回はpipe、fromNullable、chainNullableKを使っています。
それぞれのメソッドについて、簡単に紹介していきます。

pipe

正確なすごい簡単にいうと、関数を適用していく際に入れ子ではなく、パイプラインのように記述できます。
ライブラリ側のソースコードのドキュメントコメントにはこのような感じでわかりやすい例で書いています。

Pipes the value of an expression into a pipeline of functions.
See also flow.
Example:
import { pipe } from 'fp-ts/function'  

const len = (s: string): number => s.length  
const double = (n: number): number => n * 2 
assert.strictEqual(double(len('aaa')), 6)    // without pipe  
assert.strictEqual(pipe('aaa', len, double), 6)  // with pipe  

Since:2.6.3

個人的には、こっちの方が読む立場から見るとわかりやすい派です。

pipe(
  'aaa',
  len,      //ここのメソッドの引数に'aaa'が渡って来て、len('aaa')が実行される
  double  //ここのメソッドの引数に、lenメソッドに'aaa'を実行した結果が渡されて、double(lenメソッドに'aaa'を実行した結果)が実行される
)

Option.fromNullable

https://gcanti.github.io/fp-ts/modules/Option.ts.html#fromnullable

これはnullやundefinedを引数に渡すと値がない概念の型のnoneが返り、それ以外だった場合は、値がある概念の型のsomeにラップされた値が返ります。
関数型的にはいわゆるMaybeモナドという概念ですね。

ここも同じく、ライブラリ側のソースコードのドキュメントコメントにはこのような感じでわかりやすい例で書いています。

Constructs a new Option from a nullable type. If the value is null or undefined, returns None, otherwise returns the value wrapped in a Some.
Example:
import { none, some, fromNullable } from 'fp-ts/Option'   

assert.deepStrictEqual(fromNullable(undefined), none)  
assert.deepStrictEqual(fromNullable(null), none)  
assert.deepStrictEqual(fromNullable(1), some(1)) 

Since:2.0.0

これは本当の便利な概念だと思っていて、例えばJavaScript/TypeScriptのfindとかって、値がない場合ってundefinedが返りますよね。
developer.mozilla.org

それが型レベルとかでわからないですし、その後にメソッド呼び出しするとエラーになって落ちてしまいます。
また、nullだったり、undefinedだったりの判定も面倒ですよね。

これを型レベルで防いでくれるのが嬉しかったりします。
findとかで返り値がOptionになったりします。
https://gcanti.github.io/fp-ts/modules/Array.ts.html#findfirst
https://gcanti.github.io/fp-ts/modules/Array.ts.html#findfirstmap

Option.chainNullableK

https://gcanti.github.io/fp-ts/modules/Option.ts.html#chainnullablek

Optionの値があった場合(someだった場合)に渡した関数で処理をして、値がなかった場合(noneだった場合)には何もしないです。
pipeと組み合わせて使うと強力に使えます。

ここも同じく、ライブラリ側のソースコードのドキュメントコメントにはこのような感じでわかりやすい例で書いています。

 import { some, none, fromNullable, chainNullableK } from 'fp-ts/Option'
 import { pipe } from 'fp-ts/function'
 
 interface Employee {
   company?: {
     address?: {
       street?: {
         name?: string
       }
     }
   }
  }
 
 const employee1: Employee = { company: { address: { street: { name: 'high street' } } } }
 
 assert.deepStrictEqual(
   pipe(
     fromNullable(employee1.company),
     chainNullableK(company => company.address),
     chainNullableK(address => address.street),
     chainNullableK(street => street.name)
   ),
   some('high street')
  )
 
 const employee2: Employee = { company: { address: { street: {} } } }
 
 assert.deepStrictEqual(
   pipe(
     fromNullable(employee2.company),
     chainNullableK(company => company.address),
     chainNullableK(address => address.street),
     chainNullableK(street => street.name)
   ),
   none
 )
 
since 2.9.0

stipe+fp-ts活用

こんな感じでメソッドを組み合わせて、以下のような形で書いてみました。

今回の大きなモチベーションとしては、stripeで準備している以下のメソッドを呼んだときに、nullで返ってくる可能性があります。

element.getElement(CardNumberElement)
element.getElement(CardExpiryElement)
element.getElement(CardCvcElement)

getElement(component: CardNumberElementComponent): stripeJs.StripeCardNumberElement | null;
        /**
         * Returns the underlying [element instance](https://stripe.com/docs/js/elements_object/create_element?type=card) for the `CardCvcElement` component in the current [Elements](https://stripe.com/docs/stripe-js/react#elements-provider) provider tree.
         * Returns `null` if no `CardCvcElement` is rendered in the current `Elements` provider tree.
         */
getElement(component: CardCvcElementComponent): stripeJs.StripeCardCvcElement | null;
        /**
         * Returns the underlying [element instance](https://stripe.com/docs/js/elements_object/create_element?type=card) for the `CardExpiryElement` component in the current [Elements](https://stripe.com/docs/stripe-js/react#elements-provider) provider tree.
         * Returns `null` if no `CardExpiryElement` is rendered in the current `Elements` provider tree.
         */
getElement(component: CardExpiryElementComponent): stripeJs.StripeCardExpiryElement | null;

値があった場合は都度チェックしてclearするというのが面倒だったので、これをスマートに実現したくて、fromNullable、chainNullableKを使ってみた感じです。

また、以下の中でまたpipeが入ると入れ子が深くなるので、返り値の関数としてO.fromNullableを渡しています。

O.chainNullableK((e: stripeJs.StripeCardNumberElement) => e.clear())(O.fromNullable(element.getElement(CardNumberElement)))

【書評】独習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
  • メディア: 単行本(ソフトカバー)