2012年12月17日月曜日

PhoneGapのAPIを利用してDatabaseを簡単に操作する

このエントリーをはてなブックマークに追加
PhoneGapのAPIを利用するとDatabaseを簡単に操作できるようです。そのAPIを利用して、「Hello World!」の文字を格納したテーブルを作成し、そのテーブルから「Hello World!」を取得して画面に表示するプログラムを作成しました。


2012年12月15日土曜日

PhoneGapとjQuery Mobileを使ったネイティブアプリ開発

このエントリーをはてなブックマークに追加
iOSやAndroidのネイティブアプリをjQuery Mobileで作りたい。PhoneGapというフレームワークを使えばそれが可能なようなので、さっそくPhoneGapとjQuery MobileでHello World!の表示まで試してみました。




2012年12月12日水曜日

2012年12月9日日曜日

PhoneGapによるiOSアプリ開発環境を構築する(Xcode編)

このエントリーをはてなブックマークに追加
PhoneGapはiOSやAndroidなどをサポートするオープンソースのモバイルアプリケーション開発フレームワークです。このフレームワークを使うことで、HTMLやJavaScriptでアプリが作れるようです。そこで、まずはPhoneGapをXcodeから利用できる開発環境を構築しました。


2012年10月15日月曜日

スタイルを含んだ文字から文字だけをコピーする『FormatMatch』

このエントリーをはてなブックマークに追加
MacbookでWebサイトの気になる文章をEvernoteにコピーしたり、Evernoteで編集したブログの記事をBloggerにコピーしたりするとき、コピー元のスタイルを含んだままコピーされてしまいます。それを手軽に解決してくれるのが『Format Match』です。


Format Match


Format Matchを起動すると、メニューバーにそのアイコンが表示されます。アイコンが活性になっているときは、スタイルを含んだ文章をコピーしてもスタイルが取り除かれた状態でコピーされます。アイコンが非活性になっているときは、文章はスタイルを含んだ状態でコピーされます。

アイコンの活性、非活性はクリックで切り替えられます。アイコンを活性から非活性にするときはDeactivate、非活性から活性にするときはActivateをクリックします。シンプルでとても使いやすいです。

2012年9月9日日曜日

大切な予定までの日数をカウントする『あとマル』

このエントリーをはてなブックマークに追加
あとマルは直近の特定日までの日数を表示してくれるアプリです。日時と予定を入力するだけで、その日までの残り日数をバッジに表示してくれます。バッジとはアイコンの右上に表示される赤い円のことです。


App Store:あとマル - 残り日付をバッジでカウントダウン


2012年9月7日金曜日

iOSのツールバーをUIToolBarで作成する

このエントリーをはてなブックマークに追加
iOSアプリでよく見るツールバーはUIToolBarを用いて簡単に作成できるようです。UIToolBarでツールバーを作成し、そこにiOS標準のボタンを設置して表示するプログラムを作成しました。


2012年9月5日水曜日

NSUserDefaultsを利用してアプリの起動回数をカウントする

このエントリーをはてなブックマークに追加
NSUserDefaultsクラスを利用すると、軽めの情報をiOSアプリ内へ簡単に保存したり読み出したりすることができます。このクラスを利用して、アプリの起動した回数をカウントするコードを書きました。


2012年9月2日日曜日

Objective-CのSyntaxHighlighterをBloggerで利用できるようにする

このエントリーをはてなブックマークに追加
SyntaxHighlighterはソースコードを色分けして綺麗に表示するJavaScriptのライブラリです。しかし、Objective-Cは本家のライブラリに含まれていないため、その言語を利用したい場合はそれ専用のファイルを別のサイトから持ってくる必要があります。いろいろと試して何とかObjective-CのSyntaxHighlighterをBloggerで利用できるようになったので、その導入手順をメモします。


導入手順は次の通りです。

1. SyntaxHighlighterをソースコードの色付け - SyntaxHighlighter - <設定編>の方法で設定します。
2. UNDER MY HATのSYNTAX HL BRUSHESから"Oxygen"にあるファイル(shBrushObjectiveC.js)を開いてコピーします。("Objective-C"にあるjsファイルは別もののようです)
3. 1.で設定したタグ<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPerl.js" type="text/javascript">と<script language="javascript">の間に<script></script>を記述します。
4. 3で記述した<script></script>の間に2でコピーした内容を貼り付けます。
5. 後はObjective-Cのコードを <pre class="brush: objc"></pre>で囲むと色付けされるようになります。


実行サンプルは次の通り。(色付けが少し寂しい気がしますが。。)

この導入方法は簡単で良いのですが、本家ライブラリとshBrushObjectiveC.jsを自サイトにアップロードして利用するのが本来のやり方だと思います。しかし、Bloggerではjsファイルをアップロードして利用するということが難しそうだったのでこの方法を採りました。自サイトへのアップロードはまた別の機会に。


SyntaxHighlighterの本家URL:SyntaxHighlighter
Objective-CのSyntaxHighlighter:UNDER MY HAT
導入まとめ1:ソースコードの色付け - SyntaxHighlighter - <概要編>
導入まとめ2:ソースコードの色付け - SyntaxHighlighter - <使用編>
導入まとめ3:ソースコードの色付け - SyntaxHighlighter - <設定編>
導入参考サイト1:はてなブログでSyntaxHighlighterでObjective-Cを表示
導入参考サイト2:SyntaxHighlighterでObjective-Cをきれいに表示

2012年9月1日土曜日

マルチスレッドとは・・・

このエントリーをはてなブックマークに追加
マルチスレッドプログラムについて経験値がいくらかたまったので、一度自分の知見をまとめてみようと思います。自分の知識の整理を目的としたいと思います。

スレッドとは

端的に言うと、スレッドとは、プログラムを実行する主体の最小単位です。ここで言っている主体とは、例えば、a.outという実行ファイルを実行する"そのもの"を指します。プログラムを実行するスレッドが1つであればそれをシングルスレッドプログラムと呼び、プログラムを実行するスレッドが複数であればそれをマルチスレッドプログラムと呼びます。シングルスレッドプログラムはa.outを逐次実行し、マルチスレッドプログラムはa.outを並列・並行実行します。
次にリソースの観点では、スレッドはプログラムカウンタを始めとしたレジスタ群とスタックを個別に持ちます。スレッドは、プログラムを実行する主体の最小単位であるため、それぞれに個別のプログラムカウンタとスタックを持つ必要があります。一方で、命令コードと静的データ、ヒープは、スレッド間で共有されます。これら命令コード、静的データ、ヒープを所有する主体となるのが、プロセスです。
スレッドは、必ず1つのプロセスに属します。また、1つのスレッドが2つ以上のプロセスに属することはありません。プロセスというのは、実行される実行ファイルごとのメモリ上の区切りのようなものです。プロセスごとに、命令コード、静的データ、ヒープ、スタックをメモリ上に持ちます。実行ファイルa.outを2つ同時に実行すれば、2つのプロセスがコンピュータ上に同時に存在するということになります。もちろんこのとき、それぞれのプロセスにスレッドが存在します。

シングルスレッドプログラムとマルチスレッドプログラム

シングルスレッドプログラムとマルチスレッドプログラムの実装の違いを、簡単に見てみます。マルチスレッドプログラムで用いるスレッドライブラリは、openMPとpthreadを使いました。
以下、printfを10回実行するプログラムです。環境によっては、マルチスレッドプログラムのhelloがプリントされる順番が入れ替わったりするかと思います。

singleThread.c
#include <stdio.h>

int main(void)
{
 int i;
 
 for(i = 0; i < 10; i++)
 {
  printf("hello%d\n", i);
 }
 
 return 0;
}

multiThread_openMP.c
#include <stdio.h>
#include <omp.h>

int main(void)
{
 int i;
 
 #pragma omp parallel for
 for(i = 0; i < 10; i++)
 {
  printf("hello%d\n", i);
 }
 
 return 0;
}

multiThread_pthread.c
#include <stdio.h>
#include <pthread.h>

#define NUMOF_THREADS 10

void* printHello(void* arg)
{
 printf("hello%d\n", *(int*)arg);
}

int main(void)
{
 int i;
 pthread_t threads[NUMOF_THREADS];
 int threadArg[NUMOF_THREADS];
 
 for(i = 0; i < NUMOF_THREADS; i++)
 {
  threadArg[i] = i;
  pthread_create(&threads[i], NULL, printHello, (void*)&threadArg[i]);
 }
 
 for(i = 0; i < NUMOF_THREADS; i++)
 {
  pthread_join(threads[i], NULL);
 }
 
 return 0;
}


singleThread.cは、単にprintfをfor文で回しているだけなので、特に問題ないと思います。
multiThread_openMP.cは、singleThread.cとほぼ同じです。異なるのは、openMPのヘッダをインクルードしていることと、for文の前に#pragma omp paralle forの1行があることだけです。たったこれだけで、for文のなかのprintfが並列・並行実行されます。
multiThread_pthread.cは、openMPのものと同じ並列・並行実行であるのに対して、コード量が多くなっています。これは、pthreadでは、スレッドの作成と、終了待ちを関数呼び出しで明示的に行う必要があるためです。openMPの方では、ほぼスレッドなど意識せずただfor文を並列に実行する、とプログラムしているだけでした。
上記の例を一見すると、openMPの方が簡単にマルチスレッドプログラムを作ることができます。しかし、for文の並列化はopenMPが得意とするところなので、openMPの方がコード量を少なく記述できているだけです。
世にいくつかもあるスレッドライブラリですが、それぞれに得意なところ、不得意なところがあります。得意なところは、比較的コード量が少なくなり、不得意なところはコード量が多くなるのが一般的かと思います。また、各スレッドの同期等の細かな動作を細かく制御できるスレッドライブラリは、細かく制御できる分、コード量が多めになる傾向があります。pthreadは比較的何でもできるスレッドライブラリなので、並列化のためのコード量が多めになりがちです。

まとめ

スレッドの概念、スレッドとプロセスの関係を説明し、マルチスレッドプログラムの例を見ました。スレッドライブラリはいくつもあり、それぞれに得意・不得意なところを持っていることを述べました。マルチスレッドプログラムに関して、説明しなかったしなかったことは、なぜマルチスレッドにするのか?、何をマルチスレッド化するのか?、どのようにマルチスレッド化するのか?といったことになります。こういったことは、マルチスレッドに関する本が参考になります。また、現実に使われているマルチスレッドプログラムを探しだして読むことも参考になります。


2012年8月26日日曜日

気になる色を調べたい『色彩ヘルパー』

このエントリーをはてなブックマークに追加

目の前の素敵な色や、写真に含まれている色を調べたいとき、『色彩ヘルパー(Coler Helper)』が便利です。『色彩ヘルパー』は、iPhoneやiPadで利用できるアプリで、カメラで映した映像や、端末内に保存されている画像に含まれている色を識別してくれます。


カメラで撮影中の映像に含まれるカラーをリアルタイムで表示します。iOS端末内に保存されている写真のカラーも、読み込んで表示します。



色見本では、色のサンプルが一覧になっていて、色を参照するのにとても便利です。配色に悩んだ時、このアプリがあればとても心強いと思います。 

App Store:色彩ヘルパー

2012年8月18日土曜日

CGRectContainsPointで特定の範囲がタッチされたかどうかを判別する

このエントリーをはてなブックマークに追加
CGRectContainsPointは、指定した領域に指定した位置が含まれるかどうかを判別するメソッドです。これを利用して、指定した範囲がタッチされたかどうかを判別するサンプルを書きました。


プログラム
タッチした時に呼ばれるtouchesBeganメソッドで、CGRectContainsPointを利用した分岐処理を記述しました。CGRectContainsPointの第一引数は領域、第二引数は位置を指定します。

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {

    CGRect targetRect = CGRectMake(0, 0, 44, 44);
    CGPoint location = [[touches anyObject] locationInView:self];
    if (CGRectContainsPoint(targetRect, location)) {
        NSLog(@"touched in targetRect");
    }
}


xやyといった位置や、widthやheightといった幅や高さで判別するような記述を行わなくて済むので、これで記述量が少なくなりそうです。

関連:iPhoneでのタッチやタップをtouchesBeganで検知する

2012年8月8日水曜日

Windows XPにスナップに似た機能を搭載する『WinSplit Revolution』

このエントリーをはてなブックマークに追加
Windows 7のスナップ機能はドラッグ操作で画面を整理するのに便利な機能です。慣れると手放せなくなる機能ですが、Windows XPにはその機能がありません。ただ、画面を整理するという点で、スナップに似た機能を実現するソフトウェアがありました。『WinSplit Revolution』といいます。


インストールすると、タスクトレイにアプリが表示されます。アイコンをクリックすると上図のような画面が現れます。例えば左上にウィンドウを合わせたい時は、対象のウィンドウを選択して左上矢印のボタンをクリックします。

専ら便利なのは画面整理のショートカットを作成できる点です。例えば、[Win] + [Ctrl] + 上矢印キーでウィンドウを上部に合わせるといったことができます。ショートカットの設定は[Hotkey settings]からできます。

たくさん起動したTera Termを見やすく並べたり、WordやExcel等の内容比較をやりやすくするのに便利なツールです。

2012年8月7日火曜日

MacBookにスナップ機能を搭載する『BetterTouchTool』

このエントリーをはてなブックマークに追加
スナップ機能とは、Windows 7に搭載されている機能で、ウィンドウを画面の端にドラッグすると画面のサイズを自動で調整してくれる機能です。Mac OS Xにはその機能は無いのですが、『BetterTouchTool』を使うとそんなスナップ機能が実現できます。

DL:http://blog.boastr.net/

2012年8月6日月曜日

Androidアプリの起動までを短縮するショートカットアプリ6選

このエントリーをはてなブックマークに追加

インストールしたアプリ数が多くなると、目的のアプリを見つけて起動するまでが大変になります。アプリ数が増えても目的アプリの起動までを最短で行いたい。そんな要望に応えるAndroidのショートカットアプリを6つ紹介します。

2012年8月5日日曜日

UIButtonクラスを利用してボタンを作成する

このエントリーをはてなブックマークに追加
iOS端末画面の中央に標準のボタンを表示するサンプルプログラムを作成しました。ボタンをタッチすると、ボタンの表示がHelloからWorldに変わります。


2012年8月4日土曜日

UIViewを4つ並べて配置する

このエントリーをはてなブックマークに追加
UIWindowの中にUIViewを4つ並べて配置するサンプルプログラムを作成しました。端末画面のサイズとステータスバーの高さを考慮して、UIViewのwidthとheightが均等となるようにしました。


2012年8月2日木曜日

iOS端末画面のwidthとheightを取得する

このエントリーをはてなブックマークに追加
iOS端末の画面サイズは、iPhoneならば320×480、iPadなら768×1024などです。その幅と高さは、UIScreenクラスのmainScreenメソッドで得られた画面情報から取得できました。

ステータスバーを含んだ画面サイズ
[[UIScreen mainScreen] bounds].size.width  //幅
[[UIScreen mainScreen] bounds].size.height //高さ

ステータスバーを除いた画面サイズ
[[UIScreen mainScreen] applicationFrame].size.width  //幅
[[UIScreen mainScreen] applicationFrame].size.height //高さ


確認プログラム
コメントアウトの(A)はステータスバーを隠す処理、(B)はステータスバーをランドスケープ(横向き)にする処理です。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    //(A)ステータスバーを隠す
    //[UIApplication sharedApplication].statusBarHidden = YES;
    
    //(B)ステータスバーをランドスケープにする
    //[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationLandscapeLeft];
    
    //ステータスバーを含んだ画面サイズ
    CGRect bounds = [[UIScreen mainScreen] bounds];
    NSLog(@"bounds  width:%.f height:%.f", bounds.size.width, bounds.size.height);
    
    //ステータスバーを覗いた画面サイズ
    CGRect aFrame = [[UIScreen mainScreen] applicationFrame];
    NSLog(@"aFrame  width:%.f height:%.f", aFrame.size.width, aFrame.size.height);   
    
    return YES;
}


実行結果
iPhoneシミュレータでコメントアウトの条件を変えて実行しました。ステータスバーの高さは20ポイントなので、applicationFrameではそれが差し引かれた値となりました。

そのまま実行
bounds  width:320 height:480
aFrame  width:320 height:460

(A)の処理をコメントアウト
bounds  width:320 height:480
aFrame  width:320 height:480

(B)の処理をコメントアウト
bounds  width:320 height:480
aFrame  width:300 height:480

(A)と(B)の処理をコメントアウト
bounds  width:320 height:480
aFrame  width:320 height:480

2012年8月1日水曜日

iOS端末上で、タッチした位置に赤い丸を表示する

このエントリーをはてなブックマークに追加
iPhoneやiPad上でのタッチ位置を検出し、その位置に赤丸を表示するプログラムを作成しました。UIWindowを継承したサブクラスに描画メソッドのdrawRectを定義し、タッチ検出時にそのメソッドを呼び出すメッセージを送ります。

赤い丸の描画

2012年7月31日火曜日

iOS端末でマルチタッチを検知して処理する

このエントリーをはてなブックマークに追加
iPhoneやiPadなどのiOS端末でタッチイベントをキャッチするときはtouchesBegan等のメソッドを利用します。マルチタッチされたかどうかはこのメソッドの引数を利用して知ることができます。ここではマルチタッチを検知して処理する方法を書いています。


処理方針
まず、マルチタップを行える状態にします。UIViewが持っているプロパティのmultipleTouchEnabledをYESにすることでマルチタップが行えるようになります。このプロパティはデフォルトではNOとなっています。 

次に、touchesBeganのメソッド引数であるtouchesから複数のタッチを検出します。Objective-Cでは列挙子と呼ばれる仕組みが使えるようなので、それを利用してタッチ情報を順番に取得します。


プログラム
iPhoneでのタッチやタップをtouchesBeganで検知するで作成したBaseWindowクラスにinitWithFrameメソッドを追加し、UIWindow(UIViewのサブクラス)のインスタンスが作成されるタイミングでYESにするようにしました。また、touchesBeganを修正し、タッチされた数とタッチされた全ての位置をログに出力するようにしました。

BaseWindow.m
- (id)initWithFrame:(CGRect)frame {
    self = [super initWithFrame:frame];
    if (self != nil) {
        self.multipleTouchEnabled = YES;
    }
    
    return self;
}

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    NSInteger touchCount = [touches count];
    NSLog(@"touchesBegan: count = %d", touchCount);
    
    NSEnumerator *enumulator = [touches objectEnumerator];
    UITouch *touchObject;
    while (touchObject = [enumulator nextObject]) {
        CGPoint tmpLocation = [touchObject locationInView:self];
        NSLog(@"touchesBegan: (x, y) = (%.0f, %.0f)", tmpLocation.x, tmpLocation.y);
    }
}


実行結果
 iPhoneシミュレータでのマルチタッチは、シミュレータ画面上で[option]キーを押したままにすることでできます。カーソルが2つ現れるので、動かすことでピンチイン、ピンチアウト等ができます。マルチタッチの実行結果は次のとおりでした。
2012-07-30 00:39:44.320 HelloWorld[13321:f803] touchesBegan: count = 2
2012-07-30 00:39:44.324 HelloWorld[13321:f803] touchesBegan: (x, y) = (145, 155)
2012-07-30 00:39:44.325 HelloWorld[13321:f803] touchesBegan: (x, y) = (175, 325)

2012年7月30日月曜日

iPhoneでのタッチやタップをtouchesBeganで検知する

このエントリーをはてなブックマークに追加
iPhoneやiPad等のiOSでタッチやタップといったイベントを検知して処理する方法をまとめました。UIWindowクラスを継承し、そのクラスのタッチイベント関連のメソッドを実装することで実現できるようです。タッチイベントに関する4つのメソッドと、それらが呼ばれるタイミングを次にまとめました。

  • touchesBegan:画面に指が触れた時
  • touchesMoved:画面に指が触れた状態で指を移動させた時
  • touchesEnded:画面から指が離れた時
  • touchesCancelled:タッチイベントがキャンセルされた時

touchesCancelledは、例えば画面に指が触れている状態でHOMEボタンを押した時などに呼ばれます。また、各イベントは引数にタッチされた位置(touches)と、イベントの呼び出し元情報(event)などを持ちます。

2012年7月27日金曜日

シェイクしてAndroidアプリを切り替える『Shake -鮭』

このエントリーをはてなブックマークに追加

今起動しているAndroidアプリからバックグラウンド実行中の別アプリに切り替えたいとき、Homeボタンを押してアプリを選択し直すのは少しわずらわしいです。Android端末をシェイクする度にアプリが切り替わる、そんな素敵な機能を提供するアプリが『Shake -鮭』です。

Google Play:Shake -鮭

『Shake -鮭』を起動すると下図のような画面が表示されます。起動ボタンをタップするとアプリ切り替えができるようになります。シェイク感度やタスク切り替え除外の設定もこの画面で行えます。

Shakeの設定画面

あとは、バックグラウンド実行中のアプリへ切り替えたいとき、シェイクするだけで切り替わるようになります。「端末を振って処理を切り替える」という過程は、いかにもスマートフォンらしくて素敵です。

2012年7月24日火曜日

最近使用したAndroidアプリのリストを表示する『PreHome』

このエントリーをはてなブックマークに追加
最近使ったAndroidアプリを素早く起動したいなら『PreHome』が便利です。『PreHome』は最近使用したアプリを一覧表示してくれるアプリです。

PreHome起動画面

『PreHome』を起動すると、最近使用したアプリ一覧が表示されます。アプリのアイコンをタップすると、そのアプリが起動します。また、『PreHome』が起動中状態でMenuキーをタップすると、Settingsボタンが現れます。そのボタンをタップすると起動しているアプリ一覧の表示形式を変更したりすることもできます。

多くのアプリを利用していると、それらを管理するのが大変になってきます。しかし、アプリが多くあったとしても、最近使用したアプリを利用する頻度は高い傾向にあると感じます。そのため、『PreHome』を開くと、起動したいアプリが表示されている可能性が高いため、総合的なアプリ起動時間短縮につながるように思います。

Google Play:
PreHome

アプリ起動ショートカット関連アプリ:
スワイプ操作でAndroidアプリが起動できる!『SwipeStarter』
Androidアプリを素早く起動『Home2 Shortcut』
Homeキーのみでいろんなアプリを起動する 『Home Commander』

2012年7月23日月曜日

iPhoneやiPadを外部ストレージ替わりに使う『iExplorer』

このエントリーをはてなブックマークに追加
iPhoneやiPadをUSBメモリみたいに使いたい。そんなことを手軽に実現できてしまうツールが『iExplorer』です。Macだけでなく、Windowsにもインストールできます。

iExplorer表示画面

 iPhoneやiPadなどの端末を繋げてiExplorerを起動すると図のようなエクスプローラが表示されます。ここにファイルやフォルダをドラッグ&ドロップするだけで、それらを端末にコピーすることができます。 

また、端末の中身が見放題です。 なので、任意のデータを取ったり、アプリの設定値を変更したりできます。端末の内部をいろいろ見たり触れたりできる便利アプリです。

リンク:iExplorer

2012年7月9日月曜日

iPhoneやiPadを電灯替わりに『LED 懐中電灯 HD』

このエントリーをはてなブックマークに追加
寝る前に本を読みたい。暗がりの中で何かを探したい。そんな時にiPadやiPhoneを蛍光灯替わりに使えたら便利です。そんな機能を持つ無料の電灯アプリで、使用してみてとても良かったのが『LED 懐中電灯 HD』です。

LED 懐中電灯 HD(iPad)

点灯したい時は好きな蛍光灯の色を選んでボタンをタップするだけです。他の電灯アプリと比較して良いと思ったところは、蛍光色の選択幅が広い所です。寝る前はオレンジ色、何か探したい時は白色など、用途に応じて好みのカラーが細かに設定できて良いです。

 画面の明るさは画面の右側を上下にスライドすることで簡単に調整できたりします。また、ボタンをタップしたときには切替音が鳴ったりして、演出も素敵です。

2012年6月16日土曜日

エンベデッドシステムスペシャリスト試験のまとめ

このエントリーをはてなブックマークに追加
エンベデッドシステムスペシャリスト試験に合格したので、結果と試験対策を書いておきます。

エンベデッドシステムスペシャリスト試験とは

その名の通り、組み込みシステムに関する試験です。一定の知識レベルを計る試験ですので、実務経験は特に必須ではありません。ソフトウェア・ハードウェア両方の知識が要求されます。

結果


午後I、午後IIを見ると、なんとかギリギリ合格できた結果です。ただ、自分自身の感触としては、合格しているならもう少し点数が高いと思っていました(こんなに間違ったのだろうかという感触です)。午後I、午後IIともに解答欄は、自分なりに納得した答えを埋めていたので、思ったよりも点数がない感がありました。

試験対策

基本的に過去問を解く以外やっていません。過去問で勉強する上でのポイントは、次の2つです。

  • 問題を解いて間違ったところ、わからないところの知識はきちんと復習する。
  • 記述問題の答えの書き方に慣れる。

1つ目は、当たり前過ぎるかもしれません。また、一般的な教科書を満遍なく勉強していくよりは、過去問で間違ったところから起点に勉強していく方が、効率よく覚えていくことができると思います。午前の問題は、選択式かつ例年似たような問題が出るため、過去問を数年分解いて、間違えた問題を間違いなく覚えるようにするだけで、6割の合格ラインに到達するはずです。
2つ目は、試験に合格するためのちょっとしたコツです。私の勝手な想像ですが、記述式の問題では、自分で答えのニュアンスがだいたいわかっていても、それを限られた文字数の答えに落とすためにはちょっとした慣れが必要です。いくつか問題を解くだけでも、記述式の答えを書く感覚が養えるので、この記述問題の答えの書き方に慣れるということを意識して、過去問を解くといいと思います。

以上の2つのことを意識して過去問を解くことが、私なりの試験対策でした。

ちなみに過去問とその解答は、IPAが公開しています。
http://www.jitec.ipa.go.jp/1_04hanni_sukiru/mondai_kaitou_2012h24.html

感想

エンベデッドシステムスペシャリストは、情報処理技術者試験のほかの試験区分と比べると、組み込みということで少し特殊な分野かと思っていましたが、そうでもありませんでした。過去に、ソフ開(今の応用情報)とネットワークを取りましたが、そのときと同じ試験対策で合格することができました。次の秋季試験では、システムアーキテクトか情報セキュリティスペシャリストを受けようと思います。



2012年4月23日月曜日

端末の傾きでスクリーンの自動消灯を無効にする『Screebl』

このエントリーをはてなブックマークに追加
Android端末ディスプレイのバックライトを、省エネのために、何秒かたった後に自動で消灯するように設定しておく人は多いと思います。しかし、文章をじっくり読んでいたら画面が突然真っ暗になったりして不便に感じることがあります。Screeblは端末を傾けたままにしておくと、スクリーンの自動消灯をオフにしておくことができます。

Google play:Screebl


Screeblを起動すると上図の画面が現れるので、「Screebl有効」にチェックを入れます。
この画面でMENUキーを押し、設定をタップすると傾き具合の範囲が設定できる画面に移ります。


「縦向き傾き」では、例えば端末の縦向きの傾きが20°から70°であればバックライトの自動消灯を行わないなどの設定ができます。縦向きの傾きは端末を床に置いた状態を0°、床と垂直に立てた状態を90°としています。

バックライトが自動消灯モードになっているかどうかは、ステータスバーの携帯端末のようなアイコンで分かります。上図では左から5番目がそのアイコンです。携帯端末のアイコンが緑の状態のうちはバックライトが自動で消えないようになっています。

これで、自動消灯をしないために、定期的に画面をタップする煩わしさから解放されて楽になれました。

2012年3月9日金曜日

minttyにカラースキームを適用する

このエントリーをはてなブックマークに追加
Cygwinのターミナルエミュレータminttyにカラースキームsolarizedを適用します。minttyのデフォルトカラースキームもいいですが、solarizedの方が目にやさしいと思います。

solarized mintty

まず、solarizedの公式ページ。
SOLARIZED

mintty版のsolarizedはこちらにあります。
mavnn/mintty-colors-solarized

READMEのところにも書いてありますが、まず、sol.darkとsol.lightをダウンロードして適当な場所に置きます。次に、以下のコマンドを実行します(もちろん、your_dirは適当に置いた場所です)。これによりカラースキームがターミナルに適用されます。

source ~/your_dir/sol.light

or

source ~/your_dir/sol.dark

minttyの起動時にカラースキームを適用させるには、cygwin上の /etc/bash.bashrc に上記コマンドを追加します。以上で、カラースキームsolarizedの適用は終わりです。

vimやemacsにも、このsolarizedのテーマが引き継がれるようなので、エディタも見やすくなります。 ただしvimの場合は、.vimrcにsyntax enableを追加する必要があるかもしれません。


参考ページ
新卒さんのための人気Vimカラースキーマランキング5+1(vim.org & github調べ) - 常識という迷信

2012年3月6日火曜日

Rubyでスレッド処理をしてみた

このエントリーをはてなブックマークに追加
Rubyでスレッド処理をしてみました。ちょっとでも使えるようになると、プログラミングが楽しくなるのが、スレッド処理かなと思います。

今回のサンプルプログラムでは、メインとなるプログラムのスレッドのほかに、2つのスレッドを作成します。それぞれのスレッドで文字列を並行して出力させ、実行結果がどうなるか見てみます。

thread_sample1.rb
require 'thread'

# 1つ目のスレッド(作成後、すぐに走り始める)
Thread.new do
  5.times do
    puts "Thread1"; $stdout.flush
  end
end

# 2つ目のスレッド(作成後、すぐに走り始める)
Thread.new do
  5.times do
    puts "Thread2"; $stdout.flush
  end
end

# 上記2つのスレッドの実行が終わるのを待つ
Thread.list.each { |t| t.join unless t == Thread.current }

puts "Main Thread"


実行結果
(※同じプログラムでも、実行環境によって実行結果が変わると思います。)
$ ruby thread_sample1.rb
Thread1
Thread2Thread1

Thread2
Thread1
Thread2
Thread2Thread1

Thread1Thread2

Main Thread


プログラムではputsを使って文字列を1行単位で出力させている($stdout.flushも敢えて実行させている)はずですが、実際の実行結果では、なぜか"Thread2Thread1"と続けて文字列が出力されました。このあたりがスレッド処理特有の現象で、1つのメインプログラムだけのシングルスレッドではなかなか予想できないことが、起きるようになります。

この"Thread2Thread1"と出力された原因は、おそらく、Thread2が出力バッファからflushされる前に、Thread1が出力バッファに書きこまれたためです。よって、出力部分をMutexでロックしてflushまでをアトミックな処理にするようプログラムを変更してみます。

thread_sample2.rb
require 'thread'

# Mutex
lock = Mutex.new

# 1つ目のスレッド(作成後、すぐに走り始める)
Thread.new do
  5.times do
    lock.synchronize { puts "Thread1"; $stdout.flush }
  end
end

# 2つ目のスレッド(作成後、すぐに走り始める)
Thread.new do
  5.times do
    lock.synchronize { puts "Thread2"; $stdout.flush }
  end
end

# 上記2つのスレッドの実行が終わるのを待つ
Thread.list.each { |t| t.join unless t == Thread.current }

puts "Main Thread"


実行結果
(※同じプログラムでも、実行環境によって実行結果が変わると思います。)
$ ruby thread_sample2.rb
Thread1
Thread1
Thread1
Thread1
Thread1
Thread2
Thread2
Thread2
Thread2
Thread2
Main Thread

今度は、putsからflushまでがアトミックな処理として行われたことを反映して、Thread1, Thread2の文字列出力が1行ごとに出力されています。スレッドを使うと予期せぬ現象が起こり、バグになりやすいため扱いが難しいところもありますが、その分使いこなせるようになるとおもしろいと思います。

参考ページ
ミューテックス - Wikipedia -
アトミック性 - Wikipedia -
スレッドセーフ - Wikipedia -

2012年2月12日日曜日

twitter botプログラムを作ってみた

このエントリーをはてなブックマークに追加
twitter botプログラムを作ってみました。このbotは、インターネットを定期的に移動して、今いるページのURLをサムネイル付きでTwitterに投稿します。

botプログラムのTwitterアカウント
http://twitter.com/#!/wandering_bot


2012年2月6日月曜日

Objective-Cのソースコードのコメントからドキュメントが自動生成できる 『Doxygen』

このエントリーをはてなブックマークに追加
Doxygenはソースコードのコメントからドキュメントを自動生成するツールです。JavaでいうJavadocのイメージです。MacのXcode4でコーディングしたObjective-CのソースコードをDoxygenで出力してみました。


Doxygenのダウンロード
DoxygenのURLにアクセスします。
http://www.stack.nl/~dimitri/doxygen/

DownloadよりDoxygen-1.7.6.1.dmgをダウンロードします。

2012年2月1日水曜日

21日間で理想の習慣を身につけよう『21habit』

このエントリーをはてなブックマークに追加
毎日英語を勉強する、飲酒量を減らす、二度寝をしない等、理想の習慣を身に着けるのは難しいことだと思います。『21habit』は、そんな理想の習慣を身につけるためのサポートを21日間行なってくれるWebサービスです。

URL:http://21habit.com/


やり方は簡単で、目標にした習慣が達成できたかできなかったか(FailかSuccess!)をチェックするだけです。チェックは、3日以内に付けなければ、自動でFailになってしまうようです。

また、有料プランもあり、そのプランは21ドルですが、1日がSuccessで終われば1ドルが返金される仕組みです。目標を意識させる工夫がなるほどと思うとサービスです。

2012年1月27日金曜日

スワイプ操作でAndroidアプリが起動できる!『SwipeStarter』

このエントリーをはてなブックマークに追加
スワイプ(指でなぞるような操作)で任意のAndroidアプリを起動できるようにできたら格好いい。そんなアプリ起動のショートカットを実現するアプリが『SwipeStarter』です。


Androidマーケット:SwipeStarter


設定画面では、端末画面上の任意の位置と、起動するアプリを設定して開始にチェックを入れます。画像の例では、位置を右上の端にし、起動するアプリをアラーム・タイマーに設定しています。

設定すると、設定した位置に色の付いた領域が現れます。そこをタッチしてスワイプすると、起動設定したアプリケーションが起動するようになります。端末を振ると、色の付いた位置を隠すような設定もできます。

『SwipeStarter』はシンプルで使用感が心地よいアプリ起動ツールなように感じました。個人的には、アプリ起動のスワイプ位置をステータスバーの左端、中央、右端に設定し、それぞれ電子書籍、カメラ、アラーム・タイマーが起動するように設定しています。


起動ショートカット関連:
Androidアプリを素早く起動『Home2 Shortcut』
サブ機能へのショートカットも素早く作成『QuickShortcutMaker』
Homeキーのみでいろんなアプリを起動する 『Home Commander』

2012年1月18日水曜日

Androidアプリの動作が重いと感じたら『メモリブースター』

このエントリーをはてなブックマークに追加
メモリブースター(Memory Booster)はメモリの最適化を行うツールです。メモリリソースを無駄に使用しているのであれば、ワンタップでメモリの使用量を増やすことができます。

Android Market
無料版:メモリブースター軽量
有料版:メモリブースター


メモリー情報では、「メモリーの空き容量」や「メモリーの使用容量」が表示されます。メモリー監視では、それらの容量をリアルタイムなグラフで表示しています。「ワンクリック高速最適化」をタップすると、メモリの最適化を実行します。


「ワンクリック高速最適化」のタップ前と比較すると、タップ後は7%ほどメモリの空き容量が増えました。空き容量の増加具合は状況によりますが、メモリの最適化の効果は確かにあるように思います。


また、他にも実行中のタスクを手軽に終了させる「タスクキラー」という機能もあります。Androidアプリの動作が重く感じ始めたら、『メモリブースター軽量』を使用してみてはどうでしょうか。

2012年1月16日月曜日

UIImageクラスを利用してiPhoneアプリに画像を表示する

このエントリーをはてなブックマークに追加
あらかじめ用意した画像を読み込んでiPhoneアプリに表示するサンプルプログラムを作りました。画像の描画はUIImageクラスを利用します。


2012年1月11日水曜日

iPhoneアプリのログをNSLog関数で確認する。

このエントリーをはてなブックマークに追加
iPhoneアプリの動作ログをコンソールで確認したいときはNSLog関数を使うと便利そうです。NSLog関数は引数で指定した文字列をXcodeのデバッグエリアに表示します。


書式
NSLog(書式文字列, 引数)

第2引数以降は0個以上指定できます。書式文字列はC言語でいうprintf関数のような使い方ができます。


具体例
NSLog(@"%s %d %f", "test", 1, 1.2);
"test 1 1.20000"が表示されました。
%s:文字列
%d:整数
%f:浮動小数点


デバッグエリアの表示方法
Xcode4のメニュー[View]→[Debug Area]→[Activate Console]


関連:LogクラスとLogCatを利用して動作を見る

2012年1月10日火曜日

Objective-Cでプロパティを実装して外部クラスからアクセスできるようにする

このエントリーをはてなブックマークに追加
Objective-Cのプロパティとは、オブジェクトが保持する(インスタンス)変数にアクセスする方法を決定する仕組みのことです。アクセス制限を加えたり、getterやsetterなどのアクセサを簡単に扱えるようにすることができるようです。ここでは、外部クラスからインスタンス変数にアクセスできるようにするまでのサンプルをメモしました。


2012年1月8日日曜日

2012年はこの手帳を使います『夢をかなえる人の手帳』

このエントリーをはてなブックマークに追加
雑貨屋で手帳を探していたら、『夢をかなえる人の手帳』という文字が目に入りました。一目惚れして思わず衝動買いしてしまいました。


手帳を買うのは良いけれど、結局使いこなせずに終わってしまうのが毎年の定番の流れでした。この原因は「手帳を使おう」というモチベーションをずっと維持できないことにあった思います。

『夢をかなえる人の手帳』は、モチベーションを維持できるような文章が織り込められているのが特徴です。夢をかなえるための手帳の使い方が書かれており、やる気が毎日充填される仕組みとなっているように思います。

また、日付フリー式では日付が入っていないのも特徴で、自分で日付を入れるような構成となっています。日と時間を自分でコントロールする、そんな意識が芽生えるようなスケジュール帳です。

2012年1月5日木曜日

Xcode4でソースコードの横に行番号を表示する

このエントリーをはてなブックマークに追加
Xcode4をインストールしたらまず最初に設定しておきたい行番号の表示方法をメモしました。

1. Xcodeのメニューの[Xcode]→[Preferences]を選択。
2. [Text Editing]を選択。
3. [Editing]タブの[Line numbers]にチェックを入れる。


これで行番号が表示されて、ソースコードも追いやすくなるはず。

2012年1月4日水曜日

iPhoneアプリ開発環境を整える - XCode4のインストールからHello Worldまで -

このエントリーをはてなブックマークに追加
iPhoneアプリ開発環境を整えるまでをメモしました。XCode4をインストールして、シミュレータでHello Worldを表示するまでのまとめです。

参考:iPhone/iPad/iPod touchプログラミングバイブル―iOS 5/Xcode 4対応