サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
買ってよかったもの
kappuccino-2.hatenadiary.org
doubleはNaN*1を値として取ることができる(その他にも、正の無限大、負の無限大をとることもできる)。これはIEEE 754で決められている。 NaNはNaNと比較しても等しくないという性質を持っている。つまり、 // aはNaNになる。 double a = 0.0 / 0.0; System.out.println(a == a); とするとfalseと表示される。これはバグではない。仕様だ。 (上では0.0/0.0でNaNを発生させたが、Javaでは普通Double.NaNを用いる) しかし、doubleのラッパークラス*2Doubleを用いて // bはNaNを表すDoubleオブジェクトになる。 Double b = new Double(0.0 / 0.0); System.out.println(b.equals(b)); とするとtrueとなってしまう。 これはDou
HashMapを使う上での注意点について説明します。 Map型変数を使う HashMapオブジェクトを格納するには、HashMap型変数ではなくMap型変数を使います。 // HashMapオブジェクトの生成 Map<String, String> map = new HashMap<String, String>(); HashMapはMapの実装の一つに過ぎません。HashMapをMapとして使っているのであればMap型変数に格納した方が自然です。また、パフォーマンス上の問題で他のマップ(TreeMapなど)と差し替えることが容易になるなど、プログラムの汎用性が上がります。HashMap独自の操作が必要である場合(あまり思いつきませんが)を除いてMap型変数を使いましょう。 初期容量と負荷係数 HashMap生成時のパラメータとして、初期容量と負荷係数があります。 初期容量は、Hash
この記事を簡潔にまとめた記事「ハッシュは二分木(ツリー)より速い」を掲載しました。(2008-08-04) ハッシュと二分木(ツリー)*1では普通はハッシュの方が速いとされる(ハッシュは挿入、参照、削除の時間計算量がO(1)、二分木はO(log N))。しかし、ハッシュは動作が複雑なため、実際はあまり二分木と速度が変わらないとも言われる。 それをC++で検証した記事を見つけた。結論は、二分木よりハッシュの方が遅いというものだ。 ハッシュは本当に速いのか? - S34 http://www.s34.co.jp/cpptechdoc/article/hash/ ハッシュは本当に遅いのか - 山に生きる http://d.hatena.ne.jp/pmoky/20050502/1114966341 では、JavaのHashSetとTreeSet(またはHashMapやTreeMap)でも同じこと
ある年がうるう年(閏年)であるかどうかの判別は意外と複雑です。 西暦が4で割り切れる年はうるう年 ただし、4で割り切れても100で割り切れる年はうるう年でない ただし、100で割り切れても400で割り切れる年はうるう年 つまり、2004年、2008年、…、2096年はうるう年ですが、2100年は100で割り切れるためうるう年でありません(かわいそうなことに、2月29日生まれの人は、2096年から2104年まで、8年間も誕生日がやって来ないわけですね)。しかし、2000年はさらに400で割り切れるのでうるう年となります。 単純な判別 うるう年を単純に判別しようとすると、西暦を格納したyという変数があるとして、2月の日数を表す変数nに28か29を代入するには、 if(y % 4 == 0){ if(y % 100 == 0){ if(y % 400 == 0){ n = 29; }else{
ストリートビューで街中をスムーズに移動するためのアプリケーションを作りました。 SmoothWalk powered by Google Maps Street View Googleマップのストリートビューは非常に興味深い機能ですが、繰り返し矢印を押して移動するのは結構面倒です。そこで、一本道では自動で進み続け、交差点に差しかかると進む道を選べるようなアプリケーションがあれば便利なんじゃないかと考えました。昨日の夜にちょっとだけ時間があったので早速実装してみました。 まだ機能も豊富でないし、使い勝手やデザインもイマイチですが、とりあえず動くようになったのでおいておきます。今日は時間がないので、機能追加などは後日。
HTMLエスケープやURLエンコード、ハッシュ関数など、WEBアプリケーション作成においてよく使うPHPの関数をまとめた。 HTMLエスケープ HTML中で使われる『&』や『<』、『>』などの記号を、『&』や『<』、『>』などに書き換えるのがHTMLエスケープだ(元に戻すのはHTMLアンエスケープ)。HTMLエスケープを行わなければ、例えば<はタグの開始点とご認識されてしまうかもしれない。また、ユーザーが入力した内容をそのまま表示するようなアプリケーションでは、HTMLエスケープが行われていないと悪意あるHTMLタグやJavaScriptを埋め込まれる危険性がある。 HTMLエスケープ <?php htmlspecialchars('you & I > he & she'); // 結果: you & I > he & she ?> HTMLアンエ
Javaでは言語仕様的に多重継承が許されていません。これは、メソッド名が重複した場合の処置など、多重継承が様々な問題を引き起こしやすいからです(C++でプログラムを書くとよくわかります)。とはいえ、どうしても多重継承をしたい場合というのもあります。そこで、Javaではインタフェースを使って擬似的に多重継承ができるようになっています(PHPでも同じ)。 (このエントリーはクラス、継承、抽象クラスなどについて最低限の知識のある人を対象としています) 以下、インタフェースを用いた擬似的多重継承の方法を説明します。 ClassAとClassB まず、次のような二つのクラス、ClassAとClassBを考えます。 class ClassA { private int a; public ClassA(int a) { this.a = a; } public int getA() { return
ハッシュは遅いという意見があるようだが、実装や使い方を誤らなければ、基本的にツリーよりハッシュの方が速い。 (この記事は以前書いた「ハッシュは本当に遅いのか?いや、遅くない(反語)」を簡潔にまとめたものです) ハッシュとツリーの速度を比較した結果が次のグラフだ(ハッシュはパラメータを適切に設定(後述))。挿入、参照(検索)、削除の合計時間を測定した。(横軸は要素数、縦軸は時間、横軸は対数スケール) 「ハッシュは本当に速いのか?」の検証 速いはずのハッシュが二分木にはかないません。ハッシュは速いという常識をくつがえす結果となりました。 http://www.s34.co.jp/cpptechdoc/article/hash/:itle=ハッシュは本当に速いのか? Googleで「ハッシュ 速い」で検索すると上記のページが一番上に表示される(2008-08-04現在)。しかし、このページに掲載
よくJavaの解説には、VectorとArrayListの違いはスレッドセーフであるかないかだということが書かれている。そのような解説を読むと、スレッドセーフな可変長配列がほしい場合にはVectorを使えば良いと思ってしまいそうだが、私は同期を目的としてもVectorは使うべきではないと思う。 Collections.synchronizedListメソッドによる同期 Vectorは単にArrayListのスレッドセーフ版ではなく、Java1.0のときに導入されたレガシークラスだ。Java1.2でCollections Frameworkが導入され、Vectorに代えてList(ArrayListやLinkedList)を用いることが推奨されるようになった。スレッドセーフなListを実現したいときには、VectorではなくCollections.synchronizedListメソッドを用
PHPでは言語仕様的に多重継承が許されていません。これは、メソッド名が重複した場合の処置など、多重継承が様々な問題を引き起こしやすいからです(C++でプログラムを書くとよくわかります)。とはいえ、どうしても多重継承をしたい場合というのもあります。そこで、PHPではインタフェースを使って擬似的に多重継承ができるようになっています(Javaでも同じ)。 (このエントリーはクラス、継承、抽象クラスなどについて最低限の知識のある人を対象としています) 以下、インタフェースを用いた擬似的多重継承の方法を説明します。 ClassAとClassB まず、次のような二つのクラス、ClassAとClassBを考えます。 <?php class ClassA { private $a; public function __construct($a){ $this->a=$a; } public functio
ストリートビューで自動散策するプログラム、AutoWalk by Street Viewを作成した。 自分のWEBサイトへの掲載方法 次のようなHTMLを作成することで、自分のWEBサイトに自動散策プログラムを埋め込むことができる。初期地点は自由に設定できるので、自分の街を自動散策するようなプログラムを埋め込むこともできる。 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <titl
(2008-08-15)『Googleマップ上でストリートビュー対応の道を青色ハイライト表示する(GStreetviewOverlay)』を追記しました 先日、Google Mapsのストリートビュー日本版が公開されたところですが、早速Google Maps APIを用いてストリートビューをいじってみました。ストリートビュー関連APIを使ったサンプルアプリケーションを紹介した上で、APIの使い方について説明します。 サンプルアプリケーション(京都散策 by Google Maps Street View) 京都散策 by Google Maps Street View Google Maps APIのストリートビュー関連の機能を使ったサンプルアプリケーションを作成してみました。京都市内を勝手に歩き回ります。分かれ道まで来るとランダムにルートを選んで進んで行きます。 (自動散策プログラムを自
多くのプログラミング言語では、任意の底を持つ対数を計算するために一工夫が必要だ。 PHP PHPで任意の底の対数得るのは簡単だ。log関数を用いて次のように書く。第二引数を省略するとネイピア数(自然対数の底)eが底となる。 <?php // 底が2、真数が10の対数値。 $value = log(10.0, 2.0); ?> しかし、このように書ける言語は少ない。 Java JavaではMath.logメソッドもしくはMath.log10メソッドを使う。前者は自然対数(底はネイピア数e)、後者は常用対数(底は10)の値を返す。しかし、任意の底について計算をするようなメソッドは用意されていない。そこで、数学で習った対数の底の変換公式*1を用いて任意の底を持つ対数を計算する。 (対数の底の変換公式) bは任意の底だ。この式を用いれば、任意の底を持つ対数も、自然対数や常用対数を用いて計算すること
PHPでセッションを破棄する方法について、きちんと解説されたものが見つからなかったので書いておく。 まず、PHPでセッションを破棄する方法自体はPHPのマニュアルの載っている。↓の部分だ。 <?php // セッション変数を全て解除する $_SESSION = array(); // セッションを切断するにはセッションクッキーも削除する。 // Note: セッション情報だけでなくセッションを破壊する。 if (isset($_COOKIE[session_name()])) { setcookie(session_name(), '', time()-42000, '/'); } // 最終的に、セッションを破壊する session_destroy(); ?> 問題は、このコードについてまともな説明がされていないことだ。よくわからないままに使っている人も多いように思える。例えば「PHP
このページを最初にブックマークしてみませんか?
『プログラマはサイコロを振らない』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く