2009.02.24

Captchaを破ってココログに付いたSPAMコメントを、ほぼ一掃するRubyスクリプト

最近、Captchaを破ってSPAMコメントが付くようになりました。

とてもウザいのですが、自分のところに付くSPAMコメントには、以下の書式でURLが貼られることが多いようです。

[url=http://hoge.com/] hoge [/url]
[URL=http://hoge.com/] hoge [/URL]

これまでこのブログにコメントをくださった方にはこの書式でリンクを書く人は居なかったので、実績で言うと、この書式のURLが含まれるコメントは100%SPAMです。

ちょっと乱暴ですが、こういう書式のURLが含まれるコメントはSPAMである、という判定をすることにし、機械的に削除することにしました。

この書式が現れないSPAMコメントもあるのですが、こちらは特徴点が無く、機械的な判別が困難なので置いておくことにします。

ウクライナとか、ロシア方面のIPからのコメントだったらSPAM、というやり方でもよさそうですけどね。

RubyとMechanizeを使って自動削除スクリプトを書きました。

このスクリプトをcronなどで定期的に実行して使います。

コメント一覧ページから操作しているので、最初の20件内だけ処理します。 逆を言うと毎回20件見ているので、実行間隔によっては、

「0.upto((comments/'//*[@class="flyout-action-edit flyout-action"]').length - 1) do |i|」

の部分を例えば「0.upto(5) do |i|」などとして、無駄なアクセスが生じないようにするといいかもしれません。

すいませんが、無保証です。 また、自分はココログベーシックなので、FreeやProで動くか分かりません。

コメントを編集するAPIは無いようなので、HTMLの構造に依存するスクリプトです。

リニューアルがあった際には使えなくなると思います。

削除だけの対策だとSPAMコメントが付いた場合にもメール通知が来てしまいウザいので、「新しいコメント書き込みを、記事の投稿者にメール通知する」をオフにした上で、明らかなSPAMは除外した上で、このスクリプトから新着コメント通知のメール送信をしたいところですね。気が向いたら改良します。

#!/usr/bin/env ruby

$KCODE = "u"

require 'rubygems'
require 'mechanize'

# ココログのユーザ名
username = 'あなたのユーザー名'
# ココログのパスワード
password = 'あなたのパスワード'
# ココログのブログID
blog_id = 'あなたのブログID'

app_top = 'https://app.cocolog-nifty.com/'
login_page = app_top + 't/app'
comment_page = login_page + '/weblog/post?__mode=list_comments&blog_id=' + blog_id

agent = WWW::Mechanize.new
agent.max_history = 1
login_page = agent.get(login_page)
login_form = login_page.forms[0]
login_form['username'] = username
login_form['password'] = password
agent.submit(login_form)
comment_page = agent.get(comment_page)
comments = (comment_page/'//*[@id="comments-list"]/table/tbody/tr')

0.upto((comments/'//*[@class="flyout-action-edit flyout-action"]').length - 1) do |i|
  comment_edit_page = agent.get(app_top + (comments/'//*[@class="flyout-action-edit flyout-action"]/span/a/@href')[i].inner_text)
  0.upto((comment_edit_page/'//*[@id="text"]').length - 1) do |j|
    body = (comment_edit_page/'//*[@id="text"]')[j].inner_text
    # puts body.gsub(13.chr, '')
    # コメント本文が正規表現にマッチしたらSPAM
    # [url=http://hoge.com] hoge [/url]みたいな書式が含まれるコメントはSPAM
    if (body =~ /\[[uU][rR][lL]=.+\].+\[\/[uU][rR][lL]\]/) then
      # スパムコメントとして@Niftyに報告しつつ削除
      comment_edit_form = comment_edit_page.forms[1]
      comment_edit_form.status = 'junk'
      comment_edit_form.from = 'edit_comment'
      comment_edit_form.to = 'list_comments'
      agent.submit(comment_edit_form)
      # 初回は以下2行をコメントアウトしてテストした方がいいかも
      # puts "SPAM comment deleted"
      # exit
    end
  end
end

|

2008.07.05

非対応機種で無理矢理モバイル版Wassrを利用

TwitterのAPI制限は確かにいかがなものかと思うので、Yappo氏のアジテーションに乗ってWassrの利用を開始した。

Twitterのシンプルさが好きだし、ときたま発生する海外の方、Twitterを根城にする方との交流を楽しんでいるのでTwitterとは離れ難い。
WassrはTwitterとSNSとの間に位置するような使用感で、Twitterには無いシナジーが確かにあるので併用してみている。

モバイル版のWassrはWILLCOMへの対応をうたっているものの、Advanced/W-ZERO3[es]のIE/OperaでアクセスするとPC版に飛ばされる。
Twitterのように任意に使い分けられるのがベストだと思うが、そうはなってない。
後発としては柔軟な運用をお願いしたいところ。

NetFront Browser v3.5コンセプト版をインストールして、User-Agentを書き換えたらモバイル版にアクセスできた。
WILLCOMユーザーの誇りから、User-Agentは味ぽんのものに変更してみた。

Mozilla/3.0(DDIPOCKET;JRC/AH-J3001V,AH-J3002V/1.0/0100/c50)CNF/2.0

しかし、NetFront Browser v3.5コンセプト版のスクロールはなんだか使いにくいなあ。スクロールと共にフォーカスが移っていくあの形式が使いやすいのに。

Mac/PCのブラウザでもUAを書き換えるとモバイル版が見られるが、IPもチェックしているようで、チャンネル以外はほぼ見られない。チャンネルは見られるが、書き込みはできなかった。

W-ZERO3をWMWifiRouterで無線LANルータ化したり、インターネット共有でBluetooth PANを組んだ上で、クライアント側からUser-Agentを詐称したブラウザでアクセスするといいが、そこまでするシチュエーションは無いかな。W-ZERO3+N810という組み合わせであれば意味はあるか。

NOKIA N810のブラウザでのUser-Agent変更は? とITTで調べると以下のbookmarkletで可能とのこと。同じく味ぽんのにしてみた。

User-Agentを味ぽんのものに変更


about:config?prefname=general.useragent.override&prefvalue=Mozilla%2F3.0%28DDIPOCKET%3BJRC%2FAH-J3001V%2CAH-J3002V%2F1.0%2F0100%2Fc50%29CNF%2F2.0

元に戻す


about:config?prefname=general.useragent.override&prefvalue=

ただ、about:configは重くて、自分のところではブラウザがハングアップしてしまうことがしばしば。
同じことは、~/.mozilla/microb/user.jsに設定を加えることでもできる。

User-Agentを味ぽんのものに変更


user_pref("general.useragent.override", "Mozilla/3.0(DDIPOCKET;JRC/AH-J3001V,AH-J3002V/1.0/0100/c50)CNF/2.0");

元に戻す


user_pref("general.useragent.override", "");

補助スクリプトでトグルできるようにした方がいいだろうね。

|

2007.07.12

Flockからココログに投稿

ブログエディタ内蔵のブラウザということで、Flockを試してみた。

ココログにも無事投稿できた。

Add new blogで入力するURLは、APIのURLではなくて、「http://moyashi.air-nifty.com/hitori/」だった。

APIはATOM、MetaWeblog、MovableTypeから選択できるが、ココログではMovableTypeを選択。
ATOMでは全然、MetaWeblogではカテゴリが反映されなかった。

flickrのアカウントを持っていると、エディタにローカルの画像をD&Dでflickrに画像をアップしつつ、記事に画像を貼り込める。

flickr等でアップしている画像を一覧表示できるMedia Barというものがある。

Media Barを表示して画像をD&Dで、Flickrにアップロードできた。
複数画像をD&Dしたら連続的にアップロードできた。

普通のフォームにMedia BarからD&Dすると、imgタグが貼り込まれる。

flickrとココログを連動させるなんて考えていなかったけれど、これはかなり快適だ。


ただ、ブログエディタで改行を有効にする方法が無いようだなぁ。どうにかならないものか。
トラックバックもpingもできないみたいだから、内蔵ブログエディタを普段使いするかというと微妙かも。

|

2007.03.28

[Mac OS X] Mac OS X用2画面ファイラーXfind

Interfaceの5月号に付録のV850基板が気になって調べていたところ、Mac OS X用2画面ファイラーであるところの「Xfind」を「なんでも作っちゃう、かも。」さんで発見。

X68k育ちの自分としては、ファイル操作は2画面ファイラーに限ると思っているんですが、なかなかMac OS X上にそういったものを求める声が聞かれないので、いつしかそういうものを求めていること自体忘れていました。

PDA好きならhp 200LX用のX-Finderを想起することでしょう。
名前は似ていても、目指すところがちょうど逆のような関係で面白いですね。

hp 200LX用X-Finder→200LXにもMacOSのFinderのような環境を!!
Mac OS X用Xfind→Mac OS Xにも(Human68k/MS-DOS由来の)ファイラー文化を!!

|

2007.03.14

[Windows XP] Windows XPでもサスペンド/ハイバネーションから定期的にレジュームして(起きて)QMAIL3で自動メール送受信

Windows XP搭載のノートパソコンでも、サスペンドやハイバネーションから定期的にレジュームして、メールチェックなどしてくれたらとてもいいだろうな、ということでチャレンジしてみました。

結果、実現できたのでレポートしておきます。

僕のブログの中では、このエントリは大きな流れの中の一つになっています。関係するエントリは以下の通りです。

ZaurusでCronInetとMewによるメールの定期巡回
Windows Mobile QMAIL3でサスペンドから起きて自動定期巡回(メール送受信)
[Windows Mobile] Sigmarion III / jornada720でMortScriptを動かす

カバンの中のサスペンド(ハイバネーション)させたノートパソコンが、定期的に動き出して最新のメールを自動的に受け取ってくれるのです。ノートパソコンを開くと、移動中に受信したメールが出迎えてくれます。素晴らしきモバイル体験。

Windows XPでもsnak氏の超高性能男前メールソフト、QMAIL3を使った解説をしたいと思います。長い年月を経過してなお止まぬ氏の情熱には感服します。

もちろん、QMAIL3に限らず何でも可能でしょう。Meadow上のMewだってgnuclientを使えばいけると思います。

ただ、起動中でもコマンドラインオプションから送受信開始させることができ、ダイヤルアップ、切断を勝手にやってくれるQMAIL3は、このテーマにうってつけなのです。

ハイバネーション(休止状態)の抑制

僕のVAIO U3は、ハイバネーションからでもゾンビのように起き上がってタスクの実行が可能です。すべての機種がそうなら幸せなことですが、僕が知るノートパソコンには限りがあります。

ハイバネーションからのレジュームができない機種では、ハイバネーション移行の抑制をしないといけないかもしれません。

時間経過等でハイバネーションに移行しないよう、電源管理ユーティリティで設定します。
僕はPC/AT互換機はVAIOのノートしか持っていないので、専用ユーティリティ「Power Panel」の説明になりますが、以下のような設定になります。

Winxpqmail30008

アイドル状態で放置されても、ハイバネーション(休止状態)への移行はせず、サスペンドへの移行だけするようにします。

このユーティリティには、バッテリ残量がヤバいときだけハイバネーションへの移行をするという、誠に都合のいい設定項目があります。それだけは設定しておきました。

各社それぞれに独自のユーティリティが添付されているはずなので、それぞれのツールの作りに解釈してください。

もちろん、ハイバネーションへの移行をやめるということは、バッテリの消費が多くなる、ということを意味します。

「タスク」を使う

Windows XPではこのようなことを実現する場合、「スタートメニュー→すべてのプログラム→アクセサリ→システム ツール」とたどって出てくる「タスク」を使います。

Winxpqmail30007

タスクは定形処理を一定時間間隔を置いて繰り返させるのに使う一種のランチャです。タイマー付ランチャ。
UNIX環境には似たような働きをするcron(at?)というdaemonがありますね。

タスクを使いさえすればサスペンド/ハイバネーションからレジュームして(起きて)何かする、ということはできてしまいます。従って、そのことを指摘しつつ説明を終ってもいいのですが、タスクは細かい設定ができていい半面、高機能ゆえにちょっと分かりにくいかもしれません。
また、いくつか引っかかるポイントがあります。そこをかいくぐる説明をします。

QMAIL3でサスペンドから起きて自動巡回する設定例

「QMAIL3で30分に1回サスペンドからレジュームして(起きて)巡回し、巡回が終わったら再度サスペンドする」という内容の設定を例示してみます。

QMAIL3の設定

巡回名は、最初は英字のみのものを付けてください。

設定の要諦は、「巡回」を作ること。「アカウント」の「ダイヤルアップ」タブの「ネットワークに接続していないときにダイヤルアップ接続する」のラジオボタンを選択して、有効なダイヤルアップのエントリ名を選んでおくことです。

Winxpqmail30006

実行用VBScriptの用意

QMAIL3は、コマンドライン引数「-g "巡回名"」で巡回開始が可能です。
また、最新のNightly Buildでは、「-g」のみを引数として付けることで、すべてのアカウントの送受信をすることができるようになっています。
詳しくはQMAIL3の「コマンドライン」を参照してください。

QMAIL3が起動していない場合は、起動しつつ巡回を開始します。
既にQMAIL3が起動していた場合は、起動中のQMAIL3が巡回を開始します。

しかし、タスクに実行させるのは、QMAIL3そのものではまずいのです。
なぜなら、タスクは、実行したアプリケーションが終了するのを待ち続けるからです。
タスクに直接QMAIL3を実行させると、毎度QMAIL3を終了させなくてはならないことになってしまいます。

アプリケーションの終了を待たず、自身はすぐ終了する実行手段を探す必要があります。

一番身近なのは、cmd.exeの内部コマンドであるstartです。
startはShellに実行を委任した後、コマンド/アプリケーションの終了を待たずに自身は終了します。
startを使う場合、タスクへの登録は以下のようになります。

cmd.exe /c start c:\bin\q3u\q3u.exe "-g 'COURSE_NAME'"

これで基本的に問題無いのですが、cmd.exeの黒いウインドウがチラっと表示されるので格好悪い。

オンラインソフトを探せば同じ働きをするコマンドを見つけることができますが、ここはWSHのRun()を使うことにします。
Runは第3引数にfalseを指定すると、実行したアプリケーションの終了を待たなくなります。

実行時にPHSカードが差さっていなかったり、ネットワークに接続されていなかった場合に実行を抑制した方がきれいなので、処理を加えたVBScriptを用意しました。それが以下です。

「qmail3.vbs」をダウンロード

あちこちからもらってきたスクリプトのハリボテです。WMIとか言われてもよく分かりません。
QMAIL3のパスや巡回名は仮のものですので、自分の環境に合わせてテキストエディタで書き換えてください。

これをタスクに登録して、定期的に実行することになります。

スクリプトのタスクへの登録

タスクを起動し、タスクを新規登録します。僕はウィザードがうざいので「ファイル→新規→タスク」から作りました。

Winxpqmail30001

「QMAIL3」などの名前に変えて、プロパティを開きます。

Winxpqmail30002

タスクの新規登録ダイアログには、「タスク」、「スケジュール」、「設定」の三つのタブがあります。

まずは「タスク」から片付けます。

「実行するファイル名」には、前出のVBScriptを指定します。
「ログオンしている場合のみ実行する」、「実行する」のチェックボックスをONにします。

Winxpqmail30003

続いて「スケジュール」のタブ。
「タスクのスケジュール」は「日単位」、「開始時刻」は「9:00」、「タスクのスケジュール(日単位)」の「間隔」は「1」にします。
これで、毎日1日1回9:00からタスクが開始されます。
もちろん、これだけでは1日1回9時から実行されるだけなので不十分です。

Winxpqmail30004

「詳細設定」ボタンを押します。
「開始日」は過去の日付を。「終了日」のチェックボックスはOFFに。
「タスクを繰り返し実行」のチェックボックスをONに。
「間隔」は「30分」にします。
「継続時間」のラジオボタンをONにし、「24」時間を指定します。

Winxpqmail30009

最後に「設定」のタブ。
「タスクの継続時間を指定する」のチェックボックスをONにし、「1分」を指定します。
「アイドル時」のグループ内は全部OFFにします。

「電源の管理」グループ内では、「タスクの実行時にスリープを解除する」のチェックボックスのみONにします。

Winxpqmail30005

OKボタンを押して、登録を完了します。
登録したタスクを右クリックして、「タスクの実行」を選択すると、登録したタスクのテストができます。

これでタスクが正常に動作するか確認してください。

一時的に「間隔」を5分程度の短いものにして、テストのためにサスペンドし、実際にサスペンドから起き出して動作するか確認してみてください。

ハイバネーションからも起き出してタスクの実行ができたらもうけものです。

プラスアルファの情報

ダイヤルアップ、ダイヤルアップの切断機能を持たないアプリケーションの定期巡回を仕込む際、特に恣意的にダイヤルアップを切断する方法を探すことになるかもしれません。

Windows XPではコマンドラインからダイヤルアップのコントロールができるようになっていますので紹介します。

■ダイヤルアップの状況表示

rasdial

■ダイヤルアップ

rasdial DIAL_UP_NAME USER_NAME PASSWORD

■切断

rasdial DIAL_UP_NAME /D

DIAL_UP_NAMEは、実際には設定済みのエントリ名です。
USER_NAMEは、実際にはそのエントリに登録しているユーザ名です。改めて指定する必要があります。
PASSWORDは、実際にはそのユーザに呼応するパスワードです。平文で、改めて書く必要があります。

サスペンド、ハイバネーションへの移行を急ぎたい場合は、MSのsuspend.exeを使います。いまどきはACPIでしょうから、suspend -s 3(サスペンド)、suspend -s 4(ハイバネーション)といった感じで使うことになります。

あとがき

タスクでこんなことができることをもっと早く知っていれば、モバイルライフが充実したものになっていたでしょう。
みなさんも、QMAIL3にとどまらず、いろんなアプリケーション、スクリプトのサスペンド/ハイバネーションから起きての定期実行を試してみてください。

|

2006.12.24

京ぽん(WX310K / AH-3001V等)用式計算機 evacalc ver.3.2

手持ちの京ぽん2(WILLCOM WX310K)で使うためにJavaScriptで式計算機を作ってみました。
式計算機とは、「(10+20)*30」などという式を入力して、答えを得る計算機のことです。
cgiなどに依存しないため、ローカルに保存して使うことができます。

298928624_7

特徴

  • 式を入力すると、すぐ結果に反映
  • 入力した式は、次回起動時も覚えている
  • 式を五つ記憶可能。任意に記憶(Wボタン)、呼び出し(Rボタン)できる(増やすこともできます)
  • 結果をコピー可能(Pボタン)

インストール方法

↓このURLを端末にメールする。
evacalc ver.3.2
http://moyashi.air-nifty.com/evacalc.html

端末でアクセスし、保存する

端末にブックマークする
(ローカルファイルは普通にはブックマークできないので、以下のbookmarkletをブックマークユーティリティなどで登録する。よく分からなければ「京ぽん bookmarklet」でググる)
javascript:location.href='file://localhost/D:/DATA/evacalc.html';

作ったブックマークをマイオリジナルに登録する

動作について

JavaScriptが分かる方ならお分かりかと思いますが、フォームへの入力をeval()しているだけです。
よって、JavaScriptとして実行できるものなら、何でも書けちゃいます。

price = 1280
tax = price * 0.05
total = price + tax
"価格" + price + "円" + " 税" + tax + "円 合計" + total + "円"

などというものも実行できます。Mathオブジェクト、RegExpオブジェクトなんかももちろん使えますよ。

動作環境

京ぽん/京ぽん2(AH-3001V / WX310K)で動作確認しました。

JavaScriptとcookieを使っているので、それが有効な状態でないと正常に動きません。

フルブラウザなら、他の携帯でも動くかも? 味ぽんを持っているのでNetFrontで動作確認したかったんですが、白ROMのため、読ませる方法が無く断念。京ぽんなら、白ROMでも純正のものやKyopon File Utilityで書き込むことができるんですけどね。

京ぽんは画面が狭いので、htmlの冒頭に書いてあるisSmall変数をfalseからtrueに書き変えてから使います。
京ぽんのために結果表示を先頭に置いたのですが、画面が広く使える京ぽん2なら、長さが不定の結果表示欄は一番下に持っていった方がいいかも。

注意点

デフォルトでは200msごとに式を評価しています。「a = a + 200」などという式だと、どんどん値が増えていってしまいます。

document.write()を使うと画面が崩れて後戻りできなくなります。

免責

無保証です。

|

2006.11.23

変態キーボードKINESIS Ergo Elan MPCのオーバーホール

僕はKINESISのキーボードを2台使っている。1台は1998年ごろに買ったErgo Elan MPC(KB333 MPC)、もう1台は2004年ごろに買ったAdvantage USB

R0011412

これが何とも使い心地がいい。Advantage USBはたまにおかしくなるので抜き刺しが必要。Ergo Elan MPCの方はADBで使っていたが、最近はADBが付いたMacなぞ無いので、iMateでUSBに変換して使っている。

キーボードは奇麗に使う方だけど、Ergo Elan MPCはなぜだかこれまでメンテをしないできた。
8年ぐらいは使っているErgo Elan MPCの、初の全バラシ掃除を敢行。

Ergo Elan MPCもAdvantage USBも、キートップは垂直に引っぱると外れるタイプ。
引っこ抜き専用工具が付属しているのだけど、どっかに行ってしまったので、定規を差し込んでこじりながら外していった。

どんどん分解していく。筐体から外せるものは全部外して、水洗いしても問題無いボトムケースはザブザブ洗う。
トップケースは界面活性剤をプシュプシュ吹いて汚れを落として拭き取る。基板はブラシで埃を払う。

むむ、基板上にATMELの2-Wire Serial EEPROM(16K/2048 x 8)であるところのAT24C164を発見。
とすると、メインCPUはATMELのAVRである可能性がある。貼ってあったシールを剥がしてみると、やはり40ピンAVRのAT89S53であった。当時はフラッシュの書き換え保証回数は1,000回だったんだね。
何と、Ergo Elan MPCの心臓部はAVRであったか! 何だか大発見をしたような気分になる。

R0011408

トップ/ボトムケースのクリーニング、基板の埃落としを終え、組み直す。

R0011409

トップケースの黄ばみは、ちょっと取れない。

R0011410

茶軸タイプ?

R0011411

キートップは洗濯ネットの中に入れて、洗濯物といっしょに洗濯機で洗ってしまう。

R0011431

これが結構奇麗になる。先人の知恵は偉大。

R0011448

8年の汚れをスッキリとさせて、また気持ちよく使えるようになった。

|

2006.11.19

続デジタルガジェット音比べ 周波数特性計測(W-ZERO3[es]/iPod nano)

以前エントリした「デジタルガジェット音比べ 周波数特性計測(999円プレイヤーDN-2000/Zaurus SL-C3200/SigmarionIII/iPod等)」の続きをやってみました。

といっても、今回は自分の手持ちの機材でなく、くろぶろぐさんのエントリ「W-ZERO3 [es] の音質について」で公開されている、W-ZERO3[es]で再生したスイープ信号のWaveSpectraによる可視化です。

何でも、W-ZERO3一族はヘッドホン端子からの音のサンプリングレートが22kHzらしいのです。

それが本当なら、何とも残念。

というわけで、早速お借りしたデータを可視化してみたところ、やっぱりW-ZERO3[es]は22kHzのようですね。
理論値通り、11kHzぐらいまでしか出ていません。なるほど、聞けばひどい音です。

世の中うまくいかないものですね。

W-ZERO3[es]

11kHzぐらいまでしか出ていません。AMラジオのような音ですね。
MP3でも16kHzまでは帯域が確保されているので、5kHzも削られることになります。
サンプリングレートが半分ということは、単に帯域が削られるだけでなく、量子化ノイズが可聴域に乗ってくるということをも意味します。

1kHzのところにあるトゲは、スイープに入る前に入っている1kHzの信号です。

Wzero3es

iPod nano

比較対象として挙げられている、iPod nanoの特性はきっちり伸びてます。

Ipodnano

|

2006.09.28

デジタルガジェット音比べ 周波数特性計測(999円プレイヤーDN-2000/Zaurus SL-C3200/SigmarionIII/iPod等)

EDIROLのFA-66というIEEE1394オーディオインターフェイスとWaveSpectraを使って、手持ちのデジタルガジェットの周波数特性を計測してみた。

オーディオソースは、WaveGeneで生成した20Hz~20kHzのサイン波のスイープ信号をLAME3.96.1でデフォルトエンコードしたもの。LPFがかかっているので、16kHz以上はスパっと落ちている。

大体-40dbぐらいになるように入力しているが、これが正しい計測方法なのかは分からない。
サンプリングはASIOドライバ経由、24bit/48kHzで行なっている。

スイープ信号なので、ピークホールドの軌跡である赤い線を参照のこと。
この軌跡が水平一直線に近いほど、素直な特性ということがいえるだろう。

また、1kHz付近を通過する辺りで画像をキャプチャしている。
綺麗な山形が一つだけある形が理想的な状態。
それより低域、高域に余計な山がある場合、それはノイズであり、よろしくない。

自分は全く音響に(も)詳しくないけれども、WaveSpeatraが示す周波数特性のグラフは、聴感上の印象と一致していると感じる。

上海問屋 DN-2000

寸評:ひどい。ただ高域が出ていないだけかと思いきや、特性が不自然にギザギザだし、波形もキタナイ。改造する気失せた。するけど。高域が落ちている通り、聴感上もモコモコとした鈍い音。999円だもんね。
akitenさんの情報によると、エンファシスがかかっている状態の音だそうな。いにしえのFreshMusicでもそうだったなぁ。何でこの手のデバイスはそうなっちゃうんだろうね。

Freqdn2000

改造関係URL

MA8201(Data Sheet)
SA6333(Data Sheet)
上海問屋の激安990円MP3プレーヤーのインプレ・前編
上海問屋の激安990円MP3プレーヤーのインプレ+改造・後編
上海問屋の激安990円MP3プレーヤーのインプレ+改造・おまけ編
All About 'Bivouroku' -徒然@備忘録-

hp iPAQ h2210

寸評:おおむね良好だが、どことなくシャープさに欠ける。定在ノイズは無いが、ピンピンと高調波が散見できる。

Freqh2210

Apple iPod (4G/40GB)

寸評:特にこれといった破綻無し。専用プレイヤーのレゾンデートルを主張といったところか。1Gより音質の向上があったことを確認。

Freqipod4g

hp jornada720

寸評:ひどい。ホワイトノイズもひどい。より高域に突入すると見るに耐えない様になる。デティールに欠ける、遠い音。クロストークもひどく感じる。ありがとうございました。

Freqjornada720

SCE PSP

寸評:優秀な方。でも、16kHz以上の何も音が無いはずの領域を見ると、何か定在ノイズがある? 曲間のノイズ?

Freqpsp

NTT DoCoMo Sigmarion III

寸評:優秀な方。若干高調波が見られる。定在ノイズは無いっぽい。聴感上は悪くない。

Freqsigmarioniii

SHARP Zaurus SL-C3200

寸評:優秀。より高域でも破綻は無く、綺麗な針状のサイン波が移動していく様はほれぼれする。聴感上もいい音だと思う。定在ノイズはSigmarion IIIより多いか。

Freqsl3200

SHARP Zaurus SL-C700

寸評:優秀。SL-C3200とあまり傾向は変わらないが、SL-C3200より少しノイズっぽい? 16kHz以上の領域に見られるノイズは、Media Playerの曲間プチノイズ。

Freqslc700

10kHz対決

1kHz付近の特性を見たが、いいのと悪いのをピックアップして10kHz付近の特性も見てみたい。

上海問屋 DN-2000

寸評:ひどいねー。

Freqdn200010k

hp jornada720

寸評:圧巻。どれが本当の10kHzサイン波なんだか分かんない。お前ら本当にありがとうございました。

Freqjornada72010k

NTT DoCoMo Sigmarion III

寸評:優秀。SL-C3200と甲乙付け難い。

Freqsigmarioniii10k

SHARP Zaurus SL-C3200

寸評:優秀。Sigmarion IIIと甲乙付け難い。

Freqslc320010k

おまけ iPod(1G/5GB)

初代iPodが発掘されたので試してみよう。

1kHz

寸評:音がいまいちはっきりしなかったなあという印象を持っていたけど、やっぱり。

Freqipod1g

10kHz

寸評:10kHz付近はそれほどでもない。この辺りで救われている感じか。

Freqipod1g10k

|

2006.09.17

Mac OS X Tiger上にAVR-GCC環境を構築する@2006

WinAVRもいいけど、Mac OS XにもAVR-GCCの環境を構築してみよう。
現在使っているのはMac OS X Tiger(10.4.7)。
intel Macは持ってないので、PPC Mac上で試している。

スキルが無いくせして新しいもの好き。
だから、可能な限り、最新版で構築したい。ちなみに、

sudo gcc_select 3.3

としてGCC3.3で作業している。

参考サイト

Mac OS X で Atmel AVR マイクロコントローラのプログラムを作る
Programming ATMEL microprocessors on a Mac
AVR Microcontroller Programming on a Mac
Using AVR Microprocessors Under OS/X
Installing AVR Toolchain on MAC OS X

今は、binutilsにしろgccにしろ、本家本元がAVRに対応しているので、昔のように特別な作業をする必要無し。
binutils、gcc、avr-libc、uispの最新版を入手してビルドすればいいだけ。

基本のインストール方法はAVR LibCのマニュアルに書いてある。

http://www.nongnu.org/avr-libc/user-manual/index.html
http://www11.ocn.ne.jp/~akibow/AVR-LibC_1.2.3J/

GNU Binutils、GCC、AVR LibCの順でビルドする。

GNU Binutils(アセンブラ、リンカ等)

http://www.gnu.org/software/binutils/

最新のリリース版をダウンロードしてくる。CVS先端を試してみたけど、現時点のものはうまくビルドできなかった。

tar xvzf binutils-2.17.tar.gz
cd binutils-2.17
mkdir obj-avr
cd obj-avr
../configure --target=avr --program-prefix='avr-' --disable-nls; make; sudo make install

GCC, the GNU Compiler Collection(Cコンパイラ)

http://gcc.gnu.org/

GCC4.2のsnapshotを落としてきた。snapshot版はMPUのサポートがリリース版より厚い。

http://gcc.gnu.org/mirrors.html

上記のミラーから適当なftpサーバを探してダウンロードする。

wget ftp://ftp.iij.ad.jp/pub/gcc/snapshots/LATEST-4.2/gcc-core-4.2-20060916.tar.bz2
tar xvjf gcc-core-4.2-20060916.tar.bz2
cd gcc-4.2-20060916
mkdir obj-avr
cd obj-avr

../configure --target=avr --program-prefix='avr-' --enable-languages=c --with-dwarf2 --disable-nls --disable-libssp; make; sudo make install

--disable-libsspを指定しないとダメなので注意。

AVR LibC(Cランタイムライブラリ)

http://www.nongnu.org/avr-libc/

これは、AVR LibCのマニュアルが勧める通りmkdir obj-avr、cd obj-avrしてからconfigureしようとすると失敗したので、カレントディレクトリでconfigureしている。

CVS先端ですんなりビルドできたので、それを使った。

cvs -z3 -d:pserver:anonymous@cvs.savannah.nongnu.org:/sources/avr-libc login
cvs -z3 -d:pserver:anonymous@cvs.savannah.nongnu.org:/sources/avr-libc co avr-libc
cd avr-libc
cvs update -dP
./bootstrap
./configure --build=`./config.guess` --host=avr; make; sudo make install

uisp(ユニバーサルインシステムプログラマ)

http://savannah.nongnu.org/projects/uisp/

tar xvzf uisp-20050207.tar.gz
cd uisp-20050207
mkdir obj-avr
cd obj-avr
../configure; make; sudo make install

AVR-GDB

役に立つかどうか分からないので試してない。
AVR LibCのインストールマニュアルに解説あり。

スクラッチから環境を作る際の注意点

上記の手順だけではサポートデバイスが不十分かもしれない。その場合はパッチを当てる必要があるそうだ。

http://www7a.biglobe.ne.jp/~attlee/avr-jp-wiki/wiki.cgi?page=AVR-LibC

USB Serial変換アダプタとuisp関係

手持ちのUSB Serial変換アダプタは、秋月通商のUSB-RS232変換ケーブルとKeyspanのUSA-19HS。
秋月通商のUSB-RS232変換ケーブルの中の人はATEN社のUC-232Aで、Mac OS X用のドライバは以下にあった。

http://www.aten.com.tw/download/download.php?pid=20050824161341006&type=driver#showResult

KeyspanのUSA-19HSは、現在ドライバーがデッドリンクになっていて、どうしたものかと思ったら以下にあった。

http://www.keyspan.com/downloads-files/usa/UniversalBinary/

ドライバをインストールし、接続すると/dev/tty.xxxxにデバイスが現れる。

使っているのは、MorosansoftさんのAVRISP互換ライタ。とても簡単に作れ、AVR Studioで認識するし、USB Serial変換アダプタ経由でも使えるので便利。マイコンをいじるのはほぼ初めてで、ライタを自作したのも初めてなので客観的評価はできないが、とても素晴らしいライタに思える。AVR Studioからはちゃんと使えているが、パフォーマンスのいい新しいプロトコルのみの対応。よって、古いプロトコルを使うuispからは使えないとのこと。

uispから書き込むには、古いプロトコルにも対応し、なおかつUSB Serial変換アダプタ経由でも使えるSTK500のようなライタが必要のようだ。

その後、MorosanさんのAVRISP互換ライタは、avrdudeでなら使えるという情報をsenshuさんからいただいた。
AT90S2313のようなレガシーデバイスの場合はエラーが出ていたが、その後のMorosanさんの対応作業のおかげで、avrdudeから、レガシーデバイスであっても問題無く書き込むことができるようになった。
AVRISP互換ライタ対応済みavrdudeのMac OS X用のバイナリは配布していないが、avrdude5.1のソースをもらってきて、Morosanさんのサイトに記載されている変更をし、ビルドすればOK。

AVR Studio 4.12 Service Pack 4で使おうとすると警告メッセージが出ていたが、新ファームで問題無くなった。なおかつ、ターミナルソフト経由で設定変更が可能になっている。EEPROMにバージョン番号を保存してしまうんだね。カコイイ。

MorosanさんのAVRISP互換ライタは、(いろいろ前提条件があるけれども)Mac OS Xユーザにも有用な選択肢になった。
Morosanさんsenshuさん、本当にお世話になりました。

最近のAVR-GCCの仕様変更

最近(といっても、ここ2年ぐらいの話だと思うが)のAVR-GCCは、結構仕様が変わっているらしく、昔のソースはそのままではほぼ動かない。
とても頻用するであろうoutp等が使えなくなくなったことに始まり、少なくとも以下のような変更がある。

outp(PORT, val) は PORT = val に

BV() は _BV() に

sbi(PORT, bit) は PORT |= _BV(bit) に

また、avr/signal.hは、avr/interrupt.hに統合している。
その他、いっぱい仕様変更はあると思われる。

ちなみに、GCC3.x用と思われるMakefileをどこかのサイトから頂戴して流用しようとしたら、コンパイル、hexの生成まですんなりできるものの、うまく動かなかったので注意。原因がどこにあったか、根性が無いので追及しておらず。


objcopyの問題

avr-objcopy -j .eeprom --change-section-lma .eeprom=0 -O ihex main.elf main_eeprom.hex
avr-objcopy: there are no sections to be copied!
avr-objcopy: --change-section-lma .eeprom=0x00000000 never used
make: *** [main_eeprom.hex] Error 1

こんなようなエラーに遭遇するかもしれない。これは、binutilsのobjcopy.cの以下の行のFALSEをTRUEにすると回避できるそうだ。

if (bfd_count_sections (obfd) == 0)
{
non_fatal (_("there are no sections to be copied!"));
return FALSE;
}

情報元

参考サイト

テスト

PORTBにLED付けたAT90S2313でテスト。

ダウンロード at90s2313test.c (0.7K)

適当にソース書く。

avr-gcc -mmcu=at90s2313 main.c -o main.o; avr-objcopy -O ihex main.o main.hex

出来たmain.hexをプログラムして動作すればOK。
どのバージョンのことだよオマエ、と思うことがよくあるので、念のためバージョンも併記しておく。

iMacG5:~/workshop/avr/gcctest $ avr-gcc -v
Using built-in specs.
Target: avr
Configured with: ../configure --target=avr --program-prefix=avr- --enable-languages=c --disable-nls --disable-libssp
Thread model: single
gcc version 4.2.0 20060916 (experimental)

既成の環境を使う

フルスクラッチしなきゃいけないわけじゃない。
ここにGCC3.xの環境だけど、バイナリあり。

Using AVR Microprocessors Under OS/X

Darwinportsにもバイナリがある。バージョンは本日時点のもの。

http://darwinports.com/

avr-gcc (4.0.2)
avr-libc (1.2.5)
avr-binutils (2.16.1)
uisp (20050207)

Finkにもバイナリがあった。intelバイナリもあった。

http://fink.sourceforge.net/index.php?phpLang=en

avr-gcc (3.3.2)
avr-libc (1.0.4)
avr-binutils (2.14)
uisp (20050207)

Source Package

DebianにSource Packageあり。バージョンは本日時点のもの。
適度に枯れたのがよければこれを使えばいいかも。

http://packages.qa.debian.org/g/gcc-avr.html (4.1.0)
http://packages.qa.debian.org/a/avr-libc.html (1.4.4)
http://packages.qa.debian.org/b/binutils-avr.html (2.16.1)
http://packages.qa.debian.org/u/uisp.html

|