2013/12/13

Mac の電源OFF/ONを予約する

今井です。

ビル停電のため、その間サーバ(Mac OS X Lion Server)の電源を切っておく必要があり、電源のスケジュール方法を調べました。


shutdown コマンドによる方法


さて、電源OFFといえば shutdown コマンドが真っ先に思いつきます。
$ man shutdown
で使い方を見てみると
time    Time is the time at which shutdown will bring the system down and may be the
        word now (indicating an immediate shutdown) or specify a future time in one
        of two formats: +number, or yymmddhhmm, where the year, month, and day may be
        defaulted to the current system values.  The first form brings the system
        down in number minutes and the second at the absolute time specified. 
と、時間指定は yymmddhhmm と書いてあります。
実際にやってみると、
$ sudo shutdown -h 1312152145
Password:
Shutdown at Sun Dec 15 21:45:00 2013.
shutdown: [pid 636]
という感じで電源OFFの予約が出来ました。
予約を取り消したい場合には表示されたプロセスIDを使って
$ sudo kill 636
のようにプロセスを殺せばOK。

しかしこれには2つの問題があります。

1つは期日までに誰かが再起動したら予約はなかった事になります。

もう1つはできるのは電源OFFだけで電源ONが出来ません。


『システム環境設定』による方法


では電源ONはどうすればいいでしょうか?
確か『システム環境設定』からスケジュールで設定できたはず。

ということで『システム環境設定』の『省エネルギー』を見てみましょう。


『スケジュール...』を開きます。


ここから電源OFF/ONの予約が出来そうです。
しかし残念ながら日時指定が出来ないので、


と設定しました。
当然、週明けに設定を戻しておかないと毎週電源OFF/ONを行ってしまいます。
shutdown と違って期日前に再起動しても設定が消えないのはいいですが、イマイチな感じですね。


pmset コマンドによる方法


やはり細かい動作はコマンドラインの方が出来そうだということで、Google先生で検索してみます。
日本語で検索してもなかなか見つかりませんでしたが、英語で検索するとすぐに

Power Management & Scheduling via Command Line

が見つかりました。
『システム環境設定』の『省エネルギー』で出来る設定は pmset コマンドで細かく設定できるようです。
$ man pmset
を見るとスケジュールの設定は
pmset schedule [cancel] type date+time [owner]
という指定で出来るようです。設定する引数についても次のように書いてあります。
SCHEDULED EVENT ARGUMENTS
     pmset allows you to schedule system sleep, shutdown, wakeup and/or power on. "sched-
     ule" is for setting up one-time power events, and "repeat" is for setting up
     daily/weekly power on and power off events. Note that you may only have one pair of
     repeating events scheduled - a "power on" event and a "power off" event. For sleep
     cycling applications, pmset can schedule a "relative" wakeup to occur in seconds from
     the end of system sleep, but this event cannot be cancelled and is inherently impre-
     cise.

     type - one of sleep, wake, poweron, shutdown, wakeorpoweron
     date/time - "MM/dd/yy HH:mm:ss" (in 24 hour format; must be in quotes)
     time - HH:mm:ss
     weekdays - a subset of MTWRFSU ("M" and "MTWRF" are valid strings)
     owner - a string describing the person or program who is scheduling this one-time
     power event (optional)
これに従い、電源OFFの設定を
$ sudo pmset schedule shutdown "12/15/2013 21:45:00"
電源ONの設定を
$ sudo pmset schedule poweron "12/16/2013 03:00:00"
としました。設定を確認してみると
$ pmset -g sched
Scheduled power events:
 [0]  shutdown at 12/15/13 21:45:00
 [1]  poweron at 12/16/13 03:00:00
確かに設定できています。
この設定は実行前に再起動しても消えずに残っていますし、実行後は消えています。
こちらの望み通りの動作です。素晴らしい!!

ちなみにキャンセルはスケジュールの番号を指定して
$ pmset schedule cancel 0
とするか、タイプ、日時を指定して
$ pmset schedule cancel shutdown "12/15/2013 21:45:00"
で行うことができました。

コマンドラインで設定ができる Mac OS X はやっぱり便利ですね。
UNIX の文化って素晴らしいです。

2013/12/10

JAWS-UG名古屋第7回勉強会に参加しました!

 後藤です。



 12月7日土曜に行われた、「JAWS-UG名古屋 勉強会 第7回 〜年の瀬、2014年に向けてAWSの未来を語る」へ参加して参りました! 今回はぼっち参加です。
 全体の参加者は多分30人くらい、ほとんどが懇親会に参加していらっしゃったような感じだったと思います。

 月並みな感想ですが、とても楽しかったし、学びの多かった、有益な時間になったと思います。


■ 勉強会の内容

 各プレゼンターの方が皆さん資料をアップして下さっているので、リンクを張…ろうとおもったら既にまとめて下さっている方がいらっしゃったので、よろしければそちらをご覧ください↓

take some notes 【システム開発メモ Flex AWS DB WEB Android etc】 まとめたよ JAWS-UG名古屋 勉強会 第7回
JAWS-UG名古屋第7回勉強会に参加しました - yoshidashingo


 以下はすごく私個人の感想となります。まだまだAWS歴数ヶ月の初心者な視点の感想ということでご容赦くださいませ! 何かあったら教えてください。

(吉田さん)
・re:Invent系の記事はちょっとうらやましかったからほとんど見てなかったので知らなかったのですが、S社の小室さんがcloudpackにってなんだかすごいかんじですね…(英語ペラペラすごい…)
・cloudpackさんのサービスがあまり海外でウケないという話については、そうなんだーと思いました。確かに、英語を使いたがらない日本人相手だからこそウケるんだろうなあという感じもします。逆にSOLID AIRの方はウケたそうです。
・スライドの途中で出てきたcloudpack擬人化っぽい女の子がとても可愛かったです。気になります。聞けばよかった。
・すごくEC2のC3を推してらっしゃいましたが、L2の方が良いかもと後から言ってらっしゃいました。どちらにしろ個人的利用では無料のやつしか使ってない私にはまだ縁遠い話ではあります、、


(大石さん)
・切腹ネタは見たことあるので大石さんのプレゼンをどこかで見たことがあるはずなのですが、震災時の赤十字社を助けたのがServerWorksさんだということを初めて知って(たしか)、驚きました。
・大石さんが切腹侍だからか、年号とか江戸っぽいのにからめたお話が多かった気がします。意識してらっしゃるんでしょうか。
・弊社はどちらかというとSIerではないとおもう(自分がSIerの定義をはっきりとわかっていない)のでSIerさんはそうなんだ〜という感じで聞いていましたが、やはりサービス提供には早さが必要ですよね。同じことを弊社社長にもよく言われます
・オンプレVSクラウドは手紙VS電話というたとえが興味深かったです。
クラウドを活用する企業はそうでない企業と比べて収益が2倍という某大手企業の情報も。


(藤澤さん/LT)
・石田さんと同じ会社の方なのですね
・普段はZabbixを使っているとのことで、その比較な内容でした(藤沢さん自体は代打で3日前にNew Relicを触り始めたばかりらしいです…!)
・そもそもNew Relicというものを初めて知りましたが、インスタンスのパフォーマンスを監視するサービス?だそうで。無料もあるとのことでしたら試してみたいなあと思います。使い方が分かるかが分かりませんが!
・可視化とかインフォグラフィックというのは弊社でもよく言われます。やっぱりグラフとかで出してくれると見やすいですしね。
・性能ならNew Relic、エラー監視ならZabbixがおすすめとのこと。


(櫻井さん/LT)
・櫻井さんもcloudpackさんから!女性!地元が名古屋だそうです。 懇親会でもたくさんお話して頂いて、お世話になりました。
・マルサ的な視点からみたReserved Instancesについてのお話でした。そもそもリザーブドインスタンスっていうの、あるけどなんだろうこれ…ってずっと思ってましたが、ふつうに考えて、予約というか取っておけるってことですよね。そうですよね。
・RIs、3年分買って1年しか使わなかったとしても値段的にお得で、しかも使わなくなったものはMarket Placeで売ることもできたり(手数料はかかる)、スライムのように 小さいインスタンスを集めてキングスライムにしたり、逆にキングスライムをスライムにしたりもできるそうです。初めて知りました。


(小島さん)
・4月のNYからいつも挨拶して下さってお世話になっておりますが、よく考えたら小島さんのプレゼンを聞くのは初めてだったかもしれません。名古屋人だったということも初めて知りました!
・ずっとマーケティングなことをやってらっしゃるというのも初耳でした。そういえば、エバンジェリストの方々とかの話を聞いても、最初はエンジニアって方が多いですよね。
「クラウド化する世界」ニコラス・G・カー著に影響を受けてクラウドの道へ進むことになったそうです
・みなさん言ってらっしゃいますが、小島さんがCompanyMeetingという誰でもジェフ・ベゾス(Amazon.comのえらいひと)に質問できる場で 何でAWSを作ったのかと聞いたら、「ケンカを止めるため」と答えられたそうです。オンプレでやっていたときに 社内でサーバーをたくさん買う人がいたりそんなに買うなと言う人がいたりでケンカになって、それを止めるために始めたものがこういうサービスになった、という感じだった、はず。(3日たっているので記憶が…ちょっと違ったかもしれません)
・ドコモの発表がre:Inventでもあったそうですが、そこで「しゃべってコンシェル」にAWSを使っている話をドコモの中の方が直々にされたそうです。インスタンスは4桁以上が動いてるらしいです。私にはまだ想像できない世界です…
・「イノベーションのジレンマ―技術革新が巨大企業を滅ぼすとき」クレイトン・クリステンセン著 もすすめていらっしゃいました。
・サービスは先にやったもん勝ち、だから早く出さなきゃいけない。クラウド・AWSはそれを助けることができるという話。大石さんのところにもありますが、弊社社長からもよく言われていることです。やはり色んな先進的な方に聞くと、説得力があるというか、やっぱりそうなんだ・やらなきゃ って気になります。スピード大事!



(石田さん)
・プレゼンをしたというわけではなく次回というかJAWS DAYSの告知ですが、石田さんは、面白いですね…! 好きです。
JAWS DAYS 2014、もともと参加しようとは思っていましたが、前日にRoadTripなるものが開催?され、AWS支援のもと 各地からJAWS DAYSへ交通費無料で行けるようになるみたいです! 詳細はまだ発表されているわけではないので分かりませんが、いつもいつも東京ばかり… と行っている名古屋民もこれで参加しやすくなりますね。


(山口さん/懇親会LT)
・時間がなくなってしまったそうで、懇親会でお話を聞くだけになってしまいましたが、用意されていたというプレゼン資料を見たら非常に興味深かったので、ぜひ聞きたかったなぁと残念に思っております。名古屋支部のLTエース?だそうで、きっと勉強会に参加していたらまた聞けると信じて。
・どうでもいいのですが最近わたしは健康のために毎朝ラジオ体操を(Youtubeにアップされたのを見ながら)やっているので、「毎朝体操」は非常に興味深かったです。アップされたらきっと第二までのやつを買います…!のでiPhone版、楽しみにしています。




■ 勉強会の内容


じゃんけん大会、パーカーとかストラップも惜しかったですがわたしは数も多い無難なところでカレンダーを頂きました…!
あと吉田さんが景品のはずのTシャツをホテルに忘れたとのことで、吉田の脱ぎたてTをもらえるということになったのですが、それに見事勝利した大石さんが要らない要らないと仰っていて、


の割に嬉しそうに見えますね!
ちなみにこのTシャツは、re:Invent行けなかった私がちょっと「いいなー」と言っていたら、それが聞こえたらしき大石さんがあげるよ!!と下さり、見事わたしのものとなりました!


吉田さんにサインを頼んだら、書いてくれました。グレーに黒なのであまり見えませんが… お名前と、「Still Day1」と書いてくださいました。(帰って洗濯してみたけど落ちませんでした!) 3月のJAWS DAWSに着ていきます!


そして5週年な小島さんを手書き似顔絵つきの巨大プリンと共にお祝い!


レディファーストということで櫻井さんが最初に小島さんのお顔を頂いたので、私は小島さんの首を頂きました。小島さんの首はおいしかったです。

ぼっちでしたが、色んな方とお話することができたと思います。まだ仕事経験が浅いから と言い訳してしまいがちですが、JAWS名古屋支部の運営をしてらっしゃるなかに学生さんもいらっしゃるので、新卒1年目だからといつまでも言い訳してられません。早くもっと初めての方とも色々がっつりとお話できるようなイケてる社会人になりたいものです。


■ まとめ

 この業界、どうしても年上の方が多くて まだ私は1年目だから仕方ない、と思ってしまいがちでしたが、上記のように 学生さんも積極的に活動しているという事実にはすごく刺激を受けます。活躍していらっしゃる某S社のどんまいこさん・ぎょりさん方も私とそう年が変わらないですし。たしか6月のJAWS東京のときに某C社の1年目の方がいらっしゃったこともよく覚えています。
皆さん色々参加されているようなので、私ももっとJAWSだけじゃなくて色々と興味のある分野の勉強会に参加していって、刺激を受けたり自分のスキルアップに繋げていきたいなあと思いました。とりあえず、ベースキャンプ名古屋が最近お気に入りなので色々参加してみようと思ってます!

 AWS、JAWS=UGが好きです。行動的で優しくて面白い方々ばかりで、とても素敵な団体だと思います。そんな方々ともっとお話できるべく、彼らのAWSをもっと盛り上げたい気持ちを助けるべく、私も動いていきたいなあと感じました。


 私視点のJAWS-UG名古屋勉強会、そんな感じでした。後藤でした。



2013/12/05

Mac OS X Mavericks に USBシリアル変換アダプタ USB-RSAQ5 のドライバをインストールする

今井 です
OS X Mavericks にアップグレードしてから約1ヶ月半が経過しました。
Mavericksは複数モニタ使用時のMissionControlが使いやすくなって仮想PCとの併用もう手放せませんね。

さて、以前から I-O Data の USB-RSAQ5 を使用しているのですが、Lion辺りで I-O Data で配布されているドライバでは動作しなくなりました。

Windows仮想マシンから使っていたため、ドライバをWindows側に入れて使っていましたが、チップメーカーのドライバを入れれば OS X Mavericks からも使えるたので手順をメモしておきます。

1. UARTチップの特定

システム情報 で USB-RSAQ5 を見てみます。

製造元は Prolific Technology Inc. となっていますので、そちらのWebサイトで製品を探します。

Serial/UART製品としては PL2303 シリーズだけのようです。
Mac OS X用ドライバのダウンロードページを見ても PL2303 シリーズ向けのものだけがあり、他は見当たりません。
USB-RSAQ5 PL2303” で検索するとこのドライバで動作したという情報が多く出てきますので USB-RSAQ5 に使われているチップは PL2303 シリーズという事で間違いなさそうです。

2. ドライバを入手

Prolific Technology Inc. にはMac OS X用ドライバのダウンロードページもちゃんとあります。

I-O Data で配布されているドライバとは違い、Mavericks もちゃんとサポートされているようです。

サードパーティのドライバということで PL2303 Serial USB on OSX Lion と Mac OS X Prolific PL2303 driver project へのリンクが貼られているのが面白いですね。

ちゃんと読んでいませんが Mac OS X Prolific PL2303 driver project の方は2008年以降リリースされておらず、それをベースに Lion, Mountain Lion 対応したものが PL2303 Serial USB on OSX Lion のようです。

今回はメーカーから出ているドライバが公式に Mavericks に対応しているので、メーカー製の物を使うことにしました。

ドライバをダウンロードしたところで早速インストールをしてみます。

3. I-O Data のドライバを削除

早速ダウンロードしたドライバをインストールしたくなりますが、その前に I-O Data のドライバが残っているはずなので削除します。

配布されているドライバパッケージの内容などからの推測ですが、カーネルエクステンション /System/Library/Extentions/IODATAUSBRSAQ5.kext を削除するだけでよさそうです。

念のため使用されていないかを確認しながら削除します。

ターミナルで次のように行います。

I-O Data のドライバが読み込まれているか確認します
PcName:Extensions loginName$ kextstat | grep -i iodata

何も表示されないということは読み込まれていないとので I-O Data のドライバを削除します。
PcName:Extensions loginName$ sudo rm -r /System/Library/Extensions/IODATAUSBRSAQ5.kext

余談ですが、読み込まれていた場合は次のようにアンロードを行います。今回は読み込まれていないのにアンロードしようとしたので結果がエラーになっていますね。
PcName:Extensions loginName$ sudo kextunload /System/Library/Extensions/IODATAUSBRSAQ5.kext
(kernel) Kext com.iodata.driver.PL2303 not found for unload request.
Failed to unload com.iodata.driver.PL2303 - (libkern/kext) not found.

また、カーネルエクステンションのファイルがわからない場合は kextstat で見つかった bundle id から本体を探す事ができます。
PcName:Extensions loginName$ kextfind -bundle-id com.iodata.driver.PL2303
/System/Library/Extensions/IODATAUSBRSAQ5.kext

4. ドライバのインストール

ダウンロードした Prolific 社のドライバはパッケージで提供されているのでそのままインストールします。

インストールされたカーネルエクステンション内部には対応製品のリストが含まれているのですが、I-O Data USB-RSAQ5 はリストに含まれていないため、リストに追加します。
ターミナルで次のように行います。

Prolific社のドライバが読み込まれているか確認します
PcName:Extensions loginName$ kextstat | grep -i prolific

当然ですが読み込まれていません。もし、読み込まれていたら次のようにアンロードを行います。当然、読み込まれていない時にアンロードしようとすると失敗します。
PcName:Extensions loginName$ sudo kextunload /System/Library/Extensions/ProlificUsbSerial.kext
(kernel) Kext com.prolific.driver.PL2303 not found for unload request.
Failed to unload com.iodata.driver.PL2303 - (libkern/kext) not found.

カーネルエクステンション内の Info.plist に追記します
追記する際に必要な情報は『製造元ID』と『製品ID』です
10進数でも使うので予め計算しておきます
製造元 ID : 0x04BB → 1211
製品 ID : 0x0A0E → 2574

書き込みに権限が必要なのでviで編集します
sudo vi /System/Library/Extensions/ProlificUsbSerial.kext/Contents/Info.plist
info.plist の内容は次のようになっていました。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
 <key>BuildMachineOSBuild</key>
 <string>10K549</string>
 <key>CFBundleDevelopmentRegion</key>
 <string>English</string>
 <key>CFBundleExecutable</key>
 <string>ProlificUsbSerial</string>
 <key>CFBundleGetInfoString</key>
 <string>ProlificUsbSerial v1.5.0, Copyright 2013 Prolific Technology Inc.</string>
 <key>CFBundleIdentifier</key>
 <string>com.prolific.driver.PL2303</string>
 <key>CFBundleInfoDictionaryVersion</key>
 <string>6.0</string>
 <key>CFBundleName</key>
 <string>Mac OS X Driver for Prolific USB-to-Serial Bridge Device</string>
 <key>CFBundlePackageType</key>
 <string>KEXT</string>
 <key>CFBundleShortVersionString</key>
 <string>1.5.1</string>
 <key>CFBundleSignature</key>
 <string>????</string>
 <key>CFBundleVersion</key>
 <string>1.5.1</string>
 <key>DTCompiler</key>
 <string>com.apple.compilers.llvm.clang.1_0</string>
 <key>DTPlatformBuild</key>
 <string>10M2518</string>
 <key>DTPlatformVersion</key>
 <string>PG</string>
 <key>DTSDKBuild</key>
 <string>10M2518</string>
 <key>DTSDKName</key>
 <string>macosx10.6</string>
 <key>DTXcode</key>
 <string>0400</string>
 <key>DTXcodeBuild</key>
 <string>10M2518</string>
 <key>IOKitPersonalities</key>
 <dict>
  <key>067B_2303</key>
  <dict>
   <key>CFBundleIdentifier</key>
   <string>com.prolific.driver.PL2303</string>
   <key>IOClass</key>
   <string>com_prolific_driver_PL2303</string>
   <key>IOProviderClass</key>
   <string>IOUSBInterface</string>
   <key>bConfigurationValue</key>
   <integer>1</integer>
   <key>bInterfaceNumber</key>
   <integer>0</integer>
   <key>idProduct</key>
   <integer>8963</integer>
   <key>idVendor</key>
   <integer>1659</integer>
  </dict>
  <key>067B_2304</key>
  <dict>
   <key>CFBundleIdentifier</key>
   <string>com.prolific.driver.PL2303</string>
   <key>IOClass</key>
   <string>com_prolific_driver_PL2303</string>
   <key>IOProviderClass</key>
   <string>IOUSBInterface</string>
   <key>bConfigurationValue</key>
   <integer>1</integer>
   <key>bInterfaceNumber</key>
   <integer>0</integer>
   <key>idProduct</key>
   <integer>8964</integer>
   <key>idVendor</key>
   <integer>1659</integer>
  </dict>
 </dict>
 <key>OSBundleLibraries</key>
 <dict>
  <key>com.apple.iokit.IOSerialFamily</key>
  <string>1.0.4</string>
  <key>com.apple.iokit.IOUSBFamily</key>
  <string>1.8</string>
  <key>com.apple.kpi.iokit</key>
  <string>10.2.0</string>
  <key>com.apple.kpi.libkern</key>
  <string>10.2.0</string>
  <key>com.apple.kpi.mach</key>
  <string>10.2.0</string>
 </dict>
</dict>
</plist>
ハイライト部分が対象となる製造元ID、製品IDになっています。USB-RSAQ5 は含まれていないのですでにある定義をコピーして USB-RSAQ5 のIDに変更した物を追加します。
  <key>04BB_0A0E</key>
  <dict>
   <key>CFBundleIdentifier</key>
   <string>com.prolific.driver.PL2303</string>
   <key>IOClass</key>
   <string>com_prolific_driver_PL2303</string>
   <key>IOProviderClass</key>
   <string>IOUSBInterface</string>
   <key>bConfigurationValue</key>
   <integer>1</integer>
   <key>bInterfaceNumber</key>
   <integer>0</integer>
   <key>idProduct</key>
   <integer>2574</integer>
   <key>idVendor</key>
   <integer>1211</integer>
  </dict>

I-O Data から配布されているドライバには『製造元ID:067B』『製品ID:AAA2』の定義が含まれていましたが、必要になった時に追加すればよいでしょう。

リストに製品IDを追加したら、カーネルエクステンションのキャッシュをリフレッシュします。
PcName:Extensions loginName$ sudo kextcache -system-cache

5. 結果確認

インストールが出来たので USB-RSAQ5 を接続してカーネルエクステンションがロードされているか確認します。
PcName:Extensions loginName$ kextstat | grep -i prolific
  144    0 0xffffff7f821c3000 0x7000     0x7000     com.prolific.driver.PL2303 (1.5.1) <127 36 5 4 3>

カーネルエクステンションはちゃんとロードされています。シリアルポートがデバイスとして認識されているか確認します。
PcName:Extensions loginName$ ls /dev/tty.*
/dev/tty.Bluetooth-Incoming-Port
/dev/tty.Bluetooth-Modem
/dev/tty.XxxxxxxxPhone5-Wireles
/dev/tty.usbserial

ちゃんとデバイスとして認識されています。

以上で USB-RSAQ5 が使えるようになりました。
今後、ドライバをアップデートするたびに同じことをしなければならないのが面倒ですが仕方がないですね。

2013/12/03

【Objective-C/iOS】Interface Builder Storyboard Compiler Error

後藤です。

モックを作っていたら、変なことをした覚えがないのにいきなりストーリーボードにエラーが出るようになりました。
ちなみに環境は、MacOSX10.8.5(まだアップデートしていなかった)、Xcode5.0.2。

> Interface Builder Storyboard Compiler Error
> Compilation Failed.

弊社では迅速なモック・ビュー作成のために、できるものは全てストーリーボードで作るようにしているのですが。そんな中で出遭ったエラーでした。でもストーリーボードでエラーって、コンパイルエラーと言われただけじゃ何もわからないしどうしたら…と思っていたら、ログを見たらすぐにわかりました。




この原因だけで出るエラーじゃないとは思いますが、私の場合はみたらすぐ分かりました。変なことを、していたようです。DinamicなTableViewCellにおいてあるUIViewとかUIButtonをOutletで繋いでいたのがいけなかったのですね。それらのOutletを全部削除したらコンパイルできるようになりました。

考えれば当然なのですが、とりあえずGoogle先生にきいてみてもそれっぽいものが出てこないので、焦りました。こんな考えれば当然のことは誰も記事にするほど悩まないということでしょうか…。


2013/11/26

【iOS】Estimote Beaconを入手しました!

後藤です。

タイトルの通りですが、とうとう新しいもの好きの弊社もEstimote Beaconを購入しました。ちょうど社内が(というか主に社長がですが)BLEブームでもあったのです。ベーコンレタスエッグではなく、Bluetooth Low Energyのほうです。ベーコンレタスエッグというよりは、社長は今はCoCo壱番屋にハマっているという話です。
注文したと聞いたのは1ヶ月近く前だった気がするのですが、先週くらいに発送の通知が届いたそうで、本日ケイフィールドに到着しました。Polskaからの荷物。一時期ポーランド語を勉強したほどポーランド好きの私は、感動しました。しかし、発送までけっこう時間がかかるみたいですね。

そもそもiBeaconとビーコンとEstimote Beaconの違いがよく分かっていなかったのですが、
・iBeacon:iOS7から使えるようになったApple(iOS)においてのビーコン機能の名称
・ビーコン:赤外線や無線などの電磁波?で情報を取得したりする技術・設備の総称
・Estimote Beacon:iOS/AndroidにBLEで色々送れるEstimote社の機器
という認識でよかったでしょうか。 そういう前提で話を進めます。とりあえずこの記事では開封とデモアプリを動かすところの紹介です。




Estimoteのサイトでも見れますが、緑のものだけ透けて見える感じの箱に入っています。中身は↑で全て。外箱と内箱、お手紙にもなっているクラフトのカバー?と、シールとEstimoteのCEO、Jakub Krzych氏の名刺のようなもの。




カバーはこんな感じになっていました。受取人宛てのお名前と、Jakub Krzych氏のサインが手書きで入っております。ご本人のサインでしょうか。だとしたら粋ですね。(発送は彼のサイン待ちで遅くなっているのでしょうか。)


カバーのお手紙によるとデモのアプリがあるとのこと! Estimoteで検索するとすぐ見つかったので、さっそく遊びました。




多分だいたいの距離を調べられる画面です。左が箱のすぐ上に置いたときのキャプチャ、右が3メートルくらい離れたときのキャプチャです。ちゃんと大体リアルタイムで内側の円の方に動いたり外側へ動いたりしました。


時間を作って色々iOSアプリも作ってみたいです…! とりあえず今回は以上です。後藤でした。

2013/11/19

2015年新卒採用情報更新&説明会情報など

後藤です。

今までブログがテンプレートそのままだったので、ヘッダ画像を作ってみました。少々散らかってますが、それもケイフィールドっぽいかなと思っています。もしかしたらそのうちダメ出しをいただくかもしれないので、そうなったらお蔵入りになるでしょう…。

今回ですが、2015年新卒の方向けの採用の情報を更新しましたのでそのご報告です。ページはこちら
2015年、今度の12月から就活がスタートする子たち向けの内容に更新しました。人物像やメッセージのあたりは変わっていないのですが、募集要項のあたりがちょくちょく(教育制度のところが手厚くなりました)と、採用の選考フローが少し変わったのでそこが変わっています。あと、ケイフィールドの採用活動はエン・ジャパンさんを通してのみとなりますので、そちらへのリンクも貼ってあります。一応ここにも張っておきます。(エン・ジャパンさんの方に載っている情報で弊社の採用ページと少し違う点がありますが(選考フローなど)、エン・ジャパンさんの方が修正依頼中で弊社のページに載っているものが最新のものとなります。)



エントリーの受付は12月のオープン開始からとなるのでまだできませんが、オープン前からお気に入りとかの機能は使えたような気がするので、興味のある方はぜひ目をつけておいてくださいませ! 人事ブログも、何かあるごとに更新していく予定です。

ちなみに、そちらにも近々載せますが、会社説明会の日程も決定しております。現在のところ、下記の6回を予定しています。
・2014/02/08(土) 午前・午後 AP名古屋 7F会議室
・2014/02/15(土) 午前・午後 AP名古屋 7F会議室
・2014/03/02(日) 午前・午後 ウインクあいち 1310

詳しい日時等はまた決まり次第こちらやエン・ジャパンさんの方で更新していきます。募集状況によってはさらに追加する可能性もございますが、基本的には上記の6回のみの予定ですので、参加をお考えの方がいらっしゃいましたらぜひ予定を空けておいてくださいませ。

エン・ジャパンさんの写真にも映っている4人がケイフィールドの全員です。写真うつりが悪く、なんだかすごくふくよかに見える女子がおりますが、実物はもう少し細いと…思っています。説明会にはおそらく私も手伝いで足を運ぶと思われますので、ぜひそちらでお会いしましょう!


それでは、採用担当ではありませんが、後藤でした。

2013/11/13

インターンシップ報告会に参加してきました 他

 後藤です。

 先日の7日(木)に愛知淑徳大学さん、9日(土)に椙山女学園大学さんのインターンシップ報告会・懇親会が行われ、山田さんと一緒に参加してきました。
 今のことはわからないものの、自分の出身大学がそこまで就活に力を入れていた印象がなかったので、2大学さんの取り組みにはすごいなあと驚かされました。淑徳さんのお菓子は食べれなかったのですが、椙山さんではおいしいご飯をがっつり頂きました…おいしかったです!
 報告会では、大手企業さんのインターンシップの話だとか、他のうちと似たような業種のところとか、うちよりもちょっと大きいくらいの中小企業とか、いろんな企業さんのインターンシップの話が聞けました。また、特にその2大学さんのインターンシップに求めるものがどういうものなのか何となく感じたので、それも含めて これからケイフィールドのインターンシップに来る子たちに もっと良いものを与えられるよう考えていきたいです。

 また、なんと淑徳さんのインターンシップ概論という授業の インターンシップ担当者の講演というところに呼ばれまして、本日 社長と山田さんと私で、学生さんたちの前でお話してきました。社長が、経営者視点でのインターンシップや就職についてのお話。山田さんが インターンシップ主担当ということで インターンシップでの取り組みとインターンシップ担当者としての思い。私はケイフィールドのインターンシップを経験した者としての インターンシップ担当者の話。という感じのお話をさせて頂きました。
 後藤は初めて人前で講演(?)を行ったことになるわけです。なんと私の話は20分も時間を頂きまして、最初はそんなに話せるだろうかとすっごい不安だったのですが、 得意の文章にして伝えたいことをすごい書きまくったら、それを読んだのですが 28分も話をしてしまっていました。長くなってしまって学生さんには申し訳ないばかりです。。 もともと合計60分の予定でいたのを90分まるまる使っていいと言っていただけていたので時間的には別に大丈夫だったのですが。社長と山田さんはちゃんとご自分の時間内で収まったのに、私は…(でも、これでもかなり削ったのです)

 多分、自分が学生だったときにまわりがそうだったから思うのですが、今日お話したことも ちゃんと聞いて何か考えてくれる子は半分もいないと思っています。でも、いちおう私と、それに付き合わされる山田さんも、いつも本当に インターンシップに来る子たち全員が 全員それぞれなにか将来・就活の役に立つものを持って帰ってもらいたいと思いながらがんばっているのです。 そういった中で、考えていることを 淑徳さんの授業と私たちの中できめた担当の内容に沿うように組み立ててお話しして、(インターンを経験した)担当者としての思いはすべて話してきたと思います。 少しでも多くの学生さんが、何か感じて考えるようになってくれたらなあ、と思います。


 ここからは余談です。スマートウォッチがほしくて色々探しているのですが、中々ぐっとくるものが見つかりません。 条件は、iPhoneとなにかしら連携ができること、できれば中のアプリとかを開発できるSDKみたいのがあること、画面がカラーなこと、見た目がいいかんじなこと、くらいに思ってるんですが。
 Nikeかどこかのやつとかも気になるのですが、今つけてるFitBitとあんまり変わらないうえに私はほとんど運動をしないし…(ちなみにソフトバンクヘルスケアの記事を書いた山田さんは、もう飽きたそうで解約していました)。 あと気になってるのがSonyのXperiaのやつ、ですが、Xperiaとしか連携できないそうなのが…。もともとiPhoneにする前は 次はXperiaにしようと思っていたんですけど、iPhoneにしたときソフトバンクに変更してしまったのでXperiaはもうゲットできないし…。Docomoのおかえり割みたいのを使おうかどうか悩むところですが、iOSのツールを使いまくってしまってしまっている身としてはiPhoneがなくなるのはちょっと考えられません。AppleはiWatchを発表するなら早くしてほしいです。。

 後藤でした。来週は、元気だったらAWS-HUBとIT飲み会に参加させて頂く予定なので(飲んでばかり…)(お酒はあんまり、飲みません!)そのこととかでブログを書けたらと思います。後藤でした。

2013/11/05

【Objective-C/iOS】Segueで子ビューに移ったらエラーが出る

後藤です。ごぶさたです。

恥ずかしながらdelegateについて何となくしかわからずにいたので、このままではいけないと思い、すごく初歩的なとこからdelegateの練習をしておりました。その中でエラーが出て、???となったところについて、書きます。ちなみにエラー内容はdelegateとはあまり関係ないです。

【前提】
・Xcode5/Mac OSX 10.8
・ストーリーボードを使います



上記のような、とても簡単な構成になっています。動作は下記のような感じです。
1. ナビゲーションバーがついた親ビュー(黄色)の真ん中にある「Button」ボタンを押す
2. pushセグエで子ビュー(ピンク)に移る
3. 子ビューの真ん中にある「Touch me!!」ボタンを押すと、親ビューのViewControllerのメソッドに書いたアラートが出る

が、親ビューの「Button」を押すと下記のようなエラーが出ます。
nested push animation can result in corrupted navigation bar
Finishing up a navigation transition in an unexpected state. Navigation Bar subview tree might get corrupted.

ちなみにナビゲーションバーの戻るボタンのところを見てみても、前のビューがsubViewとなっていてどう見てもおかしいです(下図左)。ちなみにここでpushから戻ると、得体のしれない黒いSubViewが間にあり、そこから親ビューに戻る風になってしまっています(下図右)。この中間にあった黒いビューのナビゲーションバーの戻るボタンを押すと、いろいろエラーが出て落ちてしまいます。



ちなみに一応セグエをmodalにして試してみたりもしましたが、下記のような違うエラーが出るだけでやっぱり落ちてしまいます。(英語の意味は…読んでいません。)
Warning: Attempt to present  on  while a presentation is in progress!

これなんですが、エラーの原因はとても初歩的なものでした。
親ビューの方のボタンから右クリックで紐をのばして、そのまま子ビューに移るようなセグエを作っていたのに、そのボタンのIBActionのメソッドの中でもセグエで遷移するperformSegueWithIdentifierを書いてしまっていたので、二重でセグエを通ることになっていたみたいです。
- (IBAction)touchButton:(id)sender {
    [self performSegueWithIdentifier:@"gotoSubview" sender:self];
}
このperformSegueWithIdentifierのメソッドをそのままコメントアウトするだけでちゃんと動くようになりました。 近日、TableViewCellのセルをタッチしたらセグエで遷移する〜とかいうのばかりを書いていて、ボタン押したらそのままセグエが発動するようなものを書いたのが久しぶりだったので勘違いしていたみたいです。が、ボタンを押して画面遷移するときってIBActionのメソッドの中って何を書いていたっけ??空白?はかっこ悪いので違う気がするんですが、思い出せない…。 追記: ふつうにボタンとビューをセグエでつないだときは別にメソッドとか何も追加されなかった! ちなみに、今回のコードはこんなかんじでした。 ■ ViewController.h(親ビューのほう)
#import 
#import "subViewController.h"

@interface ViewController : UIViewController

- (IBAction)touchButton:(id)sender;

@end
■ ViewController.m
#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
}

- (void) helloDelegate
{
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:nil
                                                    message:@"\Hello, delegate!/"
                                                   delegate:nil
                                          cancelButtonTitle:@"OK" otherButtonTitles:nil];
    [alert show];
}

- (IBAction)touchButton:(id)sender {
//    [self performSegueWithIdentifier:@"gotoSubview" sender:self];
}

- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    subViewController *svc = (subViewController *)[segue destinationViewController];
    svc.delegate = self;
}

@end
■ subViewController.h(子ビューのほう)
#import 

@protocol subViewControllerDelegate;

@interface subViewController : UIViewController

@property (nonatomic, assign) id  delegate;
- (IBAction)touchSubViewButton:(id)sender;
@end

@protocol subViewControllerDelegate 
- (void) helloDelegate;
@end
■ subViewController.h
#import "subViewController.h"

@interface subViewController ()
@end

@implementation subViewController
@synthesize delegate;

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
}

- (IBAction)touchSubViewButton:(id)sender {
    [self.delegate helloDelegate];
}

@end
もっと良い書き方などありましたらぜひご指摘くださいませ。 後藤でした。

2013/10/16

2013年夏期インターンシップ作品が公開されました

後藤です。

先日、とうとう大学生の夏期インターンシップで制作してもらった作品が公開されました!

残念ながら、前期の子たちの作品は UIや操作性の部分で審査を通らずリジェクトされてしまいました。そのあたりをこちらで修正してしまうと学生さんたちの作ったアプリでなくなってしまう ということで、今回はアプリの公開はできません。が、作品紹介ページは残しているので、前期の皆さんががんばってくれた雰囲気が伝わればと思います。

後期(チームTNKT)さんのアプリは下記の紹介ページからiTunesStoreへのリンクを張ってありますので、こちらもよろしければご覧ください。無料で遊べます。

(前期)スリプレ 〜Tree Play The Ball〜
(後期)MUKA2BALL


これで、私の夏期インターンシップに関する作業はほぼおしまいになります。入社して当時は4ヶ月の身ではありましたが、私がその間で学んだ社会人にまつわるエトセトラを伝えれたのではないかな、と思います。
ケイフィールドのインターンシップはこれからも試行錯誤しながら成長(という名の改善)を続けていきますので、これからインターンシップへの参加を考える学生さんは、ぜひケイフィールドで 楽しみ悩みながら色々と経験していってください!

後藤でした。

2013/10/07

インターンシップ作品の申請が完了しました/iOSアプリ申請時の色々

後藤です。

大学生のインターンシップに参加された皆さんにはメールでも連絡しましたが、インターンシップ生のみなさんが作ったアプリ2つをiTunes Connectで公開完了しました! 特に前期の皆さんは、大変お待たせしました。何人かメールが届かなかった子がいたのでここでも一応報告しておきます。アプリの公開は順調にいけば2週間後くらいなので、公開までもう少しお待ちください。
ケイフィールドのサイトのリニューアルがあるとかないとかという話があり、サイトからのリンクはまだしばらく繋げられなさそうですが、作品の紹介ページ自体は完成しているのでこちらにリンクを貼っておきます。

(前期)スリプレ 〜Tree Play The Ball〜
(後期)MUKA2BALL


後藤はアプリの申請を初めて行いましたが、いくつかハマったことがありましたので、今後のためにも一応メモしておきます。
(※以下の情報は2013年10月4日時点のものです)


■ 3.5インチと4インチの両方のスクリーンショットが必須だった
アップルの公式ドキュメント(日本語)を先月くらいに見たときは960×640があればいいみたいな風だったのに、いざサムネイルをアップして登録してみたら4インチのもアップしろという赤字が出てきました。英語のドキュメントも見なきゃいけなかったのか、はたまたiOS7が公開になって新しくなったのか… 色んな申請手順とかのブログさんも拝見していたのですが、どこも書いてあることが違ったりでよくわからず、とりあえず公式ドキュメントに従って用意していたのですが…。3.5インチと、4インチ両方必須です。

■ 開発者のお金を払っているアカウントをCode Signing Identityのところで指定しないとValidateできない
詳しいことはよくわからないのですが、お金を払っているアカウントのチームの人なら誰でもよいのではなく、そのお金を払っている人のアカウントの秘密鍵がないとValidateが通らない=チーム内なら誰でもいいわけじゃなく、お金を払ってる人のアカウントでしか 公開用アプリのアーカイブを作れない ということになっているようです。ここと、これはわたしのミスなのですがAppIDを発行し忘れていたことで かなり時間を食ってしまいました。アプリの申請内容自体は、ネットやAppleのドキュメントで調べた通りだったのでけっこうスムーズに済んだのですが…。

■ Missing recommended Icon fileというメールがきた
アプリをSubmitしてすぐに、自動のコード解析ツールで判定して、こういう点があるからrejectされる可能性があるよというのを自動でメールしてくれるみたいです。
今回のは、120pxのアイコンが含まれていないというやつでした。インターンシップ時点ではまだXcode4だったため、4でビルド・アーカイブしてSubmitしたのですが、Xcode4だとそれは自動的には作られないんですね。iOS7からは120ピクセルのアイコンも必須みたいで(たぶんXcode5だと自動的に作られるんだと思いますが)、それが含まれてないからダメだという内容だったと思います。今回のものは、Xcode4でどうしても作る必要があったので、手で120ピクセルのを作ってinfo.plistのicon files?のところに追加して対応しました。これで一度自分でrejectしてSubmitしなおしたところ、メールはきてないみたいなのでこれで良かったみたいです。

■ Missing Push Notification Entitlementというメールがきた
これも自動の解析ツールで、Push通知関係のコードがあるのにPushの何か手続きだか設定だかがされていないという警告のようです。今回のゲームは2つとももちろんPush通知を使っていないのですが、Unityでビルドされたゲームはおそらく必ずこのコードが入ってしまうようです。というのも、Unityが利用しているというprime[31]というところのプラグインがプッシュ通知とかの機能も実装しているようで。
参考のサイトさんを見てもprime[31]の公式を見ても、AppControllerPushAdditionsというファイルを削除すれば大丈夫みたく書いてあるのですが、自分の手元のUnityでは現在の最新バージョンだからなのか、それらしきファイルが見当たらず…。(UnityAppControllerというのはあってその中にNotification系のコードがちらほらあったので、そういうふうに仕様が変わったんでしょうか?)
どうしたものかと思っていたのですが、Unityのフォーラム(英語の)を見ていたら、これに関してはコードが入っていてもPush通知を使っていなければリジェクトされることはなかったというような声がいくつかあったので、そうだと信じて私もReview notesに Unityで作ったゲームなのでプッシュ通知のコードが含まれていますがプッシュ通知は使ってません というようなことを拙い英語で書いておきました。これでダメだったらまたここに追記します。
13/10/17追記:そんな感じで大丈夫でした。


参考:
iOSな日々: iOS7:アイコンサイズの追加対応について
iOSアプリを申請した時に「Missing Push Notification Entitlement」というメールを貰った時の対処法 - 強火で進め
Missing Push Notification Entitlement

2013/10/03

【Objective-C/iOS7】sizeWithFontをsizeWithAttributesに書き換える

後藤です。

iOS6から7になり、deprecatedになったものの一つにsizeWithFontがあります。
int width = [_label.text sizeWithFont:_label.font].width;
みたいなものなど。
かわりにsizeWithAttributesを使えと言ってきますが、sizeWithFontはUIFontだけどsizeWithAttributesはNSDictionaryだ、しかもUIFontで自分で作ったやつじゃなくてラベルのフォントをとかどうDictionaryに変換したら、、
と思ってしばらく(数時間)放置していたのですが、気が向いて検索したらあっさり見つかった(でも日本語ではまだなさそうだった)ので、メモしておきます。
int width = [_label.text sizeWithAttributes:@{NSFontAttributeName:_label.font}].width;
とすればいいようです。
iOS6からNSAttributedStringというのが追加されたそうで、NSFontAttributeNameはそれの属性のひとつ。Appleとしてはそっちを使うようにしてほしいということなのでしょうか。


参考:
objective c - Replacement for deprecated sizeWithFont: in iOS 7? - Stack Overflow
NSAttributedStringによる文字装飾 – Cyber Passion for iOS

2013/10/01

JAWS FESTA Kansai 2013に行ってきました

後藤です。

土曜日に行われたJAWS FESTA Kansai 2013に、ケイフィールドの社員全員で参加して参りました。

各自で自由に参加したいものに参加する感じだったので、他の方も記事を書くかもしれませんが(ブログを書くまでがJAWS FESTAだそうなので…)、私は主にCDP道場(初心者編)とRedshift Girls、スペシャルパネルディスカッションに参加しました。ので、その感想を書きたいと思います。

まずCDP道場。内容は、以前立ち読みしたクラウドデザインパターン実装ガイドやWikiや、公開されているプレゼン資料などで既に知っている内容がメインでしたが、後半のハンズオンでは実際にDirect Hostingパターン・Cashe Distributionパターンを、S3とRoute53やcloudfrontを利用して構築しました。Route53とcloudfrontを利用するのが初めてだったので勉強になりました。
AWSは、公式のサービスページを見ても それがどういう使い方をすればいいどんなサービスなのかが初心者にはわかりにくいように感じているので、こういった機会に実際に触ると理解が深まっていいなあと思いました。もっとCDPについて勉強したら各サービスについて使わずに分かっていくようになるんでしょうか。

そして、Redshift Girlsさんの講演です。どんまいこさんの名前などをどこかで聞いたことがあったりして、Girlsと書いてあるし女子としては参加すべきかなというのと、Redshiftについて優しくわかりやすく説明してもらえるとのことで、私でもついていけるかなと思い参加しました。
スライドはこちら。サーバーワークスさんが面白い会社さんだなというのは以前の東京の際にも思ったのですが、Redshift Girlsさんの講演もまさしくそんな感じでした。ユーザーグループだから許されるノリの講演、巫女さん衣装のどんまいこさん・ぎょりさん… 写真を撮りそこねたので画像はないですが、インパクトがものすごかったです。でも真面目な内容もとても勉強になりました。Redshiftが何なのか公式のページを見てもあんまり理解できないまま参加していたのですが(そもそもデータウェアハウスが何かすら調べていなかった)、無料分のないRedshiftについて実際に画面を見せながら説明して下さったり、体を張って説明して下さったりで、どういうサービスなのかよくわかりました。
懇親会のとき2人に声をおかけしたのですが、2人とも入社3年目と4年目の営業さんで、人前であのように発表を行ったり、AWSの知識も技術者のはずの私より多かったり、私もあと2年くらいしたらあんな風になれているのかなぁとそわそわしました。(AWSの知識などは、サーバーワークスさんだからこそなんでしょうか。)弊社の社長は 学生の頃からもっとすごいことをしている人もいるから入社年数は関係ないし、1年目でプレゼンを行ったりする人だっているというふうに言っていましたが、いわゆる“普通”の学生はそういうスキルなしに入社し社会人になってから覚えていくことが多いと思います。彼女たちがそうだったかは分かりませんが、その可能性がきっと高いと思うので、それでああやって人前に立てるのはやっぱりすごいなと感じたのです。私も……がんばります。

そして最後。SAP、AWS、Microsoft、ISIP、cloudpackのエバンジェリストさんたちによるスペシャルパネルディスカッションです。後藤さんと堀内さんを知っていて、渥美さんともご挨拶をしたことがあるので、(しかも残りのお二人もSAPとMicrosoftという超大手企業のエバンジェリストですし、)どういう話をされるのかなと興味があって参加しました。
内容はクラスメソッドさんのブログでとても詳しいレポートが公開されているので、参加されていない方はよければそちらをご覧ください。 5人ともとてもすごい方だと思うので私が偉そうに何かを語れるようなことはあまりないのですが、堀内さんや後藤さんが元々はエンジニアだったというのが、当然といえば当然なのかもしれませんが初耳だったので意外でした。そして「エバンジェリストは全てを知っていなければならない」ということで、普通のエンジニアよりも責任感や勉強が必要なんだと改めて知りました。

今回のJAWS FESTAへの参加を通して、堀内さんもパネルディスカッションで話していらっしゃいましたが、AWSは中の人との距離が本当に近いと感じました。業界の有名人のはずの堀内さんや小島さん、後藤さんや河野さんなどが私のような者の顔を覚えてくださっていて、話すことのできる機会があります。そして同じAWSを気に入って仕事をしているような、前衛的な方たちと知り合う機会があります。知り合った方々に、私はまだ知識の少ない新人くらいにしか覚えてもらえていないとは思いますが、もっと知識をつけて 技術的な話とかをできるようになったり、自分から仕事をもらえるようになったりしたいなと、JAWSの集まりに参加するたびに思います。精進したいです。

2013/09/26

最近のケイフィールド in September 2013

後藤です。雑記です。

iOS7が公開されてもう1週間経ったんですね。Windows8の前から、というより流行るよりずっと前から元々シンプルなフラットデザインが好きだったので、iOS7私は嬉しい派です。6月にiPhoneに変えたばかりなのでさすがにまだ変えないですが、5Sの指紋認証も5Cのチープっぽさも魅力的でいいなほしいなと思ってしまう、新しいもの好きの典型です。
私は先週にお盆休みを頂いていたためXcode5へのアップデートなども今週に入ってから行ったのですが、色々変わったりしている点があって、以前のもようやく慣れてきたところだったのに、とまだあわあわしております。もう少し前からBeta版を使って慣れておいた方が良かったんでしょうか。。
でも、それで色々調べたので、まだ日本語であまり資料がないようなことも、ちゃんとメモしてあります!来週くらいにはきっと技術的な記事を書くことでしょう。

今週の記事を雑記にしたのには(自分がそれが一番書きやすいからという以外に)理由が、あります!

インターンシップで大学生の皆さんに制作して頂いた作品について、先週「今週中にはAppStoreに…」というようなことを書いてしまっていたため、一応現状を報告したかったのです。もしかしたらインターン生の方が、ここを見ながら いつAppStoreで公開されるのかとわくわくしているのではないかと思って…。書きたいことはもう1点あるのですが、とりあえずそちらについてです。
結論から申しますと、前期・後期分ともまだ申請は行っていません(ごめんなさい)。 以前の記事にも書きましたが、今回のインターンシップではUnityさんから今回のための特別なTrialのライセンスを頂いていたので、そのお礼として 今回のインターンシップでの学生さんたちの様子や アンケートで頂いたUnityに関する意見などをまとめて報告させて頂いたりしました。それを行っていたのが先週、今週で、そろそろ社長がProのライセンスを入手して下さるということなので、きっと、来週には! 申請できるはずです…。 忘れているわけではありませんので、楽しみにお待ちください。

そして雑記の内容その2なのですが、今週土曜のJAWS FESTAに、なんとケイフィールド社員全員で参加して参ります。 お世話になっているコンサルさんと一緒に前日入りで大阪に行ってきます。大阪は何度か行ったことがありますが、大阪らしいものを食べれたことがないので そういう意味でもすごく楽しみです。
が、JAWS-UGを通して今までも色んな方とお近づきになれたりしていますし、 今までなんとなくしか分かっていなかったCDPについての初心者向けハンズオンに申し込みできたので、今回も色々学んだりしてそっちも大いに楽しみ、学びたいなと思っております。来週の記事はきっとその報告になることでしょう。

以上、後藤でした。

2013/09/25

議事録を書いていて気づく、メモの取り方のポイント


山田です。

最近は開発だけでなく、営業活動も行っています。営業活動をすれば当然議事録を書くわけですが、これが結構難しいですよね。いきなり清書ができるわけではないので、とりあえずメモを取るわけですが、これがなかなか役に立たなかったり、後で内容を思い出せないといったことが起こった経験はありませんか?

結局メモを議事録のフォーマットに清書するために何時間もかかるはめにならないために、やった方がいいこと。それは以下の3つ。


1.箇条書きで書くな、複雑なことは図解で書け

2.営業の目的と議題を先に書いておけ

3.決定事項と次のアクションは書く場所を意識して確保しておけ



1.箇条書きで書くな、複雑なことは図解で書け

箇条書きだと物事の関連性がわからなくなりがちです。
例えば商品の受発注のシステムの議論をしている時、図解で書けば、発注から受注、商品番号の発行や、それらの承認フローなどが簡単に表現できますが、箇条書きだとそうはいきません。

膨大な量の文章を一生懸命メモしたあげく、後で読み返すと何の議論のメモなのか、ある作業の流れのどの部分の話だったのか、わからなくなってしまいます。

普段パソコンでタイプしていて、よくこの失敗を繰り返す人は、是非図解でメモをとりましょう。



2.営業の目的と議題を先に書いておけ

議事録を取ることに夢中で、「何の目的で議論をしているのか」見失っていませんか?もしあなたが大切な議論、決定事項を記録ミスすることがあるなら、是非やりましょう。目的、議題をあらかじめ記入しておくことで、議論の中で「どんな課題を解決するために話し合いをしているのか」忘れにくく、大事なことを聞き逃したり、メモをし損ねるといったミスがなくなるはずです。



3.決定事項と次のアクションは書く場所を意識して確保しておけ

誰がどんな発言をしたか記録することは大切です。しかし最も大切なことは「何が決定して、次にどんな行動をしなければいけないのか」わかるようにすることです。

したがって意識的に「決定事項」と「次のアクション」を書くスペースを確保しておくことで、議事録で最も大切なことをしっかりと押さえることができます。

また次のアクションでは、「どこの誰が、どんなアクションをするのか」まで具体的に書くことがポイント。



以上です。

2013/09/18

Mac上のWindows仮想PCからPDFに印刷するには

しばらくブログ書くのサボってた今井です。
今回のお題はThriftは一休みして

Windows仮想PC上のアプリからPDFを作成したい

です。

ケイフィールドでは全員Macを使っているのですが、開発案件では必要に応じてWindows仮想PCを使います。

Windowsアプリで編集した文書をPDFにしたい事もよくあるのですが、Macと違ってWindowsは標準でPDFを作成する機能がありません。

そこでPDFプリンタアプリが必要になるわけですが、個々の仮想PCにインストールするとインストールやアップデートなどが面倒なのでMacにインストールして共有することにしました。
Macは標準でPDFを作成できるのに余計なものをインストールするのは抵抗ありますが…

以下の環境で動作確認しました。
ホストPC : Mac OS X 10.8.4
仮想化アプリ : Parallels 9
ゲストPC : Windows XP
PDFプリンタ : CUPS-PDF 2.6.1
昔から使っているので Mac OS X や Parallels は過去のバージョンでも動くと思います。


CUPS-PDF のインストール

CUPS-PDF は MacPorts でインストールしました。
ターミナルから次のように行います。

$ sudo port selfupdate
$ sudo port install cups-pdf


Windows仮想PCのプリンタ設定

特に設定不要というのを狙っていたのですが、そのまま使うと文字化けする場合があるので設定を変える必要がありました。個々にアプリをインストールするよりマシですが、この手間は残念ですね。
  1. Windows上のプリンタとファックスから『CUPS-PDF のプロパティ』を開く
  2. 『詳細設定』タブを開き『標準の設定...』を開く
  3. 『レイアウト』タブの『詳細設定...』を開く
  4. 『PostScript 出力オプション』を『エラーが軽減するように最適化』に変更する
  5. 『OK』を選んで設定画面を閉じる
以上の設定で文字化けが治りました。


CUPS-PDF の PDF ファイル出力先

CUPS-PDF プリンタで印刷するとファイルは /opt/local/etc/cups/cups-pdf.conf で設定された場所に出力されます。
MacPortsでインストールした場合、デフォルト出力先は /opt/local/var/spool/ユーザ名 です。
CUPS-PDFプリンタと出力先を共有しておけば便利かもしれません。



Windows からプリンタ経由で PDF に出力できると、PDF作成だけでなく正確な印刷プレビューとしても使えますので便利ではないでしょうか?

2013/09/17

大学生のインターンシップ(後期)がありました

後藤です。

先々週、先週の平日10日間で、大学生インターンシップの後期分が行われました。
概要は前期と同じですが、今回はチーム名を考えてもらったりしたなど少し内容を変えた部分もありました。
大学生の皆さんに制作してもらったアプリは、前期の分もあわせて今週中にAppStoreへ申請する予定でいます。どちらも色々考えてもらって、それぞれの特性をもったアプリが出来上がりました。
AppStoreにアプリを登録するのは私は初めてなので(自分の制作したものではないですが)、DL数がどうなっていくのかなど私も楽しみです。

大学生のインターンシップ参加者の皆さんには、Unityのことだけでなく、作品を作っていく上でどういったものを作っていくか案を出すための方法、ブレインストーミングなどについても学んでもらっています。そういったお話をするからには、もちろん自分たちもそれなりにその手法についてあらかじめ知っているのですが、それでも案出しをしている段階で つい実装方法や自分たちのスキルなどを考え否定をしてしまいがちです(これも山田さんが前に記事で書いていました)。
ちょうどそのあたりの話を学生さんたちにしていたあたりで、今井さんと新製品についての案出しをしているとき 自分が否定の意見ばかり出していることに気付きました。説得力のかけらもない事態でした。気をつけたいです。
今回参加した子たちも全員がプログラミングを経験している子達だったから特になのか、最初の案出しの段階で それは自分たちに実現不可能じゃないかという話が何度か出ているのが聞こえました。彼らの製作期間は5日弱なので、最初から実現可能な案を出していかないと“納期”に間に合わせるのが難しいのかもしれません。が、自分たちが実現できる範囲でと案を出していると、やはり斬新なアイデアには発展しにくいです。彼らはそれでもクオリティの高いものを作り上げてくれましたが…。10日間という期間、どうしようもないのですが難しいですね。

今回で、ケイフィールドの2013年夏期のインターンシップは終了になります。
インターンのことを任されたときは、入社1年目の分際で学生の子たちに偉そうにものを教えられるんだろうかと思ったものですが、資料を作っていたりする中で、大学を卒業しケイフィールドへ入社してからの4ヶ月で多くのことを学んでいたことに気付きました。私はまだまだ社会人らしい振る舞いについて未熟ではありますが、入社1年目だからこその 学生から社会人になって気付いたことなどを教えられたんじゃないかな、と思っています。反省も多いので、それは次の機会に忘れず生かしたいです。

最後に。今回のインターンシップに参加してくれた、チームTNKT(とんこつ)の皆さんです。余談ですが、彼らは歌志軒を勧めたらとても気に入ってくれたようで、後半5日間の昼に毎日食べに行っていました。チームとんこつなのに、油そば…。
10日間お疲れ様でした。


2013/09/06

EclipseでAndroid開発環境を整える

山田です。
普段iosの開発が中心の僕ですが、Androidの開発にも携わることになったので、開発環境の整備を行っています。やったことがある人はよくわかると思いますが、環境の準備って大変です。辛かったです。

K.fieldでは道具の使い方や環境を整える際に、一緒に作業手順書を残します。
そうすれば、次に同じ作業をする人達が、僕みたいに道具に振り回されて貴重な時間を使わないようにすることが可能です。後輩にわざわざ同じ苦しみを味合わせる必要はありません(笑

今回はEclipseでAndroidの環境を準備し、シミュレータで動かす所までの手順を紹介します。
2013/09/06時点での手順書になります。

Eclipseのバージョンは「Juno」
Androidの環境は「4.2.2(API17)」





*1 ADT(android developer tools)のインストール手順

・Eclipseを起動して、メニューからヘルプを選択
・Installing New Softwareを選択
・Work withのAddを選択して、リポジトリを追加する
・名前とロケーションはそれぞれ、「https://developer.android.com/sdk/index.html」と入力する
・開発ツールとNDK Pluginsを選択し、使用条件に同意するかどうか聞かれるので、全て同意する
・インストール完了





*2 Android SDKのインストール手順

・EclipseメニューのWindowを選択し、Customize Perspectiveを選択する
・Android SDK & AVD Managerの項目にチェックを入れる(これでメニューからAVDが選択できるようになる)

・EclipseメニューのWIndowから、Android SDK Managerを選択
・パッケージのToolsと、Android4.2.2(API17)を全て選択し、インストールすれば完了





*3 Androidシュミレーターの起動

・EclipseメニューのWindowから、AVD Manegerを起動する
・「NEW」の項目からAndroid仮想でバイスの作成をする

・名前「Android4.2.2」 
・デバイス「Nexus4」
・ターゲット「Android4.2.2(API17)
・CPU「ARM」

今回は以上の設定で起動実験、シミュレータが重たいので5分くらい時間がかかります。

ここまでセットアップできれば、あとはプロジェクトをビルドすることで、設定したシミュレータを選択して実行することが可能になります。


以上です。



ゲーミフィケーションを取り入れる(その1.5)

後藤です。

以前私もゲーミフィケーションについて色々と本を読んで学んだので、(山田さんが前に書いたきり2回目を更新されていないのをいいことに)自分用メモを見て思い出しがてら、ビジネスに取り入れられるゲーミフィケーションの要素について簡単にまとめてみようと思います。

前の記事:ビジネスにゲーミフィケーションを取り入れる(その1)


■ ソーシャル

自分だけでなく他のユーザとの交流があること。他のユーザと競争や協力をさせることなどで、サービスから抜け出しにくくなる。

実際に自分がとあるソーシャルゲームにものすごくハマってしまっているのですが、前よりもどっぷりハマってしまった原因は、カードのトレードをするために仲間になった人たちがものすごくヘビーユーザー(いわゆる廃課金)で色々とプレゼントしてくれたりと良くしてもらえるので、お返ししたいなと思ったり、その人たちが持っているレア度の高いカードが羨ましくなったりしたせいだな、と思います。ソーシャルでなければきっとこんなに貢ぎませんでした。
色んなソーシャルゲームに手をつけましたが、どのゲームも挨拶のような機能があり(1日1回目はポイントがもらえたりする)、メッセージが送るとさらにポイントがもらえます。それだけだとあんまり毎日やったりしないのですが、ヘビーユーザの方はゲーム内容やキャラクターについてなどの返事したくなるメッセージを送ってくれることが多く、お返しのメッセージをすると更に返事がきたりして…。段々仲間の人と仲良くなっていったりすると、あいさつを見るために頻繁にログインしてしまうようになりました。


ゲーム以外でソーシャル的な要素をもつとして紹介されていたのが、ハーレーです。私はバイクなどは詳しくないのですが、ハーレーは自分でカスタマイズできる要素が多く(カスタマイズもゲーミフィケーション的要素の一つです)、そんなハーレーのユーザ同士で互いの自慢の機体を見せ合ったりするような場が公式で用意されているそうです。同じもののファン同士での交流は、やっぱり楽しいものですよね。


■ カスタマイズ

ハーレーのところで少し出しましたが、これもゲーミフィケーションの要素のひとつです。サービスやコンテンツについて、何かそのユーザだけのオリジナルのカスタマイズができる要素があると、ユーザはそのサービスについて愛着を持ちやすいんだそうです。

ソーシャルゲームでいうと、自分のカードのデッキなどがそれにあたるんでしょうか。デッキは好きなキャラで揃えたいものですが、カードは良いものは無課金のままではほとんど巡り会えず、有料のガチャを引いて自引きするか、そのガチャで出た自分は要らない(けど他のユーザにとっては価値のある)カードを他のユーザとトレードして揃えていくほかありません。
あとSNSに必ずといっていいほど用意されているアバターは、まさにカスタマイズ要素ですね。私はアバターはけっこうどうでもいい派ですが、そんなにお金はかけないとはいえ 自分の好む感じのものにしておきたいものです。初期アバターだとトレードのときに信用を得がたい風潮があるのもあるんですが。モバゲーにもGREEにもアバターのコンテストとかがあって、毎回テーマに沿ってアバターを変えたりして入賞を競うアバター廃人の人もたくさんいるみたいです。

また、有名どころだと、iGoogle(まだ存在するんでしたっけ)とかMyYahooとかも、そういったカスタマイズ要素を用いることで、自分のサービスをデフォルトで使ってもらおうとしているのではないでしょうか。


■ カムバック

特定の時間が経ったらまた戻ってきてサービスを利用してもらうための仕組みです。

これまたソーシャルゲームでいうと、たいていどのゲームも1日1回ログインボーナスのようなものがあって、ログインするだけで何かプレゼントがもらえたりします。また、「最近プレイしていない人をログインさせたらプレゼント」とか逆に「久しぶりにログインしたらプレゼント」みたいな褒賞の仕組みがあるものもあります。 もう興味がなくなったゲームをまたプレイしないかという連絡がくるのはうっとうしかったりもしますが、プレゼントがあるなら久しぶりにプレイしてみるかと思うこともきっとあるでしょう。

私が行っている美容院は、トリートメントをして 45日以内にまたしに来ると50%OFF、60日以内に来ると40%OFFになります。50%OFFはかなり大きいですし、また定期的に利用しようと思ってしまいます。


■ レベルアップ・ランクアップ

自分の現在の状況が数値等で記録されそれが可視化されていて、目標設定ができたりすると続けやすいものだそうです。レベル・ランクが上がるごとに報酬があるとより効果的で、普通では続けにくいものに対して利用します。記録するだけダイエットみたいなものもありますよね(私はやせませんでしたが)。

レベルアップというと、ほとんどの一般的なゲームはそういうシステムがあります。経験値がたまって、レベルが上がって、強くなってさらに上を目指していったり。オンラインだと、ランキングがあってレベル上位者がみんなに見えるようになっており、ちょっと優越感を感じられたりなど。

これもブログのどこかで誰かが書いていたかもしれませんが、私たちケイフィールドの社員達が皆ハマっている油そばのお店の、スタンプカードがこの要素を用いています。最初に油人というランクのスタンプカードから始まり、スタンプがたまるたびに玄人→将軍→極とランクが上がっていき、ランクアップするごとにもらえる特典も豪華になっていきます。社長や今井さんは将軍になっていましたが、油そばがおいしいからというよりそのランクアップが目当てで通っている節があり(もちろんおいしかったり他にも魅力を感じるからそこまで通いつめるんだと思いますが)、見事にゲーミフィケーションにはめられているようです。
他にも、読んだ本ではディズニーランドのキャスト(スタッフ)に対してこの要素が使われていることが書かれていました。キャストが良い仕事をしていたところを上司に見てもらえると、ファイブスターカードというものがもらえます。これを集めると何か記念品がもらえたり、これの所持者しか参加できないパーティに参加できたりするそうです。ディズニーランドで働くようなディズニーファンからすると、すごくたまらないものなんでしょう。


■ オンボーディング

初めてサービスを利用する人をサービスに定着させるための仕組みのことです。よっぽど魅力があることがあらかじめ分かっていない限り、最初に使い方・進め方がわからないサービスは サービスの初心者にすぐ見捨てられてしまいます。

ソーシャルゲームだと、たいてい最初にチュートリアルがありゲームの基本的な利用法がナビゲーションされるようになっていて、最後までこなすとなにかレアカードなどがプレゼントされるようになっています。ソーシャルだけでなくて最近のゲームはほとんどが、進めていきながらプレイ方法を少しずつ学んでいける仕組みになっています。説明書はほとんどの人が読まず、説明書を読まないと進められないゲームは投げ出されがちです。

ゲーム以外の(WEBを含めた)アプリケーションなども、初めに利用する機能はガイドが表示されたりするものが多くなったように感じます。
本で読んだ中には、「多機能すぎて何をどうすればいいのか分からない」電子レンジなどの例もありました。食べ物を温めたいだけなのに、ボタンが同じようにいくつも並び文字がいっぱい書いてあってどう操作したらいいか分からない、など。オンボーディングができていない例です。
また、(入社一年目の私が言うのも何ですが)新入社員教育にもオンボーディングは重要だと聞きます。仕事/サービスに慣れさせ軌道に乗せるまでの手助けをする。 多すぎるとうっとうしがられるし、少なくても仕事/サービスへの意欲が薄れてしまう。ものを教える・伝える技術は永遠の課題で、一概にどれが良いと言えるものではないですが、その場その場で求められているものは何なのか 相手の行動を考え、空気を読んで必要な情報を差し出せる努力をしなければならない、のだと思います。


といった感じです。他にも色々まとめてあるのですが、すでに長くなっているのでこのあたりにしておきます。
後藤でした。

2013/09/02

【Unity】DetonatorをiOSで動かしたとき発生するエラーについての検証

後藤です。先週分のブログです。

インターンシップ中、UnityのDetonator Explosion Frameworkという、爆発を簡単に表現できるアセットを利用していましたが、このアセットを利用するに際して 何故かMacOSX上ではちゃんと爆発するのにiOS上へ移すと爆発しない という謎の症状を2度経験したので、今回はそれについて検証してみたいと思います。

※ そもそもDetonatorはiOSでの動作をサポートしていないということではありますが、今回はやむを得ないのでそれを踏まえた上で原因追求しています。


■ エラーが出た環境と仕様


環境は、MacOSX10.8.4。Unityは4.2、Xcodeは4.6.3。Unityのライセンスは、現在はUnityさんにインターンシップ用で頂いたイベント用ライセンスを使わせて頂いています。実機のほうはiPhone4SとiPodTouch第5世代で試しておりどちらもiOS6(同じ症状が出るので実機の違いは症状には関係ないと思われる)。

実例1)シーン上に配置されているCylinderのオブジェクトにボールが衝突(OnCollisionEnter)したときにInsitantiateでDetonatorに用意されているプレハブが生成され爆発が発生する。はずだが、Mac OSX上では爆発が確認できるのにiOSで動かそうとすると爆発しない。
実例2)上とほとんど同じ。元々はCubeをTriggerにしてOnTriggerEnterしたときにInstantiateするような書き方だった、がiOSでは爆発せず。ただDetonator-Baseのプレハブをシーン上へ置いただけというふうに変更してみたり、他のアセットやオブジェクトを全部なくしてみたりと色々と試したが治らなかった。

実例1の時には結局Detonator自体を削除してもう一度インポートすれば解決したが、実例2の際にその方法を試したときは解決しなかった。


■ とりあえず表面上の原因




XcodeのDebug Areaを見ていると、Explosion2スクリプトのOnCollisionEnter → Instantiateでインスタンスを作ったときの FillDefaultMaterials → DefaultFireballAMaterial → MaterialのShaderうんぬんのところでNullReferenceExceptionが出ていることが分かる。
おそらくマテリアルとかが存在しないというようなエラーだと思われる。Shaderがどうのとあるので、new Material()ができていないのか、Shader.Findが失敗しているのか?
今回はDetonatorのプレハブを設定等をいじらず使っていたので(ただ今回はインターンに参加された学生さんたちの作るゲームで発生したものなので、いじっていないのかどうかは定かではない)、FireballAMaterialをはじめとしたマテリアルのところには何も設定をしておらず、そのためこのDefaultFireballAMaterial()、FireballBMaterial()、SmokeAMaterial()…(以下略)はSystemのデフォルトのマテリアルが使われることになっていた。ここがダメらしい。


■ とりあえずの解決策


Default〜がダメだったら、プレハブにマテリアルを直接指定してDefault〜の中でマテリアルを作らせなければいいのではないかと思ったら、それで良かったらしく、一応iOSでも爆発するようになった。
マテリアルは初め一々自分で作ってDetonatorの中にあるTexturesを指定しShaderの設定とかも行っていたのだが、そんなことをしなくてもSample Supporting Emitters→Materialsフォルダの中にマテリアルが用意されていた。ので、それをプレハブのInspectorのところで設定した(図2)。HeatwaveはProのみの機能だそうなので設定していない。



しかしなぜPCでは動くのに実機ではそれが反映されないのか…。


■ 原因の追及


他人が作ったものではどうしてこのバグが発生するようになったのかがはっきりと分からないので、自分でその状況を作るべく色々試してみることにする。

(手順)

【1】プロジェクトを作成し、シーンをAssetsフォルダ直下へ保存しておく。
【2】DetonatorをAssetStoreからインポート。場所はAssetsフォルダ直下。Test Sceneは最初からインポートに含まずチェックを外しておく。NormalMap SettingはIgnoreにしている。
【3】プレハブDetonator-Baseをそのままシーンにオブジェクトとして追加し、MainCameraに映るところへ配置


【4】Mac上のUnityでちゃんと爆発しているか確認
【5】Build SettingsでプラットフォームをiOSに変更、Add Currentで現在のシーンを追加してiOS向けにビルド

さっそく例のエラーが出た。

【6】オブジェクトに適用させたスクリプトでInstantiateさせるようにしてみる
インターンのカリキュラムではCubeオブジェクトにスクリプトを当ててそのスクリプト中でInstantiateし爆発させる方法をとっていたので、一応そちらでも試す。
書いたスクリプトは以下のとおり(Explosion.cs)。

using UnityEngine;
using System.Collections;

public class Explosion : MonoBehaviour {

     public GameObject bombType;
     private float INTERVAL = 5.0f;
     private float timer;
    
     void Start () {
          timer = 0.0f;
     }

     void Update () {
          timer -= Time.deltaTime;
          if(timer < 0.0f){
               Instantiate(bombType, this.transform.position, this.transform.rotation);
               timer = INTERVAL;
          }
     }
}
そのままHierarchyへ放り込んであったDetonator-Baseのプレハブを削除。CubeにExplosion.csを適用させ、InspectorでBomb TypeにはDetonator-Baseを設定しておく。
Explosion.csを適用させたオブジェクトが(というかその位置で)爆発するといった感じの書き方になっている。Startの時だけInstantiateしても良かったが、最初の1回だけだとiOSへビルドしたときに爆発したかどうかよく見忘れてしまうので5秒おきに爆発するようにしてある。
が、しかしやっぱりエラーが出るままだった。

【7】他のDetonatorのプレハブを試す
BombTypeを他のものに変えて試してみた。ら、これがちゃんとiOSでも爆発するものとしないものがあることに気づいた。
ちなみにうまくいかないものは以下のプレハブ。どれもMacOSX上では動作することを確認している。
  • Base
  • Crazysparks
  • MultiExample
  • MushroomCloud
  • Sounds(これに至ってはXcodeでアセンブリのが出て起動前に止まってしまった…)
  • Spray
  • Tiny
  • Wide
※ Heatwaveは試していない。

【8】各プレハブに関連付けられているスクリプトを比べる

このスクリプトの何かがいけないのではないかと見てみたが、特にそういうわけではなさそうだった。強いていえば大丈夫だったほうはSimple以外Sprayがついており、ダメだった方はSpray以外Sprayがついていないというのはあったけれど…。
というよりBaseとSimpleは同じDetonator.csの基本のファイルしかついてないみたいなので、この設定内容の違いなのではないだろうか、と。

【9】BaseとSimpleのDetonatorの設定内容を比べる
 

Simpleの方にはDirectionの中で全てSparksが設定されている(左)。Baseの方は全てNone(右)。
他のものも見てみたが、Detonatorスクリプトの中でマテリアルが指定してあるものは他にない。

【10】Simpleのコピーを作ってみて設定をBaseに近づけて動かなくなるか試す
ちゃんと動いていたDetonator-Simpleプレハブを複製してDetonator-Simple_copyとし、それをCubeのExplosionスクリプトのBombTypeに適用させることで実験してみる。
とりあえず一番大きな違いである、Derectionのところに設定してあるSparksマテリアルを全て外してみる。
ダメだった。やっぱり原因はこれのよう。

OKだったプレハブの共通点は、
  • Chunks:SprayスクリプトのSpray ObjectにChunkがついてる
  • Ignitor:ForceスクリプトのFire ObjectにBurninatingがついてる
  • Insanity:SprayスクリプトのSpray ObjectにChunk/ExplosionArmsがついてる
  • Simple:Detonatorスクリプトにマテリアルがついてる
  • Upwards:SprayスクリプトのSpray ObjectにChunk/ExplosionArmsがついてる
と、マテリアルが設定されているか、〜〜Objectという名前のところにプレハブが設定されているよう。逆にNGだったプレハブの共通点はオブジェクト・マテリアルを設定する箇所が全てNoneになっているという点だった。
(SprayプレハブはExplosionArmsがついていたが、おそらくこれはマテリアルとかが設定してあるオブジェクトではないということだと思われる。)(上記OKだったものはExplosionArmsがついてたSprayスクリプトの他にChunkオブジェクトがついているSprayスクリプトも持っていたので、これのおかげで動いていたのだろう。)

ForceスクリプトにはFire Objectを設定する箇所があり、このスクリプトがつけられているMashroomCloudとTinyのプレハブに、Ignitorについていたのと同じBurninatingオブジェクトを設定してみたら、この2つに関してはiOSでも爆発するようになった。(何かちょっと違う感じだけど…)

Burninatingプレハブを見てみると、これにはFireballA・Bとその下のSmokeプレハブにもSmokeA・Bが設定してあり、同じようにChunkの方もSmokeTrailに色々設定されていたので、そういうことなんだろう。


ということで、どこが原因だったのかは分かってきたので、次に同じエラーが出たら対処はできるはず。けれど、そもそもなぜMacだと良くてiOSだとダメなのか(他のプラットフォームではどうなのか)とか、そもそも前に他のプロジェクトでやったときはBaseとかのNGだったプレハブも普通にiOSで動いていたような気がするけど何の条件でできなくなるのか とか、そのあたりが未だ不明なので追及していく必要がある。

また、今までDetonatorの仕組みがよく分かっていなかったので(インターンシップの)資料の通りにPrefab Examplesを利用していたが、そもそもプレハブではなくてオブジェクトにCompornent→Detonatorで自分で設定を作りプレハブを作った方が安心安全なのかもしれない(しかもそうすれば最初からマテリアルがついてるし…)。
ちなみにCreateEmptyで作った空のオブジェクトにCompornent→Detonatorで基本のDetonatorスクリプトとDetonatorForceスクリプトをつけて何も設定は変更しないでビルドしてみたら、(ForceのFireObjectがNoneのままでも)ちゃんとiOSでも爆発した。ので、今のところ爆発の色だとか煙のマテリアルを変更したいとかそういう予定はないし、このエラーが発生したときはとりあえずDetonatorスクリプトにデフォルトのマテリアルをつけておくのが一番楽な対処法かな、という結論に至った。


それでもって、Xcodeを見ていてDetonatorをiOSで動かすとフレームレートが下がりまくりでとてもよろしくなさそうなことにも気づいたので、そもそもやっぱりiOSのゲームでDetonatorは利用しないべきなんだろう、ということがよくわかりました。


13/09/06補足:今きているインターンシップの子たちに試してもらったところ、(今までの子たちはDetonator(Base)を入れた後すぐにiOSで動くか確認するという作業をしていなかったため気付かなかったが)全員実機では爆発しなかった。ので、UnityからXcodeだか、C#からObjective-Cだかに変換するときに何か起こっているのですね。。Detonatorが持っているバグ(サポートしてないのでそう言っては語弊があるかもですが)なのか、言語の違いによるものなのか…は今の私には分からないので機会があったら調べたいと思います。

2013/08/26

大学生のインターンシップ(前期)がありました

後藤です。

先々週、先週の平日10日間で、大学生インターンシップの前期分が行われました。
大学生は3日しかなかった高校生と違い、10日間のカリキュラム中の前半で、ビジネスマナーを軽く学び、Unityの使い方を覚え、グループワークの心得などを学び、そして後半の5日間では自分たちで考えたゲームを AppStoreで公開することを考えて作成してもらうというスケジュールで進めていきました。

高校生のときも同じことを書いた気がしますがUnityは私や山田さんもまだまだ勉強中で、このインターンシップ期間中に新しく学んだこともいくつかありました。高校生のときに解決できなかったのと同じ問題が今回も発生してしまったときは焦りました(今回は解決できましたが)。また、大学生はグループ開発ということでSubversionを利用しようということになったのですが、Unityのメタデータ等がSubversionで扱いにくい仕組みになっていたことを始まってから知り、そのあたりで学生さんたちにグダグダな雰囲気を与えてしまったなという点に、少し準備不足を感じ後悔しています。

大学生の子には、グループでの開発であることを何度か口にして強調してきたつもりですが、やはりグループ開発というものはあまり学生さんにとって馴染みのないものなんだと感じました。私が学生時代に趣味でゲーム作成をしてきたとき、企画のリーダーだとか 5人以上の比較的大人数での制作も経験しました。その時に 報連相や情報をお互いに伝え合うことが大事である点だとか、例えば悪い報告はできるだけ早く行うという点だとか、そういったところは自然と身につきました。しかし、そういった経験はふつうの学生さんにはきっとありません。
きっとグループ開発をうまくやるには必要な知識ですが、それはこの10日間だけの“プロジェクト”において教えておくべきことなのか、そもそもこの業界を目指す子以外の役に立つものなんだろうか、など色々と考えてしまいます。人に何かを教えることの難しさを感じます。

何にしろ、提示されていた“納期”に間に合うようにきっちり完成させてくれたので良かったです。彼らから提出されている画像等を利用して、これからAppStore申請のための準備に入ります。AppStoreに登録されたらケイフィールドのサイトでも作品を紹介していくので、お楽しみに…


2013/08/18

ソフトバンクヘルスケアを購入しました


山田です。

最近ソフトバンクで提供されている「ソフトバンクヘルスケア」を購入しました。
最近海外では流行っているみたいですね。日本ではどうなんでしょうか。

ソフトバンクヘルスケアは腕にバンドを装着することで、
歩いた歩数、消費カロリー、睡眠時間などを計測して、iphoneと同期できるサービスです。




フラットなデザインが印象的で、以前ご紹介した「ゲーミフィケーション」も取り入れられており、
自分で設定した目標が達成されると報酬(コイン)が溜まっていきます。
(まだコインの使い道については明らかにされていませんが、何か景品や懸賞に応募できるのかな?)

友達同士で歩数や消費カロリーを競ったり、毎週行われるキャンペーンに挑戦してみたりと、
遊びの要素を取り入れながら運動ができるいいアイテムだと思います。

普段は仕事柄運動不足になりがちなので、1日8000歩の目標を設定して、
何か理由をつけては歩くようにしています(笑)




2013/08/12

高校生のインターンシップがありました

後藤です。

ケイフィールドでは、先週の水曜〜金曜に 高校生の方のインターンシップが行われました。
今年のインターンシップのテーマは「スマートフォンで動く面白いゲームを作ろう」となっていて、Unityを利用した迷路ゲーム作りを、高校生の方たちは3日間で行いました。

インターンシップの進行は私と山田で主に担当しているのですが、今回Unityを題材にすると決めてから私たちもUnityの勉強を始めたので、恥ずかしながらインターンシップ中にも何度かいわゆる“ハマる”状況に陥りました。社会人の威厳にかけて何とか解決していけましたが、ひとつどうしても原因が分からない不具合があったのが私にとっての悔しいところでした。
けっこう付きっきりで教えてしまったところもありますが、最終的にみんな自分で考えてアレンジした迷路ゲームを作ってくれて感動しました。むしろUnityでの設定項目など、私たちが知らなかったことをインターン生の子たちに教えてもらったこともありました。私も精進せねば…

今回のインターンシップは、Unityでプログラミングをしてゲームを完成させることが本当の目的ではありません。ほとんどの子たちはプログラミングやゲームを作ることが初体験な中で、こういった作業を自分が好きかどうか、仕事にしていきたいかもうやりたくないかなど、自分が将来働くことを考える手助けに少しでもなればと思っています。
高校生の子は(今回は全員1・2年生の子でした)、高校卒業後に働くとしても まだ2年前後考える時間があります。大学に進むとしたらもう4年。私は幸い中学・高校のころに見つけた好きなことを職業にできているのですが、自分のやりたいことが見つけられない子も多いと聞きます。ぜひ学生のうちにインターンシップだけではなく色々と興味を持って体験し、仕事にできる好きなことを見つけられるといいなと思います。

今日からは大学生さんのインターンシップが2回にわたって行われます。参加される方たちの事前資料などを拝見し、やはり経験をしてみたいという色が強かった高校生に比べると、大学生の子はIT系企業に進むうえでの業界研究をしたいというような、具体的な就職のための活動という印象を受けました。私も半年前までは学生だったのでどれだけ力になれるか分かりませんが、今回のインターンシップが 参加した皆さんが就職を考える上での参考になるよう力を尽くしたいです。


雑記担当の後藤でした。


2013/08/07

Amazon S3 に Web サーバを移しました(その2)

今井です。

前回、とりあえず Amazon S3 に Web サーバを移行してみましたが
  1. s3cmd でローカルと同期を取るとローカルにはないログファイルが消されてしまう
  2. s3cmd でローカルと同期を取ると .DS_Store などの余分なファイルまでアップロードされてしまう
  3. Webサイトアップロード専用アカウントが欲しい
といった問題が残っていました。


1. s3cmd でローカルと同期を取るとローカルにはないログファイルが消されてしまう

この問題の解決は簡単です。
ログの出力先はそれ専用のBucketを作ればよいのです。
そうすればログも全世界に公開されているんじゃないかとか心配しなくていいですし、Webサイトコンテンツアップロード時に消されてしまうこともありません。
注意事項としては Bucket のリージョンを www.kfield.co.jp と同じにしておく事だけです。


2. s3cmd でローカルと同期を取ると .DS_Store などの余分なファイルまでアップロードされてしまう

s3cmd のオプション指定で同期したくないファイル名を除外していすれば解決します。
s3cmd --config=./kfwebsite.s3cfg --delete-removed --exclude '.DS_Store' sync ./website/ s3://www.kfield.co.jp
このように --exclude 指定をすると、指定されたファイルはローカル側に無いものとして扱われます。
試しに実行してみたらサーバにコピーされていた余分なファイルはちゃんと削除されました。


3. Webサイトアップロード専用アカウントが欲しい

セキュリティ上、Webサイトのアップロードはそれだけが出来るユーザーをAWS上に作っておく事が望ましいということでユーザーを追加してアクセス権の設定をしてみます。

  1. AWS の Security Credentials 画面を開きます。
  2. User の追加を開始します。
  3. 追加するユーザー名を指定します。アクセスキーを生成するチェックボックスにチェックを入れておきます。
  4. 生成されたアクセスキーをメモしておきます。s3cmdで使用するアクセスキーをここで生成されたアクセスキーに置き換えます。
  5. 生成したユーザーのアクセス権設定を開始します。
  6. アクセス権は事前に用意しておいたテキストを使用するので Custom Policy で設定します。
  7. 名前を適当につけて定義を入力します。
    定義はこちらのAWSドキュメントを参考にしました。
    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Action": [
            "s3:ListBucket"
          ],
          "Resource": [
            "arn:aws:s3:::www.kfield.co.jp"
          ],
          "Effect": "Allow"
        },
        {
          "Action": [
            "s3:DeleteObject",
            "s3:PutObject"
          ],
          "Resource": [
            "arn:aws:s3:::www.kfield.co.jp/*"
          ],
          "Effect": "Allow"
        }
      ]
    }



変更を適用する

前回の 手順6.「S3にWebサイトデータをアップロードする」の
$ s3cmd --configure --config=./kfwebsite.s3cfg

を今回の手順3で作成したユーザーのアクセスキーを使ってやり直します。


以上で前回残っていた課題は解決。
Webサーバ移行は完了です。

Amazon S3 に移行してみたわけですが、s3cmd などのアップロード用ツールやユーザーのアクセス権設定など、トータルの解説がすぐに見当たらなかったので私がやったことを書いてみました。

2013/08/01

Amazon S3 に Web サーバを移しました(その1)

今井です。

最近、ケイフィールドのWebサイトを Amazon S3 に移行しました。

Webサイトは静的なHTMLで構成されていたので S3 に移しても何の問題もないはず、と言う事で早速公式ブログに載っている方法で試してみました。

2013/07/26

続・ほぼ初めてのiOS開発

後藤です。

みんなサボりがちなものの 私だけはちゃんと毎週続けていこうと思っていましたが、とうとう先週サボってしまいました。(ブログの投稿を)
エラーが出るたびにネタとしてちゃんとためていたので、今週はちゃんと更新します。

書き忘れていましたがXcodeのバージョンは4.6.3です。


■ TableViewがあるのにないと言われる

2013-07-05 18:12:02.175 SmartReort[3602:c07] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '-[UITableViewController loadView] loaded the "KuI-1g-SwH-view-lpF-QE-BSf" nib but didn't get a UITableView.'

遷移先のViewにTableViewが存在しないというエラーのようです。でもさすがに私が初心者とはいえ、Storyboadで遷移先の画面にUITableViewを置いていないような心当たりがあったらすぐに気付きます。置いていたのに出たのです。
こちらについては、調べていて無事原因がわかりました。

ふつうUITableViewが配置されているViewはTableViewとOutletで繋がっているようなのですが、これがなぜか切れており、それでViewがTableViewを認識してくれなかったみたいです。

ViewとTableViewを後から繋げる方法についてはわからず、まだ設計初期だったこともあり TableViewControllerを新しく配置し、画面を作りなおすことで解決しました。
もう新しく画面を作りなおすのは…という場合も、遷移後画面の実装ファイルにloadViewメソッドを追加し、その中でself.viewにTableViewをコードで追加するようなことでもできるようです。

参考
ios - nib but didn't get a UITableView - Stack Overflow
TableViewを使おうとしたらエラーがでた。 - 毒林檎のBlog


■ UITableViewCellのCustomCellに貼りつけたUITextViewをクリックするとセルがタップできない

ラベルの上はクリックしてもちゃんとセルをタップしたことになるのに、TextViewはならない。TextViewの範囲以外をタップすればきちんとセルをタップできる。
そもそもViewというものをしっかり理解しきれていないところがまだありますが、とにかくUITextViewやUIViewなどはViewの上に覆いかぶさったようになってしまって タップするとそちらを認識し、その下にあるViewは認識できないようです。

解決策は、UITextViewをタップで認識させないようにすること、だけどそこにたどり着くまでが…。そもそもViewがどうのというよりCellにTextViewなんかを貼るからいけないんだとばかり思っていたので、そこを今井さんに指摘して頂くまで気付きませんでした。

あらかじめCellのTextViewはストーリーボードのAttributes inspectorでTagの番号を設定しておいて、cellForRowAtIndexPath:メソッドあたりで
     UITextView *textView = (UITextView *)[cell viewWithTag:1];
     [textView setUserInteractionEnabled:NO];
とすることでちゃんとTextViewは認識しないようにできました。

こんなメソッドUITextViewクラスの公式リファレンスに書いてない…と思ったけれど、UIViewのサブクラスだからってことですよね。Javaのリファレンスが確か継承したものも全部書いてあったので、その感覚でいました。これからはちゃんとスーパークラスも見るようにします。。

参考
UIViewで後ろにあるViewを認識させる方法 - hachinobuのメモ
もうひとつsetUserInteractionEnabledの存在を知ることになったきっかけのサイトがあった気がするけど、どうやってたどり着いたのか忘れてしまいました。


■ 'release' is unavailable: not available in automatic reference counting mode
■ ARC forbids explicit message とXcodeに怒られた


カメラを閉じるところで[picker release];を書いたら赤いのが出ました。この2つはセットで出るもようです。
理由は、iOS5からはARCがメモリ管理を適切に行ってくれるので、releaseは書かなくてもいい(というか書いてはいけない)とのこと。カメラに限らず、ARCが関係しているところをreleaseしようとすると怒られるみたいです。どこだったか忘れてしまいましたが他でも同じエラーが出たことがあります。

Appleのカメラ操作のプログラミングのドキュメントは情報が古いようで(13/07/19現在)ドキュメントの通りに書いてるとそのように出てしまいます。[picker release];を消すことで解消しました。

参考
ARC forbids explicit message send of ‘autorelease’ | iPhone&Android端末向けのアプリ開発忘備録
‘release’ is unavailable: not available in automatic reference counting modeエラー | Koji's Blog


今回はそのような感じでした。内容が前のものと似ているので件名を前回の続きという風にしたものの、もう1ヶ月くらい経ちますし、iOS開発も大分慣れてきました。勝手が分かってくるとやっぱりプログラミングは面白いです。
弊社ではスマホアプリ等とサーバ側で通信を行うようなサービスを開発する際にThriftを利用していますが、それも最近Bootcampで習い、使いこなせて…いるかどうかはまだ分かりませんがJavaとCocoaでのデータのやり取りをできるようになりました。これからも色々と学んでいきたいです。

以上、後藤でした。



.

2013/07/15

最近のケイフィールド

後藤です。

今週は…というかもう先週ですが、JBossのサンプルをBootCampで進めているのと、あとは先週に引き続きiOS開発、そしてインターンシップ用のUnityの資料作りなどを行いました。
もう1ヶ月もしないうちに、高校生さんのインターンシップが始まります。私もUnityは今月から触り始めた初心者なので、教えれるようもう少し極めておきたいところです。

さて、iOS開発で何か書くことができるかなと思っていたのですが 今週は特に大きな壁にはぶつからず書くネタもないので、また最近のケイフィールドのことを書こうと思います。

金曜に社長のお誘いで、社員4人全員でチキンボーイというお店に行って参りました。今池駅から歩いて3分くらいのところです。焼き鳥とビールのお店でした。小さいお店で品切れのものが多かったのが残念でしたが、食べたものはどれも美味しかったです。
私はビールはまだ飲めないのですが(苦手で…)、 他の3人は色々と飲んでらっしゃいました。お酒を楽しめる大人になりたいものです。社長は今池ビールという地ビールがお目当てだったようで、お土産で買っていたようです。お味はどうだったんでしょうか。

写真は、奥のがウィンナーで手前のが食べかけですが鶏皮キムチーズというやつです。ウィンナーも鶏だったらしいです。おいしかったです。



2013/07/11

ブレインストーミングを積極的に取り入れる

山田です。

ケイフィールドで年に数回行っているインターンシップの準備を進めているのですが、カリキュラムの中でグループでアイデアを出して企画を練る時間があります。

そこで「より効果的なアイデア出し」を学生さんに体験してもらうために、「ブレインストーミング」について調べていたら、かなり面白いテーマだったので今回少し記事を書きたいと思います。

例えば我々は何かアイデアを生み出そうとする時、複数人でディスカッションを試みるわけですが、闇雲に議論をしてもなかなかうまくいかず、話し合いが平行線になりやすいのがこの作業の難しいところです。

そもそもブレインストーミング(以下ブレスト)とは、問題を解決するために集団で意見を出し合って、発想の誘発をさせる、発展させていくための手法です。それを効果的に行うために我々が意識しなければならないことって何なのでしょうか?

いろいろ調べていると、NHKで以前放送された「スタンフォード白熱教室」という番組にたどり着きました。今回はこの番組で紹介されていた要素を全て記述することはしませんが、いくつかそこで学んだポイントを書いてみたいと思います。

私が重要だと思った項目は3つです。


1.ブレインストーミングは何のためにする?

ブレインストーミングとは、「あらゆる可能性を探すためにやるもの」です。
ブレインストーミングは、開発とは違います。アイデアを実現するために発生するコストや、その実現性について議論をする段階にはありません。つまり、アイデアの評価を早く始めないことが大切です。

2.Yes,and...(いいね!それに加えて私なら...)の精神

ブレインストーミングは「発想の誘発、発展」を目的としています。
ですので、誰かの意見が出たら、「いいね!私ならそのアイデアに加えてこうしたらいいと思う!」と言うことをルールにするとより良い議論に繋がります。


3.恐れずに、くだらないと思っても発言をたくさんする

一つでも多くのアイデアを出して、アイデアを膨らませていくのが目的なのですから、たくさん発言しなければいけません。グループでアイデアの相乗効果を出すためには、あなた自身が恥ずかしがらずに、積極的に発言しブレインストーミングに参加することが大切です。


以上の3つを意識するだけで、随分と良い議論になると私も思います。
勘違いをしてはいけないのは「否定をしてはいけない」という考え方を持ってしまうことです。

「否定をしてはいけない」と考えていることが、すでに否定を前提で物事を捉えてしまっています。我々はたくさんのアイデアを出し合う中で、アイデアの誘発、発展を狙うわけですから、肯定と付け足し(Yes,and)のコミュニケーションで相乗効果のあるブレストを意識する必要があるというわけなんですね。

以上です。

2013/07/05

ほぼ初めてのiOS開発

後藤です。

ケイフィールドで開発を始めている新サービスについて、私も7月からiOSアプリの開発に現在着手しています。
私は入社の3年前ごろにケイフィールドのインターンシップに参加しており、その際にObjective-Cを経験していて初めてではないはずなのですが、メソッドの書き方とか、プロパティの定義の仕方とか、覚えていないものですね。 しかも、当時はまだストーリーボードがなかったので、色々とやり方がわからず まるっきり初心者のように、毎日エラーにぶつかっては調べて先輩方に聞いて…を繰り返しています。

今回は開発中に出遭ったエラーについて書こうと思います。
// 発生原因等について具体的に分かっていない部分もありますが、ご容赦ください。もし分かるものがあれば、ご教授いただけますと幸いです。

■ TableViewを利用していてcellForRowAtIndexPathメソッドでcellがnilのまま何も入らずエラーが出る

今のバージョンだと、cellがnilの場合は自動的に何か入るとのことですが、何らかの原因によりそれが入らずエラーになってしまっているのではないかという話になりました。
その時の対策としては、UITableViewControllerのサブクラスでObjective-Cファイルを作成した際に自動的に実装ファイルに追加されているcellForRowAtIndexPathメソッドの中へ、以下のif文を追加するとうまくいきました。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if ( cell == nil ) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }

    return cell;
}
ただ、今同じ状況を再現しようとしたらうまく動いてしまってできませんでした。後述するのですが一度iOSシュミレータやらプロジェクトのファイルやらを全部削除して実行してみたら様々な不具合が直ったので、これもそのせいだったのかもしれません。
また、最初にcellの定義を行なっている部分で、引数にindexPathが入ったままだとうまくいかないこともあったのですが、それも今はうまく動いてしまい原因がわかりませんでした。


■ ちゃんとセグエを作ってるのに ないというエラーが出る

ちゃんとセグエはViewからViewにつないだ、セグエのIdentifierもちゃんと設定している、コードの方もコピペしてIdentifierは一字一句間違いない、のに どうしてもずっとNSInvalidArgumentExceptionが出て消えませんでした。Receiver has no segue with identifierといっていますが、ちゃんとあるんですけど…と思いながらそこそこ長い時間戦いました。
このreasonの部分を検索しても英語のしか出てこないし(もちろん頑張って読みましたが、どれも具体的な解決策は出ていませんでした)、先輩たちにもお聞きしたものの理由は見つからず、どうしたものかと思っていたのですが…。

少し前にも同じことを行っていたのでダメ元で、とiOSシュミレータを初期化しプロジェクトのファイルも一旦削除してからリポジトリのものを戻してきたら、なぜかちゃんと動くようになりました。
もともと、今井さんのところではちゃんと表示されているのに私のところではセルのラベルが表示されないというような不具合もあったのですが、それも全部解消しました。何が原因だったのかは未だにわかりませんが、もっと早く試していれば…と思いました。

追記: 同じような(ストーリーボードもコードもちゃんとなっているのになぜか反映されない)事象が再び起こりましたが、その際はiOSシュミレータのアプリデータを削除することですぐに解決しました。なぜかちゃんとビルドしたものが反映されないことがあるみたいですね。。


すぐ解決した簡単なエラーを除けばこんな感じです。

今はiOSもかなりメジャーになり日本語の解説サイトさんなども増えてきましたが、それでも「開発者ならこれくらい分かって当然」なのか、「一々誰かのために書くのは面倒だから」なのか、エラーと対策などを書いてくださってるサイトってまだ少ないですよね。(もちろん、英語でもスラスラ理解できるようにはなりたいんですが…)
そういった、日本語の情報を求めている人に有益なことをかけるように、なりたいものです。今回のは原因とかが分からず役に立ちそうもないですが、まだまだこれからということで。。

以上、後藤でした。



2013/07/01

最近のケイフィールド

後藤です。

最近の2013年入社新入社員である私や中島さんは、新サービスの企画書作りやJBossのサンプルを利用した実習などを行なっています。

今回は、技術的なことではなく最近のケイフィールドでの流行について書こうと思います。
ケイフィールドで流行っているもの、それは 油そば です。最近 今池の駅にできた歌志軒というお店です。社長を中心に毎日のように通いつめています。

油そば、あまりメジャーなものではないので食べたことがない方も多いのではないでしょうか。私も今回が初めてでした。社長や今井さんの話によると、ラー油と酢をかけて食べる…そうでしたが、私はラー油も酢も苦手なのでドキドキしながら食べにいきました。

紹介するからには当然なのですが、美味しいです。ラー油+酢というとあまり味が想像しにくいと思いますが、説明しがたい味です。辛いというほど辛くもなく、酸っぱくもなく…。汁はなく、ノーマルでは麺+メンマ・チャーシュー・白ねぎ・きざみのりというシンプルな感じで頂くことになります。
が、トッピングの種類がたくさんあり、私たちはもっぱら何かトッピングをプラスして頂いてます。私も昨日2回目を食べに行ったのですが、そのときは麺大盛り(大盛り無料です、すすめられて…)+魚粉で頂きました。

名古屋を中心に営業しているチェーン店だそうです。興味を持たれた方はぜひ試してみてはいかがでしょうか。