2014年3月18日火曜日

[python]pip 1.5.4にアップデートしたらutf-8エラーが出た。 for windows

バグFixついでにpipを1.0.1から1.5.4へアップデートしたら無慈悲なエラーが吐き出された。
しかも赤い文字でエラーまで出る始末。。


 Traceback (most recent call last):
  File "C:\traclight\python\Scripts\pip-script.py", line 8, in
    load_entry_point('pip==1.5.4', 'console_scripts', 'pip')()
  File "C:\TracLight\python\lib\site-packages\pip-1.5.4-py2.6.egg\pip\__init__.p
y", line 185, in main
    return command.main(cmd_args)
  File "C:\TracLight\python\lib\site-packages\pip-1.5.4-py2.6.egg\pip\basecomman
d.py", line 161, in main
    text = '\n'.join(complete_log)
  File "C:\TracLight\python\Lib\encodings\utf_8.py", line 16, in decode
    return codecs.utf_8_decode(input, errors, True)
UnicodeDecodeError: 'utf8' codec can't decode byte 0x82 in position 34: invalid
start byte



pythonを扱う上では文字コードは毎回の事エラーが出るし、そこまで驚かないけど、
英語圏の人は文字コード関係なしなんだろうなーと思ってしまう。


治す取っ掛かりは、エラーの出た個所を追っていくと文字データに2バイト文字が含まっている変数が見つかるので、 Windows環境であればCP932でdecodeしてあげれば良い。

そんなわけで探していくと、

download.py 472行目付近
temp_dirにアカウント名(2バイト文字)が入っていたので、さっそくdecodeデコード。


def unpack_http_url(link, location, download_cache, download_dir=None,
                    session=None):
    if session is None:
        session = PipSession()

    temp_dir = tempfile.mkdtemp('-unpack', 'pip-')
    try:
        temp_dir = temp_dir.decode('cp932')
    except:
        pass


asciiやutf-8はそのままでいいし、eucは使わないし、
そんなやっつけ仕事で動く程度の修正して解決。

2013年11月8日金曜日

IIS環境設定のバックアップとリストア

IIS構成マネージャーの設定をバックアップ・リストアしたい場合のメモ。

・バックアップ
管理者権限でコマンドプロンプトを起動して、

 %systemroot%\system32\inetsrv\APPCMD backup "バックアップファイル名"

・リストア
  %systemroot%\system32\inetsrv\APPCMD restore backup "バックアップファイル名"


 ・バックアップデータが保存されているフォルダ

 %systemroot%\system32\inetsrv\backup\



バッチ処理で
 バックアップフォルダにバックアップファイルをコピーして、
 リストア処理を実行すれば、
 インストーラーによるIIS設定の自動化が可能になる。


2013年11月6日水曜日

.net上の大きな罠

これは致命的だと思ったのが、ガベージコレクション機能である。
最近になって大きなアプリケーションを作る機会があって実際に使ってみると、
2,3秒フリーズする現象が出たので、調べてみるとガベージコレクションが影響しているようだ。

このガベージコレクション機能というのは、どこにも参照されなくなったデータを
自動的に削除してくれる本来便利な機能なのだが、好きなタイミングで破棄する事が出来ない。

つまり、変数をNewするたびにメモリー使用量が増えていくのだが、ピンポイントに開放するという事は不可能。

では対処するにはどうしたらよいか。
・プログラムのデザインパターンがどうの言われているやり方だとオブジェクトがどんどん増えていくので、生成した領域を使いまわすプログラム構造を設計する。
・クラス内変数は全てprivateにしておき、外部公開する時はプロパティ経由で行うこと。
 変数を極力Privateにすることでメモリ破棄が効率よく行われる。
・よく使うものはNewせずStaticで定義してしまう。
・ピンポイントな配列はなるべく避けてオブジェクト単位にまとめて使う。(オブジェクト指向を考慮して)

昔できた事が今ではできないという事を理解したから、
ガベージコレクション機能に頼らず自分で工夫しようと思ったこのごろ。




Androidの開発環境構築

日常でAndroid端末を使い始めてだんだんと自分のアプリも作りたくなってきたので
改めて開発環境を構築してみた。
一昔よりだいぶ敷居は低くなっているようだ。


Step.1 必要なものをダウンロード
 ・JAVA(JDK)
http://www.oracle.com/technetwork/java/javase/downloads/index.html

 ・Android開発環境
http://developer.android.com/sdk/index.html

 ・日本語パッチ
http://mergedoc.sourceforge.jp/



 Step.2 インストール
 ・JAVAはそのままインストール。
 ・Android開発環境は任意のフォルダに展開。
 ・日本語パッチはAndroid開発環境と同じディレクトリに上書きコピー。

 ・eclipse.iniを編集で最後の行に下記1文を加え、日本語表示にする。
 -javaagent:plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar

 ・SDK Manager.exeを起動して、APIをダウンロードしておく。


 ・eclipse.exeを起動して、「ヘルプ」→「新規ソフトウェアのインストール」を選択して、
  

 
Step.3 Helloworld
 正しくビルドできるかチェック。

 3.1 新規→ファイル→新規Androidアプリケーションを選択。

 ※注意メモ
  パッケージとプロジェクトとアプリケーションの関係について定義をまとめると
  
   パッケージは1つしなくて、1パッケージの中に複数のアプリケーションが存在する。
   アプリケーション名はパッケージを動かすランチャーとなるアプリ名。

   つまり、パッケージ名とプロジェクト名を同一のものにした場合、
   プロジェクト名も同じになり、あとからプロジェクトを加えるときは、ライブラリ扱いになる。

 3.2 新規Androidアプリケーションの設定。

  アプリケーション名:hello
  プロジェクト名:hello
  パッケージ名:com.example.hello

  それ以外はそのままにして、次へ、次へ、次へ、、完了とボタンを押す。

 3.3  エミュレータ上で実行。
  実行→実行構成→Androidアプリケーションタブ内hello→helloを選択して実行。
  エミュレーター画面が表示されたら、
  実行→実行、もしくは、パッケージタブ内のhello右クリック→実行→Androidアプリケーションを選択する。

  エラーメモ:
   「Failed to allocate memory: 8」こんなエラーがでた場合の対処。
   
   メモリー不足なので、ターゲットタブ内の選択するAVDを選択して「マネージャー」ボタンを押す。
   画面を小さくしたり、使用するメモリーを少なくするとエラーしなくなる。
   

 3.4 実機上で実行
  USBデバッグをONにしてある実機とパソコンをUSBで繋いだ状態で、実行→実行構成を開く。
  ターゲットタブで、手動を選択すると実機のシリアルが表示されるので、OKを選択。


これでひとまず開発環境は整ったので、
この次はAndroidマーケットの登録方法や、プログラムの書き方・作法を調べてまとめようと思う。



参考URL
http://qiita.com/yu_naka0607/items/7877e491c6adca145d3b
http://www.javadrive.jp/eclipse3/install/index4.html
http://firespeed.org/diary.php?diary=kenz-1096
http://blog.ggy.jp/2012/11/android.html

2013年11月4日月曜日

buffalo WHR-G300でDD-WRT化メモ

この機種は海外モデルのWHR-G300N V2に該当するらしく、
DD-WRTのサイトに置かれているファームで動作OKという情報を見つけたので試してみた。
これは自分用メモ。

ファーム書き換えはルーターの設定画面の開発者用ページを開くことで行う事ができる。

やり方は、

1.URLを開く。
 http://192.168.11.1/cgi-bin/cgi?req=frm&frm=py-db/55debug.html

2.ユーザー名:bufpy

3.パスワード:otdpopy +『設定しているパスワード』

~(これはやらなくても大丈夫だった) ~
4.コマンドラインに『ubootenv set region US』を入れて実行
5.ルーターを再起動
~~~

ログインしたら、下記URLにアクセスして、ダウンロードしてきた「WHR-G300N V2」ファームウェアを指定してアップデート開始する。
    /cgi-bin/cgi?req=frm&frm=py-db/firmup.html

完了。
初期のIPアドレスは、192.168.1.1になっているのでここは注意しておくこと。

それと、eaccessのADSLでブリッジ化を行っているので、pppoeの設定を行った。
アカウント名は、モデムとPCを繋げて
PCのIPアドレスを192.168.0.2に固定してから
http://192.168.0.1/にアクセス。
ログイン名:root、パスワード:root

アカウント名を取得したらpppoeの設定に入れ、パスワードは適当なものを入れておく。

これでOK。

あとは電波出力を20→10に変更くらいでひとまずまとめ終了。

2013年9月24日火曜日

海外旅行するときの注意メモ

海外旅行にいってきて、思った事
10つメモを書いてみた。


・基本編
 ○目覚ましを用意する
 →時計と目覚ましは自分が用意したものを使うこと。
  ホテルにアラーム付き時計はあるが、使い方が分からない事が多い。

 ○海外で知らない人から話しかけられたときは警戒しておくこと。
 →トラブルの元は最初から作らない。

 ○安全な格好でいること
 →あまり派手な格好をしない。
 
 ○表情を見て会話する
 →母国語で無い分、ボディーランゲージ的なものはとても重要。

 ○譲り合いはしなくて良い
 →マナーやルールが違うので、日本と違うという意識をもつこと。

 ○警戒心をもつ
 →町並みや人相を見てここは安全かなどを判断すべし。
  もし襲われたらどう対処するかなど考えて行動しておくとよい。


・外食編
 ○言葉が分かんなくて、何でもイエスといってしまうのは絶対にしてはいけない。
 →人がよさそうな感じに接してくるが、全部は値段の高いものを頼ませる為。

 ○注文の仕方などは事前に下調べしておく。
 →言葉が分からないならなおさら、注文方法だけは覚えておくこと。

 ○

・ホテル編

 ○セーフティーボックスは使うな。
 →金庫はホテルスタッフからすれば自在に取り出しが可能なので、本当の貴重品は入れないようにする事。
  貴重品は常に携帯しておいて、分散して持っておくと良いかも。

2013年4月2日火曜日

haar wavelet変換

以前に画像処理でhaar wavelet変換を書いたのだが行方不明になって
再実装することになったのでここに残しておく。

メモ:
 waveletは、平均値と差分のペアになっていて可逆である。


Class MainWindow 
    Private Sub Button_Click_1(sender As Object, e As RoutedEventArgs)
        '--- Haar wavelet変換 ---
        Dim A = CInt(tbA.Text)
        Dim B = CInt(tbB.Text)
        Dim C = CInt(tbC.Text)
        Dim D = CInt(tbD.Text)

        Dim AB0 = A + B
        Dim AB1 = A - B
        Dim CD0 = C + D
        Dim CD1 = C - D

        Dim HH = (AB0 + CD0) / 4
        Dim LH = (AB0 - CD0) / 2
        Dim HL = (AB1 + CD1) / 2
        Dim LL = (AB1 - CD1)

        '--- Haar wavelet逆変換 ---
        Dim _HH = HH
        Dim _LH = LH / 2
        Dim _HL = HL / 2
        Dim _LL = LL / 4

        Dim _00 = (_HH + _LL)
        Dim _01 = (_HH - _LL)
        Dim _10 = (_LH + _HL)
        Dim _11 = (_LH - _HL)

        Dim _A = _00 + _10
        Dim _B = _01 + _11
        Dim _C = _01 - _11
        Dim _D = _00 - _10
    End Sub
End Class

2013年3月13日水曜日

pythonでvcvarsall.batエラーが出る。

python使っているとき、easy_installやpipでパッケージをインストールするときに
エラーがvcvarsall.batエラーが出てくる。

簡単な解決方法はVC2008を入れれば良いのだが、
今現在となるとかなり前のバージョンになるから最新版を使えるようにしたいところ。

ということで探してみたら、
distutils\msvc9compiler.pyのfind_vcvarsall関数で取得している事が分かった。
この中でやっていることはレジストリ情報からvsvarsall.batのありかを調べているので
現在使っているコンパイラでvcvarsall.batのあるパスを読み込むようにすればよい。

まずは、
from distutils.msvc9compiler import *
get_build_version()

これで現在のバージョンを調べる。

10.0なら

HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\VisualStudio\10.0\Setup\VC\ProductDir

ここに文字列で

C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC

を入れて、

find_vcvarsall()を実行してみて、
ちゃんと戻り値が得られている事をチェックする。

これで完了。

2013年2月8日金曜日

逆ポーランド記法による演算

.NETならReflectionなどを使って解決する方法もあるけど、
もっと軽量なものがほしいなと思って、逆ポーランド記法による演算をやってみた。
どのようなものができたかというと、基本的な四則演算と、括弧による優先度、変数を扱えるようなもの。

ポイントは3つ。
・括弧内演算は、再帰処理によって実現した。
・四則演算は、優先度を設けて「+-」は最後、「*/」は最初に演算するようにした。
・変数は、逆ポーランドで演算前に、デコード処理を行うようにした。


Public Sub New()
    Console.WriteLine(Calc("1+2-3"))
    Console.WriteLine(Calc("1+2*3"))
    Console.WriteLine(Calc("(1+2)*3"))
    Console.WriteLine(Calc("(1+2)/3"))
End Sub


Module ReversePolishNotation
    Private param As New Dictionary(Of String, Integer) '変数
    Private dat As String = ""              '計算する文字データ
    Private idx As Integer = 0              '解析インデックス
    Private stk As New Queue(Of String)     '後置記法バッファ
    Public Function Calc(ByVal data As String) As Integer
        dat = data
        idx = 0
        stk.Clear()
        INtoPN()        '中置記法→後置記法へ変換
        Return RPN()    '逆ポーランド記法による演算
    End Function
    Private Sub INtoPN()
        '中置記法→後置記法へ変換
        Dim L1 As New Queue(Of String)  '後置記法確定バッファ
        Dim R1 As New Stack(Of String)  '符号格納バッファ
        Dim wrd As String = ""          '切り出した文字列
        Dim hugo As String = ""         '優先される符号格納(「*、/」)
        While dat.Length > idx
            Dim tmp As String = CStr(dat(idx))  'データ読み出し
            idx += 1
            Select Case tmp
                Case "("
                    INtoPN()             '括弧内優先で演算する
                Case ")"
                    Exit While
                Case "+", "-"
                    '優先度の低い演算子は最後に計算
                    If wrd <> "" Then L1.Enqueue(wrd)
                    If hugo <> "" Then L1.Enqueue(hugo)
                    R1.Push(tmp)
                    hugo = ""
                    wrd = ""
                Case "*", "/"
                    '優先度の高い演算子は最初に計算
                    If wrd <> "" Then L1.Enqueue(wrd)
                    If hugo <> "" Then L1.Enqueue(hugo)
                    hugo = tmp
                    wrd = ""
                Case " ", "\t"
                    '無視するキーワード
                Case Else
                    '演算する文字列
                    wrd += tmp
            End Select
        End While
        If wrd <> "" Then L1.Enqueue(wrd)
        If hugo <> "" Then L1.Enqueue(hugo)
        While 0 < L1.Count : stk.Enqueue(L1.Dequeue()) : End While
        While 0 < R1.Count : stk.Enqueue(R1.Pop()) : End While
    End Sub
    Private Function RPN() As Integer
        '逆ポーランド記法による演算
        Dim dat As New Stack(Of Integer)
        While 0 < stk.Count
            Dim tmp As String = stk.Dequeue()
            Dim R As Integer = stk.Pop()
            Dim L As Integer = stk.Pop()
            Select Case data
                Case "+" : stk.Push(L + R)
                Case "-" : stk.Push(L - R)
                Case "*" : stk.Push(L * R)
                Case "/" : stk.Push(L \ R)
                Case Else : dat.Push(Decoder(tmp))
            End Select
        End While
        Return dat.Pop()
    End Function
    Private Function Decoder(ByVal data As String) As Integer
        '変数→数字変換
        Dim ret As Integer = 0
        If Int32.TryParse(data, ret) Then Return ret
        Return param(data)
    End Function
End Module
無駄なバッファが多いので、後値記法へ変換しながら演算するようにしてみた。

Module ReversePolishNotation
    Private param As New Dictionary(Of String, Integer) '変数
    Private dat As String = ""              '計算する文字データ
    Private idx As Integer = 0              '解析インデックス
    Private stk As New Stack(Of Integer)    '演算バッファ
    Public Function Calc(ByVal data As String) As Integer
        dat = data
        idx = 0
        stk.Clear()
        RPN()               '演算
        Return stk.Pop()    '結果を返す
    End Function
    Private Sub RPN()
        '中置記法→後置記法へ変換しながら演算を行う
        Dim R1 As New Stack(Of String)  '符号格納バッファ
        Dim wrd As String = ""          '切り出した文字列
        Dim hugo As String = ""         '優先される符号格納(「*、/」)
        While dat.Length > idx
            Dim tmp As String = CStr(dat(idx))  'データ読み出し
            idx += 1
            Select Case tmp
                Case "(" : RPN()            '括弧内優先で演算する
                Case ")" : Exit While
                Case "+", "-"               '優先度の低い演算子は最後に計算
                    If wrd <> "" Then stk.Push(Decoder(wrd))
                    If hugo <> "" Then enzan(hugo)
                    R1.Push(tmp)
                    hugo = ""
                    wrd = ""
                Case "*", "/"               '優先度の高い演算子は最初に計算
                    If wrd <> "" Then stk.Push(Decoder(wrd))
                    If hugo <> "" Then enzan(hugo)
                    hugo = tmp
                    wrd = ""
                Case " ", "\t"              '無視するキーワード
                Case Else                   '演算する文字列
                    wrd += tmp
            End Select
        End While
        If wrd <> "" Then stk.Push(Decoder(wrd))
        If hugo <> "" Then enzan(hugo)
        While 0 < R1.Count : enzan(R1.Pop()) : End While
    End Sub
    Private Sub enzan(ByVal data As String)
        Dim R As Integer = stk.Pop()
        Dim L As Integer = stk.Pop()
        Select Case data
            Case "+" : stk.Push(L + R)
            Case "-" : stk.Push(L - R)
            Case "*" : stk.Push(L * R)
            Case "/" : stk.Push(L \ R)
        End Select
    End Sub
    Private Function Decoder(ByVal data As String) As Integer
        Dim ret As Integer = 0
        If Int32.TryParse(data, ret) Then Return ret
        Return param(data)
    End Function
End Module

どっちがいいかは不明。

2013年1月23日水曜日

.NET 軽量ORマッパー


.NETでORマッパー関連が充実していなくて困った。
.NET標準のADO.net Entity frameworkを使えばモデリングからある程度自動生成してくれるが、
pythonのdjangoのORマッパーを味わってしまうとめんどくさい。。
Ironpythonを使って、メイン言語をPythonにして画面だけWPFにしようとも考えたけど、これもめんどくさい。。

MySQLなど大規模なファイルでない、ちょっとしたパラメータをファイルに保存しておきたいだけなのに、どうしたものか。
探しても無いから自分でJson形式なORマッパーを作ってみた。

仕様は、
 ・データ保存形式は、 jsonを使用。
 ・ORマッパーでModelクラス経由でアクセス。
 ・検索機能は、Linqを使う。

これだけで十分と思う人向け。


Imports Newtonsoft.Json.Linq
Imports Newtonsoft.Json
Imports System.ComponentModel
Imports System.IO

Public Class BookModel
    <displayname("書籍名")>
    Public Property Name As String = ""
    <displayname("バーコード")>
    Public Property BCode As String = ""
    <displayname("ページ数")>
    Public Property Pages As Integer = 0
    <displayname("価格")>
    Public Property Price As Integer = 0

    Public Sub New(ByVal name As String, ByVal bcode As String, ByVal pages As Integer, ByVal price As Integer)
        With Me
            .Name = name
            .BCode = bcode
            .Pages = pages
            .Price = price
        End With
    End Sub
End Class

Class BookCollection : Implements IListSource
    Public Property models As New List(Of BookModel)
#Region "IListSource"
    Private bindsrc As New BindingSource
    Public ReadOnly Property ContainsListCollection As Boolean Implements IListSource.ContainsListCollection
        Get
            Return False
        End Get
    End Property
    Public Function GetList() As IList Implements IListSource.GetList
        bindsrc.DataSource = models
        Return bindsrc
    End Function
#End Region
#Region "ファイル操作"
    Public Sub Save(ByVal fname As String)
        Dim json As String = JsonConvert.SerializeObject(models)
        File.WriteAllText(fname, json)
    End Sub
    Public Sub Load(ByVal fname As String, typ As Type)
        Dim json As String = File.ReadAllText(fname)
        json = json.Replace(vbTab, "").Replace("\", "\\")
        models = JsonConvert.DeserializeObject(Of List(Of BookModel))(json)
        bindsrc.ResetBindings(False)
    End Sub
#End Region
End Class
使い方例:
        'データ定義
        Dim bc As New BookCollection()
        bc.models.Add(New BookModel("書籍1", "4987185712345", 100, 100))
        bc.models.Add(New BookModel("書籍2", "4987185712346", 110, 200))
        bc.models.Add(New BookModel("書籍3", "4987185712347", 120, 300))

        '保尊
        co.Save("d:\test.json")

        '読込
        co.Load("d:\test.json", rack.GetType())

        '条件検索
        Dim filter = From x In bc.models Where x.Price >= 200 Select x
        For Each model As BookModel In filter
            Console.WriteLine(model.Name)
        Next

        'DataGridViewで表示する
        DataGridView1.DataSource = co.models
        DataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill
        DataGridView1.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells
機能拡張など、こうしたら良いなどアイデアがあれば教えてください。

2013年1月21日月曜日

つるとんたん新宿店

つるとんたん
http://www.tsurutontan.co.jp/



坂本龍の番組だったか
カトープレジャー グループの社長が出演していた回の放送をみて知ったお店である。

番組内で「わざわざ来てくれるお店」を作るのがやり方のようで、
どんなお店か行ってみた。


行ってきた場所は、つるとんたん新宿店。

歌舞伎町方面、元コマ劇場があった所から1本奥の通りを右方向に進むと、地下1階にお店があった。






内装はまるで、キャバクラをうどん店へ改装した感じの作りになっていて、
カウンター席は、ディズニーのホンデットマンションの椅子みたいなでっかい椅子で二人が座れる席。
テーブル席もいくつかあるが、席に座ってる人達を見てみると器が通常の2倍サイズくらいあって迫力満点。
15時頃に入ったときは空いていたのか、20分くらい待って、さっそく案内されて注文したのはコレ。


釜揚げうどん。これにアナゴとネギトロ丼を頼んでみた。

注文した時に聞いたのだが、替え玉が3回まで無料でOKみたい。


さっそく食べてみた感想。
麺はつるつるで太麺の讃岐うどん。
味はシンプルかなー。一緒に行った人のも食べてみたけど同じ感想。
でもお店の内装や器、いろんな所は他のうどん屋に無いね。かなり個性的。
夜はライブもやるみたいなので、行列間違いなしだと思う。


個人的にうどんなら三国一!

C#とipythonでDjango

VS2012 Professional版使っていれば、PTVSをインストール、
VS2012 express版でも別途shellをインストールすれば済む話じゃないかっという話だけど、
今回は自力でやってみる方法を選んでみた。

 1.インストール
  ironpython、easy_installなど必要なものを順次インストールしていく。
 IronPython
  http://ironpython.codeplex.com/easy_setup
  http://peak.telecommunity.com/dist/ez_setup.py  

2.環境変数に下記のパスを追加。
 Path
   C:\Program Files (x86)\IronPython 2.7\
   C:\Program Files (x86)\IronPython 2.7\Scripts\
   C:\Program Files (x86)\IronPython 2.7\Lib\
   C:\Program Files (x86)\IronPython 2.7\Lib\site-packages\

  PythonHome
   C:\Program Files (x86)\IronPython 2.7\


3.モジュールを入れる。
 ipy64 Scripts\easy_install sqlite ipy64 Scripts\easy_install django


4.このままだとunicodeエラーが発生するので、djangoにパッチをあてる。 https://bitbucket.org/jdhardy/django-ironpython/commits/b70eeacda60c


.\lib\site-packages\django-1.4.3-py2.7.egg\django\utils\funcional

---95行目付近
 - assert not (cls._delegate_str and cls._delegate_unicode), "Cannot call lazy() with both str and unicode return types."
 + assert (str is unicode) or not (cls._delegate_str and cls._delegate_unicode), "Cannot call lazy() with both str and unicode return types."
---

5.プロジェクト作成
 ipy64 -X:FullFrames Scripts\django-admin.py startproject project_name

 ipy64の引数「-X:FullFrames」これが入ってなくて一度つまづいた所である。

詳しくはipy64 -hで参照すること。

2012年12月28日金曜日

Raspberry Piが届いた

今までMini2440を扱ってきたけど、今度は液晶パネル無しのRaspberry PiをRSコンポーネント経由で購入してみた。
部品不足らしく、注文してから2ヶ月ほど掛かるので、注文する方は直ぐには届かないと思っておいた方がいいと思います。

詳細スペック
 http://ja.wikipedia.org/wiki/Raspberry_Pi

 さっそく箱を開けてみると、名刺サイズの基板が入っていた。
700MHzのCPUと512MBのメモリーとGPIOにUSB、LANなどもついて3500円。
自分で基板を作ってやるよりも安くできそうだが、SDカードからブートになるため、起動時間はNANDフラッシュで起動可能なMINI2440と比べて遅くなる上、カードを抜き取られると中身が全て丸見えになるので、セキュリティー面で難あり。
だが基板単体で遊ぶには値段も手ごろでよさそうだ。

明後日から年末休みになるので、debianのインストールや無線LANを使って色々やってみようと思う。

Androider