tnakata's blog

programming :-)

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/supervisors として配置する。 #!/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 …

Working with TCP Sockets を読んだ

Working With TCP Sockets (English Edition)作者: Jesse Storimer発売日: 2012/10/24メディア: Kindle版この商品を含むブログを見る 一通り読んだけど結構勉強になった。サンプルソースはRubyで書かれているから、Rubyを使っていてWebサーバとかソケットと…

'rails -v'コマンドは何をしているのか

‘rails -v'コマンドは何をやっているのか rails -vコマンドがどのような仕組みになっているか気になったので調べてみる。RailsのバージョンはRails 5.0.1。 which railsコマンドで実行ファイルの場所を取得する。 $ which rails ~/.rbenv/shims/rails rbenv…

Rubyではなぜmix-inでクラスメソッドを引き継げないのか

includeと継承の違い includeメソッドによりモジュールをinclude(Mix-in)してそのモジュールのインスタンスメソッドを使えるようになります。クラスメソッドは使えません。 instance method Module#include (Ruby 2.4.0) 一方、継承では親となるクラスのイン…