タグ

Javaに関するnaga_sawaのブックマーク (275)

  • [Java]Java 59 bytes FizzBuzz - terazzoの日記

    お題: Java 30byte FizzBuzz - プログラマーの脳みそ ぎ「FizzBuzzが110文字で書けるなら、1文字2bitの文字コードで記述すれば220bitで記述できる。byteに直すと28byteになる」 な「無茶言うなあ」 せ「だいたい、1文字2bitじゃ文字が4種類しか扱えないじゃない」 じゃあ、まじめに「1文字単位でちゃんと符号化できる」という縛りなら、実際何bitならFizzBuzzが記述できるかやってみた。 方針 まず、FizzBuzz自体をなるべく短くする。 ↓ 使用されている文字の種類を少なくする。 ↓ ソースがなるべく短くなる符号化の方法を作る。 ↓ 文字コード作成。 結果 FizzBuzz(97文字)は35種類の文字で書けて、上手く符号化すると59バイトになるよ。 daphne:FizzBuzz terazzo$ ls -l src/z.java -rw

    [Java]Java 59 bytes FizzBuzz - terazzoの日記
    naga_sawa
    naga_sawa 2012/08/09
    ショートコードネタ/コードの文字コードまで手を入れるとFizzBuzzはここまで縮む
  • Javaのクラス宣言5種+α - プログラマーの脳みそ

    Javaのクラス宣言には5種類ある。 トップレベルクラス・ネストしたクラス・内部クラス・ローカル内部クラス・匿名クラス(無名クラスとも言われる)の5種類だ。 今回はこの5種類のクラス宣言のおさらい。 トップレベルクラス これは普段使っているクラス。拡張子が.javaのファイルを作り、そのファイル名とクラス名を合致させなくてはいけない。そのjavaファイルのトップレベルに位置する。 ネストしたクラス 「ネストしたクラス」(Nested class)とはクラスの中にクラスがネストしている状態。トップレベルクラスの内側にstaticキーワードをつけてクラス宣言を行う。 public class Outer { public static class Nested { } } このネストしたクラスは、トップレベルクラスと同等の機能性を持つ。 クラス名はOuter.Nestedという名前で扱われるが

    Javaのクラス宣言5種+α - プログラマーの脳みそ
    naga_sawa
    naga_sawa 2012/03/11
    Javaのクラス宣言と影響範囲のまとめ
  • Javadocを書かない - しげるメモ

    前回はJavadocを書く - しげるメモというタイトルで話を進めましたが、今回は逆にJavadocを減らすプラクティスについてメモがてら。 私は別にJavadocを書くのが好きなわけではなく、単純に書いたほうがめんどくさくないと思うのでそうしてます。ただ、Javadocを書くのもかなりめんどくさいとは自分自身で感じているので、そのめんどくささをできるだけ減らす道を現在も模索中です。 やり方としては単純で、次のうちどちらかです。 Javadocをそもそも書かない Javadocに書くことを減らす かなりの部分がEffective Java (Java Series)に紹介されているプラクティスとかぶりますが、ここではあくまで"めんどくさくないJavadoc"という視点でいきます。 Javadocをそもそも書かない If an API is to be usable, it must be

    Javadocを書かない - しげるメモ
    naga_sawa
    naga_sawa 2012/02/27
    Javadocの記載を削減するtips/
  • Throwableについて本気出して考えてみた - 都元ダイスケ IT-PRESS

    Throwable、Exception、RuntimeException(RTE)、Errorあたりを整理しながら、色々考えてみた。私見に基づくので、間違っているかもしれないけれど、自分としては頭が整理できたかな、と感じたので晒してみる。異論があったらコメントください。 まず、一番基礎的なところで、継承関係の整理から。こんなツリーになっています。 Throwable Error Exception RuntimeException そして、稿での用語の定義。caller=呼出す側のコード callee=呼出される側(throwする側)のコードとします。 Throwable Throwableは「throw文に指定できる何か」という意味ですね。 Instances of two subclasses, Error and Exception, are conventionally used

    Throwableについて本気出して考えてみた - 都元ダイスケ IT-PRESS
    naga_sawa
    naga_sawa 2012/01/13
    責任区分によるJava例外の使い分け/Error->\(^o^)/オワタ RuntimeException->ヽ(`д´)ノウンコワタスナ Exception->(´・ω・`)ナンカオキタ...
  • Java SE 6 じゃじゃ馬ならし 管理用ツール

    管理に使える便利なツール はじめに J2SE 5.0 には管理用やデバッグで使える jmap などのツールが付属していました。ところが、これらのツールは Windows では使えなかったのです。 それがやっと Java SE 6 で、Windows でも使えるようになったのです。そこで、あらためてここで紹介しましょう。取りあげるのは jinfo jmap jstack の 3 つのツールです。 また、もう 1 つ便利なツールが加わりました。それが jhat です。これもいっしょに紹介します。 jinfo jmapJava VM の構成情報を参照、設定するためのツールです。 とりあえず試してみましょう。題材は OutOfMemoryError のハンドリングで使用した OutOfMemorySample です。 jinfo の引数は引数はターゲットとなる Java VM の PID で

    naga_sawa
    naga_sawa 2011/12/28
    Java6に標準で入ってる管理ツール/jinfo JVMの構成情報の表示/jmap ヒープダンプの出力/jstack スレッドダンプの出力
  • Protocol Buffer、Thrift、Avro、MessagePack for Javaのパフォーマンス測定

    @frsyukiさんの作っているMessagePackのJava版が出ていたので軽くパフォーマンス測定してみました。 http://sourceforge.jp/projects/msgpack/devel/ パフォーマンス測定に使ったプロジェクトは、TPC(Thrift-ProtocolBuffer-Compare)です。TPCはシリアライズ、デシリアライズテクノロジを色々とベンチマークして、かつ最後にGoogleChartでグラフを出してくれる賢いやつです。GJ、TPC。ちなみに今回の測定のやつは、自前でAMF用作ったり、ややカスタマイズしてます。 http://code.google.com/p/thrift-protobuf-compare/ 測定は、イテレーション数を500、1000、2000回でそれぞれ測定しました。測定結果及びまとめは私の主観なので、そこは各自測定して、各々判

    Protocol Buffer、Thrift、Avro、MessagePack for Javaのパフォーマンス測定
    naga_sawa
    naga_sawa 2011/12/20
    各種シリアライザのベンチマーク
  • GCViewer

    GCViewer (download) is a free open source tool to visualize data produced by the Java VM options -verbose:gc and -Xloggc:<file>. It also calculates garbage collection related performance metrics (throughput, accumulated pauses, longest pause, etc.). This can be very useful when tuning the garbage collection of a particular application by changing generation sizes or setting the initial heap size.

    naga_sawa
    naga_sawa 2011/11/21
    Java GCログの可視化解析ツール
  • チューニング例1 「Java VMのチューニング」(@IT:連載:J2EEパフォーマンスチューニング 第4回(2/4))

    ヒープサイズを決める ヒープサイズがシステムの使用可能な空き物理メモリより大きくならないようにします。ページスワップが頻繁に発生しない程度に設定を行ってください。OSのページングの設定にも影響しますが、使用可能な物理メモリ(OSまたはそのほかのプロセスによって占有されない物理メモリ)の80%が妥当な値と思われます。今回のテストでは、(全体メモリ[512Mbytes] -OS使用のメモリサイズ[128Mbytes])×80%=307Mbytesとなります。また、通常、XmsとXmxは同じ値に設定され、ヒープ時の負荷を軽減します。 GC値を決める パフォーマンスを向上させるポイントは、キャッシュされたオブジェクトをなるべく再利用するようにアプリケーションを作成することと、New世代領域とOld世代領域の比率を考えながらXX:NewSize、XX:MaxNewSizeの値を設定することです。有効

    チューニング例1 「Java VMのチューニング」(@IT:連載:J2EEパフォーマンスチューニング 第4回(2/4))
    naga_sawa
    naga_sawa 2011/11/21
    Java GCチューニング
  • @IT:事例に学ぶWebシステム開発のワンポイント(6)APサーバからの応答がなくなった、なぜ?

    今回のワンポイント アプリケーション・サーバから応答がない、いわゆる無応答状態は、ベンダのサポートセンターに寄せられる質問でも数が多いといわれている。無応答状態の原因の多くはGC(ガベージ・コレクション)にあり、これはGCチューニングにより解消可能だ。今回の記事では、GCチューニングにより無応答状態を解決する道のりを紹介していく。 サーバから応答がない、なぜ? あるとき、長時間レスポンスが返ってこないという事象が発生した。定期的な応答時間の監視から、無応答状態はアプリケーション・サーバを起動してから数時間経過すると発生し、数分間無応答状態が続いた後に再び正常に処理を開始することが分かった。 無応答の原因を探る 筆者はこの現象を見て、無応答が数分間で終わっていることからガベージ・コレクション(GC)が原因であるとの仮説を立てた。GC実行中、アプリケーション・サーバのCPUはGCのためだけに使

    @IT:事例に学ぶWebシステム開発のワンポイント(6)APサーバからの応答がなくなった、なぜ?
    naga_sawa
    naga_sawa 2011/11/21
    Java GCチューニング
  • Webアプリの問題点を「見える化」する7つ道具

    Webアプリの問題点を「見える化」する7つ道具:現場から学ぶWebアプリ開発のトラブルハック(1)(3/3 ページ) その6:プロファイラ プロファイラとは、実行中のプログラムの動作を分析するツールである。メソッドの処理時間や呼び出し関係を統計情報として提供するメソッドプロファイラと、メソッドから生成されたオブジェクトの数やサイズ、世代情報を提供するオブジェクトプロファイラの2つが存在する。 ■使いどころ メソッドプロファイラは、HWリソースモニタリングツールでAPサーバのCPUがボトルネックになっているときに有効である。また、スレッドダンプ解析で問題が発見できなかった場合に使用する。 一方、オブジェクトプロファイラは、OutOfMemoryエラーが発生しているときや、GCログ分析でヒープ使用量が右肩上がりになっているときに、巨大なオブジェクトや無駄なオブジェクト生成をしているコードを発見

    Webアプリの問題点を「見える化」する7つ道具
    naga_sawa
    naga_sawa 2011/11/21
    Java のWebアプリのトラブルシュート
  • XPathで名前空間URIを使う - Sunflat のブログ

    XML Schemaがあるシンプルな構造のXMLデータは、JAXB(id:sunflat:20080430:p1)を使って簡単に読み書きできるけど、XML Schemaが無い場合や複雑に入り組んだXMLデータの場合は、XPathを使うと便利そう。 だた、XPathで、名前空間(namespace URI)のついた要素を検索するのが結構面倒っぽい。NamespaceContextインタフェースを実装したクラスを作れば良いみたいなんだけど。 とりあえず、NamespaceContextインタフェースを実装した以下のようなクラスを作って、 import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import javax.xml.XMLConstants; import javax.xml.n

    XPathで名前空間URIを使う - Sunflat のブログ
    naga_sawa
    naga_sawa 2011/11/03
    XPath で名前空間入りXMLを扱う方法
  • Java で XPath を使う方法 - vivid memo

    注意 [2009.10.13] この記事で書かれている方法は、W3C DOM 3 XPath Specification とは異なる独自実装を用いています。 W3C DOM 3 XPath の勧告に従った方法で XPath を評価する という記事を書きましたので、そちらに記した方法で XPath 式を実行することをおすすめします。 JavaXPath を使う方法に関しては javax.xml.xpath.XPath vs org.apache.xpath.XPathAPI という文書を読むとよくわかる。 が、各クラスの名前空間が明示されていなくてちょっと悩むかも。 というわけで import 文で名前空間を明示したサンプルコードを書いた。 XML の名前空間に関する部分は含んでいない。 なお、読み込んだ XML ファイルは さきほど書いた記事 のソースコード中にあるものと同等で

    Java で XPath を使う方法 - vivid memo
    naga_sawa
    naga_sawa 2011/11/03
    XPath で要素にアクセスする方法
  • DOMとSAXとStAXと。 - 都元ダイスケ IT-PRESS

    こんな名前のAPIがありますね。主にXMLの読み込みを行う為のAPI群であります。SAX以外は、書き出しもできますね。そう、SAXは書き出しできないのですね、基的に。 <foo> <bar>baz</bar> </foo> っていうもの凄い単純なXMLを、これらのAPIでどのように扱うのか。比較なエントリ。 まずはDOM DOMは、パース時にXMLの内容を全てメモリ上に保持し、パース後にどの要素にもいつでもアクセスできるような環境を作り出す。 import java.io.ByteArrayInputStream; import java.io.StringWriter; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.t

    DOMとSAXとStAXと。 - 都元ダイスケ IT-PRESS
    naga_sawa
    naga_sawa 2011/11/03
    StAX でのXML処理
  • wise9 › JavaとJavaScriptの20年戦争

    モバイルゲーム 物凄い勢いで勃興したモバイルゲーム業界は、いろいろな課題や問題に直面しながらも巨大化し、今日の時点でのスマートフォン向けゲームの市場へと継承されていきます。 モバイルゲーム歴史 2001 Javaアプリと3Dゲームの登場 Javaが利用できるようになったことにより、ダウンロード型のゲームが供給できるようになりました。 2002 携帯電話端末の大容量化・3D化競争 Java搭載携帯電話端末が登場してからごく僅か1年の間に、アプリのサイズに関しては10倍に広大化し、表現方法も2Dから3Dにシフトし始めました。J-PHONEは『ゼビウス』や『スペースハリアー』などといった昔のアーケードゲームを、ドコモはSIMCITYなどパソコンで世界的規模のヒットを飛ばしたゲームを主力商品としていました。 2003 モバイルゲームの一般化 メモリの制限が厳しいJava仮想マシン上ではなく、OS

    naga_sawa
    naga_sawa 2011/07/28
    JavaとJavaScriptの歴史
  • 第5回 クライアント側の実装 | gihyo.jp

    今回は、WebSocket APIについて解説と、WebSocketを使ったチャットアプリケーションのクライアント側の実装を行ないます。 WebSocketオブジェクト ブラウザのJavaScriptからWebSocketを利用するために、WebSocket APIがW3Cで策定中です。執筆時点のブラウザ(Safari及びChrome)は、最新のドラフト「Editor's Draft 27 July 2010」に対応していません。ここでは、現行のブラウザが対応しているWebSocketの仕様を解説した後、最新の仕様について説明します。 インスタンス化 WebSocketはインスタンス時、第一引数に「ws://」または「wss://」で始まる文字列で接続先を指定します。また、省略可能な第二引数にはサブプロトコルを指定できます。サブプロトコルについては後述します。 new WebSocket(

    第5回 クライアント側の実装 | gihyo.jp
    naga_sawa
    naga_sawa 2011/05/12
    Jetty を使った WebSocket アプリ / JavaScriptサイドの実装
  • 第4回 サーバ側の実装(後編) | gihyo.jp

    今回は、前回に引き続き、Jettyを使ったWebSocketに対応したチャットアプリケーションのサーバ側の実装を行ないます。 MyWebSocketServlet クライアントから接続要求があった時に、「⁠WebSocket」インターフェイスの実装クラスを返す「Servlet」を作成する必要があります。 以下のように新規クラスを作成してください。 ソース・フォルダー:WebSocketChat/src/main/java パッケージ:webSocketChat 名前:MyWebSocketServlet スーパークラス:org.eclipse.jetty.websocket.WebSocketServlet クライアントから接続があった時に呼ばれる「doWebSocketConnect」メソッドを、「⁠MyWebSocket」インスタンスを返すように修正します。 package webSo

    第4回 サーバ側の実装(後編) | gihyo.jp
    naga_sawa
    naga_sawa 2011/05/12
    Jetty を使った WebSocket アプリ / サーバサイドのWebSocket口の実装
  • 第3回 サーバ側の実装(前編) | gihyo.jp

    今回と次回を通して、WebSocketを使ったチャットアプリケーションのサーバ側の実装を解説します。 WebSocketプロトコル サーバ側の実装を行なう前に、WebSocket APIを使うにあたり知っておいたほうが良いと思われるWebSocketプロトコルの仕様について簡単に説明します。 リビジョンについて WebSocketはプロトコルもAPIもまだ策定中の仕様であり、リビジョンの違いにより問題が起こる可能性があります。最近の例では、リビジョン75と76では互換性がありません。両方のリビジョンに対応するため、片方の仕様で接続し失敗した時に他方で接続し直すサーバや、起動時にオプションでどちらを使用するのかを変更するサーバ等の実装があります。仕様策定中は特に、クライアントや中継サーバ等がどのリビジョンに対応しているかを考慮に入れ、サーバのライブラリのバージョン変更を行なう必要があります。

    第3回 サーバ側の実装(前編) | gihyo.jp
    naga_sawa
    naga_sawa 2011/05/12
    Jetty を使った WebSocket アプリ / サーバサイド実装
  • syboos.jp

    naga_sawa
    naga_sawa 2011/03/09
    DWRの設定ファイル dwr.xml の配置場所の指定方法
  • Apache Tomcat 6.0 (6.0.53) - Class Loader HOW-TO

    Like many server applications, Tomcat installs a variety of class loaders (that is, classes that implement java.lang.ClassLoader) to allow different portions of the container, and the web applications running on the container, to have access to different repositories of available classes and resources. This mechanism is used to provide the functionality defined in the Servlet Specification, versio

    naga_sawa
    naga_sawa 2011/03/01
    Tomcat6のクラスローダー階層
  • 忘れな~い録 SQLiteのJava実装「SqlJet」を使ってみた

    SQLiteは軽量の組み込みDBとして最近良く使われていて、PHPPython、 最近ではAndroidiPhoneにも搭載されている。 SQLiteにはCのライブラリが用意されていて、C/C++からは結構自由に扱えるようだが、 Javaから使うには他のDBMSと同様、JDBC経由でアクセスするらしい。 しかしどうせなら、組み込みDBらしくAPIからゴリゴリ扱いたいなぁと思っていたら、 SQLiteをのライブラリをJavaで実装した、「SQLJet」というものがあるらしい。 しかもSQLJet単体で動作し、SQLiteも不要。これは良いと思い、使ってみた。 SQLJet http://sqljet.com/ SQLJet API Tutorial http://sqljet.com/tutorial.html 1.ダウンロード~設定 まずは上記のサイトの「Download SQLJet

    naga_sawa
    naga_sawa 2011/02/13
    pureJavaの非JDBC SQLite ライブラリ