2013年1月20日日曜日


Firefox OS App Daysが始まりました。

本日のイベントスケジュールは下記のようになっています。

  • 8:30am - 9:00am. Registration. Coffee, light breakfast.
  • 9:00am - 9:25am. Deutsche Telekom Who?, Lou Schreier, VP, Portfolio Development and Technology Innovation, Deutsche Telekom, Silicon Valley Innovation Center
  • 9:25 - 9:45. "T-Mobile" a case study of the "Un-Carrier", Michael Niemann, Director, Strategic Planning & New Business Development, T-Mobile US 
  • 10:00am - 10:30am. Introduction to Firefox OS, Andreas Gal, Director of R & D, Mozilla
  • 10:30am - 11:15am. Building Apps for Firefox Marketplace, Matthew "Potch" Claypotch, Firefox Marketplace Developer
  • 11:15am - 11:45am. Design Patterns & Best Practices for Mobile Apps, Maureen Hanratty, Interaction Designer, Firefox Marketplace
  • 11:45 - 12:00. Announcements.
  • 12:00 - 1:00pm Lunch.
  • 1-5pm: App Hacking
  • 5:30pm -7pm: Demos & Drinks.

まずは、はじめのセッションはドイツテレコムのLou Schreierさんから。



現在のスマートフォンの取り巻く環境の回線の話をしていました。


やはり、流行のNFCの話とFirefoxOSのAPI(NFC用)を用いたデモを行っていました。端末はNexus
SのB2G(Boot to Gecko)で行っていましたが、残念ながら、うまく動作せずに終わってしまいました。


こちらもNFCのAPIの説明です。


次は、T-mobileのMichael Niemannさんのセッション。



2013年はLTEを普及させ、4G回線がStandardになるように願っているとのことです。


また、HTML5が使用できる端末が10億台を超えると予想しており、
Firefox OSは、既存のOSを混乱させるぐらいの影響がある可能性があるとし、
今後、通信キャリアとしてだけでなく、コンテンツ事業にも力を入れているT-mobileとしては、Firefox OSに非常に注目しているとのことでした。


続いて、mozillaのAndreas Galさんから
mozillaが目指す、OpenWebについてのセッション。


クロスデバイスのプラットフォームとして機能するHTML5と
そのHTML5アプリを展開し、特定の企業やデバイスに依存しないfirefox OS マーケット、
そしてそのアプリをより効率よく動かすためのFirefox OS でより、
開かれたWebの世界を作っていこう、
といったようなお話でした。




セッションの中で最近のOSと、FireFox OS(B2G)との違いについて話があり
NATIVE API Layerを無くしたことで、小さく速くなったようです。


続いて、Matt ”Potch” Claypotchさんから
Firefox OS App制作について、APIや制作Tips等の説明。




最後のセッションでは、デザイナーのMaureen Hanrattyさんから
Firefox OSのUIデザインの考え方について説明を行ってくれました。


UIデザインに関してはこちらの記事に詳しく書かれています。
https://blog.mozilla.org/ux/2012/09/mozcamp-warsaw-design-principles-behind-firefox-os-ux/


以上で午前中のセッションは終了。
Lunch休憩を挟み、午後からはApp Hackingとなります。

App Hackingの様子です。
思い思いに作業を行っています。


アプリの発表を行うプロジェクトの方々が名前の記載を行っている様子です。


発表するプロジェクトチームと名前です。
どんなアプリが出来上がったのでしょうか。


以下がアプリの発表風景です。








まとめ

 全体的に新しい技術等の発表はなく、正直期待外れでした。
 また、 App Hackingで発表されたアプリも、Firefox OSでしかできないと言うものは一つもなく、
 HTML5を使用したアプリのみでした。今後に期待??
 最新のB2Gをコンパイルして、Galaxy Nexusにロードし、確認しましたが、densityの違いによる
 アイコンサイズ違いや、アプリのリソースによる画面サイズ違いが多々あり、アンドロイドのような
 画面サイズが違うような複数デバイスでの製品までの道のりはかなり険しそうに思いました。
 しかし、悪いところばかりでは無く、起動時間は既存のAndroidと比べるとかなり速かったです。
 結局、Firefox OS App Daysで最後に締めくくっていた言葉のように今後どのようになるかは
 「アプリ開発者次第」だと思いますし、経験者が少ない今こそがチャンスだと思います。
 興味がある方は是非committerを目指して、よりよいFirefox OSを目指すべく一度お試しください。

Firefox OS App Days - Silicon Valley 当日


Firefox OS App Daysが始まりました。

本日のイベントスケジュールは下記のようになっています。

  • 8:30am - 9:00am. Registration. Coffee, light breakfast.
  • 9:00am - 9:25am. Deutsche Telekom Who?, Lou Schreier, VP, Portfolio Development and Technology Innovation, Deutsche Telekom, Silicon Valley Innovation Center
  • 9:25 - 9:45. "T-Mobile" a case study of the "Un-Carrier", Michael Niemann, Director, Strategic Planning & New Business Development, T-Mobile US 
  • 10:00am - 10:30am. Introduction to Firefox OS, Andreas Gal, Director of R & D, Mozilla
  • 10:30am - 11:15am. Building Apps for Firefox Marketplace, Matthew "Potch" Claypotch, Firefox Marketplace Developer
  • 11:15am - 11:45am. Design Patterns & Best Practices for Mobile Apps, Maureen Hanratty, Interaction Designer, Firefox Marketplace
  • 11:45 - 12:00. Announcements.
  • 12:00 - 1:00pm Lunch.
  • 1-5pm: App Hacking
  • 5:30pm -7pm: Demos & Drinks.

まずは、はじめのセッションはドイツテレコムのLou Schreierさんから。



現在のスマートフォンの取り巻く環境の回線の話をしていました。


やはり、流行のNFCの話とFirefoxOSのAPI(NFC用)を用いたデモを行っていました。端末はNexus
SのB2G(Boot to Gecko)で行っていましたが、残念ながら、うまく動作せずに終わってしまいました。


こちらもNFCのAPIの説明です。


次は、T-mobileのMichael Niemannさんのセッション。



2013年はLTEを普及させ、4G回線がStandardになるように願っているとのことです。


また、HTML5が使用できる端末が10億台を超えると予想しており、
Firefox OSは、既存のOSを混乱させるぐらいの影響がある可能性があるとし、
今後、通信キャリアとしてだけでなく、コンテンツ事業にも力を入れているT-mobileとしては、Firefox OSに非常に注目しているとのことでした。


続いて、mozillaのAndreas Galさんから
mozillaが目指す、OpenWebについてのセッション。


クロスデバイスのプラットフォームとして機能するHTML5と
そのHTML5アプリを展開し、特定の企業やデバイスに依存しないfirefox OS マーケット、
そしてそのアプリをより効率よく動かすためのFirefox OS でより、
開かれたWebの世界を作っていこう、
といったようなお話でした。




セッションの中で最近のOSと、FireFox OS(B2G)との違いについて話があり
NATIVE API Layerを無くしたことで、小さく速くなったようです。


続いて、Matt ”Potch” Claypotchさんから
Firefox OS App制作について、APIや制作Tips等の説明。




最後のセッションでは、デザイナーのMaureen Hanrattyさんから
Firefox OSのUIデザインの考え方について説明を行ってくれました。


UIデザインに関してはこちらの記事に詳しく書かれています。
https://blog.mozilla.org/ux/2012/09/mozcamp-warsaw-design-principles-behind-firefox-os-ux/


以上で午前中のセッションは終了。
Lunch休憩を挟み、午後からはApp Hackingとなります。

App Hackingの様子です。
思い思いに作業を行っています。


アプリの発表を行うプロジェクトの方々が名前の記載を行っている様子です。


発表するプロジェクトチームと名前です。
どんなアプリが出来上がったのでしょうか。


以下がアプリの発表風景です。








まとめ

 全体的に新しい技術等の発表はなく、正直期待外れでした。
 また、 App Hackingで発表されたアプリも、Firefox OSでしかできないと言うものは一つもなく、
 HTML5を使用したアプリのみでした。今後に期待??
 最新のB2Gをコンパイルして、Galaxy Nexusにロードし、確認しましたが、densityの違いによる
 アイコンサイズ違いや、アプリのリソースによる画面サイズ違いが多々あり、アンドロイドのような
 画面サイズが違うような複数デバイスでの製品までの道のりはかなり険しそうに思いました。
 しかし、悪いところばかりでは無く、起動時間は既存のAndroidと比べるとかなり速かったです。
 結局、Firefox OS App Daysで最後に締めくくっていた言葉のように今後どのようになるかは
 「アプリ開発者次第」だと思いますし、経験者が少ない今こそがチャンスだと思います。
 興味がある方は是非committerを目指して、よりよいFirefox OSを目指すべく一度お試しください。
Firefox OS App Day - Silicon Valley 会場到着しました。





会場はこんな感じです。


イベントグッズも!


朝食も豪華!


弊社スタッフも準備できました。

いよいよ始まります!


Firefox OS App Days - Silicon Valley 直前レポート

Firefox OS App Day - Silicon Valley 会場到着しました。





会場はこんな感じです。


イベントグッズも!


朝食も豪華!


弊社スタッフも準備できました。

いよいよ始まります!


2013年1月19日土曜日


Firefox OS App Day - Silicon Valley に参加するため
アメリカ、マウンテンビューにきています。
会場になるComputer History Museum」の前日の様子をお伝えします。







今のところ、まだなにも準備されていないようですね。。
明日はいったいどうなるのでしょうか?

乞うご期待!!

明日に続きます。










Firefox OS App Days - Silicon Valley 前日


Firefox OS App Day - Silicon Valley に参加するため
アメリカ、マウンテンビューにきています。
会場になるComputer History Museum」の前日の様子をお伝えします。







今のところ、まだなにも準備されていないようですね。。
明日はいったいどうなるのでしょうか?

乞うご期待!!

明日に続きます。












今話題のWeb OS, Firefox OSに関するブログを始めました。
Firefox OSの情報や技術的なTipsなどをまとめていきます。


Hello Firefox OS !!



今話題のWeb OS, Firefox OSに関するブログを始めました。
Firefox OSの情報や技術的なTipsなどをまとめていきます。


2013年1月7日月曜日



前回に引き続きロボットを作っている住友です。


今回はロボットとAndroid端末を接続し、手足を操作できるようにします。


ロボットとの接続


SPPで接続


このロボットにはBluetoothのモジュールであるRBT-001を搭載していますので、Android端末とはBluetoothで通信します。AndroidのBluetoothのSPP通信はAndroid2.0から正式サポートされたので


現在のほとんどの端末で利用できます。Androidの設定画面から対象機器とのペアリングを行い、AndroidアプリからBluetoothAdapterクラスを経由して対象機器のBluetoothSocketを取得すればInputStreamとOutputStreamが取得できますので、後はプロトコルを策定してそれに合わせた通信処理を実装すればロボットを制御することができます。


f:id:bs-android:20130107003337p:image


プロトコルの策定


SPP通信のBluetoothSocketを取得しただけではデータのやりとりはできてもどのように命令すれば良いかがわかりません。簡単にですがプロトコルを策定します。まず命令のデータの一つの塊をパケットとし、それの構造をプロトコルとして策定します。このパケットにはデータ化けやプログラムミスなどを検知するためにChecksumを付加したり、このパケットが命令用か制御用かを判定するためのTypeを付加しています。(実際にはSPP通信はエラー訂正を有しているためChecksum、STX、ETXは不要ですが、使用しているBluetoothモジュールの兼ね合いで付加しています。)


次に命令として送る際のデータ部の構造を策定します。パケットのCommandの値に対応して、ロボットに対する命令の内容を決めます。ここではサーボのみ制御するもの(Command=0x01)、眼のLEDのみ制御するもの(Command=0x02)、サーボと眼をまとめて制御するもの(Command=0x03)を決めています。


f:id:bs-android:20130107003338p:image


ここまで決めればAndroidとArduino側で上記で策定したプロトコルで通信できるプログラムを実装すれば命令の送信とロボットの操作が行えるようになります。





アクションの作成/編集機能


Android側でロボットを操作するために必要な画面を作成します。ここでは単純なコントローラーと、それらをアクションとして端末に保存したり、保存されたアクションを再生する機能を実装しています。


コントローラー画面


ロボットには両目、両手、両足、両耳、首の合計9箇所の操作が可能なので、それらの操作用のUIを実装しました。


f:id:bs-android:20130107003339p:image


SQLiteDatabaseにアクションを保存


コントローラーだけでは単独のポーズを作るだけなので、ポーズを0.1秒単位で順番に切り替えてアクションを行えるようにそれらを編集できる画面を作りました。


f:id:bs-android:20130107003340p:image


アクションの選択画面


作ったアクションを選択するとアクションを再生できる画面も併せて作りました。


f:id:bs-android:20130107003341p:image




以上でロボット本体とそれを操作するためのソフトが出来上がりました。しかしまだ動くだけで面白みがいまいち欠けていると思います。次回はこれを面白くするために仕上げをしていきたいと思います。




文責:カスタマー開発部 住友孝郎





根性試しにロボットを作る~ソフト作成編~



前回に引き続きロボットを作っている住友です。


今回はロボットとAndroid端末を接続し、手足を操作できるようにします。


ロボットとの接続


SPPで接続


このロボットにはBluetoothのモジュールであるRBT-001を搭載していますので、Android端末とはBluetoothで通信します。AndroidのBluetoothのSPP通信はAndroid2.0から正式サポートされたので


現在のほとんどの端末で利用できます。Androidの設定画面から対象機器とのペアリングを行い、AndroidアプリからBluetoothAdapterクラスを経由して対象機器のBluetoothSocketを取得すればInputStreamとOutputStreamが取得できますので、後はプロトコルを策定してそれに合わせた通信処理を実装すればロボットを制御することができます。


f:id:bs-android:20130107003337p:image


プロトコルの策定


SPP通信のBluetoothSocketを取得しただけではデータのやりとりはできてもどのように命令すれば良いかがわかりません。簡単にですがプロトコルを策定します。まず命令のデータの一つの塊をパケットとし、それの構造をプロトコルとして策定します。このパケットにはデータ化けやプログラムミスなどを検知するためにChecksumを付加したり、このパケットが命令用か制御用かを判定するためのTypeを付加しています。(実際にはSPP通信はエラー訂正を有しているためChecksum、STX、ETXは不要ですが、使用しているBluetoothモジュールの兼ね合いで付加しています。)


次に命令として送る際のデータ部の構造を策定します。パケットのCommandの値に対応して、ロボットに対する命令の内容を決めます。ここではサーボのみ制御するもの(Command=0x01)、眼のLEDのみ制御するもの(Command=0x02)、サーボと眼をまとめて制御するもの(Command=0x03)を決めています。


f:id:bs-android:20130107003338p:image


ここまで決めればAndroidとArduino側で上記で策定したプロトコルで通信できるプログラムを実装すれば命令の送信とロボットの操作が行えるようになります。





アクションの作成/編集機能


Android側でロボットを操作するために必要な画面を作成します。ここでは単純なコントローラーと、それらをアクションとして端末に保存したり、保存されたアクションを再生する機能を実装しています。


コントローラー画面


ロボットには両目、両手、両足、両耳、首の合計9箇所の操作が可能なので、それらの操作用のUIを実装しました。


f:id:bs-android:20130107003339p:image


SQLiteDatabaseにアクションを保存


コントローラーだけでは単独のポーズを作るだけなので、ポーズを0.1秒単位で順番に切り替えてアクションを行えるようにそれらを編集できる画面を作りました。


f:id:bs-android:20130107003340p:image


アクションの選択画面


作ったアクションを選択するとアクションを再生できる画面も併せて作りました。


f:id:bs-android:20130107003341p:image




以上でロボット本体とそれを操作するためのソフトが出来上がりました。しかしまだ動くだけで面白みがいまいち欠けていると思います。次回はこれを面白くするために仕上げをしていきたいと思います。




文責:カスタマー開発部 住友孝郎





2012年12月4日火曜日

I'm back!


Some of you sharp people out there might have noticed. The title of the blog has changed. The first objective with this blog was to write about experiences from developing iOS apps using Objective-C. I have now broaden the content a bit to even include development in Objective-C on other platforms. For example by using the open source implementation of Cocoa, GNUstep, you can develop apps easily on Mac, Windows, Linux and *BSD in a platform independent environment.

First off, I want to show you how to get Obj-C 2.0 (@properties, new literals etc.) and GCD (Grand Central Dispatch) up and running on FreeBSD using GNUstep framework and some other libraries.

Let's say you've installed FreeBSD 9.x and have the system up and running. Here's my recipe for success:

- Install LLVM development package
# pkg install llvm-devel
Note: In FreeBSD 9.1 RC2/3 llvm-ld is missing so you have rebuild the kernel+world with "WITH_CLANG_EXTRAS=YES" in src.conf or use the gcc linker. Don't know if the missing llvm-files will come back for the final release or not...

- Install GNUstep and libobjc2 from tarballs
First install from ports to get all dependencies, then delete gnustep packages and install tarballs. Do this as root, not with sudo. GNUstep from ports does not support the new libobjc2 so we can't use it for development.
# pkg install gmake
# cd /usr/ports/devel/gnustep && make install clean
# [delete gnustep packages]

Download gnustep-make, -base, -gui and -backend from http://www.gnustep.org/resources/downloads.php.

Download latest libobjc2 from http://download.gna.org/gnustep/.

Start with installing gnustep-make
# [unpack gnustep-make and cd into directory]
# ./configure --with-layout=gnustep --prefix=/usr/local/GNUstep --enable-objc-nonfragile-abi CC=clang CXX=clang++
# gmake install CC=clang CXX=clang++
# . /usr/local/GNUstep/System/Library/Makefiles/GNUstep.sh (source the script, add this line to .bashrc or similar script)

libobjc2
# [unpack libobjc2 and cd into directory]
# gmake install CC=clang CXX=clang++

- Reinstall gnustep-make as above to configure it for new libobjc2

For gnustep-base, gnustep-gui, gnustep-back
# [unpack tarball and cd into directory]
# ./configure CC=clang CXX=clang++
# gmake install CC=clang CXX=clang++

GCD - Grand Central Dispatch
# cd /usr/ports/devel/libdispatch && make install clean
Include <dispatch/dispatch.h> to use.

And that's it. We will use two files to test our newly installed framework and libraries.
HelloWorld.m and the makefile GNUmakefile.

The sample code will test the new literals like @autorelease, @[ ... ], blocks and the dispatch library (launching blocks of code in different thread and with time delay).

HelloWorld.m start

#import <Foundation/Foundation.h>
#import <dispatch/dispatch.h>
#import <unistd.h>

int main (int argc, const char *argv[])
{

  @autoreleasepool {

    NSLog(@"Hello, World!");

    NSArray *a = @[ @"A", @"B", @"C" ];
    [a enumerateObjectsUsingBlock:^(NSString *s, NSUInteger index, BOOL *stop) {
      NSLog(@"String with index %d has value %@",(int)index, s);
    }];


    dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, 2.0 * NSEC_PER_SEC);
    dispatch_after(popTime, dispatch_get_global_queue(0,0), ^(void){
             NSLog(@"Hello from delayed dispatch!");
           });
 
    dispatch_async(dispatch_get_global_queue(0,0), ^{
             NSLog(@"Hello from dispatch!");
           });
  }
  sleep(3);
  return 0;
}


HelloWorld.m end


GNUmakefile start

ifeq ($(GNUSTEP_MAKEFILES),)
 GNUSTEP_MAKEFILES := $(shell gnustep-config --variable=GNUSTEP_MAKEFILES 2>/dev/null)
endif
ifeq ($(GNUSTEP_MAKEFILES),)
 $(error You need to set GNUSTEP_MAKEFILES before compiling!)
endif

include $(GNUSTEP_MAKEFILES)/common.make

ADDITIONAL_OBJC_LIBS += -ldispatch

#
# Application
#
VERSION = 0.1
PACKAGE_NAME = HelloWorld
APP_NAME = HelloWorld
HelloWorld_APPLICATION_ICON =

#
# Other sources
#
HelloWorld_OBJC_FILES += \
HelloWorld.m

#
# Makefiles
#
-include GNUmakefile.preamble
include $(GNUSTEP_MAKEFILES)/aggregate.make
include $(GNUSTEP_MAKEFILES)/application.make
-include GNUmakefile.postamble


GNUmakefile end

Put these two files in a folder and compile using

$ gmake

This will produce the bundle HelloWorld.app (which is basically just a folder)

Launch the app by typing
$ openapp ./HelloWorld

Have fun and good luck with Objective-C 2.0 and GNUstep :)




Cocoa on FreeBSD

I'm back!


Some of you sharp people out there might have noticed. The title of the blog has changed. The first objective with this blog was to write about experiences from developing iOS apps using Objective-C. I have now broaden the content a bit to even include development in Objective-C on other platforms. For example by using the open source implementation of Cocoa, GNUstep, you can develop apps easily on Mac, Windows, Linux and *BSD in a platform independent environment.

First off, I want to show you how to get Obj-C 2.0 (@properties, new literals etc.) and GCD (Grand Central Dispatch) up and running on FreeBSD using GNUstep framework and some other libraries.

Let's say you've installed FreeBSD 9.x and have the system up and running. Here's my recipe for success:

- Install LLVM development package
# pkg install llvm-devel
Note: In FreeBSD 9.1 RC2/3 llvm-ld is missing so you have rebuild the kernel+world with "WITH_CLANG_EXTRAS=YES" in src.conf or use the gcc linker. Don't know if the missing llvm-files will come back for the final release or not...

- Install GNUstep and libobjc2 from tarballs
First install from ports to get all dependencies, then delete gnustep packages and install tarballs. Do this as root, not with sudo. GNUstep from ports does not support the new libobjc2 so we can't use it for development.
# pkg install gmake
# cd /usr/ports/devel/gnustep && make install clean
# [delete gnustep packages]

Download gnustep-make, -base, -gui and -backend from http://www.gnustep.org/resources/downloads.php.

Download latest libobjc2 from http://download.gna.org/gnustep/.

Start with installing gnustep-make
# [unpack gnustep-make and cd into directory]
# ./configure --with-layout=gnustep --prefix=/usr/local/GNUstep --enable-objc-nonfragile-abi CC=clang CXX=clang++
# gmake install CC=clang CXX=clang++
# . /usr/local/GNUstep/System/Library/Makefiles/GNUstep.sh (source the script, add this line to .bashrc or similar script)

libobjc2
# [unpack libobjc2 and cd into directory]
# gmake install CC=clang CXX=clang++

- Reinstall gnustep-make as above to configure it for new libobjc2

For gnustep-base, gnustep-gui, gnustep-back
# [unpack tarball and cd into directory]
# ./configure CC=clang CXX=clang++
# gmake install CC=clang CXX=clang++

GCD - Grand Central Dispatch
# cd /usr/ports/devel/libdispatch && make install clean
Include <dispatch/dispatch.h> to use.

And that's it. We will use two files to test our newly installed framework and libraries.
HelloWorld.m and the makefile GNUmakefile.

The sample code will test the new literals like @autorelease, @[ ... ], blocks and the dispatch library (launching blocks of code in different thread and with time delay).

HelloWorld.m start

#import <Foundation/Foundation.h>
#import <dispatch/dispatch.h>
#import <unistd.h>

int main (int argc, const char *argv[])
{

  @autoreleasepool {

    NSLog(@"Hello, World!");

    NSArray *a = @[ @"A", @"B", @"C" ];
    [a enumerateObjectsUsingBlock:^(NSString *s, NSUInteger index, BOOL *stop) {
      NSLog(@"String with index %d has value %@",(int)index, s);
    }];


    dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, 2.0 * NSEC_PER_SEC);
    dispatch_after(popTime, dispatch_get_global_queue(0,0), ^(void){
             NSLog(@"Hello from delayed dispatch!");
           });
 
    dispatch_async(dispatch_get_global_queue(0,0), ^{
             NSLog(@"Hello from dispatch!");
           });
  }
  sleep(3);
  return 0;
}


HelloWorld.m end


GNUmakefile start

ifeq ($(GNUSTEP_MAKEFILES),)
 GNUSTEP_MAKEFILES := $(shell gnustep-config --variable=GNUSTEP_MAKEFILES 2>/dev/null)
endif
ifeq ($(GNUSTEP_MAKEFILES),)
 $(error You need to set GNUSTEP_MAKEFILES before compiling!)
endif

include $(GNUSTEP_MAKEFILES)/common.make

ADDITIONAL_OBJC_LIBS += -ldispatch

#
# Application
#
VERSION = 0.1
PACKAGE_NAME = HelloWorld
APP_NAME = HelloWorld
HelloWorld_APPLICATION_ICON =

#
# Other sources
#
HelloWorld_OBJC_FILES += \
HelloWorld.m

#
# Makefiles
#
-include GNUmakefile.preamble
include $(GNUSTEP_MAKEFILES)/aggregate.make
include $(GNUSTEP_MAKEFILES)/application.make
-include GNUmakefile.postamble


GNUmakefile end

Put these two files in a folder and compile using

$ gmake

This will produce the bundle HelloWorld.app (which is basically just a folder)

Launch the app by typing
$ openapp ./HelloWorld

Have fun and good luck with Objective-C 2.0 and GNUstep :)




2012年10月23日火曜日



前回に引き続きロボットを作っている住友です。今回は回路設計と接続までです。


マイコンボード



マイコンボードにはArduino Pro Mini 328 5V 16MHzを使用します。ArduinoといえばAndroidで開発されている方ならADK(Accessory Development Kit)でArduinoが使われていることをご存知かも知れません。今回使用するArduino Pro MiniはADKの機能が無い代わりに小型のものです。

(最初の記事ではArduino Pro Mini 328 3.3Vを記載していましたが、諸事情により5Vに変更しています。)

f:id:bs-android:20121023002436j:image

根性試しにロボットを作る~基板作成編~



前回に引き続きロボットを作っている住友です。今回は回路設計と接続までです。


マイコンボード



マイコンボードにはArduino Pro Mini 328 5V 16MHzを使用します。ArduinoといえばAndroidで開発されている方ならADK(Accessory Development Kit)でArduinoが使われていることをご存知かも知れません。今回使用するArduino Pro MiniはADKの機能が無い代わりに小型のものです。

(最初の記事ではArduino Pro Mini 328 3.3Vを記載していましたが、諸事情により5Vに変更しています。)

f:id:bs-android:20121023002436j:image

2012年10月11日木曜日


前回SDK for NFC Wrapper Libraryのプロトタイプを作りました。
ここから各NFCデバイスに向けての機能を肉付けしていきたいと思います。
現段階ではコマンドを発行することができないので、コマンド発行まで実装したいと思います。

SDK for NFC Wrapper Library - Polling


前回SDK for NFC Wrapper Libraryのプロトタイプを作りました。
ここから各NFCデバイスに向けての機能を肉付けしていきたいと思います。
現段階ではコマンドを発行することができないので、コマンド発行まで実装したいと思います。

2012年10月5日金曜日


呼び出しが大変

新しいプロジェクト立ち上げの度に、毎回API呼び出し手順にしたがって呼び出すのも、なかなかめんどうです。
またこのSDKでは各NFCデバイス(NFC-A,NFC-B,NFC-F)の検出までは共通化できますが、そこからのコマンド発行については個別に実装していかなければなりません。
ライブラリ化してより簡単にNFCデバイスにアクセスできるようにします。

SDK for NFC Wrapper Library


呼び出しが大変

新しいプロジェクト立ち上げの度に、毎回API呼び出し手順にしたがって呼び出すのも、なかなかめんどうです。
またこのSDKでは各NFCデバイス(NFC-A,NFC-B,NFC-F)の検出までは共通化できますが、そこからのコマンド発行については個別に実装していかなければなりません。
ライブラリ化してより簡単にNFCデバイスにアクセスできるようにします。

2012年10月4日木曜日

NFC対応アプリケーションを作る

Windows7にPaSoRi(RC-S330)を接続してNFCタグをかざすと、そのIDを表示するアプリケーションを作成します。
API呼び出し順序については前回のエントリを参照してください

NFC-IDを表示するWindowsアプリケーションを作る

NFC対応アプリケーションを作る

Windows7にPaSoRi(RC-S330)を接続してNFCタグをかざすと、そのIDを表示するアプリケーションを作成します。
API呼び出し順序については前回のエントリを参照してください

2012年10月3日水曜日

SDK for NFCのライブラリのAPIを見る

SDK for NFCを使ったプログラムを作成するには、”felica_nfc_library.dll“というライブラリを使用します。
ライブラリのAPIについて簡単にまとめます。
この内容はSDKに含まれるマニュアルに書かれていますので、詳しくはそちらを御覧ください。

APIアクセスの順序

簡単に図にまとめました。


































SDK for NFCのライブラリのAPIを見る

SDK for NFCのライブラリのAPIを見る

SDK for NFCを使ったプログラムを作成するには、”felica_nfc_library.dll“というライブラリを使用します。
ライブラリのAPIについて簡単にまとめます。
この内容はSDKに含まれるマニュアルに書かれていますので、詳しくはそちらを御覧ください。

APIアクセスの順序

簡単に図にまとめました。


































WindowsでのNFC開発環境を整える

WindowsでNFC開発するための環境を整えます。

PC

Windows 7 SP1 .NET Framework 4.0
開発にはC#を使用するため、.NET Frameworkが必要です。

NFC-R/W

PaSoRi RC-S330/S
PaSoRi RC-S370
PaSoRi RC-S380
店頭では確定申告のコーナーにおいてあるかも…。
ネット通販で買うのがお勧めです。

ドライバ

Sony Japan | FeliCa | 個人のお客様 | ダウンロード | NFCポートソフトウェア
http://www.sony.co.jp/Products/felica/consumer/download/felicaportsoftware.html
SDKに同梱されています。

SDK

Sony Japan | FeliCa | 法人のお客様 | 製品情報 | ICS-D010・D004・D002・D003
http://www.sony.co.jp/Products/felica/business/products/ICS-D004_002_003.html
NFCのSDKは「SDK for NFC Starter Kit」と「SDK for NFC Lite」です。
個人利用や評価の場合のみ「SDK for NFC Starter Kit」が使用できます。
商用利用の場合、「SDK for NFC Lite」を購入しましょう。

IDE

Microsoft Visual Studio 2010
http://www.microsoft.com/japan/visualstudio/products/2010-editions
C#で開発します。

カスタマー開発部 山下智樹

WindowsでのNFC開発環境を整える

WindowsでのNFC開発環境を整える

WindowsでNFC開発するための環境を整えます。

PC

Windows 7 SP1 .NET Framework 4.0
開発にはC#を使用するため、.NET Frameworkが必要です。

NFC-R/W

PaSoRi RC-S330/S
PaSoRi RC-S370
PaSoRi RC-S380
店頭では確定申告のコーナーにおいてあるかも…。
ネット通販で買うのがお勧めです。

ドライバ

Sony Japan | FeliCa | 個人のお客様 | ダウンロード | NFCポートソフトウェア
http://www.sony.co.jp/Products/felica/consumer/download/felicaportsoftware.html
SDKに同梱されています。

SDK

Sony Japan | FeliCa | 法人のお客様 | 製品情報 | ICS-D010・D004・D002・D003
http://www.sony.co.jp/Products/felica/business/products/ICS-D004_002_003.html
NFCのSDKは「SDK for NFC Starter Kit」と「SDK for NFC Lite」です。
個人利用や評価の場合のみ「SDK for NFC Starter Kit」が使用できます。
商用利用の場合、「SDK for NFC Lite」を購入しましょう。

IDE

Microsoft Visual Studio 2010
http://www.microsoft.com/japan/visualstudio/products/2010-editions
C#で開発します。

カスタマー開発部 山下智樹

2012年10月2日火曜日



前回に引き続きロボットを作っている住友です。


今回は筐体の設計とプロトタイプの作成までです。


FreeCAD


筐体の設計にはFreeCADというオープンソースの3Dモデラーを使用しました。


FreeCADでは立方体、球体、円柱、円錐などの基本的な形状を組み合わせて形を作ることができます。


Ubuntuを使っている人ならapt-getで直ぐに使うことができます。


住友はDebianを使っていて、新しいバージョン(0.13)が使いたかったのでビルドしました。


外観


外観は球体をベースに手足を生やしたものにしようと思います。


f:id:bs-android:20121002013329p:image


デフォルメしたロボットで2足歩行は難しそうなので手足を使って動けるようにしようと思います。


頭も振り向けるようにしたいです。


眼にもレンズを埋め込み、LEDでチカチカさせるつもりです。


f:id:bs-android:20121002013330p:image





フレーム


筐体に埋め込むフレームです。


サーボモータを手足の4つと頭の合計5つを埋め込むことを想定しています。


f:id:bs-android:20121002013331p:image





フレームの原型を作成


ボディまで一気に作ってみたいところですが、


とりあえず今回はフレームだけ作ってみようと思います。


3Dプリンタがあれば簡単に作れるのですが生憎持っていないので手作りです。


取り出したるは厚さ5mmのスチレンボート、これを切って貼ってして形状を作ります。


f:id:bs-android:20121002013332j:image


f:id:bs-android:20121002013333j:image


切り出せた部品をピンやスチロール用のボンドで繋げていき、形状ができあがりました。


f:id:bs-android:20121002013808j:image


出来上がったのはいいのですがスチレンボードは柔らかく、


このままではフレームには使えないのでシリコンで型を取ってレジンで整形します。


市販の型取り用ブロックにフレームを入れてシリコンを流しこめば型が作れます。


2ピースの型にしようと思うので粘土で片面を包み、ブロックに入れてシリコンを流し込みます。


f:id:bs-android:20121002014458j:image


f:id:bs-android:20121002014459j:image


f:id:bs-android:20121002013810j:image


一度固まったらひっくり返してもう片面の粘土を剥がし、再度ブロックに入れてシリコンを流し込みます。


これで2ピースの型が出来上がりました。


f:id:bs-android:20121002013811j:image


フレームのレジンキャスト


出来上がった型に剥離剤を塗ってウレタン樹脂を流し込めば


レジン製の頑丈なフレームの出来上がりです。


※:使用するレジンによっては有毒なガスが出ますので換気をしっかりしましょう。


f:id:bs-android:20121002013812j:image


3つ作ったのですが、1つは気泡が入ってしまい三叉の部分がボコボコになってしまいました。





出来上がったものにサーボモータを4つ乗せて、ついでにスチロール性の足をつけて見ました。


この段階で既に歩けるのか心配になったのですが気にせず続けていこうと思います。


f:id:bs-android:20121002014246j:image




というわけで筐体の設計からフレームのプロトタイプ制作まででした。


(ソフト屋さんのはずなのにソフトの話が一つもありませんでしたが、、、)


次はこのフレームに乗せるための制御用のボードの作成をしていく予定です。




文責:カスタマー開発部 住友孝郎





根性試しにロボットを作る~筐体設計編~



前回に引き続きロボットを作っている住友です。


今回は筐体の設計とプロトタイプの作成までです。


FreeCAD


筐体の設計にはFreeCADというオープンソースの3Dモデラーを使用しました。


FreeCADでは立方体、球体、円柱、円錐などの基本的な形状を組み合わせて形を作ることができます。


Ubuntuを使っている人ならapt-getで直ぐに使うことができます。


住友はDebianを使っていて、新しいバージョン(0.13)が使いたかったのでビルドしました。


外観


外観は球体をベースに手足を生やしたものにしようと思います。


f:id:bs-android:20121002013329p:image


デフォルメしたロボットで2足歩行は難しそうなので手足を使って動けるようにしようと思います。


頭も振り向けるようにしたいです。


眼にもレンズを埋め込み、LEDでチカチカさせるつもりです。


f:id:bs-android:20121002013330p:image





フレーム


筐体に埋め込むフレームです。


サーボモータを手足の4つと頭の合計5つを埋め込むことを想定しています。


f:id:bs-android:20121002013331p:image





フレームの原型を作成


ボディまで一気に作ってみたいところですが、


とりあえず今回はフレームだけ作ってみようと思います。


3Dプリンタがあれば簡単に作れるのですが生憎持っていないので手作りです。


取り出したるは厚さ5mmのスチレンボート、これを切って貼ってして形状を作ります。


f:id:bs-android:20121002013332j:image


f:id:bs-android:20121002013333j:image


切り出せた部品をピンやスチロール用のボンドで繋げていき、形状ができあがりました。


f:id:bs-android:20121002013808j:image


出来上がったのはいいのですがスチレンボードは柔らかく、


このままではフレームには使えないのでシリコンで型を取ってレジンで整形します。


市販の型取り用ブロックにフレームを入れてシリコンを流しこめば型が作れます。


2ピースの型にしようと思うので粘土で片面を包み、ブロックに入れてシリコンを流し込みます。


f:id:bs-android:20121002014458j:image


f:id:bs-android:20121002014459j:image


f:id:bs-android:20121002013810j:image


一度固まったらひっくり返してもう片面の粘土を剥がし、再度ブロックに入れてシリコンを流し込みます。


これで2ピースの型が出来上がりました。


f:id:bs-android:20121002013811j:image


フレームのレジンキャスト


出来上がった型に剥離剤を塗ってウレタン樹脂を流し込めば


レジン製の頑丈なフレームの出来上がりです。


※:使用するレジンによっては有毒なガスが出ますので換気をしっかりしましょう。


f:id:bs-android:20121002013812j:image


3つ作ったのですが、1つは気泡が入ってしまい三叉の部分がボコボコになってしまいました。





出来上がったものにサーボモータを4つ乗せて、ついでにスチロール性の足をつけて見ました。


この段階で既に歩けるのか心配になったのですが気にせず続けていこうと思います。


f:id:bs-android:20121002014246j:image




というわけで筐体の設計からフレームのプロトタイプ制作まででした。


(ソフト屋さんのはずなのにソフトの話が一つもありませんでしたが、、、)


次はこのフレームに乗せるための制御用のボードの作成をしていく予定です。




文責:カスタマー開発部 住友孝郎





2012年9月25日火曜日

AndroidでRTD URIを書く

RTD URIを書く

AndroidでRTD URIを書き込みます
NFCに反応する部分までは以前書きましたので、そちらをご参照ください。
> ブリリアントサービス NFC技術ブログ: AndroidでRTD Textを書く 

NdefMessageの作成

書き込み対象のRTD URI RecordをもったNdefMessageを作成します。
NdefRecordの作成には
  • TNF
  • TYPE
  • ID
  • PAYLOAD
が必要になります。(他に全てのバイナリから作成することも可能です)
TNFはTextRecord#TNF_WELL_KNOWN を使用します。
TYPEはTextRecord#RTD_URI を使用します。
IDは今回使用しないので空の配列を渡します。
PAYLOADは自作する必要があります。


NDEFを書き込む

NDEFの書き込みに関しては以前書きましたので、そちらをご参照ください。
> ブリリアントサービス NFC技術ブログ: AndroidでRTD Textを書く 

ソースコード


カスタマー開発部 山下智樹

AndroidでRTD URIを書く

AndroidでRTD URIを書く

RTD URIを書く

AndroidでRTD URIを書き込みます
NFCに反応する部分までは以前書きましたので、そちらをご参照ください。
> ブリリアントサービス NFC技術ブログ: AndroidでRTD Textを書く 

NdefMessageの作成

書き込み対象のRTD URI RecordをもったNdefMessageを作成します。
NdefRecordの作成には
  • TNF
  • TYPE
  • ID
  • PAYLOAD
が必要になります。(他に全てのバイナリから作成することも可能です)
TNFはTextRecord#TNF_WELL_KNOWN を使用します。
TYPEはTextRecord#RTD_URI を使用します。
IDは今回使用しないので空の配列を渡します。
PAYLOADは自作する必要があります。


NDEFを書き込む

NDEFの書き込みに関しては以前書きましたので、そちらをご参照ください。
> ブリリアントサービス NFC技術ブログ: AndroidでRTD Textを書く 

ソースコード


カスタマー開発部 山下智樹

2012年9月21日金曜日



ものを作るのが好きで、Androidを使ったロボットアームなど、

ADKを使用したロボットを勉強会やイベントの展示に持って行っている住友です。

私自身、ソフトウェア開発を生業にしているのですが、

フィジカルコンピューティングという言葉が浸透しつつある昨今ですので

一からロボットを作って見ることにしました。

今回は構想と材料の準備と紹介です。

根性試しにロボットを作る~準備編~



ものを作るのが好きで、Androidを使ったロボットアームなど、

ADKを使用したロボットを勉強会やイベントの展示に持って行っている住友です。

私自身、ソフトウェア開発を生業にしているのですが、

フィジカルコンピューティングという言葉が浸透しつつある昨今ですので

一からロボットを作って見ることにしました。

今回は構想と材料の準備と紹介です。

2012年9月20日木曜日


RTD URIを読む

AndroidでRTD Textを読み取ります。
AndroidではNdefMessageNdefRecordのクラスが用意されています。
NdefRecordはヘッダまでしかパースされないので
PAYLOADを自分でパースする必要があります。

Ndef Recordを取得する

Ndef Recordの取得までは前回解説したので、省略します。

RTD URIを判定する

Textの判定はTNFがWELL_KNOWNになっていることと、TYPEが'U'になっていることを確認します。

RTD Uriをパースする

PAYLOADを、RTD URIの仕様に従いパースしていきます。
RTD URIの仕様についてはこちらをご覧ください。
ブリリアントサービス NFC技術ブログ: RTD URIとは 
例ではURIを作成した後にブラウザを起動します。

実行イメージ





















ソースコード

https://github.com/bs-nfc/ReadRTDUri

カスタマー開発部 山下智樹

AndroidでRTD URIを読む


RTD URIを読む

AndroidでRTD Textを読み取ります。
AndroidではNdefMessageNdefRecordのクラスが用意されています。
NdefRecordはヘッダまでしかパースされないので
PAYLOADを自分でパースする必要があります。

Ndef Recordを取得する

Ndef Recordの取得までは前回解説したので、省略します。

RTD URIを判定する

Textの判定はTNFがWELL_KNOWNになっていることと、TYPEが'U'になっていることを確認します。

RTD Uriをパースする

PAYLOADを、RTD URIの仕様に従いパースしていきます。
RTD URIの仕様についてはこちらをご覧ください。
ブリリアントサービス NFC技術ブログ: RTD URIとは 
例ではURIを作成した後にブラウザを起動します。

実行イメージ





















ソースコード

https://github.com/bs-nfc/ReadRTDUri

カスタマー開発部 山下智樹

2012年9月19日水曜日

RTD URIとは

Record Type DefinitionのURIフォーマットのことを指します。
仕様書はこちらにあります

NFC Forum : Technical Specifications
http://www.nfc-forum.org/specs/spec_list/#rtds

URIフォーマットの構造













  • Uri Identifier Code
    • 1Byte
    • 接頭辞のコードを表します。
      以下が代表的なコードです
      • 0x01 -> http://www.
      • 0x02 -> https://www.
      • 0x03 -> http://
      • 0x04 -> https://
      • 0x06 -> mailto://
      • 0x0D -> ftp://
      • 0x1D -> file://
      • 詳しくは仕様書を御覧ください。
  • Uri FIeld
    • Uri Identifier Codeで省略した文字を除くURIを格納します。
    • UTF-8でエンコード/デコードします。

URIを格納したNDEFの例

"http://bs-nfc.blogspot.jp"を表したNDEFは以下のようになります。
D1 01 13 55
03 62 73 2D
6E 66 63 2E
62 6C 6F 67
73 70 6F 74
2E 6A 70

  • FLAGS
    • MB 0x01
    • ME 0x01
    • CF 0x00
    • SR 0x01
    • IL 0x00
  • TNF 0x01 (Well Known Type)
  • TYPE LENGTH 0x01
  • PAYLOAD LENGTH 0x13
  • TYPE 0x55 -> 'U'
  • PAYLOAD
    • Uri Identifier Code 0x03 -> "http://"
    • Uri Field 0x62 0x73 0x2D 0x6E 0x66 0x63 0x2E 0x62 0x6C 0x6F 0x67 0x73 0x70 0x6F 0x74 0x2E 0x6A 0x70
      -> "bs-nfc.blogspot.jp"

カスタマー開発部 山下智樹

RTD URIとは

RTD URIとは

Record Type DefinitionのURIフォーマットのことを指します。
仕様書はこちらにあります

NFC Forum : Technical Specifications
http://www.nfc-forum.org/specs/spec_list/#rtds

URIフォーマットの構造













  • Uri Identifier Code
    • 1Byte
    • 接頭辞のコードを表します。
      以下が代表的なコードです
      • 0x01 -> http://www.
      • 0x02 -> https://www.
      • 0x03 -> http://
      • 0x04 -> https://
      • 0x06 -> mailto://
      • 0x0D -> ftp://
      • 0x1D -> file://
      • 詳しくは仕様書を御覧ください。
  • Uri FIeld
    • Uri Identifier Codeで省略した文字を除くURIを格納します。
    • UTF-8でエンコード/デコードします。

URIを格納したNDEFの例

"http://bs-nfc.blogspot.jp"を表したNDEFは以下のようになります。
D1 01 13 55
03 62 73 2D
6E 66 63 2E
62 6C 6F 67
73 70 6F 74
2E 6A 70

  • FLAGS
    • MB 0x01
    • ME 0x01
    • CF 0x00
    • SR 0x01
    • IL 0x00
  • TNF 0x01 (Well Known Type)
  • TYPE LENGTH 0x01
  • PAYLOAD LENGTH 0x13
  • TYPE 0x55 -> 'U'
  • PAYLOAD
    • Uri Identifier Code 0x03 -> "http://"
    • Uri Field 0x62 0x73 0x2D 0x6E 0x66 0x63 0x2E 0x62 0x6C 0x6F 0x67 0x73 0x70 0x6F 0x74 0x2E 0x6A 0x70
      -> "bs-nfc.blogspot.jp"

カスタマー開発部 山下智樹

2012年9月11日火曜日



HTML5カンファレンスに参加してきました宮地です。

最近、巷で話題のHTML5のカンファレンスが横浜であったので参加してきました。

内容的には草案の最終コール段階の

HTML5に関してのブラウザの対応や実際の開発現場でのお話をお聞きいたしました。

このブログにはカンファレンスを聞いていて思ったことを書きます。

(間違っていたら速攻でツッコミを入れてあげてください。)

スタッフさんの集合写真


f:id:bs-android:20120908194258j:image:w640

HTML5 Conference 2012に行ってきました。



HTML5カンファレンスに参加してきました宮地です。

最近、巷で話題のHTML5のカンファレンスが横浜であったので参加してきました。

内容的には草案の最終コール段階の

HTML5に関してのブラウザの対応や実際の開発現場でのお話をお聞きいたしました。

このブログにはカンファレンスを聞いていて思ったことを書きます。

(間違っていたら速攻でツッコミを入れてあげてください。)

スタッフさんの集合写真


f:id:bs-android:20120908194258j:image:w640

Related Posts Plugin for WordPress, Blogger...