NIOS+DDR2

これまでNIOS2を使ったシステムでDDR2コントローラを使うときには、コントローラはAvalonバスに接続せずに、CPU外に置いていた。今回、ちょっと思い立ってAvalonバスに接続して試してみることにした。

しかしはまった点がある。インプリメントしたSOFをボードにダウンロードするまでは良いのだが、Nios II IDEからファームをダウンロードして実行しようとしても、target processor not responding(正確ではないかも)のようなメッセージが出て、CPUが動作しない。いろいろ試して検索してみた結果、DDR2コントローラのポートglobal_reset_n_to_the_altmemddr_0をCPUからPIOで操作しようとしているのが悪さをしているらしいと分かった。これをFPGA端子に入力されているRSTnピンにしたら、ファームのダウンロードもできるようになった。これで半日つぶれてしまった。

more…

compojureなどの実験(その2)

H2データベースとJSONを使用するために必要な、Leiningenを使ったプロジェクトファイルは結局次のようになりました。


(defproject myproject "1.0.0-SNAPSHOT"
  :description "FIXME: write"
  :dependencies [[org.clojure/clojure "1.2.0"]
                 [org.clojure/clojure-contrib "1.2.0"]
                 [ring "0.3.0"]
                 [com.h2database/h2 "1.2.142"]
                 [org.danlarkin/clojure-json "1.1"]
                 [compojure "0.4.1"]])

JSONを使うには、Compojure Demystified with an exampleでも説明されていますが ...

more…

compojureなどの実験

以前のエントリで、clojure+compojure+h2は最強の組み合わせではないか、と書きましたが、また最近この組み合わせでお手軽アプリを作成しようかと考えました。

以前にインストールしたバージョンで作成しても良かったのですが、いろいろと新しくなっているだろうと思い、最新版で試してみました。そうしたら、相当以前とはインストールの仕方なども異なっているようです。まず、Leiningenをインストールします。そして、プロジェクトを作成し、project.cljを編集して必要なライブラリをインストールするよう指示します。次のような感じになりました。


(defproject myproject "1.0.0-SNAPSHOT"
  :description "FIXME: write"
  :dependencies [[org.clojure/clojure "1.2.0"]
                 [org.clojure/clojure-contrib "1.2.0"]
                 [ring "0.3.0"]
                 [com.h2database/h2 "1.2.142 ...

more…

Clojureが素敵な件

最近、ちょっとしたWeb+DBアプリケーションを書きたいと思った。数年前は、Java+Struts+MySQLのような組み合わせがはやっていたと思う。その後もJavaのフレームワークはSpringやらSeasarやらたくさん提案されてきたし、自分もSeasarは一時期使って便利だと思った。でもやっぱり記述量が多く、面倒くさい。

近頃はLLブームということもあって、Ruby on Railsに始まるLL言語系フレームワークがある。RoRは自分で使ってみて、家計簿のWebアプリを作成し、今でも現役で使っている。ただ、個人的にはバージョンアップなどが手間で、あまり好きではない。

自分の中での最近はやりの言語はCommon Lispである。その実装としてSBCLなどがあり、SBCL+MySQLでも簡単なWebアプリを作ってみた。が、Lisp系言語はライブラリをいちいちインストールするのが面倒に思う。特にWindowsは弱い。Linux, Windows, Solarisなどの環境で、ひとつのものから別のものへすぐに移行するのは難しい。あるいは、最近であればGoogle App Engineを使って、環境の管理は全部Google様におまかせ、というのが流行なのであろうか。でもGAEは基本的にはRDBは使えないし、Lispも使えない。

以上のような遍歴を経て、現状において最善の折衷案として自分的に浮上しているのは、clojureである。Lispとまではいかないが、Lisp風味であり、compojureというWebフレームワークもある。これに ...

more…

3Dのリンク

またメモ。

一般
http://www.ceres.dti.ne.jp/~ykuroda/oyaj/bone/basic3d.html
http://www012.upp.so-net.ne.jp/flab/3d/
http://www.mech.tohoku-gakuin.ac.jp/rde/contents/course/robotics/coordtrans.html

OpenGL
http://verygood.aid.design.kyushu-u.ac.jp/opengl2005/index.html

more…

Cプログラムのコールグラフ作成

Cのライブラリの動作の解析のためのメモ

参考リンク

共有オブジェクトのプロファイリング
gprofでコールグラフ

more…

デジタルズーム(2)

前回の続き

前回はバイキュービック関数から、画素補間に使用する係数をどのように求めるのかということを記述しました。

今回は、「画素補間に使用する元画素をどのように求めるのか」ということについて記述します。前回と同じように、ズーム前の画素がd0,d1,d2,d3,...と並んでいるとします。すると、ズームのために参照する画素としては、1倍(ズームなし)の場合は、最初はd0,d1,d2,d3、次はd1,d2,d3,d4、その次はd2,d3,d4,d5、...以下同様となります。これは当たり前ですね。

次に2倍の場合は、最初はd0,d1,d2,d3、次もd0,d1,d2,d3、その次はd1,d2,d3,d4、その次もd1,d2,d3,d4 ...

more…

デジタルズーム

画像のデジタルズームの方法について

きれいに画像を拡大するためのアルゴリズムとしてよく用いられるのはバイキュービック法というものです。それを実際に実装しようとしたときのメモです。

バイキュービックの係数の使い方

ここを初めとしていろいろな場所でバイキュービック関数というのが取り上げられていますが、関数だけ見せられても??となってしまいます。説明を試みてみたいと思います。

まず、ここでは、バイキュービック法でズームをするという場合、4x4のオリジナル画像を使用し、その16画素を元にして、新しいズーム後の画素値を計算する、ということを前提とします。そのとき、ズーム後の画素値は、要するに4x4の画素のそれぞれに重みを乗じて加えることによって得られます。その重みの係数をバイキュービック関数というのが決定しています。

まず、1次元だけを考えてみます。例として、2倍のズームをするとします。補間元となるオリジナル画像が、左から順にd0,d1,d2,d3と並んでいるとします。すると、d1,d2の間で2つの補間画素を求めることになります。初めの補間画素は、実質d1となります。2番目の補間画素はd1とd2のちょうど真ん中にあると考えるわけです。すると、その画素からd0までの距離は1.5、d1までの距離は0.5、d2までの距離は0.5、d3までの距離は1.5となります。それで、これらの距離を先ほどのURLにあるグラフのx座標とし、対応するyの値を係数とするわけです ...

more…

CLSQL実験(3)

CLSQLを使ったWebアプリの実験の続き。

前回で、なんとなくCLSQLのリーダマクロが動作していないのでは??ということで終わってしまったが、結論からすると、リーダマクロは動作していた。
(setf hunchentoot:catch-errors-p nil)
をtop.lispに追加して実験してみたら、

debugger invoked on a FLEXI-STREAMS:FLEXI-STREAM-ENCODING-ERROR in thread #:
#\KATAKANA_LETTER_SI is not a LATIN-1 character.

というようなエラーがブラウザからのアクセス時に表示されたので、FLEXI-STREAM-ENCODING-ERRORあたりでググってみたら、

(setf hunchentoot:hunchentoot-default-external-format :UTF-8)

すると良い、という情報を発見。これをtop.lispに追加してみたら、見事に動作した。

まだCommon Coldの継続機能は動作していないものの、とりあえず一安心。

more…