タグ

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

  • 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

    yojik
    yojik 2015/07/29
  • GS Collections Kata をひと通りやった - tokuhirom's blog

    GS Collections というゴールドマン・サックスさんが出してる Java 用のコレクションライブラリがある。 Java Day Tokyo/JJUG CCC 2015 Spring で知ったのだが、これは以下のような利点を持っているようだ。 使いやすいインターフェース メモリ使用量が標準のコレクションよりもよい場合がある Multimap や sortedbag などの標準にはないコレクション GS Collections には GS Collections Kata という、チュートリアルがある。これは junit test case の形式をしていて IDE で読みこめばすぐに試せる。 順番に指示通りにやっていけば試せるんで、なかなか良い。 例も Company, Order, Supplier, LineItem など具体的で、わかりやすい。結構手間かかってるな、という印象

    yojik
    yojik 2015/04/16
    GS Collections の作者ってSmalltalkerらしいですね
  • [java] web.xml から tomcat-embed をランダムポートで起動し、起動したポートを得る方法、または Java webapp のテスト手法について - tokuhirom's blog

    一般的に web application のテストをするには application server を別スレッドで起動してそこにアクセスする方法と、http request を mocking して application code を直接呼ぶ方法があります。前者の方法は、app server の挙動を完全に再現できるし、http client も使い慣れたものを利用できるというメリットがあります。後者の場合には実行速度が速いというメリットがあります。 で、いろいろなメリット・デメリットを考慮した結果、今回は前者の方法でいこうとおもったわけです。 ここでは、maven 構成な一般的な webapp を tomcat で運用する場合のテストを前提とします。 とりあえず、pom.xml に以下のように記述しましょう。tomcat は 7 を使う無難さよ。 <dependency> <group

    yojik
    yojik 2015/02/17
    setPort(0)でランダムになるっていうこと?
  • 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

    yojik
    yojik 2014/06/18
  • ngResource はどうやって値を埋めているのか - tokuhirom's blog

    ngResource は AngularJS で RESTful API を call する際につかえるクライアントライブラリだが、これがなかなかマジカルな動きをする。 具体的には、以下のようなコードがなぜか動く。HTTP リクエストが実行された後で $scope.entries にいい感じにレスポンスがうまっているのだ。 $scope.entries = $resource(‘/entry’).query(); 通常なら動かなそうなコードだ。なぜこれが動いてしまうのか。 なぜ動くのか $scope.entries = $resource(‘/entry').query(); のとき、ngResource の内部では以下のようなことが起きている。 $scope.foo = (function () { // 空の配列を作る var value = [ ]; $http.get(‘/foo’

    yojik
    yojik 2013/11/06
  • cron でうごかしているコマンドをタイムアウトさせる - tokuhirom's blog

    coreutils の timeout(1) をつかえば OK です。 http://www.gnu.org/software/coreutils/manual/html_node/timeout-invocation.html softlimit -t 60 foobar という手もあるけど、CPU時間だから sleep してるとかだと死ねないという説もあるようです。

    yojik
    yojik 2012/12/19
  • Const なんとかさん関連のツール群をつかうと、簡単に EcmaScript target の言語をつくれる! - tokuhirom's blog

    で、esprima とか関連のツール群は Mozilla の Parser API の AST 形式をサポートしています。詳細はここのへんかな。 https://developer.mozilla.org/en-US/docs/SpiderMonkey/Parser_API で、escodegen があるということは Parser API 形式の AST をはけば、そこから JS を生成できるってことですね。しかも escodegen は source-map の生成にも対応しているので、エラーの処理もらくちんで、実行時エラーがおきても、「ああ、JSでかいておけばよかった。。」とはならない(という未来がくることになっています) CoffeeScriptRedux というカッフィースクリプトのあたらし版をつくってるプロジェクトでは実際に CoffeeScript code => [parse

    yojik
    yojik 2012/09/13
  • tokuhirom blog

    Blog Search when-present<#else>when-missing. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)?? ---- ---- FTL stack trace ("~" means nesting-related): - Failed at: ${entry.path} [in template "__entry.ftlh" at line 3, column 25] - Reached through: #include "__entry.ftlh" [in template "entry.ftlh" at

    yojik
    yojik 2009/08/05
  • tokuhirom blog

    Blog Search when-present<#else>when-missing. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)?? ---- ---- FTL stack trace ("~" means nesting-related): - Failed at: ${entry.path} [in template "__entry.ftlh" at line 3, column 25] - Reached through: #include "__entry.ftlh" [in template "entry.ftlh" at

    yojik
    yojik 2008/02/20
  • 1