taisablog

taisa's engineer blog

Ceylon

投稿日:

-

執筆者:

関連記事

Rust をはじめてみよう!

Rust をはじめてみよう!ということで Rust をはじめてみました。 Rust ってなに? Rust言語は速度、並行性、安全性を言語仕様として保証するC言語、C++に代わるシステムプログラミング(英語版)に適したプログラミング言語を目指している[4]。2006年の開発初期はグレイドン・ホアレの個人プロジェクトだったが、2009年にMozillaが開発に関わり始めてMozilla Researchの公式プロジェクトとなった 参考 : Rust (プログラミング言語) – Wikipedia また、公式ドキュメントが充実しているのでそちらをみれば大体分かるようになっています。 特徴 ゼロコスト抽象化 ムーブセマンティクス 保証されたメモリ安全性 データ競合のないスレッド トレイトによるジェネリクス パターンマッチング 型推論 最小限のランタイム 効率的なCバインディング インストール rustup を使ってインストールします。 $ curl https://sh.rustup.rs -sSf | sh 実行すると以下のように言われるので設定を反映させます。 To get started you need Cargo’s bin directory ($HOME/.cargo/bin) in your PATH environment variable. Next time you log in this will be done automatically. To configure your current shell run source $HOME/.cargo/env $ cargo command not found: cargo $ source $HOME/.cargo/env $ cargo –version cargo 1.29.0 (524a578d7 2018-08-05) rustc というのコンパイラもインストールされます。 $ rustc –version rustc 1.29.1 (b801ae664 2018-09-20 rustc を使って Hello, World! まずは rustc を使って Hello, …

2018年振り返り、プレイングマネージャーは難しく

2018年は1月から正式に新しい環境で働き出した年になりました。また7月に2人目の子供が生まれたのも大きなイベントの1つとなりました。そんな中、個人としてはある程度やれたかなと思うところもありますが、逆に色々と反省することも多くあった年になりました。 主目標 業務として 業務として立てた目標は、今年1年で目安としていたところまで到達することができたように思います。ただその反面、目標に固執するあまり他のことに手が回らず結果的に周りに迷惑を掛けてしまいました。この点においては反省すべき点でしたが、昨年自分の活動していたことは今年につながることだと信じてやっていたことでもあるので、今年を大事にしていこうと思います。 CTOとして 選択と集中 7月に2人目が生まれたことで1人目以上に個人の時間がなくなりました。なので2人目が生まれてから、まずはコミュニティ活動を抑えることにしました。また、業務でも自分のやることは限定していたつもりでしたが、それでもいつのまにか設計・レビュー・マネージメント・運用・外部連携等やることが増えていき上記にもあるように周りに迷惑をかけてしまいました。 プレイングマネージャーは難しい 前職でも現職でもやっていて毎回思うことですが、プレイングマネージャーは難しいです。クライアントと調整しながら、社内マネージメントしながらどちらにおいても自分がコードを書くことを並行して進めると、自分でもびっくりするようなイージーミスをしてしまったりします。こういう場合、自分が思っている以上に割り切って余裕をもってタスクをこなすのが必要なんだと思います。 速度と品質担保 速度と品質については、色々と考えた上で薄い自社フレームワークを導入しました。これ自体はよかったと思いますが、導入時に不具合を起こしてしまったこともあり、早い段階だったとはいえイケイケゴーゴーでいきすぎたなと反省しました。 チームビルディング その時にあった開発体制をと思い、自分がスクラムマスター役をやり開発メンバーには開発に専念してもらうというゆるい感じのスクラムを導入しました。ただそれはチームにとっては逆効果(メンバーに開発タスクを丸投げのような形)になってしまいました。前職で最後1年間ガッチリスクラムでやっていたこともあり、同じ感覚で進めてしまっていたのがよくなかったです。リモートが多いというのもありますが、コミュニケーションは大事だなとあらためて思いました。 エンジニアリング 自分と後輩エンジニアだけでやっていたことですが、サブプロジェクト的に社内WebフレームワークをGitLab内で公開、社内ツールをGitHubに公開するなどの取り込みをしました。このような取り組みは好きで以前からやっていることで、効果が大きいことも多いので続けていこう思います。 学習技術は機械学習 今年からAIPyハンズオン勉強会を不定期で開催しました。参加人数は少ないもののなんとか4回程実施できたのでよかったと思います。 https://aipy.connpass.com/ ブログ継続 ブログは最低月1(年12投稿)、最高月2(年24投稿)以上が目標でしたが今年は18投稿にとどまりました。 英語でコミュニケーションできるように この件は別投稿に書いたのでスキップします。 2018年の英語振り返り 毎年英語力向上を目指して何かしらやったりやめたりしていますが、今年の英語はどうだったかなと振り返ってみます。そもそも海外で働く予定もなく日々英語でコミュニケーションを取るという状況にはすぐにはならないのでゆるゆるとやっています。とはいえ年1で海外に行った時に簡単なコミュニケーションくらいはできるようになりたいというのが今年の目標でした。 今年は5月にシンガポールへ行きました。PyCon … 株に投資をする 年始めにやる予定でしたが、マイナンバーカードが紛失していて再発行手続きするまで時間があいてしまったため口座開設までにとどまりました。口座は楽天銀行、イオン銀行に開設しました。少しずつ資金を集めてやってみようと思います。 執筆 共著ではあるものの個人的には今年最大の取り組みとも言えるものでした。関係者には感謝です。 React、Angular、Vue.js、React Nativeを使って学ぶ はじめてのフロントエンド開発 コニュニティ活動 今年は、マレーシアで開催されたPyCon APACに参加し、参加レポートをgihyoさんに寄稿することができました。 「PyCon APAC 2018 in Singapore」参加レポート 2018年5月31日(木)~6月2日(土)にかけて行われた「PyCon APAC 2018 in Singapore」。後半の2日間に行われたカンファレンスデイの様子やセッション以外の現地滞在の様子などを,当日参加したメンバーが2回にわたってお届けします。 まとめ 新しいことに挑戦することができたり色々失敗したりと多くのことが経験できた年になりました。また、業界関係ない人と飲むことが多く普通に色んな人と楽しく飲んだり遊んだりできたのも今までにない感じで楽しく過ごせました。今年も健康と安全第一になるだけ楽しくやっていきたいと思います。

Firebase Cloud Firestore 使い方の勘ドコロ

FirebaseのCloud Firestoreを扱う際、本家ドキュメントが充実していて検索すればすぐに出てくるのでそれほど困ることはありません。ただ、最初の入りとしてFiresotreのDocumentって何? となったり、doc、docRef、cityRef、cityDocRef、snapShot、docs など、本家ドキュメントの中でも若干変数名の書き方が異なっていたりします。その為、慣れてくれば大丈夫ですが、慣れるまで毎回どう書くんだっけ?と検索することが多かったので、自分なりに解釈して整理してみました。Firestoreを扱える言語は様々用意されていますが、ここでは、JavaScript(Nuxt.js)を例に進めていきます。(セットアップは省きます) 参照元:https://firebase.google.com/docs/firestore/manage-data/add-data?hl=ja Firestoreの基本的な考え方 基本的な考え方は、正にこの図にあるように「フォルダ(collection)」「ドキュメント(document)」「データ」という構成になっています。 参照元:https://firebase.google.com/docs/firestore/data-model これをFirestoreの管理画面でみるとこのようになります。 これを「フォルダ(collection)」「ドキュメント(document)」「データ」に当てはめてみるとこのようになります。イメージとしては、本棚にフォルダが並んでいてフォルダを選択するとフォルダの中のファイル一覧がみることができ、あるファイルを選択するとそのファイルに書かれている内容をみることができるという感じです。 ◯◯Refとは 本家ドキュメントをみると、◯◯Refという変数がよく出てきます。これはその名の通り「参照」です。つまり本棚にあるフォルダ(collection)やフォルダ内のドキュメントを選択した状態です。この時点ではまだ参照なので取得はしていません。usersコレクションを選択した状態であればuserRef、usersコレクションのドキュメントを選択した状態であればuserDocRefといった変数をつけると分かりやすいと思います。(本家ドキュメントではそのようなルール決めはありません。) userRef = db.collection(‘users’) userDocRef = db.collection(‘users’).doc(‘YLu7bG7PcRNYhAg3F6MY’) これらを踏まえて、実際にデータの取得、追加、更新、削除のコードを書いてみます。ここではあえて◯◯Refのように変数を使っています。 コレクション配下のドキュメントデータをすべて取得する usersコレクションを参照した状態で、get().then()を呼び出すとその時点のドキュメント一覧(snapShot)が取得できます。ドキュメントは1つしか存在しない可能性もありますが、ドキュメント一覧なのでforEachでループすることで全データを取得することができます。ユーザIDはデフォルトでドキュメントに振られるIDです。 const db = firebase.firestore(); let userRef = db.collection(‘users’) userRef.get().then((snapShot) => { snapShot.forEach((doc) => { this.users.push({ user: doc.data(), user_id: doc.id }) }) }) ユーザID ユーザ名 ユーザメールアドレス {{user.user_id}} {{user.user.name}} {{user.user.email}} 参考:https://firebase.google.com/docs/firestore/query-data/get-data?hl=ja コレクション配下のドキュメントデータをフィルタして取得する フィルタするのにwhereを利用することができます。whereで対象を絞った後、同様にget().then()を呼び出すとフィルタしたドキュメント一覧が取得できます。 const db = firebase.firestore(); let userRef = db.collection(‘users’) userRef.where(‘name’, ‘==’, ‘山田太郎1’).get().then((snapShot) => { snapShot.forEach((doc) => { this.filteredUsers.push({ user: doc.data(), user_id: doc.id }) }) }) ユーザID ユーザ名 ユーザメールアドレス {{user.user_id}} {{user.user.name}} {{user.user.email}} 参考:https://firebase.google.com/docs/firestore/query-data/get-data?hl=ja 単一のドキュメントデータを取得する 単一のドキュメントデータを取得するには、doc()にIDを渡し、get().then()を呼び出すと指定したドキュメントのデータが取得できます。この場合、doc()で単一のドキュメントを指定しているので、取得できるのは一覧ではなく指定したドキュメントの値となります。 const db = firebase.firestore(); let userRef = db.collection(‘users’) userRef.doc(‘YLu7bG7PcRNYhAg3F6MY’).get().then((doc) => { this.user = doc.data() this.user.user_id …

「AIPyハンズオン#1」開催レポート

第1回AIPyハンズオン勉強会を開催したのでその開催レポート AIPy (アイパイ) ハンズオン #1 (2018/04/12 19:30〜) この勉強会について 仕事で機械学習などを活用したいけど何からはじめればよいか分からないような方向けのハンズオン形式の勉強会です。まず初めは 仕事ではじめる機械学習 の「7章 映 画の推薦システムをつくる」をハンズオン形式で行う予定です。みんなで集まって意見を交換したり協力したりしながら一気に機械学習に関する知見を深めていこうというの … 結論から言うと第1回ながら合計8名の方に参加して頂いて、専門ではないけどよく知っている方もいて、想定していた以上にすごくためになる会になった。当日はハンズオンというか輪読会で、しっかりハンズオンがやれるようになるまではまだしばらく時間がかかりそう。 開催動機 去年くらいから機械学習をやろうと思い本を読んだりしつつ、今年は本格的にやって何かしらアウトプットをしようと決めたものの、自分一人では到底無理だということにそうそうに気づいたのがきっかけ。他もそうだけどみんなで集まって話しながらやると学習曲線が一人でやるより圧倒的によいので、皆さんの力を借りながら少しずつ進めていくことにした。 当日の流れ 当日は以下のスケジュールでやった。前座LTがあることで少し和やかに進められたかなと思う。次回以降も同じスケジュールでやっていく予定 19:30- 簡単な趣旨の説明 19:40- 自己紹介 19:50- 前座LT(@tomonari_s 中国深セン渡航レポート) 20:00- ハンズオン開始(担当:@taisa831) 21:30- 終了 21:30- 行ける人だけで懇親会 LT風景 第1回勉強会の題材 「仕事ではじめる機械学習」の第7章の「映画の推薦システムをつくる」を題材にした。この章では前半から後半にかけてどのようなアプローチで映画の推薦システムをつくるかという説明がされ、何から手を付けたらいいの?という自分にとってはとてもよい内容だった。 一人で読んでいるとどのワードが重要なのかすらわからず、軽く読み進めてしまうところやよく読んでもいまいち理解できないところがあったけど、勉強会を通じてコミュニケーションをすることで、いまいち理解できなかったところがクリアになり、ようやく機械学習のとっかかりが分かった気がした。 「仕事ではじめる機械学習」の「映画の推薦システムをつくる」を実践してみる 「仕事ではじめる機械学習」の映画の推薦システムをつくるを実践してみる 本書のソースコートは以下にあがっている。本記事はchap07が対象。 事前準備 サンプルコードを実行できるように、あらかじめ以下をインストールしておく。Pythonは3系を使う想定。 参考:Mac環境へのPython3系インストール jupyter notebook が用意されているから以下からソースの実行をすることができる ホワイトボードを使って解説してもらう また、当日出てきたよく使うワードや考え方を後日まとめて頂けたので、こちらと本を合わせてもう一度見直す。 Topics in aipy the first from Tsugunori Okuda 懇親会 勉強会後は表参道とは思えないビール210円、チューハイ130円という破格の居酒屋である中西で懇親会をした。こんな流れで今後も開催を続けて少しずつレベルをあげていってアウトプットできるところまでもっていきたい。

PyCon APAC 2017 in マレーシア 参加レポ

PyCon APAC 2017に参加してきたのでその参加レポ。自分にとっては初めての海外カンファレンスだったのでとても有意義な旅行になった。 PyCon APACって? 毎年開催されているアジア太平洋のPythonカンファレンスで去年は韓国だったが、今年はマレーシアのクアラルンプールで開催された。 PyCon APAC 2017 クアラルンプールへ 前日の朝に到着 クアラルンプール着いた (@ Kuala Lumpur International Airport 2 (KLIA2) – @my_airports) https://t.co/JIqLhzUfdR pic.twitter.com/upaHiQ6QPT — たいさ (@taisa831) 2017年8月24日 とりあえずチェックインまで軽く街を散策 夜 PyConAPACに参加している日本メンバーで食事会をした。マレーシアはご飯おいしいしツインタワーすごいしでとてもよいところだった。 PyCon APAC 2017 in マレーシア 前夜祭楽しかった。飯うまだしツインタワー凄いしいいところ。 たいささん(@taisa831)がシェアした投稿 – 2017 8月 25 8:02午後 PDT カンファレンス初日 キーノート スピーカーはLuis Miguel Sanchez キーノート始まった #pyconapac pic.twitter.com/eeselKrgZB — たいさ (@taisa831) 2017年8月26日 Tea Break 30分のTea Break。Tea Breakといいつつ食事も提供された。 ティーブレイク pic.twitter.com/QylXOliBqZ — たいさ (@taisa831) 2017年8月26日 Understanding The World With The Help Of Python Understanding The World With The Help Of Python pic.twitter.com/68QWCaCREZ — たいさ (@taisa831) 2017年8月26日 Data Mining of News (Intermediate) Data Mining of News pic.twitter.com/2I6CdLHgjs — たいさ (@taisa831) …