nikkie-ftnextの日記

イベントレポートや読書メモを発信

イベントレポート | 第30回 Pythonもくもく会 | Django Girls Tutorial 翻訳レビュー #mokupy

はじめに

いつも心は虹色に! nikkieです。
mokupyにお邪魔して翻訳を進めてきました。

勉強会の概要

第30回 Pythonもくもく会 - connpass

主にPythonに関するやりたいことを各自持って来て、進めていく感じのゆるい会です。 もくもく開発をして情報共有したり、交流を深めることができればと思っています。 是非お気軽にご参加ください。(Python初心者の方でも大歓迎です!)

ゆるさが持ち味のもくもく会です。
祝30回ですね!今回はDjango関連の方が多かった印象です。

取り組んだこと

Django Girls Tutorial 翻訳のレビュー

レビューというとたいそうなことに聞こえますが、
翻訳に沿って手を動かし、タイポを見つけたら修正提案というようなことを繰り返していたら
レビュワー権限が付与されました。
今までどおりのスタンスで取り組もうと、
今回はPythonAnywhereにデプロイの部分の翻訳の確認を中心に進めました。
ブログアプリの初期設定をしてひとまずデプロイという章です: Deploy! · Django Girls Tutorial

PythonAnywhereにデプロイ

PythonAnywhereに少し詳しくなりました。AzureのWebAppsよりも使いやすそうな印象です。

pa_autoconfigure_django.py実行でデプロイした後 f:id:nikkie-ftnext:20180729212924p:plain

createsuperuserしてポスト追加 f:id:nikkie-ftnext:20180729213056p:plain

ファイルはコマンドラインだけでなく、ブラウザからも見られる。
ブラウザでBash起動後の仮想環境有効化はsource .virtualenvs/<ユーザ名>.pythonanywhere.com/bin/activate f:id:nikkie-ftnext:20180729213135p:plain f:id:nikkie-ftnext:20180729213147p:plain

ブラウザからは各種環境設定も見られる f:id:nikkie-ftnext:20180729213322p:plain 設定を下にスクロール f:id:nikkie-ftnext:20180729213335p:plain f:id:nikkie-ftnext:20180729213350p:plain ブラウザから簡単にログが見られて感動(以下はエラーログ)。このあたりファイルを指定したかったらどうすればいいんだろ? f:id:nikkie-ftnext:20180729213400p:plain

あとは、チュートリアルの不備に気づいたので、Issue書いてみたり。(OSSデビュー)
[chapter Deploy!] output of `ls` contains files that have not been created yet · Issue #1314 · DjangoGirls/tutorial · GitHub

感想

  • 現日本語版に沿って進めたところ、Djangoモデル · workshop_tutorialJP(リンク修正:2018/07/31)でエラーという事象を共有いただきました。(赤字箇所:2018/07/31追加)
    • エラー発生条件
      • 前提:Django2.0系をpip installしている
      • 現日本語版(Django1.11系)のとおりにPostモデルを定義する
      • makemigrationを行うとエラー発生
    • 原因:現日本語版ではmodels.ForeignKeyon_deleteを指定していないため(Django1.11系ではauthor = models.ForeignKey('auth.User')で動作する)
    • 注:チュートリアルDjangoとインストールしたDjangoとのバージョン違いが原因ですので、Django1.11系で現日本語版を進める分にはこのエラーは発生しないと思います
    • Django2.0からはmodels.ForeignKeyを使うとき、on_deleteが必要だそうです。(確かに英語版Django models · Django Girls Tutorial(リンク追加:2018/07/31)には反映されています) ソース:Django2.0から必須になったon_deleteの使い方 - Django2の実力をつけるチュートリアルサイトDjangoBrothers[ジャンゴブラザーズ]
    • Django2.0がでてきて、日本語版チュートリアルのとおりに進まない問題がポツポツと発生している印象なので、少しずつでもレビュー進めていきたいなと思います。未レビューの箇所(2割と少し)の確認を優先して、なる早でリリース可能状態にしたいなー
  • @massa142 さんが海外カンファレンスのYouTubeスタックを消化されていて、そういうところから情報をとってこられているのかと勉強になりました。PyCon APACに気になるのがあったので見てみよう
  • お昼の自由が丘バーガーは食べごたえがありおいしかったです。

参加者の皆さま、1日ありがとうございました。お疲れ様でした。

イベントレポート | 【サポーターズCoLab勉強会】エンジニアのためのブログライティング入門 #spzcolab

はじめに

いつも心は虹色に! nikkieです。
アウトプットのヒントにしようと「ブログライティング入門」に行ってきました。

勉強会の概要

【サポーターズCoLab勉強会】エンジニアのためのブログライティング入門 - サポーターズCoLab

技術ブログを書きたい!書いた記事をみんなに読んでもらいたい!と思っている方に向けて、 1年間で qiita コントリビューション 2,500 、はてブ総数 1000 弱(2018/07/01 時点)のエンジニアが 0 からここに至るまでに実施したノウハウをお話しします。

TL; DR

  • いいねがほしければ自分からいいねする。はてブがほしければ自分からはてブする
  • ブログを書かない理由はない。書こう!

まとめ

  • 書くと情報が自分に集まる
  • 書くとキャリアアップにつながる
  • 料理と同じ。鮮度(誰かがすでに書いていても新しいことに価値がある)
  • ネタは普段自分が困っていることで十分
  • とにかく書かないと始まらない
  • 続かなくてもいいのでまずは書いてみるところから

感想

登壇者の@numanomanuさんは【今日からできる】コミットメッセージに 「プレフィックス」 をつけるだけで、開発効率が上がった話を書かれた方でした。(この記事めちゃくちゃお世話になりました!)
サポーターズで頻繁にJSネタで登壇されているそうですが、JSに疎い私ははじめてお会いしました。

ブログを書くことで好循環を作り出していて、自分もこういう状態に行きたいと思いました。
はてなブログはイベントレポートで定期的に更新していますが、Qiitaの記事の更新頻度が低いのが課題と感じています。
「Done is Better than Perfect」の精神でもっとがんがん書いていこうと思います。
(自分が苦労したAzure × Pythonでネタは控えてるんですが、Qiitaに書く以上それなりに調べてからという意識がありました)

話を聞いて、以下の勉強会で聞いた話を思い出しました。

自分にとって役に立ったブログはコード片1つ、切り出した公式ドキュメントだったかもしれない

イベントレポート |【サポーターズCoLab勉強会】エンジニアのためのブログ講座 #blog_engineer - nikkie-ftnextの日記

業務中の目の前のタスク解決がLTのネタにならないかと考える

イベントレポート |【サポーターズCoLab勉強会】若手エンジニアが転職に困らないように今から実践できること - nikkie-ftnextの日記

それでは以下メモです。折に触れて見返そうと思っています。
「記事を書いたことがない人が書くきっかけになれば」という言葉で幕があがりました。

(2018/07/31 スライドを追加)

なぜエンジニアブログを書くか?

モチベーションがないと書けない
エンジニアにとってはアドオンに近い
会社で書くことになったのがきっかけ

書くようになって

  • 発信した情報から新しい情報が
    • Qiitaでコメントで教えてもらえる
    • ポジティブ・フィードバック
  • インプットが増えた
  • 登壇依頼来た
    • MANABIYA、サポーターズ(10回)登壇
  • 仕事依頼来た
    • 副業収入合わせて年収2倍
    • バズると記事経由で仕事が来る→仕事するからスキルが付き、書けるネタが増える:好循環
  • バズると嬉しい いいねがつくと嬉しい

-> 書かない理由はない。今すぐ書こう

何を書いたらいいかわからない。素人が書いてもいいか

「ブログなんて料理みたいなもの」jenkins開発者の川口さん
同じものでも最新の状態で動いていることをブログに書くのは意味がある。鮮度重要

仕事や作業の中にいくらでもネタが隠れている
先輩に聞いたこと、後輩を助けたこと、PRをブログにする、登壇内容、多言語の翻訳、ネタドリブン(ブログに書くために開発)

1件でもニーズがあれば記事にしていい
自分が困ったこと、後輩が困ったことは誰かも困っている
ニーズがなさそうでも自分のために書く気持ちがあればOK

まさかりコワイ

自分が書いたものを偉い人がディスってきたらコワイ

まさかりはコワイが愛情。
最初は無関心(誰も読んでくれない) まさかり気にしなくていい
まさかりはコワイから本気で調べる->身につく
コワければ信頼できる人にレビューしてもらう

記事の書き方: 発書練散(はっしょれんさん)

1と2が発、3が書く、4と5が練る、6以降が散

  1. ネタ発見
  2. 読み手決める
  3. 書き切る
    • Done is Better than Perfect
    • タイポ気にしない(Qiitaなら編集リクエストが来る)
  4. タイトル
    • 30個のワードを用意 <- コミットメッセージプレフィックスの記事「今日からできる」「開発効率上がる」
    • 読むのは自分でないので、どんなタイトルなら読んでくれるか考える
    • 煽りはほどほどに
  5. 推敲
    • 夜中に書いて通勤中にスマホで見返す 1日寝かせる
  6. SEO
    • 後述
  7. 投稿
  8. SNSシェア
    • エンジニアならTwitterは必須

とにかくネタを見つけて書く
読み手ファースト
当たり前なことをちゃんとやるのがブログを書くということ

いいねやはてブ

「取らんと欲するものはまず与えよ」老子
「良いものを作っても売れるわけではない」

まず自分からいいねやはてブをし、コミュニティを作る
返報性の原理 何かされるとお返ししたくなる
普通に感謝の気持ちでいいねする いい記事ありがとうございます

背中を押してくれる言葉

  • 「難しいと思えるのも才能」湊川さん
  • 「世界中に俺のこの素晴らしい記事を早く読ませたい」と思い込め 面白いと勘違いして登壇する・書く
  • 「Done is Better than Perfect」 まず出してから修正しよう。修正し続けると出さずに終わってしまう
  • 「頑張って書いた記事ほどスベる」凝ったネタだけど受けなかった->気にせずどんどん書こう

以下、おまけ

ツール

  • licecap 画面をGIF動画にしてくれる
  • text lint Chrome拡張で使う。です・ます調とだ・である調混在を怒る
  • Macスクリーンショットを保存せずにQiitaにペーストできる
  • Qiitaの下書きをメモ帳として使う。書くことないかなと見る

SEO

検索したときに出てくるようにする

検索されそうなワードでTitle, Keyword, Descriptionを組む
QiitaはTitleしかいじれない
検索プラットフォーム側はユーザが欲しがっている情報をトップに表示したい

  • タイトルや文章に検索キーワード散りばめ
  • いい感じの文章の羅列 1000~2000文字
  • いい感じに5~10枚の画像・動画

Organic Searchからの流入が大半。(SNS友達少なめ)
QiitaがSEO頑張っているので、Qiita記事に流入しやすい

もっといいねがほしい

  • 著名な人にあやかる
    • 記事の中で引用する(Qiitaなら通知届く)
    • Twitterで絡む 「意外とみんな優しい」
    • 著名な方につぶやいてもらうとPVのパルスが発生
  • 同僚に奢ってはてブやシェアをお願い
    • 身近な人から仲間にする
    • 一番コスパがいい(500円から) 5はてブ取れるとホットエントリーに載る
  • サービスをハックする(Qiitaをハックした)
    • 1時間以内に5いいねあればトレンドに載る
    • トレンドに載り、いい記事であれば、いいねが増える
    • qiita.com/tags で人気のタグがわかる 人気のタグをつける
    • タグの付け直しで何度でも上に来る(今通用するかは不明)
    • タイミングは木曜か月曜、火曜の朝。水曜の朝一はQiitaメールでトレンドに埋もれてしまう

質疑から

  • 個人ブログはやっていない。メンテに時間がかかる(アフィリエイト設定など)
  • 文章だらけになったら前後編に分けていい感じにする。離脱されないように
  • はてなブログはやっていない。noteに移行。有料記事が作れるので
  • 仕事につながったのは記事の内容が読んだ人の心を動かしたパターン
    • jQueryのレガシーなシステムをReactかVueでリプレースしたいが知見がない。このニーズを踏まえて記事を出した
    • 今狙い目は仮想通貨?
  • 書き始めたきっかけ: 会社でブログ書こう。採用目的。
    • 書いたけど誰も読まないので何も起きない。まさかりビビってたけど何もこなかった
    • ->好きにやろう。読まれるようになった
  • まさかりは今まで飛んできたことがない。
    • 飛んできそうなら相当調べて書く。
    • 会社でめちゃくちゃまさかり投げられた結果書く。「君のコードを読んでいる時間があるならオープンソースのコードを読みたい」まさかりはツライが愛情
  • (懇親会にて)一本どれくらいの時間で書いている?
    • とにかく書ききることに注力。時間を書けてもスベるときはスベるのでまず書ききる。
  • (懇親会にて)人がシェアしたくなるものを書く
    • 人はゴシップ系を読みたい一方で、シェアしたいのは人に見せたいものという調査結果があるらしい。先のコミットメッセージの記事はまさに人に見せたいをついた例
    • 「いいねはどうでもいいねかもしれない」

登壇者の@numanomanuさん、参加者の皆さま、どうもありがとうございました。

イベントレポート | ProLabo(プロラボ)もくもく会(Web系) ~HTML・CSSの勉強とrails tut 7章(ユーザ作成)~ #ProLabo 7B

はじめに

いつも心は虹色に! nikkieです。
Web系のもくもく会に参加してきました。(連日の暑さに作業スペースを求めました。。)

勉強会の概要

【初心者・1人参加歓迎】ProLabo(プロラボ)もくもく会(Web系) #ProLabo 7B - connpass

Web系プログラミング・デザインなどのもくもく会です。
各参加者が自分の作業や学習をもくもくと進めます。

ふだんPython関連のもくもく会に行くことが多いですが、言語縛りなしのもくもく会にお邪魔してみました。

取り組んだこと

  • HTML・CSSの勉強
  • Rails tut 7章(ユーザ作成)

HTML・CSSの勉強

サーバサイドの開発が多いので、フロントエンドは初学者です。リセットCSSというものがあるというところからスタートしました。
静的なコンテンツということでHTMLにCSSを当てるのを、とあるチュートリアルを参考に進めました。
今回やったのは、2カラムの中央寄せです。

HTMLとCSSでも結構いい感じにできるという印象です。
これまで個人開発したDjangoモザイクアートのHTMLなど、アップデートしてみたいなー。

Rails tut 7章(ユーザ作成)

先日の合宿で作ったレコメンドアプリケーションに機能追加しました。
ユーザ作成(Sign up)画面を用意し、入力内容にエラーがなければログイン扱いとして、アイテムのレコメンドを表示するというものです。

  • フォーム作成 7.2.1
  • マスアサインメントをセキュアにするためにprivateメソッド追加 7.3.2
  • エラーメッセージ追加 7.3.3
  • 登録成功 7.4.1

コンテナでdebuggerメソッドを使うには設定が必要でした。
次のブログのとおりにするとdebuggerメソッドが動作しました。助かりました、かたじけない!
Debugging Rails application in Docker with byebug
execではなくattachする必要があるようです。(attach後debugger実行まで何も表示されないので不安になりますね。。)

感想

LaravelやRailsで普段開発されている方が多数のもくもく会で新鮮でした。刺激もいただきました。
お昼のときはJSの話題にもなり、情報収集にもなりました。(Vue系列のNuxtが流行っているらしいです。賞味期限が短いことを意識してキャッチアップしていきたいですね)

  • 作業BGMがProLaboもくもく会の特色のようです。BGMがあると無音のときより話しかけやすくなりますよね。Secret Baseとかガーネットとか個人的にポイント高い曲がたまに流れてきてテンション上がりました!
  • 技術書典の準備をされている方が複数名いらっしゃり(ProLabo駆動執筆だそうです)、技術書を書くというアウトプットに挑戦されていてすごいなあと思いました。(10月買いに行きます!) 将来的にはなにか書いてみたいな。。
  • お昼は三太夫さんでお魚ランチでした。おいしかった!

f:id:nikkie-ftnext:20180721222715j:plain

参加者、そして運営者の皆さま、1日どうもありがとうございました!
今後の予定も公開されていますし、またお邪魔したいと思います。

イベントレポート | Python mini hack-a-thon 夏山合宿 2018 レコメンドアプリケーションをもくもく #pyhack

はじめに

いつも心は虹色に! nikkieです。
「夏だなー。思いっきり開発したいなー」ということで、合宿に参加してきました。

合宿の概要

Python mini hack-a-thon 夏山合宿 2018 - connpass

毎年夏、冬に行っている、Python mini Hack-a-thonの合宿バージョンです。
部屋にこもって開発するも良し、食堂でボードゲームするもよし、高原を散歩するもよし、周辺でゴルフや釣りをするも良し、というお気楽な会(Python関連の知り合いとの夏山合宿)です。

半年くらい前から顔を出しているpyhackの合宿ということで、3泊4日フルで飛び込んできました。
申し込んだ時点では、モザイクアートなどの個人のプロジェクトを進める時間にしようと考えていましたが、
最近のもくもくの傾向に従ってか、業務関係のもくもくとなりました。

もくもくの目標

以下の構成のアプリケーションをローカルで動かす。

とあるテキスト(チュートリアル)をもとに進めています。

触ったもの

ぐるなびAPI

レストラン検索APIのサンプルコードをもとに
Python3系でrequestsを使ってAPIリクエストを実装しました。

デフォルトでは10件ずつ返すので、21件ヒットしたときは

  1. 最初の10件
  2. 次の10件
  3. 1件

というように取得できます。
10件返すときと1件返すときとでJSONの形式が異なることが判明し、実装でカバーするのはなかなか骨が折れました。

Docker

今回の合宿ではめちゃくちゃ恩恵にあずかりました。Dockerさん、本当にかたじけない。
PySparkやRailsなど幅広く触れたのは、Dockerで環境構築が簡略化されたためと考えています。

ipython-sql

jupyter notebookからSQLが使えます! 便利!!
参考: Jupyter Notebook(Anaconda/Windows)からMySQLに接続する(Python)

_が変数として活躍します。

最後の結果はアンダーバー(アンダースコア)「_」変数に格納されるため、次のセルで「df = _.DataFrame()」などと呼び出すと、(以下略。上記参考記事より引用)

SQLの実行結果をnotebookとして共有できるのがいいよねという話にもなりました。

協調フィルタリング(PySpark)

Azure Machine Learning Studioでベンダー用意の実装は使ったことがありましたが、PySparkを使うという手もあるんですね。
参考: PySparkで協調フィルタリング
行列分解(Matrix Factorization)を使っているようです。

flaskアプリケーションをPySparkが使える環境で動かすことで、
協調フィルタリングのモデルを読み込み、予測を取得ということができました。
(flaskアプリからおすすめするアイテムのIDが返せる)

Ruby on Rails

Rails Tutorial 8章も眺めながら、ログイン機能の実装を進めていきました。
ログインしたユーザについてflaskのAPIを使ってレコメンドをする部分を実装しました。
今回のもくもくでは、レコメンドが主機能のアプリを開発したわけではなく、
既存システムにレコメンド機能を組み込むにはこういう作業をするというところが掴めたかなと思います。

IDの扱いの問題

ここまでの作業は2日目の夜には終わったのですが、IDの扱いのズレに気づきました。

  • PySparkで作成した協調フィルタリングモデル: アイテムのID、ユーザのIDはどちらも 0 から始まる
  • Railsアプリが参照するDB: アイテムのID、ユーザのIDはどちらも 1 から始まる

3日目にはIDのズレを解消するため、チュートリアルをやり直していました。
アイテムのIDはモデルでもDBでも0から始まるように合わせ、ユーザのIDは読み替えるという方針を取りました。1

2周め: Railsアプリケーション作り直し

間を開けずに2周めということでだいぶ苦しかったですが、なんとかやりきりました。。

  • DBのアイテムIDを0から始まるように変更
  • ログイン処理の動きを少し理解
    • 作り直す前はブラックボックスだったのですが、Rails Tutorial 8章メインで進めたことで何をやっているかわかってきました。
      • ログインフォームの画面はSessions#newが出す (ログインに失敗したときも呼ばれる)
      • ログインフォームに入力しsubmitした(POSTで通信した)あと、Sessions#createが呼ばれる
      • ログインに成功したらUsers#showが画面を出すように設定
      • ログアウト処理はSessions#destroyによる

感想

いやーー、はかどりました。pyhackのもくもく会が連日開催というような感じでしたねー。
暑い日もありましたが、都内に比べたら十分涼しかったです。
開発しかやることがない状況と非日常感で、目標部分は2日で完了まで持っていけました。(問題への対応でやり直しましたが。。)
マウンテンパパさんの食事は豪華でとてもおいしく、開発の合間でリフレッシュできました。

冬は寒そうですが、行ってみたいなと思います。

マウンテンパパの皆さま、幹事・参加者の皆さま、どうもありがとうございました!

おまけ

サマー・ウォーズ巡礼もちょっとできたので満足です!


f:id:nikkie-ftnext:20180716173353j:plain


  1. PySparkのモデルでアイテムのID、ユーザのIDをどちらも1から始めるように修正するアプローチもあると思います。(工数は小さそう)

イベントレポート | 独学プログラマーとして成功するには、何が必要か? #独学プログラマー #独プロ

はじめに

いつも心は虹色に! nikkieです。
ひと月ほど前ですが、独学プログラマーの著者トークイベントに参加してきました。
このブログは、7/11のstapyのLTと連動しています。

イベントの概要

6/18に池袋のジュンク堂で開かれたトークイベントです。
訳者清水川さんブログ: Cory来日イベント!『独学プログラマー』 1万5000部突破!! — 清水川Web
「独学プログラマーとして成功するには、何が必要か?」と題して、本の中を振り返りながらトークが進んでいきました。

イベントメモ

感想や補足情報は脚注として入れています。
長くなっていますので、興味のある箇所をご確認ください

日本でたいへん売れているとのこと(紙で1万部以上)→コーリーさん来日が実現
司会は編集の田島さん(日経BP)

成功するには?
日々成長、モチベーションを保つには?、その先に成功

読み切ることを狙って書かれた

登壇者紹介

コーリーさん

  • カリフォルニア州ベニスにいる SnapChat本社がある(ベンチャータウン)
  • 水曜日に京都へ 初来日 日本でよかった点: Food メイドカフェ(すでに2回行った)
  • 政治学科卒業
  • 就職できず、プログラミングを独学で勉強(興味はもともとあった)
  • ブログ、本、コースを駆使
  • 本を書くことで他の人(プログラマになりたい人たち)を手伝う、自分の学んだことの体系化
  • 本のゴール: プロのプログラマへのロードマップを提供

  • 清水川さん: 高校からプログラミング Python15年(2003年~) PythonBootCamp

  • 新木さん: Web開発 大学の研究でプログラミングを始めた 今回通訳1

    • 文系 -> 理転(カナダの大学)
  • なぜ黒い表紙?

    • デザイン会社に発注。芸術センスがないのでおまかせした
  • 日本語版を見て

    • much better than my cover Instagramアカウントで使っている
  • 何カ国で?

    • 6 languages: 日英のほか、ポーランド語、ロシア語、韓国、中国
  • 清水川さん率直な感想

    • 本をレビューして出版するかどうか判断するという話が来た
    • 教えるという立場で面白そうと思った
    • Pythonのインストールから始める本は多い 似た本でなければいいな -> プログラミングだけでなく、心構え・取り組み方
    • 「人生の中でプログラミングを使ってどう取り組んでいくのか」
    • 2001 Pythonプログラミング作法 に似た本
  • 新木さんJoinの経緯

    • ちょっと助けになるかな

まとめ: いい本があり、見極めていただき、訳していただいた

コーリーさんは今何をしているか

  • Self-Taught Media(出版社)を創業
    • 独プロが最初の製品
    • 次が50のビデオからなるオンラインコースを作成中(独プロがもと)
      • 視覚的に見せたいものがたくさんあったため
  • 独学のための本やコースを用意していきたい

  • 独学へのこだわり

    • 自分の苦労をもとに体系化して共有したい
    • オンラインコミュニティ FBコミュニティ 45000人 活発 サポートしていきたい(是非参加してね)
  • 独学であったとしても支援してもらえるコミュニティは大事か(清水川さんへ)

    • OSSのコミュニティ コードを使ってもらって嬉しい、褒めてもらえば嬉しい、フィードバックもらっても嬉しい
    • まず公開する(共有する) 互いのベネフィットを高める
    • Q&Aサイトや勉強会に行って教えてもらう オンラインとオフラインを使い分けてコミュニティを使っていくといいのでは

なぜプログラミングなのか、なぜPythonなのか

  • ソフトウェアエンジニアは魅力的
    • 給料がよい、楽しい、挑戦的
    • 仕事をしていて退屈を感じたことはない
  • ソフトウェアエンジニアになりたくなくてもプログラミングを学ぶのは大事
    • プログラミングを学ぶことで考えていることを明確にできる
    • 退屈な仕事を自動化できる
  • Python

    • 読みやすく理解しやすい 入門者にオススメ
    • 作ったGuideさん プログラムは書くことよりも読まれることのほうが多い
      • Pythonは読みやすさに力を入れている
  • 執筆するにあたってPythonにすることは明確。自分の道の共有なので、一番使ってきた言語を

日本におけるPythonの状況: 清水川さん

  • 流行っている
    • 2003年はPythonの技術書を探すのが大変だった
    • 今乗っかると勉強しやすい
  • Pythonはオールラウンド (JavaRubyもオールラウンド)
    • Webサーバ、機械学習、テキスト処理、IoT
    • Pythonが苦手な分野は別の言語になる

独学プログラマーになるために必要な要素

  • プログラミングの書き方
  • プログラミングパラダイム(=考え方) オブジェクト指向(絶対に学ぶべき)
  • プログラミングツール 正規表現コマンドライン
  • コンピュータサイエンス データ構造 <- デザインパターンはここに入る

  • 広い分野に渡る内容構成にしたのはなぜ?

    • 自分の経験から情報が散らばっていた(ちょっとずつしかない)のはフラストレーション
      • プログラミングの話だけで、学び方や今後どうするかは書かれていない
  • 就職の仕方、働き方を第5部に盛り込んだ理由は?

    • 自分が仕事をしているときに困ったことをまとめ、次の人が困らないように2
    • 詐欺師症候群(自分の実力を常に疑ってしまう) 外から見てもしっかりできている。本人は学び足りないと感じている(スタンフォードの友人の話)
  • 一冊の本にこれだけまとまっている点について(清水川さん)

    • どのパートも1冊の本として存在する
    • プログラミングに興味のある人に複数の分野を示す入り口となる
      • 別の本に進む入り口としても読める

コーリーさんおすすめの本

  • 達人プログラマー3 (日本語では新装版が出たばかり)
    • 一番オススメしたい
    • スキルだけを上げるだけでなく、いろいろな話を包括的に書いている
    • こういうふるまいの人が達人というエッセイ集(清水川さん)
  • 下記2つは読んでみて楽しかった
  • 退屈なことはPythonにやらせよう4
    • プログラミングで自動化すると便利という本。仕事で使うためにPythonを覚えよう(清水川さん)
  • Think Python: コンピュータサイエンティストのように考えてみよう5 (PDF)
  • プログラミングの本ではないが、プログラミングのスキルを高める本(2冊)
  • 才能を伸ばすシンプルな本 The Talent Code6
    • 才能は生まれつきではないことを教えてくれる本
    • やりたいことがあればそれを習得できることを教えてくれる
  • 習得への情熱 チェスから武術へ7
    • チェスの天才がどうやって学びができているかを体系的に教えている
    • 学びについて学べる

独学プログラマーのメリットとデメリット

  • メリット
    • 自分自身で方向性を決めて学習という姿勢を強化できる
      • 自分で学ぶ姿勢は働いていれば必ず役に立つ
    • 大学へ行く費用が高い(アメリカでは特に顕著)
      • 400-500万のローンを抱えるのが社会問題化
      • 大学では不必要なコースがある。独学は必要なものを自分で考えることで短縮できる(効率がいい)
  • デメリット
    • 就職でデメリットになりうるか
      • 一般的な会社の就職基準: 4年制大学の学位 -> アメリカでは変わってきた
      • 学位を持っているかどうかで面接に進めるか決まるところはある。大きい会社に行きたいなら必要(大学を出ているかという観点)BeProud社は今プログラムを書けるのかを見る(清水川さん)
      • (-> 本の中の面接のハックにもつながる)

独学プログラマーとして成功するには Summary

  • 一番の秘訣: 自分で何らかのプロジェクトに関わること
    • ゲームやWebなどやりたいことをプログラミングで達成していった「可能な限り多くのプロジェクト」
    • やりたいと思っているプロジェクトを遂行する
    • Always work on project

さらに4つオススメ8

  • メンターを見つける やっていることにアドバイスをくれる
  • コードレビュー コードにアドバイスをもらう
  • GitHubで興味のあるプロジェクトのコードを読む fully understand 人のいいところを盗みまくる
  • ペアプロ more-experienced いいものを人からもらう

追加

  • 複数の言語を同時に学ばない。初学者は一つに絞る(一つの基礎を固める)

質疑

  • 上級者にも進められる本か?訳者は学びがあったか

    • 基本的には入門者向けの本 グループには小学校4年生もいる
    • (清水川さん)文法以外のところ。徹底的にやりきる。先の一つの言語をやりきる。面談をやりきる。やろうと思ったことにフォーカスするのは有用
    • 読み切れることが大事。難しいところにこだわらずに
  • 初学者が中級者になったと感じるポイントは?9

    • 興味を持ったもの、面白いものと思ったものを自分だけで作れる
    • 人に教えることができた時。うまく説明ができる。(清水川さん)

感想

あっという間の時間でした。独学のモチベーションが高まるお話ばかりでした。
いただいたサインです。コーリーさんの好きな言葉だそうで、独学の身には力強いです。

https://raw.githubusercontent.com/ftnext/2018_LTslides/develop/stapy_July_self_taught/assets/self-taught-sign.jpg

今回のイベントの参加者・関係者の皆さま、どうもありがとうございました。

以下、脚注として入れた感想/参考情報です。


  1. 新木さんの通訳が今回のイベントの肝だったと思います。通訳ありがとうございました。お疲れさまでした。

  2. この姿勢がすばらしいと思いますし、自分もそうありたいなと思います。

  3. 新装版 達人プログラマー 職人から名匠への道

  4. 退屈なことはPythonにやらせよう ―ノンプログラマーにもできる自動化処理プログラミング英語 公開版

  5. Think Python 2nd Edition (PDF)日本語版 初版訳?

  6. The Talent Code: Greatness Isn’t Born. It’s Grown. Here’s How. (2009)、邦訳: 才能を伸ばすシンプルな本

  7. 習得への情熱―チェスから武術へ―:上達するための、僕の意識的学習法

  8. コーリーさんは先に「ブログ、本、コースを駆使」して独学したと言っていましたが、人(コミュニティ)の力も活用している印象です。

  9. この質問の答えが聞けたのはすごくよかったです。質問者の方、ありがとうございました。

イベントレポート | Django もくもく会 Django Girls Tutorial翻訳 #モグモグDjango

はじめに

いつも心は虹色に! nikkieです。
#モグモグDjango にお邪魔してDjango Girls Tutorial翻訳進めてきました。

勉強会の概要

Django もくもく会 - connpass

Django もくもく会について

Djangoもくもく会を開催します.Django初心者の方から,上級者の方までどなたでもご参加下さい.

技術書典4で『現場で使える基礎Django』を頒布されたakiyokoさんがいらっしゃるもくもく会でした。1
『現場で使える基礎Django』を進めつつ、わからないところはその場で著者に聞けるという素晴らしい環境でした。

取り組んだこと

Django Girls Tutorial を翻訳していました。
5月のDjango CongressのSprintから参加しています。2
6月中旬からなかなか時間が取れていなかったので、今回まとめて進めました。
結果、もくもく会中に翻訳100%を達成! 達 成 感 !!

Django Girls Tutorial 翻訳

以下の2ページを訳しました。

What's next?は、Django Girls Tutorialの次の学習リソースの紹介です。 Django Girls Tutorial: Extensionsというものもあるんですね。
Django Girls TutorialがDjango 1.11を対象にしているので、紹介されている学習リソースはどれも1.11です。

日本語で読めるリソースとしては、個人的には以下を推します。3

Introductionの訳では、新規追加箇所の「under the hood of」がしっくり訳せないなーとつぶやいたところ
@Linus_MKさん、@gkzvoiceさんからコメントいただき、
「中身を見る」というしっくり来る訳にたどり着きました。ありがとうございました!

次ステップはレビューということで、手を動かしてチュートリアル2周めをする予定です。

感想

  • 皆さん持ち寄ったお菓子の甘いとしょっぱいの比率がちょうどよく、交互食べで無限にもぐもぐできる環境でした。ごちそうさまでした! アイスブレイクがあったため、互いに質問しやすい環境だったと思います
  • Dockerで環境構築されている方が多かったです。Django × Dockerは、最近取り組んでいるrails × Dockerよりとっつきやすそうな印象です。(Djangoだとマウントしているファイルの上書きが発生しないんじゃないかと思うので4)
  • Django Girls Tutorial翻訳も一区切りついたので、次のステップに進むために公式チュートリアルだったり、akiyokoさんの本だったりで手を動かしたくなってきました。(railsを別の角度から理解するきっかけになるんじゃないかと期待) もくもく会の第2回も開催予定とのことで、楽しみにしています。

皆さん、どうもありがとうございました!


  1. connpassには書かれていないようです。Django GirlsのSlackで知りました。

  2. 翻訳に参加していますが、私はDjangoバリバリ使っているわけではなく、Django Girls Tutorial修了レベルです。現時点ではFlaskの方が経験豊富です。

  3. 自分が知っているものに限定しています。また、Django Girls Tutorial修了レベルの見解なので、バリバリ使っている方にも聞いてみたいところです。

  4. rails × Dockerで発生するGemfileの上書きのことを言っています。

イベントレポート | Pythonもくもく自習室 #11 Django Girls Tutorial翻訳、AzureにDockerイメージデプロイ続き #rettypy

はじめに

だんないよ、nikkieです。
週末は #rettypy でもくもくしてきました。

勉強会の概要

Pythonもくもく自習室 #11 @ Rettyオフィス - connpass

週末の昼下がりに、Pythonに関するやりたいことを各自持ち寄り、ゆるゆると「自習」を進めていく会です。
本を読む
PythonDjangoなどのチュートリアルをすすめる
コミュニティの作業や執筆etc...
他の参加者と情報交換をしたり学んだり
おいしいご飯と共に楽しむ(?)
など、Python使いおよびエンジニアライフのオアシス&知見を身につける「自習室」としてゆるくご活用いただければと思います。

いいご飯を楽しみつつ、Pythonの自習を進められるもくもく会です。ちょくちょくお邪魔させていただいています。

取り組んだこと

  1. Django Girls Tutorial の翻訳
  2. AzureにDockerコンテナでFlaskアプリケーションをデプロイ(ハマっている件)

Django Girls Tutorial 翻訳

5月のDjango Congress以来、翻訳に少しだけ参加しています。
今回は「インターネットはどうやって動いているの?」を訳しました。
現日本語訳をもとに英語バージョンを訳します。

今回の翻訳をもとに「ブラウザにURLを打ち込んだ後、Webサイトが表示されるまでどうなっているの?」という質問に答えると次のような感じでしょうか。

  • サーバはリクエストを受けて応答としてWebサイトを返す(☆)
  • ブラウザにより、WebサイトがHTMLのコードに沿って表示される

(☆)の部分、言葉を補うと、

  • Webサイトはコンピュータに保存されたファイル
    • このコンピュータをサーバという
  • インターネットは全てのコンピュータ同士が直接つながっているわけではない
    • →異なるマシンを介してリクエストを届ける
    • 手紙(リクエスト)を郵便局(ルータ)の間で転送しながら目的のサーバまで届けるイメージ

Djangoだと個別のWebサイトを表示できるんですよで結んでいて、学習者の興味を惹きつけていますね。

AzureにDockerイメージでデプロイ

相変わらずハマっていました。。

前回は./boot.sh: no such file or directoryが解決できず。
イベントレポート | 第29回 Pythonもくもく会 〜AzureにDockerイメージがBuild, Ship, Runできずハマりました。。〜 #mokupy - nikkie-ftnextの日記

boot.shがないわけないだろうとAzureにデプロイしたコンテナにSSHする方法を探す。
Azure App Service on Linux での SSH のサポート | Microsoft Docs
→alpineイメージではapt-getに当たる方法がわからず、別の方法模索に切り替え。

前例を発見: GitHub - danriti/gunicorn-flask: Dockerfile for Gunicorn + Flask
これはAzureにデプロイすると動いた。
そこでDockerfileの記述など見比べて、原因特定を進めた。
触ってみるとPython2系であることが判明。
3系で動かすように設定してみたが、Azureにデプロイすると動かない。。

Linux環境にPythonアプリケーションをデプロイする方法について調べればいいのではとご助言いただきました。
また、学習リソースとして『Pythonプロフェッショナルプログラミング(第3版)』教えていただきました。ありがとうございます!

感想

  • Bokehのテンプレートエンジンが便利そう。Webページに埋め込める!
  • 並列処理にはgevent
    • Pythonプロフェッショナルプログラミング(第3版)』みたらabコマンド(ApacheBench)が紹介されていました。
  • Python3.7の@dataclass便利そう。クラスに順序関数など自動で実装してくれるのはありがたい
  • 『Clean Code』によると関数にbooleanの引数追加は悪とのこと。自分思い当たる節があります。これは読みたい
  • Pythonを仕事にしたいという方に『独学プログラマー』の情報をシェアすればよかったと帰ってから気づいた。Pythonだけじゃなくて、コマンドラインやバージョン管理など、仕事にするにはどこまで必要かの参考になる本だと思います。

皆さん、1日どうもありがとうございました!

後日談: AzureにDockerイメージでデプロイ成功!!

python:3.6-alpineイメージをpython:3.6イメージに変更したら、Azureでも動きました!

boot.shを指定せずにFlaskアプリケーションを動かせばいいのではないかと考えた。
別の前例を発見: GitHub - chhantyal/flask-docker: Fastest way to ship Python web apps, anywhere. Be shipping 🚀 (using Docker, Flask, Gunicorn, Whitenoise)
Dockerfileを見比べながら試したところ、デプロイするとModuleNotFoundErrorが発生。(ローカルで動かすコンテナでは発生しない)
→ENTRYPOINT命令やCMD命令ではなくベースイメージが怪しいと思い始める。
python:3.6Hello Worldするイメージ1を作りデプロイしたところ動いた!(もちろんローカルでも動きます)
alpineでなぜダメなのかはわかっていない(宿題事項)
イメージのサイズが大きいためか初回アクセス時は表示まで数分かかる感触です。。(これも宿題)


  1. 近日中にDockerHub整理して公開します。