M2 MacBook Airに買い換えてIntelから乗り換えたので、最初から環境を再設定した

Mac

M2 MacBook Air(M2, 13インチ)に買い換えました。 前使っていたのは2018年モデルのMacBook Pro 15インチでした。 個人的に5年買い換えサイクルにしていたのと、最近ファンが回る場面が多くなりそろそろintelは限界かと思った次第です。 元々アプリエンジニア…

アクセスキーを使わずにAWS SESを使って、Firebaseからメール送信できるようにする

GCPやFirebaseにはメール関連の現行サービスがなく、外部のメールサービスを使用する必要があります。 そのため、SendGridやAWS SESなどを組み合わせる必要があります。 今回はAWS SESを使うことになったのですが、そのためにアクセスキーやSMTPパスワードを…

別のディスプレイに表示されているウィンドウを強制召還するmacOSアプリを作った

Mac

僕はMacBook ProとPS5を同じディスプレイに繋ぎ、ディスプレイの入力をメニューで切り替えて使っている。 MacBook Proのディスプレイもサブディスプレイとして使っており、PS5を起動してディスプレイに表示しているときはMacBookに攻略サイトを出したりDisco…

macOSで起動中のウィンドウの一覧を列挙する

macOSのアプリ開発のお話し。 起動中のウィンドウを一覧するには、CGWindowListCopyWindowInfoを使う。 struct Window: CustomStringConvertible { let rawData: [String: AnyObject] var name: String? { get { return rawData[kCGWindowName as String] as…

無償版G Suiteが廃止されるのでAWS SESとDockerでメール送受信システムを作った

Dev

20日木曜、大きなニュースが飛び込んできました。2012年に提供が終了して、そのまま9年近く利用できていた旧無償版G Suiteが7月1日に廃止されてしまいます。 www.itmedia.co.jp 自分も黎明の頃から勉強会のメールアドレスや、友人に独自ドメインアドレスを提…

Apple USB-C Digital AV Multiport アダプタはアップデートされている

使い込まれたUSB-C Digital AV Multiport アダプタ 標題の通りなのですが、Apple USB-C Digital AV Multiport アダプタは、Apple純正のUSB-CからUSB-A、HDMI、USB-Cの充電アダプタに変換してくれるアダプタです。MacBookユーザーなら1本は持っているはずです…

Google Cloud Tasksから呼び出すApp Engine TaskとGAEバージョンの関係

Google Cloud TasksからApp Engine HTTPタスクでバックグラウンド処理をするアプリケーションを作っている。 トラフィック分割で様子を見ながらリリースしたい場合、App Engine HTTPはどのバージョンのタスクを実行するのかがわからなかったので実験してみた…

Automatorアプリケーションでシェルスクリプト+リソースを配りたい

Dev

macOS用のツールアプリケーションをインストールする方法がシェルスクリプトだった。ITエンジニア向けだったら良いんですけど、そうでない人が対象だったのでさすがにGUIが必要で、Automatorで手軽にできないかと思って調べてみました。 実行したいシェルス…

GCFをデプロイするGCPプロジェクトのセットアップ

毎回やって毎回引っかかってる気がするのでメモ。本当はTerraformとか使った方が良いんだろうけど。 とりあえず最低限必要なもの、 前提 TypeScript で GCF を作って cloudbuild.yaml を読ませてデプロイする

Firestoreのフィールドにどうしても.を使いたい

Dev

Firebaseのフィールド、例えばマップのキーにメールアドレスを使いたいパターンはよくあると思う。例えばこういうの。 permissions: { "iseebi@example.com": "read", "admin@example.com": "admin" } で、これをクエリしようとすると permissions.iseebi@ex…

Firebase Hostingでサイト全体をリダイレクトさせる

Dev

サイト全体をリダイレクトさせたいということがあると思う。例えば、wwwでメインサイトをホストしているけど、Apexドメインにアクセスしたときもwwwにリダイレクトさせたい、とかの場合だ。他にもちょっと複雑なリダイレクトさせたりもしたいということもあ…

Google Cloud SDK (gcloud) コマンドの設定切り替え

gcloudで取り扱うプロジェクトの切り替え方法。プロジェクト作るたびに調べてる気がするので。

9年もののiOSアプリのプロダクト改善を1年ちょいやったのでまとめる

Etc

昨年の頭に転職して、ピリカという会社にお世話になっている*2。科学技術の力で環境問題を解決するという目標を元に、ごみ拾いSNS ピリカや、ITに関わらず様々な技術を使った調査プロジェクトなどのプロダクト/プロジェクトを推進している会社だ。

日産のインテリジェントルームミラーが汚れて見えない時

毎年恒例の旅行に来てるのだけど、ちょっと普段と異なる状況で困ったということがあったのでメモを兼ねて。 最近の日産車である程度のグレードになると「インテリジェントルームミラー」なるものがついている。車のルームミラーがカメラになっていて、後部座…

NotificationCenter.addObserver(forName:object:queue:using:) にインスタンスメソッドを渡すとリークする

これまで、NotificationCenterのaddObserverはSwiftでもaddObserver(_:selector:name:object:)で書いていたのだけど、ふと「あー@objc書きたくないな〜」と思った。 そこで単純にaddObserver(forName:object:queue:using:)に置き換えたのだけど、これでリー…

車中泊用のベッドを買い換えた

先日の車中泊装備紹介エントリで書いていたエアーベッドだが、気持ち足下が短くて、もう少し長いものに買い換えたいと思っていた。 しかし、セレナの3列目を片方倒した場合、もう片方と壁の間にできるスペースの幅は65cm程度、シングルサイズのエアーベッド…

ジャパンキャンピングカーショー2020を見てきた

車中泊をはじめてから、キャンピングカーについての情報を見ることがかなり増えた。当然ながら車を乗り換えることは全然考えていないのだけど、将来的にキャンピングカーをベースに生活できないかなという考えも少し頭をよぎることがあったり、単純に憧れる…

セレナe-POWERで行ってきた、2019年の車中泊旅の記録

*1 セレナe-POWER 車中泊ブログ3回目。今回は行ってきた車中泊旅を紹介。 といっても、特に10月11月はひどくて毎週どこかに車中泊に行っていて全部挙げるときりがない。2ヶ月で「常にどこかで車中泊してる人」みたいなイメージが会社内でできあがったくらい…

セレナe-POWERでの車中泊スタイルが固まってきたのでまとめ (2) 装備品

いろんな情報を集めながら何度か車中泊旅をしてきたところ、自分のスタイルが固まりつつあるのでこのあたりで一度まとめてみようと思う連載、今回は車中泊に使っているグッズについてのまとめ。

セレナe-POWERでの車中泊スタイルが固まってきたのでまとめ (1) 車自体について

2018年の年末、セレナe-POWERを買った。カーシェアだと時間に自由が利かないのに不満があったのと、いつかは車中泊旅をしてみたいと思っていたこと、家庭の事情や転職のタイミングが揃ってエイヤ!と購入に至った。 いろんな情報を集めながら何度か車中泊旅…

GAE/Python の 2.7(gen1) から 3.7(gen2) への移行作業メモ

趣味で作った GAE/Python Python 2.7 のサービスを Python 3.7 に移行したときにやったことのまとめです。

Universal LinksのApp ID PrefixがTeam IDでない場合がある

iOSのUniversal Linksを設定していたが、シミュレータでは正しく挙動するものの実機では一切動かないということが起こった。 apple-site-association には、[Team ID].[Bundle ID] の形式でapplinksを記載していた App Search API Validation Tool では Erro…

GoogleドライブのファイルをGoogle Cloud Storageへコピーする

Google Cloud APIの中には、gs://[bucket]/[path]の形式になっているCloud StorageのURLを与えることができるものがある。今回はGoogleドライブに入っているファイルをCloud Storageにコピーしてgs://のURLとして使えるようにしたかった。 streamをうまく使…

シェルで長いコマンドが動いた場合、コマンド終了時に音を鳴らす

ターミナルで作業中、たまに意図せず時間のかかるコマンドを叩いてしまうことがあります。例えば、curlでダウンロード仕掛けたは良いけどファイルサイズが大きかったり、無意識にcarthage update叩いてしまった場合などです。 そうなると、終わるまでちょっ…

今回はプッシュ通知の本 / #技術書典 7にサークル参加します

サークル 伊勢的新常識は2019/09/22(Sun)開催の技術書典7に参加します。スペースはい13Cです。 今回は、これまでのプッシュ通知基板開発の経験を凝縮した1冊をお届けします。

ライブのチケットをAirtableで管理してみたらわりと良かった

Etc

ここ数年は決まった声優さんだけではなく、様々なアーティストのライブに行くことが多くなってきた。ロックバンドのライブは封入先行、オフィシャルHP先行、プレイガイド先行など、予約するタイミングが複数あって、予約先もアーティスト公式/ぴあ/e+だけで…

Twitterアプリ経由認証を簡単実装できる軽量ライブラリSimpleTwitterAuthenticationを作りました

仕事でTwitter認証をサポートしたアプリを開発していますが、その認証処理に使われていたライブラリがとても古く、あっちこっち警告出しまくっていたので入れ替えることになりました。 いろいろ考えた結果、小さなライブラリを新しく起こしました。SimpleTwi…

Dark Modeに対応したTransporterPad v2.1.0をリリースしました

iOS/Androidアプリを簡単かつ複数の端末にインストールできるMacアプリ、TransporterPadを久しぶりにアップデートしました。 今回は再びはやかわさんにご協力いただき、ダークモードに対応させました。 ダウンロードはこちらから そもそもTransporterPadとは…

macOSアプリに埋め込む実行バイナリのNotarization/Hardened Runtime対応は署名すればOK

昨日の記事で、アプリはHardened Runtime対応されたものの、リソースとして埋め込まれる実行ファイルがHardened Runtimeに対応していない状態だったためNotarizationに失敗していました。 実は、Hardened Runtimeへの対応はアプリのビルド時ではなく、コード…

Visual Studio App CenterでmacOSアプリのNotarizationに対応しようとした

macOS Catalinaから、macOSアプリはAppleによる公証(Notarization)が必須化されます。Notarizationのプロセスではアプリのバイナリを一度Appleに送って、マルウェアなどのチェックを受けます。雰囲気は以下のページがわかりやすいです。 applech2.com さて、…