開けない日本語のファイル名のZipファイル

後輩「先輩。お客さんから貰ったZipファイルが開けないです。」
先輩「どれどれ・・・あぁ、とりあえず、ファイル名をfile.zipに変えてから解凍してみたら?」

受け取ったZipファイルが開けない!とは良く聞く話で、
送り主に聞いてもちゃんと解凍出来ると言われて困るというのも、ここ数年良く聞きます。

そんなときに試してみたいのは、ファイル名を変えて解凍です。

後輩「解凍出来ました!でもどうして解凍出来なかったんでしょう?」
先輩「詳しく話すと長くなるけど、大丈夫?」
後輩「頑張ります」

“開けない日本語のファイル名のZipファイル” の続きを読む

町にPepperがやってきた 〜 「Pepperはじめました」

昨年10月に愛知県豊橋市により開設された「メイカーズ・ラボとよはし」の開設に合わせて導入されたPepper。弊社ではPepperの活用支援を通して地域振興のお手伝いをさせて頂いております。

メーカーズ・ラボ とよはし 開所式
メーカーズ・ラボ とよはし 開所式

主な支援内容は豊橋市に関連したイベントにおけるPepperの技術サポート をはじめ 月例で主に市民の方々を対象にしたPepper講座、また、Pepperを活用するためのハッカソン開催のお手伝いをさせて頂きました。

子供達も真剣です
子供達も真剣です

毎月開催される講座ではPepperのロボアプリ開発ツールChoregrapheを使った簡単なロボアプリの制作が体験できます。小学生も参加頂いており、初心者でも気軽に参加頂ける内容となっております。たまに定員オーバーになることもあるほど(?)地域の方にはご好評いただいております。

約半年間に渡る講座を通し、多くの方がPepperとふれあう様子を見きました。
そのなかから「Pepperあるある」を幾つか紹介しつつ、その可能性について考えてみたいと思います。

“町にPepperがやってきた 〜 「Pepperはじめました」” の続きを読む

バイナリーエディタがあればファイルタイプが分かる!たぶん。

前回、自分が書いた記事は、緩すぎると一部から言われた東京Kです。こんばんは。
というわけで、少し技術寄りの話に戻して、よく分からないファイルの種類を特定するという話題でも。

先日「JPEGファイルのみを受け付けるシステムで、PNGファイルをアップロードできる原因調査」という事で、自分の所にまわってきたファイルがありました。

このように、実物を渡されたら、真っ先に疑うのが「そのファイルが本当に目的のファイルか?」です。
ファイルの形式を変えるために拡張子を変えるだけで良いと思っている方は、結構いらっしゃるので、まずはそこからの調査です。
調査方法は至って簡単で、バイナリーエディタでファイルの内容を見れば大体分かります。

と言うわけで、件のファイルを早速バイナリーエディタを開いて見たのがこちら:
PNGみたいなjpeg
「0xFF 0xD8」(以下、16進数での文字コードを便宜上Blogでは0xXXという形式で記載します)で始まっています。どう見ても、PNGではありません。
以上、トラブルシューティング終了!

・・・ではつまらないので、もう少し説明をします。
“バイナリーエディタがあればファイルタイプが分かる!たぶん。” の続きを読む

ノマドワークに役立つグッズ

久々登場のnoguchiです。
以前もノマドネタですが、またノマドネタです。

ノマドワークとかテレワークとかを導入する会社さんは最近増えて、ニュースでもみかけるようになりました。でも「導入したよ」の話だけで「実際やっている人がどういうやり方をしているのか」は特集されないですね。ということで、実体験者としての情報発信をしたいと思います。これから始める方の参考になれば。

今回紹介したいのは「ノマドワークに役立つグッズ」です。 “ノマドワークに役立つグッズ” の続きを読む

セカンドライフのシム数は現在どれぐらい?2015/08/19Ver

微力ながらSLGuideの担当している、担当者の片割れ東京Kです。こんばんは。

昨日、ネットを見ていたら、Gigazineさんにこんな記事が!

「海賊船の中に教室」などインターネットの仮想世界上に設けられた実在大学の仮想キャンパスは今どうなっているのか?
http://gigazine.net/news/20150818-second-life-college-campuses/

おおっ!珍しい!セカンドライフの記事だ。
そういえば、最近某デザイン問題でもセカンドライフと言う言葉を聞くし、せっかくだから、SLGuideの担当者として何か書くか!
※SLGuideは当社で運営している、セカンドライフの観光案内的なサイトです。
※こちら→http://slguide.jp/

と思ってみたものの、通常業務しながら、良いネタが思い浮かぶわけも無く。

というわけで、以前紹介した、シム数の変遷の最新版を掲載しておきましょうかね。
セカンドライフのシム数の変遷(2015/08/19版)

見てのとおり、順調に右肩下がりで、そろそろ25000シムを割るかどうか………と言ったところですね。

とりあえず、参考までにということで。

なお、以前、このグラフを紹介した際の記事は以下からどうぞ。
セカンドライフのSIM数の変遷と現状(2013/12/13の当Blog記事)

“先取り! Apple Watchアプリ開発入門セミナー” に参加してきました!

先日 “先取り! Apple Watchアプリ開発入門セミナー” に参加してきました。
その際に学んだ事を備忘録として残しておこうと思います。

1. WatchKitって何さ?
そもそもWatchKitが何か分からない方は公式ドキュメントをご覧になるのが良いと思います。
公式のドキュメントはこちらで公開されてます。

あとは公式のサンプルコードですね。
・WatchKit Catalog
Apple Watch で利用可能なUI一覧を確認する事が出来ます。
今回のセミナーではこちらをベースとして話が進みました。
サンプルコード
・Lister
今回のセミナーではあまり触れられませんでしたが、iCloud経由でiPhoneやMacとTODOリストを同期するアプリみたいです。
サンプルコード

2. どうやって開発するの?
開発には現在公開されている最新のXcode 6.2 beta 4を使用します。(2015年1月27日時点)
https://developer.apple.com/xcode/downloads/
※iOS Developer Programs へ登録している人がダウンロード可能です。

2.1. Apple Watchアプリを作る
現時点ではApple Watchアプリのプロジェクトを作成する機能は提供されていないようです。
ですので、 [iOSアプリプロジェクトの作成] > [AppleWatchターゲットの作成] という2段階でプロジェクトを作成する必要があります。
プロジェクトを作成した結果 WatchKit Extension グループとWatchKit Appグループが作成されるわけですが、WatchKit Extension グループには iOSアプリとしてiPhone上で動作するコード、WatchKit AppグループにはAppleWatch上で利用するリソースが置かれるようになっています。
何故このようにグループが分けられているかという点に関しては追々記載します。

さて、WatchKit Appグループには、作成した段階で Storyboard が作成されます。
Storyboard はGUIで画面遷移や画面レイアウトを作成できるXcodeの便利な機能ですね!
まずはこの Storyboard に対して編集を行っていきます。
iOSアプリでは ViewController という画面を管理する要素がありますが、WatchKitでは IntefaceController というAppleWatch上の画面を管理する要素を使用します。
といってもInterfaceController上にラベルやボタン等を設置する事で簡単に画面デザインが定義できるので、iOSアプリとほとんど変わらないです。

画面デザインが出来たら、次は WatchKit Extension グループに作成されているコードを編集します。
基本的には WatchKit App グループで定義した画面から入力を受けとり、何らかの処理後に画面を更新するプログラムを記述することになると思います。
この際にアシスタントエディタを使用すると Storyboard 上の画面要素とコードを簡単に紐付けることが出来ます。

画面デザインと入出力を処理するコードが作成できたら、AppleWatchアプリの完成です。
あとはAppleWatchアプリをビルドして実行する事でシミュレータが立ち上がり、アプリが実行されます。
現在はAppleWatchが発売されていないのでシミュレータ上での確認になりますが、それでも AppleWatch の簡単な動きは確かめる事が出来ます。

ボタンを押したらラベルの文字列が変わるアプリをセミナーでは作成したのですが、InterfaceController上にLabelとButtonを設置してラベルを変更するコードを一行追加するだけで簡単なアプリができました。
これまでにiOSアプリを作成した事があれば、特に違和感なくAppleWatchアプリを作成できそうです。

2.2. UIの種類
AppleWatchで利用可能なUI一覧を確認する公式サンプルコードとして WatchKit Catalog が用意されています。
iOSアプリとはデザインが若干異なるので、AppleWatchアプリを作成する場合はこのサンプルコードを実行して一度全てのUIを見ておくのが良さそうです。

・ラベル(Label)
指定した文字列を表示する要素
・ボタン(Button)
タップ時にアクションを発生させる要素
・テーブル(Table)
列形式で表示する要素
UITableViewに似ているが管理方法はWatchKit独自
・画像(Image)
AppleWatch内で保持している画像を表示する要素
基本的にオンラインで画像情報をやり取りする事はできない
パラパラ漫画レベルのアニメーションは適用可能
・グループ(Group)
UIをグループでまとめ、レイアウトを管理する要素
iOSではUIViewの階層構造により表現されていたが、WatchKitにUIViewの概念はないためこちらを使用
・コンテキストメニュー(Menu)
画面を長押しすると表示されるメニュー要素
最大4つのメニューボタンを定義可能

その他セミナーでは触れられませんでしたが、SwitchやSlider等、iOSでもなじみのあるUIが提供されているようです。

2.3. 画面遷移の種類
画面遷移は主に3種類の方法が提供されており、こちらもiOSアプリを作成する際の指定方法と似ています。
それぞれの画面遷移は Storyboard 上から指定する事が可能です。

・左右のスワイプ(横になぞる)で画面遷移
Interface Controller同士をSequeで結ぶとページングUIが作成できる
・ナビゲーションバーを利用した画面遷移
Button等からInterface ControllerへSequeを結び、Push Sequeを選択するとナビゲーションバーを活用した画面遷移が可能になる
・モーダル表示形式による画面遷移
Button等からInterface ControllerへSequeを結び、Modal Sequeを選択するとモーダル遷移で画面が表示される

3. Apple Watch の特徴
これまでに WatchKit の概要をまとめてみましたが、この内容から Apple Watch のハードウェア的な仕様が伺えます。
先程説明したように、 AppleWatch アプリのプロジェクトは WatchKit Extension グループと WatchKit App グループの2つに分けられて管理されており、WatchKit Extension は iPhone 側、WatchKit App は AppleWatch 側にインストールさせることで AppleWatch アプリを動作させます。
つまり、AppleWatch アプリは必ず iPhone と連動しなければ動作させる事が出来ないということです。

何故このような構成なのかというと、AppleWatch は iPhoneよりも駆体が小さく、やはりバッテリーの容量に問題があります。
(一日一回充電しないとバッテリー切れになるという話が一時期話題になりました。)
このバッテリー問題を解決する方法として、AppleWatch側では電力を極力消費しないようにリソースを管理するのみに留め、電力を消費する演算処理はiPhone側で行う方式を採用したようです。
この点がiOSアプリの開発とは若干考え方が違うように感じますね。

4. 終わりに
さて、その他気になる点としてはAppleWatchにはどのような入力インタフェースが提供されるのか(GPSや電子コンパス等)といったところでしょうか?
セミナー後に簡単に調べてみたのですが、そのような入力インターフェースに関するAPIは現時点では確認できませんでした。
今後APIが更新されることでそれらの情報も明らかになってくるのでしょうか?

また、2/24にアップルのスペシャルイベントが開催されてAppleWatch実機が披露されるとか、4月にはAppleWatchが発売されるとかの噂が色々と出回っています。
早くAppleWatch実機を拝んでみたいものですね!

ベトナム探訪

ベトナムへ行ってきました。

IMG_1961

今回ベトナムまで足を運んだ目的は、現地でのオフショア開発の現状視察です。
現地で見聞きしたソフトウェア開発事情はもちろん、それを取り囲む社会的な背景、現地の人たちの生活を目にすることで、国内やネットでは知り得ない、グローバル化の進むこの業界の一端を垣間見ることできました。

オフショア開発って何って人はこちらをご覧下さい。
http://itpro.nikkeibp.co.jp/atcl/column/14/494329/082800009/
この記事読んでる人は多分知っているとは思いますが…

今回は弊社でお世話になったことのあるAsianTech様のホアンさんに協力して頂き、
ベトナム中部の都市ダナンにて現地でオフショア開発を請け負っているソフトウェア開発会社と現地の日本語学校を幾つか訪ねてまいりました。

“ベトナム探訪” の続きを読む

iBeaconを利用したアプリ開発について

iBeaconはiOS7から標準搭載されたBluetooth Low Enaergy(BLE)を使った新技術で,オンラインの情報からオフライン(実際の店舗など)にユーザを誘導するO2O(Online to Offline)施策の切り札になるのではないかと注目を集めている技術です。

従来のO2O施策ではNFCが多く利用されていましたが,iPhoneにはNFCが搭載されておらずiPhoneユーザは利用できない状況でした。
また,日本ではiPhoneのスマートフォンシェアが約7割という調査結果も出ており,特に日本でのO2Oの普及が伸び悩む原因となっています。

iBeaconはBLEに基づいた技術なので,「iBeacon」というAppleの商標はついていますが,同様のことはBLEに対応したAPIが追加されたAndroid4.3以降の端末でも可能となっています。

私はプログラマなので実際にiBeaconアプリを開発する上でのポイントなどをご紹介します。

iBeaconの基本的な仕組みはビーコン(発信機)から常時発信される以下の情報をiPhone(受信機)で受け取るという単純なものです。

  • 送信される情報
    1. UUID:128ビット文字列
    2. Major値:16ビット整数
    3. Minor値:16ビット整数

注意点としては, このUUIDはビーコン固有のUUIDではありません。ビーコン領域(リージョン)のUUIDとなります。
そのため,一つの店舗のビーコンは全て同一のUUIDに設定し,Major値・Minor値の組み合わせでビーコンを特定するような使い方になります。

上記の情報に付随してビーコンからの信号電波強度(rssi)から距離の概算を取得することができます。

  • 取得可能な距離情報
    1. 近接度(proximity):接近(Immediate),近い(Near),遠い(Far),不明(Unknown)のいずれか
    2. 精度(accuracy)

よくaccuracyを距離(m)と解説しているサイトが有りますが,そうではなく精度≒推定誤差です。
地図アプリでGPSを使用した際に表示される誤差の円のようなものです。
この技術では電波強度から距離を概出しているに過ぎないため,ビーコンとの正確な距離は取得できません。
もちろん遮蔽物の状況によっても変わります。
実際に試してみた感じですと,だいたいImmediate:10cm以内,Near:1m以内,Far:1m以上といったところでした。
ビーコンとiPhoneの距離の変化に対する距離情報の追従はワンテンポ遅い感じです。(2秒程度経って変化するぐらい)
内部的にある程度サンプルを取って平均値を返しているような挙動です。

実際のビーコン検出は以下の2つの方法を組み合わせて行います。

  • リージョン監視
    アプリで予めビーコン領域(リージョン)のUUIDを登録しておくことで,リージョンへのIn・Out時にアプリ側に通知が来ます。
    この検出はバックグラウンド動作中も可能です。
    ただし,この際に取得できる情報はリージョンのUUIDのみです。
    ビーコンごとのMajor・Minor・距離情報は取得できません。
  • レイジング
    こちらはアプリから動的にビーコンを検出しに行く感じです。
    1秒ごとに検出されたビーコンのリストを取得できます。
    もちろん,ビーコンごとのMajor・Minor・距離情報も含まれます。

レイジングは常にONにすると電力消費が大きいため,リージョン監視でリージョン内であることを検知すると,
レイジングをONにするような使い方になります。
なお,ユーザがリージョンの境界をウロウロした際に,通知が頻繁に発生することを抑えるため,
リージョンからの退出検知は大きめのバッファが取られています。
そのため,ユーザの退店等を即座に検出するのは難しいです。

あとはこれらの情報とオンラインの情報を組み合わせてサービスを提供することになります。

iOS上でiBeaconをユーザに使用してもらうには以下のハードルを超える必要があります。

  1. iBeaconを使用するアプリをインストールしてもらう
    ※標準アプリのPassbookを使う方法がありますが,こちらについては後述。
  2. iOS7以上を使ってもらう
    iOS7からの技術なので必須です。
  3. Bluetooth機能をONにしてもらう
    BLEを使用した技術なので必須です。
  4. アプリの位置情報サービス利用を許可してもらう
    iBeaconの機能はCoreLocationモジュールに含まれるため許可してもらわないと情報が取れません。
  5. アプリを起動(バックグラウンド動作を含む)しておいてもらう
    アプリが起動している場合しか通知することができません。
    バックグラウンド動作中はビーコン領域へのIn・Out(リージョン監視)のみ検出可能

ユーザに予めやってもらうことが多いため,ある程度ユーザにiBeacon(アプリ)を使う意識を持ってもらうことが必要そうです。
電池の持ちを考慮してBluetoothをOFFにしているユーザが多いと思われますので,このあたりのユーザへの動機付けがサービスの成否を分けそうです。

Passbookとの連携は若干上記と異なります。
Passに予め対応するビーコンの情報(UUID・Major・Minor)を設定しておくことで,そのビーコンと対応したPassがロック画面に表示されるようになります。
GPSより精度よくクーポンなどを提示したい場合に使えそうです。
クーポン裏面にはURLリンクを設置することが可能で,URLスキームと組み合わせることでアプリへ誘導することも可能です。(iOS7からのテキストリンク使用時のみ)
ただし,ロック画面からクーポン表示時はリンクは不活性になってしまうため,Passbookアプリから表示する必要があります。

その他にiBeaconを利用する際に知っておく必要が有ることは,セキュリティについてです。
ビーコンは自分の情報(UUID・Major・Minor)を無差別に発信(アドバタイズ)しているだけですので,セキュリティは非常に低いです。
そのためビーコンに近づくとポイントが発行されるようなシステムを構築した場合,
偽ビーコン(実際のビーコンと同一のUUID・Major・Minorを発信する)を作られてしまうと来店していないのにポイントが貯まるといったことが簡単に可能となります。
このあたりは他の情報(GPS情報など)と組み合わせてうまくやる必要がありそうです。

アメリカでは日本と違いNFCの普及度が低いため,iBeaconの普及にかなり力を入れているようです。
実際に導入された例としては以下のようなものがあります。

このシステムではスタジアムのゲートに近づくとチケットが画面に表示されたり,スタジアム内の売店に近づくとクーポンが表示されたりするようです。

こういったユーザが特定の場所に近づくことでその場所に最適な情報を手に入れることができ,
店舗側はユーザの動線やホットスポットを知ることができるようなシステムが主になっていきそうです。

単純な仕組みだからこそ他の技術と組み合わせることで様々な場所で応用できると思います。
普及していない今のうちに触ってみては如何でしょうか?

もちろんiPhoneをビーコン(発信機)にすることも可能です。