midohajiフォト

2012-08-12

RaspberryPiでコンパイルとかせずにWifiドングルを使う(US-GWMicroNとか、ralinkの)

15:08

 どうも、こんにちは

 もう少し頻繁に書こう、そう思ったりしなかったり。

 

 さて先日、RaspberryPiが届いたのですが、

 USBx2と、HDMI、100MbpsのLANしかインターフェースがありません。

 自宅サーバならぬ外で使うサーバ的に触ってみたかったので、彼にはどうしても装備してほしかったものがあります。

 無線LAN

 家にあるのは、PlanexのUS-GW MicroNというものですが、こいつを装備してみたいと思います。

 ralink製のチップっぽいです。2870っぽい。

 とりあえずRaspberryPiに挿してみると、なんととりあえず認識はされてます。

 この調子で、Ubuntuで使う為にやった設定と同じ事をしてみようかと。

 大量にsudo叩くのもあれなんで、まずsudo suしておきます。ほんとはこういうのはよろしくないのかな。

 まず、aptで、firmware-ralinkと、wireless-toolsを入れます

apt-get upate
apt-get instal firmware-ralink wireless-tools

 多分、最新が入ってるぜ、と言われますが、まぁ一応確認。

 そんなら、今モジュールは読み込まれてるのかな、と、lsmod叩きますが入ってないです。

 なので、起動時に読み込まれるように、/etc/modules に、追記します。

#vi /etc/modules
# /etc/modules: kernel modules to load at boot time.
#
# This file contains the names of kernel modules that should be loaded
# at boot time, one per line. Lines beginning with "#" are ignored.
# Parameters can be specified after the module name.

snd-bcm2835
rt2800usb

 こんな感じで、最終行を追加します。

 今度は

 /etc/modprobe.d/gw-usmicron.conf とかなんかファイルを作って、

 中身を以下のようにします。

install rt2800usb /sbin/modprobe --ignore-install rt2800usb; /bin/echo "2019 ed14" > /sys/bus/usb/drivers/rt2800usb/new_id

 echoでやってもらっても、viで編集してもらっても良いです。2019 ed14はお持ちのドングルに合わせてください(lsusbの結果です)

 出来たらまずリブート

 その後、再度立ち上がったら、またsudo suしてrootになってから、

modprobe rt2800usb

 これで、おそらくもう使えます。

 lsmodの結果は以下のようになってると思います。

Module                  Size  Used by
aes_generic            36429  1 
arc4                    1319  2 
rt2800usb              12510  0 
rt2800lib              49181  1 rt2800usb
crc_ccitt               1541  1 rt2800lib
rt2x00usb              12077  1 rt2800usb
rt2x00lib              43890  3 rt2x00usb,rt2800lib,rt2800usb
mac80211              253889  3 rt2x00lib,rt2x00usb,rt2800lib
cfg80211              180459  2 mac80211,rt2x00lib
snd_bcm2835            21485  0 
snd_pcm                82208  1 snd_bcm2835
snd_seq                59808  0 
snd_timer              21905  2 snd_seq,snd_pcm
snd_seq_device          6920  1 snd_seq
snd                    57668  5 snd_seq_device,snd_timer,snd_seq,snd_pcm,snd_bcm2835
snd_page_alloc          5383  1 snd_pcm
evdev                   8922  2

 ※使えなかったら、再度リブートしてみてください。

 ifconfig叩いてみましょう。

 :
 :
wlan0     Link encap:イーサネット  ハードウェアアドレス 00:xx:xx:xx:xx:xx 
          UP BROADCAST MULTICAST  MTU:1500  メトリック:1
          RXパケット:0 エラー:0 損失:0 オーバラン:0 フレーム:0
          TXパケット:0 エラー:0 損失:0 オーバラン:0 キャリア:0
      衝突(Collisions):0 TXキュー長:1000 
          RXバイト:0 (0.0 B)  TXバイト:0 (0.0 B)

 なんて感じで出来てると思います。

 

 後は、僕はコマンドラインから無線LANの設定をするのが面倒なんで、wicdで設定しちゃいます。

apt-get install wicd

 でインストールしたあと、Xを起動。

 メニューで言うと、インターネットの下に「Wicd Network Manager」があります。

 コレを起動すると、Windowsでよく見るような、ネットワーク接続のマネージャ的なのが出てくると思います。

 あとは、これで設定しちゃえば、普通に使えます。

2012-03-09

arrows zのルート奪取とソニエリLiveView

01:33

どうも。お久しぶりです。

今回は話が話なので、わかる人のみに向けです。

自己責任が取れない人は真似しないでください。

最近、ひょんなことからソニエリLiveViewなんかを手に入れまして。

腕時計型のガジェットで、Android端末と繋いで色々しちゃう、新着メールなんかも見ちゃうというスグレモノです。

ですがこいつ、一つ難点がありまして。

Bluetoothなんで、すぐに切断されます。

一応切断されたら、右側のボタンを押すことによって再リンクするんですが、こいつがたちがわるい、接続するたびに「ペア設定リクエスト」なんてAndroid側に出てきて、いちいちタップしないと繋がらないんですね。

最初は我慢して使ってたんですが、どうも、腕時計で確認したいのにAndroidを出さないと駄目だという本末転倒的なことにイライラしてきて、何でか確認してみました。

色々なサイトを見ると、AndroidのGingerbredからこうなるとか、ソニエリ端末ではまともに動くとかそういう情報とともに、原因が。

/data/misc/bluetoothd/yo:ur:de:vi:ce:ad/linkkeys

の中の記述が

li:ve:vi:ew:ad:dr xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 4 -1

となってるんですね。これはおかしい。本来は、

li:ve:vi:ew:ad:dr xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 0 4

でないといけない。

という事で、root取得から書き換えまで、解説込みで行こうと思います。

まず、Android SDKが要ります。適当にインストールして下さい。

その後、ArrowsZのADBドライバ入れて、adb shellできるようにして下さい。これが大前提

adb出来てるものとして話を進めます。

PCと接続跡、adb shellでシェルへ。

この段階では$です。一般ユーザです。

で、

cd /data/local

をタイプ。

lsで、motion_activemass02.dbが存在することを確認してから、あれば

mv motion_activemass02.db motion_activemass02.db-

してください。自分の環境にはありました。つまりこれで、退避させます。

次に、

ln -s /data/local.prop motion_activemass02.db

をタイプ。シンボリックリンク作成。つまり、motion_activemass02.dbへの書き込みは/data/local.propへの書き込みとするわけです。

こうすることによって、motion_activemass02.dbを書くとき、その持ち主が、/data/local.propを作ってくれるわけですね。で、こいつはroot:rootでさらに、666なのです。素晴らしい。

この状態で、設定→自分からだ設定→ウォーキング/Exカウンタ利用設定から「歩数計利用」にチェック付けて、少し歩きます。実際はチェックつけるだけでいいかもしれないです。で、チェック外す。

この間、ADBは閉じずにokです。

そうすると、なんと、/data/local.propが出来てると思います。root:root 666で。

こうすればしめたものです。

必要があれば、mv motion_activemass02.db- motion_activemass02.db で、退避したものを戻します。

次に、

echo ro.kernel.qemu=1 > /data/local.prop

で、/data/local.propに書き込みます。

これは、adbdで接続されるときにrootになりますよという印。

ここでパーミッションで蹴られなければ、ctrl+Cでadb shell抜けてから、

adb reboot

で端末を再起動します。

瞬時に、DOS窓やらターミナルから、

adb wait-for-device

を叩いておきます。

繋がった瞬間(コマンド抜けた瞬間)、adb shell rm /data/local.prop

を叩いてください。こいつが残ってるとそれなりに面倒なことになります。

欲を言えば、MacやらLinuxターミナルから

adb wait-for-device & adb shell rm /data/local.prop

をたたいておけば万全ですね。

で、このあと、adb shellを叩くと

#

で、特権になってると思います。おめでとう。

su入れたい人は、ここで入れてくださいい。ただ、arrowsは/usr/xbin/suがあると起動しないので、su以外のファイル名にしてください。

次にLiveViewの設定。

cd /data/misc/bluetoothd

で、ディレクトリを移動して、

ls

を叩いてください。

あなたの端末のBluetoothMACアドレスで、

yo:ur:de:vi:ce:ad

があるはずです。

そのまま、

cat /data/misc/bluetoothd/yo:ur:de:vi:ce:ad/linkkeys

を叩くと、

li:ve:vi:ew:ad:dr xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 4 -1

と出るはずです。出なければ、ちゃんとAndroidLiveViewが繋がってるか再確認してから、再度頭から手順を繰り返してください

(おそらくこの状態で設定のBluetoothは開けないはずです)

出れば、表示されたものを「li:ve:vi:ew:ad:dr xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx」までコピーし、

echo li:ve:vi:ew:ad:dr xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 0 4 > cat /data/misc/bluetoothd/yo:ur:de:vi:ce:ad/linkkeys

と叩いて、adb shellを抜けて、

adb reboot

で、すべてがうまくいくと思います。

何の保障もしませんが、今のところ全アップデートかけてもこれで動いてます。

2009-11-18

PSPでお手軽オフラインブラウズ 解説!

| 21:11

ちょっと修正しました。

早い話が通勤PSPの代替物みたいな感じでもあります。

あとローカルのアーカイブを持ち歩きたいとか。

ドキュメントとか。

今回から差分のみコピーするような感じにしてあります。

面倒な方用に、ファイルを用意してあるので、ソースは飛ばしてくださってかまいません。

ソースの後に、実際の使い方を画像と共に掲載しました。


'オブジェクトの作成
Set objShell = WScript.CreateObject("WScript.Shell")
Set colEnv = objShell.Environment("Process")

'コピー元のディレクトリを選ぶ
rootpath = colEnv("HOMEDRIVE")&colEnv("HOMEPATH")&"\Application Data\Mozilla\Firefox\Profiles"

'プロファイルの一番上のディレクトリ使用
'※自分で修正できる方は適当に直して下さい。
dataSourceDir= GetProfilefolder(rootpath)
dataSourceDir=dataSourceDir&"\ScrapBook\data"

'拾って歩く作業の開始

Set fs = WScript.CreateObject("Scripting.FileSystemObject")
Set f = fs.GetFolder(dataSourceDir)


dim out
out = ""
For Each subf in f.subfolders
  'ファイル名を決める。
  fn = subf&"\index.dat"
  id=""
  title=""
  icon=""
  buf=""
  'データはUTF-8なのでとりあえずShiftJISに変換。
  Set fso = CreateObject("Scripting.FileSystemObject")
  set str = WScript.CreateObject("adodb.stream")
  str.type = 2
  str.charset = "utf-8"
  str.open
  str.loadFromFile(fn)
  txt = str.readText()
  str.close
  str.open
  str.position = 0
  str.charset = "Shift-Jis"
  str.writeText(txt)
  str.position = 0
  '改行でぶった切って一行ずつ処理。
  lines=Split(txt,Chr(10))
  for i=0 to ubound(lines)-1
    buf=lines(i)
    if buf<>"" then
      'key[tab]valueなので、分割
      pos = instrB(buf,chr(9))
      key=leftB(buf,pos-1)
      val=midB(buf,pos+2)
      if key="title" then title=val
      if key="id" then id=val
      if key="icon" then icon=val
    end if
    
  next

  '出力データを作成。
  '※レイアウトとか変えたい人はここで変えてください。
  out=out&"<a href='data/"&id&"/index.html'>"
  out=out&"<img src='data/"&id&"/"&icon&"' border=0>"&title&"</a><br>"

next

with nothing
  Set objShell = CreateObject("Shell.Application")
  Set objFolder = objShell.BrowseForFolder( _
    0, "保存先フォルダを選択:", 0, "ssfDeskTop")

  If objFolder Is nothing Then

    MsgBox("インデックスを保存するフォルダを選択して下さい")

  Else
    pathFolder = objFolder.Items().Item().Path
    if right(pathFolder,1)="\" then pathFolder=Left(pathFolder,len(pathfolder)-1)
    Set objFolder = nothing
  End If

  if pathFolder<>"" then
    out = "<html><head><title>PSPSCRAPBOOKS</title></head><body>" & out & "</body></html>"
    set fs = WScript.CreateObject("Scripting.FileSystemObject")
    set stream = fs.CreateTextFile(pathFolder&"\i.html")
 
    stream.Write(out)
    stream.Close()
    
    'データディレクトリの作成
    if(not fs.FolderExists(pathFolder&"\data")) then fs.CreateFolder(pathFolder&"\data")

    'まず、データディレクトリにあって、元ディレクトリにないディレクトリ(削除されたもの)を、
    'データディレクトリから削除する
    Set fs = WScript.CreateObject("Scripting.FileSystemObject")
    Set f = fs.GetFolder(pathFolder&"\data")

    '回ってー削除。
    For Each subf In f.SubFolders
      Set objf = fs.GetFolder(subf)
      if(not fs.FolderExists(dataSourceDir&"\"&objf.Name)) then
        fs.DeleteFolder subf,true
      end if
    Next
    
    '更新されたものだけコピー
    Set objShell = CreateObject("Shell.Application")
    'set dest = objShell.NameSpace(pathFolder)
    'set from = fs.GetFolder(dataSourceDir)
    'dest.CopyHere dataSourceDir, &H10
    argument = "xcopy " & chr(34) & dataSourceDir & chr(34) & " " & chr(34) &  pathFolder&"\data" & chr(34) & " /d /e /c /i /h /k /y"
    'msgbox argument
    
    Set WshShell = CreateObject("WScript.Shell")    
    WshShell.run  argument, 1, true
    msgbox "完了"
  end if
end with

function GetProfilefolder(path)

Dim objFS, objFolder

Set fs = WScript.CreateObject("Scripting.FileSystemObject")
Set f = fs.GetFolder(path)

'すべてのサブフォルダを回る
For Each subf In f.SubFolders
    if instr(subf,".default")>=1 then GetProfilefolder=subf
Next

end function

これをですね、使う方法を今日は丁寧に書いたりしようと思います。

とりあえず上をコピペして保存、又はPSPScrap.vbsを右クリック→保存してどこかにおいておきます。

で、最初に、FireFoxにScrapBookをインストールします。

ScrapBookはこちらから……ScrapBook

ここから

f:id:midohaji:20091118210943j:image

ここをクリックで

f:id:midohaji:20091118210944j:image

インストール

f:id:midohaji:20091118210945j:image


FireFoxを再起動するように言われるので言われるがままに。

すると、FireFoxのメニューにScrapBookというのが増えるので、そのメニューからサイドバーに表示、をクリックして下さい。最初からサイドバーに出てたらそのままでいいです。

出ることを確認したら、後は好きなページを「ScrapBook」→「ページの取り込み」で取り込んでいきます。

そのページだけじゃなくて、そのページと、そのページからリンクされているページ、みたいなのは「ScrapBook」→「ページの詳細な取り込み」で出来ます。

そんなこんなで、右側にある程度溜まったら、準備完了。

PSPをPCにつなぐか、メモステをカードリーダに差し込んで、さっきのPSPScrap.vbsをダブルクリックしてください。警告は大丈夫です。

保存先を聞かれるのでリムーバブルディスク(メモステ)に適当に打ちやすそうなフォルダを作って、そこを選択。例えば1とか。

f:id:midohaji:20091118210946j:image

PSPはこの状態。

f:id:midohaji:20091118210949j:image

OKを押すと、黒い画面が出ますが、驚かずに待ちましょう。

量が多いとちょっと時間がかかります。

f:id:midohaji:20091118210947j:image


味気ない「完了」が出たら、OKです。PSPのUSBモードを終了するか、メモステを取り出して、次へ。

PSPでブラウザを起動し、「file://ms0:/(さっき指定したフォルダ)/i.html」にアクセスしてみると、

f:id:midohaji:20091118210950j:image

f:id:midohaji:20091118210951j:image

こんな風に出ます。

このページをお気に入りに入れておいてください。

後は好きにオフラインブラウズを楽しめます。

あと、ScrapBookは自動で更新しません。自分で、「右クリック」→「ツール」→「再取り込み」をする必要があります。

f:id:midohaji:20091118210948j:image

再取り込み後、再度PSPScrap.vbsを実行し、同じフォルダを指定すると、差分が転送されます。

お気に入りに入れたPSPSCRAPが更新されてますので、アクセス。

朝ニュースをまとめて再取り込みして、電車の中で読めます。

地下鉄通勤なので便利!

あとついでに。

iPhoneで、GoodReaderとか持ってる人は、適当にローカルに保存して、i.htmlのエンコードをUTF-8に変換して転送したら、iPhoneでもオフラインブラウズできます。こっちはオマケなのでいずれ……

f:id:midohaji:20091118210952p:image

hakuanhakuan 2009/11/19 23:18 窓壺管理人のhakuanです。コメントありがとうございました。

私がサイトで紹介した方法よりもずいぶん楽でカスタム性もあるので感動しました。現在、都合によりブログが更新できない状況ですが、時間ができ次第こちらもご紹介しようかと思います。その時は改めてご連絡します。

まだ実際にPSPでは試していませんが、とりあえずFirefoxにScrapBookを追加してみました。とても便利なアドオンで、普段も十分使えそうです。もうGetHTMLの出番がありませんw

ちょうど私もiPhoneユーザーなのでうれしいオマケです。

midohajimidohaji 2009/11/20 20:22 >>hakuanさん
こちらこそ突然失礼いたしました。
こちらにもコメントありがとうございます。

案外このご時勢需要があるのはオマケの方かなーとか思ったりしますw
我が家で完全に音楽プレイヤーに成り下がっているiPodTouchを蘇らせるチャンスかもしれないですw

2009-11-16

モバイル機器(PSP)でお手軽オフラインブラウズ

| 01:59

どうも。お久しぶりです。

最近、ひょんな事からいい物を頂いてしまい、活用法を色々と考えておりました。

これでライフハッカーの仲間入りかもしれません。

PSPとやらはどうやら、ローカルに保存したHTMLを読むことが出来るらしいです。

ただ、アクセスが面倒だったり、いちいちMHTに変換したりとか、色々と面倒な感じ。

と、言うことで。

普段僕が使っているScrapBookというFireFoxアドオンと適当にでっち上げたスクリプトで、スクラップしてあるローカルサイトをメモリースティックに転送してインデックスを張るまでのことをしてみようというそんな計画。

ソースはこんなのです。

最近の人はexeはおk、スクリプトは危ないみたいな風潮があるんで、あえて時代に逆らってスクリプトです。

中身が見えるので安心。

もしperl版やらRuby版が要るのでしたらコメントを下さい。

※新しいバージョンがあります!→PSPでお手軽オフラインブラウズ 解説!


'オブジェクトの作成
Set objShell = WScript.CreateObject("WScript.Shell")
Set colEnv = objShell.Environment("Process")

'コピー元のディレクトリを選ぶ
rootpath = colEnv("HOMEDRIVE")&colEnv("HOMEPATH")&"\Application Data\Mozilla\Firefox\Profiles"

'プロファイルの一番上のディレクトリ使用
'※自分で修正できる方は適当に直して下さい。
dataSourceDir= GetProfilefolder(rootpath)
dataSourceDir=dataSourceDir&"\ScrapBook\data"

'拾って歩く作業の開始

Set fs = WScript.CreateObject("Scripting.FileSystemObject")
Set f = fs.GetFolder(dataSourceDir)


dim out
out = ""
For Each subf in f.subfolders
  'ファイル名を決める。
  fn = subf&"\index.dat"
  id=""
  title=""
  icon=""
  buf=""
  'データはUTF-8なのでとりあえずShiftJISに変換。
  Set fso = CreateObject("Scripting.FileSystemObject")
  set str = WScript.CreateObject("adodb.stream")
  str.type = 2
  str.charset = "utf-8"
  str.open
  str.loadFromFile(fn)
  txt = str.readText()
  str.close
  str.open
  str.position = 0
  str.charset = "Shift-Jis"
  str.writeText(txt)
  str.position = 0
  '改行でぶった切って一行ずつ処理。
  lines=Split(txt,Chr(10))
  for i=0 to ubound(lines)-1
    buf=lines(i)
    if buf<>"" then
      'key[tab]valueなので、分割
      pos = instrB(buf,chr(9))
      key=leftB(buf,pos-1)
      val=midB(buf,pos+2)
      if key="title" then title=val
      if key="id" then id=val
      if key="icon" then icon=val
    end if
    
  next

  '出力データを作成。
  '※レイアウトとか変えたい人はここで変えてください。
  out=out&"<a href='data/"&id&"/index.html'>"
  out=out&"<img src='data/"&id&"/"&icon&"' border=0>"&title&"</a><br>"

next 

with nothing 
  Set objShell = CreateObject("Shell.Application")
  Set objFolder = objShell.BrowseForFolder( _
    0, "保存先フォルダを選択:", 0, "ssfDeskTop")

  If objFolder Is nothing Then

    MsgBox("インデックスを保存するフォルダを選択して下さい")

  Else
    pathFolder = objFolder.Items().Item().Path
    if right(pathFolder,1)="\" then pathFolder=Left(pathFolder,len(pathfolder)-1)
    Set objFolder = nothing
  End If

  if pathFolder<>"" then
    out = "<html><head><title>PSPSCRAPBOOKS</title></head><body>" & out & "</body></html>"
    set fs = WScript.CreateObject("Scripting.FileSystemObject")
    set stream = fs.CreateTextFile(pathFolder&"\i.html")
 
    stream.Write(out)
    stream.Close()
    if( fs.FolderExists(pathFolder&"\data")) then fs.DeleteFolder pathFolder&"\data",true
    fs.CreateFolder(pathFolder&"\data")
    Set objShell = CreateObject("Shell.Application") 
    set dest = objShell.NameSpace(pathFolder)
    set from = fs.GetFolder(dataSourceDir)
    dest.CopyHere dataSourceDir, &H10 

    msgbox "完了"
  end if 
end with

function GetProfilefolder(path)

Dim objFS, objFolder

Set fs = WScript.CreateObject("Scripting.FileSystemObject")
Set f = fs.GetFolder(path)

'すべてのサブフォルダを回る
For Each subf In f.SubFolders
    if instr(subf,".default")>=1 then GetProfilefolder=subf
Next

end function

メモ帳で書いたので文字の大文字小文字がバラバラとかそういうのは無しで。

コピペしてPSPScrap.vbsとでも保存してください。

※使い方

1.まずScrapBookで好きなサイトを収集します。

2.先ほどのPSPScrap.vbsを実行します。ダブルクリックで概ねいけます。

3.ほどなく保存先ディレクトリを選ぶ画面が出るので、PSPをつないでPSPのメモステの、ルートに近いところ(例えば、H:\wとか)を選んで保存、とクリックしてください。自動的にPSPに入ります。

 ※PSPのメモステ、ランダムアクセスおせーよ、っていう人は、好きな場所に書き出してFFCなどでコピーしてください。

4.PSPのブラウザで、「file://ms0:/w/i.html」にアクセスしてください。味気ないトップが見れます。

後はそのページをブックマークしておけば、新しくスクラップを増やしても、転送を行う時に同じ場所に保存するようにしておけば面倒が掛からないような感じで便利に使えると思います。