2021年を振り返って
あけましておめでとうそれでは2021年の振り返りです。とうとう1年に1回しかブログかかなくなってしまった。書かないってことはインプットが少ないと言うことなのでこれはよくない。
続けること
- Apex Legendsダイア行きたいと言っていたが、プラチナまではいけた。500時間単位で投入しないとうまくはならなかったので今後も続けるかは少し考えたい。
- イラスト描く。なんと1年で1枚しか描いてない。もっとかこ?
- ピアノ演奏動画を上げたい話。あまり練習しないので同じ曲を1年練習してもいまだ仕上がっていない。大変よろしくない。
- コーヒー豆を挽いていれるコーヒーはおいしい。それに気晴らしとして大変優れている。
問題だったこと
- イラスト・漫画を描けていない。なんと1年で1枚。
- モバイルアプリの勉強したい気持ちはある。気持ちだけで結局やっていない。モバイルアプリは自分で使いたいものを作って使うまでが全部一直線なのでWebサービスよりもやりやすいのでやっていきたい。
- 3Dってみたい、動画配信やってみたい話は、やってみたいけど別にいいかなということになって落ち着いてしまった。じゃあこれはいいか。
- コンピューターサイエンスを勉強してない話。これかれこれ10年以上前からずっと言っていてコンピューターサイエンス勉強したいワナビーみたいになってるのでそろそろ一旦諦めてもいいかという気がしている。これがわからなければ明日しにますみたいなことになったら勉強しようと思う。
挑戦すること
- Androidやろうとしてたけどやってなかった。モバイルアプリは自分で使いたいものを作って使うまでが全部一直線なのでWebサービスよりもやりやすいのでやっていきたい。
- もっとやらないといけないというのは、面白さのうち消費する面白さだけになっていてしまい、動く面白さ作る面白さをやれていないからだ。どんな面白いも1つだけでは結局飽きる。
- コミケが復活したので、通常通りになったら復帰を考えてもいいと思った。あれは人の作品を見て大いにモチベーションを刺激される。何度も行くのはそのためだと言っていい。
- とにかくあらゆるアウトプットが減ってしまいApex Legendsをプレイするだけの奴隷になっていた。アウトプットが減るのはインプットできていないからというのは経験上わかっていて、たとえば面白そうなガジェット買ったり映画を見たり本を読んだりそういうことをもっとやらないといけない。
2020年を振り返って
振り返っても結局意味ないのでKPTで記載することにします、と去年の記事に書いてあったのでそうする。
続けること
- モバイルアプリの勉強。多分去年やれてなかった気がするのでちゃんと検め直したい。Android。
- 漫画書く。去年はコミケがなくなったため、漫画を1ページも描かずに終わってしまった。漫画描きたい。
- イラスト書く。イラストと漫画は別物なので考え方も分ける必要があるので。
- 新しいデバイス買ったりするやつ。こういうのやんないと感性が鈍るなって今では思う
問題だったこと
- 漫画を書いていない。人は締め切りがないと作業をしないということがわかってしまった。ただ正直伝染病が収まるまではイベントに参加する気はない。もっと気軽なやつを書いていこうかと思っている。
- モバイルアプリの勉強。結局できてなかったのでする。
- 実装できる企画屋っぽいことをしてるので、テック情報を意識的に拾いに行くようにしようと思う。やっと仕事の話。最近twitter眺めるだけでテック系のサイトとか見に行かなくなってる。
- ソフトウェア実装力、もともとないのに日に日に下がってる気がする。どうしたらいいだろう?何を勉強すればいいだろう?情報求む。
- コンピューターサイエンスをちゃんと勉強する、まえまえからずっとやりたい言ってたんだけど結局やってない。これやったからといって私が仕事できるようになるビジョンが見えなかったのでモチベ沸かない。もっと他の部分に問題がある気がするけどわからない。多分やんないと思う。アルゴリズムとかはやってもいいかも
挑戦すること
- 最近3D系に興味あるのでそういうのやりたい。イラストやってるからZbrushとかが相性いいかなと思っていたりする。本だけ買ったけど結局やらなかったので
- 動画配信とかしたい。リモワでおうちの機材が充実し始めているのでそれを生かしてなんかやりたい。ゲーム実況とかかなぁ?
- ピアノ演奏動画上げたい。むかーしからピアノやってたんだけど最近また習い直してるのね。せっかくだから記録残したい
- 湊あくあさんの影響でAPEX始めたんだけど、ランクダイアまで行きたい。文字通りのまま。
- 映画とかいろんなコンテンツみたい。イラストも漫画がそうなんだけど、これ描きたいわ!っていうモチベーションは、いろんな作品のインプットがないと産まれないんだよね。なので意識的にいろんなものに触れたいなと思った。一通りの話をまとめるテクニックは映画から学べるので映画をたくさん見るのがおすすめ、らしい。読者ハ読ムナ(笑) ~いかにして藤田和日郎の新人アシスタントが漫画家になったか~ にそういう事が書いてある。
- テック情報さえちゃんと追わなくなりつつあるのでやるって話に加えて、本を読みたい。通勤時間で買った本を乱読してたけど、通勤しなくなって本マジで読まなくなってしまった。やばい。
1兆ドルコーチを読んだ
Apple、Googleなどのシリコンバレー企業の幹部のコーチングを担当していたビル・キャンベル。彼が関わった企業の時価総額は2兆ドルを超えると言われている。そんな人がどんなふうにコーチングをしていたかと、彼の教え子たちが綴った本。
コーチの教え
- 思いやり
- 素早く動く
- やっちまえ
人がすべて
- マネージャーは「支援」「敬意」「信頼」を通じて、部下が仕事で実力を発揮し成長できるように手を貸すこと
- 旅の報告から始める。(社会情動的コミュニケーション
- 議論するべきトップ5はなにか?
- マネージャーの仕事は決定をくだすこと。
- 天才とうまく付き合え。寛容であれ、だが仲間の成果を損なうならばその限りでない
- 高い報酬は愛と敬意の証
- 去るものに敬意を払え
- 資料は必ず先に共有しろ
心理的安全性
- コーチされるのに必要な資質「正直さ」「謙虚さ」「努力をいとわない姿勢」「学習する意欲」
- 信頼とはきれいごとではない。それは「約そこを守ること」「誠意」「率直さ」「思慮深さ」のことだ。
- フィードバックは正直に率直に早いうちに伝える。ネガティブなフィードバックは人目につかないところで与える。
- やるべきことを指示せず、自分でたどり着けるように導く。
- 人はありのままの人格が表出しているときに最も良い仕事をする
チームファースト
- 問題そのものよりもチームに取り組む。誰があたっているか、適切なチームが配置されているか、成功するために必要なものを揃えたか。
- 正しいプレイヤーを見つけること。誠実であり、グリットをもち、共感できて、チームに貢献するマインドを持っている。
- ペアで仕事に当てる。
- データやプロセスで解決できない最大の問題に真っ先に切り込む。
- 正しく勝利することを目指す。不誠実さ、非協力、非献身ではいけない。
- 敗北しているときこそ、大義に向き合い先陣に立つ。献身的な誠実さで判断をくだせ。
- 人々の間の小さなすきま、理解やコミュニケーションのギャップを埋めていく
ビジネスに愛を持ち込む
- 優しい組織にする。プライベートな会話は人に関心を持ち気にかけているということでもある。
- コミュニティを作れ。生まれた絆がチームを強くする。
- 人を助ける。時間や人脈を他人のために使う。
成功を測る尺度
- 自分のために働いてくれた人、自分が助けた人のうちすぐれたせいかのこのこした人は何人いたか、それが成功を測るものさしとなる
2019年を振り返って
前年度立てた目標
- モバイルアプリ勉強する
- これは単純に興味あるので
- 新しい技術をいち早く試す
- 既存の技術を深められないこととのトレードオフ的な関係
- コードリーディング
- Web関連のコードを読んだ絶対量が少ない問題
- 技術プラスのスキルの模索
- 一番地続きはプロダクト方面。仕様や設計には適正がなかったので、運用とか改善の方面
- 漫画を書く
- 例大祭。それと夏か冬のどちらか
目標を達したか
- モバイルアプリ勉強する
- 実は業務でAndroidアプリに関わったので復習がてら自分でアプリの雛形を書いたりしてた
- コードリーディング
- 勉強のためのコードリーディングみたいなことはやっていない。Web関係のソースをプライベートでは見ていない
- 新しい技術をいち早く試す
- これふわっとしすぎて意味なかったかも。一応プロダクト方面の技能を身に着けようと画策しはじめた
- 漫画を書く
所感
こいつ漫画しか描いてなくない?(1年ぶり3度目
実はもう7冊も書いたことが判明していて私漫画書くの好きだったのか!って自分で気づきを得た。そういう話をするところではないはずなのだが?
あとこれ振り返れてないしこれからはKPT方式てやっていきたいと思った、来年はそれで書いてみる。いや形式はともかく内容的には記してみる。
続けること。
モバイルアプリの勉強、勉強というよりも自分がほしいアプリを作ることにフットワーク軽くなっていくということをやりたい。漫画書く、これは続ける。漫画書きたい。漫画楽しい。むしろ漫画で食いたい。いや絵が下手なので無理だが…。
問題だったこと。
勉強のためのコードリーディングとかは全然手につかないやる気も起きない意味がなかった。自分のためのアプリを作るんだみたいな取り組みの中でわからないことが起きた場合においてのみ、私は学習することができていたと思う。勉強自体が楽しいとか知ることが楽しいとかはまったくなくて、ただやりたいことをやるためだけに解いていく。仕事に備えて学ぶみたいなことも正直全然できないのもこの辺の性根に問題がありそうだと感じている。
ならば仕事とかは一端忘れて、何か作りたいものをおいてそこから学び取っていくしかないのではないだろうか、それが仕事の領域と重なったらラッキーくらいの扱い。
取り組んでいくこと。
そうはいっても仕事方面でもう少し成果出したい、そうしないとお給料が上がらないので。業務ではプログラミングがわかるプロダクトの人みたいな方向を模索させてもらいつつありこれはこれとして大変ありがたいので、何かしらを掴んでしまいたい。もうこの方向でだめなら全部すっぱりやめてアルバイトしながらイラストレーターでも目指したほうがマシなんじゃないかと思う。あるいはコボラーに戻るとか。
それはそれとしてドキュメントを読むときや、カンファレンスの動画を見るときに英語があまりよくわからないという現実的な問題がありこれをなんとかしたいと思っている。英語……学習……的な?
あと一応フロントの何かしらもさわりたい。これは多分趣味、だって自分のおもちゃのUIを自分で作れたら楽しいでしょ?弊社はフロントがAngularなので、Electron+Angularで自分用のUIがあるおもちゃを作ってみるとかその程度でもいいと思ってる。
あともっと本を読みたい。ここ何年か技術書で勉強しなければみたいに変に気張っていて多分読書自体が嫌になりつつ合ったと思う。私そもそもそういうんじゃないはず
何でもやれるようになりないなと思っていたはいいが結局何もできるようにならなかった人間は生きるのが難しい。昨今のIT業界は、成長することを強要されているみたいな雰囲気あると思っているのだが、そらまあ成長しなければ周りは勝手に伸びていっておいていかれるのはそれはそう。とはいえこの業界には普通に生きていくという概念が存在しないようで非常に生きづらく感じる。皆息苦しくないのだろうか?
今回から来年の目標という項目はたてないので、TRYの項目からKEEPを増やすようにできるようにしていきたい。
RecycleViewでDataBindingとLiveDataを使う
これ今はもうスタートラインレベルなのに毎回用意するのが大変なので、そろそろ一気に自動生成してくれるようにしてほしい。
これは何度も書いているので未来の私のために残す。見ながら書いて足りないものに気づいたら直す感じで
Android StudioでFragment(List)を選んで生成して使用する。
MemoとMemoItemというビューの関係を関係を作るのがこの記事がゴール。使用したkotlinは 1.3.31
、 minSdkVersionは 21


gradleでdataBindingを有効にする
android { dataBinding { enabled = true } }
まずデータクラスを定義。リストの1項目を表す。Memo.kt
data class MemoItem( val id: String, val message: String ) : Serializable
ビューモデルを定義。MemoListViewModel.kt
class MemoListViewModel : ViewModel() { val items = MutableLiveData<List<MemoItem>>() fun loadItems() { val items = arrayListOf( MemoItem("1", "aaa"), MemoItem("2", "bbb"), MemoItem("3", "ccc"), MemoItem("4", "ddd"), MemoItem("5", "eee") ) this.items.value = items } }
リサイクルビューのXMLをLayoutタグでくくり、variableを定義。fragment_memo_list.xmlとする
<?xml version="1.0" encoding="utf-8"?> <layout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools"> <data> <variable name="viewModel"type="net.arvelt.memoapp.ui.memolist.MemoListViewModel" /> </data> <androidx.recyclerview.widget.RecyclerView android:id="@+id/list" android:name="net.arvelt.memoapp.MemoListFragment" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginLeft="16dp" android:layout_marginRight="16dp" app:layoutManager="LinearLayoutManager" tools:context=".ui.memolist.MemoListFragment" tools:listitem="@layout/fragment_memo_list_item" /> </layout>
リサイクルビューの1行分の項目のXMLをLayoutタグでくくり、variableを定義。fragment_memo_list_itemとする
<?xml version="1.0" encoding="utf-8"?> <layout xmlns:android="http://schemas.android.com/apk/res/android"> <data> <variable name="viewModel" type="net.arvelt.memoapp.model.MemoItem" /> </data> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal"> <TextView android:id="@+id/itemId" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="@dimen/text_margin" android:text="@{viewModel.id}" android:textAppearance="?attr/textAppearanceListItem" /> <TextView android:id="@+id/content" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="@dimen/text_margin" android:text="@{viewModel.message}" android:textAppearance="?attr/textAppearanceListItem" /> </LinearLayout> </layout>
Bindingクラスを生成させるために一度コンパイルする。アダプタークラスをデータバインディングを使用した形に置き換える。MyMemoRecyclerViewAdapter.ktとする
class MyMemoRecyclerViewAdapter( private var mValues: List<MemoItem>, private val mListener: OnListFragmentInteractionListener? ) : RecyclerView.Adapter<MyMemoRecyclerViewAdapter.ViewHolder>() { private val mOnClickListener: View.OnClickListener init { mOnClickListener = View.OnClickListener { v -> val item = v.tag as MemoItem mListener?.onListFragmentInteraction(item) } } override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { val binding: FragmentMemoListItemBinding = DataBindingUtil.inflate( LayoutInflater.from(parent.context), R.layout.fragment_memo_list_item, parent, false ) return ViewHolder(binding) } override fun onBindViewHolder(holder: ViewHolder, position: Int) { val item = mValues[position] holder.binding.viewModel = MemoItem(item.id, item.message) with(holder.binding.root) { tag = item setOnClickListener(mOnClickListener) } } fun setData(items: List<MemoItem>) { this.mValues = items } override fun getItemCount(): Int = mValues.size inner class ViewHolder(val binding: FragmentMemoListItemBinding) : RecyclerView.ViewHolder(binding.root) }
MemoListFragmentのOnCreateViewをDataBidingを使用した形に置き換える。
アダプターの登録をして、viewModelを監視する。
初期値がonResumeでロードされるようにする。
override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { val binding: FragmentMemoListBinding = DataBindingUtil.inflate( inflater, R.layout.fragment_memo_list, container, false ) binding.viewModel = ViewModelProviders.of(this).get(MemoListViewModel::class.java) binding.list.adapter = MyMemoRecyclerViewAdapter(arrayListOf(), listener) binding.viewModel!!.items.observe(this, Observer { val adapter = binding.list.adapter as MyMemoRecyclerViewAdapter? adapter?.setData(it) }) this.binding = binding return binding.root } override fun onResume() { super.onResume() this.binding.viewModel!!.loadItems() }
アダプターでクリック時の処理をしているのでActivityでクリックされたときのMemoItemが取得できる。
override fun onListFragmentInteraction(item: MemoItem?) { // 遷移など }
Pyconjp 2019
PyconJP 2019いってました。ここはチャラい浮ついた感じがなくて良いイベントだと思います。資料とトークの動画がちゃんと公開されてるので私のメモは読まなくていいです。( https://pycon.jp/2019/ からたどれる
良かった話のメモとか。
・Supportingpython3 in large scale project https://www.slideshare.net/ssuser2cbb78/supportingpython3-in-large-scale-project-172491766
・どうやってpythonコードを見つけるか? どのインタプリタに対応していたか? コードの意図はどんなだったか?
・ちゃんと計画を建てる
・概念実証
・チームを組む
・ガイドラインを建てる
・タスクを調べる
・タスクの大きさを見積もる
・粛々と取り組む
・ビルドシステム/デプロイスクリプトは? python3がサポートされないパッケージは?
・2と3の一番の違いは、文字列の扱い
・Pythonコミュニティが公開してるアプローチを試す。(https://docs.python.org/3/howto/pyporting.html#text-versus-binary-data
・Modern development environments for Pythonistas https://www.youtube.com/watch?v=d3cj4f63u-A
・環境はpythonだけでもない、dockerを使おう
・本番環境と同じ環境にするためにdockerを使おう
・pip-compileでバージョンをピンしよう
・Dependabot/Pyupを使ってアップグレードしよう
・Lintはblackを使え
・自分の環境がそのままリリースできるくらいにする
・Pythonでライブをしよう -FoxDotを使った新時代のPython活用法 https://www.youtube.com/watch?v=lCQWLAJf6xQ&feature=youtu.be
・https://foxdot.org/
・Getting Started with Asynchronous Python Web Development https://youtu.be/3Me7IU-kjq0?t=1040
・ボトルネックはいつだってDB、NW、IO
・aiohttpを使う
・async/awaitで非同期処理をかける
・チームメイトのためにdocstringを書こう https://www.youtube.com/watch?v=2A3gRyT54Wc
・docstringを書くのがよい
・スタイルは3つ。
・ReStructuredText Style
・NumPy Style
・Google Style
・PyCharmは設定をすると保管してくれる。
・VSCodeはautoDocstring
・DocString書いてくれない問題。
・文化を作る (edited)
Slack Dev Meetup 1 のメモ
これ行ってました。 Slack App、ちょろっと作って自分のところのワークスペースに入れるだけっていうのは直ぐにできるので偉いと思います。 その気になればそのまま公開できるのも偉いと思います。でもbotとappの関係とかよくわかりづらいのは良くないと思います
Boltの紹介
- 特徴
- SlackとHeroku
- SlackとAWS Lambda
- Serverless FWを使うと楽に行ける
- NavitaimeのBlock Kit
カオナビをApp directoryを出す話
- 最初は通知を送ろうとしていた
- Slackが業務のHubであり、その中の1つとして使われるいう発想に転換
- 開発
- Oauth認証
- メンバー検索
- メッセージ送信
- appd に申請して2週間くらいかかる{半日もあった
- 5ヶ月想定したが、6.5ヶ月
- マネ1、エンジニア2,デザイン1、QA1
- 審査後即公開ではなく、Publishボタンがある
- 使ってくれる人はたくさん使うが、全く使わない人は全然使わない