GoLand で goenv のSDKをつかう

go

GoLand 上で指定した Go のバージョンでプログラムを動かしたい。 複数バージョンの Go を管理する goenv があるのでこれを使ったが、GoLand のエディタ上では自動的には認識してくれない。そこで goenv で指定したバージョンを GoLand にも認識させる作業が…

Agones を minikube でさくっと試す

Agones Agones とは、Kubernetes でゲームサーバーをいい感じに管理できるやつ。 minikube で試す Kubernetes 自体がでかい概念でむずかしいけど、minikube であればノートPC単体で動かすことができるので、早速やってみた。 Install and configure Agones o…

#技術書典 6に初サークル参加(App Engine本を出しました)

4月14日に開催された技術書典6 にサークル参加しました。Google App Engine を使った Webアプリ開発入門の本です。 (▼PDF版は今でも販売中です!) castaneai.booth.pm 作って、頒布して、いろいろな学びがあったのでつらつらと書いていく。 本を作るきっか…

Mirakurun を用いたMac用TV視聴ソフト「Meruru」を作った

TVTest というソフトがあって、PT3などのチューナーがあればすぐにTVを視聴できる。しかし、TVTest は Windows 専用である。 ということで、Mac で楽に見る方法はないだろうかと探した…けどなかったので作った。 Mac OS用のアプリを作ったのは初めてで、Swif…

Go のエラー処理を整理

go

Go のエラー処理はけっこう独特。なにをもってエラーかというと、次の interface を満たすだけ。 type error interface { Error() string } めっちゃシンプル。でも、これだけで本当に実際にエラー処理やっていけるのか。 特定のエラーを判別する エラーによ…

go modules のつかいかたメモ

npm などのパッケージマネージャはよく使うのだけど、それに比べて go modules は最初「?」となることが多かったのでメモ すべてのはじまりは go mod init まず、始まりは go mod init である。これは npm init のように最初やる必要がある。 go mod init …

セマフォの引数ミスでctx timeout が無視されて永遠に待ってしまう例

Go のコードレビューしてて次のようなコードに遭遇した。sem.Acquire() にわたす ctx が context.Background() になってしまっていて、WithTimeline が切れても ctx.Done にいってくれない、ということがあった。 解決策としては、 sem.Acquire() に同じ ctx…

python 3.7 aiohttp をつかって並列リクエスト

最近あまり python を触ってなくて、久しぶりに見に行ったら async/await keyword が増えてた。さっそく http で並列リクエストしてみる。 asyncio をベースにした http library aiohttp を使った。 import aiohttp import asyncio async def req(url): asyn…

node_modules/ and Docker volume mount 問題と対策

最近のプログラミング言語はたいていパッケージマネージャーがある。 そいつが、必要なライブラリを入れてくれるのだが、Docker でこれを実現しようとすると、ちょっとややこしい。 この記事では、実例のひとつして Node.js とそのパッケージマネージャ npm …

Typescript 型定義ファイルのメモ

結局 module とは何なのか DefinitelyTyped/index.d.ts at master · DefinitelyTyped/DefinitelyTyped · GitHub 最近自分が使った expo の型定義ファイルみると、module 構文はどこにも使われていない。module は終わったコンテンツなのか? ここで1つ今ある…

2018年に(技術的に)やったこと

今年はお仕事的にも、趣味の技術的にも大きな進歩があった。 Google Cloud Platform 自分は2017年までいわゆるクラウドというものは全く触ったことがなく、さくらのVPSでWebアプリを運用するスタイルだった。 クラウドはよくわからないし、課金が怖いしやめ…

Angular 開発をやったあと、React に入門した

引用元:React vs Angular: An In-depth Comparison 少し前、趣味のアプリを Angular で開発した。さらにそのあと簡単な勉強として Vue.js を触ってみた。 Angular, Vue とやってきたら、やはりよく同列で語られる React.js も一度はちゃんとやっておきたい…

ffmpeg で「音量の最大化」をする

ここでいう「音量の最大化」とは、ピーク時の音量が最大になるようにすることをさす。 公式の方法だと、volumedetect でピークの音量を取得→その音量を volume change して音声だけ再エンコード という2ステップ必要。 https://trac.ffmpeg.org/wiki/AudioVo…

Windows においては、Node.js の最新版より LTS を入れたほうが良いのかも

npm i --save @google-cloud/datastore したら、grpc の gyp build でエラー。 しかも、途中で xxx.libz とかでた直後になんのエラーメッセージもなく Build failed!! とか言われるので意味不明すぎてたまったもんじゃない。 でも、Node.js v10 (LTS) にした…

Deep dive into WebSockets and HTTP/2 with SSE を読んだメモ

友達が Twitter で「これはいい記事」ってシェアしてたので、英語だけどがんばって読んでみることにした。 といったものの、Google 翻訳にかけるだけで十分読めたのでそれで読んだ。(最近の機械翻訳すごい) blog.sessionstack.com HTTP と 双方向通信、そ…

SECCON 2018 Quals - Block write up

問題は Unity で作られたゲームの apk ファイル。 起動するとフラグと思われる画像が回転しているが、邪魔なブロックが前にあって見えない。この邪魔ブロックを消し去ればよさそう。 apk ファイルを解凍して、中身の Unity アセットファイルを取り出す apk …

SECCON 2018 Quals - mnemonic write up

次のようなJSONファイルが与えられる。日本語が並んでる文字列から上下のハッシュ値?みたいなのを求めると良いみたい。 { "japanese": [ [ "d3a02b9706507552f0e70709f1d4921275204365b4995feae1d949fb59c663cc", "ふじみ あさひ みのう いっち いがく …

Active Record の哲学

rails で使われている ORM である Active Record。当たり前のように広く使われているが、Active Record は何を解決するのか? Active Record の哲学 README に書いてある。 Philosophy - rails/activerecord Active Record attempts to provide a coherent w…

Process Hacker を使ってかんたんDLL Injection

DLL Injection をするツールはたくさんあると思うが、Process Hacker でも簡単にできる ちゃんと Injection できたか確認するにはプロセスをダブルクリックして Modules タブを見るとよい

Go のミドルウェア Adapter パターンに美しさを感じた話

medium.com 間に処理を差し込みたいとき、直接中身をいじるのではなく handler を引数にとって、新しい handler で返す関数(decorator pattern?) なのが良いね。 そして、Go の http.Handler の仕組みってすげーってなった。 handler は本来は Handle() を…

Node.js Standard on Google App Engine はじめて触った

何もない状態から AppEngine にデプロイするまでの流れ npm init npm install --save express vim app.js # 簡単な express のサンプル書く echo 'runtime: nodejs8' > app.yaml gcloud app deploy これだけで Hello, World できた!すごいはやい!シンプル…

美しい Go の設計とコードを目指して

Step 1. コードの書き方を学ぶ コードレビューする際に気をつけるポイントをまとめた CodeReview Comments。 他の言語とは違っている Go 特有の事例をたくさん載せてくれている。 原文は英語だけど、日本語訳もある。 golang/go CodeReviewComments 日本語翻…

スクエア・エニックスのテクニカルカンファレンスに行った

これに参加してきた。ネットゲームの通信の話だいすきなのでとても楽しかった。 www.jp.square-enix.com スクエア・エニックス社内の具体的な事例をベースにわかりやすく話してくれたし、無料でこんなに技術公開するのすごい!!って思った。 以下講演中にと…

GAE/Go の嫌なところ2018年4月

Google App Engine (GAE) + Go の組み合わせはとても良くて、これでクイックにWebアプリが始められる!って感じなんだけどまだいくつかなんとかしてほしい点があるのでこの時点でメモっておく カスタムドメイン+ワイルドカード証明書ができない https://<service_name>.ex</service_name>…

PHP のネイティブ拡張 (PHP extensions) についてメモ

php

php --re <extension_name> | head -n1 で拡張の詳細なバージョン情報を見ることができる php-fpm の場合、restart php-fpm しないと拡張の変更は反映されない</extension_name>

PHP と MySQL とマイクロ秒精度

PHP とマイクロ秒 経過秒数を int で返すものだと、マイクロ秒は切り捨てられる date() \DateTime::getTimestamp() マイクロ秒までの精度で取りたい場合、次のいずれかでやる 小数点以下を含む秒として扱う(例)1.234567秒 マイクロ秒を整数として扱う(例…

トラックパッドできるだけ触りたくない

自分の使い方が悪いだけなのか、トラックパッドを高頻度で使うと指が痛くなる。 この癖は直りそうにないのでそもそもトラックパッドに触る回数を減らす方向でかんがえる 極力キーボードで操作する 現在トラックパッドでやってる頻度の高い操作は ウィンドウ…

PHP の実行のやり方についてメモ

php

phpはなんとなく、mod apache と php-fpm があって、とりあえず php-fpm 使うか、といった適当な認識でいっていたが、いい加減どういうふうにスクリプトが実行されるのか知りたくなったのでメモ。 "SAPI" について知る ちょうど最近良い資料があがっていたの…

画像をDBに保存する

DBに画像などのメディアファイルを保存したい場合、保存する情報は次の2つに分けてかんがえる 画像の実体(バイナリ) 画像のメタデータ(名前、形式) 実体はどこに保存するべきか いまどきだと、クラウドサービスを使うのが良いと思う。 Amazon S3 Google …

minikube 入門した

最近は kubernetes (k8s) が人気。ただ、k8s は大規模なアプリでも耐えられるような設計なので、概念がめちゃ多くて理解がむずかしい。 ローカル環境開発では、そんなたいそうな物はいらないので、docker-compose を使うと簡単で良い しかし、それだとローカ…