GoのバイナリをデプロイするためにGitHub ReleaseからDLするツールをGoで書いた

Go

GoのバイナリをデプロイするためにGitHub Enterprise(以下、GHE)のReleaseにアップロードしておいたバイナリをダウンロードするツールをGoで書いた話をする。 背景 複数の開発が並行していてGitHubのブランチと本番・ステージ環境が対応付けできなかったり、…

AWSでアラームの閾値を設定する

AWS

GoでLambdaを含むいわゆる一般的なサーバレスな環境(API Gateway <=> Lambda <=> DynamoDB + CloudWatch)を構築した。監視のためCloudWatchでアラームを設定する必要があったのだが、そのアラームでの閾値の考え方がよくわからなかったのでメモする。アラー…

UIの更新はmain threadから行う

iOSからAPIにリクエストを送って返ってきたjsonを画面に表示させたい、というシンプルな実装をしようとしたら詰まったのでメモする。まず、以下のように実装したがエラーが発生した。 @IBOutlet weak var myTextView: UITextView! func makeData() { let url…

GitHub Enterpriseからreviewdogを使用できないときに見るメモ

GitHub Enterpriseのバージョンが古い場合、新しいreviewdog( > 0.9.7)が動作しないので0.9.6のreviewdogを試してみるとよい。 GitHub & GitHub Enterprise Support: As of version 0.9.7, reviewdog completely switched to use new Pull Reqeust Review Co…

RFC2822のフォーマットでテキストを作成するパッケージを書いた

Go

前にgmail APIを叩いた時にRFC2822について調べたが、絶対にフォーマットを忘れる自信があったので簡単なパッケージとしてまとめた。 特にメールのヘッダーに日本語を使いたい時のフォーマットなんて覚えて置ける自信がまるでなかったので。 ブログで記事と…

Serverless Frameworkで複数AWSアカウントを切り替えられるようにする

AWS

serverless.com AWSのアクセスキーを登録すると~/.aws/credentialsに情報が登録される。登録方法は以下を参照。 https://serverless.com/framework/docs/providers/aws/guide/credentials#setup-with-serverless-config-credentials-command 通常だと上記リ…

Goでgmail APIを叩いて下書きを作成する

Go

Go Quickstart | Gmail API | Google Developers 上記を参考にした。サンプルコードは最後に記載する。実装してる途中でメールの題名に日本語を設定できず、RFC2822について調べる必要があったのでメモしておく。 RFC2822 https://www.ietf.org/rfc/rfc2822.…

Goでbase64エンコードを実装する

Go

base64を自分の理解のために実装してみる。 手順はこちらの記事がわかりやすいです。RFCで読むならこちら。 実装したコードは以下の通りです。ほとんど標準パッケージ。 package main import ( "fmt" "os" ) const encodeStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZa…

gitで開くエディタをemacsにする

gitでgit rebase -iするときにデフォルトでvimが起動するがemacsに起動してほしい。emacsで書きたいんだ。 というわけでその設定を行った。~/.gitconfigファイルに以下の設定を追加するだけでよかった。 [core] editor="emacs"

nginxでレスポンスをgzipで圧縮する

nginxでレスポンスをgzipで圧縮するための設定を調べた。 nginxでgzipモジュールを提供しているのでこれを利用する。設定例は以下の通り。 http { gzip on; gzip_comp_level 2; gzip_types text/plain text/css text/xml application/xml text/javascript ap…

Emacs × Go でタグジャンプ

helm-gtagsを使ってて、RubyとかPHP書いてたときにはうまくタグを作れてたんだけどGolangでうまく作れてなかった。以下の記事を見つけて試しにやってみたらうまくいった。 Using GNU GLOBAL · GitHub /usr/local/etc/gtags.confを上記の通り修正して以下のコ…

logrotateのタイミングでsupervisordのプロセスが落ちる

結論から言うと、ドキュメントちゃんと読んでなかったおれが悪い。 例えば、nginxのログに対してlogrotateの設定ファイルを書くと、 /var/log/nginx/*log { create 0644 nginx nginx daily rotate 10 missingok notifempty compress postrotate [ -f /var/ru…

Convert markdown to pdf

Mac

自分用メモ。 markdown-pdfを使用してmarkdownをpdfに変換する node.jsの公式サイトからnpmをインストールする Node.js markdown-pdfをインストールする $ npm install markdown-pdf 適用したいCSSをgithubからcloneする 自分はmixu/markdown-stylesを使用し…

golangでpanicをrecoverしたときにスタックトレースを表示する

Go

golangではそもそもpanicしないようにコードを書くべきだしpanicが発生するならここで発生するのだと把握した上でコードを書くべきだ、という認識はある。とはいえ、golang書き始めてまもないので「念のために」recoverをコードに書いておきたかった。 具体…

2017年を振り返る

2017年はWebエンジニア1年目の年だった。つらつらとやったことを振り返る。 最初の半年はRailsを書いていた。初めてのWeb開発だったので最初はさすがに覚えることが多く大変だったが、ビジネスロジックが中心だったので1ヶ月もするとだいたい慣れてきた。…

negroniの実装をちゃんと理解できていなかったので自分で書き直してみる

Go

以前、ミドルウェアをうまく扱うパッケージとしてnegroniを紹介したが、改めてコードを読むとちゃんと理解できていなかったので自分で書き直してみる。車輪の再発明。GitHubに上げるまでもないのでここに残す。 GitHub - urfave/negroni: Idiomatic HTTP Mid…

supervisorの起動スクリプト

supervisorの最新版をeasy_installでインストールしたら起動スクリプトがなかったので簡単なやつを書いた。centos6.7で /etc/init.d/supervisord として配置する。 #!/bin/sh # # supervisord - this script starts and stops supervisord # # chkconfig: 35…

deferでのrecoverのよくわからない挙動がよくわからない

Go

deferで呼び出した関数でrecoverした場合にはpanicは発生しない。 https://play.golang.org/p/Z0oJ2I26wq8 package main import "fmt" func main() { defer recoverFunc() panic("Panic happens!") } func recoverFunc() { if err := recover(); err != nil …

Goでgraceful restartをミニマムに書く

Go

前回の記事でgraceful shutdownをミニマムに実装した。その続きでgraceful restartをミニマムに標準パッケージのみで実装してみる。 takayukinakata.hatenablog.com 参考にしたのは以下のパッケージ。 github.com 実装 前回と同様、理解のために最低限の実装…

Goでgraceful shutdownをミニマムに書く

Go

graceful shutdownの仕組みがわかってなかったので自分でミニマムに実装してみる。 コード量が小さく読みやすかったので以下のパッケージを参考にした。 github.com github.com 実装 自分でミニマムに実装したコードは以下の通り。アクティブな接続が返って…

Goアプリケーションをsupervisorでdaemonとして起動する

起動したGoのアプリケーションをdaemonプロセスとして動かす。なお、Centos6.7を使用している。 Supervisor: A Process Control System — Supervisor 3.3.3 documentation Install $ wget https://bootstrap.pypa.io/ez_setup.py -O - | python $ easy_insta…

Goで始めるMiddleware その2

Go

前回記事を書いたがもう少し詳しく書く。 takayukinakata.hatenablog.com なぜGoでMiddlewareを書きたいのか 前回書き忘れていたところ。 おそらくだがフレームワークを使用している場合には、フレームワークがよろしくやってくれるので自分でMiddlewareをど…

Goの標準logでやってるintをasciiにする変換処理を見てみる

Go

Goのlogパッケージでやってるintをasciiにする変換処理が何やってるか最初わけわかんなかったけど、多少理解できたからメモしておく。対象のコードは以下の通り。標準で年月日をログの先頭に付与できる機能(2009/01/23 01:23:23 log-messageみたいな感じ)が…

Goで始めるMiddleware

Go

そもそもMiddlewareとは何かと言うと、私の認識ではアプリケーションの処理の前後で何らかの処理を行ったりするもの。例えば、ログを追加したりリクエストのAPIキーを認証したりする。以下の図がわかりやすい。 Laravel 5.0 - Middleware (Filter-style) | M…

CentOSでユーザ追加

DockerでGoの環境構築する際にCentOSでユーザ追加したのでメモ。 $ useradd -m -d /home/docker -s /bin/bash docker $ echo "docker:docker" | chpasswd $ echo "docker ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers useradd:新規ユーザの追加 chpasswdでパス…

Real World HTTP を読んだ

Real World HTTPを読んだ。前に読んだやつ。 www.oreilly.co.jp HTTPについてそれが作成されてきた歴史と併せて説明されておりわかりやすかった。RFCのリファレンスにもなっており、これを通して初めてRFCの内容を読んだ。ハイパフォーマンスブラウザネット…

ハイパフォーマンスブラウザネットワーキングを読んだ

www.oreilly.co.jp TCP, TLS, HTTPといったアプリケーションよりも低いレイヤーについて基本的な構造を説明し、パフォーマンスの観点からエンジニアはどう関わるべきかが書かれている。文章は読みやすかった。読み飛ばした部分もあるが10日間ほどで読み終わ…

Webエンジニアに転職して半年が経った

Webエンジニアに転職して半年が経った。 仕事にも慣れてきたのでこれまでとこれからについて整理しようと思う。 転職前 企業向けのパッケージ開発をしていた。Web経由で使用してもらうものではなく、お客さんのとこに作ったサーバにパッケージをインストール…

md2keyを使った

社内LTでスライド作るのにmd2keyを使った。便利。 github.com k0kubun.hatenablog.com 太字や取り消し線はまだ使えないらしい Rich texts · Issue #11 · k0kubun/md2key · GitHub とのこと。 調べてみた 実装できないかなと思って、applescriptで太字や取り…

Working With Unix Processes を読んだ

Working With Unix Processes (English Edition)作者: Jesse Storimer発売日: 2011/12/20メディア: Kindle版 クリック: 1回この商品を含むブログ (1件) を見る この前読んだ本と同じ作者が書いている。 Working with TCP Sockets を読んだ - tnakata's blog …