2015年10月10日土曜日

GAITを受験した

会社から、「GAIT受けなさい。受けるまでフォローし続けますよ。」と言われたので、受験しました。

GAITとは?


いきなりGAITとか言われても何のことやらサッパリだったので、とりあえずGAIT公式ホームページ(https://www.gait.org/)を覗いてみたところ、以下のように書かれていました。

GAITは、ITの資格試験ではありません。
総合的なITスキルを可視化する
世界共通のアセスメントツールです。

資格試験ではないと書いてあるものの、スコア別の認証制度があるようです。

Gold:スコア700〜990
Silver:スコア480〜699
Bronze:スコア300〜479
※スコア299以下は不合格

ちなみに、受験者の平均点は公式ホームページのアセスメントサマリー(https://www.gait.org/about-gait/result/)に公開されています。
2015年10月時点で確認できる結果では、社会人平均402点、SIer平均415点でBronzeの範囲のようです。
なお、ネットで受験者の体験談を調べてみると、出題範囲が広い・問題難しい・制限時間短いとのことで、なかなか厳しそうで、受験前は少しビビってました。

GAIT受験結果


実際受けてみると、計算問題はなかったものの、問題数が132問あって1問1問じっくり考えていると、とたんに時間がなくなります。それに出題範囲は評判通り広く、知らない単語ばっかりでした。正直なところ、回答はそれっぽいものをカンで選ぶことが大半でした。

もうどうでもいいや感が強くなり、とりあえず全部回答して結果を確認しました。


なんとか平均点は超えられました!
平均点より高かったので、上司に申し訳なさそうに報告せずに済みそうです。

一応受験してみての感想としては、RAIDの問題が結構でるので、各RAIDの概要や特徴をおさえておくと点数の底上げが(比較的簡単に)できそうです。

iPad mini 4を買った!

iOS9のSplit Viewを体験してみたくて、iPad mini 4(Wi-Fiモデル/16GB/ゴールド)を衝動買いしてしまった!


iOS Developer Programも更新したし、iPad mini4でiOSプログラミングを楽しみたいと思います。




2015年9月27日日曜日

Raspberry PiにUSBカメラを接続してみた

以前ビデオ通話用に購入したカメラを使わずに放置したままになっていて、もったいなかったので、Raspberry Piに接続して監視カメラ化してみました。

手順は簡単3ステップです。

  1. USBカメラ接続
  2. MJPG-streamerをインストール&起動
  3. ブラウザからアクセス

1.USBカメラ接続

ELECOMのUCAM-DLE300T Seriesと印字されたカメラを使いました。
ちょっと心配でしたが、Raspberry PiにUSB接続したら認識してくれました。

pi@raspberrypi ~ $ lsusb
Bus 001 Device 002: ID 0424:9512 Standard Microsystems Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp.
Bus 001 Device 008: ID 056e:700e Elecom Co., Ltd

lsusbコマンドの実行結果4行目にElecomの文字が表示され、認識されていることがわかります。

2.MJPG-streamerをインストール&起動

MJPG-streamerはパッケージ化されていないので、まずはsubversionと画像処理ライブラリをインストールします。

$ sudo apt-get install -y subversion libjpeg-dev imagemagick

次にMJPG-streamerのソースをダウンロードしてインストールします。

$ svn co https://svn.code.sf.net/p/mjpg-streamer/code/mjpg-streamer mjpg-streamer
$ cd mjpg-streamer
$ make
$ sudo make install

インストール後、mjpg-streamerディレクトリ内に起動スクリプトを作成します。
ここでは「start_stream.sh」とします。また、アクセス先ポート番号を8080、さらにアクセス時にID/PWの入力が必要なように設定します。

#!/bin/sh

PORT="8080" #ポート番号
ID="user" #ID
PW="passward" #パスワード
SIZE="320x240" #画面サイズ
FRAMERATE="10" #フレームレート
export LD_LIBRARY_PATH=/usr/local/lib
./mjpg_streamer \
-i "input_uvc.so -f $FRAMERATE -r $SIZE -d /dev/video0 -y" \
-o "output_http.so -w /usr/local/www -p $PORT -c $ID:$PW"

保存後、実行権限を付与します。

$ chmod 755 start_stream.sh

そして、スクリプトを実行します。

$ sudo sh start_stream.sh

3.ブラウザからアクセス

別のマシンでブラウザを立ち上げて、http://<Raspberry PiのIPアドレス>:8080にアクセスすると以下のようにページが表示されます。Streamタブでは動画を確認することができます。


また、Staticタブからは静止画像を取得することができます。

2015年9月26日土曜日

GalileoでやっとLチカできた

■Intel Galileo

Intelが発売したx86 CPUを搭載したLinuxボードで、Arduinoでもあります。登場時は雑誌で特集が組まれたり、結構話題になっていた印象でしたが、Raspberry Piにとってかわるようなことはなく、今ではあまり賑わっている印象はありませんね(キャッチアップできていないだけで、実は賑わっているのかもしれませんが...)。

私は、発売当時に第1世代Galileoを購入したものの、MacでArduino IDEが起動せずじまいで1年以上放置してしまっていたのですが、最近になってやっとLチカまでこぎ着けました。

■Lチカまでの道のり

結構苦労しました。成功までの流れを以下に記載しておきます。

①OS X Yosemite on MacBook Late 2009
→Arduino IDE 1.6.0、FirmwareUpdate 1.0.4が起動せず失敗。

②Windows 7 64bit on ThinkPad T61
→デバイスドライバインストール
  (ドライバはIDE1.6.0を解凍してできたフォルダ内のdriversに入っている)
 →Arduino IDE 1.6.0は起動し、Lチカのスケッチを実行したもののLチカせず失敗。
  →[ツール] > [ボード] > [Intel® Galileo]を選択
  →[ボード] > [Galileoが認識されたCOM番号]を選択
 →FirmwareUpdate 1.0.4でファームウェアアップデートを試みるものの失敗。
  →怖いけどUSBケーブル引き抜いてGalileo再起動させました。
  →Java7(x64)の状態で止まっていたので、Java8(x86)に更新して、
   環境変数JAVA_HOMEを変更。
  →x86版Java8になったのはオンラインアップデータを使用したため
 →この状態でファームウェアアップデートを実行したら成功しました。
  →成功したのはJava更新のおかげか、タイミングなのかは分かりません。
 →Arduino IDE 1.6.0で[ファイル] > [スケッチの例] > [01.Basics] > [Blink]を
  実行したところLチカ成功!

Windowsではできたけど、Macでできないままなのは悔しいので、マシンを変えてチャレンジ。

③OS X Yosemite on MacBookPro Mid 2014
→Arduino IDE 1.6.0を起動したら、レガシーサポート用の
  Java6(Java for OS X 2015-001)をインストールせよという画面が
  表示された(MacBook Late 2009ではなんで表示されなかったんだろう...)。
 →https://support.apple.com/kb/DL1572?locale=ja_JP から
  javaforosx.dmgをダウンロード。

④OS X Yosemite on MacBook Late 2009
→ダウンロードしたjavaforosx.dmgをこっちに持ってきてインストール。
 →インストール後Arduino IDE 1.6.0を起動したら、起動成功
  (環境変数JAVA_HOMEの設定等は一切していない)。
 →[ツール] > [ボード] > [Intel® Galileo]を選択
 →[ボード] > [/dev/cu.XXXXX]を選択(/dev/tty.XXXXXを選択してはダメらしい)
 →Blink実行でLチカ成功!

【Lチカ成功時の写真(GPとプリントされた横のLEDが点灯しています)】

2015年8月2日日曜日

Gnuplot連携ライブラリ(C言語)

大学時代から数値計算結果のプロットは、もっぱらGnuplot(http://www.gnuplot.info/)を使っています。なんだかんだお手軽で便利なんですよねGnuplot。

C/C++から呼び出すときには、popen(3)でGnuplotを呼び出して要件に合わせてプロットするコードを書きますが、毎度毎度書くのは面倒で、いつかはライブラリ化しようと思いつつも、大学時代に自分用に作ったプロット用関数群を使用し続けていました。

最近久しぶりにコード書いてて、コードからGnuplot呼び出そうとしたときに、せっかくだからライブラリ化しよう思いました。大学時代の自分なら闇雲にいきなりコードを書いてしまったでしょうが(車輪の再発明が大好きだったのです)、当時よりは少しだけ冷静に行動できるようになっていますので、既に公開されているライブラリはないか探してみました。そして探してみたら、あっさり見つかりました。

gnuplot interfaces in ANSI Chttp://ndevilla.free.fr/gnuplot/

まだ、サンプルコードいじった程度ですが、シンプルで使いやすそう。自分で必要な機能を追加するにしても、これをベースに作っていこうかなと思いました。

/*
 * Examples of gnuplot_i.c usage
 */

#include <stdio.h>
#include <stdlib.h>

#include "gnuplot_i.h"

#define SLEEP_LGTH  2
#define NPOINTS     50

int main(int argc, char *argv[]) 
{
    gnuplot_ctrl    *   h1,
                    *   h2,
                    *   h3,
                    *   h4 ;
    double              x[NPOINTS] ;
    double              y[NPOINTS] ;
    int                 i ;

    /*
     * Initialize the gnuplot handle
     */
    printf("*** example of gnuplot control through C ***\n") ;
    h1 = gnuplot_init() ;

    /*
     * Slopes
     */
    gnuplot_setstyle(h1, "lines") ;
    
    printf("*** plotting slopes\n") ;
    printf("y = x\n") ;
    gnuplot_plot_slope(h1, 1.0, 0.0, "unity slope") ;
    sleep(SLEEP_LGTH) ;

    printf("y = 2*x\n") ;
    gnuplot_plot_slope(h1, 2.0, 0.0, "y=2x") ;
    sleep(SLEEP_LGTH) ;

    printf("y = -x\n") ;
    gnuplot_plot_slope(h1, -1.0, 0.0, "y=-x") ;
    sleep(SLEEP_LGTH) ;
    

    /*
     * Equations
     */

    gnuplot_resetplot(h1) ;
    printf("\n\n") ;
    printf("*** various equations\n") ;
    printf("y = sin(x)\n") ;
    gnuplot_plot_equation(h1, "sin(x)", "sine") ;
    sleep(SLEEP_LGTH) ;

    printf("y = log(x)\n") ;
    gnuplot_plot_equation(h1, "log(x)", "logarithm") ;
    sleep(SLEEP_LGTH) ;

    printf("y = sin(x)*cos(2*x)\n") ;
    gnuplot_plot_equation(h1, "sin(x)*cos(2*x)", "sine product") ;
    sleep(SLEEP_LGTH) ;


    /*
     * Styles
     */

    gnuplot_resetplot(h1) ;
    printf("\n\n") ;
    printf("*** showing styles\n") ;

    printf("sine in points\n") ;
    gnuplot_setstyle(h1, "points") ;
    gnuplot_plot_equation(h1, "sin(x)", "sine") ;
    sleep(SLEEP_LGTH) ;
    
    printf("sine in impulses\n") ;
    gnuplot_setstyle(h1, "impulses") ;
    gnuplot_plot_equation(h1, "sin(x)", "sine") ;
    sleep(SLEEP_LGTH) ;
    
    printf("sine in steps\n") ;
    gnuplot_setstyle(h1, "steps") ;
    gnuplot_plot_equation(h1, "sin(x)", "sine") ;
    sleep(SLEEP_LGTH) ;

    /*
     * User defined 1d and 2d point sets
     */

    gnuplot_resetplot(h1) ;
    gnuplot_setstyle(h1, "impulses") ;
    printf("\n\n") ;
    printf("*** user-defined lists of doubles\n") ;
    for (i=0 ; i<NPOINTS ; i++) {
        x[i] = (double)i*i ;
    }
    gnuplot_plot_x(h1, x, NPOINTS, "user-defined doubles") ;
    sleep(SLEEP_LGTH) ;

 printf("*** user-defined lists of points\n");
    for (i=0 ; i<NPOINTS ; i++) {
        x[i] = (double)i ;
        y[i] = (double)i * (double)i ;
    }
    gnuplot_resetplot(h1) ;
    gnuplot_setstyle(h1, "points") ;
    gnuplot_plot_xy(h1, x, y, NPOINTS, "user-defined points") ;
    sleep(SLEEP_LGTH) ;


    /*
     * Multiple output screens
     */

    printf("\n\n") ;
    printf("*** multiple output windows\n") ;
    gnuplot_resetplot(h1) ;
    gnuplot_setstyle(h1, "lines") ;
    h2 = gnuplot_init() ;
    gnuplot_setstyle(h2, "lines") ;
    h3 = gnuplot_init() ;
    gnuplot_setstyle(h3, "lines") ;
    h4 = gnuplot_init() ;
    gnuplot_setstyle(h4, "lines") ;

    printf("window 1: sin(x)\n") ;
    gnuplot_plot_equation(h1, "sin(x)", "sin(x)") ;
    sleep(SLEEP_LGTH) ;
    printf("window 2: x*sin(x)\n") ;
    gnuplot_plot_equation(h2, "x*sin(x)", "x*sin(x)") ;
    sleep(SLEEP_LGTH) ;
    printf("window 3: log(x)/x\n") ;
    gnuplot_plot_equation(h3, "log(x)/x", "log(x)/x");
    sleep(SLEEP_LGTH) ;
    printf("window 4: sin(x)/x\n") ;
    gnuplot_plot_equation(h4, "sin(x)/x", "sin(x)/x") ;
    sleep(SLEEP_LGTH) ;
    
    /*
     * close gnuplot handles
     */


    printf("\n\n") ;
    printf("*** end of gnuplot example\n") ;
    gnuplot_close(h1) ;
    gnuplot_close(h2) ;
    gnuplot_close(h3) ;
    gnuplot_close(h4) ;
    return 0 ;
}

またやってしまった

前回の投稿をしてから1年以上経ってしまった・・・

この1年以上の間にいろいろなことがありました。MDM(Mobile Device Management)製品(※)にどっぷりだったり、MacBook Pro 15-inch, Mid 2014を購入したり、プライベートでもいろいろあったりと、とにかく色々あったのでした。

プログラミング関連の知識・スキルを高めたいと思っていたけど、仕事が忙しかったりして全然できず、むしろ錆び付いてしまったけど、また徐々にやっていこうと思って投稿を再会しました。

(※)市場を牽引するベンダーがEMM(Enterprise Mobile Management)って言葉をつくってたりします。