みんからきりまで

きりみんです。

きりみんちゃんカメラをつくりました。

こんにちは。きりみんちゃんです。

このエントリはVTuber Tech#1 アドベントカレンダー4日目の代打です。 VTuberの配信システムに関するネタじゃなくてすみません。 でも代打なので許してください。

qiita.com

VTuberの写真が取れるアプリをつくりました

さて、きりみんちゃんカメラというAndroidアプリをつくりました。 ひさしぶりの趣味アプリです。

play.google.com

きりみんちゃん((バーチャル幼女プログラマー(VTuber)))のお写真が撮れます。

https://i.gyazo.com/bcd27483f5164cba4254e62e4f36414b.gif

こんな感じの写真を生成することができます。

https://i.gyazo.com/327a5439a67fbcae10e8f575856ecd9d.jpg

https://i.gyazo.com/1e894cd85a41793d62f1577515a04e2e.jpg

https://i.gyazo.com/bf1d7d21c2adadc18c64cb4a4ef5f4d7.jpg

実装について

小さいアプリを愚直に作ったのでそれほど実装について語ることはありませんが、画像処理を久しぶりにやってちょっとがんばりました。

実装方法としては、取得した写真の画像ときりみんちゃん(フレーム)の画像をそれぞれUI上ではImageViewで表示し、保存時にImageViewからBitmap化し、Canvasを使い2つのBitmapを合成しています。

ImageViewから取得した素のBitmapをそのまま合成してもサイズがレイアウト上での表示サイズと異なるため正しく合成できません。 そこでレイアウト上での表示サイズを計算しリサイズしてあげることで、ユーザーが見た通りの画像を出力することができます。

だいたいこんな感じの処理です。

        val baseBitmap = Bitmap.createBitmap(photoImageView.width, photoImageView.height, Bitmap.Config.ARGB_8888)
        val canvas = Canvas(baseBitmap)

        val photoBitmap = (photoImageView.drawable as BitmapDrawable).bitmap
        val photoSize = computeBitmapSizeFromDynamicImageLayer(photoImageView)
        val scaledPhotoBitmap = Bitmap.createScaledBitmap(photoBitmap, photoSize.x, photoSize.y, true)
        canvas.drawBitmap(
            scaledPhotoBitmap,
            computeCenter(baseBitmap.width, scaledPhotoBitmap.width),
            computeCenter(baseBitmap.height, scaledPhotoBitmap.height),
            null
        )

        if (frameImageVIew.drawable != null) {
            val frameBitmap = (frameImageVIew.drawable as BitmapDrawable).bitmap
            val frameSize = computeBitmapSizeFromDynamicImageLayer(frameImageVIew)
            val scaledFrameBitmap = Bitmap.createScaledBitmap(frameBitmap, frameSize.x, frameSize.y, true)
            scaledFrameBitmap.density = photoBitmap.density
            canvas.drawBitmap(scaledFrameBitmap, frameImageVIew.left.toFloat(), frameImageVIew.top.toFloat(), null)
        }

いろいろとハマりどころがあったのですが、その知見はまたQiitaなどに書こうかなと思います。

ViewやCanvasの座標計算はむずかしいですがやりはじめると結構たのしいです。

リンクなど

このアプリはGitHubソースコードを公開しているので、Androidプロジェクトの構成が多少読める人(リソースの位置など)であれば、フォークして自分のオリジナルカメラアプリを作ることが出来ると思います。きりみんちゃんは権利を主張しませんが、きりみんちゃんに言及してくれたらうれしいです。 github.com

きりみんちゃんはVTuberとして技術系の動画や雑談配信、ゲーム配信などを行っています。興味がありましたらぜひ見てみてください。

www.youtube.com

twitter.com

簡単と聞いたbuild.gradleのkts化でハマって一日溶かした

Qiitaに書くほどちゃんとした知見に出来なかったのでこっちに書く。

仕事でやってるプロジェクトがgradle.kts化されてて、もうプロダクションレディなのかーと思って手元でも試してみようとしたらやたらハマった。

build.gradle.ktsへの書き換えとハマリポイント part 1 - Qiita

こちらのエントリなどを見ると以前はsettings.gradleにpluginManagementを書いたりする必要があったみたいだけど、最近の情報を見ると単純にbuild.gradleファイルをktsにリプレースするだけで完了するっぽい事が書かれていた。

Migrating Android App to Gradle Kotlin DSL 1.0 – ProAndroidDev

Multi-flavoured Kotlin DSL build script for Android App

そこで実際に手元のプロジェクトで試してみたら、どうもうまくいかなかった。
app/build.gradle.ktsでpluginsが読み込まれずにandroid {}配下などがすべてエラーになったり、プロジェクトを読み込み直したらそもそもgradleプロジェクトとして読み込まれなくなったり...。

いろいろ試行錯誤して原因を探ったけど分からなかったので、とりあえずGitHubからgradle/kotlin-dslをcloneしてきてその中にあるhello-androidという最小サンプルっぽいものをAndroid Studioで開いてみたら、これもgradleプロジェクトとして認識されなくてエラーになってしまった。

kotlin-dsl/samples/hello-android at master · gradle/kotlin-dsl · GitHub

これは手元の環境になにか問題があるに違いないと思い色々試行錯誤した結果、マシンに古いバージョンのGradleがインストールされていることに気が付き、これがgradlewの代わりに読み込まれるなどの悪さをしているかもしれないと思い、アンインストールしてみた。

そして.gradleと.ideaを削除しプロジェクトを開き直すと、上記のサンプルプロジェクトは無事に読み込みに成功しビルドすることが出来るようになった。

これで一件落着!かと思い、手元の自分のプロジェクトも読み込もうとしたら、やはりgradleプロジェクトとして認識されずエラーが出てしまった。

https://i.gyazo.com/dbcea73bcdd40d421df5fb6c63c25ecb.png

そして原因が全然分からないまま何度も何度も.ideaや.gradleを削除してプロジェクトを開き直したりしていたら、突如読み込みに成功し、ビルドできるようになった。

結局のところ何が原因だったのかはよく分からず、これといった知見を残すことも出来ずに大量の時間を溶かして終わったのだった...。

という話を悔しいので書きなぐった次第です。
何かの参考になるかもしれないので、リプレースした時のコミットログを置いておきますね。

replace gradle files to kts · kirimin/WhoOnGitHub@e3e7154 · GitHub

1ヶ月休暇ふりかえり(敗北)

今日で約1ヶ月間の休暇が終わる。
あっという間だ。

ありがちな話だけど、休暇に入る前はもっと色々な事を頑張ろうと張り切っていたが、実際にはあまり何も出来なかった。
とはいえ全く何もしなかったわけではないので振り返ろうと思う。

やったこと

英語学習

iKnow!の日課は一応こなした。
あと英語の小説をKindleで読み始めたんだけど、あまりモチベがあがらず積んでいる。
正直英語に関しては「もっとやらないと」という気持ちがあるもののモチベがなかなか上がらなくて困っている。
やっぱり仕事などで必要に迫られないとモチベが上がらないというのはあるのかもしれない。
英語が必要な状況に追い込まれたい気持ちがある。

イラスト

休暇中主に何をしていたかというと、なんかやたらお絵かき欲が高まってめちゃくちゃ絵を描きまくってた。
それはそれで良いことなんだけど、本来この休暇にやりたかったこととは若干ズレているので複雑な気持ち。
絵は少し上達した気がする。

プログラミング関係

「情熱プログラマー」再読

読みました。

「ヤフーの1on1」読了

読みました。

「カード決済業務のすべて」読了

読みました。

技術書典の積本消化

技術書典で買って読んでなかった本が結構あったので、読んだ。

AWSで学ぶネットワーク入門」写経

ネットワークとインフラに少しでも詳しくなりたかったので読んだ。
結果としてはなんとなくAWSの雰囲気が掴めたのと、ネットワーク関係の知識を少し補填出来た感じ。
あまり身になっているのかは分からない。

Nem Address Scanner(Androidアプリ)開発

暗号通貨NEMのアドレスをスキャンして残高などの情報を取得する簡単なアプリを作った。
MVVMとかConstraintLayoutとか少し試せたのでまぁよかった。
アプリ自体はリリースするほどのものでも無いのでお蔵入り。

Reactでオセロゲーム作った。

Reactの仮想DOM操作を使ってオセロゲームを作ってみた。
AIとかは全然がんばってないけど、ゲームは作るの楽しくてよかった。 kirimin-chan.site

人生fmフロントページ作った

作ったというほどのものでもないけど。

jinseifm.life

LGTM hatobaというWebサービスを作ってる(途中)

LGTM.inライクなサービスをVue.jsとFirebaseを使って作ってる。
かなりダラダラ作ってるのでちゃんとリリースする日が来るかは分からない。

lgtm-hatoba

その他

上海に4泊5日で行ってきた

詳細は別エントリで。

micro-kirimin.hatenablog.com

ジムに会員登録して解約した

プールを日課にしようと思って近くのジムに会員登録したけど思った以上に体験が悪くてあまり通わなかった。
もう解約した。

由比ヶ浜で泳いだ

海の日にひとりで鎌倉に遊びに行って由比ヶ浜で海水浴してきた。
ぼくくらいになるとひとりで海水浴に行くのだ。

最近の悩み

以前も断片的に書いたりしたが、自分は結局なにも出来ないのではないだろうかという気持ちが最近拭えない。

micro-kirimin.hatenablog.com

micro-kirimin.hatenablog.com

理由は色々あって、たとえばVTuber関連の縁などで今までとは違ったタイプの人たちや自分より若い人たちとたくさん知り合いになった事がある。
その人達をみていると、とても高度な事をやっているように見えるし、面白い世の中にインパクトを与えるような技術を持っているように見える。

一方自分はどうだろうか。
DroidKaigi登壇などでAndroidエンジニア界隈でようやく一人前として認めてもらえたかもしれないなどと考えていたが、結局できることは特に技術的に高度な部分のない普通のモバイルアプリを安定して開発するという事だけだ。
登壇でも話した設計というのも、実際に何か世の中にインパクトを与えられるようなものでもない。

年齢のこともあり、焦る気持ちがどんどん湧いてくる。
自分が今後どんなスキルを学んで、どんなキャリアを歩んでいけば自分の思い描く理想のエンジニアに近づけるのかがよく分からなくなってしまっている。
そもそも学んだことも時とともにどんどん忘れていってしまっていて無意味なのではないかという恐怖もある。

そんな悩みもあり、休暇中は気持ちが安定せず、前向きに目の前のことに取り組むことがあまりできなかった。
また新しい仕事が始まるので、そしたら見えてくるものもあると思うので、気持ちを引き締めてがんばっていきたい。

イラストはすぐには上手くならないけどジワジワとは上手くなる。あるいは正しく学習する事の価値

タイトルの元ネタはこの本。

絵はすぐに上手くならない

絵はすぐに上手くならない

ずっと絵が下手だった

さて、ぼくは女の子のイラストを描くのが趣味だ。
いわゆるオタク絵というやつ。

しかし残念ながらぼくには生まれ持った絵のセンスが(そんなものがあるとしたら)全くない。
幼い頃から絵を描くのは好きだったけど、とにかく立体物や人物が全くかけなくて、いつも真横から見た記号的な家や木や動物の絵をたくさん描いている子供だった。

ぼくがオタク絵を描き始めたのは中学生の時で、その頃から一貫して女の子のイラストばかりを描き続けている。

その頃の絵はさすがに残っていないが、とにかくいくら描いてもあまり上手くならなかった。
描いたり描かなかったりとムラがありはしたが、20歳くらいになってもまだ「ちょっと上手な小学生」にもとても敵わないという感じだった。
何よりこの時点で5,6年くらいはイラストを描いているのに、まったく立体を意識出来ていなかったし、等身すら意識していなかったのだ。

この頃にはイラストが上達することは生涯ないのだろうな、と半ばあきらめていた。

正しく学習するということを知る

ところでその後ぼくはエンジニアになった。
エンジニアという職業は学習し続けることがとても大事な仕事だ。

そしてぼくはエンジニアとしての活動を通して、物事を正しく学習する、という事を学んだ。
例えば英語の学習をしたように。

kirimin.hatenablog.com

そして、イラストももっとちゃんと体系立てて学習すれば上達するのでは?と思った。
この頃から改めてイラストの教本を買ったり、ネットのHow Toを読んだりして、きちんと知識を付けて練習をするようになった。

するとイラストもプログラミングなどと同じく、山のようにあるたくさんのTIPS、テクニックの積み重ねであるという事がわかってきた。
おそらくセンスがある人というのは、そういうテクニックを教わらなくてもどんどん自分で気付いていける人なのだろうと思う。

イラストの世界でよく言われる「知識なんていらない、とにかく上手くなるまでたくさん描き続けろ」というマッチョなアドバイスも、おそらくその人はそれである意味車輪の再発明的にたくさんのテクニックを自分で発見していった故なのだろう。

しかし、きっと萌えイラストにも知識の高速道路(初学者が最短で学習するための道筋)は作れるはずで、がむしゃらに描き続けて上手くならなかったからといって諦めてしまう必要はないはずだ。

ぼくのイラスト上達遍歴

ここでは恥ずかしさを飲み込んで、ぼくのイラストがどのように変化していったのかを晒していこうと思う。
予め予想されるツッコミに答えておくと

最初から上手いじゃん:この時点で6,7年くらい描いてるんだよ...
今でも下手くそじゃん:そうかもしれない。でも多分もっと上達する

さて、それでは行ってみよう。

https://i.gyazo.com/thumb/1000/76cb2f7e9f83f52e75af97388022806b-png.jpg

これは2010年頃、20歳くらいの時だ。
この頃はペンタブ持ってなかったし色塗りも出来なかったのでノートにひたすら描いていた。
ものすごく絵柄が安定しなかったし、ほぼ顔しか描けなかった。

https://i.gyazo.com/8c18b716b5e5aa8767b6f7d280bbcf71.png

これは2014年ごろ、ペンタブを買ってちゃんと学習をしようと思い立った最初の頃だ。
どんどん行こう。

https://i.gyazo.com/0141b732bcd45046d4d3e62f63e5ce1e.png

これは2015年ごろ、1年くらい(といってもそんなに頻度は高くない)学習しながら練習した頃。少し上達が見られる。

gyazo.com

これは2016年ごろ、この頃に一番上達したと思う。ノウハウを解説した動画を見たり、写真やイラストを模写する練習をしたりちゃんとやっていた。

https://i.gyazo.com/thumb/1000/74ae1fc0afab35d0458129a2a4d9fc52-png.jpg

これは2017年ごろ、かなり最近だ。だいぶ今の絵柄に近い。この頃からあまり絵を描く頻度が高くなくなってしまったので、実際には1年で数枚しか描いていない。

https://i.gyazo.com/750ce78e3107e0f8807ba68f7da1edfd.png

そしてこれが2018年、今のぼくのイラストだ。まだまだこんなエントリを書いて偉そうな事が言えるレベルでは無いかもしれない。しかし昔に比べたら遥かに上達しているのは確かだと思う。

実用レベルにはなった

最近はVTuber活動をやっているんだけど、そのイラストは自分で描いたものだし、それなりに可愛いとも言ってもらえる。
ようやくイラストが実用的に趣味に使えるレベルになってきたのだと思う。
そんな日が来るとは昔は思っていなかったが、体系立てて学ぶ事でゆっくりではあるがここまで上達することができた。

どうやって学習したの

いろいろやった。

まず本をたくさん買った。
イラストの上達に教本なんていらないという思想の人も多くいるのは知っているが、そう言っていても始まらないので、お金はケチらず色々な本を買った。

いくつかオススメの本を紹介したい。

【マンガ】ヒロマサのお絵描き講座<体の描き方編> (廣済堂マンガ工房)

【マンガ】ヒロマサのお絵描き講座<体の描き方編> (廣済堂マンガ工房)

初歩を学びたい人にオススメのシリーズ。描いてあるのは当たり前のことばかりだが、教わらなければ分からないものである。

アニメーターが教える線画デザインの教科書

アニメーターが教える線画デザインの教科書

立体を意識する上での細かいノウハウがたくさん載っている。

アニメ私塾という取り組みをやられている方の本。
Youtubeにも動画シリーズがあるが、とてもためになる。

新ポーズカタログ1女性の基本ポーズ編

新ポーズカタログ1女性の基本ポーズ編

ひたすら模写する用。

動画

www.youtube.com

室井さんという方がYoutubeでイラストのノウハウや考え方を解説している動画がある。
これらが本当にためになるのでものすごくオススメ。

pixivの「講座」タグ

pixivの講座タグを人気順検索するのもオススメ。
イラスト界隈ではあまり知見を共有する文化はエンジニアほどはないが、pixivでは講座タグを付けて自分のちょっとしたテクニックを紹介する文化があり、とてもためになる。
たくさんみて自分の脳内でマージしよう。

何が言いたいの

イラストに限らず、大抵の事は「正しく学習する」ことでそこそこのレベルには到達出来るのではないかと思っていて、だから物事を正しく学習する事の価値を知ってもらいたいと思ったのと、イラストをずっと描いててもまったく上手くならないから自分には無理だと思っている人も、学習の仕方次第ではまだ上手くなる余地があるかもしれない、という事を伝えたかった。

以上になります。

退職しました

6月末でAnyPay株式会社を退職しました。
AnyPayには正社員として1年、業務委託時代も入れると1年半お世話になりました。

なんでやめるの

簡単に言えば音楽性の違いみたいな感じです。

なにをやってたの

AnyPayではAndroidエンジニアとして参加し、主にpaymoのアプリ開発をやっていました。

去年の2月に初めて出社した当時はまだAnyPayはとても小さな会社で、エンジニアの社員はCTOと社員代表の2人しかおらず、ぼくは初めてのフルタイムモバイルエンジニアでした。
そこからリモートや参加してくれている協力会社の方などと協力しながら、モバイルアプリの内製体制を少しずつ作っていきました。

アプリの設計見直し、テストコード、Kotlin導入

当時リリース直後でコードが若干無秩序だったpaymoアプリの設計見直しとKotlinの導入を行いました。
詳しくは以下のブログで解説しています。

medium.com

この設計見直しが効いたのか、Androidアプリの開発では実装がネックになるような事はほとんどなく、非常にスムーズかつ快適に開発が行える環境を整えることが出来ました。

仕様の議論、提案、布教活動など

8月に正社員になってからはアプリに対する想いが高まり、Twitterなどでアプリの機能や使い方を解説したりアピールしたり勝手に広報活動をやったりしていました。

一方でアプリの仕様についてなかなか意思決定がされないクリティカルな部分などについて積極的に問題提起し議論を促したり、デザイナーと相談してUIを考えたりしていました。

バグバッシュ大会を主催したりしたこともありました。

medium.com

このような活動をしていたこともあり、月間行動指針MVPという表彰制度に合計3回も受賞させていただきました。

ReactNative開発

今年に入ってからはReactNativeの新規案件に携わるようになり、チームメンバー全員初見の状態からなんとか皆でキャッチアップしながら無事にネイティブっぽいUIのアプリを完成させました。
ReactNativeでの設計議論を行いリファクタを行ったりもしました。

で、なんでやめるの

音楽性の違いです。
元々プロダクトにガッツリ関わりたいという動機で入社したので、会社の方針や色々な事情でそれが難しくなったことでモチベ的に厳しくなってしまいました。
自分の携わりたいプロダクトの方向性から少し離れてしまったというのもあります。

事業やプロダクトへの方針や価値観なども意思決定権のある人達とあまり噛み合わずもどかしい思いをすることが多かったところがあったり、会社の働き方や組織運営などに関する方針も、全体的に大企業的で自分にはちょっと合わなかったところがあります。

思い出

実は最初に会社に参画した当時はフィンテック自体に全く興味が無かったんですが、仕事を通してどんどん決済、特に個人間や小規模事業者の決済に興味が強くなり、仕事にかかわらずフィンテックについて考えるようになりました。
プライベートでも比較的現金主義だったのが、職場で感化されキャッシュレス生活に移行したりと、決済・暗号通貨・中国などに関心をもつきっかけをくれた会社にとても感謝しています。

これからどうするの

7月はとりあえず1ヶ月休暇を取って、自分を見つめ直し勉強に励んだりします。
最近、まだまだ自分のスキルが未熟であることを痛感し、焦りを感じているので、もっと頑張っていきたいです。

その後は、やはり自分にはフリーランスが向いているのではという気がしたので、一旦フリーランスに戻って仕事をするつもりだったのですが、色々あってまた正社員として働くことになりそうです。
今後の話についてはまた別のエントリでそのうち書きたいと思います。