Visual Studio Express 2012 for Windows Desktop で遊んでいるのですが、NuGet でライブラリが組み込めるようになっていて、いつの間にか便利になっていました。Java で言うと Maven みたいなものです。
CodePlex から圧縮書庫の操作ライブラリを探してきて、NuGet でそのパッケージを追加すれば、簡単に解凍プログラムが作れます。
2012-10-22
2012-10-17
3次ベジェ曲線を高速に計算して描画する方法
ずっと昔に読んだ、3次ベジェ曲線 (Cubic Bezier curve) を前進差分で高速に計算する方法を解説した記事が復活していたので、メモ。
2013-08-17 追記
リンク先の生存を確認。http://www.drdobbs.com/ はしばしばアクセスできなくなるが、その場合は時間をおいて再度アクセスするとよい。
2013-10-25 追記
下記のページにも Dr Dobb's と同じ記事が存在する。http://www.drdobbs.com/ のサイトが見られない場合はこちらを参照。
Forward Difference Calculation of Bezier Curves | Dr Dobb'sFigure とか Listing とかのリンクが切れているが、ページ下の方の「1 2 3 4 5 Next」から見ることができる。
http://www.drdobbs.com/forward-difference-calculation-of-bezier/184403417
2013-08-17 追記
リンク先の生存を確認。http://www.drdobbs.com/ はしばしばアクセスできなくなるが、その場合は時間をおいて再度アクセスするとよい。
2013-10-25 追記
下記のページにも Dr Dobb's と同じ記事が存在する。http://www.drdobbs.com/ のサイトが見られない場合はこちらを参照。
November 1997/Forward Difference Calculation of Bezier Curves
http://collaboration.cmc.ec.gc.ca/science/rpn/biblio/ddj/Website/articles/CUJ/1997/9711/bartley/bartley.htm
2012-09-14
Java のシャットダウンフックの書き方
ここの回答がわかりやすかったので、メモ。
Useful example of a shutdown hook in Java? - Stack Overflow
http://stackoverflow.com/questions/2921945/useful-example-of-a-shutdown-hook-in-java
2012-09-09
Population count
先日の「Long.bitCount(long) の速度」の記事で比較した it.unimi.dsi.bits.Fast.count(long) だが、Wikipedia にも同様のコードが載っていてショック。
Hamming weight - Wikipedia, the free encyclopediaそのコードを一般化したものが次のページに載っている。
http://en.wikipedia.org/wiki/Hamming_weight
Counting bits set, in parallel - Bit Twiddling Hacks
http://graphics.stanford.edu/~seander/bithacks.html#CountBitsSetParallel
JDK のソースにある「HD, Section 2-1」というコメント
Java API の Integer.lowestOneBit(int) のソースには、
// HD, Section 2-1というコメントがある。ググると、「Hacker's Delight」という書籍の Section 2-1 を指しているらしい。
java - cryptic comment in jdk source: // HD, Section 2-1 - Stack Overflowさらにググると、その書籍の公式サイトらしきものがあった。
http://stackoverflow.com/questions/1006626/cryptic-comment-in-jdk-source-hd-section-2-1
Hacker's Delightそのサイトにある書籍のサンプル「Chapter 2, Basics」から、さきほどの「HD, Section 2-1」の箇所を読むことができる。
http://www.hackersdelight.org/
2012-09-06
Windows 7 & Java 7 & Maven & wagon-ftp でFTPアップロードが失敗する現象
よく忘れるので、メモ。
Java 7 prevents FTP transfers on Windows Vista and 7 if firewall is on. Any ideas? - Stack Overflow回避するには、コマンドプロンプトで
http://stackoverflow.com/questions/6990663/java-7-prevents-ftp-transfers-on-windows-vista-and-7-if-firewall-is-on-any-idea
netsh advfirewall set global StatefulFTP disableを実行する。
2012-09-01
Java 7 で String クラスがリファクタリングされているらしい
Java7 Update6 で String クラスがさらにリファクタリングされていましたとのことなので確認してみると、Java 7u6 と Java 6u34 で確かにコードが違ってた。
http://d.hatena.ne.jp/chiheisen/20120827
2012-08-24
Long.bitCount(long) の速度
Java の Long.bitCount(long) が POPCNT にコンパイルされるとのことで、速度を簡易的に計ってみた。
比較対象は次の3つ。
Long.bitCount(long) の呼び出しが BIOS コールのエミュレーションのように POPCNT に変換されているのかな?
ついでに dsiutils-2.0.7.jar の it.unimi.dsi.bits.Fast.count(long) も計測したんだけど、意外にも速かった。「broadword algorithm」というのは、Java ライブラリの実装アルゴリズムよりも速いんだろうか?
比較対象は次の3つ。
- Long.bitCount(long)
- Long.bitCount(long) のソースをコピーして作った関数
- it.unimi.dsi.bits.Fast.count(long)
- 278
- 2269
- 1636
Long.bitCount(long) の呼び出しが BIOS コールのエミュレーションのように POPCNT に変換されているのかな?
ついでに dsiutils-2.0.7.jar の it.unimi.dsi.bits.Fast.count(long) も計測したんだけど、意外にも速かった。「broadword algorithm」というのは、Java ライブラリの実装アルゴリズムよりも速いんだろうか?
Broadword implementation of rank/select queriesざくっと計ったので、参考まで。
http://vigna.dsi.unimi.it/papers.php#VigBIRSQ
rank/select の実装
rank/select の実装を探していて、Sux4J というライブラリがあった。
僕の気のせいかもしれないので、そっとしておこう。
Sux: Implementing Succinct Data Structures参考までに sux4j-3.0.4-sources.jar のソースをちょっと読んだんだけど、it.unimi.dsi.sux4j.bits.Rank16 の59行目の計算間違いでメモリを余分に確保しているような気が…。
http://sux.di.unimi.it/
僕の気のせいかもしれないので、そっとしておこう。
Java の Long.bitCount(long) と POPCNT
Java の Long.bitCount(long) は最新の CPU だと POPCNT にコンパイルしてくれて、「すごい!」とか感心してたんだけど、つい先日までバグがあってションボリだった。しかも、デフォルトでこの最適化はオンになってたし…。
Succinct Data Structure な方は計ってみてるといいかも。
java - Optimizing Long.bitCount - Stack Overflow
http://stackoverflow.com/questions/4839128/optimizing-long-bitcount
Bug ID: 7063674 Wrong results from basic comparisons after calls to Long.bitCount(long)Oracle Java 7u6 では直っているらしい。
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7063674
Succinct Data Structure な方は計ってみてるといいかも。
Subscribe to:
Posts (Atom)