2010/12/19

[Debian]debian squeeze amd64 に AcrobatReader9 をインストール

atpline に追加

deb http://www.debian-multimedia.org etch main non-free

acroread と、その日本語環境インストール

sudo aptitude search acroread acroread-fonts-jpn acroread-l10n-ja acroread-dictionary-ja
以上。

2010/12/17

[Java]リフレクションしてみた

極簡単なリフレクションの例。
コピペ支援的な感じで。
import java.lang.reflect.Constructor;

public class ReflectionTest {
   public static void main(String[] args) {
      try {
         // create String instance
         String string_classStr = "java.lang.String";
         Class<String> string_class = (Class<String>) Class.forName(string_classStr);
         Class string_argTypes[] = { String.class };
         Constructor<String> string_constructor = string_class.getConstructor(string_argTypes);
         Object string_constructorArgs[] = { "TESTING@TESTONG" };
         String string = (String) string_constructor.newInstance(string_constructorArgs);
         System.out.println(string);
         
         // call toString() method
         Method string_toString = string_class.getMethod("toString", null);
         String dst_string = (String) string_toString.invoke(string, null);
         System.out.println(dst_string);
         
         // call split("@") method
         Class string_split_argTypes[] = { String.class };
         Object string_split_args[] = {"@"};
         Method string_split = string_class.getMethod("split", string_split_argTypes);
         String[] string_splitArray = (String[]) string_split.invoke(string, string_split_args);
         for (String str : string_splitArray) {
            System.out.println(str);
         }
         
         // call String.format("num1 : %d, num2 : %d", 13, 14) methods (static method, and "13, 14" is var args)
         Class string_format_argTypes[] = { String.class, Object[].class };
         Object string_format_args[] = { "num1 : %d, num2 : %d", new Object[]{13, 14} };
         Method string_format = string_class.getMethod("format", string_format_argTypes);
         dst_string = (String) string_format.invoke(null, string_format_args);
         System.out.println(dst_string);
         
      } catch (NoSuchMethodException e) {
         e.printStackTrace();
      } catch (IllegalArgumentException e) {
         e.printStackTrace();
      } catch (InstantiationException e) {
         e.printStackTrace();
      } catch (IllegalAccessException e) {
         e.printStackTrace();
      } catch (InvocationTargetException e) {
         e.printStackTrace();
      } catch (ClassNotFoundException e) {
         e.printStackTrace();
      }
   }
}
追記 reflection の綴りをがっつり間違えていたので修正しました。

2010/12/08

[Java][C]JNIのヘッダを作るメイクファイル

JNI のヘッダを作ってくれる Makefile

OUTPUT_DIR=jni/
CLASSPATH=bin/
PACKAGE_BASE=jp.dip.oyasirazu.jnitest.
DIRECTORY_BASE=jp/dip/oyasirazu/jnitest/
HEADER_BASE=${OUTPUT_DIR}jp_dip_oyasirazu_jnitest_

all: ${HEADER_BASE}JNITest.h \
     ${HEADER_BASE}TestClass.h

${HEADER_BASE}%.h : ${CLASSPATH}${DIRECTORY_BASE}%.class
   javah -classpath ${CLASSPATH} -d ${OUTPUT_DIR} ${PACKAGE_BASE}$(subst ${HEADER_BASE},,$*)
ちょうきもちわるい。
ヘッダは '_' 区切りだし、パッケージは '.' 区切りだし、ディレクトリは '/' 区切りだし...。
何か良い方法無いのかね?
make doc でシグネチャ一覧 txt をどこかに出力とかも便利かもねー。
きちんと調べれば ndk-build とか .mk とか編集するとできる気もする。
いつかきっと調べる。
でもこの辺がころころ変わることなんて滅多にないはずだから無駄な努力だった気もする。

2010/12/07

[Debian]windowsに接続されたプリンタを使う

必要パッケージ

sudo aptitude install dpkg-dev debhelper autotools-dev
sudo aptitude install cups libcups2-dev
sudo aptitude install libltdl3-dev

pipslite_1.5.0-2.tar.gz をダウンロード。

Linuxドライバー|アヴァシス株式会社
tar zxfv pipslite_3.5.0-2.tar.gz
cd pipslite_1.5.0
sudo dpkg-buildpackage -rfakeroot -us -uc
cd ..
sudo dpkg -i pipslite_1.5.0-2_amd64.deb

windows側の設定

[Debian]いろんな(?)開発環境導入

OS

は squeez です。

java5

一時的に aptline を lenny に変更し、
sudo aptitude install sun-java5-jdk
aptline を元にもどすのを忘れずに!

java6

sudo aptitude install sun-java6-jdk

java5 と java6 の切り替え

sudo update-alternatives --config java
sudo update-alternatives --config javac
それぞれ、使いたい java に対応した番号を入力すれば ok.

android, em ビルドのためのものども(java は上でインストール済みだから除く)

sudo aptitude install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev ia32-libs x11proto-core-dev libx11-dev lib32readline5-dev lib32z-dev uboot-mkimage
X11 のシンボリックリンクが無いらしい。
sudo ln -s /usrsudo ln -s /usr/lib32/libX11.so.6 /usr/lib32/libX11.so/lib32/libX11.so.6 /usr/lib32/libX11.so

eclipse

sudo aptitude install eclipse

arm linux クロスコンパイル環境

下記サイトをみて arm linux 用の toolchain を持ってくる。
Embedded Debian -- Cross-development toolchains
aptline に 
deb http://www.emdebian.org/debian/ lenny main 
を追加すると同時に、 squeeze を lenny とする。
sudo aptitude install linux-libc-dev-armel-cross libc6-armel-cross libc6-dev-armel-cross binutils-arm-linux-gnueabi gcc-4.3-arm-linux-gnueabi g++-4.3-arm-linux-gnueabi
lenny を squeez に戻す。

自分用に arm-linux-gnueabi をコピー

cp -r /usr/arm-linux-gnueabi ~/embdebian/

jpeglib のクロスコンパイル

mkdir -p ~/embdebian/libs
cd ~/embdebian/libs
apt-get source libjpeg8-dev
cd libjpeg8-8b
./configure CC=arm-linux-gnueabi-gcc --host=x86_64-linux --target=arm-linux-gnueabi --prefix=~/embdebian/arm-linux-gnueabi
make -j8
make install
これで、 arm-linux-gnueabi 内に、 arm 用の jpeglib がインストールされる。

2010/12/04

[Debiain]最小構成インストールから一通りインストールした記録

apt-line の設定。

vi /etc/apt/sources.list
すべての行に「 contrib non-free 」を追加。

apt パッケージ情報の更新

aptitude update

x-window-system のインストール

aptitude install x-window-system

xfce4 のインストール

aptitude install xfce4

slim (ログインマネージャ) のインストール

aptitude install slim

管理?

aptitude install sudo

ブラウザ

sudo aptitude install iceweasel iceweasel-vimperator
sudo aptitude install flashplugin-nonfree

エディタ

aptitude install vim-gtk

フォント

aptitude install ttf-ipafont-gothic ttf-ipafont-mincho

日本語入力

aptitude install anthy uim-anthy
スタートメニューから、設定->入力メソッド切替器
uim-toolbar を選択。
うかつにターミナルで LC_ALL=C とかいう設定をすると、日本語入力受け付けなくなるので注意。

スクリーンショット

sudo aptitude install xfce4-screenshooter

ランチャ

<Super>space(スタート+スペース)に xfrun4 を割り当てる。
スタートメニュー->設定->キーボード->アプリケーションショートカットキー
xfrun4 をダブルクリックし、スタート+スペースを押下。
"Gnome Do" とかインストールしても、アプリケーションランチャとしてしか使わないからこれで十分。
xfrun4 の環境変数とかがよく分からなかったから、シンボリックリンクで alias の代わりとする。
cd /usr/bin
sudo ln -s xfce4-terminal terminal
sudo ln -s xfce4-screenshooter screenshooter
sudo chmod go-w terminal screenshooter

ネットワーク共有

sudo aptitude install cifs-utils
mount.cifs //ネットワークドライブ マウントポイント
で、ネットワークドライブのマウントができるようになる。
面倒だけれど、 fstab なんかに設定すれば許容範囲内?
マウントしたところに書き込めるように設定
/etc/fstab
//192.168.1.24/datas /home/netdrives/data cifs gid=netdrive,file_mode=0774,dir_mode=0775 0 0
//192.168.1.24/datas02 /home/netdrives/data02 cifs gid=netdrive,file_mode=0774,dir_mode=0775 0 0
こんな感じで設定して、書き込みを許すユーザに netdrive グループに入ってもらう。
IP 直打ちが嫌なら以下の LAN 内の名前解決をする。

LAN 内の名前解決

必要パッケージのインストール
sudo aptitude install samba winbind
名前解決の設定
sudo vi /etc/nsswitch.conf
hosts の項目に wins を追加
sudo vi /etc/samba/smb.conf
wins support = yes と変更。
不要サービスの停止
sudo mv /etc/init.d/S18winbind /etc/init.d/K18winbind

画像ビューワ

sudo aptitude install ristrett

動画プレイヤー

sudo aptitude install vlc
倍速再生でも音が高くならない設定
ツール->設定->左下の「すべて」を選択->オーディオ->フィルタ
「再生レートとオーディオ速度調整機能の同期」にチェック
多分その下のテキストエリアに「scaletempo」と表示される。
表示されなければ自分で書いて。

パネルの設定

sudo aptitude install xfce4-cpugraph-plugin
パネルに、ミキサー, cpugraph, Orageカレンダーを追加

グラフィックドライバ

sudo aptitude install nvidia-setting nvidia-xconfig
依存関係があるから必要なカーネルやら何やらもすべてインストールしてくれる。

リモートデスクトップ

sudo aptitude install rdesktop

仮想端末?

sudo aptitude install screen

圧縮解凍

sudo aptitude install xarchiver

パッケージ内ファイル検索

sudo aptitude install apt-file

マインドマップ

sudo aptitude install freemind ttf-sazanami-gothic ttf-sazanami-mincho
さざなみフォントをインストールしないと文字化けするみたい。

2010/01/08

[Java]整数の各桁を足し合わせる問題

■ 整数の各桁を足し合わせる問題

5分で終わると聞いてやってみました。
5分問題 やってみた。 - 地獄の猫日記

■ ということで、作ってみた

負数が入力だった場合どうすれば良いのか解らなかったので、とりあえずマイナスは無視して数字を全部足す事にした。
・無難(?)な回答
public class PlaceNumberAdder02 {
   long number;
   public PlaceNumberAdder02(long number){
      setNumber(number);
   }

   public long addNumbers(){
      long number = this.number;
      long sum = 0;
      
      number = Math.abs(number);
      
      do {
         sum += number % 10;
      } while((number /= 10) != 0);
      
      return sum;
   }
   
   public void setNumber(long number){
      this.number = number;
   }
   
   public long getNumber(){
      return number;
   }
}
・変態(?)回答
public class PlaceNumberAdder01 {
   long number;
   public PlaceNumberAdder01(long number){
      setNumber(number);
   }
   
   public long addNumbers(){
      String numberStr = String.valueOf(number);
      long sum = 0;

      if(number < 0){
         numberStr = numberStr.substring(1);
      }
      
      for(int i = 0; i < numberStr.length(); i++){
         sum += Integer.parseInt(numberStr.substring(i, i+1));
      }
      
      return sum;
   }
   
   public void setNumber(long number){
      this.number = number;
   }
   
   public long getNumber(){
      return number;
   }
}
変態回答が01なのが問題だよねー。
・...言い訳をさせてもらうと
「3の倍数 or 3を含む」数の時にアホと表示するプログラムを書いた時に、数字を文字に変換して処理を行ったもんで、今回もそののりで書いてみた感じ。
普通に処理した場合(PlaceNumberAdder02)に比べて2から2.5倍くらい遅くなります。
しかし、プログラムの形的にも面白みの無い物になってしまったなぁ...。
あと、名前とかもっと考えようよ、自分。

■ テスト

・テストコード(とは言えない何か)
public class PlaceNumberAdderTest {
   static final long l1 = 1234, l2 = 9999, l3 = -65535;
   
   public static void main(String[] args) {

      System.out.println("Number = " + l1);

      PlaceNumberAdder01 pna1 = new PlaceNumberAdder01(l1);
      System.out.println("pna1: " + pna1.addNumbers());
      
      PlaceNumberAdder02 pna2 = new PlaceNumberAdder02(l1);
      System.out.println("pna2: " + pna2.addNumbers());

      System.out.println();
      System.out.println("Number = " + l2);

      pna1.setNumber(l2);
      System.out.println("pna1: " + pna1.addNumbers());
      
      pna2.setNumber(l2);
      System.out.println("pna2: " + pna2.addNumbers());

      System.out.println();
      System.out.println("Number = " + l3);

      pna1.setNumber(l3);
      System.out.println("pna1: " + pna1.addNumbers());
      
      pna2.setNumber(l3);
      System.out.println("pna2: " + pna2.addNumbers());

   }
}
・実行結果
Number = 1234
pna1: 10
pna2: 10

Number = 9999
pna1: 36
pna2: 36

Number = -65535
pna1: 24
pna2: 24
こんな感じ。

2009/12/17

[Java]カード配り問題に挑戦

■ カード配り問題に挑戦

qune: プログラミングメモ - カード配り問題とか
10分で終わると聞いてやってみました。
結局20分かかりました...。

■ ソースコード

public class Cards {
 public String[] deal(int numPlayers, String deck){
  String[] playerCards = new String[numPlayers];
  int cardNum = deck.length();
  
  //配列初期化
  for(int i = 0; i < numPlayers; i++){
   playerCards[i] = "";
  }
  
  //プレイヤーに同じ数のカードを配るために、余るカードは抜けておく
  int amari = cardNum % numPlayers; 
  deck = deck.substring(0, cardNum - amari);
  cardNum = deck.length();
  
  //一人に一枚づつすら配れない場合は誰にもカードを配らない
  if(cardNum == 0){ return playerCards; }
  
  //カードを配る
  for(int i = 0; i < cardNum; i++){
   playerCards[i%numPlayers] += deck.charAt(i);
  }
  
  //結果を返す
  return playerCards;
 }
}

public class CardsTest {
 public static void main(String[] args) {
  int numPlayers;
  String deck;
  String[] results;
  
  Cards cards = new Cards();

  //例1
  numPlayers = 6;
  deck = "012345012345012345";
  //Returns: {"000", "111", "222", "333", "444", "555" }
  results = cards.deal(numPlayers, deck);
  
  for(String result : results){
   System.out.print("\""+result+"\" ");
  }
  System.out.println();

  //例2
  numPlayers = 4;
  deck = "111122223333";
  //Returns: {"123", "123", "123", "123" }

  results = cards.deal(numPlayers, deck);
  
  for(String result : results){
   System.out.print("\""+result+"\" ");
  }
  System.out.println();

  //例3  
  numPlayers = 1;
  deck = "012345012345012345";
  //Returns: {"012345012345012345" }

  results = cards.deal(numPlayers, deck);
  
  for(String result : results){
   System.out.print("\""+result+"\" ");
  }
  System.out.println();
  
  //例4
  numPlayers = 6;
  deck = "01234";
  //Returns: {"", "", "", "", "", "" }

  results = cards.deal(numPlayers, deck);
  
  for(String result : results){
   System.out.print("\""+result+"\" ");
  }
  System.out.println();
  
  //例5
  numPlayers = 2;
  deck = "";
  //Returns: {"", "" }

  results = cards.deal(numPlayers, deck);
  
  for(String result : results){
   System.out.print("\""+result+"\" ");
  }
  System.out.println();
 }
}

■ 出力結果

"000" "111" "222" "333" "444" "555" 
"123" "123" "123" "123" 
"012345012345012345" 
"" "" "" "" "" "" 
"" "" 
ソースが無駄に長かった...。
そして別にsubstringする必要が無かった...orz
//プレイヤーに同じ数のカードを配るために、余るカードは抜けておく
int amari = cardNum % numPlayers; 
deck = deck.substring(0, cardNum - amari);
cardNum = deck.length();
上記は無駄。以下でokであることを確認...orz
cardNum -= cardNum % numPlayers;
いちいち文字列を作り直さないで、for文の繰り替えし数で調整すればいいじゃない。という話。うへぇ。

2009/12/05

[普通の日記]レイアウトがひどい

ファイル名とかコマンドとかいっぱいでてくる場合は気をつけないなぁ...。

[Debian]ネットにつながらなくなりました...。

■ ネットにつながらなくなりました...。

 インストール後しばらくは普通に使えていたのですがねぇ...。
dhclient: DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 3
 こんな感じのがひたすら表示されていく感じ。IPを静的割当にしてもつながらない、というかルータへの ping すら通らないという...。
 取り合えず ifconfig。eth0 の認識を確認。それと同時にものすごい勢いで増えていく損失パケット(dropped)を確認。

■ 原因をさぐる

 やっぱり google 検索。「debian ifconfig 損失」で検索。 NIC のドライバがおかしいとこうなるらしい。Debian が NIC 用にロードしたモジュールが、実際はその NIC に対応していなかったって感じ?

■ NIC のドライバをインストールしよう

 今回の本題。
・このノートパソコンの NIC は何だ?
 初めのうちはきちんと動いているみたいだったから特に調べてませんよ? PC の型番で検索をかけて NIC の型番を調べる。
 NIC = Realtek RTL 8168D/8111D Family PCI-E GBE NIC
 (【NVIDIA ION】ドスパラ Prime Note Cresion NA まとめページ【Atom 330】 - スペックより)
 そういえばさっき調べたページでも蟹さんはちょっとアレという話題がでていたなぁ。
・ドライバ入手
 Realteck のホームページから r8168-8.015.00.tar.bz2 をダウンロード。解凍、READMEを読む。ふむ、ビルドにはヘッダやら何やら、新たにパッケージをインストールする必要があるらしい。
・必要なパッケージのダウンロード
 カーネルヘッダーパッケージが必要らしい。自分が使っているカーネルは 2.6.26-2-amd64(?) だから、ダウンロードするのは「linux-headers-2.6.26-2-amd64」。
 もちろん aptitude とか使えないので、別 PC にて手動ダウンロード。debian パッケージの内容を検索(http://www.debian.org/distrib/packages#search_packages) で「linux-headers-2.6.26-2」を検索し、「linux-headers-2.6.26-2-amd64」パッケージをダウンロード。芋づる式に依存パッケージ、依存パッケージの依存パッケージ...とか、全部もってくる。
 もってきたパッケージを USB 経由で debian へ。
・必要なパッケージのインストール
 もってきたパッケージがすべて揃っているディレクトリで、dpkg。
: dpkg -i *
 何か言われると思ったけれどすんなり完了しました。
・ドライバのビルド
 間違ってロードされているモジュールの削除。
: rmmod r8169
 正しいモジュールのビルド
: make clean modules
: make install
 変更の適用(?)
: depmod -a
 正しいモジュールのロード
: modprobe r8168
 確認
: ifconfig -a
・ドライバの自動ロード設定
 mkinitramfs で、起動時に r8168 をロードしてくれる initrd を作成する。
: mkinitramfs -o initrd.img-2.6.26-2-amd64 2.6.26-2-amd64
 元の initrd のバックアップをとったのち、今作った initrd を /boot に突っ込む。
: mv /boot/initrd.img-2.6.26-2-amd64 /boot/initrd.img-2.6.26-2-amd64.bkup
: mv initrd.img-2.6.26-2-amd64 /boot/
 これで、起動時に自動で r8168 をロードしてくれる。...はず。

■ ネットにつながるようになりました!

 めでたしめでたし。

2009/11/24

[電子工作]組み込みLinuxなら何でも良いわけで...

Chumbyの代わりにBeagle Boardという手もあるなぁ。Chumbyより安いし。
Digi-Key japanで約15000円也。
LM3674MF-ADJ/NOPBも250円くらいで売ってるみたい。
もう少しBeagle Boadについて調べたら注文してみましょうかね?

2009/11/20

[電子工作]Chumby修理計画?

前回の続き?
あきらめモード満点だったんですが、kinnekoさんからコメントをいただきまして、
kinneko さんのコメント...

http://tech.cerevo.com/blog/archives/50 このへん?

だそうなので、このページを真似して抵抗やら電圧やらを測ってみた。
  • R300=12V
  • J302=1.4V, 125Ω
  • J303=5.3V, 400Ω
  • J304=1.9V, 155Ω
3.3Vがだめになったせいでいろいろ不具合がおきたということかしら?
作業中にもうひとつわかったことが、U300が熱いということ。
やけどしそうになりました。
U302は指で触れる程度なのにU300は触ってたらやけどする、絶対。
これが原因か?
この場合、U300を新品交換って感じでよいのだろうか?
というかそれくらいしか思いつかないのでやってみようか。
どうせこのままでも動かないわけだし。
しかし、その辺で売ってるのか?LM3674ってやつは。

2009/11/19

[電子工作]Chumby壊れてた

シリアルコンソールケーブル作るまでもなかった。
シリアルコンソールの+3VとGNDをテスターで計ったら1.5V位しか電圧がなかった...orz
これはもう自分じゃ手に負えないわ。
さて、これからどうしようかねぇ...。

2009/11/18

[普通の日記]今週のノルマ終了(したと思いたい...)

Twitter, 気付けば13 days ago...
いやいや、P3P廃人になっていたわけではありませんよ?決して。

さて、やらねばならぬことに一区切りつけたので、あと1週間くらいは通常運行モードのはず。
そういうわけで、やりたいことを列挙してみようか。
  1. Bioroidを弄る
  2. シリアルコンソールケーブル作成
  3. 壊れた(?)Chumbyの動作確認
  4. AVRマイコン入門の続き
大威張りで「今週中にBioroidで何か組み立てますよ」
とか言っちゃったもんだからとりあえず何か組み立てねば...。
金曜までには3番まで終わらせる勢いでやっていきたいですね。

さて、それではこれからBioroidの説明書を読みますよ。

2009/11/04

[電子工作]Chumbyが壊れた

...と断言できないのがもどかしい。
タッチスクリーンの映像が微妙に乱れ、ずっとタッチしっぱなしだと認識される。
たぶんタッチスクリーンがあれになったのだと思うけれど、
タッチスクリーンを外して電源をつけてもSSHが復活しない...。
そうなってくると、なんだか基盤が熱すぎるような気がしてくる...。

そもそもタッチスクリーンを外して電源をつけたときにどういう挙動とるのか、
そこから解ってないし、自分。

うわー、基盤かね?タッチスクリーンかね?
とりあえずタッチスクリーン、SSH以外の入出力で動作確認が必要。

ということで、とりあえず秋月にレベルコンバータを注文しました。
シリアルコンソールケーブルを作って、そちらで動作確認します。
その前にシリアルコンソールケーブルの動作確認を何かで行う必要があるのか...。
(初自作、シリアルコンソールケーブル)

壊れたChumbyの画面画像ではほとんどわからないけれど、マルやら文字やらが軒並み右側へひげを出している。(うまい言葉が見つからなかった...)

いろいろと微妙な時期に壊れてくれちゃったもので、Chumbyを買いなおすかどうするか悩みどころですわ。(いや、まだ復帰不可能だと決まったわけではないですが...)

2009/11/02

[普通の日記]色々と終了

終了した後3日間位寝込んだわけですが、後は1月までは通常運行のはず。 色々お預けしていた物事を進めようかしらね。
  • ChumbyでV4L2&画像処理
  • AVRマイコン入門
  • CUDA入門
とりあえずはChumbyでV4L2してロボ制御って感じでひとつ。

2009/09/18

やっと見つかった…。

わかりにくいよ!この乗り場!
夕飯食べる時間がねいですわ。

岡山到着

回転処理が意外に面倒なようなそうでないような…。

VGA

画質的にはやっぱりVGAくらい欲しいと思った、個人的には。 ホームページとかブログとか画像サイズとか的にはどうなのだろうかね…?

特急やくも

どのくらいのサイズがよいのやら…。