何度も調べていて忘れるので、メモレベルです。
基本は以下のNotebookをコピーした上で、STEP1を実行した後にブラウザをリロードすればOKです。
colab.research.google.com
参考にしたブログ
blog.goo.ne.jp
中身を詳しく知りたくなったら参考にするブログ
qiita.com
何度も調べていて忘れるので、メモレベルです。
基本は以下のNotebookをコピーした上で、STEP1を実行した後にブラウザをリロードすればOKです。
colab.research.google.com
参考にしたブログ
blog.goo.ne.jp
中身を詳しく知りたくなったら参考にするブログ
qiita.com
WINGSプロジェクトの書籍レビュアーに応募し、献本してもらったので、書評を書きました。
今回は表題にある通り「Vue3 フロントエンド開発の教科書」の書評となります。
早速、レビューに入ります。
端的にいうと、ここ半年以内でVue3で新たにアプリケーションを作る人は必読というくらいに内容のボリューム、質の書籍です。また、特にゼロから立ち上げる場合はどう考えてもJavaScriptよりTypeScriptの方が良いということを考えると、この書籍がTypeScriptで記載されているのもとても良いと思いました。
私の今回の書籍に関係するところで考えると、経験したことがあるプログラミング言語を記載するのが良いと思ったので以下に列挙します。
実際に手を動かすハンズオン形式というのも良いと思いましたし、プロジェクト作成時の質問まで細かく書いてあったところには初心者の人向けの配慮としてとても感動しました。
ちょうどプログラミングとJavaScriptを勉強し始めた妻に対して、手を動かす教材としてもとても良さそうだと思いました。
あとは中身的なところだと、Vue2と結構変わっているなーというのとこんなにReactに近くなってきたんだなぁというところも感想ですw
P43のプロジェクトのフォルダの構成から、P46のVueプロジェクトの動作原理の図などわかりやすさにも特化しているなと思いました。また、P69のColmunでもUIライブラリを使うとしたらの部分の説明も実務やっている人が書いていて、自分が実際に開発するとしたら調べるだろうなーということが記載しているのはすごく嬉しかったです。
また、実務でどんどんユニットテストを導入していくべきだと思っている派なので、ユニットテストの章があること、その中身としていろんなケースでの使いかたも説明していて、書籍で取り扱っていたのは嬉しかったです。ここら辺は実務で使うとなると、間違いなく検索するポイントでもあるので時間も節約できます。
ところどころでNuxtの話題を取り扱っていただいたのは良かったのですが、P311のColumnにも書いてあったステート管理の話などを見たりして、ページ数短くてもNuxtで動作させる部分もカバーする内容があっても良かったのかなぁとは思いました。
ただ、これはページ数の尺の都合上+Nuxt3が正式版になっていないという点でしょうがないと思いますので、Nuxt3が正式リリースされることになったら解説する書籍の出版をぜひお待ちしています!!
最近ずっとFlutter、Unity、Reactなどを触ってきて、Vueを触る機会はなかったですが、小さい個人のサービスなどはこの書籍を元に妻と一緒にVue3で作ってみるのも良さそうだなぁと思いました。
以上、書評とさせていただきます。
WINGSプロジェクトの書籍レビュアーに応募し、献本してもらったので、書評を書きました。
今回は表題にある通り「独習C#」の書評となります。
早速、レビューに入ります。
端的にいうと、初心者からC#を書いたことがある人、ある程度実務でもC#バリバリこなしている人も含めて、1度は目を通したい、辞書的に持っておきたい1冊です。
自分は通っている社会人大学院のPBL(Project Based Learning)、いわゆる研究室のようなところで、Unityでゲームアプリを作ることになり、初めてC#を書いたくらいのレベルです。
私の今回の書籍に関係するところで考えると、経験したことがあるプログラミング言語を記載するのが良いと思ったので以下に列挙します。
実は辞書的にパラパラ使った紹介を書評レビューをする予定だったのですが、細かい部分も記載してあることが多かったので、一通り書籍には目は通しました。
どのC#のバージョンからこの機能が入ったなどラベリングで紹介されているのがよく、こういうことをやりたいユーザがいてそれによって追加されたんだなという経緯も読み取れてよかったです。
また、コラムなどが結構示唆に富んでいるものが多く、プログラミング初心者向けのものから、C#初心者にとっても悩ましいなというところが紹介されているのがポイントが高かったです。
実務的に必要になるかなり細かい点まで記載してある点はとても良かったです。
例えば「7.6.4 値渡しと参照渡し」についても図付きでかなり丁寧に説明してあり、概念を知らないエンジニアにとってはここら辺はかなり有益だなと思いました。
また、所々にある「エキスパートに聞く」も良かったです。
上記の「7.6.4 値渡しと参照渡し」についてに付随するとP328の記載はとても良かったです。(気になる方は書籍を購入しましょう)
他の書籍でもしっかり説明されているものなのかはわからないですが、P97の「同一性や同値性」やP505の「共変と反変」などもしっかり説明してあるのも初心者向けでも良いと思いました
良かった点の裏返しになるのですが、初心者向けにもサポートされた記載があることで書籍がとても分厚くなってしまっていることです。
こればかりは書籍の「独習」シリーズの縛りなのでしょうがないとは思いますが、中級者向けに限定した書籍があっても良いかと思いました。
実際にはこれは実務ではあんまり使わない機能のような紹介を少しでも減らせることにもなるので良いと思いました。
基本的にはUnityを開発するのはRiderを使っていて、Lineter+Formatterを強制しているのですがそれを使っている中であんまり気にしなかったけどそういえばそうだった、全く知らなかった機能がありました。
上記について簡単に列挙します。
プログラミングの言語仕様をガッツリ読むというのがとても久々だったので、こんなに仕様が重厚なんだなと思いつつ、なるほどーと言って一気に読んでしまいました。
普段自分が使っている言語でもまだまだ知らない機能がありそうだなーと新たな気づきを得られました。
最後に目次や中身のソースコード、今後追加されるであろう正誤表については、こちらのリンクから確認できます。
www.shoeisha.co.jp
以上、書評とさせていただきます。
Flutterを開発する際に、Dartを使用しますが、その中でいわゆる関数型をサポートしているライブラリがあります。
関数型と聞くと難しく考えがちですが、コレクション(Listなど)を便利に扱えるメソッドが揃っているライブラリとも言えます。
pub.dev
www.sandromaglione.com
上記にあるサンプルを紹介します。
上記で紹介したメソッドなどはコレクションが豊富なScalaなどでもあるメソッドでもあります。
WINGSプロジェクトの書籍レビュアーに応募し、献本してもらったので、書評を書きました。
今回は表題にある通り「基礎から学ぶReact Native入門」の書評となります。
端的にいうと、実務でReactNative扱っている方が情報をうまく取捨選択しながら、執筆した書籍だなという印象でした。
React開発経験 or モバイルアプリ開発がある人なら、こちらの書籍でReactNative開発のスタートをしっかりできそうに見えました。
もし、チームでReactNativeを扱うことになったら、この書籍を一冊目に薦めます。
私の今回の書籍に関係するところでの実務経験や知識はこんな形です。
具体的にはそう感じたのは以下でした。
個人的に非常に嬉しいなと思ったのは、以下のスタイルでの装飾、レイアウト、UIライブラリを丁寧に紹介している点でした。
ここまで丁寧に紹介されていると、私のようにReactやり始め、HTML/CSSなどが苦手勢でも、これでアプリをまずは動かす最初の一歩から、実際にアプリを作り始めて細かくレイアウトを組んでいく2歩目を踏み出せるなぁと思いました。
また、そこそこアプリ開発の他の経験があったとしてもリリース周りは、今回のExpo使うケースだと別知識なのでそこの紹介も「第13章 リリース用のアプリファイルを用意しよう」にあったのもありがたかったです。
他の部分だと、説明の都合上とは思いますが、4章/ClassComponentでの実装→5章FunctionalComponent/Hooksでの実装という例で紹介していますが、実際はFunctionalComponent/Hooksでの実装をメインで使うと思いますので、最初この説明順だったときに混乱はしました。
ただ、React自体の知識が全くなかったり、FunctionalComponent/Hooksの知識がなかったら、この方がすっと頭には入ってくるので、より広い層に向けては良いように思いました。
個人的には入門という範囲ではとてもベストな内容/分量に収まっていると思います。
逆にもっとページ数があればor応用編みたいなところなどが今後出版できるなら、以下の知識周りがあるとより嬉しいなと思いました。
2018年頃にReactNativeの書籍を読んだりした際には、レイアウト部分などがそこまで詳しく書いていなく、私のようにCSS弱い勢には大変で諦めてしまい、個人開発でちょっとしたものを作るのにはiOS/AndroidネイティブやFlutterに寄っていてしまっていました。
ただ、現在の自分の知識だとReactの知識も活用できるうえ、こっちの方が実務側にも知識を還元でき、将来モバイル対応などが発生した際には今のチームにはReactNativeがマッチする選択肢もあるので、本腰入れて使ってみようかなと思いました。
最後に目次や中身のソースコード、今後追加されるであろう正誤表については、こちらのリンクから確認できます。
wings.msn.to
以上、書評とさせていただきます。
React Native+Expoではじめるスマホアプリ開発 ~JavaScriptによるアプリ構築の実際~
最近、TypeScript/ReactでWebフロントエンドをやっています。
stripeの接続をやっている中で、とにかくundefinedかnullかを判定したりなどでとても面倒になり、本来はTypeScriptの機能だけを活用するべきですが、fp-tsを導入しました。
今までSwiftやScalaをやっていく中でOptionとか、for式楽だなぁと思っていたので、そこもうまく活用してみた感じです。
一旦、備忘録的に書いていきます。
今回紹介するのは画面でstripeで決済した際に、入力していたクレジットカード番号、有効期限、CVCなどの項目のクリアを行っています。
大枠の処理自体はgistに貼り付けました。
もうちょい見やすくかけるかもしれないので、ご意見欲しいです。
今回はpipe、fromNullable、chainNullableKを使っています。
それぞれのメソッドについて、簡単に紹介していきます。
正確なすごい簡単にいうと、関数を適用していく際に入れ子ではなく、パイプラインのように記述できます。
ライブラリ側のソースコードのドキュメントコメントにはこのような感じでわかりやすい例で書いています。
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'を実行した結果)が実行される )
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
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
こんな感じでメソッドを組み合わせて、以下のような形で書いてみました。
今回の大きなモチベーションとしては、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)))
WINGSプロジェクトの書籍レビュアーに応募し、献本してもらったので、書評を書きました。
今回は表題にある通り「独習Python」の書評となります。
Pythonhは実務では使ったことがないというのがステータスです。
レビューに入ります。
こちらの書籍だと、実際にプログラムを書きながら、必要な処理を辞書的に調べるという用途で使えるだろうなと思っているので、一旦そのように読み進めておりました。
ただし、プログラムを書き始めるまでの環境、歴史的経緯も知りたかったので、1章だけは最初に読みました。(私自身としては、JetBrainsのPyCharmで検証してました
実際にプログラムを書く題材としては言語処理100本ノックの準備運動の最初5問を解きつつ、周辺のページを読むというような読み方をしました。
nlp100.github.io
解答例(参考にしたリンクなども記載しました
言語処理100本ノック 準備運動 0-4
上記の問題を解くにあたり、以下の章を特に重点的に読みました。
今回は問題を解くのには使わなかったですが、文字列/日付周りはどうしても業務などで処理を書くには必要な処理なので、しっかり内容を書かれているのはありがたいと思いました。
実際に問題を解くにあたっては、少し調べた中で、リスト内表記やスライス構文、lambdaなども使ったのですが、ここら辺の説明も記載があって、既存のコードも読めた感じです。
また、そこ以外だと以下の章にコルーチンがあることやdataClassもPythonに実装がされているのは知らなかったので、そこら辺の説明もしっかり読まさせていただきました。
ここではPythonの言語としての説明だけでなく、コルーチンのところのような概念のところもしっかりイラスト付きで説明もあって、プログラミング初学者自体にも優しい内容だと思いました。
業務で使う方は、こちらの書籍を横に置いて、ちょっとした調べ物もWebだけでなく、こちらも調べて見るとPythonの言語としての理解も深まるかなと思いました。
以上、レビューとなります。
最後に大きく影響はないですが、見つけた誤植部分を記載しておきます。
誤植
P348(誤)ラムダ式を利用した例はmap関数(6.1.12項)、filter関数(6.1.13項)などでも
(正)ラムダ式を利用した例はmap関数(6.1.13項)、filter関数(6.1.14項)などでも
退屈なことはPythonにやらせよう ―ノンプログラマーにもできる自動化処理プログラミング
独学プログラマー Python言語の基本から仕事のやり方まで
ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装