2012/10/13

Ubuntuで「Otixo」を利用して「Google Drive」を使う

前の記事でUbuntu12.04でGoogle Driveを使うことができたのですが、
○○○○に怖いものなんてない!!: Ubuntuで「Insync」を利用してGoogle Driveを使う

自分はUbuntuは12.04だけでなくて、もう少しでサポートが切れてしまいますが、Ubuntu10.04も使っています。
しかし、InsyncはUbuntu12.04とLinux Mint13しか対応していないです。

そこで、Ubuntu10.04は「Otixo」を使ってGoogle Driveにアクセスしたいと思います。

これは、Dropboxなどのようにローカルにあるフォルダを同期するのではなく、WebDavを利用してマウントするような形になります。

まあこれも使い方は次のサイトを参考にしました。
カオスとフラクタル: オンラインストレージについて

このサイトが紹介している次のWebDavの手動マウント方法はきちんと出来ました。
Mount Your Cloud Services in Ubuntu with OTIXO | Liberian Geek

しかし、こっちの自動マウントの方はなぜかうまく行きませんでした。
(利用したのがUbuntu11.10とあったので試しにUbuntu12.04でも試したのですが、うまく行きませんでした。)
Automatically Mount Cloud Services in Ubuntu 11.10 using OTIXO Cloud Service | Liberian Geek

当分は必要なときに手動マウントになりそうです。

Ubuntuで「Insync」を利用してGoogle Driveを使う

オンラインストレージは今も熱いですが、1つだけネックなことは

「WindowsとLinuxの両方で使いやすいのが少ない」

という事です。この条件をクリアしているのが、「Dropbox」と一応「Ubuntu One」くらいしかありません。
(Ubuntu OneはWindows用のクライアントソフトに対しての同期が不安定なので使っていないですが)

「Dropbox」は使い勝手が最高に良いのですが、やはり容量が少ないですね。

そこで、「Insync」というソフトを使って正式なLinuxのクライアントソフトがない「Google Drive」をUbuntu12.04で使います。


Insync - Your Google Docs backup and sync tool
https://www.insynchq.com/

インストール方法はこのサイトを参考にしました。

InsyncでGoogle Driveを使い倒す « LiberOS | Viva! Ubuntu!!
http://viva-ubuntu.com/cloud_web/insync.html

Linux版はbeta版という事でちょっと心配ですが、一応現時点では同期もきちんとできています。

ちょっとこれをつかってみて今後使っていくかを決めようかと思います。

2012/10/12

C++の「auto型」について

C++に「auto型」というのがあるらしいです.

調べてみると結構面白そうなもので,コンパイル時に自動で型を推測して適切な型に変換してくれるというものです.

まあ,言葉だけだとあれなので

#include <vector>
#include <iostream>

using namespace std;

int main ()
{
    auto num1 = 10;
    auto num2 = 20;

    auto ans = num1 + num2;

    std::cout << "ans =  " << ans << std::endl;

    getchar();

return 0;
}

とすると,「num1」と「num2」が整数を入れているので「int」と判断され,
「ans」が整数を足しているので「int」と判断されます.

なんか,Pythonみたいな動的言語っぽくて面白いですね.
でも,コンパイル時に型を決定しているっぽいので動的言語とはいろいろ違いますが,

上の例だとメリットが良くわからないのでメリットがもうちょっとわかるやつを次にやります.

まず,「auto」を使わないでやるとこのように書きますが,

#include <vector>
#include <iostream>

using namespace std;

int main ()
{
    vector array;

    for( int i = 0; i < 10; ++i ){
        array.push_back( i );
    }

    for ( vector<int>::iterator it = array.begin(); it != array.end(); it++){
        cout << *it << endl;
    }

    getchar();

return 0;
}

これが,「auto」を使うとこのようになます.

#include <vector>
#include <iostream>

using namespace std;

int main ()
{
    vector array;

    for( int i = 0; i < 10; ++i ){
        array.push_back( i );
    }

    for ( auto it = array.begin(); it != array.end(); it++){
        cout << *it << endl;
    }

    getchar();

return 0;
}

要するにイテレーターのところをきちんと書くんじゃなくて「auto」で代用できるということです.


いいところもあると思いますが,入れる型が違うなどのエラーが出てきたらめんどくさそうですね.

このサイトにいろいろ書いてあります.


C++0xのautoキーワードによる型推論 - ぬいぐるみライフ(仮)
http://d.hatena.ne.jp/mickey24/20110104/1294152403

2012/10/11

C++のコンストラクタにある「:(コロン)」について

C++のコンストラクタを書くところに「:」がついているものがある.

たとえばこれ

class testclass
{
private:
    int num_int;
    double num_dou;
 
public:
    testclass()
        :num_int( 0 )
        ,num_dou( 1.2 )
    {
    }
}

これはコンストラクタが呼ばれたときにメンバ変数を「( )」の中の値で初期化しているらしい.
つまり,コンストラクタが呼ばれたときは「num_int」は「0」となり,「num_dou」は「1.2」となる.

でも,これは次と同じように見える.

class testclass
{
private:
    int num_int;
    double num_dou;
 
public:
    testclass()
    {
        num_int = 0 
        num_dou = 1.2
    }
}

しかし,この2つの違いは,

上はメンバ変数をそれぞれの値で初期化していること.

下はメンバ変数に値を入れていること.

という違いがあるらしい.

参考にしたサイト

コンストラクタで書かれるコロン「:」って何?|C++ フリーでぷろぐらみんぐ
http://ameblo.jp/nana-2007-july/entry-10037680575.html

コンストラクタでは、代入よりも初期化を使おう 12項 - Higepon’s blog - Mona OS and Mosh
http://d.hatena.ne.jp/higepon/20051107/1131335521


2012/10/10

C++の"const"について

C++でよくみる"const"ですが,
これは普通の変数につけるとその変数が定数になって値を変更できなくなったり,
関数の引数につけるとその関数内でその引数の値を変更しないと示すことができたりといろいろな使い方がありますが,

大規模なプログラムなどを作る際は大事になってくるんだろうなと思いながら,あまり使わないときも多いです.

下のサイトが"const"がうまくまとまっているので忘れたときは参考にするといいです.

C++の基礎 : const 修飾子
http://www.s-cradle.com/developer/sophiaframework/tutorial/Cpp/const.html
これを見つけるに至った経緯は,次のようなものを見つけたからです.
class test
{
private:
    int num;

public:
    int ans() const{
        return num;
    }
}

はじめこれを見たときはよくわからなかったのですが,
これは「constメンバ関数」というらしく,
この関数はメンバ変数の値を変更しないよ!!
ということを示しているようです.


参考にしたサイト

C++編(言語解説) 第20章 constメンバ
http://www.geocities.jp/ky_webid/cpp/language/020.html

3章:C++の新しい文法
http://www5c.biglobe.ne.jp/~ecb/cpp/03_05.html

C++編(標準ライブラリ) 第2章 vector
http://www.geocities.jp/ky_webid/cpp/library/002.html




OutputDebugStringが曖昧な件

あまり使わないが、「OutputDebugString」という関数がある。

「std::cout」のように文字を出すものだが、標準出力ではなく、デバッガに出力している。

普通は次のように使う。

OutputDebugString( "abc" ); 

そして、別にこれと似たものが2つある。

OutputDebugStringW( L"abc" ); 

これもデバッガに文字列を出力するが、
違いは引数の文字列が「Unicode」でなければいけないということである。
ここでは、普通の文字列の前に「L」を置き、文字列をUnicodeにしている。

OutputDebugStringA( "abc" ); 

また、これもデバッガに文字列を出力するが、
こっちは引数の文字列は「SJIS」になる。


では、「OutputDebugString」とは何かというと、
ただ、文字コード別にさっきのどちらかにdefineされているだけらしい。

文字コードが「Unicode」なら「OutputDebugStringW」に、
「SJIS」なら「OutputDebugStringA」にというように。

まあ、書きなおせばいいのだが、たくさんあるときなどは次を追加するといい。

#ifdef UNICODE
#define OutputDebugString  OutputDebugStringW
#else
#define OutputDebugString  OutputDebugStringA
#endif

参考にしたもの
#pragma twice 206 Version 11.06 Unicode

2012/10/09

GitHubからダウンロードしたプログラムをVC++2010でコンパイル

誰かが作ったプログラムをGitHubからダウンロードしてくることがありますが、
それをVC++のプロジェクトに直接追加してコンパイルするとエラーが大量に出てきました。

しかも、エラーの箇所を探してみるとエラー行とエラーがあっていないような箇所が多くありました。

後でわかったことですが、プログラムは間違っていませんでした。


結果を言うと、プログラムの文字コードが問題でした。
GitHubからダウンロードしたものは全てかどうかはわかりませんが、今回使ったものはプログラムの文字コードが「UTF-8」でした。
(今思えば、GitはLinuxのソフトなのでその関係もあるかもしれません)

そして、VC++はWindowsなので文字コードは「SJIS」か「Unicode」を選んだほうがいいので、そこで問題が生じているのでした。


解決方法は、
今回は文字コード変換ソフトを利用しました。


文字コード判定&変換ツール.NETの詳細情報 : Vector ソフトを探す!
http://www.vector.co.jp/soft/winnt/util/se476748.html
あまり吟味せずソフトを選びましたが、このソフトは使い方を調べなくても直感的に使えたのでいいソフトだと思います。

このソフトで「UTF-8」から「SJIS」に変換してからVC++のプロジェクトに追加したあとコンパイルするとエラーが起きませんでした。


今までもGitHubからプログラムを頂いてコンパイルする機会はあったと思うのですが、
このようになったのは、初めてでした。

判断が難しいですが、GitHubからダウンロードするときは注意したいと思います。


2012/10/08

STM32F4-Discoveryでサンプルプログラムの実行

前の記事で開発環境を整えましたが,

○○○○に怖いものなんてない!!: STM32F4-Discoveryの開発環境構築 (EWARM)
http://kowaimononantenai.blogspot.jp/2012/10/stm32f4-discovery-ewarm.html

今度は実際にプログラムを書き込みたいと思います.

まずサンプルプログラムは下のサイトの画像の赤いところをクリックするとダウンロードできます.

STM32F4DISCOVERY - STMicroelectronics
http://www.st.com/jp/evalboard/product/252419.jsp#FIRMWARE


また,他のPDFなども参考になるのが多いのでこのサイトをブックマークなどしておくといいと思います.
解凍して,まずは,ボード上のLEDが光るサンプルを
STM32F4-Discovery_FW_V1.1.0\Project\Peripheral_Examples\IO_Toggle\EWARM\IO_Toggle.eww
をダブルクリックするとEWARMが起動すると思います.

「プロジェクト」 -> 「すべてを再ビルド」をしてエラーがないことを確認し,

「プロジェクト」 -> 「ダウンロードしてデバック」でデバックします.

「デバック」 -> 「実行」でデバックを実行します.

工場出荷状態で入っているサンプルもボード上のLEDを点滅させるものなので,わかりにくいですが,LEDが光ります.

他のサンプルとしては,
STM32F4-Discovery_FW_V1.1.0\Project\Audio_playback_and_record\EWARM\Audio_playback_and_record.eww
を同じようにデバックして,ボード上のDCジャックに適当なイヤホンなどを差し込むとサンプルの音が繰り返し聞こえます.

こんなこともできるんですね.

どんどん遊んでいきたいと思います.

参考にしたサイト

【コラム】セカンド・オピニオン (414) MCUで遊ぼう Part2 (5) | パソコン | マイナビニュース
http://news.mynavi.jp/column/sopinion/414/index.html



STM32F4-Discoveryの開発環境構築 (EWARM)

ここの続きですが,今度は開発環境を構築します.


○○○○に怖いものなんてない!!: STM32F4-Discoveryを買いました.
http://kowaimononantenai.blogspot.jp/2012/10/stm32f4-discovery.html

ここで問題なのが,開発環境がいろいろあり,それぞれに一長一短があるらしいです.


  • 「MDK-ARM」

ARM純正の開発環境です.
ARM純正なので,今後STMシリーズではないARMを使う機会があっても同じ開発環境でも高い確率でつかえるとおもいます.
無料で使うとなると評価版になってしまうので,ビルドした後のファイルの容量が32Kバイト以上になるプログラムは使うことができません.

  • 「EWARM」

IAR Systems社が作った開発環境です.
この開発環境の売りはなんと言っても「日本語で使える」ということです.
また,この開発環境も「MDK-ARM」よりは確率が低いとしても,他のシリーズのARMでも使えるようです.
これも,無料で使うとなると評価版になってしまうので,ビルドした後のファイルの容量が32Kバイト以上になるプログラムは使うことができません.

  • 「TrueSTUDIO」

STM社が作った開発環境です.
この開発環境は無料でも「コードサイズの制限がない」というメリットがあります.
STM社が作ったものなので,STMシリーズ以外のARMでは使えないと思います.

自分的には他のARMでも使いたいので「TrueSTUDIO」以外,
また,日本語の使いやすさをとって
「EWARM」
にしました.

まず,IAR社のHPでDownloadのところにいきます.


Download evaluation software for embedded systems - IAR
http://www.iar.com/jp/Service-center/Downloads/


下の写真の様にプロセッサは「ARM」の「コードサイズ限定版」をクリックしてください.


初めてダウンロードするときはユーザ登録が必要になるのでユーザ登録をしてください.
登録すると「ライセンスNo」と「ライセンスキー」が表示されるので,それらをテキストエディタにコピーをして保存しておいてください.ダウンロードするときに使います.

ライセンスNoやライセンスキーが表示されたウィンドウの上の方にある「ソフトウェアダウンロード」の日本語版をクリックしてインストーラーをダウンロードしてください.

インストーラーを起動すると次のようなものが出てくるので赤いところをクリック.


すると,インストールが始まります.
やってみると結構時間がかかります.

インストールが終わったら,「リリースノートを読む」や「EWARMを起動する」のチェックマークははずしてください.



これで終わりですが,次はデバッガ用の「ST-Link」用のドライバを入れます.

EWARMをインストールするとドライバのインストーラも一緒にダウンロードされているので,デフォルトのインストール先の場合は
C:\Program Files (x86)\IAR Systems\Embedded Workbench 6.4 Kickstart\arm\drivers\ST-Link\ST-Link_V2_USBdriver.exe
です.
これをクリックするとインストールが始まります.
インストールが終わったらSTM32F4をPCにさします.

自分はここで自動的にドライバが当たるのかなと思いましたが,デバイスマネージャーを見てみるとあたっていません.
ここで,STM32F4の不明のドライバのところで「ドライバの再検索」をやり,ドライバを当てました.

次は,サンプルプログラムをダウンロードして実際に実行してみたいと思います.

#############################################################################
追記
この記事の続き

○○○○に怖いものなんてない!!: STM32F4-Discoveryでサンプルプログラムの実行
http://kowaimononantenai.blogspot.jp/2012/10/stm32f4-discovery_8.html


#############################################################################

STM32F4-Discoveryを買いました.

ちょっと前に「STM32F4-Discovery」を買いました.
買っただけで箱から出してもいなかったのですが,時間ができたのでちょっとやってみました.

まず,「STM32F4-Discovery」はこれです.


開けるとこんな感じです.

スペックは次のサイトで確認してください.


STM32F4DISCOVERY - STMicroelectronics
http://www.st.com/jp/evalboard/product/252419.jsp



STM32F4-DISCOVERY: マイコン関連 秋月電子通商 電子部品 ネット通販
http://akizukidenshi.com/catalog/g/gM-05313/

いろいろついているので,多くて書きませんが,これで「1700円」はやっぱりすごいです.

早速,開発環境のインストールといきたいところですが,どうやらこれには,工場出荷時点でサンプルが書き込まれているらしいです.

なので,初期不良の確認のためにも,まずすでに書き込まれているサンプルをやりましょう.

といってもただ,これとPCをUSBでつなげるだけで自動的に実行されます.

サンプルはボード上のLEDを規則的に光らせるものらしいです.


自分の環境ではサンプルは動きましたが,PCのほうはこれのドライバの取得を失敗しているようです.

しかし,今はこのままでも大丈夫らしいです.


次は開発環境(EWARM)の構築について書きます.

###############################################################################
追記
続きの記事

○○○○に怖いものなんてない!!: STM32F4-Discoveryの開発環境構築 (EWARM)
http://kowaimononantenai.blogspot.jp/2012/10/stm32f4-discovery-ewarm.html


###############################################################################