2014年5月10日土曜日

rasbbery pi で音を鳴らす

組込み用途で使用する時って画面が無いから、起動シーケンスが終わった後にピーってビープ音か何か欲しくなるので調べてみた。

1.まず必要なユーティリティーをインストール。
$ sudo apt-get install -y alsa-utils mpg321 lame mplayer


2.snd-bcm2835が入っているかチェックする。
$ lsmod

入ってなければ
>sudo modprobe snd-bcm2835


3.鳴らすポートの選択。今回はアナログを選んだ。
$ numid= { 0=auto, 1=analog, 2=hdmi }

$ amixer cset numid=3 1


4.音が鳴るか確認。

サイン波
$ speaker-test -t sine -f 440 -c 2 -s 1

Wav音源
$ wget http://www.jahozafat.com/0093058674/WAVS/Movies/Full_Metal_Jacket/numnuts.wav

MP3音源
$ wget http://www.hmix.net/music/c/c3.mp3
$ mpg321 c3.mp3


M4A音源
$ mplayer test.m4a



 5.ボリューム調整
$ amixer cset numid=1 -- 80%


6. WAV→MP3変換をしてみる
$ lame numnuts.wav numnuts.mp3


おもちゃみたいな基板から音楽が流れるとちょっとだけ感動する。。

 
参考サイト
http://jeffskinnerbox.wordpress.com/2012/11/15/getting-audio-out-working-on-the-raspberry-pi/



2014年5月2日金曜日

SPI通信の導入式

SPI通信で遅れて1ビットずれてしまい、1日悩んだ。SPI通信の仕様をちゃんと読まなかったからだ。

今回はちゃんと読んで理解した内容を忘れないようにメモを残しておく。

覚えておくこと。
・マスター・スレーブ間の通信である。(当たり前)
・配線は5本、CLK、MISO、MOSI、CE、GND
・MISO(Master In Slave Out)、
・MOSI(Master Out Slave In)

スレーブ側はIC仕様によって異なるので、例としてL6470の場合、

  →立上りで入力(MISO)
  →立下りで出力(MOSI)

という仕様である。
これを端子名 MISO、MOSIと書いた部分に注目!
MasterとSlaveは入出力が反対になるのがSPIの特徴である。

ディジーチェーン2つ繋いだ構成でSPI通信を行うとき
4バイト送ったら最初の2バイトがマスターに届けられてないといけない。

これを考えると、クロックのタイミングは
 MISO、MOSI MISO、MOSI MISO、MOSI MISO、MOSI、、、、

こういう順番と

 MOSI、MISO、 MOSI、MISO、 MOSI、MISO、 MOSI、MISO、、、、

どっちが正しいか。

考えれば最後に出力になっていないと、前者だと1ビット欠落してしまう状態になる。(←ここではまった)

要するにCLKの論理は、スレーブの仕様によって決まって、
 マスターのデータ取り込みタイミングは、MISOになるように設定する。

L6470の例だと、
 ・データを取り込み(MISO)は立ち上がり
  ・MISOが最後にした場合、CLKエッジはHIGHで終わるので負論理(^CLK)

波形が乗っているサイトの見てみると、
https://www.diolan.com/dln_doc/spi-transfer-modes.html

CPOL=CLKエッジ最後の状態 ・・・ HIGHなので CPOL=1
CPHA=CLK取り込み開始状態 ・・・ HIGH(HIGH→LOW)なのでCPHA=1
 
Mode=|CPOL|CPHA|のビットアサインなので、


Mode=11 =(3) Mode=3

2014年4月30日水曜日

[Win7][Win8]インターネット接続の共有のIPアドレスの設定方法

インターネット接続の共有で設定されるIPアドレスを変えようと思って調べたら
WinXP時代とはレジストリの配置が異なっているので気をつけないといけないようだ。


[XPまで]
 Hkey_Local_Machine\System\CurrentControlSet\Services\ICSharing\Settings\General

[XP以降]
 Hkey_Local_Machine\System\CurrentControlSet\services\SharedAccess\Parameters

 名前がわかりやすくなったのだけど、なかなか気づけないよこれは。

 以下引用
-----

ホストとの接続の共有ホストの DHCP サービスで使用される IP アドレスの範囲に割り当てられている IP アドレスを変更するにはレジストリ エディターを使用して、次の値を変更します。これらの値は、次のフォルダーに配置されます。
HKLM\System\CurrentControlSet\services\SharedAccess\Parameters

    (REG_SZ)ScopeAddress
    (REG_SZ)StandaloneDhcpAddress

ScopeAddress 値は接続の共有で使用するアドレスの範囲を設定します。StandaloneDhcpAddress 値は、SoftAP と仮想の Wi-Fi が有効になっているときに使用されるアドレスの範囲です。両方の値をネットワーク マスク 255.255.255.0 を使用しは構成できません。

----

参考元URL: http://support.microsoft.com/kb/230148/ja

2014年4月23日水曜日

skypeの広告を消す方法

Skypeを起動して、

 表示→コンパクトビューをクリック。

 ツール→設定→通知→アラート&メッセージ→メッセージを表示の2個のチェックボックスを外す→Skype再起動

インターネットオプションを開いて、
 セキュリティ→制限付きサイト→サイト→[https://apps.skype.com]を追加。

以下のテキストを書いたバッチファイルを作成して管理者として起動する。
 echo 127.0.0.1 cdn.adnxs.com>> C:\Windows\System32\drivers\etc\hosts
 echo 127.0.0.1 m.adnxs.com>> C:\Windows\System32\drivers\etc\hosts
 echo advertising.jp.msn.com>>  C:\Windows\System32\drivers\etc\hosts


これで画面がすっきりする。

更新
2015.04.01

エイプリルフールだけど気にしないで!

広告枠も削除する方法が乗っていたので追記。

C:\users\(ユーザー名)\AppData\Roaming\Skype\(アカウント名)\config.xml

を開いて

<AdvertPlaceholder>1</AdvertPlaceholder>

行を削除する。

これでおk。

---

Control Panel -> Internet Options -> Security -> Restricted Sites -> Sites -> add g.msn.com and apps.skype.com

Also, to remove the ad placeholder, go to your 
C:\users\youruser\AppData\Roaming\Skype\yourskypeuser\config.xml

and find the line 1

<AdvertPlaceholder>1</AdvertPlaceholder>

and remove the line completely

---


2014年4月14日月曜日

VB.NET LinqでGroupByの使い方

いつも使い方を忘れるのでメモ。 サンプルは、List型の配列、Dictionary型でGroupByする時の例。
    Public Class pmodel
        Public key As Integer = 0
        Public dat As String = ""

        Public Sub New(k As Integer, d As String)
            key = k
            dat = d
        End Sub
    End Class
    Private models As New List(Of pmodel)
    Private dic As New Dictionary(Of Integer, pmodel)


    Private Sub Button_Click(sender As Object, e As RoutedEventArgs)
        models.Clear()
        models.Add(New pmodel(0, "A"))
        models.Add(New pmodel(0, "B"))
        models.Add(New pmodel(1, "C"))
        models.Add(New pmodel(2, "D"))
        models.Add(New pmodel(5, "E"))
        Dim dat1() As IGrouping(Of Integer, pmodel) = models.GroupBy(Function(zz As pmodel) zz.key).ToArray()
        For Each dat As IGrouping(Of Integer, pmodel) In dat1
            For Each d In dat
                Console.WriteLine(String.Format("key={0}, k={1}, v={2}", dat.Key, d.key, d.dat))
            Next
        Next
''' >>>key=0, k=0, v=A
''' >>>key=0, k=0, v=B
''' >>>key=1, k=1, v=C
''' >>>key=2, k=2, v=D
''' >>>key=5, k=5, v=E
''' 

        dic.Clear()
        dic(0) = New pmodel(0, "AA")
        dic(1) = New pmodel(1, "AA")
        dic(2) = New pmodel(2, "BB")
        dic(3) = New pmodel(3, "CC")
        dic(5) = New pmodel(5, "DD")

        Dim dat2() As IGrouping(Of String, pmodel) = dic.Values.GroupBy(Function(d As pmodel) d.dat).ToArray()
        For Each dat As IGrouping(Of String, pmodel) In dat2
            For Each d In dat
                Console.WriteLine(String.Format("key={0}, k={1}, v={2}", dat.Key, d.key, d.dat))
            Next
        Next

    End Sub
''' >>>key=AA, k=0, v=AA
''' >>>key=AA, k=1, v=AA
''' >>>key=BB, k=2, v=BB
''' >>>key=CC, k=3, v=CC
''' >>>key=DD, k=5, v=DD

2014年3月29日土曜日

INotifyPropertyChangeとINotifyDataErrorInfoの実装方法

 .Net技術者であればViewModelを実装するときに必ず書かなくてはいけないINotifyPropertyChangeプロパティ。出来れば書きたくない、.netが勝手にやってくれてもいいんだよと思う部分を少しでも楽にならないかと考えてみた。

まずは、データーフローから考えてみると
値の変更→データチェック→通知
 OK => INotifyPropertyChange
 NG => INotifyDataErrorInfo
という流れで実装する場合、

set {
    if (validation(value)) {
        //INotifyPropertyChange
    }else{
        //INotifyDataErrInfo
    }
}
この辺りは共通処理になるからここをModelBaseクラスという形で実装しておき、
あとはSetProperty関数を用いて上記処理を処理させようというアプローチである。
過去にもModelがらみの記事に書いた
MongoDBと接続、もしくはJSonファイルに出力する方法にも使えるようにしておいた。


実装方法はModelBaseクラス内でNotify関連を実装してそれを任意のModelクラスに継承するやり方。

Imports System.ComponentModel
Imports MongoDB.Driver
Imports MongoDB.Driver.Builders
Imports MongoDB.Driver.Linq
Imports MongoDB.Bson
Imports MongoDB.Bson.Serialization.Attributes

'http://blog.micic.ch/net/easy-mvvm-example-with-inotifypropertychanged-and-inotifydataerrorinfo
Public Class ModelBase : Implements INotifyPropertyChanged, INotifyDataErrorInfo
#Region "data error"
    Private _errors As New Dictionary(Of String, List(Of String))
    Public Event ErrorsChanged(sender As Object, e As DataErrorsChangedEventArgs) Implements INotifyDataErrorInfo.ErrorsChanged
    Public Function GetErrors(propertyName As String) As IEnumerable Implements INotifyDataErrorInfo.GetErrors
        If _errors.ContainsKey(propertyName) Then
            Return _errors(propertyName)
        End If
        Return Nothing
    End Function
    Public ReadOnly Property HasErrors As Boolean Implements INotifyDataErrorInfo.HasErrors
        Get
            Return 0 < _errors.Count
        End Get
    End Property
    Public ReadOnly Property IsValid As Boolean
        Get
            Return Not HasErrors
        End Get
    End Property
    Private Sub AddError(propertyName As String, errmsg As String)
        If Not _errors.ContainsKey(propertyName) Then
            _errors(propertyName) = New List(Of String)
        End If
        If Not _errors(propertyName).Contains(errmsg) Then
            _errors(propertyName).Add(errmsg)
            RaiseEvent ErrorsChanged(Me, New DataErrorsChangedEventArgs(propertyName))
        End If
    End Sub
    Private Sub RemoveError(propertyName As String)
        If _errors.ContainsKey(propertyName) Then
            _errors.Remove(propertyName)
            RaiseEvent ErrorsChanged(Me, New DataErrorsChangedEventArgs(propertyName))
        End If
    End Sub
#End Region
#Region "Property changed"
    Public Event PropertyChanged(sender As Object, e As PropertyChangedEventArgs) Implements INotifyPropertyChanged.PropertyChanged
#End Region
#Region "Set Property"
    Private _lock As New Object()
    Protected Delegate Function DlgCheckValidation() As String
    Protected Sub SetProperty(Of T)(propertyName As String, ByRef field As T, value As T, func As DlgCheckValidation)
        If Not EqualityComparer(Of T).Default.Equals(field, value) Then
            SyncLock _lock
                Dim errmsg = ""
                If Not IsNothing(func) Then
                    errmsg = func()
                End If
                If "" = errmsg Then
                    field = value
                    RemoveError(propertyName)
                    RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(propertyName))
                Else
                    AddError(propertyName, errmsg)
                End If
            End SyncLock
        End If

    End Sub
#End Region
End Class



<BsonIgnoreExtraElements>
Public Class AddressModel : Inherits ModelBase
    <BsonId>
    <DisplayName("ID")>
    Public Property _id As BsonObjectId

    Private _name As String
    Private _birthday As Date
    Private _emailAddress As List(Of EMailModel)

    <DisplayName("名前")>
    Public Property name As String
        Get
            Return _name
        End Get
        Set(value As String)
            SetProperty("name", _name, value,
                Function() As String
                        If "abc" = value Then
                            Return "abc not allowed"
                        End If
                        Return ""
                    End Function)
        End Set
    End Property

    Public Property Birthday As Date
        Get
            Return _birthday
        End Get
        Set(value As Date)
            SetProperty("Birthday", _birthday, value, Nothing)
        End Set
    End Property
    Public Property EMailAddress As List(Of EMailModel)
        Get
            Return _emailAddress
        End Get
        Set(value As List(Of EMailModel))
            SetProperty("EMailAddress", _emailAddress, value, Nothing)
        End Set
    End Property

End Class

<BsonIgnoreExtraElements>
Public Class EMailModel : Inherits ModelBase
    Private _DisplayName As String
    Private _MailAddress As String

    Public Property DisplayName As String
        Get
            Return _DisplayName
        End Get
        Set(value As String)
            SetProperty("DisplayName", _DisplayName, value, Nothing)
        End Set
    End Property
    Public Property MailAddress As String
        Get
            Return _MailAddress
        End Get
        Set(value As String)
            SetProperty("MailAddress", _MailAddress, value, Nothing)
        End Set
    End Property
End Class




参照サイト:
http://ivis-mynikki.blogspot.jp/2013/01/net-or.htmlhttp://ivis-mynikki.blogspot.jp/2014/03/blog-post.html
http://blog.micic.ch/net/easy-mvvm-example-with-inotifypropertychanged-and-inotifydataerrorinfo
 
 
 

はじめてのVB.NetでMongoDBの使い方

前から使いたかったMongoDB。
サービス登録ってどうやるの?.netだと使い勝手悪いんじゃ?など
色々と調べる事があるから使わないでMSSQLやテキストファイルの
CSV,JSONで十分じゃんって自分に言いきかせて触らずにいたのだが
こういったデータは複数のプログラムでリアルタイムに更新したかったりするので
今回本気に使ってみることにした。

まず覚えなくてはいけない事。
 1.MongoDBをダウンロードすること。
 2.DB、LOGフォルダを用意すること。
 3.サービス登録しておくこと。
 4.VisualStudioのNugetで「Official MongoDB C# Driver」をインストールすること。(Apache2.0ライセンス)
 5.ライブラリの使い方、DBの接続方法、データの追加、削除、更新を覚えること。

1,2,3まではやる気さえあればできそうで
4,5になると開発環境を起動したりコードを書いたりしなきゃならないので遠ざかりたくなるけど、使いたいという思いでどうにか乗り切るしかなさそう。
なるべく手順をまとめると、

Step1. MongoDBのダウンロード、DB、LOGフォルダの用意、サービス登録を行う。

  http://www.mongodb.org/

上記公式サイトからMongoDB本体をダウンロードしてきて任意の場所に展開する。
そしてダウンロードしながらどこかにDB、LOGフォルダを用意してから
管理者権限でコマンドプロンプトを開く。

今回は
 d:\tool\mongodb       MongoDB展開フォルダ
 d:\tool\mongodb\bin\log  Logフォルダ
 d:\tool\mongodb\bin\db  DBフォルダ

というようにした場合、下記コマンドを入力する。

>cd \tool\mongodb\bin
>mongod --install --dbpath .\db --logpath .\log\log.txt

サービス解除する時は --install を --remove にすればOK。

Step2.使い方を覚える

 まずは、VisualStudioを起動してソリューションを1つ作ってから
Nugetで「Official MongoDB C# Driver」をインストール。

あとはコーディング。


Imports MongoDB.Driver
Imports MongoDB.Driver.Builders
Imports MongoDB.Driver.Linq
Imports MongoDB.Bson
Imports MongoDB.Bson.Serialization.Attributes


Class MainWindow
    Private Sub Button_Click(sender As Object, e As RoutedEventArgs)
        'MongoDBサーバーに接続して、操作するコレクションを選択。
        Dim mongo_drv = New MongoClient()
        Dim db = mongo_drv.GetServer().GetDatabase("TestDB")
        Dim col = db.GetCollection(Of AddressModel)("AddressCollection")

        'サンプルデータの追加
        col.Insert(New AddressModel() With {
            .Name = "test1",
            .Birthday = Date.Parse("1980/12/5"),
            .EMailAddress = New List(Of EMailModel)() From {
                New EMailModel With {.DisplayName = "test1", .MailAddress = "mail1@test.com"},
                New EMailModel With {.DisplayName = "test2", .MailAddress = "mail2@test.com"}
            }
        })
        col.Insert(New AddressModel() With {
            .Name = "test1",
            .Birthday = Date.Parse("1981/12/5"),
            .EMailAddress = New List(Of EMailModel)() From {
                New EMailModel With {.DisplayName = "test3", .MailAddress = "mail3@test.com"},
                New EMailModel With {.DisplayName = "test4", .MailAddress = "mail4@test.com"}
            }
        })

        'MondoDBサーバー切断
        mongo_drv.GetServer().Disconnect()
    End Sub

    Private Sub Button_Click_1(sender As Object, e As RoutedEventArgs)
        'MongoDBサーバーに接続して、操作するコレクションを選択。
        Dim mongo_drv = New MongoClient()
        Dim db = mongo_drv.GetServer().GetDatabase("TestDB")
        Dim col = db.GetCollection(Of AddressModel)("AddressCollection")

        'LINQで検索
        For Each model In (From t In col.AsQueryable() Where t.Name.StartsWith("test") Select t)
            Console.WriteLine("--------")
            Console.WriteLine(model.Name)
            Console.WriteLine(model.Birthday)
            For Each emodel In model.EMailAddress
                Console.WriteLine(emodel.DisplayName)
                Console.WriteLine(emodel.MailAddress)
            Next
            Console.WriteLine("--------")
        Next

        'MondoDBサーバー切断
        mongo_drv.GetServer().Disconnect()
    End Sub

    Private Sub Button_Click_2(sender As Object, e As RoutedEventArgs)
        'MongoDBサーバーに接続して、操作するコレクションを選択。
        Dim mongo_drv = New MongoClient()
        Dim db = mongo_drv.GetServer().GetDatabase("TestDB")
        Dim col = db.GetCollection(Of AddressModel)("AddressCollection")

        'LINQで検索、該当項目の日付を更新する(GMTがまちがってそう。。)
        For Each model In (From t In col.AsQueryable() Where t.Name.StartsWith("test") Select t)
            model.Birthday = Date.Now
            col.Save(model)
        Next

        mongo_drv.GetServer().Disconnect()
    End Sub

    Private Sub Button_Click_3(sender As Object, e As RoutedEventArgs)
        'MongoDBサーバーに接続して、操作するコレクションを選択。
        Dim mongo_drv = New MongoClient()
        Dim db = mongo_drv.GetServer().GetDatabase("TestDB")
        Dim col = db.GetCollection(Of AddressModel)("AddressCollection")

        'LINQで検索、該当項目の削除
        For Each model In (From t In col.AsQueryable() Where t.Name.StartsWith("test") Select t)
            col.Remove(Query.EQ("_id", model._id))
        Next

        mongo_drv.GetServer().Disconnect()
    End Sub
End Class


Public Class AddressModel
    
    Public Property _id As BsonObjectId
    Public Property Name As String
    Public Property Birthday As Date
    Public Property EMailAddress As List(Of EMailModel)

End Class


Public Class EMailModel
    Public Property DisplayName As String
    Public Property MailAddress As String
End Class



日付の扱いがちょっとGMTがらみの調整が必要かもしれないけど、ひとまず使えるようになったのでここまで。


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つメモを書いてみた。


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

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

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

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

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


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

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

 ○

・ホテル編

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

Androider