サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
ノーベル賞
hnakamur.github.io
2017-01-01 はじめに Running a Single-Instance Stateful Application - Kubernetes ではMySQLのrootユーザのパスワードを設定のyamlファイルに直接書いていましたが、 安全に管理するためにはSecrets - Kubernetes を使うべきとのことなので試してみました。 パスワードをsecretとして作成 Secrets - Kubernetes ではユーザ名とパスワードを作っていますが、ここではrootユーザのパスワードだけにしてみました。 以下のような内容でmysql-secrets.ymlというファイルを作成します。 apiVersion: v1 kind: Secret metadata: name: mysql-secret type: Opaque data: rootPassword: MWYyZD
2017-04-24 はじめに voormedia/rails-erd: Generate Entity-Relationship Diagrams for Rails applications を使って tootsuite/mastodon: A GNU Social-compatible microblogging server のER図を生成してみました、というだけの記事です。 Relax Ruby version requirement (#1901) · tootsuite/mastodon@0611209 のコミットに対して 生成したPDFが mastodon-er-diagram.pdf です。 たぶん今後更新しないので新しいER図が欲しい方は自分で生成してください。 生成手順 生成時にデータベースにアクセスするので、mastodonのソースを git clone しただけで
WindowsでCtrlとCapsを入れ替えた状態でControl+タップするためのSynapticsタッチパッドドライバの設定 2017-03-04 はじめに 英字キーボードのThinkpad X260でWindows 10を使っていてレジストリで左ControlキーとCapsLockを入れ替えると、Control+タップが効かないという事態になりました。 Windowsノート機で左CtrlとCaps Lockを入れ替えようとしたらハマった件(犯人はSynaptics) - Tetsu=TaLowの雑記(はてブロ版) を参考に設定したら解決できたのでメモです。 レジストリで左ControlキーをCapsLockを入れ替える 設定するときに毎回検索していたのでメモ。 以下のファイルを保存して、エクスプローラで選択、右クリックでポップアップメニューを開いて[結合]メニューを選択。 警告が出ま
2017-02-12 はじめに Beringei: A high-performance time series storage engine | Engineering Blog | Facebook Code という記事を読んで、Facebookが2015年に “Gorilla: A Fast, Scalable, In-Memory Time Series Database” という論文でGorillaという時系列データベースについて発表したものをBeringeiとしてオープンソースで公開したのを知りました。 この論文は読んだことがなかったので読んでみたのですが、時系列データベースのデータの特徴をうまく活かした独自の圧縮方法が興味深かったので、自分でも試してみたのでメモです。 Gorillaでは高い圧縮率によってデータをオンメモリで扱うことができるようになり、書き込みと問い合わせの速
2017-01-02 はじめに さくらのクラウドでPackerとTerraformを使ってCoreOS Container Linuxの環境構築をしてみたのでメモです。 パブリックアーカイブ・ISOイメージにCoreOSはあるのですが、現状では残念ながらバージョンが 367.1.0 (stable) とかなり古い状態です。 そこで https://stable.release.core-os.net/amd64-usr/ 以下にある安定版公式ISOイメージの現時点の最新版である 1185.5.0 を使ってPackerでさくらのクラウド上にマイアーカイブを作成し、それを元にサーバで使用するディスクとサーバを作成します。 さくらのクラウドにはスタートアップスクリプトという機能がありサーバの起動時に設定を行うことができるのですが、これが使えるのはCentOS、Debian、Ubuntuに限定され
2016-12-31 はじめに 検索してたら Why Kubernetes is winning the container war | Hacker News というHacker Newsのスレッドを見つけました。 実際に勝つどうかはともかく、実際に使っている人やMesosphereやRed Hatの人のコメントがあり、非常に参考になりそうです。このブログ記事を書くまで私は Kubernetes はろくに触ったことが無かったので内容はよくわからないですが、後日また見直してみたいところです。 上記のHacker Newsのコメントで以下の2つのチュートリアルが紹介されていました。このブログ記事はこのうち1つめのほうを試してみたメモです。 Kubernetes Bootcamp kelseyhightower/kubernetes-the-hard-way: Bootstrap Kubern
2016-09-15 はじめに pgool-IIを使ってPostgreSQLのアクティブ・スタンバイ(1+1構成)を試したのでメモです。 以下のページを参考にしました。 pgpool-II ユーザマニュアル pgpool-II watchdog チュートリアル(master-slave mode) pgpool-II 3.3 の watchdog 機能 — Let’s Postgres テスト用のAnsible playbook https://github.com/hnakamur/postgresql-pgpool2-failover-example-playbook に置きました。 LXD をセットアップ済みの Ubuntu 16.04 上で試しました。 LXD で CentOS 7 のコンテナを2つ作って環境構築しています。 PostgreSQL と pgpool-II は Pos
2016-08-02 Go言語(Golang) はまりどころと解決策の記事についてのコメント記事を誰かが書くだろうと思ってスルーしてましたが、見かけないので書いてみます。 ただし私はGo言語を使って開発していますが、言語自体を詳細に知るエキスパートでは無いです。Go言語にかぎらず個人的にはややこしいところにはなるべく近づかないスタンスなので、詳しい方から見ると物足りないかもしれません。そう感じた方は是非ブログ記事なりを書いていただけると嬉しいです。 interface とnil (Goのinterfaceは単なる参照ではない) 特にコメントはなくてそのとおりだと思います。 Frequently Asked Questions (FAQ)に加えて Effective Goも早めに読んでおいたほうが良いと思います。 またnilに関する文献としては Understanding Nil // Sp
2016-07-23 ストリーミング・レプリケーションの構築 — Let’s Postgres と PostgreSQL9.1ためしてみた【非同期レプリケーション編】 - ごろねこ日記 を読んで、2台のLXDコンテナを使ってPostgreSQLの非同期リプリケーションを試してみたのでメモです。 またPostgreSQL Replication - Second Edition | PACKT Booksが $10 と安かったので、買って非同期レプリケーションの章まで読みました。 手順はAnsible playbookとしてまとめました。 hnakamur/postgresql-async-replication-example-playbook ansible.cfg で ask_vault_pass = True と指定しているので、プレイブック実行時に Vault password:
2016-07-16 はじめに ソースコードって実際のところどういうふうに書いていますか?|Rui Ueyama|note を読んで参考になるなーと思ったのですが、はてブ見ても、みんなだいたい同じですみたいなコメントばかりで面白くないので、「上手い人」では無いかもしれませんが、私の書き方をまとめてみました。 ボトムアップアプローチ 私はわりと新規プロジェクトで一からコードを書くことが多いです。人が書いたコードを引き継いで保守した経験はほとんど無いような気がします。 私はトップダウン型で書くのが徹底的に苦手なので、常にボトムアップで書いています。 大規模なプログラムを汎用的に設計するとかは私には無理です。YAGNI大好き。 具体的なコードの書き方ですが、最初はドキュメントに書かれているサンプルコードをコピペして動かします。すんなり動くこともあれば、環境やライブラリのバージョン違いなどで多少手
2016-06-20 はじめに キーバリューストアについて調べていたらLSM-Treeというデータ構造とRocksDBが気になったということで調査メモです。ただし、それぞれの技術詳細を調査したり自分で検証してみたというメモではないです。 そうではなく、いろんな記事で言及されていたり、ソフトウェアで採用されているのが気になったというだけの浅いメモです。が、脳内バッファからあふれる量になったので自分用に軽くまとめ。 LSM Tree Log-structured merge-treeを略してLSM Treeと呼ぶそうです。概要はLog-structured merge-tree - Wikipediaを参照してください。 CockroachDBのデザインドキュメントのRead vs. Write Optimization Spectrumによると、B+ Treeというデータ構造は書き込みより読
2016-06-12 なぜ書いたか 仕事で複数のサーバで同じ処理を実行して結果を集めたいというニーズがあって、各サーバをgRPCのサーバにするという実装でとりあえず実現していました。でも、出来れば処理を実行するワーカーサーバから制御サーバに接続して繋ぎっぱなしにしておいて、制御サーバからジョブを送り込む方式にしたいなーと思っていて、家で実装を進めていました。 これまでに試したこと gRPCにBidirectional streaming RPCというのがあったので、hnakamur/grpc_notification_experimentで試してみたのですが、複数クライアントがサーバに接続した状態で、サーバからクライアントにジョブを投げても、1つのクライアントでしか処理が実行されないということがわかりました。 次に、ワーカーサーバから制御サーバにTCPのソケットで接続しておいて、制御サーバ
2016-05-07 はじめに LXC 2.0でCentOS 7のコンテナを動かしてみた · hnakamur’s blog at githubでLXC 2.0を試しましたが、今度はLXD 2.0を試してみました。 実は私は、コンテナをローカルホストでしか動かさないならLXC、リモートホストでも動かすならLXDという使い分けなのかなと漠然と思っていました。 上記の記事ではrootユーザでコンテナを作成するという特権コンテナについて書きましたが、非rootユーザでコンテナを作成する非特権コンテナについては書いていませんでした。 実は CentOS 7 の非特権コンテナも試していたのですが、 DHCP で IPアドレスが付与されないという現象が起きていました。私の当面の用途は開発環境構築でありホストOS側でroot権限はあることが前提なので非特権コンテナは調査しないことにしました。 一方、LX
2016-04-23 発端: Goでデーモンを書くのは無理と思っていたら実は出来るらしい Goでデーモンを書くのは無理と以前どこかで読んだ気がします。 ところが、Pythonで書かれたGraphite ProjectのcarbonをGo言語で実装したlomik/go-carbonの Features に Run as daemon と書かれていました。どうやって実現しているのか気になって調べてみたのでメモです。 go-carbonでデーモン化するための設定 Configurationに書いてありますが、設定ファイルの [common] セクションの user を指定して、起動オプションに -daemon を指定すればデーモンとして起動します。 コードリーディング デーモンとして起動するためのコードは以下のようになっています。 https://github.com/lomik/go-carb
2016-04-19 はじめに なぜDockerではなくLXCを使うのか コンテナと言えばDockerが有名です。Docker 1.9からネットワーク機能が大幅に良くなっていて、Docker Composeでコンテナを作成するとコンテナ名で名前解決できるようになっています。 また公式のCentOS 7コンテナも良くなっていて、Dockerfileに CMD ["/bin/init"] と書いておけば普通に systemd が起動するようになっています。 そして docker run に --privileged オプションを付けて実行すれば実行時に /etc/ などの下のファイルを書き換えることも出来ます。 しかしこのような使い方はBest practices for writing Dockerfilesと全く合いません。Dockerのベストプラクティスでは1コンテナ1プロセス、コンテナ
2016-01-08 事の発端は fluentd を使ってみようかと思って fluentd(td-agent)のインストールと設定 を読んだことで す。fluentd のデメリットのところを読んで、ちょっと気になりました。 Goで書かれたmoriyoshi/ikも気になったのですが、最近話聞かないし最終コミットも3ヶ月前だったので、今回は見送りました。 そこで、rsyslogでのログ転送について調査してみようと思いました。 rsyslog自体についてはこちらのスライド#logstudy 01 rsyslog入門が分かりやすかったです。 syslog形式での出力サポート nginx Logging to syslog Apache HTTP server Sending our web logs to syslog ErrorLogやCustomLogに以下の様な感じで書く。 CustomL
2015-12-15 はじめに Travis CIとcopr.fedoraproject.orgを使ってrpmをビルド・配布するのを試してみた · hnakamur’s blog at githubとmockコマンドでrpmをビルドする · hnakamur’s blog at githubの環境でいくつかrpmをビルド・配布してみたのですが、手元の環境でビルドを成功させるまでに試行錯誤するのと、coprにsrpmをアップロードしてビルド・配布するのが別の環境だと面倒なことに気付きました。 そこで、1つのdockerコンテナで両方を行えるようにしました。 Travis CIは外しました また、Travis CIは使わないようにしました。理由は2つあります。1つめの理由はgithubのプロジェクトごとにTravis CIのプロジェクトを作ってcopr APIのログイン名、ユーザ名、トークンを
2015-12-06 Packaging:SourceURL - FedoraProjectで知ったtipsの紹介です。 GitHubでプロジェクトの[Download ZIP]ボタンを押すと、ソースをZIP形式でダウンロードできます。 コミット数が多いプロジェクトだと git clone するよりも高速に取得できるので履歴が不要な場合には便利な方法です。 例えばopenresty/lua-nginx-moduleなら https://github.com/openresty/lua-nginx-module/archive/master.zip というURLになるのですが、 .zip を .tar.gz に変えればtar.gz形式でダウンロードできます。 また、 master の部分はブランチ名、タグ名、コミットハッシュを指定することも出来るので任意のコミットのソースを取得可能です。 好
2015-12-05 2015-12-15 追記 nginxのカスタムrpmをmockでビルドできることを確認してからcoprでビルド・配布する環境を作りました · hnakamur’s blog at githubという記事を書きましたのでそちらもご参照ください。 以下元記事です Travis CIとcopr.fedoraproject.orgを使ってrpmをビルド・配布するのを試してみた · hnakamur’s blog at githubでrpmを外部のサーバでビルドできるようになりましたが、試行錯誤中はこの手順だと時間がかかりますので、手元の環境でビルドしたいところです。 rpmbuild 私は最近までrpmbuildでrpmをビルドしていました。以下のコマンドでspecファイルの BuildRequires に書いたrpmをまとめてインストールすることが出来ることも最近知りまし
2015-10-22 以前Go言語のDependency/Vendoringの問題と今後.gbあるいはGo1.5 | SOTAを読んだのですが、その時は様子見にしていました。 しかし、仕事でGoを書くとなるとやはりVendoringは必要だろうと思い、遅ればせながら今回gb, tools/godep, mattn/gomを試してみました。 gbの不満 gbの例を見ると、自分のプロジェクトのトップディレクトリに src/cmd あるいは src/github.com/ユーザID/プロジェクト名 というディレクトリを作ってそこにソースを置く必要があるようです。 FAQにもWhy can’t I place source in $PROJECT/src?という項があるので、これは仕様のようです。 でもこれだと、自分のプロジェクトを他のプロジェクトで使いたい時に go get で使えないですよね。
2015-09-22 Ubuntu 14.04 (Trusty)にMySQL APT RepositoryからMySQL 5.7 (Development Release)を インストールするスクリプトを書きました。 Vagrantfileと共にhnakamur/noninteractive_install_mysql_from_apt_repository_to_ubuntu_trustyに置いてあります。 使い方 MySQL :: Download MySQL APT Repositoryをブラウザで見てmysql-apt-config_x.x.x-1ubuntu14.04_all.debのファイルのバージョンを確認し、スクリプト内の mysql_apt_deb_file変数の値をを適宜修正してください。 スクリプト内のmysql_root_password変数の値を設定したいMySQ
2015-08-31 背景と経緯 Goでもエラー処理にpanicを使えばスタックトレースが出力されます。でも、ライブラリでは panic するとエラー処理して続行したいときに困るのでpanicではなく return err を使うのが普通です。すると今度はスタックトレースが取れないのが残念だと思っていました。エラーが出た箇所でログ出力はするとして、やはりスタックトレースがあるほうがその関数までの呼出経路がわかってデバッグが捗ります。 標準ライブラリを見てみると、runtime.debug.PrintStack() という便利そうな関数を見つけました。が、これは出力先が標準エラー出力固定となっています。私はログファイルに出したいんですよね。 そこでドキュメントの関数のリンクをクリックしてソースを見てみます。 src/runtime/debug/stack.go - The Go Progra
2015-07-26 はじめに ここしばらくriywo/anyenvとyyuu/pyenvでPython 2.7.10をPython 3.4.3を使い分けてきたのですが、私の用途だと2系と3系の最新だけ使えればいいことがわかりました。 そこで、pyenvを止めてhomebrewのpython2と3を使うことにしました。自分用にPython2のvirtualenvとPython3のvenvで仮想環境を作る手順のメモを書いておきます。 事前準備 Python2とvirtualenvのインストール。 brew install python pip install virtualenv Python3のインストール。 brew install python3 インストールされるコマンドはpythonとpipがPython2用で、python3とpip3がPython3用となっています。 Pytho
2015-06-03 ふとGo言語でメモリマップトファイルを扱えるライブラリってあるのかなと気になったので探してみました。 標準ライブラリ Goのホームページでmmapで検索してみるとUnix系では実装があるみたいです。 Did you mean: Mmap と表示されているのでクリックしてみるとsyscallパッケージにMmapがあることがわかりました。 Munmapで検索してみるとこちらはMmapよりは実装されているOSが少ないです。syscallパッケージにMummapもあります。 Msyncで検索してみると5件ヒットしますが、未実装となっていました。 また、syscallパッケージにMmapとMunmapがあるといっても、Windowsでは実装されていません。 github.com/edsrzf/mmap-go ソース: edsrzf/mmap-go GoDoc: mmap - G
2015-04-27 go-nutsのメーリングリストの記事 https://groups.google.com/d/msg/golang-nuts/qTTBENO_Em0/Y4MCVZZ3c5sJ によるとdeferで呼ばれた関数の戻り値は捨てられるそうです。 https://groups.google.com/d/msg/golang-nuts/qTTBENO_Em0/UlI77BM2PUkJ で戻り値の変数に代入するという方法が紹介されていました。 これを参考に、deferでの後処理でエラーが起きた時はそのエラーを返す、ただし複数のエラーが起きた時は最初のエラーを返したいというときの書き方を考えてみました。 最初に書いたのは、上の記事で紹介されていたように無名関数を即時呼び出しする方式です。 https://github.com/hnakamur/cgoroonga/blob/70a
2015-04-25 Vagrant Cloudに上がっているUbuntu trustyのオフィシャルイメージubuntu/trusty64 | Atlas by HashiCorpをVagrantfileで参照していたら、 vagrant up の際に以下の様なメッセージが表示される時がありました。 $ vagrant up …(略)… ==> default: A newer version of the box 'ubuntu/trusty64' is available! You currently ==> default: have version '14.04'. The latest is version '20150422.0.0'. Run ==> default: `vagrant box update` to update. 以下のように実行するとアップデートが出来ま
2015-04-06 なぜHomebrew Caskをやめたか Mac の開発環境構築を自動化する (2015 年初旬編) - t-wadaのブログでもHomebrew Caskの不安な点について書かれていますが、私もHomebrew Caskは便利と思いつつも止めたいなと思っていました。 私が使うアプリに関してはほとんどがアプリ側で最新版のお知らせとバージョンアップの仕組みを持っています。あとHomebrew Caskは/opt/homebrew-cask/以下に実体を置いて~/Applications/や/Applications/にシンボリックリンクを貼るようになっています。 私はそこまで複雑な仕組みは要らないので、初期インストールがコマンドで半自動化できれば十分です。 dmgファイルのアプリをコマンドラインからインストールする osx - Install dmg package o
2015-04-06 概要 OSXを再インストールしたときなどキーボードやトラックパッドの設定を行いますが、 設定する項目が意外と多くて時間がかかります。 そこでJXA (JavaScript for Automation)で自動化してみました。 全自動ではなく半自動化と書いているのはパスワードの入力などは手動で行う必要があるからです。 きっかけはAppleScriptのUI elementsの記事を読んだこと 以前からAppleScriptでOSXの初期設定の自動化をやってみたかったのですが、 UI要素の調べ方がわからず諦めていました。 StackOverflowのapplescript - How to know the name of UI elements using Accessibility inspector (or any other tool) - Ask Differe
2015-02-22 なぜ ウェブアプリ開発をしているとInternet Explorerでの動作確認のためmodern.IEが欠かせません。が、インストール直後は英語環境になっているので、日本語環境での動作確認のためにはセットアップが必要です。 セットアップ手順は以下のQiitaの記事に書いたのですが、手数が多くて面倒でした。 VirtualBox - modern.IEのWindows 7で日本語の表示と入力をできるようにする - Qiita Windows8.xのmodern.IEで日本語を入力、表示できるようにする。 - Qiita それを自動化するコマンドラインツールmoderniejapanizerを作りました。実は2年ぐらい前にAutoItを使って作り始めたのですが自動制御がうまくいかないときがあって挫折していました。昨年暮れぐらいから再挑戦して、今回は勉強を兼ねてGoで実装
次のページ
このページを最初にブックマークしてみませんか?
『hnakamur.github.io』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く