CPUのクロックアップに限界が訪れ、マルチコア化することで処理性能向上を目指す時代になりました。これからのプログラマには、マルチコアで処理性能が向上するプログラム=マルチスレッドで並列処理が可能なプログラムを書く能力が必要になります。今回は「関数型」でプログラムを書くことによって、いとも簡単に並列化ができることを実例を元に解説します。 関数型プログラミングと並列処理 「関数型でプログラムを書くことで簡単に並列化できる」と書きましたが、そもそもここで言う「関数」とは何なのでしょうか? 関数型プログラミングの特徴 関数型プログラミングの「関数」を理解するためには、数学における「関数」を想像するとわかりやすいでしょう。 例えば三角関数を用いた y=cos(x) という式を考えてみます。この式に入力値 x=0 を与えた場合、いつでも必ず結果は y=1 になります。x= π/3 の場合は y =
Java8にはOptionalクラスが導入されたのですが、5月にエントリを書いた時点ではモナドではありませんでした。 Java8でのプログラムの構造を変えるOptional、ただしモナドではない それが、5月末にどうもソースにモナドに必要なメソッドが追加されたらしいということになって、いつ使えるようになるか待っていたら、いつの間にか使えるようになっていました。 Optional (Java Platform SE 8 b101) こちらからダウンロードできます。 JDK8 Early Access Releases ― Project Kenai 他にもいくつか便利メソッドが追加されたおかげで、このようなコードが書けるようになりました。 String str = "abcd"; Optional.ofNullable(str) .map(st -> st.toUpperCase()) .f
PERSON antlabo(あんとらぼ) 蟻の実験工房本館 / twitter 業務系のSEをやっていますが、仕事ではPMだったりPLだったりPGだったり アプリ開発してたりインフラ構築してたり運用保守してたり 何でも屋さんなマルチな日常を過ごしています。 PROJECT minecraftで地球を再現できるかな? GISデータを用いてminecraftで地球を再現するプロジェクト。minecraftの公式フォーラムでマップデータを公開しています GIS小さな地球minecraft PROJECT 24Hの出来事 on Google Earth - 2011.03.11 Japan 2011.03.11 あの日に日本で起きた24時間の出来事をGoogleEarth上に可視化しています。地震発生から各地域で発生している事象をマップ上で時系列で確認することが出来ます。 可視化タイムラインGo
気象庁の地震情報|平成25年04月13日05時48分 気象庁発表 4/13のAM5:33にM6.0らしい地震がありました。各地で大きな被害が無いことを祈りつつ。 フジテレビのアナウンサーさんが淡路島の電車の状況を聞いたと言う話 【放送事故】フジテレビが淡路島民に「電車動いてますか?」と質問 「淡路島は電車ありません」 - NAVER まとめ だいたい見てると「電車無いのを知らずに聞いてしまった」のを叩く向きに思えます。実際のところ、聞いたこと自体はNGなのでしょうが、これをシステム開発の話に置き換えると見えるものがある気がしました。 以降はJavaの語彙で書きますが、これって NullPointerException っぽいなと。 コードっぽい何かで書いてみる こんな感じ。 運行状況 = 淡路島.get路線().get運行状況(); get路線() が何を返すのか知らないけど、これが nu
事例で学ぶデザインパターン 第6回 Strategy パターンとデザインパターン活用の総まとめ (株)オージス総研 福田 直樹 連載の最終回となる今回は、アルゴリズムをクラスとして抽出する Strategy パターンを検討します。変動しやすい一連の処理を持つ部分を分離し、それを簡単に切り替えて実行できるような仕組みを構築します。Strategy パターンを検討した後、その Strategy パターンに見られる設計指針を確認してデザインパターン活用のポイントを振り返ることにしましょう。 ※雑誌『Java WORLD』 2006 年 9 月号に掲載した記事のオリジナル原稿を Java WORLD 編集部の了解を得て掲載しています。 前回のおさらい 前回は、GUI クラスと GUI に依存しないデータ処理クラスを分離し、リアルタイムに情報を更新するような仕組みを提供する Observer パター
オライリーが主催するイベント「Open Source Convention 2011」が7月25日から米国ポートランドで開催されました。 その中で、TwitterがなぜRuby on RailsベースのシステムをJavaVMベースへ移行しようとしているのかを解説したセッション「Twitter: From Ruby on Rails to the JVM」が行われ、ビデオが公開されています。 13分程度の短いセッションのポイントをまとめて紹介します。 世界最大のRuby on RailsによるWebサイトをJavaVMへ移行 Twitterのアプリケーションサービスグループ、Raffi Krikorian氏 Twitterは世界中からのツイートをリアルタイムで扱っている。リアルタイム処理が、ツイッターにおけるもっとも難しい処理だ。 Twitterは、おそらく世界最大のRuby on Rail
「JavaとJavaScriptの20年戦争」 http://wise9.jp/archives/2245 なんというか全体に「これはひどい」ネタ記事なんだが*1,なんでコレが絶賛されてるか分からん.*2 そもそもJavaとJavaScriptを比較する時点でねえ... さて、Javaだが、JavaはC++の流れを汲む言語だ。 C++の源流は言うまでもなくCにあり、Cの源流はPascalやFORTRANといった手続き型言語にある。 Javaが本格的に登場したのは1996年。 うーん,こういう書き方している時点で,プログラミングのことを全く知らないんじゃないかと思うくらいに酷い. さらっと流しているが,「JavaをC++の流れを汲む言語」と捉える人はそんなに多くないのでは. 「C系の表記+オブジェクト指向」というならJavaと近い部分もあるが,それだけならObjective-Cだってあったわ
メインウィンドウのクラス(あるいは制御クラス)のGGG4W、GGG4M、GGG4J(以下GGG4X)にはメインウインドウに配置したGUI部品の反応を作りこむのだが、検索にからみ検索を担当しているTGraphicSearchクラスから 1. いまどのファイルを処理しているか 2. 何がヒットしたか 3. 検索が終わった の3つを通知する方法が必要である。 一般的にコールバックと呼ばれており、古典的Cでは関数ポインタの登録という方法で行われている。GGG4Xクラス側の関数をTGraphicSearchクラスに登録して呼んでもらうのである。 C++ではメンバ変数のない多重継承を用意するのが正統かと思うが、GripGropではそのまま単にメインウィンドウのクラスを登録してメソッド呼び出しをしている(nfind.cppのNFind::DisplayInfo() など)。下が上の構造を知っているという
Java:The Good Parts Jim Waldo(著) 矢野勉(監訳)笹井崇司(翻訳) オライリージャパン 2011年2月 ISBN-10: 487311487X ISBN-13: 978-4873114873 2310円(税込) ■言語ごとの特性を理解し、使い分ける人が一流のプログラマ あらゆる面で完ぺきなソフトウェアは存在しない。プログラミング言語もソフトウェアである。ゆえに、あらゆる面で完ぺきなプログラミング言語は存在しない。 人間の言語が現実世界をうまく表現できないのであれば、まず間違いなく、プログラミング言語が現実世界をもっとうまく表現できるとは期待できないだろう。プログラミング言語は現実世界にあるものをモデル化するための抽象概念を提供するが、その言語の表現力は現実世界と言語とを直接対応付けるには不十分なところがある(p111)。 完ぺきなプログラミング言語は存在しない
Javaだし、大変そう。という先入観が有って今まで触って無かった「Processing」。最近、使い始めてみました。 Processing.org http://processing.org/ ライブラリの充実した環境くらいのイメージだったのですがインストールしたProcessingを起動するとIDEが表示され簡単にプログラムが始めれました。 もっと色々と設定が必要だったり、プログラムは別途エディタを準備する必要が有るかと思っていたので、これはとても嬉しい誤算でした。 IDEはこんな感じです。 「再生マーク」でアプリを実行可能です。 print() や println() でデバック出力などを行った場合には下部の黒い部分に出力されます。 メニューの「Examples...」でこの様なウィンドウを表示できます。これはサンプルコードで、ダブルクリックすると表示されます。 この様にサンプルが本体
以前はJava EEの普通のWebアプリケーションで、JavaScriptはあくまでも利便性のために補助的に使うものという認識がありましたが、さすがに最近では普通の業務系のSI案件でもテーブル表示や入力補助などで高度なAjaxライブラリーの使用が当たり前のように求められるようになりつつあります。サーバーサイドのJavaScript技術といったものもありますが、そういった新しい技術を使わないまでも、ごく普通にある程度大きなJavaScriptの作成が必要になってきているということです。 もちろん、JavaとJavaScriptはその名前にかかわらず、本来全く別の言語です。しかし、意図的に似た構文でロジックが書ける*1ため、兄弟の言語として認識している人も意外に多いのではないかと思います。しかし、使用できるライブラリーに違いがあるという点が一見してわかる最も大きな違いですが、基本的な言語の文法
Javaの生みの親ジェームズ・ゴスリング(James Gosling)氏は自身のブログOn a New Roadにポストした記事「Next step on the road...」で、グーグルに就職したことを報告しています。 I find myself starting employment at Google today. 今日からグーグルの社員として働き始めるのだ ゴスリング氏はオラクルがサン・マイクロシステムズを買収した後の2010年4月2日にオラクルを退社していました。それ以来、多くの企業からオファーがあったようです。 One of the toughest things about life is making choices. I had a hard time saying "no" to a bunch of other excellent possibilities. 人
長い文章になってしまったので、概要だけ先に書きます。 以下のJavaプログラムは、常に上から下に順番に命令が実行されると思いますか?つまり、aに1が格納された後に、bに2が格納されると思いますか? 実は場合によってはこの実行順序が入れ替わる場合があります。これはJavaの言語仕様として定義されていることです。これを考慮しないと信頼性のある並行処理は実装できません。 気になる人は以下を読んでみてください。 a = 1; b = 2; すでにインターネットは社会インフラ化しています。ソーシャルネットワークで多くの人とコミュケーションやコラボレーションできる時代で、個人が情報を作り消費することは当たり前になってきています。そして、インターネット上のコンテンツは増加の一途を辿っています。「情報爆発」なんて言葉も耳慣れた言葉になりましたが、その問題解決のためにMapReduceなどの分散処理技術に注
Java Programming Language Googleの20%プロジェクトからJava向けの新しい技術「cofoja (Contracts for Java)」が公開された。既存の実装に大きく手を加えることなく、デバッグをより簡単にしてくれる効果が期待できる。バグは些細なコードが起こすものだったりするが、それを追跡して発見するのは時に困難を極める。これは問題が発生した箇所と、実際にバグがある箇所が大きく離れていることが理由になっていることもある。問題発生箇所とバグ発生箇所を近くにまとめることができれば、それだけバグ発見も取り組みやすくなる。 cofojaはこれを簡単に実現するための技術。インタフェースに制約表現を追加可能にするところがポイントとなっており、クラスの実装に手を加えなくてもインタフェースに制約表記を追加することで実行時にチェックできるようになる。ブログに掲載されている
Java言語でメソッド中で内部クラスを作る時、そのメソッドのパラメーターやローカル変数に内部クラスのメソッド中からアクセスできます。しかし、この場合にはこれらの変数にfinalを付けないとコンパイルエラーになってしまいます。 public void test(int param) { // コンパイルエラー String value = "Hello"; // コンパイルエラー Test t = new Test() { public void print() { System.out.println("param = " + param); System.out.println("value = " + value); } }; } この問題については、ある程度経験を積んだJavaプログラマーなら常識なのかと思いますが、初心者は最初につまづくところかと思います。しかし、経験を積んだJav
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く