massa142's blog

くり返す このポリリズム

「スラスラわかるPython」のレビューを担当しました #surapy

スラスラわかるPython

スラスラわかるPython

この度レビュアーの1人として参加させていただいた「スラスラわかるPython」が2017/8/7に発売されました。

本書はこれからプログラミングをPythonではじめたいとお考えの方に贈る1冊です。

冒頭の著者からのメッセージにもある通り、本書ではプログラミング経験がない方に Pythonが書ける楽しさを体験してもらうということが特に意識されています。

そのため、網羅性という観点は犠牲にされています。例えばclassや内包表記といった文法は紹介されていません。最低限の解説のみでWebスクレイピングまでできるようになれるのが本書の醍醐味です。

また、本書を読み終わった後に次のステップへ進む際に役立つTipsが掲載されていることも特徴の一つです。

「ドキュメントの読み方、見つけ方」では Python 公式のドキュメントにどんな情報があるのかということとその読み方、 加えて PyPI でインストールが可能なライブラリのドキュメントの見つけ方を紹介しています。 どちらもインターネット上にある情報なので、誰でも自由に見れるものですが 慣れていないとどう読んでいいかわからない、難しいと感じる人も多いはずです。 そういった方の助けとなるべく、「公式ドキュメントはこういう情報があるよ」や 「こういうパターンで書かれていることが多いよ」と言ったドキュメントを読むための基本的な Tips が収録されています。 *1

筆者もブログでこう述べていますが、情報の探し方を知っていると知らないとでは初期の学習速度に大きな差が出るので必ず押さえておきたいところです。このポイントを教えてくれる書籍は滅多にないため、とても有益なものとなっています。

Pythonの入門書といえばPythonチュートリアルが有名ですが、プログラミング初心者には理解が難しいところも少なくありません。しかし本書を通じてPythonicな(Pythonらしい)プログラミングの基礎を習得してから臨めば、挫折することなく理解できるようになっていることでしょう。

Pythonプログラミングの入り口として、子どもから大人までにお薦めできる一冊です。

いまなら購入特典もらえます!
翔泳社『スラスラわかるPython』購入特典キャンペーン

その他の感想

合わせて読みたい

「アイソモーフィックJavaScript」を読んだ

アイソモーフィックJavaScript

アイソモーフィックJavaScript

アイソモーフィックJavaScript(Isomorphic JavaScript)とは、クライアントとサーバで同じJSコードを共有して実行できるようにしようという概念。*1

この本ではリクエスト/レスポンスの古典的なWebアプリケーションから始まって、AJAX・SPAそしてIsomorphicとWebアプリケーションアーキテクチャの歴史を追って説明してくれている。それも単に歴史を辿るのではなく、当時なにが問題とされて、それをどう解決しようとしたかという背景がわかりやすく解説されているのが特に良かった。

ただ最後の方でReactやAngularJS、Angular2を用いた事例が紹介されているが、今となっては少し古い話になっていたり、コードも断片的にしか載っていないためすぐ業務に役立つというものではないという印象。ここも実際に企業であった問題をどうやって解決していったかというアプローチの部分に焦点が当たっている。

その他の雑感はこんな感じ。

  • JeremyやDouglas、Brendan EichといったJS界の重要人物を紹介してくれている
  • 薄い本でサクッと読める
  • 説明のしやすさからbrowserfiy + gulpを扱っている
    • webpack + npm-scriptsのほうが最近では主流だと思われる
  • Angular Universal開発の裏側がちょっと書かれていておもしろい

アイソモーフィックJavaScriptという新しいアーキテクテャの背後にある概念をしっかり学ぶのにお薦め。

読書メモ

まえがき

MicrosoftXMLHttpRequestを考案
=> Ajaxの誕生・Webをアプリケーションプラットフォームへと進化
=> クライアント側にアーキテクチャがないためAjaxによる技術的負債が蓄積
=> DOMをラップするためのjQueryに代わるものとして、Jeremy AshkenasがBackboneを開発
=> ロジックとデータの取得が分離される
=> 初期ロードやSEOなどのSPAによる弊害が起こるように

1章 アイソモーフィックJavaScriptが求められる理由

  • メリット
    • SPAでやっている#!フラグメントを使わなくてもSEO対策が可能
    • History APIに対応していれば、クライアント側のみで描画可能
    • 最初の読み込みはサーバー側で描画することで初期ロードが高速化
    • 同じ処理のコードを2つの言語で書かなくてすむ・責務の境界が明確に

=> 「SEO対策」・「初期ページの読み込み最適化」・「ページ遷移の最適化」の3点を満たしている

=> SEO対策やパフォーマンスが重要ではない場合では、オススメしない

2章 アイソモーフィックJavaScriptのスペクトル

  • クライアントとサーバーがどのレイヤーまで共有するか問題

3章 アイソモーフィックJavaScriptのカテゴリー

4章 サーバー側での描画を超えて

  • リアルタイムでアイソモーフィックなフレームワーク
    • Meteor.js
      • 6月のOkachi.jsでMeteor教えてもらった
    • Asana’s Luna framework

5章 アプリケーションの基盤

  • hapiっていうフレームワーク知らなかった

    If you would like to create microservices nodes and getting tired of using express, you need to know more about hapi.

  • npm install hapi --save

    • npm v5からはsaveオプションはデフォルトに
  • constは変化しない値という意味ではない
    • メモリ上のある値をずっと参照し続けるという意味
  • gulpとかのタスクランナーを導入するよりもnpm-scriptsでやるほうが好き
    • 5章のgulpfileをnpm-scriptsに書き直すとこうかな
var gulp = require('gulp');
var babel = require('gulp-babel');
var nodemon = require('gulp-nodemon');
var sequence = require('run-sequence');

gulp.task('compile', function () {
  return gulp.src('src/**/*.js')
    .pipe(babel({
      presets: ['es2015']
    }))
    .pipe(gulp.dest('dist'))
});

gulp.task('watch', function () {
  gulp.watch('src/**/*.js', ['compile']);
});

gulp.task('start', function () {
  nodemon({
    watch: 'dist',
    script: 'dist/index.js',
    ext: 'js',
    env: { 'NODE_ENV': 'development' }
  });
});

gulp.task('default', function (callback) {
  sequence(['compile', 'watch'], 'start', callback);
});
  "scripts": {
    "compile": "babel src -d dist --presets es2015",
    "serve": "nodemon --watch dist dist/index.js",
    "start": "npm run watch & npm run serve",
    "test": "echo \"Error: no test specified\" && exit 1",
    "watch": "watch 'npm run compile' src"
  },

=> 「SEO対策」・「初期ページの読み込み最適化」・「ページ遷移の最適化」の3点を満たしている

=> SEO対策やパフォーマンスが重要ではない場合では、オススメしない

6章 HTMLドキュメントを公開する

  • Nunjucksは聞いたことあったけど初めて使った
  • gulp.dest()コマンドはcpxで代用するとこうかな
  "scripts": {
    "compile": "babel src -d dist --presets es2015 & cpx src/**/*.html dist",
    "serve": "nodemon --watch dist dist/index.js",
    "start": "npm run watch & npm run serve",
    "test": "echo \"Error: no test specified\" && exit 1",
    "watch": "watch 'npm run compile' src"
  },

7章 アプリケーションの設計

  • 度を越す抽象化は禁物
  • 再利用可能なApplicationクラスの作成
    • hapiのままだとクライアントでは使えない
    • hapiへの依存が強い
  • BaseとなるContolloerを定義
    • 各routingに対応するContollerはBaseを継承して定義

8章 アプリケーションをクライアント側に転送する

  • クライアント向けにバンドル化
  • Browserifyかー懐かしい
  • Browserifyをgulpで通すためにvinyl-source-stream
    • vinyl: npm全般で使用しているオブジェクト
gulp.task('bundle', function () {
  const b = browserify({
    entities: 'src/index.js',
    debug: true
  }).transform('babelify', {presets: ['es2015']});

  return b.bundle()
    .pipe(source('build/application.js'))
    .pipe(gulp.dest('dist'));
});
  • HistoryAPI
    • サーバー側でいうルーティングの機能を持たせる

9章 よく使われる抽象化

  • 抽象化は用法用量を守って正しくお使いください
  • 具体例
    • cookieの読み書き
    • リクエストのリダイレクト

10章 シリアライズ、デシリアライズ、関連付け

=> 『リハイドレート』

11章 ここまでの振り返り

  • 基礎的な概念をネイティブなAPI中心に説明してきた
  • Webの変化は早いけど、Isomorphic JavaScriptの概念はそうそう変わらない

14章 Brisket

https://github.com/bloomberg/brisket

16章 アイソモーフィックJavaScriptとユニバーサルJavaScript

*1:最近ではより広義なUniversal JavaScriptという言葉のほうがよく使われてるように思えるが、このニュアンスの違いなども本書で説明されている

2017年7月の振り返り

仕事

  • Django Storages導入
  • ORMcache用の社内Django package作成
  • フロントのデプロイ高速化
  • CircleCI2.0移行

アウトプット

スライド

ブログ

イベント

音楽

N/A

映画・ドラマ・アニメ

ラクロス

  • DESAに引き分けてしまったけど負けなしで折り返し
  • DESA戦で足つったのは悔しかった
  • 試合前の体調ケアを徹底していこう
  • 9月の合宿行けないのは残念

その他

  • 西武13連勝!炎獅子最高や!
  • 『スラスラわかるPython』祝発売!
  • 技術本の執筆が決まった
  • Web連載の話も進みそう
  • 28歳になりました

目標と成果

  1. △ Python3移行
    • ようやく明日リリース
  2. ◯ リーグ戦に向けて平日のトレーニング頑張る
    • 皇居ラン再開した
  3. × PyCon JP 2017 RejectConの準備をする
    • そろそろ準備しないとまずい
    • 今週公開できるように
  4. 積ん読本を読む
  5. △ PyCon JP 2017 API開発
    • 進捗よくないです

8月に向けて

  • 執筆作業を進める
  • Web連載の構成を細かいレベルに落とし込む
  • PyCon APAC楽しんでくる
  • RejectConの準備
  • PyCon JP 2017の準備

slideship Tech Dive v1.0 に参加してきた #slideship_td

はじめに

2017/7/25 に開催された slideship Tech Dive v1.0 の参加メモです。

slideship.connpass.com

slideship Tech Diveって?

slideship Tech Dive

slideship Tech Dive は、slideship Inc. が主催する、プログラミング、Web関連テクノロジー、プロダクト開発、チームビルディングなどのトピックを扱う勉強会、あるいは Meetup イベントです。

初学者に優しく、中級者以上でも得られるものがある程度のバランスのイベントとなることを目指しています。

slideshipって?

https://slideship.com/

slideship.com は、Markdown を利用してプレゼンテーションスライドを素早く作成し、公開するためのサービスです。

  • reveal.jsからslideshipに乗り換えたマン
  • 簡単な設定だけで見栄えがいいデザインになるの本当に助かる
  • おかげでスライド作成の時間がかなり短くなった
  • reveal.jsだと
    • 環境構築ちょっとめんどい
    • デザインいじるためにcss頑張らないといけない
  • 個人的には、1つのMarkdownファイルをimportしてスライド生成できる機能が欲しいところ

すでにあるまとめとか

感想

  • 参加者はサーバーサイドの人も多かった
    • フロントエンド専業の人は少なかったかも?
    • React VRを聞きにきたって人も多そうだった
  • 参加者でVue.js使ってる人はほとんどいなかったの珍しい
  • 主催の @iktakahiro がどんどん発表者に質問していくスタイル良かった
  • キャンセル多かったのはちょっと残念
  • Yahoo! JAPANの会議室広い!ディスプレイがたくさんあって見やすい!
    • @t2y 会場提供ありがとうございました
  • レベル感も「初学者に優しく、中級者以上でも得られるものがある程度のバランス」という趣旨にあっていたと思う
  • slideshipユーザーとして、このコミュニティはもっと盛り上がっていって欲しい
  • 次回の第2回も楽しみ
  • 打ち上げめっちゃ楽しかった

f:id:massa142:20170728125852j:plain

LTしてきた

slideship.com

  • 最近RxJS勉強してたことのまとめ
  • マーブルテスト面白いよ
  • 今回メインセッションになかったAngularについてちょっと話せて満足

参加メモ

「Goならわかるシステムプログラミング」を読んだ

「Goならわかるシステムプログラミング」を読んだ。

ascii.jp

連載が終わって少したったけど、渋川さんの「Goならわかるシステムプログラミング」全20回を読み終えた。

ここでの「システムプログラミング」という言葉は以下のように定義されている。*1

そうしたウェブ関係のプログラミングとは対照的な場面でよく使われているのが、システムプログラミングという用語です。 実際、システムプログラミングとは何でしょうか? 人によって定義がいろいろ異なりますが、よく見かけるのは次のような内容を指して「システムプログラミング」という場合です。

本連載では、一番最後の「OSの提供する機能を使ったプログラミング」をシステムプログラミングの定義として話をすすめます。

また、Go言語を取り上げた理由は次のように書かれている。*2

Go言語を題材として選択したのはランタイムの奥まで気軽にのぞける言語だからです。Go言語そのものの説明が目的ではなかったため、Go言語を学ぼうと思っていなかった人にはとっつきにくい内容もあったかもしれません。 しかし、コンピュータシステムを学ぶ言語の選択肢が事実上C言語ばかりというなかで、間口を広げる貢献はできたと思います。

読んだ感想

低レイヤに疎い自分にとって、システムプログラミングを幅広くカバーしてくれたこの連載はとても勉強になった。毎回読み応えがあるボリュームで、イラスト図も多くてわかりやすかった。

またGoのコードに対する補足説明として、Pythonの話がちょくちょく出てくるのが個人的には嬉しかった。

渋川さんがTwitterでも書いてある通り、この連載がCを題材にしてたら読んでなかったと思う。タイトルにある「Goならわかる」という言葉がとてもしっくりくる。このように間口を広げてくれたことにとても感謝しています。

Go言語そのものの説明が目的ではなかったため、Go言語を学ぼうと思っていなかった人にはとっつきにくい内容もあったかもしれません。

連載の終わりに上記のように書いてあったが出てくるGoのコードは難しくないと感じたので、初学者もGoの学習を兼ねて読むこともできると思う。特に序盤の io.Writer io.Reader の解説はインターフェースの理解に役立つものだと感じた。

Real World HTTPの購入を機に「Goならわかるシステムプログラミング」を読み進めたので、この次には Real World HTTPを読みたいと思う。あと、Go言語と並列処理(3)のなかで紹介されていたオライリー並行コンピューティング技法も面白そうなので、ぜひ読んでみたい。

この連載の内容を全部理解できたわけではないけど(特にWindowsまわりの話とか)、低レイヤへの苦手意識というものはなくなったと思う。この連載で広く浅くやったことをきっかけに、もっと深く勉強したいという意欲が湧いてきている。

とにかく読んでよかったと思える素晴らしい連載だった。システムプログラミング入門教科書としてオススメです!

2017年6月の振り返り

仕事

  • フロントエンド整理
  • Elastic Beanstalk環境でのデプロイで苦戦した
  • Wordでもらった利用規約のDiff管理をGitHubでやるように変えた
  • Python3移行準備

アウトプット

Okachi.js vol.6

コード改善 meetup #3

イベント

Perfume FES!! 2017

Perfume × 電気グルーヴ #perfumefes

Masataka Araiさん(@massa142)がシェアした投稿 -

Perfume × チャットモンチー #perfumefes

Masataka Araiさん(@massa142)がシェアした投稿 -

映画・ドラマ・アニメ

その他

  • 『ボク、運命の人です。』は終始、木村文乃に癒されて最高だった
  • slideship 祝リリース :tada:
  • 来月からプロジェクト変わるって

目標と成果

  1. ◯ Okachi.js vol.06 に向けて Angular についてまとめる
  2. △ Python3移行
    • ほぼほぼ準備完了
    • リリースタイミングの関係で7月実施に
  3. △ リーグ戦に向けて平日のトレーニング頑張る
    • 腹筋・背筋を重点的にやりたい
    • 暑すぎて練習するだけでトレーニングになってきた
  4. PyCon 2017 - YouTube にあがってる動画を見進める
    • ちょっとしか観れなかった
    • Web関連のは見ておきたい

7月に向けて

  • Python3移行完了
  • リーグ戦に向けて平日のトレーニング頑張る
  • PyCon JP 2017 RejectConの準備をする
  • 積ん読本を読む
  • PyCon JP 2017 API開発

2017年5月の振り返り

仕事

アウトプット

PyCon JP 2017 CfP

builderscon tokyo 2017

イベント

音楽

映画・ドラマ・アニメ

ラクロス

  • そろそろ平日のトレやって体絞らないと
  • 開幕まであと1ヶ月
  • 日体メンバーがたくさん入団

その他

  • いとこの結婚式がアットホームでよかった
  • YASUTAKA NAKATA × TETSUYA KOMURO 最高だった
  • ますとどん一周回って楽しいよ
  • Good Bye Sebastien !!

目標と成果

  1. △ フロントエンドの改修を形にする
    • 少しづつ進めていけてる
  2. × 執筆作業を進める
    • 大人の事情で途中で頓挫しそう
  3. ◯ PyCon JPのweb開発進める
    • 日本語表示とかSNSアカウント追加とか諸々やった
  4. × 平日トレをもっと頑張る
    • 全然ダメ・危機感

6月に向けて

  • Okachi.js vol.06 に向けて Angular についてまとめる
  • Python3移行
  • リーグ戦に向けて平日のトレーニング頑張る
  • PyCon 2017 - YouTube にあがってる動画を見進める