2018年1月15日月曜日

「独習 C# 新版」レビュー

先月中旬(2017/12/15)に久々にC#の解説書が発売になりました。
山田祥寛 著「独習C# 新版」です。前書「独習C# 第3版」の発売から7年ぶりに新版が出版されました。C#のバージョンも4.0から7.1までと最新の言語仕様ついてまで解説されています。

数々のC#本は発売されていますが、言語仕様についての解説がされている本はあまり多くはないと思います。

第1章から第4章
 C#についての基本的な説明です。変数や制御構文などプログラミング言語の使用についての解説です。他の言語の経験があればそれほど難しい内容ではないと思います。

第5章、第6章
 標準ライブラリ、コレクションといったC#(あるいは.Net)独自機能についての解説になります。かならずしもC#だけというわけではないですが、この章をよめば.net frameworkが提供している便利な機能を利用するのに参考になるでしょう。

第7章から第9章
 C#におけるオブジェクト指向プログラミンについての解説がされています。結構ボリュームがあって一度読んだだけでは理解できないかもしれません。しかし、丁寧な説明がされているので何度か読み直せばしだいに理解できると思います。

第10章
 ラムダ式、LINQといった使いこなせるとコーディングの効率を上げることができる機能についての解説がされています。

第11章
 マルチスレッド処理、ダイナミック型、イベントなどWindowsアプリケーションを作成するときによく使う機能についての解説がされています。


すでに他の言語の経験がある人は前半は軽く読み飛ばしても大丈夫だと思います。第5章以降はC#独自の機能も入ってくるのでじっくり腰を落ち着けて読み進めるのがいいでしょう。サンプルプログラムも基本短い(たぶん一番長くても見開き2ページ分まで)ものが多いので解説を読みながら、プログラムの確認をすることができます。また図表もたくさんあるので大量の解説文とにらめっこしながら読み進めるということもありません。一度で内容を理解できなくても繰り返し、読み進めれば理解を深めることができるのではないでしょうか。

 この本ではWPF/UWPといったGUIアプリケーションの解説はほとんどありません。基本的にサンプルプログラムはコンソールアプリケーションです。よってWindows用アプリケーションを作成したい場合には他の入門書を参考にする必要があります。
 C#の言語仕様についてより詳しく勉強したい人にお勧めします。また、現在MSでは大量のサンプルプログラムをGitHub上で公開しています。それらのサンプルプログラムを読む際に本書を手元に置いておくと、プログラムの内容についてより理解ができるのではないでしょうか。


2016年1月13日水曜日

Windows10 IoT Core アップデート 履歴

しばらくこちらへの投稿はしていなかったのですが、Windows10 IoT Coreに関してメモ的な内容はこちらにも書いていこうかと思っています。

ちょうど先日(2016年1月11日付)アップデートの告知がありました。


これを機会にIoTCoreのリリース履歴を簡単にまとめてみたいと思います。


2015年4月29日 Preview版限定リリース

2015年5月12日 修正リリース

2015年6月24日 最終候補版リリース

2015年7月29日 正式版リリース(Build10240)

2015年9月25日 Septemberリリース(Build10531) 

2015年10月15日 Octoberリリース(Build10556) シリアルポートが使えるようになった。

2015年12月4日 Decemberリリース(Build10586) 国内のWifiアダプターが利用できるようになった。DragonBoard410cに対応

2016年1月11日 Januaryリリース(Build10586.63)<--現在はここ


正式版リリースからほぼ1か月~1か月半でアップデートがありますね。


2015年4月5日日曜日

RaspBerryPi2でプライベートクラウドに挑戦(2)---LXCのインストール

RasPi2でクラウド環境を構築していくわけですが、どのOSSで構築するのか検討した結果CloudStackにしました。また、仮想化環境についてはRasPi2の性能も考えてLXCでやってみることにします。

まず、CloudStackをインストールする前に仮想化環境のチェックのためLXCをインストールしてみました。

OSはUbuntuに変更しています。OSイメージはこちらから入手しました。

LXCのインストールは特別なことはなく、「sudo apt-get install lxc」でインストールできます。

Raspbianでも同じようにインストールできるのですが、仮想環境をスタートするときに「/cgroupがない」といって怒られるので、前もって

「sudo mkdir /cgroup」
「sudo mount -t cgroup cgroup /cgroup」

を実行してください。

さて、UbuntuでのLXCですが、なぜか「lxc-list」コマンドがありません。「lxc-ls」コマンドは使えるので困ることはあまりないのですけども。Raspbianでは両方のコマンドが使えます。

テンプレートについてはUbuntuの方が多くあるようです。

現時点では以下のようになっています。
---------------------------------------------------------------------------
linaro@raspberry:/usr/share/lxc/templates$ ls -al
total 352
drwxr-xr-x 2 root root  4096 Apr  4 08:52 .
drwxr-xr-x 6 root root  4096 Apr  4 08:52 ..
-rwxr-xr-x 1 root root 10789 Oct 10 04:54 lxc-alpine
-rwxr-xr-x 1 root root 13625 Oct 10 04:54 lxc-altlinux
-rwxr-xr-x 1 root root 10786 Oct 10 04:54 lxc-archlinux
-rwxr-xr-x 1 root root  9446 Oct 10 04:54 lxc-busybox
-rwxr-xr-x 1 root root 29293 Oct 10 04:54 lxc-centos
-rwxr-xr-x 1 root root 10150 Oct 10 04:54 lxc-cirros
-rwxr-xr-x 1 root root 14576 Oct 10 04:54 lxc-debian
-rwxr-xr-x 1 root root 17427 Oct 10 04:54 lxc-download
-rwxr-xr-x 1 root root 47561 Oct 10 04:54 lxc-fedora
-rwxr-xr-x 1 root root 27808 Oct 10 04:54 lxc-gentoo
-rwxr-xr-x 1 root root 13961 Oct 10 04:54 lxc-openmandriva
-rwxr-xr-x 1 root root 13869 Oct 10 04:54 lxc-opensuse
-rwxr-xr-x 1 root root 40371 Oct 10 04:54 lxc-oracle
-rwxr-xr-x 1 root root 11837 Oct 10 04:54 lxc-plamo
-rwxr-xr-x 1 root root  6851 Oct 10 04:54 lxc-sshd
-rwxr-xr-x 1 root root 25489 Oct 10 04:54 lxc-ubuntu
-rwxr-xr-x 1 root root 12401 Oct 10 04:54 lxc-ubuntu-cloud
---------------------------------------------------------------------------

初回仮想環境を作成するときは約10分ほどかかります。2回目以降はキャッシュからコピーするので数十秒で作成できるようになります。

操作に関してはこちらのサイトを参考にさせていただきました。
http://www.server-world.info/


2015年4月2日木曜日

RaspBerryPi2でプライベートクラウドに挑戦(1)

RaspberryPi2(以下RasPi2)が発売されて、すぐに購入してみました。なんとなく今は3台手元にあります。
特に使い道もなくしばらく箱に入った状態だったのですが、どうせ複数台あるならクラスター作ったりHPCっぽくしてみたりできないかなと色々調べてみるとOpenStackやCloudStackなどでプライベートクラウドを作ることができそうなので、挑戦してみることにしました。

クラウドといえば使ったことがあるのはMicrosoftAzureだけなので、OSSのクラウド環境については勉強しつつやっていくことになります。

最初はRasPi2がどれくらいの性能(RasPiB+より6倍速いらしい)があるのか気になったので、ベンチマークを行ってみました。

ベンチマークの対象はRasPi2,Edison,MicrosoftAzure VM Basic A0~A3です。
RasPi2には最新のRaspbianをインストールしました。Edisonは標準Linuxをインストールしています。
AzureについてはDebianのイメージが標準で用意されていないので、デプロイ王子こと廣瀬一海氏が作成したDebianイメージを利用させていただきました。

ベンチマークにはUnixBenchの最新版を使っています。

各マシンはOSをインストール後必要なアップデートを行ったのみの状態です。
マシンごとのアーキテクチャが全く違うので、DhrystoneとWhetstoneおよびSystem Benchmarks Index Scoreのみ比較しています。

以下は表とグラフです。





グラフを見るとRasPi2はAzureA0とほぼ同じくらいの性能になるようです。
簡易なWebサーバぐらいなら余裕でインターネットに公開できそうです。

今日はここまでとします。
次回はプライベートクラウドを構築するのに必要なOSSについて書いてみたいと思います。

2015年2月15日日曜日

Galileo Gen2 + WindowsIoT + node.js

RaspberryPi2でWindowsIoTが対応するみたいなのでRspberryPi2をほしいのですが、いまだに手に入れられません・・・

さて、1月27日にWindowsIoTのアップデートがあって、node.js(Win32アプリが色々動く)を動作させる方法が公開されたのでやってみました。

手順はこちらで公開されています。

実際にやってみました。

1.最新版のWindows imageを用意します。最新のイメージは2014/11/21の日付です。それとapply-bootmedis.cmd(2015/2/5)もダウンロードしておきます。microSDにイメージを展開して起動するのを確認しましょう。起動メディアの作成方法はこちらが参考になります。


2.Windowsが起動したら、適当なところにフォルダを作成します。「C:\node」と作成しました。Telnetでもいいですが、GalileoWatcherで右クリックして「Open Network Share」を選ぶとすぐにCドライブにアクセスできるのでそちらから作成するのが色々楽です。

3.nodejs.orgからWindows32bit版のnode.exeをダウンロードして、先ほど作成したフォルダへコピーしておきます。

4.最新のnpm zipファイルをこちらからダウンロードして、展開してから中身をnode.exeと同じフォルダにコピーします。(ダウンロードできる最新のnpmのバージョンは1.49でした、しかし実際には2.6以上のバージョンに上がっているのでインストール後「npm update」しておきましょう。問題なければ最新版にアップデートできます。)

5.Win32アプリを動作させるのに必要な「User32.dll」をビルドします。予めVisualStudio Express 2013 for WindowsDesktop等を用意してください。こちらからファイル一式をダウンロードして展開後ビルドしましょう。出来上がった「User32.dll」をnode.exeと同じフォルダにコピーします。

6.telnetでGalileoにアクセスして、C:\nodeフォルダに移動します。次にコマンドライン上で
  「mkdir %systemroot%\system32\config\systemprofile\AppData\Roaming\npm」
  「setx path "%path%;c:\node" /M」
  「shutdown /r /t 0」

7.再起動後node.jsが使えるようになっています。

8.「npm update」でnpmを最新版にしておきましょう。

これ以降は通常のWindowsでnode.jsを使う場合と同じです。
expressをインストールして動作することも確認できました。

Node.js Sampleページではインストール後にLチカの動作させていますね。(自分はまだ試していません)

node.jsが動作するようになって色々サーバーを動かすことが可能になりますね。

2014年11月6日木曜日

Edisonでデスクトップ表示(VNC接続)

先日、EdisonでDebian(ubilinux)が動いたとツイートしたら今までにないくらいリツイートされて驚きました。

さて、EdisonはすでにLinuxボード化になっているのですが、やはりデスクトップ表示もしてみたいということでやってみました。もちろんEdisonにはモニター出力がありませんので、リモートデスクトップでやってみることにしました。

こちらのIntelのGalileoにVNC接続するを参考にさせていただきました。

構成としてはX Window環境+Xvfb(仮想ディスプレイ)+VNCサーバーです。

X Window環境(デスクトップ)としてLXDEにしてみました。

コマンドラインからデスクトップ環境を「apt-get install lxde」でインストールできます。

続いて仮想ディスプレイ「Xvfb」も「apt-get install xvfb」でインストールします。

VNCサーバーとしてx11vncを「apt-get install x11vnc」でインストールします。

以上でインストールは完了しました。

次に実行方法ですが、

最初に仮想ディスプレイを立ち上げます。
コマンドラインで
「export DISPLAY=:1」
「Xvfb :1 -screen 0 1024x768x24 &」

続いて、Windowマネージャーを起動します。LXDEにはOpenBoxが含まれているので
「openbox &」

次にVNCサーバーを起動します。
「x11vnc -display :1 -bg -nopw -listen 0.0.0.0 -xkb」

途中フォントがないとか色々表示されますがそのままでも大丈夫でした。
これでEdison上でデスクトップ環境が動くようになりました。

あとはホストPCからVNCクライアントで接続すればデスクトップが表示されます。

最初は真っ黒ですが、右クリックするとメニューが表示されます。


ブラウザーを立ち上げてみました。

とりあえずEdisonでデスクトップ環境が使えることを確認できました。
自動起動などの設定はあまり詳しくないので試していません。

標準のYocto Linuxでも同じ手順(LXDEが動くかどうかはわかりませんが)でできると思います。(もう一度Yocto Linuxに戻してもいいのですが、eMMCの書き換え寿命が気になるのであまりやりたくないのです。Edisonモジュールだけ追加で購入しようかな)

次はWebカメラを接続してブラウザに表示できるか試してみたいと思います。


2014年11月2日日曜日

Debian(ubilinux) on Edison

Edisonの公式LinuxイメージはYocto Linuxになります。ベースは Ångstrom Linuxでしょうか。
公式イメージでは比較的コンパクトな構成になっているので、意外と使いにくい(エディタはViとか、パッケージ管理システムはopkgとか)と思います。

既にDebian(Wheezy)ベースのイメージが公開されています。

実際にインストールしてみました。
環境はWindowsからのインストールです。

-----------------------------------------------------------------------
準備
-----------------------------------------------------------------------
ubilinuxのサイトからイメージファイルをダウンロードします。
(Galileo用もあるみたいです。後日試してみようかと思います。)
ダウンロードしたファイルはgz形式なので7zip等で展開しましょう。
次にファームウェア更新用のプログラム(dfu-util.exe)をダウンロードします。
ダウンロードしたファイルをイメージファイルを展開したフォルダへ移動しておきます。

こちらのサイトからダウンロードしてください。

-----------------------------------------------------------------------
更新の実行
-----------------------------------------------------------------------
EdisonをUSBケーブルでPCに接続しておきます。(途中経過を見るのに2本とも接続してもいいでしょう)

コマンドプロンプトを管理者権限で起動します。

イメージファイルを展開したフォルダへ移動します。

「flashall.bat」を実行します。

リブートするように指示が表示されるので、一旦Edisonの電源を切ってからもう一度入れなおします。



しばらくするとフラッシュメモリの書き換えが始まります。このときシリアルコンソールを開いておくと作業の経過を見ることができます。


書き換えが終わるとしばらくして自動的にリブートします。

起動するとログインプロンプトが表示されるので、ユーザー「root」、パスワード「edison」でログインします。

-----------------------------------------------------------------------
ネットワークの設定
-----------------------------------------------------------------------
イメージを書き込んだ直後はWifiの設定が完了していないので、Wifiで接続できるようにします。

「/etc/network/interfaces」ファイルを以下のように編集します。

10行目 「#auto wlan0」->「auto wlan0」
13行目 「wpa-ssid Emutex」->「wpa-ssid 自分のアクセスポイントのSSID
14行目 「wpa-psk passphrase」->「wpa-psk 自分のアクセスポイントの共有キー

保存してから念のためにリブートします。

再起動時にDHCPサーバーが見つかればネットワークの設定は完了です。


あとは apt-get update & apt-get upgrade を実行してシステムの更新や、rootパスワードの変更などをしておきましょう。

ここまでくれば、あとはDebianが動くLinuxマシンと一緒です。サーバーにするもよし、GPIOも利用できるのでセンサーを付けてみるもよし(ただしArduinoIDEで動くかどうかは試していません。)

純正Linuxと同じくpythonやNode.jsはインストール済みなのですぐにサーバーとして使うことはできそうです。

-----------------------------------------------------------------------
その他
-----------------------------------------------------------------------
現在わかっている問題点(?)として、標準LinuxではホストPC上にディスクがマウントされるのがドライバーが読み込めなくてマウントされなくなります。今のところ特に不都合はなさそうなのですが・・・・

もし、標準Linuxに戻したい場合には公式サイトから最新の「Edison Yocto complete image」をダウンロードして展開しておきます。展開したフォルダに「dfu-util.exe」をコピーしてから管理者コマンドプロンプトで「flashall.bat」を実行すれば元に戻すことができます。手順は一緒になります。


以上 EdisonにDebianをインストールする手順でした。