iPhone」カテゴリーアーカイブ

ゴー・ウェスト

今回の震災で被害を受けられた方や停電等で生活や業務が困難な方への支援のひとつとして、モバイル関係のソフトウェア開発者にインキュベート・ルームを6ヵ月間無償で提供する震災支援事業が始まっています。入居保証金も半額の5万円で、共益費等は必要とのことです。個人でも小グループでもOKで、入居審査は最速みたい。

earthquake-incuvationroom

相談や申し込みは岐阜県情報産業課(TEL.058-272-8378)にしていただくとして、ここでは周辺の情報を少々。

このインキュベート・ルームは一室22㎡で、高速光回線や空調が完備していて24時間365日無休で使えます。ただ壁はちょっと薄めなので、スピーカを使っての音楽制作などには向かないですね。大声や大音量でなければ大丈夫かな。

インキュベート・ルームがある建物はドリームコアと呼ばれていて、大江匡氏の設計による、開放感のある素晴らしい外観と空間ですよ。ここは本当に気持ちがいい。iPhone塾やモバイルカフェも同じ建物にあるドリームコア・コレクティブで行なっています。

www.japan-architect.co.jpより)

宿泊はお隣の建物にあるソピア・キャビンなら、シャワー・トレイ共用タイプの個室で一泊1,500円でOK。バス・トレイ付きの部屋でも4,000円だったり、雑魚寝?タイプの和室もありますね。この宿泊施設は、何と言うか、2001年宇宙の旅のヒルトン・ホテルを思い起こすようなレトロ・フューチャー感があります。結構ヘンで面白いかも。

sopia-cabin

あと周辺はソフトピア・ジャパン地区でIT関連企業のモダン・キッチュな建物が一杯。でも、ちょっと歩くと田園地帯が広がっていてギャップが楽しめます。地方小都市と言うか田舎であることは間違いなく、衣食水準や文化環境は期待しないほうがいいです。このあたりが充実すると本当にいいのですけどねぇ。

ただ、人気映画のロードショーでも確実に座って観れるなど余裕はたっぷり。空気はキレイだし水は美味しい。自噴水が各所にあるくらい地下水脈が豊かで、ペットボトルの水なんて馬鹿馬鹿しくて飲めないくらい。

ところで、エントリー・タイトルのゴー・ウェストはVillage PeopleやPet Shop Boysの同名の曲から。あまりにも脳天気な歌詞なので掲載は控えますが、ま、そーゆーことです。大きめの企業でも自律分散協調型のワークスタイルにいいんじゃないかな。

思い起こせば、セカイカメラの初期バージョンも東京とココとで作ってました。FingerPianoやREKの和田さんもココと東京を往復しているし、Jailbreak界の貴公子もいますよ。IAMASにも遊びに来てくださいね。

3/14は大垣で裏モバイルカフェ

3/14(本日)19:00よりJR大垣駅近くで「裏モバイルカフェ」を開催します。3/12(US時間では3/11)に発売になったばかりのiPad 2をサカナにウダウダと適当にお話ししましょう〜という趣旨です。iPad 2は風呂蓋付きで少なくとも2台は登場する予定です(他にもお持ちの方は是非持って来てください)。

altmobilecafe2

日時:2011年3月14日(月)19:00〜21:00
場所:アクアウォーク大垣2Fフードコート(JR大垣駅北側のショッピングモール) 【交通案内】

# 非公式開催なので会場などへの問合せはお控えください。
# 何かありましたら本サイトのContactか、Twitterの@akamatsuまでお願いします。

iAd Producerでネイティブ・アプリ

昨年末にAppleがデベロッパー向けに公開したiAd Producerは、その名の通り、iAdのコンテンツを作成するツール。iAdの広告料はかなりの金額だそうで、大企業や広告代理店ならいざしらず、一般人には関係ないですよね。

iad-producer-hero

ところが、このiAd Producerが作成するコンテンツはHTML5、CSS3、JavaScriptとして出力される。ってことは、UIWebViewに仕込めばネイティブ・アプリとして動くんじゃない?と思って試したことろ、ちゃんと動きました。しかも、UIWebViewをInterface Builderで貼付けてアウトレットに繋いで、3行ほどコードを書くだけ。

NSString *filepath = [[NSBundle mainBundle] pathForResource:@”AdUnit/index” ofType:@”html”];
NSURL *fileurl = [NSURL fileURLWithPath:filepath];
[webView loadRequest:[NSURLRequest requestWithURL:fileurl]];

面倒な人のためにプロジェクト一式も入れおきます。

Download iAPTest.zip

実際の作業手順はこんな感じ。

  • iAd Producerでコンテンツを作成
  • ExportメニューのExport to Disk…を選び、コンテンツを出力
  • 出力されたコンテンツにあるAdUnitフォルダをXcodeプロジェクトに登録
    (この時「追加したフォルダにフォルダ参照を作成する」を選ぶ)

これだけで後はビルドして実行すればネイティブ・アプリとして(内部的にはWebアプリ的に)動いちゃいます。App Storeにも出せると思うけど、iAd Producerの目的外使用としてハネられるかもしれませんね。さらにツワモノな方は、このアプリにiAdを載せてください(笑)。Androidとかにも使える?

さて、肝心のiAd Producerでのコンテンツ制作は、ビジュアルなフローを中心にテンプレートを選んでGUIパーツを置くだけの簡単さ。雰囲気的にはiDVDとかに近いかも。GUIパーツには画像を割り当てたり、テキストを入力したり、遷移するページを指定したり、といった感じで作業を進めます。素材が揃っていれば、ナントカ案内とかナントカ紹介みたいなコンテンツがアっと言う間にできますね。

iad_producer_templates

iad_producer_objects

と言う訳で、プログラミングができない人でも、それなりのアプリがプログラムレスで作れちゃうから、かなりイイかも。もちろん、心得のある人はJavaScriptをバリバリ書くこともできます。このようなWebアプリ的に制作してネイティブ・アプリとして動かす方法はPhoneGapなどいくつかありますが、iAd Producer応用路線が遥かにお手軽な気がします。

iOS 4.2のクラス・ダンプ

正確にはiPhone 4のiOS 4.2.1 (8C148) で試しましたが、以下のコードを実行して全クラスの名前をコンソールに表示してみました。

extern int objc_getClassList(Class*, int);
extern Class class_getSuperclass(Class cls);
extern const char * class_getName(Class cls);

@implementation DumpClassesViewController

- (void)viewDidLoad
{
	[super viewDidLoad];
	
	int numClasses = objc_getClassList(nil, 0);
	Class *classes = nil;
	
	classes = (Class*)malloc(sizeof(Class) * numClasses);
	numClasses = objc_getClassList(classes, numClasses);
	
	printf("Number of Classes:%d\n", numClasses);
	
	for(int i = 0; i < numClasses; i++)
	{
		Class c = classes[i];
		printf("%s ", class_getName(c));
	}
	
	free(classes);
}

@end

その結果はクラス数 1,422 1,420個でした。実際のダンプ結果をドド〜ンとどうぞ。スペース区切りです。

【追記】このダンプには自分自身(DumpClassesViewControllerとDumpClassesAppDelegate)も含まれているので、iOSのクラスとしては1,420個です。ご指摘ありがとうございました、@sumihiro さん。

Number of Classes:1422
NSURLQueueNode CPLRUDictionary UIBezierPath UIButtonContent UIInputViewTransition NSPathStore2 WebInspector NSRunLoop UIScrollAnimation UnchargedButton _UILabeledPushButton DOMCSSVariablesDeclaration NSKeyValueFastMutableArray1 DOMHTMLModElement __NSAutoBlock UIDragger UIKBKeyInterval NSURLDirectoryEnumerator NSPhoneNumberCheckingResult DOMCSSValueList UIAutocorrectStringView UIWebSelectionAssistant __NSOperationInternal CFXPreferencesCompatibilitySource UIAlphaAnimation UIKeyboardEmojiFactory UIAlertTextView WebInspectorWindowController NSKeyValueFastMutableArray2 PEPServiceConfiguration __NSMallocBlock UIFlicker UITableViewCellLayoutManagerValue1 NSFileManager NSTransitInformationCheckingResult UIKeyboardLayout UIWebSelectionOutline DOMValidityState NSMessagePortNameServer UIInternalEvent UIKBKeyset NSKeyValueSlowMutableArray DOMUIEvent UI9PartImageView UITableViewCellLayoutManagerValue2 NSFileHandle NSOrthography DOMHTMLMetaElement UIDefaultKeyboardInput UIWebSelectionHandle NSUndoManagerProxy ALCityManager UIEvent UIKBKeyboard NSURLQueue NSData UIImage CAWindowServer UITextInputTraits UIInputViewAnimationStyle DOMCSSValue NSNullFileHandle NSComplexOrthography DOMHTMLMenuElement UIGradientBar UIWebSelectionView NSUndoManager DOMCSSUnknownRule UITouch UIKBKeyCacheEntry NSURLFileTypeMappingsInternal NSTimer _UIStretchableImage UITableHeaderFooterView UIPeripheralHostView NSOperation WebKitStatistics CPLRUDictionaryNode __NSFinalizingBlock UIFrameAnimation UIKeyboardEmoji UIRuntimeOutletCollectionConnection NSMessagePort DOMCSSStyleSheet UISectionList UIKeyboardLayoutEmoji_iPad UIThreePartImageView DOMTreeWalker NSKeyValueNotifyingMutableSet UIDelayedAction UIKeyboardLayoutStar _UIPopoverLayoutInfo NSFileAttributes NSSimpleRegularExpressionCheckingResult CFXPreferencesPropertyListSource UIAutocorrectTextView UIMenuItem _NSPredicateUtilities InvocationTrampoline DOMHTMLMarqueeElement NSBlock UIKeyboardPartialLayoutView UIKBKeylistReference NSKeyValueMutableArray ThreadedInvocationTrampoline UIGestureInfo UIKBKeyplaneView UIKeyboardCache NSDirectoryEnumerator NSExtendedRegularExpressionCheckingResult CFXPreferencesSearchListSource CAScrollLayer UIAutocorrectShadowView UIMenuController _NSNestedDictionary WebCoreScrollView DOMHTMLMapElement NSCache UIRemoteControlEvent UIKBKeylayout NSProtocolChecker DOMCSSStyleRule UIApplication UIGlassButton UIKeyboardAutomatic DOMTouchList NSAllDescendantPathsEnumerator NSComplexRegularExpressionCheckingResult __NSStackBlock UIAutocorrectImageView UIWebLongPressInSelectableRecognizer NSPortNameServer DOMTouchEvent UITouchesEvent UIKBKeylist NSConcreteProtocolChecker _UIBackgroundTaskInfo UIRoundedRectButton UIInputViewRotateTransition NSConcretePointerFunctions WebIconFetcher UISectionHeaderCell UIKeyboardLayoutEmoji_iPhone _UIAlertOverlayWindow NSMachBootstrapServer WebImageRendererFactory UIMotionEvent UIKBGeometry NSURLHostNameAddressInfo DOMHTMLLinkElement UIUndoAlertView UIButtonLabel UIInputViewSlideTransition NSPointerFunctions CPSearchMatcher UIRotationAnimation UIKeyboardLayoutEmoji _UIMediaPushButton NSKeyValueFastMutableArray CFXPreferencesManagedSource UIGestureAnimation UIKeyboardTouchInfo DOMCSSStyleDeclaration NSAssertionHandler NSConcreteAttributedString DOMHTMLLIElement __NSTimeZone CASpring UITableViewCellLayoutManager _UIToolbarAppearance UIPrintRangePickerView _NSUndoLightInvocation UIKeyboard UITextMagnifierRanged WebHTMLRepresentationPrivate DOMTouch NSDecimalNumberPlaceholder WebHTMLRepresentation OperationQueueInvocationTrampoline UIKeyboardSublayoutEMail UITextTapRecognizer DOMCSSRuleList NSOperationQueue DOMTextEvent _UIOnePartImageView UIDatePicker UIInputSwitcherSelectionExtraView _NSUndoInvocation UIClippedImageView UITextMagnifierRangedRenderer NSDecimalNumber ABVCardValueSetter UIKeyboardSublayout UIKBAttributeList NSAutoContentAccessingProxy DOMText _UIPickerViewTopFrame UIButton UIInputSwitcherShadowView NSKeyValueNonmutatingCollectionMethodSet CapturedInvocationTrampoline DOMHTMLLegendElement NSInputStream CADisplayMode UITextFieldLabel UIWebClipIcon _UIAlertSheetTable NSDecimalNumberHandler ABVCardPersonValueSetter UIKeyboardReplacementImageView UIKBKey NSWeakCallback DelayedInvocationTrampoline __NSCFConstantString UIWeekMonthDayTableCell UIPopoverButton UIInputSwitcherTableCellBackgroundView DOMCSSRule NSKeyValueMutatingCollectionMethodSet DOMHTMLLabelElement NSTimeZone UIFloatArray UIInlineCandidateTextView UIAlertSheetTextField WebHTMLView NSMutableAttributedString NSError DOMCSSPrimitiveValue UITouchDiagnosticsLayer UITableViewCellReorderControl UIKeyboardInputMode NSNotificationQueue NSOutputStream UIDateTableCell UITexturedButton UIKeyboardRotationState NSKeyValueNonmutatingArrayMethodSet __NSPlaceholderTimeZone CAForceField UISectionTable InlineCandidateCell UIOnePartImageView NSCFError NSConcreteMutableAttributedString DOMCSSPageRule UITextView UITableViewCellEditingData UIKeyboardInputModeController DOMStyleSheetList _NSUndoStack ABVCardCardDAVValueSetter UIAutocorrectInlinePrompt UITextContentView WebHTMLViewPrivate _NSUndoObject NSMutableData UIAutoscroll UITextMagnifierTimeWeightedPoint NSURLFileTypeMappings DOMHTMLIsIndexElement __NSBlockVariable CADisplay UIKeyboardLayoutQWERTYK48 UIPopoverViewBackgroundComponentView NSBlockOperation WebGeolocationManager UIPickerScrollAnimation UISwitch UITextCheckerDictionaryEntry NSKeyValueIvarMutableArray UITextField UIActivityIndicatorView _UIAlertStackWatcher NSURLKeyValuePair AggregateDictionary ABVCardParser DOMHTMLInputElement __NSGlobalBlock CAWindowServerDisplay UIKeyboardLayoutQWERTY UIKeyboardSwipeGesture NSInvocationOperation DOMCSSMediaRule _UIPickerWheelView _UISwitchInfo UIStatusBarThermalColorItemView DOMStyleSheet NSKeyValueNotifyingMutableArray CPNetworkObserver UITextFieldAtomBackgroundView UIAutoRotatingWindow _UIAlertTableViewCell WebHistoryPrivate NSConcreteFileHandle NSSimpleOrthography UIStatusBarCorners UISwappableImageView UITableViewCellDeleteConfirmationControl __NSOperationQueueInternal CPAggregateDictionary DOMCSSImportRule _UIPickerViewSelectionBar UIDatePickerView UIInputSwitcherView DOMStyleMedia NSKeyValueContainerClass UITextFieldBorderView UITextEffectsWindow UIAlertSheetTableCell NSPipe NSKeyValueChangeDictionary AppleSpell NSStream CADisplayLink _UISwappableImageViewAnimationProxy _UITableViewCellDeleteConfirmationControl UIPrintRangeViewController _NSUndoBeginMark ABVCardCardDAVParser DOMHTMLImageElement NSLocale UICheckeredPatternView UITextMagnifierCaret WebHistoryItem NSKeyValueArray UITextFieldCenteredLabel UIWebClip _UIAlertBackgroundView NSAttributedString NSConcretePipe _ReachabilityRequest CoreMotionManager NSUserDefaults UISelectionIndicatorView UITableViewLabel UIPrintRangePickerLayoutView _NSUndoEndMark ABVCardParameter DOMHTMLIFrameElement NSURL UIKeyboardImpl UITextMagnifierCaretRenderer NSPortMessage DOMCSSFontFaceRule UIKeyboardLayoutRoman UIGestureContext DOMRGBColor NSExpression DOMGestureEvent __NSArrayI LKNSArrayCodingProxy UITabBarController UITableViewVisibleCells UIConcreteMarkupTextPrintFormatter WebPolicyDecisionListenerPrivate NSNetworkSettingsInternal UISliderContent UIGestureDelayedTouch WebGeolocationPolicyListener NSCFSet UIPickerTableCell UISwipeGestureRecognizer NSKeyValueShareableObservanceKey DOMHTMLTableCaptionElement UIStatusBarItem UIWebViewInternal NSNetworkSettings UIPreferencesTextTableCell UIGestureRecognizerTarget NSCountedSet UIPreferencesDeleteTableCell UIPhraseBoundaryGestureRecognizer WebPolicyDecisionListener NSKeyValueObservance DOMHTMLStyleElement UIScroller UIStatusBarItemView NSConcreteHashTable NSDateCheckingResult UIProxyObject CACodingProxy UIScrollViewScrollAnimation _UIOpenInNavigationController WebCoreMediaPlayerNotificationHelper NSScanner WebCoreStatistics UIAccentedCharacterView UIRuntimeAccessibilityConfiguration DOMFileList NSKeyValueObservationInfo UIStatusBarLayoutManager UIScrollerIndicator NSClassicHashTable NSAddressCheckingResult DOMFile __NSPlaceholderArray UIRuntimeConnection UINavigationBarBackground _UIOpenInTableViewController WebCoreBundleFinder NSConstantValueExpression UIMoreNavigationController UITableViewCellContentMirror UIMarkupTextPrintFormatter NSKeyValueNilSetEnumerator UIScrollerScrollAnimation UIStatusBarPublisher NSDirectoryTraversalOperation NSLinkCheckingResult DOMHTMLSelectElement __NSArrayM UIClassSwapper LKNSDictionaryCodingProxy UINavBarPrompt UIKeyboardCandidateBar NSAnyKeyExpression UIMoreListCellLayoutManager UIViewAnimationContext UIViewPrintFormatter WebPreferences NSHTTPCookieStorageInternal UICoverFlowLayer UIPinchGestureRecognizer WebDatabaseManager NSURLCache DOMHTMLScriptElement ProfilerServer UIPreferencesTableCell ABHelper NSCFOutputStream __NSDate CATransition UISearchFieldBackgroundView UIWebDragDotView WebAnimationDelegate NSKeyValueNestedProperty WebPluginContainerCheck UIStatusBarBackgroundView UIWebPaginationInfo DOMEvent _NSIndexPathUniqueTree NSTextCheckingResult UIView UIKeyboardCandidateShadowView UIRoundedCornerView NSSortDescriptor WebBasePluginPackage DOMEntityReference __NSCFDictionary CAMatchMoveAnimation UITextFieldBackgroundView UIWebTextRangeView DOMXPathResult NSKeyValueComputedProperty UIStatusBarForegroundView UIWebViewWebViewDelegate NSIndexPath NSOrthographyCheckingResult UIViewHeartbeat KBCandidateCell UIClipCornerView NSKeyPathSpecifierExpression WebPluginController DOMHTMLQuoteElement WTFMainThreadCaller UIViewControllerAction UIKeyboardEmojiCategoriesControl_iPad UIPrintFormatter NSKeyValueShareableObservationInfoKey WebPluginDatabase UIStatusBarIndicatorItemView UIWebView NSHost NSSpellCheckingResult WebCache UIViewAnimationState UINib UIDocumentInteractionController NSKeyPathExpression DOMHTMLPreElement CAAnimationGroup UINavigationController UIKeyboardEmojiCategoriesControl_iPhone UIConcreteSimpleTextPrintFormatter NSURLAuthenticationChallengeInternal DOMEntity NSDate UIPreferencesTableCellRemoveControl UIWebFormDelegate DOMXPathExpression __NSStackBlock__ NSHashTable NSGrammarCheckingResult UINibStorage UIScrollView _UIPreviewItemProxy WebOpenPanelResultListener NSFunctionExpression WebPluginPackage UISnapshotModalViewController UIKeyboardEmojiCategoriesControl UISimpleTextPrintFormatter NSURLAuthenticationChallenge DOMElement __NSPlaceholderDate UISlider UIGestureRecognizer DOMNativeXPathNSResolver NSSimpleCString UISystemAlertRequest UIMultiColumnsNavigationTransitionView NSKeyValueFastMutableSet2 WebApplicationCache DOMWheelEvent UIRemoteApplication UISelectionTapRecognizer NSFilesystemItemRemoveOperation NSReplacementCheckingResult DOMHTMLParamElement UIWebLayer UIPageController NSFalsePredicate CACGPathCodingSegment UIFingerInfo UIKeyboardCandidateInlineScroller UIInputViewPostPinningReloadState NSCFURLProtocol WebMainThreadInvoker __NSCFArray UIFieldEditor UIKeyboardEmojiScrollView UIKeyboardEmojiGraphics NSFilesystemItemMoveOperation NSCorrectionCheckingResult WebPDFView DOMHTMLParagraphElement WebThreadSafeUndoManager UIPageControllerScrollView NSCompoundPredicate UIViewTapInfo UIKeyboardCandidateInline UIPeripheralHostState NSAboutURLProtocol CPBitmapStore NSMutableArray UIViewController EmojiPageControl UIPrintInfoRequest DOMImplementation NSCFType DOMWebKitTransitionEvent UIGroupInsertionItem AddressBookMatch WebArchivePrivate NSComparisonPredicate DOMDocumentType CFXPreferencesSource UIScreenMode UIViewAnimationBlockDelegate CARenderObject UIKeyboardCandidateInlineTextLabelView WebArchive NSNumberFormatter WebPlainWhiteView UIFullScreenViewController EmojiScrollView UIPrintInfo NSPort DOMWebKitCSSTransformValue _UIGroupItem FormAutoFiller NSKeyValueSlowMutableSet UIPasscodeField UIWebSelectionGraph NSFormatter UIViewControllerWrapperView UIKeyboardEmojiView UIPrintPaper DOMHTMLOptionsCollection NSMachPort _UIPrefTableCellPiece UIWebFormCompletionController WebBackForwardList NSKeyValueIvarMutableSet DOMHTMLOptionElement DumpClassesViewController UITextFieldRoundedRectBackgroundView UIWebSelectionNode _NSFileManagerInfo NSRegularExpressionCheckingResult DOMDocumentFragment CACGPathCodingProxy UIDefaultWebViewInteractionDelegate UITableViewCellContentView NSDirectorySubpathsOperation NSSubstitutionCheckingResult WebMarkup UITouchTapInfo UIKBKeyplane NSAggregateExpression CPPowerAssertionManager UITextRenderingAttributes UITableHeaderFooterViewLabel UIPeripheralHostLayer NSHTTPCookieStorage DOMDocument UITransformAnimation UIKeyboardEmojiCategoryController UIPlacardButton DOMWebKitCSSMatrix NSConcreteScanner DumpClassesAppDelegate LKCGColorCodingProxy UIInformalDelegate UITableViewCellLayoutManagerSubtitle NSTruePredicate DOMWebKitCSSKeyframesRule UIWindow UITableViewIndex UIInputViewSet NSHTTPCookie WebNavigationDataPrivate DOMHTMLOptGroupElement UIAnimation UIKeyboardEmojiCategory UIFenceController NSProxy LKNSValueCodingProxy UIWebPlugInView UIThreadSafeNode NSKeyValueMutableSet __NSArrayReverseEnumerator UIITunesStoreURLResolver UIWebSelection _NSCFURLProtocolBridge DOMHTMLOListElement UIAnimator UIKeyboardEmojiPage UITextSelection NSPropertyListSerialization DOMCSSVariablesRule NSArray CACGPatternCodingProxy UIPreferencesTable UIWebFormABCompatibility NSKeyValueFastMutableSet UIGameCenterURLResolver UITextMagnifierRenderer NSFilesystemItemCopyOperation NSQuoteCheckingResult RadiosPreferences DOMWebKitCSSKeyframeRule UIWebDocumentView UIKeyboardMinimizedView NSProcessInfo ALCity __NSArrayReversed LKCGImageCodingProxy UIGroupDeletionItem FormToABBinder NSKeyValueFastMutableSet1 UIURLResolver UIVariableDelayLoupeGesture NSFilesystemItemLinkOperation NSDashCheckingResult WebNavigationData DOMWebKitAnimationEvent WebViewReachabilityObserver UIKeyboardZoomGesture NSPredicate DOMHTMLObjectElement UITouchData UIKeyboardCandidateSafetyNetVie UIPeripheralHost NSKeyValueSlowMutableCollectionGetter NSAKSerializer CTMessageStatus DOMMouseEvent UIScrubberControl UISearchDisplayController NSCFBoolean NSCompoundPredicateOperator DOMHTMLDListElement UICachedDevicePatternColor UITableViewScrollTestParameters NSURLProtectionSpace SBSLocalNotificationClient UIScreen UIStatusBar NSPlaceholderNumber WebDefaultUIKitDelegate Protocol CAGradientLayer UIImageAndTextTableCell UITabBarItemProxy UISnapshotView LSApplicationWorkspace AccessibilityTextMarker NSDebugString NSComparisonPredicateOperator WebDownloadInternal DOMHTMLDivElement Object UICachedDeviceRGBColor UIKeyboardCandidateSingle WAKView NSURLCredentialStorage CTMessagePart AccessibilityObjectWrapper UIPageControl UIRotationGestureRecognizer NSCFTimer CALayer _UITableCellGrabber UITabBarButton UISharedImageStatisticsTable LSDocumentProxy NSAutoLocale WebTextIterator NSInvocation SBSCompassAssertion UIThreePartButton UIMovieScrubberTrackOverlayView UIPrintStatusViewController NSURLCredential UITableViewRowData UIDropShadowView DOMMessagePort _NSCallStackArray WebDownload NSEnumerator CAContext UITableCellFlashDeselectAnimation UITabBarButtonLabel UISharedImageStatistics NSKeyedArchiver DOMMessageEvent UIRemoveControl UIMovieScrubberTrackFillView UIPrintStatusTableViewController WebTextIteratorPrivate NSKeyValueIvarMutableCollectionGetter NSAKDeserializer CTEmailAddress DOMHTMLDirectoryElement UIScrubberTimeView UISearchResultsTableView WAKScrollView __NSFinalizingBlock__ _NSThreadPerformInfo NSException CAFilter UITableCellFadeAnimation UITabBarButtonBadge UILocalNotification WebEditCommand _NSKeyedUnarchiverHelper WAKResponder UIRemoveControlTextButton UIMovieScrubberTrackInnerShadowView UIPrintStatusTableViewCell NSKeyValueNotifyingMutableCollectionGetter NSPageData UIInsertControl UILocalizedIndexedCollation NSBundle NSBetweenPredicateOperator UICachedDeviceWhiteColor UIKeyboardCandidate _WebSafeForwarder NSAutoCalendar NSInPredicateOperator WebDefaultPolicyDelegate WAKClipView NSNull UIFont CALayerHost UITextRange LSResourceProxy NSHTTPURLRequestParameters CTTelephonyNetworkInfo UIAccelerometer UIScrollViewPanGestureRecognizer NSValue UITableView UITabBar UIWebTextView DOMMediaList NSLock UIProgressBar _UITableViewUpdateSupport UIPrintPanelButtonLayoutView DOMHTMLCollection NSURLProtocolInternal WebSelectionRect DOMKeyboardEvent UIAcceleration UIScrollViewPagingSwipeGestureRecognizer NSNumber WebDefaultResourceLoadDelegate ABCCallbackInvoker DOMHTMLCanvasElement UITableColumn UITabBarCustomizeViewLegacy UIStatusBarLockItemView NSConditionLock CTCarrier UISegmentedControl UIKeyboardEmojiRecentsController UIStepper NSKeyValueUndefinedSetter NSLeafProxy NSCursor CAMediaTimingFunctionBuiltin _UIDateLabelCache UITapRecognizer LSOpenOperation NSPlaceholderValue DOMHTMLButtonElement SBSRemoteNotificationClient UIHardware UITabBarCustomizeView UIKBIdentifierList NSRecursiveLock WebSerializedJSValue UISegmentLabel UIDimmingView UIPrintInteractionController NSKeyValueFastMutableCollection1Getter NSAKSerializerStream NSMessageBuilder UIProgressHUD UITableViewCellLayoutManagerEditable1 NSEqualityPredicateOperator DOMHTMLUListElement UIColor UITextPosition __NSGlobalBlock__ NSMultiReadUniWriteLock CTCallCenter UISegment UIMovieScrubberThumbnailView UIPrintInteractionControllerInternals WebSerializedJSValuePrivate NSKeyValueFastMutableCollection2Getter NSAKDeserializerStream SBSAccelerometer NSMethodSignature CALayerArray UISearchField UIWebURLAction LSApplicationProxy NSCFNumber NSCustomPredicateOperator WebDefaultUIDelegate DOMHTMLTitleElement UIPlaceholderColor UITextInputArrowKeyHistory NSURLProtocol DOMHTMLBRElement UIDevice UIScrollViewDelayedTouchesBeganGestureRecognizer WebThreadCaller NSPlaceholderString UIStatusBarSignalStrengthItemView UITableSeparatorView NSKeyValueProxyShareKey WebDefaultEditingDelegate UICustomObject UINavigationBar UIWebBrowserView NSMutableIndexSet NSDataDetector DOMHTMLBodyElement NSDictionary EAGLSharegroup _UIImageViewExtendedStorage _UITableViewSeparatorView UIPrinterSearchingView WebScriptCallFramePrivate TileLayer NSUnarchiver NSSymbolicExpression UIWebTiledView UICompositeImageElement NSKeyValueProperty UINavigationItem UIBarItem UIWebBrowserPDFPageLabel NSCFAttributedString _NSIndexSetEnumerator DOMHTMLTextAreaElement __NSDictionaryObjectEnumerator CAPropertyAnimation UIProgressIndicator _UITableViewDeleteAnimationSupport UIPrinterTableViewCell NSAffineTransform NSSubqueryExpression UITextLabel UIGroupTableViewCellBackground NSCachedURLResponse UIKeyboardSpaceKeyView UITextInputStringTokenizer WebScriptCallFrame NSDateFormatter _NSIndexPathUniqueTreeNode DOMHTMLTableSectionElement UIResponder _UITableViewReorderingSupport UIPrintPanelTableViewController WebScriptWorld NSSetExpression CTMessage DOMHTMLBaseFontElement EAGLContext UILabel _UIGroupTableViewCellBackgroundImageKey TileHostLayer NSURLCacheInternal WebDefaultFormDelegate UIKeyboardKeyView UITextPositionImpl __NSLocalizedString UIStatusBarDataNetworkItemView CAKeyframeAnimation _UITableDeleteAnimationSupport __NSMallocBlock__ NSSelfExpression DOMHTMLBaseElement UIDateLabel UITapGestureRecognizer WebCorePowerNotifierIPhone NSURLCacheNode UICFFont UITextRangeImpl WebScriptWorldPrivate NSCFInputStream CABasicAnimation _UITableReorderingSupport UIScrollViewPinchGestureRecognizer NSKeyValueUnnestedProperty WebDefaultFrameLoadDelegate DOMHTMLTableRowElement NSMutableDictionary _UINavigationBarAppearance UITabBarItem UIWebTouchEventsGestureRecognizer NSKeyedUnarchiver UINavigationItemButtonView UIRuntimeEventConnection UIKeyboardCandidateBarCell WebDatabasePauser NSKeyValueSlowGetter NSFileWrapperMoreIVars UIMoreListController UIViewAnimation UIWebViewPrintFormatter NSAutoreleasePool NSVariableExpression DOMHTMLTableElement CAContextImpl UIPreferencesControlTableCell UITextInteractionAssistant NSURLError DOMHTMLAreaElement __NSDictionary0 UINibDecoder UIAccentedKeyCapStringView WebPreferencesPrivate WebCoreSharedBufferData NSKeyValueSlowSetter NSFileWrapper CTPhoneNumber UISectionIndex UIUpdateItem UIPrintPanelViewController NSCFArray NSVariableAssignmentExpression UIShadowView UILongPressGestureRecognizer NSURLConnectionInternal DOMHTMLAppletElement __NSFastEnumerationEnumerator UINibStringIDTable UIKeyboardLanguageIndicator WebCoreSynchronousLoader _NSThreadData NSCFString UIStatusBarServer UIContinuation NSArchiver NSTernaryExpression __NSPlaceholderDictionary CAAnimation UICompositeImageView UIWebFormPasswordsEditor NSURLConnection DOMHTMLTableColElement UIKeyboardGenericKeyView UIVideoEditorController NSThread WebResourcePrivate CTMmsEncoder UITable UIStatusBarServerThread _NSKeyedCoderOldStyleArray WebDataSourcePrivate UIRuntimeOutletConnection UINavigationItemView UIInputSwitcher __NSAutoBlock__ NSCachedURLResponseInternal WebDataSource DOMHTMLTableCellElement UIKeyboardReturnKeyView UITextInputMode NSString DOMHTMLAnchorElement UIStatusBarWindow UITableCountView WebCoreResourceHandleAsDelegate NSKeyValueSet UINavigationButton UIImageNibPlaceholder UIWebFormAccessory NSIndexSet NSRegularExpression WebResource CTMessageCenter NSURLConnectionIPhone UIImageView CASlotProxy UITableViewCountView UIPrinterBrowserViewController NSNotificationCenter WebGeolocationMock WebGLLayer UIKeyboardLayoutAZERTYLandscape UIKBCandidateView NSKeyValueAccessor CPDistributedMessagingCenter UIPickerView UIOldSliderFillView UIPopoverController NSPurgeableData NSSimpleAttributeDictionary ADDataStore DOMCSSCharsetRule __NSCFError CAValueFunction UIAlertView UIControlTargetAction _UISearchBarAppearance DOMRect NSURLDownload WebUserContentURLPattern ABVCardCardDAVExporter __NSSet0 UIToolbarTextButton UIRemoteWindow UIPrintingProgressViewController NSKeyValueGetter UIPickerTable UILayoutContainerView UIClientRotationContext NSSubrangeData NSSimpleAttributeDictionaryEnumerator WebGeolocationPosition DOMHTMLHtmlElement __NSCFBoolean UIGradient UIBarButtonItem _UIAlerts_Support NSURLConnectionDelegateProxy ABVCardRecord NSDateComponents UIToolbarButton UIKBShape UIPrintingMessageView WebUserContentURLPatternPrivate NSValueTransformer ADCrashLogStore UIDOMHTMLOptGroupSelectedItem UICalloutBarOverlay NSCFData NSBlockPredicate DOMHTMLHRElement __NSPlaceholderSet CATransaction UIPushButton UIProgressView _UIAlertManager WebGeolocationPositionInternal GeolocationCoreLocationDelegate NSGZipDecoder ADKeyStore WebGeolocationManagerPrivate UIToolbarButtonBadge UITableViewCellEditControl UIPrintPageRenderer DOMRange _NSSharedValueTransformer WebTiledLayer UIDOMHTMLOptionSelectedItem UITapAndAHalfRecognizer PersistentURLTranslatorAccess DOMCounter NSMutableString CPDistributedMessagingCallout DOMProgressEvent UIKeyboardLayoutAZERTY UIKBKeyView NSURLResponseInternal CPDistributedMessagingDelayedReplyContext DOMComment UIButtonBarBadgeBackground _UITableViewCellEditControlMinusView UITextViewPrintFormatter _NSNegateBooleanTransformer ABPersonLinker UIHighlightView UIDragRecognizer WebHistory NSCheapMutableString DOMProcessingInstruction UIKeyboardLayoutQWERTYLandscapeK48 UIPopoverView NSKeyValueProxyGetter DOMHTMLHeadingElement __NSCFCharacterSet CATransformLayer _UIPickerViewWrappingTableCell UIImagePickerController UITextChecker NSKeyValueMutatingArrayMethodSet WebSecurityOrigin _CPPowerAssertionThread UIStatusBarBluetoothItemView _UIOldSliderAnimation NSCFDictionary NSMutableStringProxyForMutableAttributedString WebFrameViewPrivate UIControl UISearchBarBackground UIActionSheet NSNetService ABVCardLexer DOMHTMLHeadElement UIToolbarCustomizeViewLegacy UINavigationTransitionView UIKeyboardOverlayManager WebScriptObjectPrivate NSTask DOMCharacterData __NSCFAttributedString CADynamicsBehavior UIWebSelectPicker UISelectionGrabber NSConcreteData NSRLEArray WebUndefined UIDelayedControlTargetAction UISearchBarTextField _UIActionSheetHostingController NSNetServiceBrowser WebDatabaseQuotaManager _CPPowerAssertion DOMPageTransitionEvent UIToolbarCustomizeView UIRemoteSheetInfo UIStatusBarNotChargingItemView NSConcreteTask DOMCDATASection __NSCFString CABehavior UIWebSelectPeripheral UISelectionGrabberDot NSNotification __NSLocalTimeZone UIClassicController UIKeyboardLayoutQZERTY NSURLDownloadInternal DOMOverflowEvent __NSCFNumber UIBarButtonItemProxy UIRemoteView UIPrintingProgress _NSXMLParserInfo ABVCardExporter DOMHTMLFrameSetElement __NSCFCalendar CAEAGLLayer UIDOMHTMLOptGroupCell UICalloutBar NSConcreteNotification WebFrameView CPDistributedMessagingAsyncOperation UIKeyboardLayoutQWERTZLandscape UIKBHandwritingStrokes NSKeyValueNonmutatingSetMethodSet UIOldSliderControl UIStatusBarBluetoothBatteryItemView NSXMLParser ABVCardCardDAVRecord DOMHTMLFrameElement NSCalendar CARenderer UIDOMHTMLOptionPickerCell UICalloutBarButton WebScriptObject __NSObserver UIKeyboardLayoutQWERTZ UIKBHandwritingView NSKeyValueMutatingSetMethodSet WebApplicationCacheQuotaManager WebLayer UIOldSliderButton UIStatusBarActivityItemView DOMBlob NSConcreteMutableData NSMutableRLEArray WebGeolocation DOMObject CPDistributedNotificationCenter UIDeprecatedDelayedControlTargetAction UISearchBar UITwoSidedAlertController NSURLRequestInternal DOMBeforeLoadEvent __NSCFLocale PKPrinter UITableCellDisclosureView _UITabBarAppearance UIStatusBarHideAnimationParameters WebFramePrivate _NSKeyedUnarchiveFromDataTransformer WebViewFactory ABValuePredicate _NSZombie_ CAReplicatorLayer UIRemoveControlTextFrameAnimation UIMovieScrubberEditingView UIWebDocumentViewPrintFormatter NSConcreteMapTableValueEnumerator DOMNotation UICalloutView UIWindowController NSKeyValueIvarGetter NSDocInfo _CPBundleIdentifierString DOMHTMLFormElement UIKeyboardLayoutRomajiLandscape UIClassicStatusBarImageView NSConcreteValue CPExclusiveLock ABPredicate NSObject CAShapeLayer UIToolbar UIKeyboardInputManager UIPrintStatusJobsViewController NSClassicMapTable WebFontCache PKPrinterBrowser UIWebSelectPopover UITextSelectionView WebFrame NSKeyValueUndefinedGetter NSDocumentSerializer DOMHTMLFontElement UIKeyboardLayoutRomaji UIZoomViewController NSCFCharacterSet NSPredicateOperator CTCall DOMAttr UIStatusBarBatteryItemView _UITableViewCellGrabber NSCondition WebEventRegion UIWebSelectTableViewController UITextRangeView NSKeyValueMethodSetter NSDirInfoSerializer UIKeyboardLayoutQWERTYLandscape UIStatusBarAdornmentWindow _NSPlaceholderCharacterSet NSMatchingPredicateOperator WebVisiblePosition CAMediaTimingFunction UIStatusBarBatteryPercentItemView PKJob _UITableViewCellOldEditingData DOMNodeList NSURLRequest ABNamePredicate __NSGenericDeallocHandler _UITableCellTransientData UITableViewController UIStatusBarAnimationParameters __NSBlockVariable__ NSKeyValueIvarSetter NSDirInfoDeserializer UIKeyboardLayoutQZERTYLandscape UIStatusBarViewController NSCalendarDate NSLikePredicateOperator DOMHTMLFieldSetElement UITableViewCellUnhighlightedState UIStatusBarAirplaneModeItemView NSMutableURLRequest CPRegularExpression ABGroupMembershipPredicate __NSCFType UITransitionView UITableViewControllerKeyboardSupport UIModalView WebFramePolicyListener NSWeakPointerValue WebWorkersPrivate WebEvent PKPrintSettings UIButtonBarCustomizeView UIPasteboard UIPrintStatusJobTableViewCell DOMAbstractView _NSIsNilTransformer ABSearchOperation DOMHTMLEmbedElement UIRemoveControlMultiSelectButton UIMovieScrubberTrackView UITextReplacement WebView NSPlaceholderMutableString __NSCFTimer UICompletionTable UIAccessibilityElement WebEditorUndoTarget DOMNodeIterator NSKeyValueSetter NSRTFD WebCoreViewFactory NSMutableSet UIDeviceRGBColor UISplitViewController DOMNodeFilter NSConstantString NSBlockExpression PKPaper UISectionRowData _UIBookViewControllerView NSMapTable __NSCFData UICompletionTablePrivate UIPanGestureRecognizer DOMNode NSKeyValueMethodGetter NSDocumentDeserializer NSSet UIDeviceWhiteColor CATransactionCompletionItem UIZoomButtonWindow NSCoder _NSPredicateOperatorUtilities UITableViewCell UIBookViewController NSURLResponse ABAnyValuePredicate DOMHTMLElement UITableCellRemoveControl UITabBarBadgeBackground UIConcreteLocalNotification NSKeyValueCollectionGetter NSDirInfo WebElementDictionary UICGColor UIClassicWindow NSCharacterSet NSSubstringPredicateOperator WebCoreKeyGenerator UIStatusBarTimeItemView UITableViewCellSelectedBackground WKQuadObject NSHTTPURLResponseInternal ABPhonePredicate DOMHTMLDocument UISimpleTableCell UITabBarSwappableImageView UIStatusBarOrientationAnimationParameters _NSIsNotNilTransformer WebProgressItem __NSCFOutputStream CATextLayer UIRemoveControlMinusButton UIMovieScrubberTrackMaskView UIAutocorrectionRecord DOMNamedNodeMap NSMutableCharacterSet NSStringPredicateOperator WAKWindow UIStatusBarServiceItemView _UITableViewCellRemoveControl WebCoreAuthenticationClientAsChallengeSender NSHTTPURLResponse WebFormDelegate DOMMutationEvent UITableCell UITabBarSelectionIndicatorView UIStatusBarStyleAnimationParameters _NSUnarchiveFromDataTransformer __NSCFInputStream CATiledLayer DNSServiceRefWrapper WhiteView UIMovieScrubber UIStatusBarRecordingAppItemView WebViewPrivate NSConcreteMapTable __NSCFSet UICompletionTableViewCell UIPanGestureVelocitySample

不揃いなプリセットたち

Mirrorscopeみたいな処理はiOS 4.0以降のAVCaptureナンチャラを使うんだけど、開発中に困惑したのがビデオ入力の画像解像度などを決めるプリセットの挙動。デバイスの差異を吸収するためにプリセットとして抽象化されてると勝手に思ってたら大間違い。なかなか一貫性がないので表にまとめました。初代iPhoneはiOS 4.0が対応していないので省いています。

capturesessionpreset

結論的には、どのデバイスでも同一の解像度が得られるプリセットはないし、解像度の大小関係も一意的に決められませんね。特に3Gが鬼門になっています。Mirrorscopeではがんばって全デバイスに対応してますけど、なんか理不尽な感じが拭えません(笑)。

mirroscope4a

それに、これまた抽象化の都合のいいところで、次のアップデートでは数値が変わっちゃうかもしれないですね。せめてプリセットに対して解像度を返してくれるメソッドがあるといいんですけどね(ないよね?>誰となく…)。

時間と空間の鏡【Mirrorscope 4.0】リリース

先日Mirrorscopeの新しいバージョン4.0がリリースされました。これまでの空間的な映像処理に加えて時間的な映像処理が大幅に加わっています。時間の遅れや時間の跳躍、時間による映像の空間構成などなど盛り沢山。以前からの処理も整理して、空間的な効果が6種類、時間的な効果を6種類のラインナップ、それぞれにいくつかのバリエーションがあります。iPhone 4ならフロント・カメラも使えるし、フラッシュライトも点灯可能。カメラ付きのiPod touchもOKですよ。

mirrorscope4

ただ、このような効果はスクリーン・キャプチャでは分かりにくいので、ぜひアプリケーションをダウンロードして試してください。4.0からは(実際にはその少し前から)アプリは無料になっています。すべての処理は自動的に切り替わりますが、アプリ内購入によってアップグレードすると手動で設定できるようになります。

ちなみに、バージョン番号から分かるように、このMirrorscopeは歴史(笑)の長いアプリケーションで、iPhone OS 1.0の時代から作り続けています。これは取りも直さずiPhoneにおけるカメラAPIの変遷を反映していて、iOS 4のAV Foundation (AVCapture関連)によって、ようやく自由度の高い処理が可能になった次第。このあたりの事情は「iPhone ARは第2章へ突入」あたりね。

ついでに、Mirrorscopeの前身はコンピュータ・ベースの映像インスタレーション「Time Machine!」です。コンピュータによる表現や手法がモバイル・デバイスに移行した時に、何が変わり何が変わらないのかは興味深くて、特にモバイルならではの可能性は追求するべきですよね。

処理能力としてはiPhoneは非力であるものの、それでも5年くらい前のコンピュータの水準くらいじゃないかな。だからMirrorscopeもTime Machine! 4.xと同程度の処理ができています。ただし、OpenGLとGPUを使いまくったバージョン5の表現には至ってないです。もっともテクスチャ・メモリが〜転送速度が〜と不満を言うようではダメですね。鍛錬いたします。

12/20〜21はIAMASでワークショップ

11月のIDASでのワークショップが好評であったことから、その続編として今回はIDASの学生・教員の20数人がIAMASにいらっしゃってMobilizingをワークショップを行ないます。前回はMobilizingの基礎習得と作品コンセプトまでで終わったので、今回はいよいよIAMASの学生数人とタグを組んでの実制作というわけです。

idas-mobilizing-workshop

IDAS/IAMAS Mobilizing Workshop
期間:2010年12月20日(月)〜12月21日(火)
会場:IAMAS 新校舎1F ギャラリー

ちなみに、今回のワークショップは一般の参加募集はありませんが、最終日12/21の17:00〜18:00は成果発表会がありますので、ご覧いただければ幸いです。

11/12〜14はソウルでワークショップ

11/12から11/14までの3日間に渡って韓国ソウルのIDAS (International Design school for Advanced Studies) でMobilizingのワークショップを行ないます。IDASは初めて訪問しますが、Hongik University(弘益大学校)のメディア・デザイン系大学院で、ソウル郊外にあるそうです。とある人がおっしゃるには雰囲気はIAMASに似てるとか。楽しみです。

idas-site

先月のVSMM2010でのワークショップやHongik大学でのレクチャーが、いずれも短時間だったものの、とても好評だったので今回の招聘に繋がったようです。このように動きが早いのが彼の国の原動力なんでしょうね。一方で何かとカオスだったりして、それはそれで楽しいのですが、此の国とは違う刺激があります。

iPhoneのファクトリー・イメージ 4.x

久々のファクトリー探訪、今回はiOS 4.1のファクトリー・イメージ。手順はこんな感じ。

  • ipswファイルを複製する。ipswファイルは~/Library/iTunes/iPhone Software Updatesにある(~はユーザ・フォルダのこと)。ipswファイルの名前はココを参照。例えば、iPhone 4のiOS 4.1用のipswファイルは「iPhone3,1_4.1_8B117_Restore.ipsw」
  • 複製したipswファイルの拡張子.ipswを.zipに変える。
  • zipファイルをダブル・クリックして解凍する。
  • 解凍したフォルダには複数のdmgファイルがあるが、ファイル・サイズが最も大きなものが目的とするルート・ファイルシステムのdmgファイル。iPhone 4用のiOS 4.1であれば「018-7063-114.dmg」。
  • DMG Decrypterを起動する。
  • ルート・ファイルシステムのdmgファイルをドラッグし、DMG Decryperの「Drag .Dmg Into Here」にドロップ。
  • DMG Decryperの「Input Firmware Key Here」にキーを入力する。キーはデバイスの画像をクリックすれば表示されるので、それを選択してドラッグ&ドロップする。あるいはココからも調べることができる。例えば、iPhone 4のiOS 4.1用のキーは「2ab6aea67470994ec3453791ac75f6497c081edd1991e560a61dd666ac4b73f43c781739」。
  • 「Click To Decryot」ボタンをクリックする。暗号解除されたdmgファイルが作成される。

dmg_decrypter

  • 暗号解除されたdmgファイルをダブル・クリックする。例えば、iPhone 4のiOS 4.1用のdmgファイルであれば「Baker8B117.N90OS」という仮想ディスクがマウントされる。
  • 仮想ディスクの中から拡張子がpngであるファイルを検索する。iPhone 4のiOS 4.1の場合、パッケージ内も検索すると5,120個見つかる。パッケージ内を検索しない場合は2,048個。検索にはEasyFindPathFinderといったユーティリティが便利。
  • 検索されたpngファイルを別のフォルダにコピーする。
  • コピーしたpngファイルをiPhonePNGiPhonePNGAppなどでデコードする。

結果的には4,979個のpngファイルが得られました。一部の@2xのpngファイルはエンコード方式が変わったのか、デコードに失敗しているみたいです(新しいデコーダってある?)。ともあれ、思いがけない画像があったりして、楽しいですよ。iOSや標準アプリケーションのGUIパーツは研究価値大だし、絵文字なども楽しいですね。

factory-images-4_s

Mobilizingはこんな雰囲気

先日のVSMM2010Mobilizingのワークショップを行なってきました。MobilizingはパリのFdMで開発が始まり、最近はIAMASも協力しているiOS用の新しいプログラミング言語です。僅か2時間半ほどのワークショップだったので、Mobilizingの紹介と体験くらいしかできなかったものの、それでもプログラミングが苦手と言う学生さんも変なアプリを作っていました。

mobilizing-workshop-vsmm

Mobilizingの特徴は、ずばり、ビギナー&アーティスト向けの超簡単言語ってことですね。どれくらい簡単かと言うとこんな感じ。

// IDの宣言
int ship = 0;

// 初期設定
void setup()
{
// 船を作る
ship = triangle(0,0, 30, 100, -30, 100);
}

// 処理更新
void update()
{
// 船を動かす
float x = AccX * 10.0 + getPositionX(ship);
float y = -AccY * 10.0 + getPositionY(ship);
setPosition(ship, x, y);

// 船の向きを変える
setRotation(ship, AccGravityY);

// タッチされるとその位置に船を動かす
if (TouchCount > 0)
setPosition(ship, TouchX1, TouchY1);
}

これだけ(主要コードは8行だけ)で、iPhoneを傾けると船に見立てた三角形がスルスルと動いて行きます。船先はちゃんと進行方向を向くし、画面からはみだした時はタッチで呼び戻せます。Objective-CとCocoa Touchに格闘している人からすれば、有り得ないくらいで、笑うしかないですね。Processingをさらに簡易にしたような感じかな。

mobilizing-accelerometer

MobilizingはC言語風のスクリプトを書いて、パーサ(インタプリタ)込みでビルドしてiOSアプリを作っちゃいます。つまり、通常のXCode+iOS SDKを使うので、シミュレータでもデバイスでも動作して、App Storeにも出すことができるという優れモノ。ただし、機能は限定されいて、洗練されていない部分もあります。まだベータ版の段階で鋭意改善中ってワケで、いずれオープソースのフリーウェアとしてリリースされる予定です。

今回はヨーロッパ圏外では初のワークショップで、特にアート系の人からは驚嘆かつ大好評をいただきました。より深く行なって欲しいとのオファーもいくつかあって、さっそく来月に3日間のワークショップを開催することに。こちらがビックリするくらい反応が早いですね〜

【追記】いくつかお問い合わせをいただきましたが、現時点では公開時期は決まっておりません。せめて、と言うことで、ワークショップでのスライド(PDF)を公開します。現在実装されている機能の概要(10ページ目)なども載っています。

mobilizing-vsmm-slides