2013年10月20日日曜日

MicroBlaze SDKで書き込みに失敗する

ようやく重い腰をあげて?MicroBlazeを勉強しはじめた。

きっかけは、FPGA ボードで学ぶ組込みシステム開発入門 〔Xilinx編〕を買ってから。

MicroBlazeはいつかしらトライしてみたかったのだけれど、どうもどこをどう
調べれば最初の一歩が踏み出せるのかよくわからなかった。

しかし、上記の本は平易だけれども必要な情報がしっかり書かれていてとても助かった。

でこの本にしたがって勉強。

順調に進んでいたのだけれど、SDKからボードに書き込むところで問題発生。

下記のメッセージが出て書き込めない。

Program FPGA failed
  Failed to download the bit file
    DONE bit didn't go HIGH after programming FPGA

使っているのはDIGILENTの、XUP USB-JTAG Programming Cable
これはXilinx Platform Cable USB の互換品。

で解決法。

SDKのメニュー XIlinx Tools->Configure JTAG Settingsより
JTAGケーブルのTypeを "Xilinx USB Cable"を指定する。
(Auto Detectだとうまくいかない)

最初は指定スピードは遅めのほうがよいかもしれない。

うまくいかない時は、一度USB Cableを抜いてみること。
(一度エラーが発生すると、その後タイプを変えてもうまくいかなくなることがあった)


2013年10月9日水曜日

PowerShell ソースコードの管理をGitでしようとしてはまった。

GitのフロントエンドにAtlasianのSourceTreeを使っているのだけれど、PowerShellで作ったスクリプトを取り込んだ時、差分が表示されないという事案が発生。

いろいろ調べた結果、どうやらバイナリで認識されてしまっている模様。

PowerShell ISEで作ったファイルは UTF-16で保存されるらしく、これをGitはバイナリとして認識することにより発生するらしい。

まだGitのカスタマイズをよく理解できていないのでまだ解決できていないがフィルタを適切に設定すればなんとかなるような気もする。

こういうとき、Windowsは面倒。

2013年10月4日金曜日

【解決】PowerShellでInternetExplorerを操作するときにエラーが発生

メイン開発機で作っていたスクリプトをほとんど素のWindows7機にもっていって動作確認した時のこと。

InternetExplorerを操作する箇所で下記エラーが発生

"getElementById" のオーバーロードで、引数の数が "1" であるものが見つかりません。

該当コード部分は
$doc = $ie.document
$username_el = $doc.getElementByID("username")

まったくもって意味不明
オブジェクトがないということか?
とも思ったけど document自体はCOMコンポーネントのオブジェクトとして認識されている。

いろいろ、調査。
で、下記可能性が見つかった

1.InetrnetExplorerのセキュリティ設定が悪いんじゃないか。
   セキュリティの保護モードをオフにしろ、という記述(海外のサイト)
  →これはほぼ嘘だと思う。自分のメイン機では”オン”で動いている。
   サイトによってエラーが出たり出なかったり、という時は疑ってもよいのかもしれないが。

2.IEのバージョンによりアクセス方法が違う
  IE9だとエラーが出るので、下記ページのようにしろ、とある。
  おいらのはIE10なんですけど、と思いながら試してみる。

  http://cezne.tumblr.com/post/23228713564/ie9-powershell

  これでも動くことは動く。
  これが大変くせもの。これで確かにいけるのだけれどページ遷移すると”忘れる”
  ので最初のアクセスしか有効でない。実質”使えない”
  かつ使うすべてのメソッドをこれでアクセスするなんて考えただけで寒気が…

 
 

ここでなんとなく思う。
オブジェクトはそこにいる。
決して情報を取れていないということではなくアクセス方法がわからないだけ

頭の中になぜか”アセンブリ”という言葉は浮かぶ。

アセンブリの一覧はこのページのようにして取れる。

 [Appdomain]::CurrentDomain.GetAssemblies() | %{$_.GetName().Name}

これでメイン機と動いていないマシンで差をとった。

メイン機にあって、動いていないマシンにないエントリが見つかった

Microsoft.mshtml

うーん、それっぽい。

(あとの追調査でわかったことだが、navigateで有効なサイトにアクセスして documentプロパティに
アクセスしたときに初めて読み込まれるようだ。)

なんか来た。

あとはmshtmlを探せばよいっぽい。
が、探すファイルはMicrosoft.mshtml.dllであって、mshtml.dllではないようだ。
確かに動かないマシンにはないようだ。

メイン機には開発ツールをてんこ盛りにしているのでどれをインストールした時に入ったのかとかさっぱり。
ファイルを一つ持っていけばよかったのかもしれないがなんとなく”ちゃんと”インストールしてみることにする。
(依存関係とかがあってあとで悩むのもいやだし)

ネットの情報ではMicrosoft .NET Framework 2.0 SDK に入っているらしい。
あと、Global Assemblyっていうやつに読み込まないといけないらしいとの情報も。

でSDKを入れた。
インストール後、検索するとやつは、

C:\Program Files (x86)\Microsoft.NET\Primary Interop Assemblies\Microsoft.mshtml.dll

に居た。

ここでPowerShellを立ち上げてテストしてみたけどだめ。

で、直接読み込んでみた。

[System.Reflection.Assembly]::LoadFrom("C:\Program Files (x86)\Microsoft.NET\Primary Interop Assemblies\Microsoft.mshtml.dll")

なんかメッセージが出て読み込めた。

上記チェックをやった。 やったー動いた!
これをやればなんとかなる!

後日談

 動くようになったマシンを再起動したら上記で読み込まなくてもdocumentプロパティをアクセスした時点で自動的に読み込まれるようになった。(ログオフでもよかったのかもしれないが分からない)

GACというところ(c:\windows\assembly)に登録されるとマシン全体で使えるようだ。
ここには上記.net SDKのインストーラが登録してくれるみたい。
(ここはフォルダに見えているけどメタファーとしてそうなっているだけで実質は違うらしい)

もしGACにあるアセンブリを読み込むには
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.mshtml")
でよいらしい。

かなりネットをさまよったがなんとか一日で解決できた。
しかしみんなどうやって解決してるんだ?

2013年9月5日木曜日

MySQLの設定、my.cnfの在処について

どうも気になるので。

MySQLの設定ファイル、my.cnfだけれど自分のためだけの設定の場合は
自分のホームディレクトリに .my.cnf (頭のピリオド忘れないこと)という名前で老い低おけばよい。

/etc におくときはどうしても必要な場合のみにすること。

2013年5月17日金曜日

Windows7のXP Modeで統合機能のフォルダ共有機能が働かない

いろいろ調べてみるが、全てダメ。

Windows7を再インストールして、保存していたxpモード用のファイルを戻し
XPモードは立ち上がるのにフォルダ共有機能が働かない。

クリップボードとかそれ以外のものは統合機能が働いているっぽいのに。

下記ページで以下のような記述を見つけた

http://mikasaphp.net/win7vpc.html

引用はじまり--

仮想 PC から直接メインPC ドライブを参考にできるようになる等、メイン PC と共有できます。

  統合機能が有効にならない?又はインストール出来ない時 by Windows 7 SP1 32bit

一時統合機能を XP Mode 上でアンインストールし、
[ C:\WINDOWS\system32\drivers\wdf01000.sys ] の [ wdf01000.sys] ファイルを [ wdf01000.sys.old ] とリネームしてから
バーチャル PC のツールより統合機能をインストールしなおします。

 この情報はマイクロソフトフォーラムより取得したもでありマイクロソフトの文献ではありません。


--引用おわり

これは64bitでも有効だった。

2013年4月11日木曜日

Thinkpad i1124 + CentOS + WLI-CB-G54 で無線LAN

ethernetを持たないthinkpad i1124を無線LANにつなぐ件。

USB LANアダプタで有線LANにつないでいたんだけど簡易コネクタ?のせいで
ちょっと触っただけで接触不良、接続が切れてしまう。

ハードオフでPCMCIAカードでコネクタ内蔵のカードを買ってきたんだけどどうもうまくいかない。

手持ちの無線LANカードWLI-CB-54があることに気づき、挿してみた。

■まずlspciで認識できているかを調べた

# lspci
~~ 略 ~~
01:00.0 Network controller: Broadcom Corporation BCM4306 802.11b/g Wireless LAN Controller (rev 03)

Broadcom BCM4306として認識されているようだ。

■firmwareの入手

なんやら、firmwareが必要とのことだ。
Windows用のドライバから抜き出すプログラムを使って準備するらしい。
が、ここで問題。 抜き出すプログラムが対応しているWindows用のドライバに相性がある。
適当に入手したやつだとだめだった。

先人のHPにあったものをありがたく頂戴する。

bcm43xx-fwcutter-006.tar.bz2がfirmwareを抜き出すプログラム。makeが必要。
bcmwl5.sysがwindows用のドライバ。

そのページにあるようにbcm43xx-fwcutterで抜き出された*.fwを/lib/firmwareへ移す

# ./bcm43xx-fwcutter bcmwl5.sys 
# mv *.fw /lib/firmware/ 

■ wpa_supplicantの設定

使っているCentOSには入ってた。
デーモンになっていて接続の面倒を見てくれるみたい。

1./etc/sysconfig/wpa_supplicant 下記のようにした。 OTHER_ARGSに -u を設定するとだめだった。 また自分の環境では eth1 として認識されていたためそのように設定した
# Use the flag "-i" before each of your interfaces, like so:
#  INTERFACES="-i eth1 -i wlan0"
# INTERFACES="-i wlan0"
INTERFACES="-i eth1"

# Use the flag "-D" before each driver, like so:
#  DRIVERS="-D wext"
#DRIVERS="-D wext"

# Other arguments
#   -u   Enable the D-Bus interface (required for use with NetworkManager)
#   -f   Log to /var/log/wpa_supplicant.log
#OTHER_ARGS="-w -u -f /var/log/wpa_supplicant.log"
OTHER_ARGS="-w -f /var/log/wpa_supplicant.log"

2. /etc/wpa_supplicant/wpa_supplicant.conf 下記のようにした。CCMPとはAESのことを指すらしい。 ググったものでは ap_scanや、scan_ssidが設定されていたが自分の環境で指定するとだめだった。

ctrl_interface=/var/run/wpa_supplicant
ctrl_interface_group=wheel
#ap_scan=0
#network={
#       ssid="any"
#       key_mgmt=NONE
#}

network={
        ssid="STARFLEET"
#       scan_ssid=1
        key_mgmt=WPA-PSK
        proto=WPA WPA2
        pairwise=CCMP TKIP
        group=CCMP TKIP
        psk=パスフレーズ
}

またパスフレーズは下記コマンドで得られる。上記のひな形みたいな感じの出力が得られる。 パスワードも出力してくれるがセキュリティのため上記ファイルには転記しないこと。(パスワードそのものは”必要ない”)

# wpa_passphrase YOUR_SSID YOUR_PASSWORD
network={
        ssid="YOUR_SSID"
        #psk="YOUR_PASSWORD"
        psk=計算してくれたパスフレーズ
}

3.デーモンの設定。 自分のやつはwpa_supplicantがデフォルトで動いてなかったのでchkconfigで設定

# chkconfig wpa_supplicant on          

■ネットワークの設定 ここは普通に。 eth1として認識されているので ifcfg-eth1 に設定。ここらへんはあなたの環境に合わせて。
/etc/sysconfig/network-scripts/ifcfg-eth1 の内容

# MELCO BUFFALO WLI-CB-G54
DEVICE=eth1
BOOTPROTO=none
ONBOOT=yes
NETWORK=192.168.1.0
NETMASK=255.255.255.0
GATEWAY=YOUR.GATEWAY.ADDRESS.DAYO
IPADDR=YOUR.IP.ADDRESS.DAYO
HWADDR=aa:bb:cc:dd:ee:ff

でインターフェース起動
# ifup eth1

またはネットワーク再起動
# service network restart

■LANカードを挿し直す。
たぶん、大丈夫。
さらに念のため再起動して上記の設定が反映されていることを確認。

2013年4月4日木曜日

HP Elitebook 8760Wのアップグレード(後編)

前回からの続き。

motherboardを換装して立ち上げたらNumLockとCapsLockキーのLEDが3回点滅を繰り返す件。

調べてみた。
HPのホームページの真ん中ぐらいの表。

3回点滅はメモリーエラーだとのこと。

※ここを調べるまでにあせって元のボードに戻して立ち上がることを確認してまた換装してを繰り返したのは秘密。

で冷静に考えた。
メモリーは背面のスロットに8Gx2を挿している。

1.メモリーの指す場所に問題がある
2.壊れたボードを掴まされた。
3.i5とこのボードの組み合わせはNG

今更2.,3.だったとしてもしょうがないので1.を試す。

前回のメンテナンスマニュアルによると、
1. まず背面スロットを埋めてからキーボード裏側メモリスロットにメモリを増やすこと
2. 各メモリスロットは1->2の順に指すこと

と書いてあった。
が、どっちが1か2かわからない。

背面スロットにメモリーを1枚だけ挿してみた。
状況変わらず。

そのメモリを背面スロットのもう一方に挿してみた。
立ち上がった!!

どうやら指す場所がキーらしい。

背面スロットに2枚指すことがNGっぽいので次にキーボード裏側メモリスロットに挿してみた。

キーボード裏側メモリスロットは上下にちょっとずれて2スロットあるので(写真がないのはごめんなさい)まず下側からさした。

NG。

次に上側にさした。
BINGO!!

立ち上がった。

ちゃんと8GBx2で認識している。

前回2540MはメモリーはMax16GBまでとしったかぶりに書いたが、今回Intelのホームページで知った
このせいで?メモリースロットには使えない(ばかりか立ち上がらない)場所があるんだろう。

たぶん、i7で32GB対応しているやつに差し替えれば残りのスロットも使えるようになるのだろう。

まとめ。
i7対応motherboardにi5を挿すとメモリーを挿すスロットに注意が必要
→背面スロットに一枚、キーボード裏側スロットに一枚。

今後i7入手に努める。

※挿し直しを行った時、電源ボタンを押しても立ち上がらないことがあった(まじあせった)。
 CMOSバックアップバッテリーを抜いて、
 バッテリーを抜いて、
 電源ボタンを空押しして、
 バッテリーを元に戻して 復帰した!!

2013年4月3日水曜日

HP Elitebook 8760Wのアップグレード(前編)

HPのハイスペックノート,8760Wを入手した。オークションで。
憧れの?Quadroを積んだ奴。3000Mだけど。

家の中でどこでもそれなりの事ができるPCとして使うつもり。
i5積んでたのでi7に変えたいなぁ、と思っていたらすでに変えている人が。

とりあえず交換可能だ、と言うことはわかったのだけれどヒートシンクがi5モデルとi7モデルで違うらしい。

パーツリストはここにある。
※HPのホームページの設定地域をアメリカにしとかないと変なところに飛ばされる。

上記のリンク先の人はヒートシンクを手に入れたらしいけどHPでは日本向けにパーツを売ってない。
ebayを見たけど該当する部品の出品はなし。

で、ebayを見ていたらi7用のmotherboardが出品されているのを見つけた。
i5とi7でmotherboardが異なっていて、メモリスロットがi5用が2つに対してi7は4つ

なんでわざわざ変えてるんだろう。

あとでわかったのだけれどi5(2540M)はメモリがmax 16GBにしか対応していないのに対し、i7(2860QM)は32GB。

まぁ、i7に載せ替えたいついでに4枚メモリが刺さったほうがいらない4GBのメモリを+αでつければメモリが増えてハッピーじゃないの?という貧乏根性。

で入札。というか即決だったんだけど。
一週間ほどして中国から到着。

気持ちを落ち着けてから分解、交換した。
分解の手順はこちら

マニュアルにはディスプレイユニットも外せ、となっているけど外さなくても大丈夫。
(あとから気づいた)
上面パネルを外したところ。

ヒートシンクとかを外したところ。

が。
立ち上がらない。NumLockキーとCapsLockキーのLEDが3回点滅を繰り返したまま

やっちまったかぁ~~~~~~~~~~~~~~~~~!?!?!?!

2013年3月10日日曜日

【その3】充放電状況の計測:GR-SAKURAを使った独立系太陽光発電コントローラについて

先回失敗した、バッテリーの充放電状況を計測する件について。
充放電を計測する、ということは電流の方向が正負どちらになっても計測出来る必要がある。

前回の失敗原因を明らかにしたい(このようなときのOPAMPの使い方を習得したい)ところだが
コントローラを前進するため、以下の解決策をとることにした。

そういう”キットを使う”ことにした。
ストロベリー・リナックス製のセンサ、”INA226 I2Cディジタル電流・電圧・電力計モジュール”を使うことにした。
http://strawberry-linux.com/catalog/items?code=12031

インテリジェントセンサのため、使いたいものをつなげば簡単に計測できる。
GR-SAKURAとはI2Cで接続することになる。
これは、36Vまで、かつ±20A以内の電圧および電流を計測することができる。
また電力も計算してくれる。

商品名の通り、INA226というTI製のチップを使っているのだけれどシャント抵抗は外付けのため、電流の計測のためにINA226にその抵抗値を教えてやらなければならない。

それはまた今度。

2013年2月14日木曜日

入れ子になったmultipartメールのデコード

Google App Engineで受信したメールから添付ファイル(画像)を取り出して
それを登録する、というアプリケーションを作っているのだけれど
メーラによって、また送信条件に形式がかわり注意深くデコードしないといけない件。

もちろん、添付されてるメールはmultipartなのだけれど条件により下記になる場合があるみたい。

1. 普通に添付
 multipart/mixedでbodyのどれかに置かれているとき。
 これは普通にGoogleで引っかかる方法でやればいい。
 ポピュラーだと思うので略。
 
2. html形式でtext形式の本文と一緒に送られてきた時。
 multipart/relatedでbodyのどれかに置かれているとき。
 これは1.と同じにやればよい。
 
3. 上記の1,2,が転送されてきたとき
 これはmultipartの入れ子になっている。
 multipartのbodypartにまたmultipartが入っている。
 これはbodypartのContentTypeを調べてそれがmultipartだったら再帰的に処理していけば良い。
 下記みたいにしてMultipartにキャストして処理してやる。

  BodyPart bp = multipart.getBodyPart(i);
 Multipart subMultipart=(Multipart)bp.getContent();

2013年2月11日月曜日

QNAP x86ベースのNASにffmpegをインストールする

TS-469のtwonkymediaでちゃんと設定(mp4)していてもトランスコードできないなぁ、と調べてみたらffmpegがx264対応していなかった件。

※ipkgのffmpegもx264対応してなかった。

自分メモなので最低限。ヌケモレあります、多分。

1. OPTWARE Ipkgのインストール  QNAP設定画面のApplicationsから。

2. 必要なgccやらなんやらを ipkg install hoge でインストール
    ipkg install gcc
  ipkg install make
  ipkg install autoconf
   ipkg install coreutils
    ipkg install lame
   ipkg install libtheora
   ipkg install libvorbis
   ipkg install pkgconfig
  

3. x264をコンパイル
  http://www.videolan.org/developers/x264.html
  からもらう。
 ipkg install x264でインストールできるが、”旧い”と後述のffmpegのconfigure時にエラーがでる。

 
 しかも、configureは下記でやる必要がある。どうもipkgでインストールされるgccのコンパイルのされ方がi386をターゲットにしている模様。

  ./configure  --host=i386-pc-linux --disable-asm --prefix=/opt

 またyasmが旧いと文句を言われるがソースからインストールがしんどいので--disable-asmでパス。
 prefixはお好み、だがoptwareのインストールベースパスが/optなのでこれを指定。

  で、make install-lib-dev

4. libfaccをコンパイル

 http://www.audiocoding.com/ からソースをもらう。
 

5.  ffmpgをコンパイル
 下記オプションで。 faadは不要となったらしい。また途中で何かない、とかいわれたら順次ipkgで。
   ./configure --prefix=/opt/ --enable-gpl --enable-libmp3lame --enable-libx264 --enable-libvorbis --enable-libtheora --disable-shared --enable-static --enable-libfaac --enable-nonfree

 
  あとはmake,make install

faacをリンクすると再配布してはいけない、らしい。

2013年2月7日木曜日

【その2】GR-SAKURAを使った独立系太陽光発電コントローラについて

ひとまずバッテリーの充放電状況を調べるため、双方向の電流を計測出来る方法を模索。
すでに太陽電池が発電している電流は計測できているので、その反対方向を測れば良いはず。
ということで逆方向にも差動増幅を入れればよいはず。


だけど、うまく行かなかった。
テストで負荷側の電圧を低くしている時は問題ないんだけど、電圧をあげていって本来の電圧付近、16V程度ではなぜかオペアンプの電源電圧が上がってしまう。

なんでだろ。両方向につけると絶縁しきれないのかな。

2013年2月5日火曜日

GR-SAKURAを使った独立系太陽光発電コントローラについて

今、GR-SAKURAを使って現在稼働させている独立系太陽光発電のコントローラを作ることを計画中。

企画としては以下
1.MPPT充電に対応
2. 鉛バッテリーへの充電
3.過放電防止のための負荷切断
4.twitterによる発電およびバッテリー状態の”つぶやき”
5.上記4.をグラフ化(Google App Engine)


GR-SAKURAを選んだのには下記の理由があります。
1.Ethernetがついてる(Full)
2.ライブラリでPWMが簡単(ArduinoライクなRXduinoってやつ)
3.小さい
4.そこそこの値段(4,980円)

当初はPIC+Ethernetを考えてましたが構想が動くかのフィージビリティ・スタディをさっさとやってそれからにしようと。

現在稼働しているシステムの状況を下記へ記す。

太陽電池は50Wx2枚ですが設置の関係で東向きになっているため全然その性能を出せず。
これは致し方ない・・・

 
 

ここで点線で囲ったところをGR-SAKURAに置き換えよう、という算段。

2013年1月9日水曜日

Windows7+YamahaRT57i+EmobileGP02でPPTP VPNがすぐ切れる

出先でEmobileGP02を使いつつ、基地にはYamahaRT57iで
PPTP VPNを張ってクライアントにWindows7 を使った時にVPNが切れる件。

認証なども通っていったんは接続できるんだけど数分で切れてしまう

切れた瞬間のログを見ると[ pptp keepalive timeout ]となっている模様。
で、下記を入れてみた。

tunnel select 1
pptp keepalive use off


これで接続は切れなくなった。
なんだか気持ちが悪いけど。

ところで、Windows側の設定でアイドルしきい値という項目があるんだけど
グレーアウトでいじれない。

これが関係してたりしないのかな。