koogawa blog

iOS、Android、foursquareに関する話題

#WWDC22 Get to know Developer Mode メモ

developer.apple.com


所感

  • なぜDeveloper Modeが必要?というところをもうちょっと詳しく調べてみたい
  • とはいえ、不要な機能を開放しておく必要はないのは確かだよね
  • Distributionされたビルドでは不要とのことだけど、Adhocビルドはどうなんだろ?

ツイートまとめ

2021年を振り返る

今年も無事に仕事を納められそうです。

f:id:koogawa:20210831120036j:plain
青島
というわけで、2021年を振り返ってみたいと思います。

仕事

SwiftUI/Combine

昨年まではフロントエンド/バックエンドが中心でしたが、今年はまたiOSアプリエンジニアに戻り、SwiftUI + Combine をメインでやってました。フルSwiftUIで開発し、3月にリリースした作業配信アプリがこちらになります。

今回は Storyboard を一箇所も使わなかったわけですが、SwiftUI は iOS標準に従ったデザインであればとにかく高速に開発できてしまう印象でした。特に設定画面のようなリスト構造の画面では、従来のUITableViewを意識しなくて良いので非常に楽です。さらにコンフリクトも起こりにくいです。

良い椅子を買った

昨年までは高校生のときにかった3,980円のOAチェアで頑張っていましたが、思い切ってエルゴヒューマン椅子を購入しました。

頭を支えてくれるのが最高で、疲れてきたらあぐらをかいて座れるのもポイントです。ただ、とにかく重いので、引っ越しの際は大変です。

賞を頂いた

昨年に引き続き、会社で賞を頂きました🎉

評価してもらえるのは本当にありがたいです。これからもやっていきます💪

プライベート

技術相談

今年は主に技術相談という形で副業をやっていました。最近は CodeBoy というサイトでお仕事の依頼を募集しておりますので、興味があればそちらからご連絡ください。

AtCoder

ついに茶コーダーになることができました🎉

茶色がどれくらいのレベルかというと…

茶色になる条件は、Ratingが400以上になることです。茶色で保証できる実力ですが、正直、AtCoder内ではあまり高いレベルではありません。ただ、ここにたどり着く前に辞めてしまう人が多いので、十分にやる気がある人であるとは言えるでしょう。

なお、他社転職サイトと比較すると、このレーティングでも上位1~2%の最高ランクに到達出来る人が数割いるため、一般的には十分高いレベルであると言えます。 AtCoder社長chokudaiさんの記事より引用 https://chokudai.hatenablog.com/entry/2019/02/11/155904

というわけで、あまり高いレベルではないけど上位50%には入るぐらい、とのことです。しかし、高校時代から数学が苦手だった自分にとっては十分な結果であります。

今後ですが、「AtCoderで茶色になる」というのが当初の目標だったので、競技プログラミングの優先度はちょっと下げていきたいと思っています。例えば、F1開催と重なった日も今まではAtCoderを優先していましたが、今後は普通にF1を観ると思います。(競プロをやめるわけじゃないよ!)

ミニ四駆

夏ぐらいから突然ミニ四駆にハマり、親子で参加した秋の大会では表彰台に上がることができました🎉

私はハマったらとことんのめりこむタイプなので、来年もいろんな大会に参加したいと思います。

来年

リモートワークでも外に出るようにしている

今さら感の強い内容だが、たまにはリモートワークネタでも。

私はリモートワークを始めた当初から、週の半分以上は自宅以外の業務スペースで作業をしている。思考の整理も兼ねて、その理由をまとめてみたいと思う。

光を浴びたい

私は昔から冬があまり好きではないのだが、その理由が少し分かった気がする。

国立精神・神経医療研究センター(東京)睡眠・覚醒障害研究部の栗山健一部長は「日光を浴びないとセロトニンの分泌が減り、気分や意欲が落ち込んでしまう」と指摘する。

セロトニンは脳の神経伝達物質で、心の安定や頭の働きを促す。部屋にこもったり、日照時間が短かったりすると分泌が進まず、眠気も強まる。不足を補うため炭水化物を欲し、食生活も乱れる。もともと抱えるストレスと重なると、仕事や家庭生活などに与えるダメージは大きくなる。

冬はなぜか気持ちが落ち込む…という感覚はあったが、実際、光を浴びないとセロトニンの分泌が減り、意欲の低下につながることがわかった。たしかに朝、日光を浴びながら自転車でコワーキングスペースに向かうだけで気分の上がり方がぜんぜん違う。

ちなみに、冬だと退勤する頃にはすでに暗くなっているので、ランチを食べたあといったん帰宅して続きをやる、みたいなことも時々やっている。

緊張感のある環境に身を置きたい

自宅は落ち着くが、自由すぎて気付いたら動画をみちゃってたりする。コワーキングスペースだと他の利用者がいるので適度な緊張感を保てる。あと、人から見られてる感があるので、姿勢とか表情も自然とシュッとする気がする。

話のネタになる

我が家では夕食時に今日あったことをあれこれ喋るのが習慣となっているが、一日中自宅で作業した日は驚くほど話題がない😅 逆に、外で作業した日は「あそこに新しい店がオープンしていた」「さっき虹が出ていた」みたいな話題が自然と生まれるのである。

コワーキングスペースのほうが作業環境が良い

これは外に出るモチベーションを上げるためのコツでもあるのだが、コワーキングスペースで使うモニターやキーボード、椅子などを自宅より良いものにすることで、「外で作業したほうが効率が良いし、出かけるかー」といったきっかけになったりする。

実際、いま自宅で使っている Apple Thunderbolt Display よりコワーキングスペースに置かせていただいているLGの4Kモニターのほうが大きかったりする。

運動のため

3kmほど離れたコワーキングスペースに自転車で通うだけで割と良い運動になる他、その間にイデアが閃く・思考が整理されるといった副次的な効果もある。実際、家に着くまでに課題やバグが頭の中で解決したこともあった。

体型維持のため

大げさかもしれないが、ずっと自宅にいて、一週間ぶりにジーンズを履こうとしたら体が太くなっていて、腹を引っ込めないと入らない!ということも実際にあった。定期的にいつもの服を着て外に出る、ということは割と大事なのである。

美味いものを食べたい

コロナの状況にもよるが、コワーキング周辺のお店でぼっちランチを決めるのが小さな楽しみだったりする。そして、帰りにいつもの模型屋さんにフラっと寄ってミニ四駆のパーツを買ったりする。

こういった「楽しみ」をつくることは意外と大事だったりする。

はてなブログ10周年特別お題「はてなブロガーに10の質問」

f:id:koogawa:20211015083135p:plain はてなブログ10周年特別お題「はてなブロガーに10の質問」に答えてみるよ!

ブログ名もしくはハンドルネームの由来は?

koogawa は新卒で入社した会社で割り当てられたアカウント名です。すっかり気に入ってしまい、10年以上使い続けています。

はてなブログを始めたきっかけは?

はてなダイアリーからの移行組です。はてなのサービスはエンジニアが多く使っているイメージがあり、自分も使い始めた記憶があります。

自分で書いたお気に入りの1記事はある?あるならどんな記事?

人生初の転職エントリ。

koogawa.hateblo.jp

1ヶ月ぐらいかけて書いた記憶があります。たくさんの人に読んでいただきました。

ブログを書きたくなるのはどんなとき?

  • 140文字に収まらない技術メモを残したいとき
  • イベント等に参加したとき
  • ポエムを書きたいとき

下書きに保存された記事は何記事? あるならどんなテーマの記事?

下書きのまま公開しない、ということは基本的にしません。すべて公開するか、全て削除します。

自分の記事を読み返すことはある?

あまり読み返さないかも!

調べ物をしているときに自分の記事がヒットすることはあります。

好きなはてなブロガーは?

id:konifar さんの記事は必ず拝読しています。

はてなブログに一言メッセージを伝えるなら?

10年間ありがとう。

人生の4分の1をはてなブログと過ごしていることになります。

これからもお世話になります。

この10年を一言でまとめると?

やがてワシも父になりました。

はてなブログとは、まさに人生。

この10年を10文字でまとめると?

人生はアドベンチャー

iOSDC Japan 2021 前夜祭に参加した #iosdc

今年も iOSDC が始まりましたね!

iosdc.jp

ここ数年はオンライン開催ということもあり、子供の世話をしながらリアルタイムで参加するのはなかなか厳しいものがあります。しかし、せっかくの大イベントですので、タイムシフト視聴機能を駆使しつつ、なるべくキャッチアップしていきたいと思います💪

聴いたトーク

今日は2つのトークを後追いで聴いたので、内容をメモしておきます。

agoraを使ってライブ配信機能を1ヶ月半でリリースした話 by @asa08

  • Agora
    • ビデオ・音声通話やライブ配信をかんたんに実装できるsdk
    • 9つの機能がある!今日話すのは Interactive Live Streaming と Real-Time message
    • Agoraを選んだ理由
      • 早くリリースして、ユーザの反応を見たかった
      • 人手不足
    • Interactive Live Streaming 仕組み
      • 配信者がChannelを作り、閲覧者がJoinする
      • appId, channelName, uid, token が必要
  • Design
    • コメントを送る仕組み
      • Real-Time message 機能を使う(先述の9つのひとつ)
    • Block機能
      • 配信者が不適切なユーザーを排除できる
      • PeerToPeer Message を利用して実装する
    • ギフト機能
      • Agora RTM を利用して実装できる
      • ただ、実際はフローを少し変えて実装した(自社サーバとAgoraのやりとりをなるべくなくしたかった+すでにギフトという概念がサービスにあり、そちらと合わせたかった)
  • 課題や問題
    • 画面のレイアウトが複雑になりすぎ
    • リアルタイムで配信一覧を更新したい(最新の状態にするためにリロードする必要がある)
      • クライアントでポーリングする
      • Push通知を利用して一覧を更新
      • Pusher (WebSocketを介したリアルタイム双方向通信を実現)を使うことにした
  • おまけ
    • 美顔フィルタの評判が良かった
    • Agoraにも簡易的な美顔フィルタが用意されている

感想:これだけの内容を1ヶ月半で把握してリリースまで持っていったのはすごい!説明が丁寧でわかりやすいトークでした👏

iOSアプリ開発者がテスラを買って色々調べたりアプリを作ったりしつつまだ見ぬApple Carを想像する by @kenmaz

  • テスラの概要
    • 電気自動車。現在は4車種ある。
    • 補助金を入れれば300万円〜購入可能
  • 気に入っている点
    • シンプルなデザイン
    • 余計なボタンがない
    • スマホを持って近づくと自動でロック解除&電源オン
    • 座ってブレーキ踏むだけでハンドルとシートを調整してくれる
    • 駐車してシートベルト外してハンドルとシートのいちが元にもドエル
    • スマホから離れると鍵がロックされる
    • 駐車中も怪しい人物が近づくと勝手に録画開始
    • 自動運転
    • OTAソフトウェアアップデート
  • テスラを構成する技術
  • Tesla API
    • 公式アプリで鍵を開けたり、エアコンを操作したりできる
    • どんなAPiが存在するか有志がドキュメントにまとめている(公式情報ではない)ので、アプリも自作できる
    • Wake API でテスラを起動できる
    • 充電、空調、走行情報、車両の向きなどを取得できる
  • サードパーティ製アプリの開発事例
    • S3XY KEY fob :kenmaz さん作のApple Watchアプリ。テスラのドアを開けたりホーンを鳴らしたりできる。SwiftUI製
    • TeslaFi : テスラ用のデータロガー Webアプリ。位置情報や充電情報などの履歴を見たり
  • Apple Car について想像してみる
    • 謎が多い
    • iPhone/ Apple Watch/ siri との高度な連携
    • CarPlay の拡張
    • 車両情報へのアクセす・遠隔操作

感想:非常に夢のあるトークでした。私も普段からクルマを運転するのでテスラ欲しくなりました。Apple Car も気になります

個人アプリ開発日誌:AppTrackingTransparency対応した

重い腰を上げて AppTrackingTransparency 対応しました。

developer.apple.com

私のアプリは未だにフル Objective-C で書かれています。あんまりいないと思いますが、ATT対応を Objective-C でやる場合のメモを残しておきます。

まず、

  • AdSupport.framework
  • AppTrackingTransparency.framework

を追加して、ソースコード

#import <AppTrackingTransparency/AppTrackingTransparency.h>
#import <AdSupport/AdSupport.h>

を追記します。

次に、IDFA許可ダイアログを表示したいタイミングで次のコードを実行します。

[ATTrackingManager requestTrackingAuthorizationWithCompletionHandler:^(ATTrackingManagerAuthorizationStatus status) {
    // 許可してくれたかどうかが返ってくる;
  }];

ダイアログに表示したい文言は Info.plist の NSUserTrackingUsageDescription に記載します。AppTracking はユーザー側にあまりメリットはないですし、IDFA の許可リクエストもほとんど許可してくれないと思うので、「よくわからない場合は許可しなくて大丈夫です」の文言を追加しておきました。

これで完了です。

f:id:koogawa:20210615214532p:plain

Swift と違って、行末に ; が必要なのでご注意ください。

計測について

仕事としてアプリ開発する場合は、IDFAの許諾率等を計測するべきだと思いますが、個人開発のアプリぐらいはあまり数値を気にせずやりたいので、今回の許諾率も計測してません。

ちなみに、普段見ているのはダウンロード数ぐらいで、アクティブユーザ数も把握していません。使いたいときに使って頂いて、不要なときまで無理して使ってほしくない、ぐらいのポリシーでやってます。

申請結果

日曜日の昼に申請して、日付が変わる頃に審査が通りました。最近だと土日も普通にレビューやってるみたいですね。

#WWDC21 What's new in watchOS 8 メモ

ツイートをまとめただけです。

developer.apple.com