なんか無性にゲームが作りたくなったのでブラウザで遊べる簡単なゲームを作っています。 今のところまだ2つだけですが、少しつづ種類を増やしていきたいです。 マインスイーパ ライフゲーム 久しぶりすぎて基本中の基本であるゲームループの実装すら忘れてました。
デザイン勉強中のプログラマの日記です。
最近、急須や土瓶にザルが入っている手抜き商品をよく見かけますが、ふざけるなと言いたくなります。デザイナーの皆さん急須のデザインをするなら毎日お茶を飲んでください。
なんか無性にゲームが作りたくなったのでブラウザで遊べる簡単なゲームを作っています。 今のところまだ2つだけですが、少しつづ種類を増やしていきたいです。 マインスイーパ ライフゲーム 久しぶりすぎて基本中の基本であるゲームループの実装すら忘れてました。
標準地域メッシュを全世界に拡張した世界メッシュを生成するライブラリを公開しました。
標準地域メッシュは日本限定のガラパゴス仕様 普段、データ分析業務などで標準地域メッシュを利用しているのですが、この規格は日本限定でしか利用できずなんともガラパゴス感がありました。Quadkey や Geohash のように全世界で利用できるといいなと漠然と考えていて、なんかよい方法ないかなと探していたところ世界メッシュを発見しました。 一般社団法人世界メッシュ研究所 – Research Institute for World Grid Squares ブラウザで世界標準メッシュを利用してみたかったので自前で TypeScript でライブラリを開発しました。 開発したライブラリはこちら ブラ…
最近の個人活動 忘れないようにメモ Webサービス開発 Web Tools Texを出力するサービスとか地域標準メッシュやQuadkey、Geohashの可視化サービスなど。世の中インフレだけど年収が上がる気配が1mmもないので収入増を狙って作ってみた。しばらくはこのサービスを拡充したい。 tools.9revolution9.com OSS開発 anonypy Pythonのk-匿名化ライブラリ。勢いで開発して放置してたにも関わらず思ったよりもスターがついていてびっくり GitHub - glassonion1/anonypy: Anonymization library for pytho…
k-匿名化ライブラリ 個人活動でPythonでk-匿名化するライブラリを開発しています。l-多様化とt-近似化にも対応しています。まだまだ改善点たくさんありますが少しづつ良いライブラリにしていきたいとおもいます。 github.com 開発にあたりこちらの書籍がめちゃくちゃ参考になりました。 プライバシー保護入門作者:中川裕志勁草書房Amazon
フロー情報はブログに、ストック情報はZenn.devに投稿することにしました。
今後技術記事はZenn.devに投稿します。 長年ブログに技術記事をかいてきましたが、フロー情報とストック情報を分けて投稿することにしました。 今後、技術記事はZenn.devに投稿します。 最近投稿したZenn.devの記事 最近は主にGoの記事を書いています。 GCPで理想の構造化ログを出力する方法 GoでHTTP/gRPCリクエストのレスポンスサイズを計測する方法 Go で標準出力に書き込まれた文字列のテストをする方法 Goでミドルウェアとインターセプターのテストをする方法 引き続き、本ブログをよろしくお願いします。 引き続き、お気持ち表明とか、近況報告、おすすめの本情報なんかはこちらの…
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 のアドバータイズの設定画面を表示することができます。 上記画面の Advertise MIDI Service の項目をオンにするとアプリ側を BLE ペリフェラルとしてアドバータイズすることができます。 CABTMIDILocalPeripheralViewControllerを使わずにアドバータイズしたい Swift…
SpriteKit SceneをiPhone/iPadのホームバーに対応させる
3年間放置していたiOSアプリをホームバーに対応させた話 かれこれ3年くらい放置していた iPhone/iPad 両対応のアプリをホームバーに対応させようと思ったら結構大変だったのでその記録です。 ちなみに放置していたアプリはこちらです。 ピアノ - 即興ピアノtaisuke fujitaミュージック無料apps.apple.com 対応前の設定はこんな感じ 4.7インチの iPhone(6, 6S, 7, 8, 第2世代SEなど1334 * 750ピクセル)をベースにiPadにも対応させるため、SKScene の幅を1334ピクセル高さを1000.5ピクセル(4:3)に設定し、アンカーポイン…
Time型をJSONに変換するとtime.Locationの情報が欠落する場合の対処法
Time 型のフィールドを含む構造体を JSON にエンコード、JSON からデコードすると特定条件下で Time 型オブジェクトの time.Location の情報が失われることがあります。 以下のプログラムを見てください。 package main import ( "fmt" "time" "encoding/json" ) type Hoge struct { Name string CreatedAt time.Time } func main() { time.Local = time.UTC // Hoge構造体を生成する h1 := Hoge{ Name: "aaa", Cr…
Prometheusで収集したメトリクスを使ってCloud Monitoringのダッシュボードを作成する
Prometheus で収集した GKE アプリケーションのメトリクスを GCP の Cloud Monitoring(旧Stackdriver Monitoring) にエクスポートして Cloud Monitoring のダッシュボードを作成する方法を紹介します。Prometheus といえば Grafana を使ってダッシュボードを作成することが多いですが GCP 環境では Cloud Monitoring に一元化して監視できたほうが何かと便利です。あえて Grafana を使わず Cloud Monitoring でメトリクスを可視化します。 以下の記事で GKE 上に構築した Re…
Prometheus のサービスディスカバリを使って Kubernetes 上に構築した Redis を監視する
こちらの記事で Prometheus の static_config を設定して Redis のメトリクスを取得する方法について紹介しました。 glassonion.hatenablog.com Prometheus で監視対象のサーバの設定をする方法は static_config の他に Service Discovery があります。static_config はわかりやすく簡単に設定できるので入門にはとても良いのですが、実運用を考えると static_config よりも Service Discovery を使ってメトリクスを取得するのがおすすめです。この記事では Service Di…
Prometheus を使って Kubernetes 上に構築した Redis を監視する
PrometheusからRedisの状態を取得する 私は普段 Redis を GKE 上に構築して使用していますが、GCP コンソール画面から得られる情報が Pod の CPU 使用率、メモリ使用率、ディスク使用率くらいしかなくもう少し細かい情報を得たいと考えていました。そこで Prometheus を使って Redis の状態を監視してしてみたところとても良い感じだったのでその方法を紹介してみたいと思います。 Prometheus を使うと Redis の INFO コマンドで得られる情報を時系列に見ることができます。Prometheus は機能が豊富でいろいろできるのですが、この記事では必…
go-mode + lps-modeを使ってEmacsのGolang開発環境を整える
以前の記事 go-mode + eglotを使ってEmacsのGolang開発環境を整える - A Day In The Life で eglot を使った Go の開発環境構築方法を紹介しましたが、今回は lsp-mode を使って環境を構築してみたいと思います。前回と同じく Go の Language Server は gopls を使います。 動作確認バージョン Emacs 26系 Golang 1.13.x Emacsは25以上、Golangは1.11以上なら問題なく動作するはずです。 gopls のインストール Go の Language Server は3種類あります(bingo …
Kubernetes 上に Redis Sentinel を構築する
GCP環境でRedisを使う GCP には Cloud Memorystore という Redis 互換のマネージドサービスがあるのですが、対応している Redis のバージョンが古い(4系)ので自前で GKE 上に Redis を立てることにしました。どうせ立てるなら master/slave 構成のほうが良いだろうということで Redis Sentinel にしました。 環境 GKE 1.13.6 Redis 5 Redis Sentinelって何? Redis Sentinel は master/slave 構成の Redis の監視を行ってくれるサーバソフトウェアです。自動フェイルオー…
go-mode + eglotを使ってEmacsのGolang開発環境を整える
普段 Golang でサーバコードを書くときはもっぱら Emacs を使っています。Go Modules に移行してから gocode が動作しなくなったので最近はやりの LSP(Language Server Protocol) を導入することにしました。Go の Language Server は gopls 、Emacs のLSPクライアントは eglot を使います 動作確認バージョン Emacs 26系 Golang 1.12.x Emacsは25以上、Golangは1.11以上なら問題なく動作するはずです。 gopls のインストール Go の Language Server は3…
Python を使って地域メッシュコードから緯度経度ポリゴンを算出する
日本の地域メッシュコードから緯度経度ポリゴンを算出する Python3.7 のプログラムを作成しました。 前回の記事の逆バージョンです。 Python を使って緯度経度から地域メッシュコードを算出する - A Day In The Life プログラム 3次メッシュコード(基準地域メッシュコード)から緯度経度ポリゴンを算出します。精度を出すためにミリ秒で計算しています。 # ミリ秒 MILLISECOND = 3600000 class Grid(object): def __init__(self, code, parent=None, divide=0): size = len(code)…
Python を使って緯度経度から地域メッシュコードを算出する
緯度経度(latitude, longitude)から日本の地域メッシュコードを算出する Python3.7 のプログラムを作成しました。 地域メッシュ - Wikipedia プログラム 緯度経度から1-3次メッシュコード(基準地域メッシュコード)を算出します。精度を出すためにミリ秒で計算しています。 import math # 計算の単位(ミリ秒) MILLISECOND = 3600000 class FirstGrid(object): def __init__(self, lat, lon): ''' 1次メッシュコード計算 ''' self.lat = lat self.lon =…
PostGISでgeometry型からgeography型に変換するときは座標系に注意する
SRID=4612(JGD2000測地系+地理座標系)のgeometry型フィールドだとgeography型に変換できる postgres=> SELECT ST_SetSRID(geom, 4612)::geography FROM map WHERE id=1; st_setsrid ---------------------------------------------------- 0101000020041200006B405577CB756140404749F6A1BF4140 SRID=3857(WGS84測地系球面+メルカトル図法)のgeometry型フィールドをgeogra…
はじめに A Day In The Life(https://glassonion.hatenablog.com、以下当サイト)は、個人情報に関する法令等を順守し、個人情報を適切に取り扱います。 個人情報の管理 当サイトは、お問い合わせいただいた内容についての確認・相談、情報提供のためのメール送信(返信)の目的以外には使用しません。また知り得た個人情報を第三者に開示することは、警察・裁判所など公的機関からの書面をもった請求以外に一切利用いたしません。 広告について 当ブログでは、第三者配信の広告サービス(Googleアドセンス)を利用しており、ユーザーの興味に応じた商品やサービスの広告を表示す…
MarshalJSONを使ってJSONに表示用のフィールドを追加する 無限ループしないように元の構造体を拡張する // UTCな時間をJsonに変換するタイミングでJSTに変換する例 import "time" type Hoge struct { ID uint CreatedAt time.Time } func (h Hoge) MarshalJSON() ([]byte, error) { type Alias Hoge return json.Marshal(&struct { Alias CreatedAtJST time.Time }{ Alias: (Alias)(h), Cr…
2017年の11月から本格的にサーバサイドのお仕事をするようになりました。それで今までに読んだオススメの本をまとめました。 使いやすいAPIを開発するために RESRfulなAPIを開発するための指針など。他社(Twitter, GitHub, Yahoo.com...etc)のAPIを比較しながら説明 サーバ側のアーキテクチャ構成 マイクロサービス 運用しつつアーキテクチャを進化させていく 運用的な話 SREの基礎やSRE全般の話題
Golangでサーバプログラミングするなら始めに読むべき記事
最近 Golng 使ってサーバのプログラム書いてます。 始める前に読んでおけばよかったと感じた記事が2つあったのでメモ程度に紹介します。 Handlerのチェインをどうやって解決するか - Making a RESTful JSON API in Go - The New Stack Context問題どうするか - Go's net/context and http.Handler – joe shaw
micro:bitを使って子供と一緒に夏休みの自由研究をしてみました
夏休みのことなので少し前の話になりますが、小学生の娘と一緒に夏休みの自由研究にmicro:bit を使ったギターを制作しました。 エアギター micro:bit って何ですか? イギリスの BBC が開発した小学生向けの小型コンピュータです。子供向けではありますが、傾きセンサや光センサ、温度センサなんかもついていて本格的です。スピーカーに繋げば音を出すこともできます。Raspberry Pie や Arduino の子供版といった感じです。 マイクロソフトが開発した Scratch ライクな開発環境があるのでブラウザ上で手軽にプログラミングができます。 JavaScript Block Edi…
きっかけは Magenta プロジェクト 最近巷では機械学習や深層学習(ディープラーニング)などAI系の技術が流行っていますが自分は2-3ヶ月前まで全くと言っていいほど興味がありませんでした。機械学習とかって画像解析や翻訳で使う技術でそのうち頭のいい人がなんとかしてくれるんじゃないのくらいの認識でした。その認識が一変したのが Google Magenta プロジェクト の AI Duet by Yotam Mann - AI Experiments でした。自分も深層学習を使って自動作曲やりたいということで勉強を始めることにしました。これまで自分が勉強したことや読んだ本のことをメモがてらまとめ…
自分が駆け出しのプログラマだった頃(10年以上前ですかね)、必死でオブジェクト指向プログラミングの勉強をしました。最近だとオブジェクト指向プログラミングなんて当たり前すぎて技術とすら言えないくらいになったと感じてます。 エンジニアが生き残るために次に必要な技術は何かここ数年いろいろ考えてきましたが、次は間違いなくリアクティブプログラミングだと予想しています。1年半ほど前、UniRxを使ったのをきっかけに現在もRxSwiftを使って日々リアクティブプログラミングと接しています。そんな大事な技術ですがあまり専門書がないのが困ったところです。そんな折に見つけたのが本書です。 厳密にはリアクティブプロ…
StoreKit の SKProductsRequest と SKPaymentQueue を Rx化して課金処理を簡単に書けるライブラリを GitHub にて公開しました。 github.com RxStoreKit を使うと課金処理を以下のような感じで書けます。 let productRequest = SKProductsRequest(productIdentifiers: Set(["xxx.xxx.xxx"])) productRequest.rx.productsRequest .flatMap { response -> Observable<SKProduct> in ret…
Swift3 で MIDI ファイルのパースをしようとしたら意外に方法が見つからなくて苦労したのでメモです。 MusicEventIteratorGetEventInfo 関数で取得したデータを MIDINoteMessage オブジェクトに変換する方法がわからなくてハマりました。 import AudioToolbox public class MIDIParser { public static func parse(url midiFileUrl: URL) { var musicSequence: MusicSequence? var result = OSStatus(noErr) …
普段から RxSwift(Reactive ExtensionsのSwift実装)と ReSwift(ReduxのSwift実装)を使っています。RxSwift を通信系の処理だったりデリゲートの処理(例えば StoreKit とか CoreBluetooth)だったりに使って、ReSwiftをアプリ全体で管理しなきゃいけないデータの監視なんかに使ってます。ReSwift をそのまま使ってもあまり困らないのですが、ReSwift のステートを Observable に変換してUI部品とバインドするといろいろと捗るなぁというわけで ReSwift の Rx 用ラッパークラスを作成しました。 Re…
enum駆使してKeychainをUserDefaultsっぽく使う
以前、こちらの記事で enum(列挙型)を使って UserDefaults のキー名を管理する方法について紹介しました。この方法を応用(ってほど大袈裟なもんじゃないけど)して Keychain にセキュアなデータを保存してみたいと思います。 Keychainって何? API アクセスに使う認証用のトークン文字列なんかは UserDefaults じゃなくてもっとセキュアなところに保存する必要があります。そんなときに使うのが Keychain です。詳しい説明は以下の記事が参考になると思いますので以下をご一読ください Keychain Services とは Keychainに文字列を保存する …
いろんなところで Realm が良いと聞くようになり最近やっと Realm を使い始めました。実際 Realm を使ってみると予想していたよりも使い勝手がよく Core Data には戻れそうにないです…。ソースコードは Swift3 に対応しています。 リポジトリパターンの実装 Core Data に比べてお作法的なものが少ないとはいえ、いくつかのお決まりのパターンがあるので DDD のリポジトリパターンを適用してみました。クリーンアーキテクチャをまったく意識してないお気軽実装です。 import Foundation import RealmSwift class Repository<D…
Swift3 から Data 構造体が追加され Objective-C 時代の NSData クラスはお役御免になりました。この Data 構造体は NSData の置き換えなので、できることに違いはほとんどありません。ただしメソッドに互換性がないため NSData を使ったコードを Data に置き換えるのが大変です。というわけで Data 構造体の使い方をまとめてみました。 文字列を Data オブジェクトに変換する 文字列を Data オブジェクトに変換するには以下のように String 構造体の data メソッドを使います。 let str = "abcdefghijk" let d…
Swiftのプロトコルに@objcなしでオプショナルメソッドを定義する
Swift で プロトコルを定義するときにオプショナルなメソッドを定義したい時ってありますよね。そんなときに使える小技です。 @objcを指定するよく知られた方法 Swift のプロトコルは Objective-C と違ってオプショナルメソッドを定義することができません。そこで一番お手軽な方法としてはプロトコル宣言するとき、先頭に@objcをつけて Objective-C 互換にしてしまうことです。こんな感じです。 @objc protocol Hoge { func foo() func bar() // オプショナルなメソッド optional func buzz() } 使うときは以下の…
NSUserDefaults あらため UserDefaults のキーを enum で管理する方法(Swift3対応)です。UserDefaults のキーを enum で管理する方法はいくつか見つけたのですが Swift3 に対応しているものが見つからなかったので書きました。 キーに文字列リテラルを直接指定したくない UserDefaults のキーを文字列リテラルでやり取りするのはタイプミスなどのリスクが高く enum で管理したほうがコンパイルエラーでミスを検知できるのでオススメです。 import Foundation enum UserSettings: String { case…
Unity の uGUI でテキストをこんな感じに点滅させる方法です。 Update メソッドに処理を書いても良かったのですが個人的な好みで UniRX を使って実装してみました。Mathf.Sin メソッド(三角関数)を使ってアルファ値を0から1に緩やかに変化させています。 using UnityEngine; using UnityEngine.UI; using System; using System.Collections; using UniRx; public class FlashingText : MonoBehaviour { [SerializeField] privat…
AVAudioSequencerでMIDIファイルを再生して曲の終わりにコールバックを設定する方法
AVAudioSequencerでMIDIファイルを再生して曲の終わりにコールバックを設定する方法です。AVAudioSequencer 自体にそのようなコールバックがないので CoreMIDI のコールバックを使います。CoreMIDIはSwiftのブロックではなくてC言語の関数ポインタでコールバックを取らないといけないケースがあって大変です。 public class Sequencer { let callBack: @convention(c) (UnsafeMutablePointer<Void>, MusicSequence, MusicTrack, MusicTimeStamp,…
Unity で開発をはじめた頃、一番わけがわからなかったのがゲームを構成するオブジェクト同士の関係でした。ゲームオブジェクト?コンポーネント?トランスフォーム?なんじゃこれってなりました。Cocos2d-x や SpriteKit のように単純なノードツリーで構成されてないことにかなり戸惑いました。Unity を本格的に使い始めて3ヶ月ほど経ちそこそこ Unity 特有の世界観に慣れてきたのでこの辺りでクラスの関係をクラス図にまとめてみました。自分は2Dゲーム開発と uGUI を使った UI 開発で使うことがほとんどなのでその辺で使うクラスに絞って図にしてあります。 クラス図 補足 Unity…
Xcode 7.3 から Swiftのバージョンが 2.2 になりました。このバージョンから Swift 3 に向けた deprecated(非推奨)警告が出るようになったのでその対策です。 '++' is deprecated: it will be removed in Swift 3 結構話題になったインクリメント(デクリメントも)演算子の廃止の対策です。+=使えってことらしいです。Python もインクリメント演算子ないので、案外無くても困らないのかもしれませんね。 修正前 var i = 0 i++ 修正後 var i = 0 i += 1 「--」も同じで「-=」を使いましょう。 …
フロントエンド開発と iOS アプリ開発でステート管理に Redux(iOSはReSwift)を使っています。Unity でも Redux 使えないかなと探していたところ Redux.NET というC♯の実装を見つけたので使ってみることにしました。 手順 Redux.NET を使うためには Reactive Extensions というやつをインストールしないといけないのですが今のところ(2016年6月現在) Unity には対応していません。なので代わりに Reactive Extensions の Unity 実装である UniRx をインストールします。 UniRxのインストール Ass…
Swiftで開発した自作ライブラリを Bitcode に対応させるためには Xcode の Build Settings 項目に以下を設定する必要があります。 Enable BitcodeをYesにセット Other C Flagsに-fembed-bitcodeをセット(Other C++ Flagsには自動でセットされます) User-DefinedにBITCODE_GENERATION_MODEを追加してbit codeをセット 上記を設定しないとアーカイブアップロード時に ITMS-90668 Invalid Bundle Executable. The executable file…
SpriteKitでUIScrollView的なスクロール処理を実装する
SpriteKit でゲームやアプリを開発していると UI 系の部品がなくて困ることがあります。SpriteKit にはラベルしかなくボタンすらないです。ましてやスクロールビューなんて贅沢なものは当然ありません。現在開発しているアプリでどうしても必要になったので自作してみました(プログラムが複雑になるので横スクロールのみ実装しています)。 慣性処理のないスクロールノード まずはじめに一番単純な実装からいきます。指で動かした分だけラベルが横にスクロールします。慣性の処理がないので touchesBegan: withEvent: と touchesMoved: withEvent: の処理だけで…
React と Redux を使った Electron 環境を作ってみました
最近、デスクトップアプリ開発界隈で流行ってる Electron の環境を React と Redux を組み合わせて作成してみました。Redux は Swift にも移植されたたりしているので前から気になってました。せっかくなんでオリジナル Redux 触ってみようと思った次第です。 最終成果物的なソースコードはこちら Electron + React + Redux の最小構成 Boilerplate を作成しました。Boilerplate ってのは「再利用を意図した標準的な文例集」という意味で、必要最低限これだけあれば Electron + React + Redux 開発ができるよってこ…
Unity5.3のインストールからプロジェクト作成までの流れ
一昨年(2014年)の10月にスマホのネイティブゲームの開発をはじめたのですが、そこからずっと Cocos2d-x を使っています。同じゲームエンジンを使い続けると知識が偏るし ゲームエンジンのシェア的には Unity の方が大きそうなんで Unity にもチャレンジすることにしました。手始めとして昨年末にリリースされた Unity 5.3のインストールからプロジェクト作成までの手順をまとめてみました。 Unity 5.3のインストーラーをダウンロードする こちらから Unity5.3のインストーラーをダウンロードします。 Unity 5.3のインストール インストーラーの起動 ダウンロードし…
1年半ほど前から本格的にブラウザじゃないゲーム開発(ネイティブゲームって言うんですかね)を始めたのですが、Web の知識が全くと言っていいほど役に立たずほとんど一から勉強するみたいな感じでかなり苦労しました。自分は Cocos2d-x を使って開発していたのですが、機能を追加すればするほどどんどんゲームの動きが遅くなっていく...C++で開発すれば速いんじゃなかったっけ???みたいな状態でした。半年かけてなんとかゲーム開発できるかなぐらいになったものの、自分のやり方が正解だったのか全くわからずこれで良かったのかと悩んでいたときに出会ったのがこの本「Game Programming Patter…
6年前に開発したObjcのアプリをSwiftで書き直してみた
約6年前に LinkedWord という英英辞書アプリを開発しました。リリースからしばらく(2年ぐらい、時期的には iOS4とか5の時代)は機能アップデートやバグ修正をしていたのですが、本の執筆やら他のアプリの開発やらで忙しくなりしばらく放置してました。その間に iPhoneは5系や6系が発売され画面サイズが増えたり、iOS7で UI が刷新されたり、とわりと大きな変化がありました。本の執筆も落ち着いたし Swift を使ってアプリを1本ちゃんと開発したいと思ったので過去に開発した LinkedWord を作り直してみることにしました。以下やったことをつらつらと上げていきます。
OpenGL ES入門 その2 -三角形の描画とシェーダーの仕組み-
OpenGL ES入門 その1 -描画の仕組みとバッファ-の続きです。今回は OpenGL ES を使って三角形を描画してみます。三角形を描くだけなら簡単そうな気もしますが、三角形を描くにはシェーダーを用意しきゃいけないという少し面倒くさい作業があるのでその辺の説明になります。
最近 Cocos2d-x を触っているとどうしても細かいところで OpenGL の知識がないと理解できないみたいなことが多いです。いままで避けてきた感がある OpenGL の勉強をそろそろ始めてみようかなと思い少しづつ日記的にまとめていこうと思います。OpenGL と言っても自分はモバイルゲームの開発に興味があるので OpenGL ES について勉強していくことにしました。参考図書として購入した本はこちらです。 わりと新しく出た本ってのと解説がものすごくわかりやすかったので選びました。第1回は OpenGL ES の基本的なところから画面を色で塗りつぶすまで解説します。
「ブログリーダー」を活用して、グラスオニオンさんをフォローしませんか?
なんか無性にゲームが作りたくなったのでブラウザで遊べる簡単なゲームを作っています。 今のところまだ2つだけですが、少しつづ種類を増やしていきたいです。 マインスイーパ ライフゲーム 久しぶりすぎて基本中の基本であるゲームループの実装すら忘れてました。
標準地域メッシュは日本限定のガラパゴス仕様 普段、データ分析業務などで標準地域メッシュを利用しているのですが、この規格は日本限定でしか利用できずなんともガラパゴス感がありました。Quadkey や Geohash のように全世界で利用できるといいなと漠然と考えていて、なんかよい方法ないかなと探していたところ世界メッシュを発見しました。 一般社団法人世界メッシュ研究所 – Research Institute for World Grid Squares ブラウザで世界標準メッシュを利用してみたかったので自前で TypeScript でライブラリを開発しました。 開発したライブラリはこちら ブラ…
最近の個人活動 忘れないようにメモ Webサービス開発 Web Tools Texを出力するサービスとか地域標準メッシュやQuadkey、Geohashの可視化サービスなど。世の中インフレだけど年収が上がる気配が1mmもないので収入増を狙って作ってみた。しばらくはこのサービスを拡充したい。 tools.9revolution9.com OSS開発 anonypy Pythonのk-匿名化ライブラリ。勢いで開発して放置してたにも関わらず思ったよりもスターがついていてびっくり GitHub - glassonion1/anonypy: Anonymization library for pytho…
k-匿名化ライブラリ 個人活動でPythonでk-匿名化するライブラリを開発しています。l-多様化とt-近似化にも対応しています。まだまだ改善点たくさんありますが少しづつ良いライブラリにしていきたいとおもいます。 github.com 開発にあたりこちらの書籍がめちゃくちゃ参考になりました。 プライバシー保護入門作者:中川裕志勁草書房Amazon
今後技術記事はZenn.devに投稿します。 長年ブログに技術記事をかいてきましたが、フロー情報とストック情報を分けて投稿することにしました。 今後、技術記事はZenn.devに投稿します。 最近投稿したZenn.devの記事 最近は主にGoの記事を書いています。 GCPで理想の構造化ログを出力する方法 GoでHTTP/gRPCリクエストのレスポンスサイズを計測する方法 Go で標準出力に書き込まれた文字列のテストをする方法 Goでミドルウェアとインターセプターのテストをする方法 引き続き、本ブログをよろしくお願いします。 引き続き、お気持ち表明とか、近況報告、おすすめの本情報なんかはこちらの…
GCPマネージドサービス(GAE/GKE/Cloud Run)向けのGoのLoggerライブラリを開発しました。 github.com Google App Engine 第1世代のロガー(google.golang.org/appengine/log)からの移行ができるように関数のインフタフェースを揃えてあります。
ワイヤレスMIDI接続をしてアプリから他の端末にMIDIデータを送信したい CoreAudioKit の CABTMIDILocalPeripheralViewController を使うとiPhone(またはiPad)アプリ上に MIDI over Bluetooth LE のアドバータイズの設定画面を表示することができます。 上記画面の Advertise MIDI Service の項目をオンにするとアプリ側を BLE ペリフェラルとしてアドバータイズすることができます。 CABTMIDILocalPeripheralViewControllerを使わずにアドバータイズしたい Swift…
3年間放置していたiOSアプリをホームバーに対応させた話 かれこれ3年くらい放置していた iPhone/iPad 両対応のアプリをホームバーに対応させようと思ったら結構大変だったのでその記録です。 ちなみに放置していたアプリはこちらです。 ピアノ - 即興ピアノtaisuke fujitaミュージック無料apps.apple.com 対応前の設定はこんな感じ 4.7インチの iPhone(6, 6S, 7, 8, 第2世代SEなど1334 * 750ピクセル)をベースにiPadにも対応させるため、SKScene の幅を1334ピクセル高さを1000.5ピクセル(4:3)に設定し、アンカーポイン…
Time 型のフィールドを含む構造体を JSON にエンコード、JSON からデコードすると特定条件下で Time 型オブジェクトの time.Location の情報が失われることがあります。 以下のプログラムを見てください。 package main import ( "fmt" "time" "encoding/json" ) type Hoge struct { Name string CreatedAt time.Time } func main() { time.Local = time.UTC // Hoge構造体を生成する h1 := Hoge{ Name: "aaa", Cr…
Prometheus で収集した GKE アプリケーションのメトリクスを GCP の Cloud Monitoring(旧Stackdriver Monitoring) にエクスポートして Cloud Monitoring のダッシュボードを作成する方法を紹介します。Prometheus といえば Grafana を使ってダッシュボードを作成することが多いですが GCP 環境では Cloud Monitoring に一元化して監視できたほうが何かと便利です。あえて Grafana を使わず Cloud Monitoring でメトリクスを可視化します。 以下の記事で GKE 上に構築した Re…
こちらの記事で Prometheus の static_config を設定して Redis のメトリクスを取得する方法について紹介しました。 glassonion.hatenablog.com Prometheus で監視対象のサーバの設定をする方法は static_config の他に Service Discovery があります。static_config はわかりやすく簡単に設定できるので入門にはとても良いのですが、実運用を考えると static_config よりも Service Discovery を使ってメトリクスを取得するのがおすすめです。この記事では Service Di…
PrometheusからRedisの状態を取得する 私は普段 Redis を GKE 上に構築して使用していますが、GCP コンソール画面から得られる情報が Pod の CPU 使用率、メモリ使用率、ディスク使用率くらいしかなくもう少し細かい情報を得たいと考えていました。そこで Prometheus を使って Redis の状態を監視してしてみたところとても良い感じだったのでその方法を紹介してみたいと思います。 Prometheus を使うと Redis の INFO コマンドで得られる情報を時系列に見ることができます。Prometheus は機能が豊富でいろいろできるのですが、この記事では必…
以前の記事 go-mode + eglotを使ってEmacsのGolang開発環境を整える - A Day In The Life で eglot を使った Go の開発環境構築方法を紹介しましたが、今回は lsp-mode を使って環境を構築してみたいと思います。前回と同じく Go の Language Server は gopls を使います。 動作確認バージョン Emacs 26系 Golang 1.13.x Emacsは25以上、Golangは1.11以上なら問題なく動作するはずです。 gopls のインストール Go の Language Server は3種類あります(bingo …
GCP環境でRedisを使う GCP には Cloud Memorystore という Redis 互換のマネージドサービスがあるのですが、対応している Redis のバージョンが古い(4系)ので自前で GKE 上に Redis を立てることにしました。どうせ立てるなら master/slave 構成のほうが良いだろうということで Redis Sentinel にしました。 環境 GKE 1.13.6 Redis 5 Redis Sentinelって何? Redis Sentinel は master/slave 構成の Redis の監視を行ってくれるサーバソフトウェアです。自動フェイルオー…
普段 Golang でサーバコードを書くときはもっぱら Emacs を使っています。Go Modules に移行してから gocode が動作しなくなったので最近はやりの LSP(Language Server Protocol) を導入することにしました。Go の Language Server は gopls 、Emacs のLSPクライアントは eglot を使います 動作確認バージョン Emacs 26系 Golang 1.12.x Emacsは25以上、Golangは1.11以上なら問題なく動作するはずです。 gopls のインストール Go の Language Server は3…
日本の地域メッシュコードから緯度経度ポリゴンを算出する Python3.7 のプログラムを作成しました。 前回の記事の逆バージョンです。 Python を使って緯度経度から地域メッシュコードを算出する - A Day In The Life プログラム 3次メッシュコード(基準地域メッシュコード)から緯度経度ポリゴンを算出します。精度を出すためにミリ秒で計算しています。 # ミリ秒 MILLISECOND = 3600000 class Grid(object): def __init__(self, code, parent=None, divide=0): size = len(code)…
緯度経度(latitude, longitude)から日本の地域メッシュコードを算出する Python3.7 のプログラムを作成しました。 地域メッシュ - Wikipedia プログラム 緯度経度から1-3次メッシュコード(基準地域メッシュコード)を算出します。精度を出すためにミリ秒で計算しています。 import math # 計算の単位(ミリ秒) MILLISECOND = 3600000 class FirstGrid(object): def __init__(self, lat, lon): ''' 1次メッシュコード計算 ''' self.lat = lat self.lon =…
SRID=4612(JGD2000測地系+地理座標系)のgeometry型フィールドだとgeography型に変換できる postgres=> SELECT ST_SetSRID(geom, 4612)::geography FROM map WHERE id=1; st_setsrid ---------------------------------------------------- 0101000020041200006B405577CB756140404749F6A1BF4140 SRID=3857(WGS84測地系球面+メルカトル図法)のgeometry型フィールドをgeogra…
はじめに A Day In The Life(https://glassonion.hatenablog.com、以下当サイト)は、個人情報に関する法令等を順守し、個人情報を適切に取り扱います。 個人情報の管理 当サイトは、お問い合わせいただいた内容についての確認・相談、情報提供のためのメール送信(返信)の目的以外には使用しません。また知り得た個人情報を第三者に開示することは、警察・裁判所など公的機関からの書面をもった請求以外に一切利用いたしません。 広告について 当ブログでは、第三者配信の広告サービス(Googleアドセンス)を利用しており、ユーザーの興味に応じた商品やサービスの広告を表示す…
MarshalJSONを使ってJSONに表示用のフィールドを追加する 無限ループしないように元の構造体を拡張する // UTCな時間をJsonに変換するタイミングでJSTに変換する例 import "time" type Hoge struct { ID uint CreatedAt time.Time } func (h Hoge) MarshalJSON() ([]byte, error) { type Alias Hoge return json.Marshal(&struct { Alias CreatedAtJST time.Time }{ Alias: (Alias)(h), Cr…
標準地域メッシュは日本限定のガラパゴス仕様 普段、データ分析業務などで標準地域メッシュを利用しているのですが、この規格は日本限定でしか利用できずなんともガラパゴス感がありました。Quadkey や Geohash のように全世界で利用できるといいなと漠然と考えていて、なんかよい方法ないかなと探していたところ世界メッシュを発見しました。 一般社団法人世界メッシュ研究所 – Research Institute for World Grid Squares ブラウザで世界標準メッシュを利用してみたかったので自前で TypeScript でライブラリを開発しました。 開発したライブラリはこちら ブラ…
最近の個人活動 忘れないようにメモ Webサービス開発 Web Tools Texを出力するサービスとか地域標準メッシュやQuadkey、Geohashの可視化サービスなど。世の中インフレだけど年収が上がる気配が1mmもないので収入増を狙って作ってみた。しばらくはこのサービスを拡充したい。 tools.9revolution9.com OSS開発 anonypy Pythonのk-匿名化ライブラリ。勢いで開発して放置してたにも関わらず思ったよりもスターがついていてびっくり GitHub - glassonion1/anonypy: Anonymization library for pytho…