タグ

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

  • Java の AST を解析できる javaparser がアツい!!! - tokuhirom's blog

    https://github.com/javaparser/javaparser javaparser は Java をパースして AST にしてくれるライブラリである。 この手のライブラリは数多あるのだが、ほとんどのものが Java 1.5 ぐらいでメンテナンスが止まっている。 実際このライブラリもメンテナンスが止まっていたのだが、Java 1.8 対応版とし開発が再開されたものだ。 このライブラリはパーサーライブラリであるから、文字列をパースして AST を構築してくれるというものになっている。 実際どのような AST が構築されるのかが気になるところなので、構築された AST をダンプできるツールを groovy で書いた。 #!/usr/bin/env groovy @Grab('com.github.javaparser:javaparser-core:2.1.0') impor

  • 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

  • [java] SecureRandom のアルゴリズムの選択について - tokuhirom's blog

    前提 Java SE 8 + Linux 前提です。 Java で暗号的に安全な乱数をえる Java で暗号的に安全な乱数を得るには SecureRandom クラスを利用します。 SecureRandom ではいくつかの乱数生成アルゴリズムをサポートしています。 各プラットフォームでもっとも安全な SecureRandom の実装は ${JAVA_HOME}/jre/lib/security/java.security の securerandom.strongAlgorithms という項目に書いてあります。 SecureRandom#getInstanceStrong() で取得できるのはこれです。 インスタンスの取得方法 new SecureRandom() でデフォルト実装が得られます OSXlinux では NativeBlocking です(SHA1PRNGの場合もある

  • Java 8 で例外を投げていることをテストしたい - tokuhirom's blog

    特定の条件で例外を投げるコードを書いたときに、それをテストしたい。なんてときがある。 このクラスの例外があがってるってことだけ判断できればいいんだけどな、ぐらいのゆるい条件のとき。 そんな時は以下のようなユーティリティを定義すればいい。 public static void assertThrows(Class<? extends Exception> exceptionClass, Code code) { boolean thrown = false; try { code.run(); } catch (Exception ex) { System.out.println(ex); assertTrue(exceptionClass.isInstance(ex)); thrown = true; } assertTrue(thrown); } @FunctionalInterface

  • [java] モダンな Annocation Processor の開発手順まとめ - tokuhirom's blog

    APT とは Annotation Processing Tool のことで、Java でコードの自動生成を行う際に利用される。 APT を利用すると、Java クラスやリソースの自動生成が可能となる。 インターネットに情報は結構あるのだが、昔のものが多くて、Eclipse に JAR を追加して云々とかそういう感じのものが多くて辛いので調べたことをまとめておく。 アノテーションを作る 適当なアノテーションを作る。 import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Retention(RetentionPolicy.SO

  • 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

  • Perl5 における B optree の操作方法入門 - tokuhirom's blog

    いよいよ今週から YAPC だ。YAPC にあわせて、Perl5 の内部構造を復習できるエントリーを書いたのでご一読いただきたい。 Perl5 hack においては、XS をつかった B optree の操作が楽しい。B optree というのはいわゆる AST(抽象構文木) である。Perl5 は byte code interpreter などではなく昔ながらの AST をそのままなめるインタプリタである。であるから、この B optree を操作すれば、簡単にインタプリタの挙動を変えられるというワケ。 一方で、B optree の操作については、あまり知られていないし情報がすくない。日語でも情報がすくないし、英語でもまた情報がすくなく、それっぽいモジュールのコードをよみながら会得するしかないのが現状だ。 すこしでも B 初心者が、ステップアップできるように、私のもっている情報をここ

  • Docker で Growthforecast をインストールする方法 - tokuhirom's blog

    ちょいちょい GrowthForecast のインストールが perl だから難しいとかいってる人をみかけるけれど、Dockerfile が用意してあれば、セットアップは簡単になるんじゃないだろうか。 audreyt が Dockerfile で配布する方法で irc logger を配布していたし、それを真似してみるのもアリかもしれない。そんな風におもって僕もやってみることにした。 Docker をつかうと、アプリをふくんだイメージを簡単に配布することが可能となる。インストール手順をごちゃごちゃとブログに書いたりするのもいいけれど、Dockerfile を共有したほうがいいのではないだろうか。再現可能だし。chef でもなんでもいいけど、docker はインストールが簡単なのがいいし、覚えることがすくなくていい。 いらなくなったら、イメージごとポイすればいいだけで、簡単だしね。 さて

  • Carton 1.0 時代の Web アプリケーション開発フロー - tokuhirom's blog

    Carton 1.0 がでたところで、Web アプリケーション開発のフローを一度見直しておきたい、そんな人も多いでしょう。 そんな方のために僕のやりかたをまとめました。各社、議論の叩き台にしていただければよろしいかと存じます。 もっとも重要なことは、、 Carton を使うときに、僕が最重要だと思うことは、できるだけ番環境と開発環境の環境をそろえるということです。CPAN モジュールが番と開発でバージョンちがうから挙動がちがってた!! なんてのは時間の無駄ですし、よくないことですからね。 ですから、各開発環境と番環境をできるだけそろえることを意識していきたいとおもいます。 DarkPAN は使ってない そんなに DarkPAN 的なのを使うほど、DarkPAN 的なオレオレモジュールがないので、git submodule で管理しています。 【201308061241update】

  • OSX でプロファイリングするなら callgrind + qcachegrind - tokuhirom's blog

    brew install valgrind qcachegrindとしてインストール。 valgrind --tool=callgrind ./kiji -e '(-> $n { say($n) })(4)'でプロファイルとって、 qcachegrind callgrind.out.92249とすると こういう風にみれてよい。

  • Future Perl - YAPC::NA 2013 に参加して - tokuhirom's blog

    YAPC::NA 2013 に参加してきました。その中でも印象にのこったことを取り急 ぎアップしておきます。 今回は日からは @yusukebe と @xaicron と TPF の President である Karen が参加していたようです。 僕は今回がはじめての US だったので、いろいろと困惑することもありました が、旅行記などには興味がないという人も多いでしょうし、書くのがめんどく さいですし、たぶん xaicron が書くと、ほとんど内容がかぶるので割愛させ ていただきます。 デニーズのシェイクに興奮する yusukebe と xaicron エントリーでは YAPC::NA で僕が感じたこと、技術的に Perl Community が どこに向いているか、といったあたりのことについて述べていきたいとおもい ます。 今年は Perl 25 周年ですので、これまでの Per

  • 最近の Perl6 の動向についてまとめてみた - tokuhirom's blog

    Perl6 まわりが最近だいぶかわってきているという雰囲気をみなさん感じていらっしゃるかとおもいます。そのあたりについておさらいしてみましょう(時系列はちょっとまちがってるかもしれませんが、たぶんだいたいあってる)。 去年ぐらいまで去年ぐらいまでは、あまりパフォーマンスは重視されていなかったかんじがします。 「まだパフォーマンスを気にするタイミングじゃない」的な。ただ去年の途中ぐらいで一気に rakudo がはやくなったりしたような気はしました。 nqp の JVM port(4月ぐらい)https://github.com/perl6/nqp http://6guts.wordpress.com/2013/04/18/nqp-on-jvm-bootstrapped-soon-will-land-in-nqp-master/ nqp というのは Not Quite Perl(6) の略で、

  • 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 以外にたいするバグフィッ

    nsyee
    nsyee 2013/06/15
  • 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 っていうファイル名でこん

  • Minilla を用いた Perl モジュールの作り方 - tokuhirom's blog

    http://shanon-tech.blogspot.jp/2013/05/perl.html Perl モジュールの作り方、2013年においては Authoring tool をつかって作るのがよいです。具体的には Minilla でつくるのがオススメであります。 perlbrew なり plenv なりで perl をいれたあとは、 % cpanm Minillaとして Minilla をインストールします。 % minil new Fooとすると、Foo.pm のスケルトンができあがります。作者の名前などは ~/.gitconfig などから自動的にさがしてきますので、設定不要です。 できあがったディレクトリは以下のような形になっています。 Foo ├── Build.PL ├── Changes ├── cpanfile ├── lib │   └── Foo.pm ├── LI

  • Perl における一般的なコーディング規約について - tokuhirom's blog

    http://perldoc.perl.org/perlstyle.htmlhttp://perldoc.jp/docs/perl/5.8.0/perlstyle.podperlstyle.pod にのっているものが公式のスタイルガイドです(Larry 風)。 Larry has his reasons for each of these things, but he doesn't claim that everyone else's mind works the same as his does. このへんが Perl らしさ、というかそういうかんじですね。 Perl Best Practice にのっている Damian style もありますが、これはだいぶ癖がつよいです。 日では「miyagawa さんのスタイルにあわせておけば DIS られる心配はない」方式のコーディングスタ

  • サーバーのセットアップは perlbrew とかじゃなくてよくね? という時のライフハック - tokuhirom's blog

    https://metacpan.org/module/TOKUHIROM/Perl-Build-0.06/bin/perl-build perl-build というコマンドをつかうと便利。 perl-build 5.16.2 /opt/perl-5.16/ とかで管理するとよい。 perl-build 5.16.3 /opt/perl-5.16/でのアップグレードもうごいている様子。 おためしあれー。 FAQ./configure -d -Dprefix=$path でよくね?それでもいいのですが、PatchPerl によるパッチがあたるので、古いバージョンも確実にはいるのが嬉しいところです。 あと、tar ball のフェッチとかまで自動的にやってくれるのも便利。

  • git fetch-pulls - tokuhirom's blog

    git config alias.fetch-pulls = fetch origin +refs/pull/*:refs/remotes/pull/* — Tatsuhiko Miyagawa (@miyagawa) December 20, 2012 ↑↑を定義しておくと、pull-req のコミットをまるっと fetch できて便利、というかんじっぽい。 とりあえずいれておいた。

    nsyee
    nsyee 2013/02/28
  • httpstatus コマンドで、HTTP のステータスコードをすばやくしらべる! - tokuhirom's blog

    一般的な Web Programmer ならば、HTTP Status code はすべて暗記していると聞きました。 しかし、僕は初心者なので、なかなか覚えきれていないので、HTTPのステータスコードをさがすのに便利なツールを用意しました。App::httpstatus です。インストール方法は cpanm App::httpstatus です。というか依存とかないのでhttp://api.metacpan.org/source/TOKUHIROM/App-httpstatus-v1.0.0/httpstatus をコピーしてくればうごきます。 使い方は以下のとおりです。 4xx なコードを列挙する。 % httpstatus 4 400 Bad Request 401 Unauthorized 402 Payment Required 403 Forbidden 404 Not Foun

  • plow というプロジェクトをはじめた - tokuhirom's blog

    plow というのは、なんか perl5 をより簡単につかえるようにするというか、お気楽につかいたい気分のときのためのツールです。 https://github.com/tokuhirom/plow/ インストールすると plow コマンドがつかえるようになります。 いくつかの機能がありますので、気がむいた順で紹介します。 まず、一個おおきいのは、repl です。まあ、こんなかんじでつかえます。 % plow plow> 3+2 5 plow> undef plow> undef plow> 3+2 5 plow> undef plow> say "YO!" YO! 1普通に便利ですね。

    nsyee
    nsyee 2013/01/25