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
先週はノンブロッキングI/Oがどういうものかを解説し,ベンチマークを行ってみました。今週は実際にコードを書いてみましょう。 ノンブロッキングI/Oが真価を発揮するのはサーバーなので,ここでもサーバーに関して解説します。 Selectorクラス ノンブロッキングの主役となるのが,先週言及したjava.nio.channels.Selectorクラスです。 主役がSelectorクラスだとしたら,脇役は? 脇役として登場するのはjava.nio.channels.SelectableChannelクラスです。そして,黒子としてjava.nio.channels.SelectionKeyクラスがいます。 Selectorクラスは入出力に関する操作を監視するためのクラスです。監視する対象であるチャネルがSelectableChannelクラスになります。 SelectableChannelクラスは
今まで,この連載では月ごとにテーマを決めて解説を行うというスタイルで行ってきました。今月はちょっと変則的なのですが,月の前半と後半に分けてみます。 というのも,今月の15日から4日間,Javaの最大のお祭りJavaOneがサンフランシスコで開催されるからです。また,前日の4月14日にはNetBeans Dayも開催されます。 4日間の会期中,テクニカルセッション,BOF,ハンズオンラボを含めて300以上のセッションが,朝8時30分から夜中の11時30分までびっちりと行われます。まさに,Java漬けの一週間です。 筆者もJavaOneに参加するので,今月の後半はJavaOneのレポートをお送りする予定です。 ブロックしないということはどういうこと? さて,話をNew I/Oに戻しましょう。 今回はノンブロッキングI/Oについて取りあげます。 ノンブロッキングI/Oとは,処理をブロックすること
チャネルのクラス構成 先週はバッファだけでしたが,今週はチャネルも組みあわせて使っていきましょう。 チャネルはストリームの代わりになるクラス群です。大もとになるのはjava.nio.channels.Channelインタフェースです。とはいうものの,ChannelインタフェースにはcloseメソッドとisOpenメソッドしか定義されていません。実際の入出力は,Channelインタフェースから派生したインタフェースを使用します。 入力はReadableByteChannelインタフェース,出力はWritableByteChannelインタフェースで定義します。このほか,大量の入力を扱うScatteringByteChannelインタフェース,同様に大量の出力を扱うGatheringByteChannelインタフェースが提供されています。 これらのインタフェースはすべて名前にByteを含んでい
バッファはプリミティブに特化したデータ・コンテナのクラスです。ArrayListクラスなどのコレクションとは異なり,オブジェクトを保持することはできないし,サイズを変更することもできません。また,バッファに異なる型の値を保持することもできません。 これらの機能の制限は,入出力に特化していることに起因しています。基本的に入出力ではバイトが読み書きできればいいので,この割り切りは潔いですね。 バッファの特徴を列挙しておきます。 プリミティブに限定したコンテナ サイズ不変 型の混合は不可 基本的にシーケンシャル・アクセス(ランダム・アクセスも可能) position,limit,capacityという三つのプロパティを持つ ヒープ外のメモリーへの直接アクセスをサポート バッファは,基底クラスとなるjava.nio.Bufferクラスと,intなどの型ごとに定義されている派生クラスから構成されてい
先週はNew I/Oを紹介しました。今週からは実際に使ってみましょう。 ここで使用するサンプルは「ファイルのコピー」を行います。ストリームを使用したものが1種類とNew I/Oを使用したものが3種類,合計4種類のサンプルになります。 サンプルのダウンロードfilecopy.zip filecopy.zipにはソースコードとJDK 5.0 update 6でコンパイルしたクラスファイルが含まれています。 使い方はすべて同一で,引数にコピー元のファイルとコピー先のファイルを指定します。例えば,ストリーム版サンプルでsource.txtをdestination.txtにコピーする場合は次のようになります いろいろなサイズのファイルをコピーしてみると,コピー速度の違いを感覚的に理解できるはずです。 とはいうものの,どの程度違うか具体的な数字がないとわからないですね。そこで,テストを行うためのCop
先々月、先月とNIO2の新しいファイルシステムについて解説してきました。今月は、NIO2の残りの機能である非同期I/Oとソケットチャネルでのマルチキャストについて解説していきます。 なお、ここではNIO2の機能を中心に解説するため、バッファやチャネルなどNIOの機能に関しては特に解説を加えておりません。NIOについては、本連載では2006年の4月から5月にかけて「New I/Oで高速な入出力」と題して解説していますので、そちらをご参照ください。 通常のI/O 一般的に入出力処理を行う場合、処理が完了するまで制御が戻ってくることはありません。たとえば、インプットストリームでstream.read(bytes);と記述した場合、読み込みが終了するまでreadメソッドが戻ってくることはありません(例外が発生することはあります)。つまり、処理がブロックされるわけです。 入出力が高速に行われるのであ
先月に引き続き、今月もNIO2で導入されたファイルシステムインタフェースについて紹介していきます。 簡単に前回のおさらいをしておきましょう。 新しいファイルシステムインタフェースは、既存のFileクラスの欠点を解決すべく導入されたAPIです。 ファイルシステムを表すのがjava.nio.file.FileSystemクラス、java.io.Fileクラスに対応するのがjava.nio.file.Pathインタフェースです。Pathオブジェクトに対するユーティリティメソッドはjava.nio.file.Filesクラスで提供されています。 先月はPathオブジェクトの生成、Fileオブジェクトとの相互変換、入出力などに関して説明を加えました。今月はFilesクラスで提供している機能を中心に説明を加えていきます。 ファイル・ディレクトリの作成 はじめに、ファイルやディレクトリを作成するところか
今回は、J2SE 1.4.0の話からはじめましょう。 J2SE 1.4.0がリリースされたのが2002年。すでに9年も経ってしまいました。 さすがに最近こそ使われなくなったものの、日本においてはJ2SE 1.4.xが一番多く使われていたバージョンなのではないでしょうか。 そのJ2SE 1.4.0の時に新機能として導入されたのが、JSR 51 New I/O APIs for the Java Platform、通称NIOです。 NIOは、java.ioを補う新しいI/Oに関するAPIで、入出力に特化したバッファや、ストリームよりも高効率なチャネルなどを提供しています。また、ノンブロッキングI/OもNIOで導入されました。 NIOは一般にはそれほど使われていないようですが、GlassFishやTomcatなど多くのフレームワークやライブラリで導入されています。 しかし、JSR 51は当初から
最近のCPUはデュアルコアは当たり前、デスクトップPCでさえクアッドコアを使用できる時代になりました。 このような時代の流れを先行するかのごとく、Javaでは当初よりスレッドを使った並行プログラミングが可能でした。とはいうものの、Threadクラスを使いこなすのはなかなか難しいというのも事実です。 そこで、J2SE 5.0では並行プログラミング用のAPIとして、Concurrency Utilitiesが導入されました。Concurrency Utilitiesには大別して次のような機能を持っています。 タスクの非同期実行機構 並行コレクション ロック、シンクロナイザ アトミック処理 Java SE 6ではConcurrency Utilitiesも強化されています。4つの機能のそれぞれが強化されているのですが、変更点はそれほど大きくありません。そこで、本連載ではタスクの非同期実行機能の変
Java SEには便利な機能が数多くあるのですが,新しい機能ほど活用されていないのではないでしょうか。筆者がJ2SE 1.4であまり使われていないのではないかと感じる機能を挙げてみます。 Assertion New I/O Image I/O Preferences API Logging API AssertionやLogging APIは,JUnitやLog4Jなどのオープンソースのプロダクトで置き換えられるので,それほど使われていなくても不思議ではありません。 しかし,JPEGのイメージを出力するために,いまだにcom.sun.image.codec.jpeg.JPEGImageEncoderクラスを使用しているのは腑に落ちません。J2SE 1.3の頃に作られたアプリケーションであればわかりますが,J2SE 1.4以降に作られたアプリケーションではImage I/Oを使うべきではない
Photo from Kıvanç Niş ネーミングについてまじめに長文を書いてみました。もし、あなたの会社にネーミングに疎い新人プログラマーがいたら読ませてやってください。 ちなみに、この記事はシステム開発のネーミングについて書いています。また、このブログの特性上、英語でのネーミングを想定していますが、日本語のネーミングでも同様に考えることができると思います。 1. ネーミングの重要性 一般に、熟練のプログラマーほど、プログラミングにおける ネーミングに時間をかけます。それはなぜでしょうか。 あなたが付けたその変数名 data は、その時点では、自分のために付けた「目印的なもの」であったかもしれません。しかし、そのソースコードを引き継いだ担当者など多くの人が、その名前を見ることになります。 // データを取得する var data = getData(1); そしてその名前は、そのソー
株式会社ミクシィ 開発部 システム運用グループの長野です。普段はミクシィのアプリケーション運用を担当しております。今回から数回にわたり、最近Webアプリケーションのスケーラビリティの分野で話題になっているmemcachedについて、弊社開発部 研究開発グループの前坂とともに、使い方や内部構造、運用について解説させて頂きます。 memcachedとは memcachedは、LiveJournalを運営していたDanga Interactive社で、Brad Fitzpatrick氏が中心となって開発されたソフトウェアです。現在ではmixiやはてな、Facebook、Vox、LiveJournalなど、さまざまなサービスでWebアプリケーションのスケーラビリティを向上させる重要な要素になっています。 多くのWebアプリケーションは、RDBMSにデータを格納し、アプリケーションサーバでそのデータ
複数のカメラを使う https://techbooster.org/andriod/device/2358/ カメラの使用方法(2) https://techbooster.org/andriod/device/362/ パーミッションの設定 カメラ機能を利用するにはパーミッションの設定が必要です。忘れないように、はじめに追加しておくとよいでしょう ■AndroidManifest.xml <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="org.jpn.techbooster.sample.camerapreviews" android:versionCode="1" android:versionName
GitHub Flow Scott Chacon on the Interwebs 31 Aug 2011 git-flowの問題点 (Issues with git-flow) 私は人々にGitを教えるためにあちこちを飛び回っているが、最近のほぼすべてのクラスやワークショップで git-flow についてどう思うかを尋ねられた。私はいつも、git-flowは素晴らしいと思うと答えている。何百万ものワークフローを持ったシステム(Git)を提供し、ドキュメントもあるし、よくテストされている。フレキシブルなワークフローは、実に容易なやり方で多くの開発者の役に立つ。標準的なものになりつつあり、開発者はプロジェクトや企業の間を移動しつつこの標準的なワークフローに馴染むことができる。 しかしながら、それ故の問題も抱えている。新しいフィーチャーブランチを master ではなく develop から開
GitHub Flow Scott Chacon on the Interwebs 31 Aug 2011 git-flowの問題点 (Issues with git-flow) 私は人々にGitを教えるためにあちこちを飛び回っているが、最近のほぼすべてのクラスやワークショップでgit-flowについてどう思うかを尋ねられた。私はいつも、git-flowは素晴らしいと思うと答えている。何百万ものワークフローを持ったシステム(Git)を提供し、ドキュメントもあるし、よくテストされている。フレキシブルなワークフローは、実に容易なやり方で多くの開発者の役に立つ。標準的なものになりつつあり、開発者はプロジェクトや企業の間を移動しつつこの標準的なワークフローに馴染むことができる。 しかしながら、それ故の問題も抱えている。新しいフィーチャーブランチをmasterではなくdevelopから開始するとか、
2011年12月25日日曜日 JsTestDriver導入 テスト駆動JavaScriptで紹介されてたJsTestDriverとjstdutilを、ubuntu11.10に導入した時の手順を記録しておきます。 インストール方法以外の手順は基本的にどのOSでも同じなので、WindowsやMac等にも応用できると思います。 1. インストール 1-1. インストール前の準備 JsTestDriverの動作にはJavaがインストールされている必要があります。 また、後で紹介するjstdutilを使用する場合はrubyが必要です。 以下のようにして必要なソフトをインストールします。 $ sudo apt-get install openjdk-7-jre $ sudo apt-get install ruby 1-2. ファイルのダウンロード JsTestDriverのダウンロー
こんにちは、エンジニアの岡崎(@watermint)です。今回はGREEにおけるJenkinsをつかった品質管理について紹介します。 hourlyビルド 岡崎がGREEに入社したのは1年半前ですが、そのときから感じているのがGREEの開発速度は非常に速いことです。ソースコードレポジトリには多くの優秀なエンジニアが日々数百以上のコミットしています。 GREEのシステムは多くのサブシステムを組み合わせたものですが、手元の些細な変更が全く予想しない別のプロジェクトで問題を起こすことがあります。こういった問題は通常、リリース前の結合テスト等の段階で検出します。 リリース前のテストで問題が発覚すると、当然その修正をして再度修正をリリースプロセスにのせるということになるのですが、これには他のエンジニアの作業を止めてしまったりリリースの順序を調整が必要になることがあります。 こういった事態を防ぐために単
2012-08-20一部訂正 githubにdotfile上げてる人は結構多いですが、 github.tokenなど、一部の設定は公開されると困りますね。 そんなときはincludeディレクティブを使うとローカル用の設定を別ファイルに出来るので捗ります。 [include] path = .gitconfig.local [core] editor = emacs pager = lv whitespace=fix,-indent-with-non-tab,trailing-space,cr-at-eol excludesfile = .gitignore こんな感じでやると.gitconfig.localを読み込んでくれるので、 github.tokenなどは.gitconfig.localに書いておくといい感じになって捗ります。 参考: http://stackoverflow.com
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く