You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert
Javaで日付を扱うときDateやCalendarを使います。 これらのクラスを使うとき、結構手順を踏まないと目的の日付を取得出来ません。 コードも長くなってメンテナンスもしにくくなります。 そんな問題を解決したのが、日付に特化した「Joda-Time」ライブラリです。 よく使うもので大きく分けると「日付」と「期間」という2つの括りになります。 内容が長くなるのでこの2つで分けて記事にしました。 期間編はこちらです。shinsuke789.hatenablog.jp 日本語のドキュメントがあまりなかったので、時間をかけてまとめてみました。 まとめてみて感じたのが、結構簡単に日付を扱えるということ、作成した日付に対して連続で違う処理を行えることがかなりいいと感じました。 ただ、柔軟すぎてどのメソッドを使ったらいいか迷いますので、ここでは簡潔に書けて必要なものだけ上げました。 目次 Joda-
JPHPというJavaで書かれたPHP処理系があります。これは2013年10月にはじまった新しいプロジェクトで、大半をメイン開発者一人で開発しているようですが、既に一定以上の完成度です。また、内部的にはPHPファイルを解釈して直接Javaバイトコードにコンパイルしており、かなり高速なPHP処理系になっています。 他のPHP処理系と異なり、既存のPHPコードをWebサーバ上で動かすことを重視していないようにも見えますが、興味深いプロジェクトですので紹介します。 JPHPを動かしてみる さっそくJPHPを試してみましょう。現時点ではGitHubからソースコードを持ってきてビルドする必要があります。JDK7以上が必要ですので注意してください。JPHPのドキュメント「Getting Started」の通り、次のようにしてJPHPがビルドできます。 $ git clone https://githu
JSR 133に、Javaのメモリモデルについての情報がある。 そして、この情報は和訳されている様子。 http://www.javareading.com/bof/cookbook-J20060917.html reorderとか、volatileの話など、かなりマニアックな情報だ。 さらに、FAQの話もある。先のダブルチェックはNGという話もここに情報が・・・ http://www.cs.umd.edu/~pugh/java/memoryModel/jsr-133-faq.html このようにすれば、複数スレッドからアクセスされても安全な実装になるらしい。 public class InitializeOnDemandHolder { private static class LazyHolder { public static InitializeOnDemandHolder sin
Singleton 作成時のダブルチェックロッキングは動作が保証されていません。 マルチスレッド絡みのバグなので、障害が発生しても非常に見つけにくい物です。 ダブルチェックロッキングを使用した例 public static SingletonTest getInstance() { if (instance_ == null) { synchronized (SingletonTest.class) { ・・・・・・1 if (instance_ == null) ・・・・・・2 instance_ = new SingletonTest(); ・・・・・・3 } } return instance_; }
遅延初期化(lazy initialization)とは、メンバフィールドやメンバフィールドが参照するオブジェクトの生成を、インスタンスが実際に必要になるまで延期することである。これにより、クラスのコンストラクタにおいて、フィールドの値を計算したり参照されるオブジェクトを生成したりする必要がなくなる。また、クラスやインスタンスの循環初期化を防止することにもつながり、その他の最適化も可能になる。 遅延初期化にはクラスメソッドあるいはインスタンスメソッドが用いられる。どちらが用いられるかはメンバオブジェクトが static であるかどうかによる。メソッドは、インスタンスが生成済であるかどうかを確認し、生成されていない場合にはインスタンスを生成する。インスタンスが生成済みの場合、単純にインスタンスを返す。 // 遅延初期化をシングルスレッドで行う、正しいバージョン final class Foo
数年ぶりとかいうレベルでJavaのスレッドに触ったもんだから色々忘れてたので、忘れてたことまとめておく。 ダブルチェックロッキングパターンって何でダメなんだっけ? Javaではダブルチェックロッキングパターンって場合によってはクリティカルにヤヴァい事があります。やばいってことは覚えてたんだけど、どういう理由で、どういう場面でやばいのか忘れてました。 private Object checkObj; public void dcheck(){ if( checkObj == null) synchronized{ if(checkObj==null){ Object o = new Object(); checkObj = o; } } ……… } 上のコードがクリティカルにヤヴァいパターンです。 ダブルチェックロッキングパターンってのは主に、マルチスレッド環境でシングルトンなオブジェクトを
Java™ IDL は分散オブジェクト、つまりネットワーク上の異なるプラットフォームで相互に作用するオブジェクトのためのテクノロジです。Java IDL を使うと、Java プログラミング言語で書かれているか、または C、C++、COBOL などの言語で書かれているかに関係なく、オブジェクトは相互に作用することができます。 これが可能なのは、Java IDL が業界標準の分散オブジェクトモデルである Common Object Request Brokerage Architecture (CORBA) に基づいているからです。CORBA の重要な特長は IDL にあります。IDL は言語に中立なインタフェース定義言語です。CORBA をサポートする言語にはそれぞれ独自の IDL マッピングがあり、Java IDL は名前が示すとおり Java のマッピングをサポートしています。IDL と
WebSocketとは HTML5仕様を構成する要素の一つで一方向通信しかできなかった既存のHTML通信とは違って、 JavascriptのWebSocket APIとサーバサイドのWebSocket機能でクライアントとサーバ間の両方向通信を可能にする技術だ。 WebSocketの特徴 WebSocketは、通信ごとにHTTPコネクションを開く・閉じるのを繰り返すのではなく、 いったんHTTPコネクションを開いたら、コネクションを開いたままにしておいて、データをやりとりする。 コネクションが維持される間は、Ajaxのようにクライアントからサーバへの通信だけでなく、 サーバからクライアントに直接データを送ることもできる。 以下は、ChromeでWebSocketの公式サイトにあるデモを試したキャプチャである。 "Rock it with HTML5 WebSocket"という文字列を何回もS
前回のエージェントのピア間移動に続いて、今回は別ピア上にいるエージェントが持ってるメソッドを呼び出してみる。 要は RPC みたいなもの。(Java だから RMC ?。 エージェントだから RAC かもしれないw) 例によって、別々のコンソールからそれぞれ1個ずつ、計 2 個のピアを起動。 (3個以上でもいいですけどね) まず 1 ピア目。自身に繋ぎます。名前は p1。 > piaxshell -r2000 -slocalhost:2000 p1 (コマンドヘルプ省略) Input Command > 続いて 2 ピア目。p1 に繋ぎます。名前は p2。 > piaxshell -r2001 -slocalhost:2000 p2 (コマンドヘルプ省略) Input Command > 立ち上がったら p1, p2 それぞれで join コマンドを実行して、オンラインにする。 Input
PIAX を使ったコードを書く前に知っておいた方が脳内に地図ができそうなネタをまとめてみましたです。 PIAX のモジュール構成 PIAX の中味は機能で大きく分けられていて Agent, Ov, Transport の3層になってる。 2.1 へのアップデートの際には、この3層構造に合わせる形でパッケージ構成が変更されていて以前よりわかりやすくなってる。 Agent org.piax.agent.* モバイルエージェントの仕組みを提供 Ov org.piax.ov.* オーバーレイネットワークの構築、維持、その上での探索機能の提供 Transport org.piax.trans.* ピア間の通信のサポート、同期・非同期RPCの提供 TCP4層ネットワークモデルのアプリケーション層, ネットワーク層, データリンク層のイメージに近い。 Transport 層はもう少し分けると ID 層と
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く