A Day In The Life

とあるプログラマの備忘録

フロー情報はブログに、ストック情報はZenn.devに投稿することにしました。

今後技術記事はZenn.devに投稿します。 長年ブログに技術記事をかいてきましたが、フロー情報とストック情報を分けて投稿することにしました。 今後、技術記事はZenn.devに投稿します。 最近投稿したZenn.devの記事 最近は主にGoの記事を書いています。 GCP…

GCPマネージドサービス向けLoggerライブラリを開発しました。

GCPマネージドサービス(GAE/GKE/Cloud Run)向けのGoのLoggerライブラリを開発しました。 github.com Google App Engine 第1世代のロガー(google.golang.org/appengine/log)からの移行ができるように関数のインフタフェースを揃えてあります。

CABTMIDILocalPeripheralViewControllerを使わずにMIDI over BLEでアドバータイズする方法

ワイヤレスMIDI接続をしてアプリから他の端末にMIDIデータを送信したい CoreAudioKit の CABTMIDILocalPeripheralViewController を使うとiPhone(またはiPad)アプリ上に MIDI over Bluetooth LE のアドバータイズの設定画面を表示することができます。 上記…

SpriteKit SceneをiPhone/iPadのホームバーに対応させる

3年間放置していたiOSアプリをホームバーに対応させた話 かれこれ3年くらい放置していた iPhone/iPad 両対応のアプリをホームバーに対応させようと思ったら結構大変だったのでその記録です。 ちなみに放置していたアプリはこちらです。 ピアノ - 即興ピアノt…

Time型をJSONに変換するとtime.Locationの情報が欠落する場合の対処法

Time 型のフィールドを含む構造体を JSON にエンコード、JSON からデコードすると特定条件下で Time 型オブジェクトの time.Location の情報が失われることがあります。 以下のプログラムを見てください。 package main import ( "fmt" "time" "encoding/jso…

Prometheusで収集したメトリクスを使ってCloud Monitoringのダッシュボードを作成する

Prometheus で収集した GKE アプリケーションのメトリクスを GCP の Cloud Monitoring(旧Stackdriver Monitoring) にエクスポートして Cloud Monitoring のダッシュボードを作成する方法を紹介します。Prometheus といえば Grafana を使ってダッシュボードを…

Prometheus のサービスディスカバリを使って Kubernetes 上に構築した Redis を監視する

こちらの記事で Prometheus の static_config を設定して Redis のメトリクスを取得する方法について紹介しました。 glassonion.hatenablog.com Prometheus で監視対象のサーバの設定をする方法は static_config の他に Service Discovery があります。stati…

Prometheus を使って Kubernetes 上に構築した Redis を監視する

PrometheusからRedisの状態を取得する 私は普段 Redis を GKE 上に構築して使用していますが、GCP コンソール画面から得られる情報が Pod の CPU 使用率、メモリ使用率、ディスク使用率くらいしかなくもう少し細かい情報を得たいと考えていました。そこで Pr…

go-mode + lps-modeを使ってEmacsのGolang開発環境を整える

以前の記事 go-mode + eglotを使ってEmacsのGolang開発環境を整える - A Day In The Life で eglot を使った Go の開発環境構築方法を紹介しましたが、今回は lsp-mode を使って環境を構築してみたいと思います。前回と同じく Go の Language Server は gopl…

Kubernetes 上に Redis Sentinel を構築する

GCP環境でRedisを使う GCP には Cloud Memorystore という Redis 互換のマネージドサービスがあるのですが、対応している Redis のバージョンが古い(4系)ので自前で GKE 上に Redis を立てることにしました。どうせ立てるなら master/slave 構成のほうが良い…

go-mode + eglotを使ってEmacsのGolang開発環境を整える

普段 Golang でサーバコードを書くときはもっぱら Emacs を使っています。Go Modules に移行してから gocode が動作しなくなったので最近はやりの LSP(Language Server Protocol) を導入することにしました。Go の Language Server は gopls 、Emacs のLSPク…

Python を使って地域メッシュコードから緯度経度ポリゴンを算出する

日本の地域メッシュコードから緯度経度ポリゴンを算出する Python3.7 のプログラムを作成しました。 前回の記事の逆バージョンです。 Python を使って緯度経度から地域メッシュコードを算出する - A Day In The Life プログラム 3次メッシュコード(基準地域…

Python を使って緯度経度から地域メッシュコードを算出する

緯度経度(latitude, longitude)から日本の地域メッシュコードを算出する Python3.7 のプログラムを作成しました。 地域メッシュ - Wikipedia プログラム 緯度経度から1-3次メッシュコード(基準地域メッシュコード)を算出します。精度を出すためにミリ秒で計…

PostGISでgeometry型からgeography型に変換するときは座標系に注意する

SRID=4612(JGD2000測地系+地理座標系)のgeometry型フィールドだとgeography型に変換できる postgres=> SELECT ST_SetSRID(geom, 4612)::geography FROM map WHERE id=1; st_setsrid ---------------------------------------------------- 01010000200412000…

プライバシーポリシー

はじめに A Day In The Life(https://glassonion.hatenablog.com、以下当サイト)は、個人情報に関する法令等を順守し、個人情報を適切に取り扱います。 個人情報の管理 当サイトは、お問い合わせいただいた内容についての確認・相談、情報提供のためのメール…

Golang書くときのちょっとしたテクニック

MarshalJSONを使ってJSONに表示用のフィールドを追加する 無限ループしないように元の構造体を拡張する // UTCな時間をJsonに変換するタイミングでJSTに変換する例 import "time" type Hoge struct { ID uint CreatedAt time.Time } func (h Hoge) MarshalJS…

今時のサーバエンジニアのためのオススメ本

2017年の11月から本格的にサーバサイドのお仕事をするようになりました。それで今までに読んだオススメの本をまとめました。 使いやすいAPIを開発するために RESRfulなAPIを開発するための指針など。他社(Twitter, GitHub, Yahoo.com...etc)のAPIを比較しな…

Golangでサーバプログラミングするなら始めに読むべき記事

最近 Golng 使ってサーバのプログラム書いてます。 始める前に読んでおけばよかったと感じた記事が2つあったのでメモ程度に紹介します。 Handlerのチェインをどうやって解決するか - Making a RESTful JSON API in Go - The New Stack Context問題どうするか…

micro:bitを使って子供と一緒に夏休みの自由研究をしてみました

夏休みのことなので少し前の話になりますが、小学生の娘と一緒に夏休みの自由研究にmicro:bit を使ったギターを制作しました。 エアギター micro:bit って何ですか? イギリスの BBC が開発した小学生向けの小型コンピュータです。子供向けではありますが、傾…

数学知識ほぼ0の人間が深層学習の勉強をはじめてみた

きっかけは Magenta プロジェクト 最近巷では機械学習や深層学習(ディープラーニング)などAI系の技術が流行っていますが自分は2-3ヶ月前まで全くと言っていいほど興味がありませんでした。機械学習とかって画像解析や翻訳で使う技術でそのうち頭のいい人がな…

オブジェクト指向の次に来るもの

自分が駆け出しのプログラマだった頃(10年以上前ですかね)、必死でオブジェクト指向プログラミングの勉強をしました。最近だとオブジェクト指向プログラミングなんて当たり前すぎて技術とすら言えないくらいになったと感じてます。 エンジニアが生き残るため…

面倒な課金処理をRx化するRxStoreKitを作りました

StoreKit の SKProductsRequest と SKPaymentQueue を Rx化して課金処理を簡単に書けるライブラリを GitHub にて公開しました。 github.com RxStoreKit を使うと課金処理を以下のような感じで書けます。 let productRequest = SKProductsRequest(productIden…

Swift3でMIDIファイルをパースする方法

Swift3 で MIDI ファイルのパースをしようとしたら意外に方法が見つからなくて苦労したのでメモです。 MusicEventIteratorGetEventInfo 関数で取得したデータを MIDINoteMessage オブジェクトに変換する方法がわからなくてハマりました。 import AudioToolbo…

ReSwiftのステートをRxSwiftを使って監視する

普段から RxSwift(Reactive ExtensionsのSwift実装)と ReSwift(ReduxのSwift実装)を使っています。RxSwift を通信系の処理だったりデリゲートの処理(例えば StoreKit とか CoreBluetooth)だったりに使って、ReSwiftをアプリ全体で管理しなきゃいけないデータ…

enum駆使してKeychainをUserDefaultsっぽく使う

以前、こちらの記事で enum(列挙型)を使って UserDefaults のキー名を管理する方法について紹介しました。この方法を応用(ってほど大袈裟なもんじゃないけど)して Keychain にセキュアなデータを保存してみたいと思います。 Keychainって何? API アクセスに…

Realmを前提としたリポジトリパターンの実装

いろんなところで Realm が良いと聞くようになり最近やっと Realm を使い始めました。実際 Realm を使ってみると予想していたよりも使い勝手がよく Core Data には戻れそうにないです…。ソースコードは Swift3 に対応しています。 リポジトリパターンの実装 …

Swift3で追加されたData構造体の使い方レシピ

Swift3 から Data 構造体が追加され Objective-C 時代の NSData クラスはお役御免になりました。この Data 構造体は NSData の置き換えなので、できることに違いはほとんどありません。ただしメソッドに互換性がないため NSData を使ったコードを Data に置…

Swiftのプロトコルに@objcなしでオプショナルメソッドを定義する

Swift で プロトコルを定義するときにオプショナルなメソッドを定義したい時ってありますよね。そんなときに使える小技です。 @objcを指定するよく知られた方法 Swift のプロトコルは Objective-C と違ってオプショナルメソッドを定義することができません。…

UserDefaultsのキー名をenumで管理する

NSUserDefaults あらため UserDefaults のキーを enum で管理する方法(Swift3対応)です。UserDefaults のキーを enum で管理する方法はいくつか見つけたのですが Swift3 に対応しているものが見つからなかったので書きました。 キーに文字列リテラルを直接指…

uGUIのテキストを点滅させてみる

Unity の uGUI でテキストをこんな感じに点滅させる方法です。 Update メソッドに処理を書いても良かったのですが個人的な好みで UniRX を使って実装してみました。Mathf.Sin メソッド(三角関数)を使ってアルファ値を0から1に緩やかに変化させています。 usi…