タグ

ブックマーク / blog.64p.org (23)

  • golang プロセスのモニタリングってみんなどうしてるんですかね、という話 - tokuhirom's blog

    [9:43 AM] tokuhirom plack のアプリだと Plack::Middleware::ServerStatus::Lite とかで監視したりしますけど、go だとそういうのってどうやるのが一般的なんでしょうか? [9:47 AM] macopy https://github.com/fukata/golang-stats-api-handler github.com GitHub - fukata/golang-stats-api-handler: Golang cpu, memory, gc, etc information api handler. golang-stats-api-handler - Golang cpu, memory, gc, etc information api handler. [9:47 AM] https://golang.org/pk

  • CPU の system が妙に高いぞって時に犯人さがすには pidstat 使えば良い。 - tokuhirom's blog

    pidstat -h -u | sort -nr -k 5,5 | head すれば良い。 sudo yum install -y sysstat してインストール。 簡単に誰が system 消費してるかわかる [tokuhirom@centos-1gb-sgp1-01 ~]$ pidstat -h -u | sort -nr -k 5,5 | head 1462874412 0 27 0.00 0.22 0.00 0.22 0 kswapd0 1462874412 0 19281 0.16 0.09 0.00 0.25 0 cadvisor 1462874412 0 342 0.01 0.02 0.00 0.03 0 systemd-journal 1462874412 0 377 0.00 0.01 0.00 0.01 0 auditd 1462874412 0 262 0.00 0

  • jolokia につないで雑に情報を見るツールを書いた - tokuhirom's blog

    https://github.com/tokuhirom/jolokia-dashboard jmx/jolokia なサーバーがいっぱいたってるんだけど、いちいち jconsole の URL とか調べるのがダルい、という問題があり、そういったものをささっとアクセスできるようなウェブUIでも作っておくか、ということで作ってみた。 作ったのはいいんだけど、もっといい方法が発明されたのでこれはオクラ入りとなった。 UI は Angula.JS で開発されているが、なんだかんだいって AngularJS で書かれたアプリケーションは見通しがよく、これよりもよい JS のフレームワークが見当たらない。まあ、コンセプトを提示することが重要なので慣れてるやつでいい。 結果的に、数時間かけてコンセプトコード提示した結果、いい感じにデータをとれるやつを作ってもらったのでよかった。 (たぶん作成時間はそん

  • MySQL Connector/J を利用するときは cacheServerConfiguration=true を設定する - tokuhirom's blog

    MySQL は一般に接続コストが低いことで知られており、コネクションプーリング等しなくても使えるので便利。 だが、Java 用の MySQL Driver であるところの MySQL Connector/J はデフォルトでは数個のクエリを接続時に発行しており、デフォルトのままでは無駄に負荷がかかる。 デフォルトでは以下のように4つの準備クエリが発行される! どう考えてもおかしいですよね!やばいっす! 150108 9:18:11 5 Connect root@localhost on test 5 Query /* mysql-connector-java-5.1.34 ( Revision: [email protected] ) */SHOW VARIABLES WHERE Variable_name ='language' OR Variable_name = 'net_write_

  • Validation Night で話してきた - tokuhirom's blog

    なんかしらんけどスライドアップしようとしたら slideshare に拒否られてるので悲しみ溢れております。 とりあえず思ってることをいくつか。 相関バリデーションどうよ? ベーシックな単項目の Validation 以上のものを Validation framework でやろうとするのは悲しみしか産まないので、たとえば以下のようにしています。 List<String> messages = new Validator().validate(params); if (params.isHojin()) { if (!params.has代表者名()) { messages.add("法人は代表者名いれてね!"); } } else { } そこあんま気張ってもね、的な。 HTTP で Validation error 上げるとき 200 を返すべきか 200 を返すべきだと思います。 僕

  • AngularJS 嫌いな人が多い昨今について - tokuhirom's blog

    最近 AngularJS 嫌いという言説が多いですが、そういうことを仰る方々は主に先鋭的な JSer のように思います。 ただ、僕なんかの場合には、ユーザー向けの画面の構築などには AngularJS を使って書くことは最近はほとんどなく、JS を書くといえばもっぱら管理画面です。 管理画面の JS を書くにあたっては AngularJS way にのっかってやると非常に楽ですよね。管理画面を書いたりする上では vue-js とかで頑張って書くと見通しが悪くなったりしますし、こった動きなどは必要ないというところで angular.js ワリといいなと思っています。 もっといいものがあれば移りたいですが、コストをかけずに作りやすい管理画面を作るという意味ではやはり AngularJS にまだメリットがあるなあ、と思っています。 2.0 が出た時にこまるというのもありますが、実際は angul

  • maven central にリリースしてみた - tokuhirom's blog

    Maven central にあげようと以前奮闘してみたが、うまく行かずに諦めていた。 アカウントの登録まではいっていたのだが、なんかうまくいかなくて諦めていたのだ。 が、モリスさんのエントリを見ながら pom を設定していったら今回はなぜかうまく出来た。 http://d.hatena.ne.jp/tagomoris/20141028/1414485679 Maven central は難しいか? Maven central にアップロードするまでに間には以下のようなステップが必要になる。 JIRA にサインアップする JIRA でパッケージに対するアップロード権限を要求する gpg の設定をする settings.xml/pom.xml をセットアップする mvn release:prepare release:perform する このうち、最初の JIRA へのサインアップは難しい

  • nanobench - Java 8 で簡単にマイクロベンチマークをとれるフレームワーク作った - tokuhirom's blog

    Caliper や JMH などを試してみたが、案外あれは使うのが難しかったり、インストールが難しかったり、結果がよみづらかったりする。 Perl 5 に標準添付されているベンチマークフレームワークであるところの Benchmark.pm と同じぐらい気軽な感じで使えるベンチマークフレームワークが Java 8 用にあれば便利なのではないか、と思ったので作ってみた。 https://github.com/tokuhirom/nanobench 先日つくった HTML escape に関するマイクロベンチマークを nanobench を使って書きなおしてみる。 package me.geso.microbenchmarks; import me.geso.nanobench.Benchmark; import org.apache.commons.lang3.StringEscapeUtil

  • js-xlsx で js で excel のファイルを生成する - tokuhirom's blog

    Excel ファイルの生成、めんどくさいですよね。CSV の生成めんどくさいですよね。HTML を出力した上でさらにやるのはだるい、というわけで、HTML の DOM を解析して JS で XLSX 生成してダウンロードさせたらいいんじゃね?と思ってそういうのやれるやつ探したら、js-xlsx ってのがあった。 これをつかって、HTML のレポートから XLSX を生成するコードを書いた。なかなかうまく動く感じしてる。 http://tokuhirom.github.io/js-xlsx-demo/ td タグに class を指定すると数字カラムになる、みたいな感じになってるのがいいかんじです。 js-xlsx で生成したXLSXは、FileSaver.js で保存させてます。 デモで利用している JS は以下のようなものである。簡単でしょ。 "use strict"; var data

  • AngularJS で Controller の継承をしたい - tokuhirom's blog

    したいなっておもって、Google で検索したところ、stackoverflow で Can an AngularJS controller inherit from another contoller in the same module? っていうスレがあって、これで解決したっぽいのでメモ。 var app = angular.module('angularjs-starter', []); app.controller('ParentCtrl ', function($scope) { // I'm the sibling, but want to act as parent }); app.controller('ChildCtrl', function($scope, $controller) { $controller('ParentCtrl', {$scope: $scope

  • AngularJS を本気でつかうための tips - tokuhirom's blog

    最近、管理画面で AngularJS をつかってみている。 そんな中で、いくつか工夫した点があるのでそれをシェアさせていただきます。 XHR のエラーを表示する XHR のエラーがおきた際のハンドリングをいちいち手でかくのは非効率。管理画面とか中の人しかつかわないので、エラーがおこった旨を随時報告するだけでよい。 そんなケースでは以下のようにする。 angular.module('myapp.exceptionHandler', []) .config(['$httpProvider', function ($httpProvider) { $httpProvider.interceptors.push(function($q, $log, $rootScope) { return { 'responseError': function(response) { $log.error(res

  • Devel::NYTProf で Starlet/Starman (Plack) でうごくウェブアプリケーションのプロファイリングをおこなう方法まとめ - tokuhirom's blog

    Devel::NYTProf は Perl5 の世界でもっとも人気があるプロファイラである。表示が美麗であるし、ステップごとの処理速度が簡単にわかるのでとても便利だ。 そんな Devel::NYTProf であるが、Starlet/Starman のようなプリフォーク式のサーバーでうごくウェブアプリケーションとくみあわせる場合の方法論として、わかりやすい資料がみあたらなかったのでここに記すものである。 環境変数 NYTPROF を設定する Devel::NYTProf は環境変数で挙動を変えられる。 plack とくみあわせる場合には、以下のようにするとよい。 NYTPROF=sigexit=int:savesrc=0:start=no sigexit=int 通常、Devel::NYTProf は END { } ブロックでデータのファイナライズ処理をおこなうのだが、SIGNAL によっ

  • Web アプリケーションのロジックを手続きとして実装する話 - tokuhirom's blog

    yusukebe のObject::Containerを応用したModel呼び出し のあたりをよんでの感想ですが。 一時期 Catalyst の影響もあって、モデルのインスタンスつくったりなんだりもしていたのですが、結局のところウェブアプリケーションにおいては、モデルをがんばってオブジェクトにモデリングしようとか考えるよりも、つまり手続として扱った方がしっくりくるな、ということに自分の中でなりまして、最近は、ごちゃごちゃ考えるのをやめて、手続きとして実装しています。 yusukebe の例をベースにはなしをすすめると、コントローラを以下のようにかきます。 package MyApp::Web::Controller::Root; use Mojo::Base 'Mojolicious::Controller'; use MyApp::M::Entry; sub index { my $se

  • Q. Perl5 のどのバージョンをつかったらいいのですか? - tokuhirom's blog

    5.18.x, 5.16.x, 5.14.x をつかいましょう。 というのがフォーマルな回答です。日時点での Perl5 の最新版は 5.18.0 です。 このあたりのポリシーについては perlpolicyというドキュメントが公式ドキュメントとなっていますのでごらんください。 このブログエントリーでもかいつまんで説明します。 バグフィックス 私たちが「公式に」サポートするのは、最新の安定版とそのひとつ前の安定版のみです。 5.12.x以前のバージョンはもうサポートの対象外です。5.18.0がリリースされたら 「公式に」Perl 5.14.xのサポートを終了します。ただし、後述するセキュリティ アップデートの提供は例外とします。 バグがみつかっても、過去2つのメジャーバージョンにたいしてしかアップデートは提供されません。今でいうと、5.18.x と 5.16.x 以外にたいするバグフィッ

  • plenv 1.9.x のおしらせ - tokuhirom's blog

    plenv が 1.9.x になり、すべてが bash スクリプトになりました。基的には rbenv のコードのコピペとなっています。 前のバージョンにくらべてなにがすぐれているかというと、一番おおきいのは PERL5LIB と PERL5OPT をみなくなっているという点です。bash でうごいているので、perl つかってないのであたりまえですね。これにより、miyagawa さんのとこの Carton さんとの相性がグンバツによくなっております。 具体的には以下のようなケースでの問題が解消しています。 % PERL5OPT=-MDevel::Cover make test Can't locate Devel/Cover.pm in @INC (@INC contains: /Library/Perl/5.12/darwin-thread-multi-2level /Library

  • Harriet ー テストのときつかうにデーモンの取扱を簡単にするためのフレームワーク - tokuhirom's blog

    https://github.com/tokuhirom/Harriet/https://metacpan.org/module/TOKUHIROM/Harriet-0.01/lib/Harriet.pmテストのときにつかう mysqld, memcached, stf, groonga あたりのデーモンを、.t 単位で起動していては遅くてかなわない。かといって、あらかじめ起動させておくというのも。。 というわけで prove のプラグインとしてよしなにする、みたいなのをがんばってかく、というような試みがおこなわれてきたわけですが、どうもめんどくさい。 なんか適当にやったらうまくうごく、っていうかんじのカジュアルなツールがほしいな、なんておもったりするわけですよ そこで、Harriet ってのをつくってみました。 なんかこう、t/harriet/mysqld.pl っていうファイル名でこん

  • 日ごとの CPAN module アップロード数を可視化してみた - tokuhirom's blog

    日ごとの CPAN モジュールのアップロード数をHRForecastで可視化してみた。 感覚値としては5年ぐらい前より増えてる感じなんだけど、まあ実際そういう感じですね。

  • Perl でつくった web サイトを L10N する方法 - tokuhirom's blog

    Perl でつくった web サイトを L10N する方法について簡単に説明します。今回は、日語のサイトを英語でも表示できるようにするケースをあつかいますよ。今回は L10N の対象は Amon2 をつかったサイトとします。 基的な翻訳機能は Locale::Maketext::Lexicon を利用します。これはなんだかんだで出来がいいのでいいとおもいます。他にもいろいろあるけど、これが一番実績もあるし安定しているようにおもいます。また、一時期はメンテが放棄されてましたが、最近またメンテされるようになったようです。 メッセージのマークアップでは、まず、Perl コード中の日語のリソースを $c->loc(); でくくりましょう。 printf("ほげ\n"); みたいになってるところを printf($c->loc("ほげ\n")); みたいにするってことです。 つぎにテンプレート

  • Hasegawa方式の CSRF対策を試してみた - tokuhirom's blog

    Amon2 での実装例です。 使用感としては、 実装はそれほどむずかしくないトークンの保存をサーバー側でやらなくていいので楽といったかんじ。 管理画面とかでつかってみたらよいかもしれぬ。 use strict; use warnings; use utf8; use File::Spec; use File::Basename; use lib File::Spec->catdir(dirname(__FILE__), 'extlib', 'lib', 'perl5'); use lib File::Spec->catdir(dirname(__FILE__), 'lib'); use Amon2::Lite; { package Amon2::Plugin::Web::Hsegawa; use constant { REDIRECT => 10001, VALIDATION_ERROR

  • 汎用データフォーマットにたいする雑感 - tokuhirom's blog

    フォーマットの変更は、ユーザーに対して基的に不利益をあたえる バージョン情報が含まれているフォーマットならば問題はすくないユーザーはなにも考えたくないから汎用フォーマットをつかう できるだけなにも考えたくないゆるふわプログラマーがほとんどなのですYAML をみよ バージョンの差異と、プラットフォームごとの実装の非互換によってわけわかめである初期の時点でまともに実装できている処理系がすくなかったバージョン2を現在まともに処理できているのは libyaml ぐらいではないか? これはフォーマットの複雑さによるところが大きい1のライブラリと2のライブラリ、ユーザーには見分けがつかない状況 YAML::XS が2 で YAML.pm が 1 とどうしてわかる?非互換や、ユーザーのプログラムがこわれる変更は、まあなしね。Data::MessagePack2 とかがでたときに、たとえば AnyEve