taisablog

taisa's engineer blog

関連記事

no image

カンファレンスを最大限に楽しむ方法

Talk Python To Me という PodCast を聞いている中で興味深い話があった。 Talk Python To Me Podcast Talk Python To Me is a podcast for developers who are passionate about Python. Learn about the language and related technologies. Episode #161: Django 2.0 の 00:58:20〜のトーク内容で「カンファレンスを最大限に楽しむ方法は?」という質問に対する回答 まず第一に参加できるなら参加しましょう。もし US や北アメリカのカンファレンスに行けない場合は、ローカルで開催されているカンファレンスに参加しましょう。そしてもし参加したら友達とくつろぐのはやめて新しい友だちをつくりましょう。自分の視野を広げるために参加しているのだから。それが簡単でないことはわかります。でもそうすることで新しいアイデアやコネクションをつくることができて新しい視野がひろがります。そして、それができた場合でも自分の知識をみせびらかすようなことはやめて、そのかわりに質問をしましょう。そして私は、カンファレンスに参加してハイヤリングをした立場として分かりますが、知識があるひとよりもむしろ、新しいことを見つけ出して熱心に学ぼうとしている人を雇おうとします。 以前にカンファレンスに参加したことがある人もそうでない人も、カンファレンスのボランティアをやるのもよいです。ボランティアをする中で関係ができあがり、新しいコネクションができます。私はボランティアをすることで自分のキャリアの中で大きな変化を得ることができ、とても良い人で出会うきっかけになりました。恥ずかしいとか思うかもしれませんが、そんなことは誰も気にしてはいません。自分もとても恥ずかしいことをした経験があるけど誰も覚えてはいませんよ。 ソース:https://talkpython.fm/episodes/transcript/161/django-2.0 内容は意訳してる箇所や多少省略してる箇所があるので詳しく知りたい方はソースを見てください。この内容はトークする側ではなく単純に参加する側へ向けた話。 そしてある意味当たり前のような話ではある。ただ、恥ずかしがるとかそういった考えはなんとなく日本的もしくはアジア的なところがあるのかなと思っていたので、アメリカでもこういったことが話されてるんだなっていうところに興味が持てた内容でした。 話し手はこの方 Daniel Roy Greenfeld (@pydanny) | Twitter The latest Tweets from Daniel Roy Greenfeld (@pydanny). Co-Author Two Scoops of Django (https://t.co/h98NETIALQ), open source coder, husband of @audreyr, former NASA coder. Los Angeles, CA

no image

2017年の抱負

2017年になって1Qが終わろうとしているけど、年末に考えた2017年の抱負を書こうと思う。 2017年の抱負 いろんなことはできないので3つ+サブ目標で考えた。 生産性ビックデータビジネス・インテリジェンスサブ目標 フロントエンド 英語 生産性 これまでも開発の生産性を意識した活動をしてきたが、全員の開発効率アップ、品質アップのような守備的な活動が多かった。けど今年はスクラム体制にして攻撃的な面も加えていきたいと思う。 去年までの振り返り 去年までは2人1組のような小さなチームで開発し、できたらリリースするというサイクルで開発していたが、以下の問題が細かく積み重なってきていた。(サービスの規模がそういった状況に陥る状況にまで成長したとも言える。) マネージャーの管理コストが高い要件定義して開発に仕事を振る側の負担が大きい開発者が指示待ちになる開発した機能が属人的になる開発メンバーが他のメンバーが何をしているか把握できない(チーム感がない)開発・営業・運用で足並みを揃えるのが難しい これらの問題を一気に解決する為に2017年からはスクラム体制で開発を進めることした。 スクラムのチーム構成 最初のスクラムチームの構成は以下の7人体制 プロダクトオーナースクラムマスター(自分)開発チーム デザイナー兼コーダー 中堅エンジニア 2~3年目のベトナムメンバー(2人) 新卒エンジニア スクラムを始めるあたり読んだ資料と書籍 Wikipedia まず最初に見たのがWikipedia。スクラム自体はある程度決まった型があるので、ここを見るだけでも大体の流れを確認することができた。また、スクラムガイドがリンクされているので合わせて読んだ(こちらも17ページ程)。 SCRUM BOOT CAMP THE BOOK 次に読んだのがこちらSCRUM BOOT CAMP THE BOOKこの本はスクラムについての概要はわかったけど実際どんな風に進めたらよいかが分からないという方におすすめ。実際の流れを漫画を交えて説明してるので読みやすいし一連のスクラムの流れがわかる。個人的にはスクラムガイドとこの本を読めばスクラムを開始できると思う。 スクラム実践入門 他の書籍も一応見ておこうと思って呼んだのがこちらスクラム実践入門 ── 成果を生み出すアジャイルな開発プロセス (WEB+DB PRESS plus)この本ではいくつかの企業の事例が紹介されている。スクラムを始めるきっかけなどが書かれているので事例を見てみたいという方には良いと思う。 Joy,Inc. ジョイ・インク 役職も部署もない全員主役のマネジメント この本は直接スクラムには関係ないけど、おもしろい取り組みをしていて、開発の生産性をあげたいという意味で参考になっておもしろかった。スクラムを始めるにあたって読んでおいてよかったなという一冊。 ビックデータ 2つ目の目標はビックデータを本格的に扱うこと。数年前にバズワードになったけど、本格的にあたり前のように活用されるのがこれからだと思う。データがたまり、インフラが整いデータを安価で扱いやすい状況になってきている。ビックデータといっても様々な文脈があるが、個人的な活動の目標としては「GoogleBigQuery」、「AWS」を触りつつ手元にあるデータをいろんな形でこねくり回せる状態にする。というのを目安に進めていく。 ビジネス・インテリジェンス 3つ目もビックデータの文脈だが、データから有効な示唆出しをすることが一つのゴールになるのでそこを見失わないようにしたい。いろいろ触って「データサイエンティスト」の雰囲気がなんとなくつかめてきた。という状態にしたい。 サブ目標 いくつもやりたいことをこなすなんてことは自分にはできない。けどサブとしてでもやりたいと思ってるのが以下の2点。 フロントエンド jQuery脱却して一気にモダン化させたい(楽に開発をしたい) 英語 英語の勉強をするというよりは英語を使う環境に身をおける状態にする英語の技術系podcastを聞く 今年の抱負のまとめ 生産性を最大化しつつデータをこねくり回せるようにするできればフロントを最適化して英語も多少はコミュニケーションがとれるようにする

プログラミング言語の歴史を見える化してみた

「まつもとゆきひろ 言語のしくみ」と「Talk Python #100」のGuidoの回をたまたま同時期に見聞きしたら言語の歴史を調べたくなった。言語は少なからず他の言語から影響を受けたり、他の言語に影響を与えたりしている。ということでその影響関係をwikipediaの情報を元に見える化してみた。 まつもとゆきひろ 言語のしくみ ぐちゃ〜。。。これだけ見ると複雑に絡み合ってよくわからない。ただ見たい言語をクリックするとその言語がフォーカスされどの言語がどの言語に影響を与えどの言語に影響を受けたかが見やすくなる。 使い方 ソースはこちら GitHub taisa831/Langury Contribute to Langury development by creating an account on GitHub. 多重継承が可能なC++で(ただクラスをつくってるだけ)doxygenとgraphvizを使って出力している。 インストール DoxygenとGraphvizをインストールする。 brew install doxygen brew install graphviz Languryをクローンする。 git clone git@github.com:taisa831/Langury.git cd Langury 出力 doxygenコマンドを実行してHTMLを出力して開く。 doxygen open html/index.html select Classes -> Class Hierarchy 対象言語 ここで取り上げた言語はwikipediaの以下を対象にした。 ※一部記載なし。 ※実際とは異なっていたり足りてない箇所があるご注意ください。 各言語について 1950年代:FORTRAN、LISP、ALGOL、COBOL 1960年代:CPL、BASIC、PL/I、BCPL、Simula、LOGO、B 1970年代:Forth、Pascal、C、Prolog、Smalltalk、ML、AWK、Ada 1980年代:C++、Objective-C、Common Lisp、Eiffel、Erlang、Perl 1990年代:Python、Tcl/Tk、Haskell、Visual Basic、Ruby、Lua、Delphi、Java、JavaScript、PHP、OCaml、SuperCollider、R 2000年代:C#、Scala、D、F#、Go 2010年代:Ceylon、Rust、Dart、Elixir、Hack、Swift 1950年代 FORTRAN 1954年にIBMのジョン・バッカスによって考案された。コンピュータにおいて広く使われたプログラミング史上最初の高水準言語。 LISP 1958年にジョン・マッカーシーによってはじめて設計された。高水準プログラミング言語の中ではFORTRANに次いで2番目に古い。LISPの名前は「list processor」に由来している。 ALGOL 1950年代中ごろに開発され、多くの言語に影響を及ぼした。ACMや教科書や学術論文などでアルゴリズム記述のデファクトスタンダードとして30年以上使われ、ほぼ同世代の高水準言語であるFORTRAN、LISP、COBOLに比べて最も成功した。設計者はバウアー、 ルティシュハウザー、 サメルソン、 バッカス、 パリス、 ナウア、 ファン・ワインハールデン、 マッカーシー他。FORTRANで明らかとなった問題を防ぐよう設計された。「ALGOL」は「アルゴリズム言語」を意味する英語「algorithmic language」に由来する。 COBOL 1959年に事務処理用に開発されたプログラミング言語。名前は「Common Business Oriented Language」(共通事務処理用言語)に由来する。 1960年代 CPL CPLはケンブリッジ大学の数学研究所とロンドン大学コンピュータ部の共同プロジェクトとして1960年代に開発された。C言語の遠い祖先となった言語でクリストファー・ストレイチーが関与している。Combined Programming Language「統合プログラミング言語」の意。 BASIC 1964年に米国ダートマス大学にて数学者ジョン・ケメニーとトーマス・カーツにより教育用などを目的としてダートマスBASICが開発された。初心者向けのプログラミング言語として、1970年代以降のコンピュータ(特にパソコン)で広く使われた。Windowsアプリケーションの主力な開発言語であるVisual Basicの文法に影を残している。 PL/I 1964年に生まれ。教育機関、商用、工業で使用され現在も使われている。「programming language one」(ピーエルワン)に由来する。 BCPL Basic Combined Programming Language、Basic-CPLは、1966年にケンブリッジ大学のマーチン・リチャーズが設計した。B言語の基礎で、B言語から派生したC言語は文法的にBCPLの亜種。 Simula オルヨハン・ダールとクリステン・ニガードによってALGOL60を拡張する形で1960年代に開発が始められたシミュレーション用途のプログラミング言語(登場時期は1967年)。世界最初のオブジェクト指向言語であると言われる。 …

no image

DockerでGoのWebサーバーを起動する

ミニマムにやっておかないと忘れがちなのでメモ サンプル用Goサーバを作成する package main import ( “encoding/json” “net/http” ) type User struct { FirstName string `json:”firstName”` LastName string `json:”lastName”` } func users(w http.ResponseWriter, req *http.Request) { w.Header().Set(“Content-Type”, “application/json”) user := User{ FirstName: “John”, LastName: “Doe”, } var users []User users = append(users, user) json.NewEncoder(w).Encode(users) } func main() { http.HandleFunc(“/users”, users) http.ListenAndServe(“:8002”, nil) } 普通に起動して動作確認をします。 $ go run main.go http://localhost:8002/usersにアクセスするとJSON結果が出力されます。 [ { “firstName”: “John”, “lastName”: “Doe” } ] Dockerfile Dockerfileを作成します。alpineをつけるとよりミニマムなイメージができます。参考(https://hub.docker.com/_/golang?tab=description) FROM golang:1.14 #FROM golang:1.14-alpine # コンテナログイン時のディレクトリ指定 WORKDIR /opt/sandbox-docker-go # ホストのファイルをコンテナの作業ディレクトリにコピー COPY . . # ADD . . # ビルド RUN go build -o app main.go # 起動 CMD [“/opt/sandbox-docker-go/app”] 構成 $ …

GORMでよく使うSQLの書き方

GORMでよく使うSQLの書き方をメモとして残しておきます。詳細は記事最後の参考リンクの公式ドキュメントで確認できます。 CREATE insertするだけであれば create を利用します。 db.Create(&models.User{Name: “user”}) # 実行SQL INSERT INTO “users” (“created_at”,”updated_at”,”name”,”email”) VALUES (‘2020-04-25 11:22:00′,’2020-04-25 11:22:00′,’user’,0) UPDATE 特定のフィールドだけ更新したい場合、 Update と Updates を使います。 update 一つのフィールドだけアップデートします。 user := &models.User{Name: “user”} db.Create(user) db.Model(user).Update(“name”, “user2”) # 実行SQL INSERT INTO “users” (“created_at”,”updated_at”,”name”,”email”) VALUES (‘2020-04-25 11:34:39′,’2020-04-25 11:34:39′,’user’,”) UPDATE “users” SET “name” = ‘user2’, “updated_at” = ‘2020-04-25 11:34:39’ WHERE “users”.”id” = 5 updates updates は map を利用して複数のフィールドをアップデートします。 user := &models.User{Name: “user”} db.Create(user) db.Model(user).Updates(map[string]interface{}{“name”: “user3”, “email”: “g5.taisa831@gmail.com”}) # 実行SQL INSERT INTO “users” (“created_at”,”updated_at”,”name”,”email”) VALUES (‘2020-04-25 11:39:52′,’2020-04-25 11:39:52′,’user’,”) UPDATE “users” SET “email” = ‘g5.taisa831@gmail.com’, “name” = ‘user3’, “updated_at” = ‘2020-04-25 11:39:52’ WHERE “users”.”id” = 6 SAVE Save は SQL を実行する際にすべてのフィールドを含みます。フィールドを指定しなくても空にはなりません。 user := &models.User{Name: …