技術に精通した コンサルタント が併走 経験豊富なアドバイザー 元ITエンジニア、元ゲーム企業人事、 IT会社役員、大手人材エージェント

ソートアルゴリズムの最後を飾るのは、やはりクリックソートです。 クイックソートは、データの比較と交換回数が非常に少ないのが特徴で、一般的なばらばらデータ(ランダムに散らばっているデータ)に対して、最も効率良く並べ替えを実行します。 クイックソートは、実用上もっとも高速であるとされている並べ替えアルゴリズムで、多くのプログラムで利用されています。 ばらばらなデータが格納された配列 a[ ] が与えられた場合に、それらをクイックソートで並べ替える手順を、下の図に示します。 まず始めに、「軸要素」と呼ばれるデータ値を決定します。この値は、データ全体を2つに分割するときのしきい値として使われます。軸要素は、分割が均等に行われるように選ぶのが望ましいのですが、その選択に時間をかけると、かえって並べ替えの時間を大きくしてしまいます。一般には、次のような方法がよく用いられているようです。 データの先頭の
もっとJavaEE6っぽくやってみよう 昨日のエントリでは、AsyncContextの使いかたを試すため、サーブレットだけを使って実装してみました。 でも、すこし泥臭いコードも多くなっていたし、このまま実用的なコードにしていくときにゴテゴテとコードを継ぎ足していくというのもイヤな感じです。 そこで、もっとJavaEE6っぽいコードに書き換えてみましょう。 少し準備 今回は、JAX-RSでのRESTful Webサービスと、CDIでのインジェクションを使ってみます。 JAX-RSの準備 まずは、JAX-RSを使うための設定クラスを作成します。 package chat2; @javax.ws.rs.ApplicationPath("rs") public class ApplicationConfig extends javax.ws.rs.core.Application { } こういう
Cometとは? ブラウザベースのチャットをつくろうとする場合、以前は定期的にクライアントからリクエストを送信して更新を確認するという手法がとられました。そうすると、平均して更新間隔の1/2の遅延が発生し、更新がないときの問い合わせが無駄になるなど、ユーザーにもサーバーにもうれしい手法ではありませんでした。 そこで使われるようになったのがCometです。 Cometは、HTTPでクライアントからの接続への返答を保留して、サーバーからデータを送信する必要がでたときに返答を返すことで、サーバーからのリアルタイムデータ送信を行う手法の総称です。 Servlet3.0でのComet対応 Cometでは、クライアントからの接続を保持しつづけるので、これまでのServletの仕組みをつかって実現しようとすると、各接続にスレッドを割り当てることになり、スレッド数が多くなりすぎるため、多くのユーザーには対
かつて、Log4jというロギングライブラリがありました。 最強でした。1999年のお話です。 ロギングの大切さとLog4jの素晴らしさが見直され、Java標準にjava.util.loggingというAPIが追加されました。2002年のお話です。 java.util.loggingはLog4jを参考に作られましたが、ところどころ使いづらかったため、「標準」という武器をもってしても、Log4jに置き換わることはできませんでした。そのため、Javaの世界には2つのロギングライブラリが残ってしまいました。 Maven1.0が2004年にリリースされ、人々はOSSライブラリを組み合わせてアプリケーションを作るようになりました。 ところが、ロギングライブラリが2つあったため、Log4jを使っているライブラリと、java.util.loggingを使っているライブラリが混在してしまい、アプリケーション
Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? 1.ガチ新人向けのコンピュータに関する教養 新入社員で専門課程で情報処理教育を受けていない場合の基礎教育 専門教育を受けていてもレベルによっては、適宜読んだほうがよい プログラムはなぜ動くのか 第2版 知っておきたいプログラムの基礎知識 プログラマにとってCPUとはなにか データを2進数でイメージしよう コンピュータが小数点数の計算を間違える理由 四角いメモリーを丸く使う メモリーとディスクの親密な関係 自分でデータを圧縮してみよう プログラムはどんな環境で動くのか ソース・ファイルから実行可能ファイルができるまで OSとアプリケーショ
追記:3Dダンジョンゲームを作る場合のコメント。本当はもうちょっと書くつもりでしたが、事故で投稿してしまい、今更消しても仕方がないので残します。 サイトが重いので、いつ更新できるか分かりません。この追記も投稿できるのかどうか。 都合により、話が唐突です。書き替える気力が回復したら更新するかもしれませんが、分かりません。 迷路のデータ構造を考える前に、どうやったらコーディングしやすいかをイメージします。 JavaやC++などのオブジェクト指向言語なら、以下の行で壁の見え方を取得できるデザインが楽をさせてくれます。 // 壁の見え方を取得します // maze : ダンジョン(ダンジョン全体や一フロアなど) // pos : 現在位置と向き v = maze.getWallView( pos ); // 壁の通行の許可状況を取得します rule = maze.getPassRule( pos
10万行コード読んだらJava分かるよってTwitterに書いたらすげぇ勢いでRTされたので、調子に乗って捕捉エントリ書くよ。 Java Core API JDKインストールしたディレクトリに入ってるsrc.zipを展開すると入ってるから読むと良いよ。 すぐ近くにあるのから読むってのはメンタル的に楽でいい。 厳密にはOSSじゃなくて単に公開されてるってだけなんだけども、JavaプログラマなのにコアAPIのコード読んでないとか無いよね? どれから読めば良いか分からんかったら、 java.lang java.util java.io java.text 辺りをまずはキチンと理解すること。当然コードを読み終わったら、それを使ってコードを書く事。 OpenJDK http://hg.openjdk.java.net/jdk7/jdk7 OpenJDKを読むことで、プログラム言語してのJavaではな
JUnitとは、Javaプログラムの単体テストを行うためのツールです。 そのJUnitについて解説していきます。 JUnit INDEX 単体テストとJUnit 1.1. 単体テスト 1.2. JUnitとは 1.3. JUnitのインストール テストクラス 2.1. テストクラス 2.2. テストメソッド 2.3. テストの実行 テストクラス2 3.1. テストメソッドが処理される順序に注意しよう 3.2. 「副作用」があるテストは書かない 3.3. テストはソースコードと同じ場所に保管しよう 3.4. テストには、適切な名前を付けよう 3.5. JUnitのassert/failメソッドと例外処理を最大限に利用しよう 3.6. テストはjavadocで書面化しよう 3.7. テストはできるだけ小さく、できるだけ早く 便利なメソッド 4.1. setUpとtearDown 4.2. Te
MyBatis とは? MyBatis はカスタム SQL、ストアドプロシージャ、高度なマッピング処理に対応した優れた永続化フレームワークです。 MyBatisを使うことで、直接 JDBC を扱うコードを書いたり、クエリ引数やクエリ結果を手動で設定する必要がほとんどなくなります。 MyBatis の設定やデータベースレコードと Java オブジェクトの関連付けは、XML またはアノテーションを使って行うことができます。 このドキュメントの改善にご協力ください… このドキュメントの中で誤りや特定の機能に関する記述が抜けていることに気づいたら、詳しく調べてドキュメントを更新して頂けると助かります。 このマニュアルのソースは Markdown 形式で、プロジェクトの GitHub リポジトリで配布されています。 リポジトリをフォークして内容を編集したらプルリクエストを送信してください。 このドキ
技術推進室の浅井です。 技術的負い目とは、世に言う技術的負債のことです。 社内で技術的負債の定義、ことばの表現を考える中で、「『負債』は優れた比喩表現であるものの、第三者への返済義務がない点で会計上の負債とは異なり、言葉としての問題も多く、不必要な議論を生み出しやすい」などの指摘があり、代わりの表現として社内の一部で使われている言い回しです。 最近社内のたいへん古いシステム(16年の歴史があります)の技術推進を行う機会があり、たくさんの技術的負い目と向き合いました。 そのような古いシステムの技術的負い目と向き合ったとき、エンジニアはストレスを感じ、ネガティブな感情を抱いてしまいがちです。負い目に苦しめられることで過去のコードや技術的判断に対して不満を言いたくなる気持ちはとてもよくわかりますし、実際に私もたくさん苦しんでたくさん不満を言いました。 ですが技術的負債の文脈でよく言われるとおり、
スマートフォンアプリを紹介する「Appliv」は、日本国内で月間600万ユーザーが利用し、海外10か国でも展開されている有力Webメディアだ。その開発・運営会社であるナイル株式会社は、PHPで組んできたApplivシステムに限界を感じ、昨年から主軸の開発言語をScalaに切り替え、アーキテクチャもマイクロサービス化に踏み切った。しかし、サーバーサイドJavaによるサービス運営の経験はゼロ。マイクロサービスによる設計ももちろん初めてだ。本稿では、そんな同社が果敢にもPHPからScalaへの移行に挑み、サービスインするまでの過程を紹介する。(編集部) 技術的負債に窮する 弊社ナイルは、「Appliv」というスマートフォンアプリを見つけやすくするWebサービスを、2012年8月より運営しています。現在、世界10か国で展開しており、規模としては国内のWeb版だけで月間600万UU(ユニークユーザー
Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? Lau Taarnskovさんの2015年4月19日付のブログ記事、Elixir - The next big language for the webの翻訳です。 ElixirはErlangのVM上で走る、Rubyにちょっと似た(というのも作者(José Valim)がRuby on Railsのcoreチームメンバーなので)関数型言語です。 2012年に登場していてQiitaでもAdvent Calendarなどが既にあるようですがまだあまり知られていないですね。ElixirとPhoenix Frameworkを組み合わせたものがマ
はじめに 最近の関数型言語ブームの中で、高い生産性と高い品質を誇る言語であると注目を浴びているのが「Scala」です。今回は、このScalaのWebアプリケーションフレームワークである「Play Framework」(以下、Play2)について紹介します。 「Scala」はTwitterやLinkedInなどのサービスで利用されており、2013年は日本で初めてScalaに特化した大規模なカンファレンスが開かれたり、さまざまな情報媒体で取り上げられたりと、ここ1、2年で急激に人気が高まっているのではないでしょうか。 Play2はJVM上で動作し、これまでのJavaで開発するエンタープライズアプリケーションで多く採用されたサーブレットやJSPのアーキテクチャを採用せず、独自のMVCモデルのアーキテクチャを持っており、スケールアウトしやすい構造になっています。 本連載では、開発者にもフレンドリー
国内でWebシステム開発によく使われているPHPとRubyを比較します。 Webシステムでは、サーバOSにはLinuxが、プログラミング言語には俗にLL(LightweightLanguage)と呼ばれるerl/PHP/Ruby/Pythonなどのスクリプト型言語が多く利用されます。サーバOSとしてWindowsServer、言語としてJavaなども利用されますが、一般的に開発工数が激増するため、スピード重視のWeb業界ではLinux+スクリプト言語が主流です。今回は、国内でWebシステム開発によく使われている、PHPとRubyを比較してみることにします。Perlは新規開発での採用が減っていること、Pythonは研究用途を除くと国内での採用事例が比較的少ないことから、今回は対象外にしています。 関連記事もあわせてどうぞ ・Googleさんから読み取るPHPとRuby on Rails開発の
負荷試験対策ミーティング ここでは、チームメンバーを集めて、システム要件の再確認と、バックエンドのアーキテクチャを再確認をまず行います。すなわち、「求められているもの=要件」と、「提供できるもの=アーキテクチャ」の確認です。ここの認識が揃っていないと、的はずれな負荷試験を実施してしまうことになりかねません。立場や役割にかかわらず、サービス全体として考えるべきです。 負荷試験の目的 負荷試験を行うことによって、何を示したいのか決めます。今回は、以下の目的を定めます。 サービスリリース後、想定されるピーク時のリクエストを受けた場合でも、問題なく稼働を続けられることを確認する システムのスループット限界値を確認する 負荷試験の観点 たいていのWebシステムの場合、昼夜を問わず稼働し続けるものとなるでしょう。今回例にとったシステムも24時間365日、リクエストを受け付けるものとします。この場合、観
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く