タグ

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

  • orelang を Java で実装してみた - tokuhirom's blog

    http://qiita.com/shuetsu@github/items/ac21e597265d6bb906dc わりとよくある JSON ベースの lisp っぽいインタープリタの実装ですが、コードを見ていてもよくわからなかったので自分で実装しなおしてみました。 package com.example; import java.io.IOException; import java.util.HashMap; import java.util.List; import java.util.stream.Collectors; import com.fasterxml.jackson.databind.ObjectMapper; public class OreLang { HashMap<String, Object> vars = new HashMap<>(); private

    kazuhooku
    kazuhooku 2016/09/30
    Javaっぽくない! #ほめてる
  • [java] SnakeYaml の機能を利用して Java でも YAML の custom tag を利用する - tokuhirom's blog

    YAML には tag という型を規定する機能がある。 ! が文書固有の型で !! がグローバルな型。 see http://yaml.org/type/ h2o の 2.1 では以下のような設定ファイルが書けるようになるそうです。 !file がカスタムタグになっていて、設定されているハンドラによってファイルが読み込まれる。 hosts: "example.com": listen: port: 443 ssl: !file default_ssl.conf paths: ... "example.org": listen: port: 443 ssl: <<: !file default_ssl.conf certificate-file: /path/to/example.org.crt key-file: /path/to/example.org.crt paths: ... 同じ

    kazuhooku
    kazuhooku 2016/09/26
  • jailing を golang に移植した - tokuhirom's blog

    なぜ golang に移植したかというとまあ以下のような理由です。 https://github.com/tokuhirom/jailingo/ capabilities で制御したかった jailing は perl で記述されているために、setuid/setcap などで制御することが難しい 今時 suid-perl 使うのもなあ、という。 C で書くと getopt の処理とかだるい C++ で書くと、ビルドとかで悩むのがめんどい golang は segv しにくくて楽 golang で記述することにより、良い面もあるが一方で、普通に golang で記述すると、clone() したあとに処理を挟むことができないので、CLONE_NEWPID | CLONE_NEWNS とかしたあとに mount したいという要望が叶えられない。ので、いったん /proc/self/exec を

    kazuhooku
    kazuhooku 2016/07/17
  • Perl5 での Plack に当たる Crust をみんなで作った話 - tokuhirom's blog

    この記事は Perl 6 Advent Calendar 2015 の1日目です。 Perl 6 は、2015年のクリスマスにリリースされることになっており、我々としてはそれを待ち受ける必要があると考えました。 Perl6 がリリースされた暁には、いろいろ遊ぼうかなという気持ちをみなさんお持ちだと思います。 Perl6 には夢が詰まっており、様々な機能が含まれている夢の言語です。 そういった、夢の機能については今後、クリスマスまでの間に、語られていきますが、稿では、現実的な話をします。 今年のクリスマスに Perl6 がリリースされるぞ、という宣言がでたわけですが、そうなってくると、Perl6 をクリスマスから早速遊びたいなと思うわけですよね。 そして、私は web engineer なので、 Perl6 が出たら早速 web application を書きたいと思うわけです。 しかし、

    kazuhooku
    kazuhooku 2015/12/01
  • h2o の fastcgi サポートで Plack::Handler::FCGI を動かす - tokuhirom's blog

    h2o で PHP を FCGI で動かすという話題が最近見かけますが、もちろん h2o+FCGI+Perl も快適に動作します。 具体的には以下のように書けばよろしい。 listen: 9090 hosts: default: paths: /: file.dir: /path/to/htdocs/ fastcgi.spawn: "exec /opt/perl-5.18/bin/plackup -s FCGI --nproc 10 /path/to/app/" 簡単すぎて、とくに解説することがないです。 h2o+FCGI で運用した場合のメリットとして、Starlet 等の application server を立ち上げる場合と異なり、application server のプロセスを daemon tools や systemctl 等で管理する必要がないというメリットがある。 一方

    kazuhooku
    kazuhooku 2015/08/18
  • apache bench(ab) が OSX で刺さった夜は - tokuhirom's blog

    ある日、OSX Yosemite で apache bench でベンチマークを使っていると、なぜか stuck して困っていた。 ab -c 10 -n 16500 http://127.0.0.1:5000/ どうも、対向サーバーを jetty にしても plack にしてもダメなので、なんなのかな~と。。 ab そのものを疑ってみる いろいろ調べてみると、対向サーバーを変えても同じような感じで刺さるのでどうやら ab の側に問題があるのかな、と思って調べてみたところ、OSX Lion の時代にそのような問題が話題になっていたようだ。 最新版の ab は以下のようにして入れることができる。 wget http://ftp.tsukuba.wide.ad.jp/software/apache//httpd/httpd-2.4.12.tar.bz2 tar xzvf httpd-2.4.1

    kazuhooku
    kazuhooku 2015/07/10
    ドヤァ > 「「16325 みたいな数値をみたら、あー ephemeral」ってわかるもの」
  • Server::Starter から簡単に Java プロセスを起動できるようになった - tokuhirom's blog

    JVM には inetd から起動するときのために、file descriptor 0 をソケットとして開く機能がついている。Jetty 等もこの機能に対応しているので、簡単に利用できる。 file descriptor を 0 に固定出来る機能が Server::Starter にあればよかろうということで、以下のような指定で起動できるように実装した。 $ start_server --port=20000=0 java EchoServer この機能により、Java も LL と同様な形態でアプリケーションを運用することが可能となる。 Java では昔から ClassLoader 機構を利用することによりホットデプロイを行うことが可能だが、リソースの解放が漏れるなど開発時の難しさが指摘されている。 Server::Starter 方式では JVM のプロセスごと死ぬので、綺麗な状態で都

    kazuhooku
    kazuhooku 2015/05/29
    tokuhirom++
  • Server::Starter を Java で利用する方法。または、System.inheritedChannel() の挙動について - tokuhirom's blog

    Server::Starter を Java でも使いたいなあ、そうすれば LL の場合と同じような運用ができるなあ、という要望をたまに稀によく聞きます。 そんなときに決まって返される答えは、fdopen できないから無理じゃないすかね。。 ということである。 SO_REUSEPORT しよう SO_REUSEPORT なら、java でもちょっとの工夫で使えるんじゃないの? っていう説が出てくる。 で、頑張れば jetty で SO_REUSEPORT 使っていい感じに実装できそうだな、ということはわかって、サンプルコードも書いてみた。 しかし、実装してから指摘されたのだが、弊社では CentOS 6 が標準となっており、CentOS 7 が来るのはいつになるのかさっぱりわからない。 つまり、とりあえずしばらくの間は実践で使える可能性がほぼないということだ。 とりあえず、出来たものは出来

    kazuhooku
    kazuhooku 2015/05/29
    あとで
  • Perl6で「ソフトウェアエンジニアならば1時間以内に解けなければいけない5つの問題」の5問目を解いてみた - tokuhirom's blog

    http://qiita.com/tag1216/items/25ff0f957340c54ae73c Perl6 だと eval が EVAL になってるのと、文字列結合演算子が ~ になっているのと実行が異常に遅いこと以外は違いはない。 calc(1, 1); sub calc { my ($b, $n) = @_; if ($n==9) { say $b if EVAL($b) == 100; } else { for ('+', '-', '') { calc($b ~ $_ ~ ($n+1), $n+1); } } } Perl5 なら以下のように極めてわかりやすく記述することが可能。 my $x = 1; for ('+', '-', '') { my $x = $x . $_ . 2; for ('+', '-', '') { my $x = $x . $_ . 3; for

    kazuhooku
    kazuhooku 2015/05/27
    perl5の解がいいな
  • Linux 上で5秒で chroot jail を使えるコマンド「jailing」が凄い! - tokuhirom's blog

    https://github.com/kazuho/jailing/ kazuhoさんがやってくれました。 ずいぶん前からlinuxでchroot jailを作るのに簡単な方法ないかなーと思ってました。個人的にはsystemd-spawnというのを使ってたのですが、幾らか気に入らない所があったり構築に時間がかかったり、ディスク容量を消費していました。簡単に使えて、ディスク容量を消費しないやつがほしいなーっておもってたんです。 とあるIRCで昨日、kazuhoさんと「ほしいですよねー」という話から始まって、github にある docker とかも物色しながら「いいのないねー」とか言ってたらkazuhoさんが「もすこし綺麗に書けそう」って言い出して朝から格的に書き始めてついさっき出来上がりました。速いw 名前はjailing とても小さく、実装コードだと100数十ステップ程です。しかもpe

    kazuhooku
    kazuhooku 2015/05/13
    mattnコピペふたたびw
  • mprofile を Python に移植した - tokuhirom's blog

    http://developer.cybozu.co.jp/archives/kazuho/2009/07/mysql-539d.html SHOW FULL PROCESSLIST を 0.1 秒ごとに1000回取得し、その結果を眺めるという kazuho さんが書いた mprofile という便利スクリプトがあります。 これは Perl で書かれていて、それはそれでいいんですが Python で書きたいというアレがあったので Python で書きなおした。 (お察しください) https://github.com/tokuhirom/mprofile-python # Python port of mprofile(MySQL profiler) This is a port of mprofile(written in perl). Original repo is here: ht

    kazuhooku
    kazuhooku 2015/01/07
    「お察しください」と言いつつMOTIVATIONに書くメソッドw
  • AngularJS 嫌いな人が多い昨今について - tokuhirom's blog

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

    kazuhooku
    kazuhooku 2014/11/21
    「最近PHP嫌いという言説が多いですが、そういうことを仰る方々は主に先鋭的なプログラマのように思います〜もっといいものがあれば移りたいですが、コストをかけずに作りやすい掲示板を作るという意味ではやはりPHPに
  • LL から Java に移行した人がはまりがちなこと - tokuhirom's blog

    こんにちは。Java 初心者です。 Java 初心者、得に LL から Java に来た人にありがちな問題について社内向けに書いたものをオープンアンドシェアさせていただきます。 前提として、我々は Java 8 でガンガン攻めているということをご承知おきください。 また、自分がこの数ヶ月で「うわー。こうしとくべきだったのかー」と気づいたやつをドヤ顔で語っているということにもご注意ください。 【追記】 対象は中規模 B2C の場合です(中規模というのは facebook より小さいという程度の意味です) 例外を握りつぶさないようにしよう Eclipse が生成する以下のようなコードをそのまま残しているケース。 これは言うまでもなく良くないですね。デバッグが困難になります。 try { } catch (IOException e) { e.printStackTrace(); } Perl

    kazuhooku
    kazuhooku 2014/10/01
    「我々は Java 8 でガンガン攻めているということをご承知おきください」
  • YAPC::Asia 2014 で Test::Kantan というライブラリについて発表してきました - tokuhirom's blog

    ご査収ください。 今回のカンファレンスでは Test::Ika は ikasam_a さんの好きにしていいですよ、という話ができたのが良かったですね。 最近、Java を主に書いてて、 Perl のライブラリとかあんまメンテナンスしきれてないのもあるんで、というか review と releng はしてるんですけど、誰かメンテナンスしたい人いたらメンテナンスお願いしたい情勢です。

    kazuhooku
    kazuhooku 2014/09/10
  • なぜ Teng は良いものなのか - tokuhirom's blog

    なぜ Teng は良いものなのか、を YAPC で再考させられたのでここにメモしておく。 Teng は自社開発のウェブアプリケーションを作ってる人たちが作っていて、それがうちのニーズにあってるのでいいっていう話であって、どこでもすごい最高!! と主張したいわけではないです。まあ、個人の感想ですね。 ソースが読みやすい ソースがよくモジュール化されていて、読みやすい。自身で書いている部分が多いという贔屓目を抜きにしても読みやすいんじゃないかなーと。 僕らのような自社開発のウェブ屋では、なにか無茶な要望を受けた時にささっと対応するということが求められるシーンが多いので、ソースの読みやすさというのはかなり重要なファクターとなっています。 複雑な SQL を発行できないように機能が制限されている SQL ビルダーを使って JOIN やサブクエリを駆使したウェブアプリケーションを開発してしまうと、運

    kazuhooku
    kazuhooku 2014/09/01
  • Perl 5.19.9 で実装された signatures の構文をためしてみる - tokuhirom's blog

    use 5.019009; use autodie; use feature 'signatures'; no warnings "experimental::signatures"; package Foo { sub new($class, $n) { bless {n=>$n}, $class; } sub bar($class, $a) { $a+3; } sub baz($self, $a) { $self->{n} * $a; } } sub add($left, $right) { return $left + $right; } say add(1,2); say Foo->bar(4); say Foo->new(5)->baz(4); みたいな感じでつかえる。 【追記】 use 5.019009; use feature 'signatures'; no warning

    kazuhooku
    kazuhooku 2014/02/24
    ようやく感
  • DBD::mysql の async について - tokuhirom's blog

    並列にバンバン処理するかっこいい機能がついたわけではなく、だいぶアドホックな実装になっている。 mysql client として考えた場合に処理が遅いのは、DB サーバーの I/O や集計処理で、データを返しはじめてからの処理は速い、という経験則にもとづいた処理となっている。 request をなげておいて、sock を poll しておき、readable になったら blocking I/O で普通に読む。mysql server は返しはじめたら一気に書くので、読みはじめたら一気によんでも問題がない。という実装依存のコードになっている。 という感じの実装になってるので、一般的な実装とだいぶちがうので、普通の実装だとおもって読んでると混乱する。 【201402181531 追記】 「select * from t みたいなケースだと、i/o bound でダラダラデータが返ってくる」と

    kazuhooku
    kazuhooku 2014/02/18
    逆に言うと、select * from tのような1パスで動くクエリをpollingしつつ処理するという目的では使えない(って理解で良かったっけ?)>「データを返しはじめてからの処理は速い、という経験則にもとづいた処理」
  • テストについての個人の雑感 - tokuhirom's blog

    テストについての個人の雑感です。ここでいうテストってのは、なんかいわゆる開発をドライブするための開発者用のテストについてであって、品質の保証とかについては一切かんがえてません。 ざっくりいうと 「テストを書いた方が効率的に開発がすすむ場合にはテストを書く」 テストに対する認識 ソフトウェアにたいするテスト というものはソフトウェアそのものの価値には関係しない。 なので、テストにたいしてかけるコストなど、すくなければすくないほど良いにきまっておる。 Open Source Software のテストについて オープンソースソフトウェアの場合、送られてきた patch の品質を travis ci で確認したい、っていう要件とか、手元の環境以外での動作確認などを行いたいので、それなりにテストを書く必要がある。 まして、僕が OSS として公開しているものはライブラリが多い。ライブラリは一般にテ

    kazuhooku
    kazuhooku 2014/01/23
  • Web Application の validation はどのレイヤーでかけるべきか - tokuhirom's blog

    数年前にも同じことかいた気がするけど、最近の状況にあわせてかいてみる。 途中で面倒になってきて説明が雑になっている点をご容赦ください。 言いたいことは「結局、昔はサーバサイドで懇切丁寧なエラーメッセージを出すためにModelではなくControllerでバリデーションに関する知識が必要だったけど 今はJavaScriptでやるから不要だよね111」ってことです。 この表題は、よく話題にあがるところなのだが、理想論としては Model, Controller, Client side のいずれにおいてもきっちりと validation を行うことがのぞましい。 しかし、実際にはなかなか面倒である。ということで、どこをはぶくかというと Controller における Validation であろう。 ユーザーに対する親切なメッセージは JS の側でだすのが理想的。model の validat

    kazuhooku
    kazuhooku 2013/11/26
    従来はサーバサイドで懇切丁寧なエラーメッセージを出力するためにControllerでバリデーション知識をもたせる必要があったけど本来はModelにもたせるのが自然だし、JavaScriptで検証するならそれでいいよね、という話。同感
  • pull-req の本文にながながと書くぐらいならコミットログにも同じことを書こう - tokuhirom's blog

    pull-req の文にながながと背景の説明をかいているのにコミットログには一行しかメッセージを書かない人というのが非常に多い。 これはよくない。 pull-req の文は git のコミットログじゃないので、git log コマンドでは確認できないし、ソースからもよみとれない。 ながながとそこに書く必要があるならコミットログの方にも書くのがよい。

    kazuhooku
    kazuhooku 2013/10/15
    merge comment で close issue #xx とか書いとけば問題ない派(そして github にロックインされる)