タグ

ブックマーク / blog.shibayu36.org (14)

  • nginxのproxy設定ファイルも自動テストしよう - $shibayu36->blog;

    最近nginxでリバースプロキシの設定を書いているんだけど、設定のたびに番に緊張しながら反映していた。さらにその副作用として、nginxのファイルはリファクタリングされないという問題があった。 そこで反映する前にバグ等が見つかるようにnginx設定のテストを書きたいと考えた。今回はperlでテストを書いた。 どういうテストをしたいか やり方によってnginxの設定ファイルの分割の方法は違うのだけど、例えば以下の様なnginxの設定があり、それが別のファイルのhttpコンテキストの中にincludeされているという分割で考える。この時、この設定ファイルに書かれた内容が正しく動いているかテストを書きたい。 upstream app1 { server app1.host; } upstream app2 { server app2.host; } server { listen 8080;

    nginxのproxy設定ファイルも自動テストしよう - $shibayu36->blog;
  • emacsのmodelineでどのファイルを開いているか分かりやすくする - $shibayu36->blog;

    mode lineを出来るだけ良くしたい これまで mode-lineのモード情報をコンパクトに表示する - syohex’s diaryでごちゃごちゃしたモード情報をきれいにした smart-mode-lineを使い始めた - $shibayu36->blog;で、smart-mode-lineを使い始めたけど、あんまりカスタマイズ性が高くなくて断念 emacsにpowerlineを導入 - $shibayu36->blog;で、powerline.elにしたら使いやすいしカスタマイズ性が高いということが分かった 次の課題 モードの情報は整ったものの、バッファの情報が分かりにくい uniquify:これは便利。同名ファイルのバッファ名の識別文字列を変更する - ヒルズで働く@robarioの技ログにあるようなuniquifyというツールを使うものも、そんなにわかり易くない 簡潔にバッファ

    emacsのmodelineでどのファイルを開いているか分かりやすくする - $shibayu36->blog;
  • 自分が入れたEmacs便利拡張・設定集 (2013年版) - $shibayu36->blog;

    年末emacs設定大掃除をして、これは捨てられないと思った設定書いてく - $shibayu36->blog; 昨年に引き続き、2013年の自分のemacs.dを振り返るのをやろうと思います。 今年はemacsでいろいろできるようにする、という方向よりも、emacsでの基操作をどれだけ使いやすく出来るかということを中心にやって来ました。例えば .emacs.dの管理をどうするか コードリーディングや編集を速くするにはどうするか gitとの連携をどうやって簡単にするか この辺りについて1つずつまとめて行きたいと思います。 .emacs.dを管理する .emacs.dの管理って難しいですよね。僕も関西Emacsに参加してから自分が最新のやり方についていけてないなと感じたので、今年はいろいろと見なおしてみました。 基的なやり方としてはこんなかんじです。 外部elispはpackage.elと

    自分が入れたEmacs便利拡張・設定集 (2013年版) - $shibayu36->blog;
  • 社内用Docker Registryを立てる - $shibayu36->blog;

    Dockerにはimageを登録しておくためのregistryが用意されていて、https://index.docker.io/ にPublicなイメージを登録しておくことが出来ます。また、社内用など、Publicには出したくない時も自分でregistryを立てることが出来ます。そこで、今回は社内用Docker Registryの立て方について書こうと思います。 https://github.com/dotcloud/docker-registry を参考にします。 Docker Registryを立ち上げる 立てるのはすごく簡単で、docker runするだけでした。 $ docker run -p 5000:5000 -d stackbrew/registry これで実行したhostの5000番portにDocker Registryを立てることができます。 ここに対して、pushやp

    社内用Docker Registryを立てる - $shibayu36->blog;
  • perlでforkしたプロセスとの通信を簡単に行う方法が知りたい - $shibayu36->blog;

    今作っているもので、「forkした後、子プロセスの実行の結果を最後に親プロセスに通知し、親プロセスは子プロセス群の状態をまとめて取得する」、ということがやりたいのですが、モダンかつ簡単な方法って何があるんでしょうか? 具体的には use Parallel::ForkManager; $pm = Parallel::ForkManager->new(5); foreach $data (@all_data) { # Forks and returns the pid for the child: my $pid = $pm->start and next; # ... do some work with $data in the child process ... # 実行結果のサマリーを親プロセスに投げておく $pm->finish; # Terminates the child proc

    perlでforkしたプロセスとの通信を簡単に行う方法が知りたい - $shibayu36->blog;
  • 「capistrano設定の共通化(+ Tips集)」についてKyoto.rbで発表してきました - $shibayu36->blog;

    Kyoto.rbがあったので、Rubyのことはよくわからないながら、capistranoの話をして来ました。設定の共通化についてと、思いついたTips集を発表して来ました。サンプルはhttps://github.com/shibayu36/capistrano-deploy-sampleにおいてあります。 130207 kyotorb from Yuki Shibazaki capistranoとは デプロイ用ツール コマンド一つでアプリケーションのデプロイが出来たりする 特にRailsに特化してる capistrano設定を社内などで共通化したい 共通化しないとprojectごとでdeploy方法が違って死ねる とはいえ一つのファイルで管理していると破綻する 最近の共通化の方針 やりたいことごとにファイルを作って共通化する default設定, deploy用, cron, perlbr

  • emacsで、インストールしているperl moduleのソースを一瞬で表示する - $shibayu36->blog;

    emacsでperlのコードを呼んでいると、このモジュールの中身どうなってるんだっけって思って調べることがよくあります。そんな時、perldoc -mをemacs上で呼ぶと便利です。 emacs上でperldoc -mを使う方法はid:antipopさんがブログに書いていて、http://blog.kentarok.org/entry/20080702/1214926316を参照すれば使うことが出来ます。今回は更にそれを改造して、もう少し使いやすくしてみました。 perldoc-m 改造したperldoc-mは以下のとおりです。id:motemenさんの作ったpm-packages.plが必要になります。 ;; モジュールソースバッファの場合はその場で、 ;; その他のバッファの場合は別ウィンドウに開く。 (defun perldoc-m () (interactive) (let ((m

    emacsで、インストールしているperl moduleのソースを一瞬で表示する - $shibayu36->blog;
  • Working with Unix ProcessesをPerlで - $shibayu36->blog;

    以前 Working with Unix Processesというを読んだのですが、このがUnixにおけるプロセスについて非常にわかりやすく解説されていました。それで自分で内容をメモしてみたり、さらにわからないところを調べたり、参考のプログラムをPerlで書いたり(このではRubyで書かれています)してみたのですが、ブログにまとめてなかったので、ちょっと書いてみます。 (注意)書いていたらすごく長くなりました。興味のある方は、適当に時間のあるときにでもどうぞ。 Chapter 2 : Introduction プロセスのことを知るとコードを読むだけでは分からないややこしい問題が分かるようになるよ Chapter 3 : Primer Unixはユーザ空間とカーネル空間がある kernelの機能はsystem call経由で利用する ユーザ空間ではプログラムが動く manual man

  • perlでremoteのサーバでコマンド実行し、STDOUTとSTDERRをキャプチャする - $shibayu36->blog;

    perlでremoteのサーバにコマンドを実行したい時があります。こういう時はNet::OpenSSHが便利です。 Net::OpenSSHでコマンド実行するためには、以下を実行します。結果は手元のSTDOUTやSTDERRに出力されます。 use Net::OpenSSH; my $ssh = Net::OpenSSH->new('hogehoge.hostname', user => 'hoge'); $ssh->system('ls -x ~/'); さらにこの時のSTDOUTとSTDERRを変数に入れたい時があります。その場合は以下のようにします。 use Net::OpenSSH; my $ssh = Net::OpenSSH->new('hogehoge.hostname', user => 'hoge'); my ($stdout, $stderr) = $ssh->capt

    perlでremoteのサーバでコマンド実行し、STDOUTとSTDERRをキャプチャする - $shibayu36->blog;
    nkwhr
    nkwhr 2012/05/09
  • Server::Starterから学ぶhot deployの仕組み - $shibayu36->blog;

    以前http://tech.naver.jp/blog/?p=1369の記事を読んだのだけれど、それまでにprocessの知識が無かったりして、まったく理解できませんでした。そこでWorking with UNIX ProcessesやServer::Starterの中身を呼んでようやくhot deployの仕組みを理解できた(気になっている)ので、Server::Starterの実装を追いながら、それをまとめてみます。 hot deployとは hot deployとは「再起動の時にリクエストの処理を続けながら、変更の内容を反映するための手段」です。 通常serverをrestartさせるときは、stop -> startの流れになると思いますが、この場合stopしてから、start出来るまでの期間にリクエストを処理できない期間が発生します。その期間なしにdeployする仕組みがhot

    Server::Starterから学ぶhot deployの仕組み - $shibayu36->blog;
  • Web Applicationを綺麗に設計するためのMVACという考え方 - $shibayu36->blog;

    【2016/03/04追記】以前まとめたこのMVACという名前の設計は既に古くなっており、今はこのようなアーキテクチャで設計していません。 こんにちは。最近ははてなでMVACというアーキテクチャに則って開発をしているのですが、ようやく意味を理解できてきました。そこで今回は「Web Applicationを綺麗に設計するためのMVACという考え方」について、サンプルを交えながら説明していこうと思います。かなり長くなってしまったので、時間があるときにでもどうぞ。 MVACって? データソースやロジックを扱う「Model」、表示・出力を管理する「View」、複数のModelとControllerをつなぐApplication、ユーザのリクエストなどを受け取りViewやApplicationを制御する「Controller」の4つの要素を組み合わせてシステムを実装する方式。MVCをさらに抽象化した

    nkwhr
    nkwhr 2011/03/03
  • Mojolicious + Xslate + SkinnyでMVC開発環境 - $shibayu36->blog;

    Perlには非常に多くのフレームワークがあります。非常に大きいものにはCatalystやJifty、小さいものにはMojolicious、CGI::Application、HTTP::Engine、Dancerなどがあります。今Perlではフルスタックのフレームワークを使うよりも、小さいものを組み合わせてWebアプリケーションをつくっていくほうが流行っていると思うので、「小さいものを組み合わせ」ながらMVCで開発できるような環境を考えてみました。 今回はWAFとしてMojoliciousを、テンプレートエンジンとしてText::Xslateを、O/RマッパーとしてDBIx::Skinnyを用いて、MVCでWebアプリケーションを作る方法について順を追って解説します。 それぞれの簡単な説明 Mojoliciousとは SimpleなMVCのWebフレームワーク。軽いプロジェクトならMojol

  • 2-legged OAuthを理解する - $shibayu36->blog;

    APIの認証ってどうやってるんだろーって思っているときに、Google Dev Quizで2-legged OAuthの問題があったので、やりながら理解する事にした。perlで書いてみました。 OAuthのcpanモジュールを使った場合 この場合、簡単にできます。OAuth::Lite::Consumerにconsumer_keyとconsumer_secretとrealmを渡して作成してやった後、method, url, paramsを指定してrequestするだけです。timestamp値やnonceなどはすべて自動で付けて、署名を作ってくれています。 use strict; use warnings; use OAuth::Lite; use OAuth::Lite::Consumer; my $ua = LWP::UserAgent->new; my $request_url =

    2-legged OAuthを理解する - $shibayu36->blog;
  • モジュール作成からCPANに上げるまでの手順 - $shibayu36->blog;

    この前WebService::Bitlyというモジュールを作ってCPANに登録したので、忘れないうちにそれを行なうまでの手順をメモしておきます。これからCPANモジュールを作る人の参考になればと思います。 0.いろいろなドキュメントを読んでおく 間違ったモジュールをCPANに上げると迷惑がかかるようなので、最低限下のドキュメントは読んでおいたらいいと思います。 PAUSE: The CPAN back stage entrance perlnewmod - 新しいモジュールを配布するには - perldoc.jp 1.モジュール名を決めて、ひな形を作る まずモジュールの名前を決めます。CPANモジュールは、「このようなモジュールはこの名前空間」のような慣習があるようなので、それを考えながら決めます。 名前が決まったら、モジュールのひな形を作ります。僕はModule::Starter::PB

    モジュール作成からCPANに上げるまでの手順 - $shibayu36->blog;
  • 1