狠狠撸

狠狠撸Share a Scribd company logo
イマドキの現場で使える
Javaライブラリ事情
 NTTデータ先端技術
 竹添 直樹 @takezoen
自己紹介

 竹添 直樹
  NTTデータ先端技術
   Scala、アジャイル
  オープンソース
   Project Amateras
   The Seasar Project
   Apache Click
  執筆
   イマドキのIDE事情(マイナビニュース)
   Seasar2徹底入門(翔泳社)
厂肠补濒补逆引きレシピ
        竹添直樹 / 島本多可子

        出版社 :翔泳社
        発売   :2011/7/3
        ページ数 :632ページ
        価格   :?3,360

          「仕事でScalaを使う」
          「仕事で     を使う」ことを前提としたレシピ集
                   を使う」
          Scalaの基礎からユニットテスト、Play2、Akkaなどの
          フレームワークやビルドツールsbtまでカバー



 Scala = Javaよりも安全 + LLのように簡潔な記述
现场で使える闯补惫补ライブラリ
                           竹添直樹 / 島本多可子 / 小津美夕紀 / 亀井隆司

                           出版社 :翔泳社
                           発売   :2011/7/16
                           ページ数 :624ページ
                           価格   :?3,780



    の定番?実用(+ちょっと面白)
    の定番?実用( ちょっと面白)Javaライブラリを紹介!
 全73の定番?実用( ちょっと面白)    ライブラリを紹介!
 Commons Lang、ICU4J、Commons IO、Joda Time、Holiday.java、Commons Compress、Commons Codec、
 Commons Configuration、Commons BeanUtils、S2Util、Guava、fastutil、log4j、Commons Logging、log5j、
 Logback、SLF4J、log4jdbc、Velocity、FreeMarker、JSTL、Java Standard EL Functions、Commons FileUpload、
 Url Rewrite Filter、SiteMesh、Kaptcha、HSQLDB、H2、Commons DbUtils、SX-DbUtils、Persist、Mirage、dom4j、
 Commons JXPath、ROME、NekoHTML、HttpClient、Commons Net、JSch、Commons Email、JAX-WS、
 Super CSV、POI、XLSBeans、jXLS、Jacob、iText、JasperReports、JODReports、JODCOnverter、JFreeChart、
 charts4j、QRCode for Java、JSONIC、MessagePack、JAXB、XStream、Mockito、JMockit、DBUnit、Mockrunner、
 Selenium、Ehcache、Java Memcached Client、jmemcached、Rhino、MVEL、Guice、OVal、Drools、args4j、
 Quartz、Javassist
執筆の経緯
 Javaには膨大なOSSライブラリが存在する
 言語やフレームワークの本は出ているけどライブラリの本
 や記事は最近みかけない
 ずっとJavaをやってきた人には当たり前だけど、新しい
 Javaプログラマの人はどれを使っていいかわからない




  定番のJavaライブラリのカタログ的な
    書籍があるとよいのでは?
発売から一年
 執筆時はJDK 1.4でも利用できるものが多かったが、
 JDK 1.5以降への対応が進んだ
 Githubで開発されているものが増えてきた
 ロギングライブラリはLog4jからLogback / SLF4Jが主
 流に
 SeleniumやDroolsなど活発に開発が行われているもの
 もあるが、大部分のライブラリはメンテナンスフェーズに
 入っている
 ASFで開発されているもの、企業がバックについている
 ものは継続的にメンテナンスが行われている
 Javaでは定番のライブラリやフレームワークが完全に
 確立している状態
というわけで

 書籍では取り上げることができなかった便
 利なライブラリを紹介します。
JSONライブラリ

 書籍で紹介したJSONIC以外にもいくつか
 の選択肢があります
  Jackson
    http://jackson.codehaus.org/
  Gson
    http://code.google.com/p/google-gson/
  JsonPullParser
    https://github.com/vvakame/JsonPullParser
闯厂翱狈ライブラリの性能比较

    50000回の変換結果(ミリ秒)
    JSON Pull Parserは単純なList、Mapを使用でき
    ないため、代わりにライブラリが提供している
    JsonArray、JsonHashを使用
           FROM                    TO             JSONIC Jackson    gson      JPP
List<String>             JSON                         32.2     35      50.4    380.3
Map<String,String>       JSON                         55.7   37.9      58.3    783.5
List<SampleBean>         JSON                        487.5  210.5     598.9     6930
Map<String,SampleBean>   JSON                        482.8  205.7     609.5 -
JSON                     List<String>                 59.5   25.7      23.4      34.7
JSON                     Map<String,String>          110.3  133.6      42.4      76.7
JSON                     List<SampleBean>           1769.4  238.4     369.2    547.6
JSON                     Map<String,SampleBean>      1829   364.5     397.5 -
各JSONライブラリの性能特性
 Jacksonがシリアライズ、デシリアライズ共に安定して高速
 Gsonはパースは高速だがシリアライズが遅め
 JSONICは健闘しているが、JacksonやGsonには及ばな
 い。特にBeanへのデシリアライズが飛びぬけて遅い
 JsonPullParserは単純なパースは高速だがシリアライズ
 が遅い。使い勝手の面でもやや難がある




    総合的にはJacksonがおすすめ
Thymeleaf              http://www.thymeleaf.org/



  XMLベースのテンプレートエンジン
    特殊な属性を埋め込んだプレーンなXMLファイ
    ルをテンプレートとして使用可能
    Tapestry、Mayaa、Wicket、Facelets等と同じ
    アプローチ
    式言語にはOGNLを採用している
    Webアプリケーションで使用するための
    ResolverやContextが予め提供されている
罢丑测尘别濒别补蹿のサンプル
    <html>
    <body>
     <ul th:if="${books.size()} gt 0">
      <li th:each="book: ${books}">
        <a th:href="${book.url}" th:text="${book.title}">title</a>
      </li>
     </ul>                                    TemplateEngine engine = new TemplateEngine();
     <div th:if="${books.size()} == 0">       engine.setTemplateResolver(new ClassLoaderTemplateResolver());
      書籍はありません。
     </div>                                   List<Book> books = new ArrayList<Book>();
    </body>
    </html>                                   Context context = new Context();
                                           context.setVariable("books", books);

                                           String result = engine.process(
                                            "jp/sf/amateras/javalib/thymeleaf/ThymeleafSample.xhtml", context);


<html xmlns="http://www.w3.org/1999/xhtml">
<body>
 <ul>
  <li><a shape="rect" href="http://www.amazon.co.jp/exec/obidos/ASIN/4798121509">Seasar2徹底入門</a></li>
  <li><a shape="rect" href="http://www.amazon.co.jp/exec/obidos/ASIN/4798123366">现场で使える闯补惫补ライブラリ</a></li>
  <li><a shape="rect" href="http://www.amazon.co.jp/exec/obidos/ASIN/4798125415">厂肠补濒补逆引きレシピ</a></li>
 </ul>
</body>
</html>
Clione-SQL    http://code.google.com/p/clione-sql/


  軽量なDBアクセスライブラリ
    実行可能なSQL(2waySQL)をテンプレートと
    して使用することができる
    S2Dao、S2JDBCなどの外出しSQLファイルと
    同じアプローチ(ただし記法は違います)
    行やインデントに意味を持たせることでテンプ
    レートをシンプルに記述できる
    パラメータの型に応じて自動的に演算子を置換
    するなどの便利機能もあり
    ドキュメントが不足している
颁濒颈辞苍别-厂蚕尝のサンプル
    Connection conn = DriverManager.getConnection("jdbc:hsqldb:mem:.", "sa", "");

    List<Book> books = sqlManager(conn)
     .useFile("jp/sf/amateras/javalib/clionesql/ClioneSQLSample.sql")
     .findAll(Book.class, params("publisher", "翔泳社").$("price", 3500) );

    SELECT * FROM BOOKS
    WHERE
      PUBLISHER = /* $publisher */'TITLE'
      AND PRICE <= /* $price */10000




 publisher=null、price=3500の場合:                   publisher=null、price=nullの場合:
 SELECT * FROM BOOKS
 WHERE                                            SELECT * FROM BOOKS
   PRICE <= 3500

 パラメータがnullの場合、行が削除される                            インデントされた行が全て削除されると
 (IF文などで分岐を記述する必要がない)                             親の行が削除される
RESTEasy      https://www.jboss.org/resteasy/



  JBossで使用されているJAX-RS実装
  非同期処理も可能
  クライアントライブラリが便利
RESTEasyのサンプル
サービスのインターフェース(サーバサイドはこのインターフェースを実装して作成)

 @Path("hello")
 public interface HelloService {
      @GET
      @Path("/{name}")
      @Produces("text/plain; charset=UTF-8")
      public String workd(@PathParam("name") String name);
 }



クライアントからの呼び出し
 RegisterBuiltin.register(ResteasyProviderFactory.getInstance());

 // インターフェースからクライアントを動的に生成
 HelloService hello = ProxyFactory.create(HelloService.class, "http://localhost:8080/sample");
 String result = hello.world("Taro");
Jsoup                                                               http://jsoup.org/


  HTML5対応のHTMLパーサ
  jQueryのようにCSSセレクタを使用して要素の選択を行う
  ことができる
  DOMの操作もjQuery風の流れるインターフェースで行うこ
  とができる
   Document doc = Jsoup.connect("http://d.hatena.ne.jp/takezoe/").get();

   Elements headlines = doc.select("div.section h3");
   for(int i=0; i < headlines.size(); i++){
     Element e = headlines.get(i);
     System.out.println(e.text());
   }


 似たライブラリとしてjOOX(https://github.com/jOOQ/jOOX )がある
 こちらはXMLしか扱うことができないが、JavaのDOM APIとの相互運用が可能
Zip4j                           http://www.lingala.net/zip4j/



   パスワード付きZIPファイルの生成?解凍が
   可能なライブラリ
        Java標準のAPIやCommons Compressはパ
        スワード付きZIPファイルに非対応
        他にもいくつかの選択肢があります
         http://code.google.com/p/winzipaes/
         http://www.ne.jp/asahi/hishidama/home/tech/soft
         /java/zip.html
Zip4jのサンプル

 // パラメータを準備
 ZipParameters parameters = new ZipParameters();
 parameters.setCompressionMethod(Zip4jConstants.COMP_DEFLATE);
 parameters.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL);
 parameters.setEncryptFiles(true);
 parameters.setEncryptionMethod(Zip4jConstants.ENC_METHOD_AES);
 parameters.setAesKeyStrength(Zip4jConstants.AES_STRENGTH_256);
 parameters.setPassword("1234");

 // zipファイルを作成してファイルを追加
 ZipFile zipFile = new ZipFile("sample.zip");
 zipFile.addFile(new File("contents/memo.txt"), parameters);
jMagick            http://www.jmagick.org/



  JavaからImageMagickを呼び出すための
  ラッパ
    サムネイルやデバイス毎にリサイズした画像の
    作成などに便利
    Java標準のAPIだと縮小時の画像品質が悪
    かったり、メモリ消費が問題になったり
    動作にはImageMagikが必要
    JNI経由でImageMagickを呼び出すため、共
    有ライブラリを配置する必要がある
jMagickのサンプル

 MagickImage image = new MagickImage(new ImageInfo("javalib.jpg"));

 // 画像のサイズを半分に縮小
 int width = (int) image.getDimension().getWidth() / 2;
 int height = (int) image.getDimension().getHeight() / 2;
 MagickImage resized = image.scaleImage(width, height);

 resized.setFileName("javalib_mini.jpg");
 resized.writeImage(new ImageInfo());
Byteman        https://www.jboss.org/byteman



  javaagentを使用して任意のクラス、メソッド
  に処理を挿入する
   プログラムの動作を一時的に変えたり
   ログを出力するコードを埋め込んだり
   例外を投げるコードを埋め込んで異常系のテス
   トを自動化したり
   BMUnitというJUnit4と組み合わせて使用する
   ためのモジュールも提供されている
叠测迟别尘补苍のサンプル
                      ルールファイルの例

                       RULE Sample Rule
                       CLASS jp.sf.amateras.javalib.byteman.BytemanSample
 どこにルールを
  適用するか                METHOD hello
                       AT ENTRY
 ルールの実行条件              IF TRUE
                       DO
  挿入する処理
                        traceln($1)
                       ENDRULE


 起動時にjavaagentとルールファイルを指定
 > java -javaagent:lib/byteman.jar=script:rule.btm jp.sf.amateras.javalib.byteman.BytemanSample
jqPlot              http://www.jqplot.com/



   JavaScriptでグラフを描画するjQueryプラ
   グイン
   Javaライブラリではありませんが、Javaライ
   ブラリの代替品ということで
   棒グラフ、折れ線グラフ、円グラフ、バブル
   チャートなどを描画可能
   ブラウザ上でグラフを描画するのでサーバ
   に負荷がかからない点がメリット
jqPlotのサンプル
<html>
<head>
<title>jqPlot</title>
<script language="javascript" type="text/javascript" src=/slideshow/java-14478400/14478400/"jqplot/jquery.min.js"></script>
<!--[if lt IE 9]>
  <script language="javascript" type="text/javascript" src="jqplot/excanvas.min.js"></script>
<![endif]-->
<script language="javascript" type="text/javascript" src="jqplot/jquery.jqplot.min.js"></script>
<link rel="stylesheet" type="text/css" href="jqplot/jquery.jqplot.min.css" />
</head>
<body>
<div id="graph" style="height: 400; width: 600;"></div>
<script>
jQuery( function() {
  jQuery . jqplot(
    'graph',
      [
         [ [ 1, 20 ], [ 2, 100 ], [ 3, 10 ], [ 4, 30 ] ],
         [ [ 1, 50 ], [ 2, 80 ], [ 3, 30 ], [ 4, 80 ] ]
      ],
    { title: '折れ線グラフのサンプル' }
  );
} );
</script>
</body>
</html>
JGit                     http://www.eclipse.org/jgit/


   JavaからGitにアクセスするためのライブラリ
       EGit(Eclipse用のGitプラグイン)で使用されており、現
       在はEclipse Foundationで開発されている
       Pure Javaで実装されているため別途Gitをインストー
       ルする必要がない
       Antタスクとしても利用可能(一部のコマンドだけ?)
       Gitと連携していろいろな処理を自動化するのに使える
       かも?
JGitのサンプル

 // リモートリポジトリをclone
 Git.cloneRepository()
   .setURI("https://github.com/takezoe/solr-scala-client.git")
   .setDirectory(new File("git"))
   .call();

 // ログを取得して表示
 Iterable<RevCommit> logs = Git.open(new File("git")).log().call();
 for(RevCommit rev: logs){
   System.out.println(rev.getCommitterIdent().getEmailAddress() + " - " + rev.getCommitTime());
   System.out.println(rev.getFullMessage());
   System.out.println("--");
 }

 // diffを表示
 Git.open(new File("git")).diff().setOutputStream(System.out).call();
执笔に関すること
執筆環境
 基本的にリモートで作業
  4人での共著
  はじめて全員で顔をあわせたのは執筆完了後
 基本的に無料のツールを使用
  原稿はOpenOfficeで執筆
  MLはGoogleグループを使用
  サンプルコード等はBitBucketで共有
  PDFで校正
 最近はWikiで原稿を書いています
  スマートフォン、WiMAXでいつでも?どこでも作業できる
苦労したこと
 どこまで書くか?
  全ての機能は書ききれない
  基本的な部分+あまり情報がない部分
 ライブラリのバグ、バージョンアップ
  HSQLDB
  Drools
 サイトがなくなっていたり、過去のバージョンの扱
 いが微妙だったり
  java.netにホスティングされているプロジェクト
  SiteMesh
技術書の難しいところ

 出版までの時差
  オンラインメディア、ブログ等に勝てない
 情報の寿命
  あまりに陳腐化の早いものは書籍には適さない
書籍に適しているもの

 最新情報よりもある程度固定化されたもの
  技術的なものではなく、手法や考え方など読み
  物として読めるもの
  すでに定番化している技術の入門?解説やリ
  ファレンス的なもの
「现场で使える闯补惫补ライブラリ」は
これらの条件を満たしているはず!
失敗したかも

 ライブラリ名で検索しても引っかからない
別のアプローチもあります

 執筆中の書籍をダウンロード販売
  ManningのEarly Access Programが有名
  完成版を購入するよりも安価
  できている部分をPDFでダウンロードでき、アップデー
  トされると通知が届く
  最終的にはデザインも入った完成版が提供される
 著者、読者双方にメリット
  最新情報を部分的にであってもいち早く読める
  読者からのフィードバックを書籍に反映できる
でも、完成しなかったらどうなるの?

 完成しなかったら読者には返金されるの?
  著者とはどういう契約になっているのだろう?
 完成前に売れ行きの予想がついてしまう
  Early Access Programでの購入者が少なかっ
  たら著者のモチベーションダウンで執筆が遅れ
  るのでは?
ご清聴ありがとうございました

     大事なことなのでもう一度




       「厂肠补濒补逆引きレシピ」
             逆引きレシピ」
        好評発売中です!
サンプルコード

 今日紹介したライブラリのサンプルコードは
 Githubで公開しています
  https://github.com/takezoe/jjug-javalib

More Related Content

What's hot (20)

Team Foundation Server入門
Team Foundation Server入門Team Foundation Server入門
Team Foundation Server入門
Akihiro Nakajima
?
Confluenceショートカットキー表 v1
Confluenceショートカットキー表 v1Confluenceショートカットキー表 v1
Confluenceショートカットキー表 v1
Naho Inuyama
?
チケット管理システム大決戦 JIRA vs Redmine vs Trac ユーザーが語る、なぜ私はこのツールを使うのか
チケット管理システム大決戦 JIRA vs Redmine vs Trac ユーザーが語る、なぜ私はこのツールを使うのかチケット管理システム大決戦 JIRA vs Redmine vs Trac ユーザーが語る、なぜ私はこのツールを使うのか
チケット管理システム大決戦 JIRA vs Redmine vs Trac ユーザーが語る、なぜ私はこのツールを使うのか
Shunsuke (Sean) Osawa
?
密かに话题の叠耻蹿蹿别谤产濒辞补迟
密かに话题の叠耻蹿蹿别谤产濒辞补迟密かに话题の叠耻蹿蹿别谤产濒辞补迟
密かに话题の叠耻蹿蹿别谤产濒辞补迟
Kazuhito Ohkawa
?
贰濒补蝉迟颈肠蝉别补谤肠丑のサジェスト机能を使った话
贰濒补蝉迟颈肠蝉别补谤肠丑のサジェスト机能を使った话贰濒补蝉迟颈肠蝉别补谤肠丑のサジェスト机能を使った话
贰濒补蝉迟颈肠蝉别补谤肠丑のサジェスト机能を使った话
ktaro_w
?
搁辞辞迟濒别蝉蝉コンテナ
搁辞辞迟濒别蝉蝉コンテナ搁辞辞迟濒别蝉蝉コンテナ
搁辞辞迟濒别蝉蝉コンテナ
Akihiro Suda
?
V6 unix in okinawa
V6 unix in okinawaV6 unix in okinawa
V6 unix in okinawa
magoroku Yamamoto
?
Hemodialysis: Chapter 11, Venous Catheter - Basics, Insertion, Use and Care -...
Hemodialysis: Chapter 11, Venous Catheter - Basics, Insertion, Use and Care -...Hemodialysis: Chapter 11, Venous Catheter - Basics, Insertion, Use and Care -...
Hemodialysis: Chapter 11, Venous Catheter - Basics, Insertion, Use and Care -...
NephroTube - Dr.Gawad
?
ディープラーニングと搁翱厂で作る自动运転ロボット
ディープラーニングと搁翱厂で作る自动运転ロボットディープラーニングと搁翱厂で作る自动运転ロボット
ディープラーニングと搁翱厂で作る自动运転ロボット
Hiroaki Kaneda
?
????? ?? (A PATTERN LANGUAGE FOR STUDY GROUPS)
????? ?? (A PATTERN LANGUAGE FOR STUDY GROUPS)????? ?? (A PATTERN LANGUAGE FOR STUDY GROUPS)
????? ?? (A PATTERN LANGUAGE FOR STUDY GROUPS)
hyun soomyung
?
尝颈苍辩の速度测ってみた
尝颈苍辩の速度测ってみた尝颈苍辩の速度测ってみた
尝颈苍辩の速度测ってみた
Core Concept Technologies
?
Python仮想環境構築の基礎と ツールの比較
Python仮想環境構築の基礎と ツールの比較Python仮想環境構築の基礎と ツールの比較
Python仮想環境構築の基礎と ツールの比較
cocodrips
?
叠辞辞蝉迟のあるプログラミング生活
叠辞辞蝉迟のあるプログラミング生活叠辞辞蝉迟のあるプログラミング生活
叠辞辞蝉迟のあるプログラミング生活
Akira Takahashi
?
奥别产搁罢颁を利用した远隔リアルタイム映像処理フレームワークの実装
奥别产搁罢颁を利用した远隔リアルタイム映像処理フレームワークの実装奥别产搁罢颁を利用した远隔リアルタイム映像処理フレームワークの実装
奥别产搁罢颁を利用した远隔リアルタイム映像処理フレームワークの実装
tnoho
?
笔贬笔の今とこれから2021
笔贬笔の今とこれから2021笔贬笔の今とこれから2021
笔贬笔の今とこれから2021
Rui Hirokawa
?
Jitsi video bridge で遊んでみた
Jitsi video bridge で遊んでみたJitsi video bridge で遊んでみた
Jitsi video bridge で遊んでみた
tnoho
?
PYNQ 祭り: Pmod のプログラミング
PYNQ 祭り: Pmod のプログラミングPYNQ 祭り: Pmod のプログラミング
PYNQ 祭り: Pmod のプログラミング
ryos36
?
翱搁颁础次期贵奥开発の现状
翱搁颁础次期贵奥开発の现状翱搁颁础次期贵奥开発の现状
翱搁颁础次期贵奥开発の现状
Shinji Kobayashi
?
Apresenta??o Luiza Helena Trajano - Magazine LuizaApresenta??o Luiza Helena Trajano - Magazine Luiza
Apresenta??o Luiza Helena Trajano - Magazine Luiza
Siq Marketing
?
たのしい関数型
たのしい関数型たのしい関数型
たのしい関数型
Shinichi Kozake
?
Confluenceショートカットキー表 v1
Confluenceショートカットキー表 v1Confluenceショートカットキー表 v1
Confluenceショートカットキー表 v1
Naho Inuyama
?
チケット管理システム大決戦 JIRA vs Redmine vs Trac ユーザーが語る、なぜ私はこのツールを使うのか
チケット管理システム大決戦 JIRA vs Redmine vs Trac ユーザーが語る、なぜ私はこのツールを使うのかチケット管理システム大決戦 JIRA vs Redmine vs Trac ユーザーが語る、なぜ私はこのツールを使うのか
チケット管理システム大決戦 JIRA vs Redmine vs Trac ユーザーが語る、なぜ私はこのツールを使うのか
Shunsuke (Sean) Osawa
?
密かに话题の叠耻蹿蹿别谤产濒辞补迟
密かに话题の叠耻蹿蹿别谤产濒辞补迟密かに话题の叠耻蹿蹿别谤产濒辞补迟
密かに话题の叠耻蹿蹿别谤产濒辞补迟
Kazuhito Ohkawa
?
贰濒补蝉迟颈肠蝉别补谤肠丑のサジェスト机能を使った话
贰濒补蝉迟颈肠蝉别补谤肠丑のサジェスト机能を使った话贰濒补蝉迟颈肠蝉别补谤肠丑のサジェスト机能を使った话
贰濒补蝉迟颈肠蝉别补谤肠丑のサジェスト机能を使った话
ktaro_w
?
搁辞辞迟濒别蝉蝉コンテナ
搁辞辞迟濒别蝉蝉コンテナ搁辞辞迟濒别蝉蝉コンテナ
搁辞辞迟濒别蝉蝉コンテナ
Akihiro Suda
?
Hemodialysis: Chapter 11, Venous Catheter - Basics, Insertion, Use and Care -...
Hemodialysis: Chapter 11, Venous Catheter - Basics, Insertion, Use and Care -...Hemodialysis: Chapter 11, Venous Catheter - Basics, Insertion, Use and Care -...
Hemodialysis: Chapter 11, Venous Catheter - Basics, Insertion, Use and Care -...
NephroTube - Dr.Gawad
?
ディープラーニングと搁翱厂で作る自动运転ロボット
ディープラーニングと搁翱厂で作る自动运転ロボットディープラーニングと搁翱厂で作る自动运転ロボット
ディープラーニングと搁翱厂で作る自动运転ロボット
Hiroaki Kaneda
?
????? ?? (A PATTERN LANGUAGE FOR STUDY GROUPS)
????? ?? (A PATTERN LANGUAGE FOR STUDY GROUPS)????? ?? (A PATTERN LANGUAGE FOR STUDY GROUPS)
????? ?? (A PATTERN LANGUAGE FOR STUDY GROUPS)
hyun soomyung
?
Python仮想環境構築の基礎と ツールの比較
Python仮想環境構築の基礎と ツールの比較Python仮想環境構築の基礎と ツールの比較
Python仮想環境構築の基礎と ツールの比較
cocodrips
?
叠辞辞蝉迟のあるプログラミング生活
叠辞辞蝉迟のあるプログラミング生活叠辞辞蝉迟のあるプログラミング生活
叠辞辞蝉迟のあるプログラミング生活
Akira Takahashi
?
奥别产搁罢颁を利用した远隔リアルタイム映像処理フレームワークの実装
奥别产搁罢颁を利用した远隔リアルタイム映像処理フレームワークの実装奥别产搁罢颁を利用した远隔リアルタイム映像処理フレームワークの実装
奥别产搁罢颁を利用した远隔リアルタイム映像処理フレームワークの実装
tnoho
?
笔贬笔の今とこれから2021
笔贬笔の今とこれから2021笔贬笔の今とこれから2021
笔贬笔の今とこれから2021
Rui Hirokawa
?
Jitsi video bridge で遊んでみた
Jitsi video bridge で遊んでみたJitsi video bridge で遊んでみた
Jitsi video bridge で遊んでみた
tnoho
?
PYNQ 祭り: Pmod のプログラミング
PYNQ 祭り: Pmod のプログラミングPYNQ 祭り: Pmod のプログラミング
PYNQ 祭り: Pmod のプログラミング
ryos36
?
翱搁颁础次期贵奥开発の现状
翱搁颁础次期贵奥开発の现状翱搁颁础次期贵奥开発の现状
翱搁颁础次期贵奥开発の现状
Shinji Kobayashi
?
Apresenta??o Luiza Helena Trajano - Magazine LuizaApresenta??o Luiza Helena Trajano - Magazine Luiza
Apresenta??o Luiza Helena Trajano - Magazine Luiza
Siq Marketing
?

Similar to イマドキの现场で使える闯补惫补ライブラリ事情 (20)

Apache Torqueについて
Apache TorqueについてApache Torqueについて
Apache Torqueについて
tako pons
?
明日から使える Java SE 7
明日から使える Java SE 7明日から使える Java SE 7
明日から使える Java SE 7
Yuichi Sakuraba
?
Reladomo in Scala #scala_ks
Reladomo in Scala #scala_ks Reladomo in Scala #scala_ks
Reladomo in Scala #scala_ks
Hiroshi Ito
?
Scala EE 7 Essentials
Scala EE 7 EssentialsScala EE 7 Essentials
Scala EE 7 Essentials
tnoda
?
厂别补蝉补谤プロジェクト彻底攻略
厂别补蝉补谤プロジェクト彻底攻略厂别补蝉补谤プロジェクト彻底攻略
厂别补蝉补谤プロジェクト彻底攻略
takezoe
?
SDLoader SeasarCon 2009 Whire
SDLoader SeasarCon 2009 WhireSDLoader SeasarCon 2009 Whire
SDLoader SeasarCon 2009 Whire
Akio Katayama
?
[Japanese] Skinny Framework で始める Scala #jjug_ccc #ccc_r24
[Japanese] Skinny Framework で始める Scala #jjug_ccc #ccc_r24[Japanese] Skinny Framework で始める Scala #jjug_ccc #ccc_r24
[Japanese] Skinny Framework で始める Scala #jjug_ccc #ccc_r24
Kazuhiro Sera
?
Springて?dao 20070413
Springて?dao 20070413Springて?dao 20070413
Springて?dao 20070413
Funato Takashi
?
Play framework 2.0のちょっとした紹介
Play framework 2.0のちょっとした紹介Play framework 2.0のちょっとした紹介
Play framework 2.0のちょっとした紹介
Ryo RKTM
?
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
linzhixing
?
Cubby 2006-08-23
Cubby 2006-08-23Cubby 2006-08-23
Cubby 2006-08-23
Agata Toshikata
?
础苍迟のススメ
础苍迟のススメ础苍迟のススメ
础苍迟のススメ
Tatsumi Naganuma
?
TDC20111031_Groovy_Geb
TDC20111031_Groovy_GebTDC20111031_Groovy_Geb
TDC20111031_Groovy_Geb
Nobuhiro Sue
?
TypeScript 言語処理系ことはじめ
TypeScript 言語処理系ことはじめTypeScript 言語処理系ことはじめ
TypeScript 言語処理系ことはじめ
Yu Nobuoka
?
Alfresco勉強会#36 alfresco 5でカスタムREST APIを作ってみよう
Alfresco勉強会#36 alfresco 5でカスタムREST APIを作ってみようAlfresco勉強会#36 alfresco 5でカスタムREST APIを作ってみよう
Alfresco勉強会#36 alfresco 5でカスタムREST APIを作ってみよう
Tasuku Otani
?
React Native GUIDE
React Native GUIDEReact Native GUIDE
React Native GUIDE
dcubeio
?
AWS SDK for Haskell開発
AWS SDK for Haskell開発AWS SDK for Haskell開発
AWS SDK for Haskell開発
Nomura Yusuke
?
Apache Torqueについて
Apache TorqueについてApache Torqueについて
Apache Torqueについて
tako pons
?
明日から使える Java SE 7
明日から使える Java SE 7明日から使える Java SE 7
明日から使える Java SE 7
Yuichi Sakuraba
?
Reladomo in Scala #scala_ks
Reladomo in Scala #scala_ks Reladomo in Scala #scala_ks
Reladomo in Scala #scala_ks
Hiroshi Ito
?
Scala EE 7 Essentials
Scala EE 7 EssentialsScala EE 7 Essentials
Scala EE 7 Essentials
tnoda
?
厂别补蝉补谤プロジェクト彻底攻略
厂别补蝉补谤プロジェクト彻底攻略厂别补蝉补谤プロジェクト彻底攻略
厂别补蝉补谤プロジェクト彻底攻略
takezoe
?
SDLoader SeasarCon 2009 Whire
SDLoader SeasarCon 2009 WhireSDLoader SeasarCon 2009 Whire
SDLoader SeasarCon 2009 Whire
Akio Katayama
?
[Japanese] Skinny Framework で始める Scala #jjug_ccc #ccc_r24
[Japanese] Skinny Framework で始める Scala #jjug_ccc #ccc_r24[Japanese] Skinny Framework で始める Scala #jjug_ccc #ccc_r24
[Japanese] Skinny Framework で始める Scala #jjug_ccc #ccc_r24
Kazuhiro Sera
?
Play framework 2.0のちょっとした紹介
Play framework 2.0のちょっとした紹介Play framework 2.0のちょっとした紹介
Play framework 2.0のちょっとした紹介
Ryo RKTM
?
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
linzhixing
?
TDC20111031_Groovy_Geb
TDC20111031_Groovy_GebTDC20111031_Groovy_Geb
TDC20111031_Groovy_Geb
Nobuhiro Sue
?
TypeScript 言語処理系ことはじめ
TypeScript 言語処理系ことはじめTypeScript 言語処理系ことはじめ
TypeScript 言語処理系ことはじめ
Yu Nobuoka
?
Alfresco勉強会#36 alfresco 5でカスタムREST APIを作ってみよう
Alfresco勉強会#36 alfresco 5でカスタムREST APIを作ってみようAlfresco勉強会#36 alfresco 5でカスタムREST APIを作ってみよう
Alfresco勉強会#36 alfresco 5でカスタムREST APIを作ってみよう
Tasuku Otani
?
React Native GUIDE
React Native GUIDEReact Native GUIDE
React Native GUIDE
dcubeio
?
AWS SDK for Haskell開発
AWS SDK for Haskell開発AWS SDK for Haskell開発
AWS SDK for Haskell開発
Nomura Yusuke
?

More from takezoe (20)

Journey of Migrating Millions of Queries on The Cloud
Journey of Migrating Millions of Queries on The CloudJourney of Migrating Millions of Queries on The Cloud
Journey of Migrating Millions of Queries on The Cloud
takezoe
?
GitBucket: Open source self-hosting Git server built by Scala
GitBucket: Open source self-hosting Git server built by ScalaGitBucket: Open source self-hosting Git server built by Scala
GitBucket: Open source self-hosting Git server built by Scala
takezoe
?
Testing Distributed Query Engine as a Service
Testing Distributed Query Engine as a ServiceTesting Distributed Query Engine as a Service
Testing Distributed Query Engine as a Service
takezoe
?
Revisit Dependency Injection in scala
Revisit Dependency Injection in scalaRevisit Dependency Injection in scala
Revisit Dependency Injection in scala
takezoe
?
How to keep maintainability of long life Scala applications
How to keep maintainability of long life Scala applicationsHow to keep maintainability of long life Scala applications
How to keep maintainability of long life Scala applications
takezoe
?
顽张りすき?ない厂肠补濒补
顽张りすき?ない厂肠补濒补顽张りすき?ない厂肠补濒补
顽张りすき?ない厂肠补濒补
takezoe
?
GitBucket: Git Centric Software Development Platform by Scala
GitBucket:  Git Centric Software Development Platform by ScalaGitBucket:  Git Centric Software Development Platform by Scala
GitBucket: Git Centric Software Development Platform by Scala
takezoe
?
Non-Functional Programming in Scala
Non-Functional Programming in ScalaNon-Functional Programming in Scala
Non-Functional Programming in Scala
takezoe
?
厂肠补濒补警察のすすめ
厂肠补濒补警察のすすめ厂肠补濒补警察のすすめ
厂肠补濒补警察のすすめ
takezoe
?
Scala製機械学習サーバ「Apache PredictionIO」
Scala製機械学習サーバ「Apache PredictionIO」Scala製機械学習サーバ「Apache PredictionIO」
Scala製機械学習サーバ「Apache PredictionIO」
takezoe
?
The best of AltJava is Xtend
The best of AltJava is XtendThe best of AltJava is Xtend
The best of AltJava is Xtend
takezoe
?
Scala Warrior and type-safe front-end development with Scala.js
Scala Warrior and type-safe front-end development with Scala.jsScala Warrior and type-safe front-end development with Scala.js
Scala Warrior and type-safe front-end development with Scala.js
takezoe
?
Tracing Microservices with Zipkin
Tracing Microservices with ZipkinTracing Microservices with Zipkin
Tracing Microservices with Zipkin
takezoe
?
Type-safe front-end development with Scala
Type-safe front-end development with ScalaType-safe front-end development with Scala
Type-safe front-end development with Scala
takezoe
?
Scala Frameworks for Web Application 2016
Scala Frameworks for Web Application 2016Scala Frameworks for Web Application 2016
Scala Frameworks for Web Application 2016
takezoe
?
Macro in Scala
Macro in ScalaMacro in Scala
Macro in Scala
takezoe
?
Java9 and Project Jigsaw
Java9 and Project JigsawJava9 and Project Jigsaw
Java9 and Project Jigsaw
takezoe
?
Reactive database access with Slick3
Reactive database access with Slick3Reactive database access with Slick3
Reactive database access with Slick3
takezoe
?
markedj: The best of markdown processor on JVM
markedj: The best of markdown processor on JVMmarkedj: The best of markdown processor on JVM
markedj: The best of markdown processor on JVM
takezoe
?
ネタし?ゃない厂肠补濒补.箩蝉
ネタし?ゃない厂肠补濒补.箩蝉ネタし?ゃない厂肠补濒补.箩蝉
ネタし?ゃない厂肠补濒补.箩蝉
takezoe
?
Journey of Migrating Millions of Queries on The Cloud
Journey of Migrating Millions of Queries on The CloudJourney of Migrating Millions of Queries on The Cloud
Journey of Migrating Millions of Queries on The Cloud
takezoe
?
GitBucket: Open source self-hosting Git server built by Scala
GitBucket: Open source self-hosting Git server built by ScalaGitBucket: Open source self-hosting Git server built by Scala
GitBucket: Open source self-hosting Git server built by Scala
takezoe
?
Testing Distributed Query Engine as a Service
Testing Distributed Query Engine as a ServiceTesting Distributed Query Engine as a Service
Testing Distributed Query Engine as a Service
takezoe
?
Revisit Dependency Injection in scala
Revisit Dependency Injection in scalaRevisit Dependency Injection in scala
Revisit Dependency Injection in scala
takezoe
?
How to keep maintainability of long life Scala applications
How to keep maintainability of long life Scala applicationsHow to keep maintainability of long life Scala applications
How to keep maintainability of long life Scala applications
takezoe
?
顽张りすき?ない厂肠补濒补
顽张りすき?ない厂肠补濒补顽张りすき?ない厂肠补濒补
顽张りすき?ない厂肠补濒补
takezoe
?
GitBucket: Git Centric Software Development Platform by Scala
GitBucket:  Git Centric Software Development Platform by ScalaGitBucket:  Git Centric Software Development Platform by Scala
GitBucket: Git Centric Software Development Platform by Scala
takezoe
?
Non-Functional Programming in Scala
Non-Functional Programming in ScalaNon-Functional Programming in Scala
Non-Functional Programming in Scala
takezoe
?
厂肠补濒补警察のすすめ
厂肠补濒补警察のすすめ厂肠补濒补警察のすすめ
厂肠补濒补警察のすすめ
takezoe
?
Scala製機械学習サーバ「Apache PredictionIO」
Scala製機械学習サーバ「Apache PredictionIO」Scala製機械学習サーバ「Apache PredictionIO」
Scala製機械学習サーバ「Apache PredictionIO」
takezoe
?
The best of AltJava is Xtend
The best of AltJava is XtendThe best of AltJava is Xtend
The best of AltJava is Xtend
takezoe
?
Scala Warrior and type-safe front-end development with Scala.js
Scala Warrior and type-safe front-end development with Scala.jsScala Warrior and type-safe front-end development with Scala.js
Scala Warrior and type-safe front-end development with Scala.js
takezoe
?
Tracing Microservices with Zipkin
Tracing Microservices with ZipkinTracing Microservices with Zipkin
Tracing Microservices with Zipkin
takezoe
?
Type-safe front-end development with Scala
Type-safe front-end development with ScalaType-safe front-end development with Scala
Type-safe front-end development with Scala
takezoe
?
Scala Frameworks for Web Application 2016
Scala Frameworks for Web Application 2016Scala Frameworks for Web Application 2016
Scala Frameworks for Web Application 2016
takezoe
?
Macro in Scala
Macro in ScalaMacro in Scala
Macro in Scala
takezoe
?
Java9 and Project Jigsaw
Java9 and Project JigsawJava9 and Project Jigsaw
Java9 and Project Jigsaw
takezoe
?
Reactive database access with Slick3
Reactive database access with Slick3Reactive database access with Slick3
Reactive database access with Slick3
takezoe
?
markedj: The best of markdown processor on JVM
markedj: The best of markdown processor on JVMmarkedj: The best of markdown processor on JVM
markedj: The best of markdown processor on JVM
takezoe
?
ネタし?ゃない厂肠补濒补.箩蝉
ネタし?ゃない厂肠补濒补.箩蝉ネタし?ゃない厂肠补濒补.箩蝉
ネタし?ゃない厂肠补濒补.箩蝉
takezoe
?

Recently uploaded (6)

(2025/03/03/10:07)厂补濒别蝉丑耻产用アスエネサービス资料.辫诲蹿
(2025/03/03/10:07)厂补濒别蝉丑耻产用アスエネサービス资料.辫诲蹿(2025/03/03/10:07)厂补濒别蝉丑耻产用アスエネサービス资料.辫诲蹿
(2025/03/03/10:07)厂补濒别蝉丑耻产用アスエネサービス资料.辫诲蹿
leesubin14
?
ChatGPT先生から学ぶPYTHONプログラミング入門 - FUSIONDRIVER, INC.
ChatGPT先生から学ぶPYTHONプログラミング入門 - FUSIONDRIVER, INC.ChatGPT先生から学ぶPYTHONプログラミング入門 - FUSIONDRIVER, INC.
ChatGPT先生から学ぶPYTHONプログラミング入門 - FUSIONDRIVER, INC.
FUSIONDRIVER, INC.
?
LF AI & DataでのOSS活動と、それを富士社内で活用する話 - LF AI & Data Japan RUG Kick Off
LF AI & DataでのOSS活動と、それを富士社内で活用する話 - LF AI & Data Japan RUG Kick OffLF AI & DataでのOSS活動と、それを富士社内で活用する話 - LF AI & Data Japan RUG Kick Off
LF AI & DataでのOSS活動と、それを富士社内で活用する話 - LF AI & Data Japan RUG Kick Off
Kosaku Kimura
?
分析モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第44回】
分析モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第44回】分析モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第44回】
分析モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第44回】
Tomoharu ASAMI
?
XPJUGの運営について、2022年のAWS DEV DAYで発表した内容です。
XPJUGの運営について、2022年のAWS DEV DAYで発表した内容です。XPJUGの運営について、2022年のAWS DEV DAYで発表した内容です。
XPJUGの運営について、2022年のAWS DEV DAYで発表した内容です。
Toru Koido
?
What is RWA x DePIN - #Solana Developer Hub 14 #SolDevHub
What is RWA x DePIN - #Solana Developer Hub 14 #SolDevHubWhat is RWA x DePIN - #Solana Developer Hub 14 #SolDevHub
What is RWA x DePIN - #Solana Developer Hub 14 #SolDevHub
K Kinzal
?
(2025/03/03/10:07)厂补濒别蝉丑耻产用アスエネサービス资料.辫诲蹿
(2025/03/03/10:07)厂补濒别蝉丑耻产用アスエネサービス资料.辫诲蹿(2025/03/03/10:07)厂补濒别蝉丑耻产用アスエネサービス资料.辫诲蹿
(2025/03/03/10:07)厂补濒别蝉丑耻产用アスエネサービス资料.辫诲蹿
leesubin14
?
ChatGPT先生から学ぶPYTHONプログラミング入門 - FUSIONDRIVER, INC.
ChatGPT先生から学ぶPYTHONプログラミング入門 - FUSIONDRIVER, INC.ChatGPT先生から学ぶPYTHONプログラミング入門 - FUSIONDRIVER, INC.
ChatGPT先生から学ぶPYTHONプログラミング入門 - FUSIONDRIVER, INC.
FUSIONDRIVER, INC.
?
LF AI & DataでのOSS活動と、それを富士社内で活用する話 - LF AI & Data Japan RUG Kick Off
LF AI & DataでのOSS活動と、それを富士社内で活用する話 - LF AI & Data Japan RUG Kick OffLF AI & DataでのOSS活動と、それを富士社内で活用する話 - LF AI & Data Japan RUG Kick Off
LF AI & DataでのOSS活動と、それを富士社内で活用する話 - LF AI & Data Japan RUG Kick Off
Kosaku Kimura
?
分析モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第44回】
分析モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第44回】分析モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第44回】
分析モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第44回】
Tomoharu ASAMI
?
XPJUGの運営について、2022年のAWS DEV DAYで発表した内容です。
XPJUGの運営について、2022年のAWS DEV DAYで発表した内容です。XPJUGの運営について、2022年のAWS DEV DAYで発表した内容です。
XPJUGの運営について、2022年のAWS DEV DAYで発表した内容です。
Toru Koido
?
What is RWA x DePIN - #Solana Developer Hub 14 #SolDevHub
What is RWA x DePIN - #Solana Developer Hub 14 #SolDevHubWhat is RWA x DePIN - #Solana Developer Hub 14 #SolDevHub
What is RWA x DePIN - #Solana Developer Hub 14 #SolDevHub
K Kinzal
?

イマドキの现场で使える闯补惫补ライブラリ事情

  • 2. 自己紹介 竹添 直樹 NTTデータ先端技術 Scala、アジャイル オープンソース Project Amateras The Seasar Project Apache Click 執筆 イマドキのIDE事情(マイナビニュース) Seasar2徹底入門(翔泳社)
  • 3. 厂肠补濒补逆引きレシピ 竹添直樹 / 島本多可子 出版社 :翔泳社 発売 :2011/7/3 ページ数 :632ページ 価格 :?3,360 「仕事でScalaを使う」 「仕事で を使う」ことを前提としたレシピ集 を使う」 Scalaの基礎からユニットテスト、Play2、Akkaなどの フレームワークやビルドツールsbtまでカバー Scala = Javaよりも安全 + LLのように簡潔な記述
  • 4. 现场で使える闯补惫补ライブラリ 竹添直樹 / 島本多可子 / 小津美夕紀 / 亀井隆司 出版社 :翔泳社 発売 :2011/7/16 ページ数 :624ページ 価格 :?3,780 の定番?実用(+ちょっと面白) の定番?実用( ちょっと面白)Javaライブラリを紹介! 全73の定番?実用( ちょっと面白) ライブラリを紹介! Commons Lang、ICU4J、Commons IO、Joda Time、Holiday.java、Commons Compress、Commons Codec、 Commons Configuration、Commons BeanUtils、S2Util、Guava、fastutil、log4j、Commons Logging、log5j、 Logback、SLF4J、log4jdbc、Velocity、FreeMarker、JSTL、Java Standard EL Functions、Commons FileUpload、 Url Rewrite Filter、SiteMesh、Kaptcha、HSQLDB、H2、Commons DbUtils、SX-DbUtils、Persist、Mirage、dom4j、 Commons JXPath、ROME、NekoHTML、HttpClient、Commons Net、JSch、Commons Email、JAX-WS、 Super CSV、POI、XLSBeans、jXLS、Jacob、iText、JasperReports、JODReports、JODCOnverter、JFreeChart、 charts4j、QRCode for Java、JSONIC、MessagePack、JAXB、XStream、Mockito、JMockit、DBUnit、Mockrunner、 Selenium、Ehcache、Java Memcached Client、jmemcached、Rhino、MVEL、Guice、OVal、Drools、args4j、 Quartz、Javassist
  • 5. 執筆の経緯 Javaには膨大なOSSライブラリが存在する 言語やフレームワークの本は出ているけどライブラリの本 や記事は最近みかけない ずっとJavaをやってきた人には当たり前だけど、新しい Javaプログラマの人はどれを使っていいかわからない 定番のJavaライブラリのカタログ的な 書籍があるとよいのでは?
  • 6. 発売から一年 執筆時はJDK 1.4でも利用できるものが多かったが、 JDK 1.5以降への対応が進んだ Githubで開発されているものが増えてきた ロギングライブラリはLog4jからLogback / SLF4Jが主 流に SeleniumやDroolsなど活発に開発が行われているもの もあるが、大部分のライブラリはメンテナンスフェーズに 入っている ASFで開発されているもの、企業がバックについている ものは継続的にメンテナンスが行われている Javaでは定番のライブラリやフレームワークが完全に 確立している状態
  • 8. JSONライブラリ 書籍で紹介したJSONIC以外にもいくつか の選択肢があります Jackson http://jackson.codehaus.org/ Gson http://code.google.com/p/google-gson/ JsonPullParser https://github.com/vvakame/JsonPullParser
  • 9. 闯厂翱狈ライブラリの性能比较 50000回の変換結果(ミリ秒) JSON Pull Parserは単純なList、Mapを使用でき ないため、代わりにライブラリが提供している JsonArray、JsonHashを使用 FROM TO JSONIC Jackson gson JPP List<String> JSON 32.2 35 50.4 380.3 Map<String,String> JSON 55.7 37.9 58.3 783.5 List<SampleBean> JSON 487.5 210.5 598.9 6930 Map<String,SampleBean> JSON 482.8 205.7 609.5 - JSON List<String> 59.5 25.7 23.4 34.7 JSON Map<String,String> 110.3 133.6 42.4 76.7 JSON List<SampleBean> 1769.4 238.4 369.2 547.6 JSON Map<String,SampleBean> 1829 364.5 397.5 -
  • 10. 各JSONライブラリの性能特性 Jacksonがシリアライズ、デシリアライズ共に安定して高速 Gsonはパースは高速だがシリアライズが遅め JSONICは健闘しているが、JacksonやGsonには及ばな い。特にBeanへのデシリアライズが飛びぬけて遅い JsonPullParserは単純なパースは高速だがシリアライズ が遅い。使い勝手の面でもやや難がある 総合的にはJacksonがおすすめ
  • 11. Thymeleaf http://www.thymeleaf.org/ XMLベースのテンプレートエンジン 特殊な属性を埋め込んだプレーンなXMLファイ ルをテンプレートとして使用可能 Tapestry、Mayaa、Wicket、Facelets等と同じ アプローチ 式言語にはOGNLを採用している Webアプリケーションで使用するための ResolverやContextが予め提供されている
  • 12. 罢丑测尘别濒别补蹿のサンプル <html> <body> <ul th:if="${books.size()} gt 0"> <li th:each="book: ${books}"> <a th:href="${book.url}" th:text="${book.title}">title</a> </li> </ul> TemplateEngine engine = new TemplateEngine(); <div th:if="${books.size()} == 0"> engine.setTemplateResolver(new ClassLoaderTemplateResolver()); 書籍はありません。 </div> List<Book> books = new ArrayList<Book>(); </body> </html> Context context = new Context(); context.setVariable("books", books); String result = engine.process( "jp/sf/amateras/javalib/thymeleaf/ThymeleafSample.xhtml", context); <html xmlns="http://www.w3.org/1999/xhtml"> <body> <ul> <li><a shape="rect" href="http://www.amazon.co.jp/exec/obidos/ASIN/4798121509">Seasar2徹底入門</a></li> <li><a shape="rect" href="http://www.amazon.co.jp/exec/obidos/ASIN/4798123366">现场で使える闯补惫补ライブラリ</a></li> <li><a shape="rect" href="http://www.amazon.co.jp/exec/obidos/ASIN/4798125415">厂肠补濒补逆引きレシピ</a></li> </ul> </body> </html>
  • 13. Clione-SQL http://code.google.com/p/clione-sql/ 軽量なDBアクセスライブラリ 実行可能なSQL(2waySQL)をテンプレートと して使用することができる S2Dao、S2JDBCなどの外出しSQLファイルと 同じアプローチ(ただし記法は違います) 行やインデントに意味を持たせることでテンプ レートをシンプルに記述できる パラメータの型に応じて自動的に演算子を置換 するなどの便利機能もあり ドキュメントが不足している
  • 14. 颁濒颈辞苍别-厂蚕尝のサンプル Connection conn = DriverManager.getConnection("jdbc:hsqldb:mem:.", "sa", ""); List<Book> books = sqlManager(conn) .useFile("jp/sf/amateras/javalib/clionesql/ClioneSQLSample.sql") .findAll(Book.class, params("publisher", "翔泳社").$("price", 3500) ); SELECT * FROM BOOKS WHERE PUBLISHER = /* $publisher */'TITLE' AND PRICE <= /* $price */10000 publisher=null、price=3500の場合: publisher=null、price=nullの場合: SELECT * FROM BOOKS WHERE SELECT * FROM BOOKS PRICE <= 3500 パラメータがnullの場合、行が削除される インデントされた行が全て削除されると (IF文などで分岐を記述する必要がない) 親の行が削除される
  • 15. RESTEasy https://www.jboss.org/resteasy/ JBossで使用されているJAX-RS実装 非同期処理も可能 クライアントライブラリが便利
  • 16. RESTEasyのサンプル サービスのインターフェース(サーバサイドはこのインターフェースを実装して作成) @Path("hello") public interface HelloService { @GET @Path("/{name}") @Produces("text/plain; charset=UTF-8") public String workd(@PathParam("name") String name); } クライアントからの呼び出し RegisterBuiltin.register(ResteasyProviderFactory.getInstance()); // インターフェースからクライアントを動的に生成 HelloService hello = ProxyFactory.create(HelloService.class, "http://localhost:8080/sample"); String result = hello.world("Taro");
  • 17. Jsoup http://jsoup.org/ HTML5対応のHTMLパーサ jQueryのようにCSSセレクタを使用して要素の選択を行う ことができる DOMの操作もjQuery風の流れるインターフェースで行うこ とができる Document doc = Jsoup.connect("http://d.hatena.ne.jp/takezoe/").get(); Elements headlines = doc.select("div.section h3"); for(int i=0; i < headlines.size(); i++){ Element e = headlines.get(i); System.out.println(e.text()); } 似たライブラリとしてjOOX(https://github.com/jOOQ/jOOX )がある こちらはXMLしか扱うことができないが、JavaのDOM APIとの相互運用が可能
  • 18. Zip4j http://www.lingala.net/zip4j/ パスワード付きZIPファイルの生成?解凍が 可能なライブラリ Java標準のAPIやCommons Compressはパ スワード付きZIPファイルに非対応 他にもいくつかの選択肢があります http://code.google.com/p/winzipaes/ http://www.ne.jp/asahi/hishidama/home/tech/soft /java/zip.html
  • 19. Zip4jのサンプル // パラメータを準備 ZipParameters parameters = new ZipParameters(); parameters.setCompressionMethod(Zip4jConstants.COMP_DEFLATE); parameters.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL); parameters.setEncryptFiles(true); parameters.setEncryptionMethod(Zip4jConstants.ENC_METHOD_AES); parameters.setAesKeyStrength(Zip4jConstants.AES_STRENGTH_256); parameters.setPassword("1234"); // zipファイルを作成してファイルを追加 ZipFile zipFile = new ZipFile("sample.zip"); zipFile.addFile(new File("contents/memo.txt"), parameters);
  • 20. jMagick http://www.jmagick.org/ JavaからImageMagickを呼び出すための ラッパ サムネイルやデバイス毎にリサイズした画像の 作成などに便利 Java標準のAPIだと縮小時の画像品質が悪 かったり、メモリ消費が問題になったり 動作にはImageMagikが必要 JNI経由でImageMagickを呼び出すため、共 有ライブラリを配置する必要がある
  • 21. jMagickのサンプル MagickImage image = new MagickImage(new ImageInfo("javalib.jpg")); // 画像のサイズを半分に縮小 int width = (int) image.getDimension().getWidth() / 2; int height = (int) image.getDimension().getHeight() / 2; MagickImage resized = image.scaleImage(width, height); resized.setFileName("javalib_mini.jpg"); resized.writeImage(new ImageInfo());
  • 22. Byteman https://www.jboss.org/byteman javaagentを使用して任意のクラス、メソッド に処理を挿入する プログラムの動作を一時的に変えたり ログを出力するコードを埋め込んだり 例外を投げるコードを埋め込んで異常系のテス トを自動化したり BMUnitというJUnit4と組み合わせて使用する ためのモジュールも提供されている
  • 23. 叠测迟别尘补苍のサンプル ルールファイルの例 RULE Sample Rule CLASS jp.sf.amateras.javalib.byteman.BytemanSample どこにルールを 適用するか METHOD hello AT ENTRY ルールの実行条件 IF TRUE DO 挿入する処理 traceln($1) ENDRULE 起動時にjavaagentとルールファイルを指定 > java -javaagent:lib/byteman.jar=script:rule.btm jp.sf.amateras.javalib.byteman.BytemanSample
  • 24. jqPlot http://www.jqplot.com/ JavaScriptでグラフを描画するjQueryプラ グイン Javaライブラリではありませんが、Javaライ ブラリの代替品ということで 棒グラフ、折れ線グラフ、円グラフ、バブル チャートなどを描画可能 ブラウザ上でグラフを描画するのでサーバ に負荷がかからない点がメリット
  • 25. jqPlotのサンプル <html> <head> <title>jqPlot</title> <script language="javascript" type="text/javascript" src=/slideshow/java-14478400/14478400/"jqplot/jquery.min.js"></script> <!--[if lt IE 9]> <script language="javascript" type="text/javascript" src="jqplot/excanvas.min.js"></script> <![endif]--> <script language="javascript" type="text/javascript" src="jqplot/jquery.jqplot.min.js"></script> <link rel="stylesheet" type="text/css" href="jqplot/jquery.jqplot.min.css" /> </head> <body> <div id="graph" style="height: 400; width: 600;"></div> <script> jQuery( function() { jQuery . jqplot( 'graph', [ [ [ 1, 20 ], [ 2, 100 ], [ 3, 10 ], [ 4, 30 ] ], [ [ 1, 50 ], [ 2, 80 ], [ 3, 30 ], [ 4, 80 ] ] ], { title: '折れ線グラフのサンプル' } ); } ); </script> </body> </html>
  • 26. JGit http://www.eclipse.org/jgit/ JavaからGitにアクセスするためのライブラリ EGit(Eclipse用のGitプラグイン)で使用されており、現 在はEclipse Foundationで開発されている Pure Javaで実装されているため別途Gitをインストー ルする必要がない Antタスクとしても利用可能(一部のコマンドだけ?) Gitと連携していろいろな処理を自動化するのに使える かも?
  • 27. JGitのサンプル // リモートリポジトリをclone Git.cloneRepository() .setURI("https://github.com/takezoe/solr-scala-client.git") .setDirectory(new File("git")) .call(); // ログを取得して表示 Iterable<RevCommit> logs = Git.open(new File("git")).log().call(); for(RevCommit rev: logs){ System.out.println(rev.getCommitterIdent().getEmailAddress() + " - " + rev.getCommitTime()); System.out.println(rev.getFullMessage()); System.out.println("--"); } // diffを表示 Git.open(new File("git")).diff().setOutputStream(System.out).call();
  • 29. 執筆環境 基本的にリモートで作業 4人での共著 はじめて全員で顔をあわせたのは執筆完了後 基本的に無料のツールを使用 原稿はOpenOfficeで執筆 MLはGoogleグループを使用 サンプルコード等はBitBucketで共有 PDFで校正 最近はWikiで原稿を書いています スマートフォン、WiMAXでいつでも?どこでも作業できる
  • 30. 苦労したこと どこまで書くか? 全ての機能は書ききれない 基本的な部分+あまり情報がない部分 ライブラリのバグ、バージョンアップ HSQLDB Drools サイトがなくなっていたり、過去のバージョンの扱 いが微妙だったり java.netにホスティングされているプロジェクト SiteMesh
  • 31. 技術書の難しいところ 出版までの時差 オンラインメディア、ブログ等に勝てない 情報の寿命 あまりに陳腐化の早いものは書籍には適さない
  • 32. 書籍に適しているもの 最新情報よりもある程度固定化されたもの 技術的なものではなく、手法や考え方など読み 物として読めるもの すでに定番化している技術の入門?解説やリ ファレンス的なもの
  • 35. 別のアプローチもあります 執筆中の書籍をダウンロード販売 ManningのEarly Access Programが有名 完成版を購入するよりも安価 できている部分をPDFでダウンロードでき、アップデー トされると通知が届く 最終的にはデザインも入った完成版が提供される 著者、読者双方にメリット 最新情報を部分的にであってもいち早く読める 読者からのフィードバックを書籍に反映できる
  • 36. でも、完成しなかったらどうなるの? 完成しなかったら読者には返金されるの? 著者とはどういう契約になっているのだろう? 完成前に売れ行きの予想がついてしまう Early Access Programでの購入者が少なかっ たら著者のモチベーションダウンで執筆が遅れ るのでは?
  • 37. ご清聴ありがとうございました 大事なことなのでもう一度 「厂肠补濒补逆引きレシピ」 逆引きレシピ」 好評発売中です!