備忘録、はじめました。

作業したこと忘れないようにメモっておきます。

Nginx (reverse proxy) + Phoenix でschemeを強制的にhttpsにする

memo: たどり着くのに時間が掛かったで残しておくことにした. 課題 oauth認証にueberauthのライブラリを使っていた callback urlを動的に生成させるときに Plug.Conn のschemeを参照している backend側のサーバーはhttpで動かしたい それだと Plug.Connのsch…

erlangでsnowflakeを実装してみた

はじめに erlang製のsnowflakeほしいなと言う思いで色々探していて、思い描く感じのがなかったので自作してみた話。 リンク: GitHub - tkyshm/esnowflake: Uniq id generator based on Twitter's snowflake in Erlang 実装 snowflakeのアルゴリズムに関して…

erlangでfluentdクライアントのOTPアプリケーションを実装した

はじめに アプリケーションにログ、データを集めたりするのにしばしば利用される Fluentd というソフトウェアのクライアントをErlang/OTPで実装した話です。 本家のerlangのfluentdのクライアント の実装を眺めていて、 gen_eventで実装されていたため、過負…

Erlangのバージョン管理ツール自作

前はkerlを使って複数バージョンを持ってたけど、buildのときのoption指定とかが思う感じに指定できなかったので自前で用意した話。 GitHub - tkyshm/erlch: Erlang version manager やりたいことは、erlのバージョンを気軽に切り替えられることと、インスト…

Erlangプロセスのmessage_queue_dataの影響について見てみた

前回の「Erlangのメッセージングでバッファを使う - 備忘録、はじめました。」でバッファがないときに大量のメッセージを送受信すると非常に遅くなることが分かりました。 この劣化の要因は大量のメッセージを一斉に送信していることです。 なので、プロセス…

Erlangのメッセージングでバッファを使う

Erlang Angerの3章、3.3.2あたりで過負荷についての対処法として、キューのバッファを作るのが効果的という話が載っていたので、実際にどのくらい差が出るのか簡単に計測してみた話です。 問題設定: この二つの設定に対して、1,000〜500,000メッセージをben…

go-i18nで必要なjsonをgoのソースコードから生成するgoi18n-parser

モチベーションとして、 多言語対応をしたい goのソースコードから自動で翻訳ファイルを作成したい シンプルでいい(複雑な機能は要らない) があり、最小限で作ってみたので紹介します。 github.com goi18n-parser goi18n-parser ではソースコードの解析に …

Dockerで手元にmysqlレプリケーション環境を構築

はじめに 手元でレプリケーションの挙動とか、遅延の再現や復旧方法を見直したい場合などに手軽に実験や確認できる環境が欲しい。 Vagrantとかで一つ一つインスタンス立ち上げるのもヘビーなのでdockerで構成させたい、といった理由で作ってみました。 TL;DR…

httptestでWriteHeaderができなかった話

はじめに goでhttpのhandlerのテストを書いているときに詰まったところを書きます。 詰まったところは、httptest.NewRecoder()の再利用ができなかったことです。 正確には、再利用する方法はあるかもしれないがよくわからなかったので、再度NewRecoder()を呼…

goのバージョンを切り替えるだけのスクリプトコマンドを作成

はじめに goのバージョンだけを単に切り替えたかったので、goのバージョンを切り替えるだけのスクリプトコマンドを作りました。 自分用でサクッと作ったため、installのファイルはlinux-amd64のみ対象としちゃってます。 インストール ソースをダウンロード…

Chefで複数リソースに更新があった時だけbashを実行

はじめに cookbookのfilesの中に大量のtomlファイルが入っていて、各tomlファイルに対してコマンドを実行したい場面に直面しました。 ファイルの更新が合った時だけ、そのコマンドを実行したかったので、その時の作業をメモします。 目的 confファイルが更新…

レキシカルスコープとダイナミックスコープ

はじめに レキシカルスコープとダイナミックスコープの違いについて簡単にまとめてみます。 メモ 以下、サンプルコードを元にして説明していきます。 1: func X(){ 2: print(s) 3: } 4: 5: func Y() int{ 6: s := 12 7: X() 8: return s 9: } 上記のコードで…

Dockerでoperation not supportedが出てきた話

はじめに DockerでイメージをbuildしようとDockerfileの作ってbuildしてみたものの、 operation not supported というメッセージでRUNで記載したコマンドが実行できない事象に陥りました。 解決方法 LXCを導入したい場合、以下必要なことがわかりました(根…

Riak searchを使ってみた

はじめに Riakで全文検索してみたいと思い、Riakのsearch機能を利用する準備で行った作業をまとめました。 利用環境 Ubuntu server 14.04 Riakのホストは192.168.56.101 Riak 2.0.5(from source) 前準備 ビルドしたriakの設定ファイルetc/riak.confの"sear…

Cowboyでobserverを起動するメモ

目的 軽量HTTPサーバcowboyのアプリケーションをErlangの監視ツールobserverで視覚的に監視できるようにしたい。 実施内容 relx.configの編集 レシピ relx.configの作成したアプリケーション名(以下app_name)の他に、 wx observer runtime_tools の3つを追…

Riak 2.1.0をソースからインストール&クラスターの構築

はじめに ※ 2.0.4から2.1.0に更新しました。 以下、準備するものになります。 virtualbox Ubuntu Server 14.04 1ノードのスペックは以下になります。 * MEM: 1024 MB CPUs: 1 core HDD: 10 GB NIC: 2枚 (ひとつはNATで、もうひとつはホストオンリーアダプタ…

GitLab7.6.2の検索フォームでUTF-8の文字列を使う場合

問題 検索フォームでUTF-8のも文字列を使って検索してしまうと次のようなエラーが出てきます。 Encoding::CompatibilityError (incompatible encoding regexp match (UTF-8 regexp with ASCII-8BIT string)): app/models/repository.rb:162:in `method_missi…

Ubuntuでriakをインストールするときにやったこと(まとめ)

はじめに riakをインストールしようとした時に、コンパイルでこけたり、実行時にWarningを喰らったりしたので、その問題を解決するために必要なことをまとめました。まず、はじめに今回やったことを箇条書きにします。 apt-get install libpam0g-dev を実行…

Dockerのコンテナに任意のIPアドレスを割り当てる方法

はじめに Dockerのコンテナは起動すると次の2つが自動で行われます。 veth(Virtual Ethernet)インターフェスの生成 docker0(インターフェース)のIPアドレス空間からIPアドレスの割当て 2つ目のIPアドレスの割当ては昇順に自動で引っ張ってきます。 し…

webmachineとAJAX

はじめに 2014年5月30日現在、アプリケーションの開発で、バックエンドにwebmachine、フロントエンドにAngularJSを選択しようと考えています。その2つのやりとりでCORSの問題が起きるので、回避方法をメモします。主にやることは、webmachine側のAccess…

webmachineの設定ファイルを作る

はじめに webmachineはErlang製の軽量Webツールキットの一つです。デフォルトだと、webmachineで作るアプリケーションの設定はerlangソース内で記述する形になります。私は設定ファイルを別で分けたかったので今回その作業についてメモします。注意として、w…

はじめに

いろいろ作業をやったのはいいけど忘れてしまう事もある。 忘れてしまってもすぐ取り出せるよう、内容をブログにまとめて残しておきます。 また、書いた内容が、他の方の参考になれば幸いです。 tkyshm