2013年12月15日日曜日
AVRのハーバードアーキテクチャはセキュリティで有利?
よくあるスタックオーバーフローで制御を取るやり口の場合でも、スタック上やデータ上のプログラムは実行されないわけで。すでにFlashROMに書かれているコードでどうにか悪いことをせにゃならんわけだが、これは相当に難しいと思われる。
ヒューズに、プログラムからの、FlashROM書き換えを禁止するビットがあれば、さらに安心なのではないだろうか?
2013年12月11日水曜日
PM700C-UGのヘッドが詰まった
あちこち検索したらEPSONのFAQにちょっと情報があったので試したが復活しない(確かに何回かに一回のクリーニングは動作音が違う気がした)。
そんなわけで、ダメもとで日本ナノディジタル 『プリンタ用クリーニング液 エプソン染料用 EC-02』なるものを発注してみた。平日のうちに届いてくれれば試して、ダメなら週末に分解か?
2013/12/14にクリーニング液が到着。2度ほど試してみたが効果が見られない。残りあと1回分といったところだが、さてどうしたものか。
詰まってない2色を洗浄しなければ5回分くらいありそうだが、洗浄液注入後に3〜4時間も放置しろとあるので逆に詰まりそうな気がして、結局5色全部に使うと、洗浄液は3回分くらいしかない。
2013年11月30日土曜日
samba-3.6はuse client driver = yesが必要?
use client driver = yes
を追加したらあっさり直った。無いときは、Windows側でプリンターを開くとアクセス拒否となっていた。samba-3.4から設定ファイルの使い回しがいけなかったのか。まぁ印刷できるようになって良かった。
2013年11月9日土曜日
Vixie cronの思わぬ仕様の件 on FreeBSD
例えば11月22日(金)の23:45を以下のように指定すると、foo.shは金曜日と22日の両方で23:45に実行されるらしい。
45 23 22 11 5 foo.sh
以下がmanでの説明。
Note: The day of a command's execution can be specified by two fields --
day of month, and day of week. If both fields are restricted (ie, are
not *), the command will be run when either field matches the current
time. For example, ``30 4 1,15 * 5'' would cause a command to be run at
4:30 am on the 1st and 15th of each month, plus every Friday.
きっと有名な仕様なんだろうなぁ。知らんかった。。
2013年10月12日土曜日
AVRマイコンをイーサネットにつなぐ
ここを参考に(ArduinoのGUIではなく)inoでビルドしてみたのだが、けっこう忘れているので手順のメモ。
- 適当にディレクトリを作成してino initするとsrcとlibというディレクトリができる。
- src/sketch.inoができているので、ここのソースコードを貼り付ける。
- 通信プログラムはここからダウンロード、展開してできたディレクトリをlibの下にEtherCardの名で置く。
- arduino-1.0.3とavr-gcc-4.3.4ではprog_charがエラーになるのでPROGMEMで置き換える。差分を置きたいけど面倒そう。。
- ino build -d /usr/local/arduino -m atmega328
- ino upload -m atmega328 -p /dev/cuaU1
接続でCS(ChipSelect)はPB2(SS)端子を使う模様。他は自明と思うので省略。
さて、うまく動くか試してみよう。
2013年9月22日日曜日
チップコンデンサーって壊れやすい?
電源のバイパスを含めて5個を実装したのだが、2個は壊れたようで、さらに2個はどこかへ飛んでいってしまい、結果として9個を消費。壊れた2個は基板のランドに片足のみ半田付けで立てて、もう一方の足は空中配線していた。配線間違いで付けなおしたりで、テンションがかかったりしたのだろうか?ショートはしていないがほぼ容量の無い状態になっていた。
まさかコンデンサーが不良になるとは思わず、ADM3202の電圧変換が機能せずに5〜6時間は悩んでしまった。
2013年9月14日土曜日
怪しいモバイルブースター
写真がそのモバイルブースターで、自分で18650を1〜4本まで入れて使う。4か月ほど使っているがまずまず順調で、Nexus7だと1回(弱かも)、だいぶバッテリーの弱ったHybrid W-Zero3なら2〜3回は充電できそう。おそらく新品の18650を入れれば、その倍くらいの電気を持ち運べると思われる。
Nexus7は普通のUSB通信ケーブルで充電できるのだが、Hybrid W-Zero3はダメだったのでセリアで充電ケーブルを買ってきた。KM-01というやつ。もちろんこのケーブルでNexus7も充電できる。
![]() | |
モバイルブースターのふたを開けたところ右のケーブル下がふた |
2013年9月8日日曜日
NECフォーマットの赤外線リモコンでリピートコードが意外と出ている
KENWOODのミニコンポのリモコンRC-M1MDがどうもうまく受信できないと悩んでいたのだが、どうもリピートコードが頻繁に送出されるのが原因らしい。波形を見ていないので確信はないのだが、電源ボタン含めすべてのボタンで、長押ししなくてもリピートコードが出るっぽい。
当初リピートコード未対応でソフトを組んでいたら十中八九は受信エラーで、リピートコードへ対応したら九分九厘OKになった。
使い古しの電池が悪いのか?外光の影響なのか?とかいろいろ悩んでしまった。
ついでにサブルーチンから戻らないという現象にもちょっと悩まされた。ソースコードを複数ファイルに分けて整理したのだが、何気なく
avr-gcc -o led led.o morse.o irremote.o
とリンクしたのが良くなかった。逆アセンブルしてみるとスタックの初期値設定がおかしい気がする。-mmcu=attiny2313
と、型番指定が必要なのだった。こちらも電源のパスコンを入れていないせいなのか?とかけっこう悩んでしまった。
2013年9月1日日曜日
秋月でArduinoのバニラシールド200円!
if (code[2] != (uint8_t)~code[3])などとキャストが必要の件
プログラム全体が一通りできたところで、いよいよ原因究明しようと逆アセンブリの該当部分を見ると案の定16bitにプロモートされたうえでビット反転されている。たとえば0x89と0x76が送られてきて0x0089と、0x0076のビット反転すなわち0xff89の比較となり、不一致となっていた。
前からシフトとかビット演算が必要ないのに16bitで行われていて、C言語の仕様だからしかたないけど命令数無駄だよなぁ〜と思っていたのだが、ちょっとこの結果は想定外で驚いた。gccの場合、こういった共通の言語仕様はコンパイラーの共通部というか、直しにくいところに実装されているそうで、随時キャストでしのぐしかないようだ。
2013年8月31日土曜日
__attribute__((OS_main))
2013年8月29日木曜日
Google keepいまいち
AndroidでバージョンアップされたGoogle keep appを起動したら、なぜだかメモの一つがアーカイブに移動しており、そのまま書き換えたら指示した覚えもないのに削除しましたとの表示が。。どこを探しても見つからず、あきらめきれずにうろうろしていたのだが、Catchは削除後30日以内なら復活できるのを発見。半月ほど戻ったけど失ったメモを取り戻すことができた。
さらにfirefoxのabout:cacheから最近のメモを拾い上げて、うまく補完できたのでほぼ問題ないが、時間はだいぶ取られてしまった。
Google keepに関してはいろいろ不満が出ているのも発見して、さて今後はどうしたものかと悩み中。削除したら戻せないのはもちろん、Google driveと統合されるはずが一向に進んでいない(統合されればGoogle driveのゴミ箱が機能するはず)とか、Windowsクライアントなら削除を取り消せるけどAndroid appだとダメとか、いろいろあるようで。
2013年8月25日日曜日
デフォルトだとATTiny2313のEEPROMはプログラミング時に消える
メッセージを切り替えられるようにしようと思い、設定したメッセージはEEPROMに保管しておくのだが、なぜだか一度書き込んだメッセージが読めないので悩んだ次第。まぁ開発中は、プログラムの初期化時にデフォルトのメッセージをEEPROMへ書き込んで動き出せば良いかということで納得したが、数十分は悩んだ。。。
AVRマイコンでデータをFlashROMへ置くには
ちょっとしたデータをプログラム側へ置きたかったのだが、少し事情が変わっているようでてこずった。
以前は
const char prog_char data[10] = { 初期値 };
みたいな感じだったようだが、prog_charはdeprecatedだそうで、avr-gcc-4.3.4だと以下のようにするらしい。
const char data[10] PROGMEM = { 初期値 };
アクセスは以前と同じで
char res = pgm_read_byte(&date[5]);
とかするようだ。
しかしすっかり忘れていたよ。ハーバードアーキテクチャー。。
2013年8月24日土曜日
赤外線リモコンの送信データのデータベース
http://www.256byte.com/remocon/iremo_db.php
AVRマイコンで受信プログラムを作っていて、手元のSHARPのAQUOSのリモコンで試しているのだが、取得できたコードとこのデータベースが合ったので、ちょっと自信がもてた。
LSBファーストで送出されるという情報も見かけるので、前記データベースの表記はビット順が逆のような気もするけど、さまざまなリモコンを相手にするのにあんまり細かいことは気にしてられないのかもしれない。
2013年8月20日火曜日
Windos7のNFSクライアント
ながらくWinXP+SFUでNFSを使ってきていて、Windows7に移るにあたって調べてみたら、Enterpriseの場合は機能を有効にするだけで使えるとわかりひと安心。ところがGID/UIDのマッピング機能がSFUと少し違っていて困った。SFUだとローカルに対応ファイルを用意してマッピングできたのだが、Win7の場合はサーバーが必要になるらしい。
幸い、検索したらレジストリを変更してデフォルトのUID/GIDを変えてしまう手順が見つかったので、大袈裟にせず以前と変わらず使えるようになった。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ClientForNFS \CurrentVersion\Default
にDWORDでAnonymousUidとAnonymousGidを追加すればよい。
2013年8月7日水曜日
QMAIL3からメールをエキスポート
Hybrid W-Zero3でQMAIL3の世話になっている。
内蔵フラッシュメモリーの残量が減ってきたので、たまったメールをどうやって吸い上げようかと悩んでいた。
なんのことはなく、メニュー→ファイル→書き出し、でMH風形式にエキスポートできたので、パソコンへ引き上げてW-Zero3から削除した。
パソコンでIMAPサーバーを動かしてそっちのフォルダーへ移動とか、手間のかかる手段を妄想していたのだが、意外と簡単に吸い出せてラッキーだった。
2013年7月29日月曜日
ADATA SP900/5.0.2aでread error発生
貧乏性なので、ながらく容量の10%くらいを、読み込み中心になるように使っていたのだが、空けておいてもしかたないので、過去にスキャンした雑誌を詰め込んでいる。
第一弾を入れ終わってバックアップを取ったのだが、ふと別件でdmesgすると不吉な以下のメッセージが。
ad0: FAILURE - READ_DMA status=51<READY,DSC,ERROR> error=40<UNCORRECTABLE> LBA=152557319
バックアップ途中で出力されたもので154行も出ている。やれやれ。。
2013年7月28日日曜日
bacula on FreeBSD
FreeBSD上のDDS2およびDDS3のテープドライブへバックアップしようとしているのだが、一か所はまったのは起動スクリプト。テープドライブはrootユーザもしくはoperatorグループから利用可能なのに、なぜかstorageデーモンがbaculaユーザbaculaグループで起動するようになっていた。ビルド時のconfigureでグループはoperatorと指定されていたので油断した。Permission deniedとか言ってくれればまだわかるのだが、だんまりで待ちに入るようで、気づくのに時間がかかった。
Windows用クライアントのbacula-fdは、なぜかFreeBSD上のbacula-dirから接続できないようで、いまのところ頓挫している。ファイアーウォールに阻まれているのか他の要因なのか。。
2013年7月26日金曜日
CentOSでパッケージのビルド
CentOSで標準提供のパッケージにちょっとローカルパッチを入れる必要があって、どうやってソースからビルドするのか試行錯誤している。FreeBSDだとportsのwork下でごにょごにょすりゃいいんだけど。
ソースコードパッケージはSRPMをyumdownloaderでダウンロードするらしい。
リポジトリの定義追加が必要になる(/etc/yum.repos.d/CentOS-SRPM.repo)。
これで入手したSRPMのビルドに必要な依存パッケージはyum-builddepで追加できる。
んで、最後は結局rpmbuildでSRPMからビルドになるのであった。
2013年7月20日土曜日
AVR(Tiny2313)で手っ取り早い周期割り込み
8bitのTIMER0のオーバーフロー割り込みを使う。
下記でクロック周波数/1024/256のインターバルで割り込みが来る。
8MHzで動かしているなら32.768msec周期で割り込みが来る。
さらに長い周期が必要なら割り込みハンドラでカウンター数えるのかな。
プリスケーラーは他の分周比も選べるので、もっと短い周期の設定可能。
#include <avr/interrupt.h>
ISR(TIMER0_OVF_vect)
{
/* some process. */;
}
main()
{
TCCR0B = _BV(CS02) | _BV(CS00); /* 1/1024 pre-scale */
TCNT0 = 0;
TIMSK = _BV(TOIE0);
}
2013年7月7日日曜日
seagate ST3160021Aでdiagnostic commandを使う
古いPATAの160GBのもので、接続は以下。
[data] { x x R x } [power]
[data] { x x T x } [power]
RをMAX232等の出力、Tを入力へつないでRS232レベルへ変換する。
9600bpsで接続して通電すると以下のメッセージが。
Interface task reset
1024k x 16 buffer detected
ALPINE - 1_Disk M.14 01-16-03 11:51
Buzz - Head Mask 000F - Switch to full int.
Spin Ready
(ここで数秒おいて)
Error Reading Reserve Track Defect List
F>
検索するとヘッドの0番がおしゃかというつれないコメントが。。
復活できなさげ。。
2013年7月4日木曜日
vim見直した
vi互換エディタとしてはnviを好むのだが、vimを見直す出来事があった。
1GByte、8千万行のファイルを編集する必要があって、ちょっと検索したらvimは行けるらしいと。試してみると、ファイルの読み込み書き戻し検索は相応の時間がかかるが、カーソル移動など編集操作の大部分は普段と変わりないレスポンス。
nviやemacsだと全体をメモリーに読み込むのでスワップがひどくて使い物にならないのだが、vimは拡張子swpなるファイルを作って頑張るらしい。
Hybrid W-Zero3とクラウドサービス
たまにHybrid W-Zero3とNexus7でデータを共有したくなるので、最近のサービスをいくつか試してみているのだが、どれも一長一短で決定打がない。とりあえずEvernoteとSugarSyncを使い分けるのかなぁ。
Evernoteは、古いけどWindows Mobile用のアプリがあって、テキストは編集できる。写真もアップロードできるのだが、即座に送信しないのがチト面倒なのと、アップロードしたデータを表示はできるけどダウンロードできないように思う。
SugarSyncはなぜかアプリが起動しなかった。でもIEでログインすればそこそこ使えそうな印象。あぷりが起動しないのはOpera miniがデフォルトブラウザになっているから?
SkyDriveは、WindowsLiveのアカウントがあるはずなのにログインできないので放置。この辺のユーザーを大事にしない風のところが実にMicrosoftらしいと思う。
DropboxはDropboxxというアプリで使えそうなのだが、パス名に日本語が入っているとダメなようで諦めた。
2013年7月3日水曜日
2013年6月30日日曜日
mplayer-1.1はgcc-4.6.3でコンパイル要?
FreeBSD-8.3のgcc-4.2.2でコンパイルするとTSファイルの再生でシークできずに難儀した(音声が消えてしまう)。mplayer2を試すとシークはできるけどfull screenがダメ。
さて困ったと思いいろいろ探し回っていたのだが、ひょんなことからビルドオプションにOTCHAINを発見。ちょうどfirefoxに要求されてgcc-4.6.3も入っていたので試したら問題解消した。たぶんmplayerの記述に問題があるのだろうと思うが、思わぬところでFreeBSDが非GPL化(この場合はGPLv3回避?)のあおりを喰ってしまった。
mplayer-1.0の頃は映像と音声と思われる2スレッドで再生していたように思っていたのだが、mplayer-1.1は1スレッド。せっかく2コアのATOM330なのでマルチスレッドにしてくれればいいのにとも思ったり。
もうひとつgnuplotもバージョンアップが必要になったが、こっちは時間がかかっただけですんなり通過した。
2013年6月29日土曜日
AVR ATTINY2313のシリアルポートがやっと動いた
シリアルポートに0xff=>0x55=>0x00を、それぞれボーレート/10*2回ずつ送信する。
テスターで電圧を計ればHigh=>Mid=>Lowと2秒ごとに電圧が変化するはず。
んで、試したら切り替わりに10秒以上もかかるので、ボーレートクロックの設定誤りと判定。
LowヒューズのCKDIV8で8分周されているためだった。
なぜだか、CPUは1MHzでも、シリアルポートやタイマーは8MHzで動くものと思い込んでしまっていた。
データシートを見てもはっきりした説明が見当たらないのだが、ぬかったなぁ〜。
ちなみにhidspxで以下の操作をした。
Lowヒューズへ0xe4を書き込み
% hidspx -phu -fl0xe4
確認する
% hidspx -phu -rf
Detected device is ATtiny2313.
Low: 11100100
||||++++-- CKSEL[3:0] システムクロック選択
||++-- SUT[1:0] 起動時間
|+-- CKOUT (0:PD2にシステムクロックを出力)
+-- CKDIV8 クロック分周初期値 (1:1/1, 0:1/8)
High:11-11111
|||||||+-- RSTDISBL (RESETピン 1:有効, 0:無効(PA2))
||||+++-- BODLEVEL[2:0] (111:Off, 110:1.8, 101:2.7, 100:4.3)
|||+-- WDTON (WDT 0:常時ON, 1:通常)
||+-- SPIEN (1:ISP禁止, 0:ISP許可) ※Parallel時のみ
|+-- EESAVE (消去でEEPROMを 1:消去, 0:保持)
+-- DWEN (On-Chipデバッグ 1:無効, 0:有効)
Ext: -------1
+-- SPMEN (SPM命令 1:無効, 0:有効)
Cal: 89 87
gmailからDoCoMo携帯へ転送
GmailからDoCoMoの携帯電話へ転送設定しているのだが、うっかりバッテリー切れしていた間のメールが届いてない気がする。あれ?でもDoCoMoのサーバに蓄積されてそうなものだが、なぜなんだろう?
2013年6月23日日曜日
FreeBSDでルートを指定するにはboot -a
起動途中でloaderプロンプトへ落としてboot -aで起動すればよい。ルートをマウントするところで聞いてくるので、ufs:/dev/ad4s3aなどと指定すれば良い。
ディスク追加でディスクの番号が変わったように思ったのでいろいろ試すが改善せず、実は追加したディスクへのインストール途中で元のディスクにパーティションを追加したのが原因と判明。FreeBSDのパーティション番号が変わっていたのであった。
FreeBSDでルートパーティションを指定して起動するには、boot -aとしてASKNAMEオプションをkernelに渡せばよい。
2013年6月15日土曜日
CDからboot.binを抜き出す
これ が詳しい。
dd if=/dev/cd0 bs=2k skip=17 count=1 | od -x
とかしてBRVDを読んで、オフセット0x47-0x4aを確認する。
boot catalogのセクタ位置が書かれているので、同様にして読んで、オフセット0x20が0x88ならブート可能。
boot catalogの0x28-0x2bにブートセクタの位置が書かれているので、そこをboot.binとして抜き出せば良い。
素直にbbie使えってことなのかも知れないが、いちいちWindows引っ張り出すのも面倒なので。
2013年6月9日日曜日
firefox9から19へバージョンアップ
メニューをうまくクリックできないのはctwmと食い合わせが悪いからなのか?あとshared objectでロードできていないものがあるっぽいので直さないと。
2013年6月7日金曜日
2013年5月30日木曜日
google日本語入力からの切り替え
google日本語入力で、文字種の選択キー長押しで入力方式選択を呼べるの発見。日本語入力時以外の普段
はandroidキーボードにしたいけど、戻し方がわからなかったのがようやく解決した。
2013.7.24追記
Androidキーボードはスペースバーを横になぞると言語切り替えなのだが、GBでは日本語が選択肢に入らない(機能キー?文字種切り替えの右の丸印キーを長押しで切り替える)。 なのだが、JBではNexus7に標準搭載のWnnが選択肢に入っていて、AndroidキーボードからWnnへの戻し方でしばし悩んだ。
2013年4月28日日曜日
FreeBSDでBD-REを使ってみた
mkisofs -UDF -iso-level 3 -o image.iso src
growisofs -Z /dev/cd0=image.iso
と、こんな感じ@FreeBSD 10.0-CURRENT amd64。
iso-levelは3以上にしないと個々のファイルサイズが2GBに制限されるらしい。
growisofsはブランクメディアだとフォーマットもしてくれる。cdrecordはエラーが出て使えなかった。
cdrtools-3.00_1とdvd+rw-tools-7.1を<PIONEER BD-RW BDR-206 1.04>で使用。
growisofsはクローズされてるのかちょっと不安。ROMドライブで読めないメディアになっているのかも。そのうち確かめないと。倍速メディアなんだけど書き込み速度が0.8で2時間ほどかかるのも困るな。
2013年4月13日土曜日
結局GBに戻して使用中
Nextbook 7 Premium #1211 Custom ROM with Market3.4.4 By Finless Version 1.4
に変更。これだとスタンバイ状態でほとんどバッテリーが減らない。タブレットUIに慣れてしまうと従来のはちょっと残念な印象だが、使えるアプリにそれほど差は無いし。当分はこれで使ってみる。
2013年4月6日土曜日
EFUN NextbookでJelllyBeans
いろいろアプリが入っていてうっとおしい面もあるけど、NovaランチャーはOFF、Awesome BEATSとVolume+を無効にして、まぁまぁ使えている。メモリー不足と思われchromeもまともに動かないので削除したいけど、プリインストールなので消せない。
もう少し使ってみてからGBへ戻すかどうか考えようと思っている。
2013年3月23日土曜日
Nextbook M726HNでJellyBeans
一年くらい前にnextbookのM726HNを購入して、ここしばらくはICSのカスタムROM(Kustom Kream v1 for Nextbook Premium 7)で便利に使っていた。
どうも無線LANをONにしていると電池の減りが早いし、起動ログにも無線LANデバイスの省電力関連と思われるGPIOのエラーが出ていたりで、Nexus7も入手したしGBのROMへ戻そうと思ったのだが、せっかくなのでJBのROMを試してみた。
少し前にCREW RKTabletsでForgotten Tabs Projectを発見して気になっていた。
JBのROMとか置いてあるので試してみた。XDAの方にはCWMのタッチパネル対応版があるので、入れ替えると便利。カーネルはXDAにもあるし、CREW RKTabletsのどちらからでも入手できる。
手順は以下のような感じ。
Oma_Odys_Loox_JB_4.1.1_v1.2.4a.7zを展開。
Oma_RK29_CWM_touch.7zのrecovery.imgとkernel_308_next7p1n_nextbook.7zのkernel.imgへ入れ替えて、RKAndroidTool.exeで書き込む。リセットを押しながらUSBケーブルを接続するというのを良く見かけるが、USBケーブルを接続しておいてリセットを押せば認識するのはうちだけ?
再起動するとドイツ語なので面食らうが、日本語に設定すればまぁまぁ使えそう。
Oma_JB_v1.2_Modell_fix_Next.zipとOma_JB_v1.2_Modell_fix_Next 7P12.zipとOma_JB_v1.2_akkufix_2.zipを試してみたけれど、音が出なくなった気がする割に気になっていた問題が解消しないので、適用やめた。
初回は時計が設定されたと思うのだが、なぜかやり直しているうちに再起動後は時計が設定されなくなった。1970年1月1日のままだとGooglePlayが接続させてくれないので面食らう。あと、なんとなくGセンサーが機能していないように思えて、画面の縦横が切り替わらないんだけど、たいていは横画面で使うので、あんまり不便じゃないかも。MX動画プレーヤーによれば、グラフィックアクセラレータは機能しているっぽい。バッテリーの残量はパーセンテージが出ているのでakkufixはいらなかったのかも。
若干sluggishなので、一呼吸おきながら使わないといかんのだが、まぁまぁ使えるのでしばらくJBで試してみる。
Part2に、音量調整と画面の縦横切り替えのアプリが用意されている。音量調整の方はまぁまぁ使えるが、画面切り替えはいまいちかも。
2013年2月16日土曜日
Nexus7 32T(いわゆる3Gモデル)を購入
nexus7もFOMAプラスエリアが使えないとかいろいろ問題あるのは承知の上だが、なかなか満足いく選択肢はないものだ。
2013年1月8日火曜日
FreeBSDのdumpとfsckでリモートから進捗を見られる
42176 2 I+ 0:09.03 rdump: /dev/ad1s2d: pass 4: 21.61% done, finished in 2:16 at Tue Jan 8 12:12:53 2013 (rdump)
2013/07/28追記
バックグラウンドのfsckも同様に進捗がpsで見える。