f60k

https://hs.f60k.com/wiki/projects/f60kabout/F60K__About.html

google検索技まとめ

 プログラミング  Comments Off on google検索技まとめ
Jan 082013
 

google検索のまとめ。書籍のヒットが邪魔な場合。appleサイトからobjective-cの話題のPDFだけを探す場合。出先の天気の調べ方のメモ。

ネットではたまにこの手の記事は見かけるものの、気に留めた事がないのでいくつかメモ。モバイルならアプリが便利だが、PCだと目の前のブラウザに打ち込んだ方が速いし楽なのだ。

大事な事

()の中は記憶しておく事。

除外(-付ける)

書籍のヒットがじゃまでobjective-cの検索をする場合

  • objective-c -amazon

cocoa以外のネタで探したい

  • objective-c -cocoa

サイトのどこかに書いてあったとき(site:)

某サイト(うち)の中でどこかのdrawrectを含む記事を探す

  • site:http://blog.f60k.com drawrect

PDF探し(filetype:)

xcodeのチートシートのPDFを探す

  • filetype:PDF cheatsheet xcode

appleサイトからobj-cネタのpdfを探す

  • filetype:pdf site:apple.com objective-c

天気

渋谷の天気を調べる

  • 渋谷 天気

銀座駅の天気を調べる

  • 銀座駅 天気

乗り換え(から)

秋葉から銀座のルート探しの場合

  • 秋葉から銀座

輸入など海外購入

85ドルのアプリの日本円を知る

  • 85ドル

ヤマト配達(ヤマト)

ヤマトの荷物の配達状況を知る

  • ヤマト 303065653262

言語定義を知る(define:)

SEOとは何だったかを調べる

  • define:seo

*と””

使いこなす良い例がないため未定…

 Posted by at 18:01

UIViewControllerのtitleがtruncated処理されてしまう問題

 プログラミング  Comments Off on UIViewControllerのtitleがtruncated処理されてしまう問題
Jan 072013
 

UIViewControllerのtitleがtruncatedされてしまう場合の原因はviewcontrollerのviewの呼び出しのタイミング。initでself.viewを呼ぶとtitleのframeがおかしくなる。

UIViewControllerのtitleがtruncated処理されてしまう問題

単純なバグ対応のメモ。titleが「MyName」が「M…」という感じになってしまう場合がある。以下の場合に発生する。


- (id)init
{
//self.viewを呼ぶ
}

- (void)viewDidLoad
{
self.title = @"MyName";
//titleのframeがうまく設定されない(M...のようにtruncate処理されてしまう)
}

以下でも同じ。


- (id)init
{
//self.viewを呼ぶ
}

- (void)viewDidAppear
{
self.title = @"MyName";
//titleのframeがうまく設定されない(M...のようにtruncate処理されてしまう)
}

解決法(solution)

  • initではviewプロパティへアクセスしない
  • viewDidLoadのタイミングでviewのプロパティへアクセス

- (id)init
{
}

- (void)viewDidLoad
{
//self.viewを呼ぶ
}
- (void)viewDidAppear
{
self.title = @"MyName";
//titleは正しく表示
}

 Posted by at 02:13

ARC bridge のまとめ

 プログラミング  Comments Off on ARC bridge のまとめ
Jan 042013
 

Objective-CのARC環境での型変換。CoreFoundation(CF変数)との__bridgeでの型変換(キャスト)まとめ。__bridgeと__bridge_retainedと__bridge_transferの簡単な説明。

ARC

  • NS環境(Objective-C言語環境)ではARC環境と非ARC環境の2つが存在する
  • ARC環境/非ARC環境ではallocできる
  • ARC環境ではretainできない
  • ARC環境ではreleaseできない
  • CF環境(C言語環境)CoreFoundationではARC環境は存在しない
  • CF環境(C言語環境)CoreFoundationではプログラマによるretain/releaseが必要
  • CFの変数とARC環境のObjective-C変数との型変換(キャスト)ができる

キャスト

次の3つがある。

__bridge(NS→CF)

  • NS変数は自動解放(ARCなので)
  • CF変数は自動解放(NS変数が破棄された時点で)
NSString *name = @"Skytree";
CFStringRef nameRef = (__bridge CFStringRef)name;//0のまま、nameの破棄で自動解放

__bridge_retained(NS→CF)

  • NS変数は自動解放(ARCなので)
  • CF変数は+1されている
NSString *name = @"Skytree";
CFStringRef nameRef = (__bridge_retained CFStringRef)name;//nameRefは+1されている
//(つまりは?自分でnameRefの-1必要)

__bridge_transfer(CF→NS)

  • CF変数は-1されている
  • NS変数は自動解放(ARCなので)
CFStringRef nameRef = CFStringCreateMutableCopy(alloc, 0, CFSTR("Skytree"));
//CF変数はallocにより+1されているが...

NSString *name = (__bridge_transfer NSString*)nameRef;
//nameRefはここで-1されている(解放不要)

http://developer.apple.com/library/ios/#documentation/CoreFoundation/Conceptual/CFDesignConcepts/Articles/tollFreeBridgedTypes.html

 Posted by at 10:32

ipaのweb 配布 まとめ

 プログラミング  Comments Off on ipaのweb 配布 まとめ
Dec 202012
 

iOSアプリのオンラインでの配布方法まとめ。Webサーバにipaファイルをアップし、サーバ経由でipaをダウンロードしてインストール。JB不要。

iOSアプリ(ipaファイル)の配布方法まとめ

  1. USB経由でXcode(Organizer)から転送する方法(開発者向け/OFFLINE)
  2. USB経由でiTunesで転送する方法(テスター向け/OFFLINE)
  3. AppStoreからダウンロードする方法(商用)
  4. Enterprise版でWebサーバからダウンロードする方法(商用)
  5. AdHocプロファイルと共に自Webサーバからダウンロードする方法(テスター向け)

既出だがまとめ。

ADHoc(WEBサーバ経由での)配布

この5をテストでは利用したい。Testflight等もあるが今回は自前にこだわる。

AppName.ipaを作成

Archiveを行うまではいつもどおり。

アーカイブに関する問題

Distribute(配布)

以下の選択肢からAd-Hocを選択。中段。

スクリーンショット 2012-12-20 1.25.02

プロファイル(ProvisioningProfile)の選択

もちろん、AdHoc Distributionを選択。AdHocには配布対象のデバイス(○○さんのiPodやiPad等複数台可能)をProvisioningPortalで前もって登録しておく。

スクリーンショット 2012-12-20 1.25.30

ipaの保存ダイアログ

AppName.ipaという名前で保存する。保存時にEnterprise配布(Distribution)をONにする。

ApplicationURLに正確に「http://」から始まる文字列で「AppName.ipa」までフルパスでURLを記述する。

TitleはAppNameを入れておけば問題無し。

スクリーンショット 2012-12-20 1.27.09

AppName.ipaとAppName.plist

二ファイルのアイコンが生成され現れる。(plistにはApplicationURLが記載されている。)

これら二ファイルをApplicationURLのWebサーバの場所にFTPソフトやSCP等でアップロードする。

ProvisioningProfile(youradhocprofile.mobileprovision)もアップしておく。

配布方法

以下2つのURLをダウンロード者に教える。

  • http://mydomain.com/AppName.ipa
  • http://mydomain.com/youradhocprofile.mobileprovision

AppName.ipa

このipaは特長がある。

  • Webサーバから誰でもダウンロードできる。
  • 実行できるのは「AdHoc用provisioningProfile」に追記し、かつインストールされたデバイスからのみ。
 Posted by at 02:03
Dec 102012
 

Xcodeのコメントで使える特殊タグの使い方メモ。TODO FIXMEなどの表記と意味のまとめ。

コメントのタグ

 // TODO:

TODO項目を記述するタグ

// TODO: ここに読み込み機能を記述する

// FIXME:

修正項目を記述するタグ

// FIXME: ViewのRectサイズの修正が必要

// !!!:

重要な項目を記述するタグ

// !!!: ココを最優先で記述する

// ???:

不明点を記述するタグ

// ???: このメソッドの送受信のタイミングが不明

RunScriptを併用

ビルド時にコメントに該当するTODO FIXMEなどの表記があった場合に黄色いアイコンの!警告となる便利ShellScriptの紹介。

  1. Targetを選択
  2. Build Phasesタブを選択
  3. Add Build Phaseを押す
  4. RunScriptを選択
  5. エディタペインに以下のコードを書く

KEYWORDS="TODO|FIXME|\?\?\?:|\!\!\!:"
find ${SRCROOT} \( -name "*.h" -or -name "*.m" \) -print0 | \
xargs -0 egrep --with-filename --line-number --only-matching "($KEYWORDS).*\$" | \
perl -p -e "s/($KEYWORDS)/ warning: \$1/"

その他

#pragma mark

おなじみ、メソッドセクションの区切りに利用される。エディタのリストを整理できる。

#pragma mark – UIViewController

 

-Weverything

Clangにすべての警告を出させるフラグ。ビルド設定でTreat Warnings as ErrorsのONすると全てエラー扱い。

Pragmaの使い方はこちら

 

 

参考サイト

http://www.benzado.com/blog/post/329/make-xcode-nag-you-about-unfinished-todos

http://mobiledevelopertips.com/xcode/xcode-fixme-and-todo.html

http://deallocatedobjects.com/posts/show-todos-and-fixmes-as-warnings-in-xcode-4

http://nshipster.com/pragma/

 Posted by at 21:35

iOSのUIViewとCGRect関数色々図解まとめ

 プログラミング  Comments Off on iOSのUIViewとCGRect関数色々図解まとめ
Oct 092012
 

CGRectを使うときはframeやboundsを使う事となる。frameやboundsにはsizeとoriginがある。CGRectにはサイズや位置関係を判定・操作する便利な関数が元々備わっている。その関数機能の図解PDFの紹介。

iOSのUIViewのframeとboundsの関係、CGRect便利関数の図解チートシート(cheatsheet)のPDF。A4で印刷するとちょうどいいです。

ダウンロード(PDFファイル)は以下。

iOS CGRect図解PDF

今回は前記事(iPhoneのScreenやNavigationBarやTabbarやToolBarの高さ)の第二弾です。

いずれも無償でのPDFダウンロード及び、コピー印刷改変は自由です。

参考サイト

http://soulwithmobiletechnology.blogspot.jp/2011/08/how-to-divide-cgrect-using-cgrectdivide.html

 Posted by at 19:03
Oct 072012
 

UIViewと描画に関する一連のまとめ。setNeedsDisplayとdrawRectの関係、CALayer(CoreLayer)とdrawInContextの関係、setNeedsLayoutとlayoutSublayersの利用法。動作の流れの図解。

UIViewの描画の図解

UIViewの描画メソッドのまとめ記事である前回記事の図解による再まとめである。

UIViewControllerにUIViewが一つホストされている状態。そしてさらにLayerが入れ子になっている状態。以下は図中のUIViewとCALayer(subviews/sublayers)構造の概要。

  • controller(UIViewController)
    • view(self.viewであり、UIViewのインスタンス)
      • view(self.subviewsの中の一個、ユーザが貼付けた)
      • layer(self.layerであり、UIViewには必ず一個は存在する、システムが用意したlayer)
        • layer(ユーザが貼付けたレイヤー)
        • layer(ユーザが貼付けたレイヤー)
        • layer(ユーザが貼付けたレイヤー)

基本のセットはレイヤーもビューも同じである。

  • UIViewには描画を行うメソッドと再配置を行うメソッドがある。
  • CALayerには描画を行うメソッドと再配置を行うメソッドがある。
一般的に海外の開発者情報を集約していくと出来る限り再描画をしない事がパフォーマンス向上につながるという結論。描画の回数を減らし、描画範囲を減らしというイメージ。再配置と再描画は異なる。

時系列で追う描画メソッドの流れ

drawRectは描画メソッドであり、UIViewの再描画を行う。

通常UIView全体を再描画する為に使うが、描画高速化を睨んだ場合は、子のlayerやviewに細分化し、サイズ変更するオブジェクト(表示要素)を小さい単位で管理し、必要最低限のFrameサイズ変更、UIViewやCALayerの新たな追加や削除、CALayer内での再描画になるようにするのが望ましい。

つまりUIViewControllerが管理するUIView(self.viewに該当)のdrawRectで単一のviewで単一のlayerで構成されている状態で再描画を行うと画面全体が常に描画となる。背景が一切変化しないならUIView(self.view)に描画し、位置が変更出来るものはsublayerとして描画しておき、位置変更はlayerの再配置で行うという方法。

例えば、PCのDesktopの背景はUIView(self.view)のdrawRectで起動時に一度だけ描画(setNeedsDisplay)をする。DesktopのアイコンはサブレイヤーのCALayer(layer)で管理(addSublayer:)をする。layerのdrawInContextでアイコンの絵面を描画(setNeedsDisplay)する。位置変更はlayoutSublayersで行うようにしておく。アイコンのサムネが変化した時にはUIView(self.view)のdrawRectを呼ぶのではなく、そのサブレイヤー(self.view.sublayersの中の特定した一つ)のレイヤーの再描画メソッド(setNeedsDisplay)を呼ぶという流れ。

 

 

 Posted by at 07:17

Away3D Starling framework メモ

 プログラミング  Comments Off on Away3D Starling framework メモ
Sep 202012
 

Flash技術の将来は…?AdobeのFlash戦略はゲーム分野投資と宣言していることからも今後の道は3Dとみられる。Stage3Dをベースにしたフレームワークやライブラリの活用術がメインとなる。

久々のFlashの話題。3D表現はAway3D4.0を使えば今や簡単かつ実用的な範囲となったようだ。Away3Dロシア製のalternativa3Dも何年も昔からあるがGPU対応をしバグも落ち着いたバージョンがリリースできるレベルに来たのは最近。 Flash5の頃に3DエンジンをAS2でフルスクラッチで書いた事があるがワイヤーフレームで精一杯だった。CPUも遅い時代のため2D3D(isometric)手法に実装変更した覚えがある。技術の栄枯盛衰は凄まじい。PV3Dも今や古い技術となった今、PV3DでSpeed面に不満があった人にはAway3Dは十分お勧め出来る。

今話題のネタで簡単なサンプルを用意してみた。80000ポリゴンでも60fpsが出ている。

この程度なら1日もあればモデリングからプログラムまで全て出来る。AIで誘導ミサイルを実装したりパーティクル表現や音を数種載せるレベルでゲーム性を持たせた(本当に)割り切ったモックアップなら数日で可能であると感じた。

Starling frameworkはStage3Dベースの2D表現用のフレームワーク。高速描画で融合が簡単。メニューやステータスはStarlingでカメラワークの必要な3DシーンはAway3Dという感じになるようだ。

ゲーム戦略そのものをみると、国産ゲームと海外ゲーム(洋ゲー)では全くスタンスや背景が異なる。20世紀、DOSからWin3.1とPCゲームでは洋ゲーといえばパソゲーを指し、パソゲーと言えば2000年頃はJane’sやTomClancyのFPSや戦略系シミュが多く、Micromouseという会社が販売していた記憶がある。国産パソゲーというと思いつくのは三国志や大戦略、A列車位。一方その頃日本は独自のプラットフォームのDSやPSという上で主に子供向けに配慮したキャラ系のボードゲームや横スクロールアクションというイメージ。2000年以降はネットの力でオンライン機能がオプションから当たり前になったのとPCだけでなくマルチプラットフォームでリリースするタイトルが増えたのが大きな違いでそれぞれの主力のラインは変わっていない。グラボの性能も上がったおかげでリアルな殺伐としたオープンワールド系に進化したのが洋ゲーの世界。国産は依然SFやキャラものファンタジー世界が主流である。洋ゲーはとにかくDLCも数が多く、次々と新しい技術を取り入れてカスタムしたシリーズゲームタイトルも多い。オプションには様々なアイテムや様々なワールド追加などが含まれる。一方の国産は風営法に抵触するスレスレを主にモバイル側からやってきただけあり、PC側は手薄である。彼らはパチンコや花札、トランプを独自に改良したかのような世界が主流。最新技術を活用し生み出すというより、今ある手元の技術を何年もかけてとことん随の随までなめつくすイメージ。エログロギャンブル系同様、安い元手で、ユーザを煽り場を飽きさせないかというメンタル面が重視される。こちらのオプションはリトライの権利であるなど厳密にはマネーではないがマネーを買うというイメージに近い。かなり海外とは求める技術や手法には隔たりを感じる。

 Posted by at 23:29

DUNS Number 文字化け

 プログラミング  Comments Off on DUNS Number 文字化け
Aug 222012
 

DUNS Number登録申請をすると、しっかり文字化けメールが送られてくる。このメールはBASE64とHTMLとISO-2022-JPの混合タイプ。PDFファイルにDUNS Numberが含まれた状態で復元可能。

メール内容復元

お役所らしい旧世代のもので送信しているのだろうか?こちらのApple Mailが悪いのかは不明である。DUNS Numberの修復は簡単。この文字化けはBASE64にエンコードされている。以下にメールサンプルの2箇所を色分け(緑とオレンジ)した。デコードをするとファイルにDUNS Numberが記述されたPDFファイルとして修復される。赤の箇所はオプション。

緑のBASE64デコード

こちらはJPGファイルになる。(不要・単なるWEBのバナーJPG)

  1. 以下のリンクを開く
  2. メールの緑の箇所をコピペ
  3. decodeボタン
  4. ファイル名をsample.jpgと書き換える

http://opinionatedgeek.com/dotnet/tools/Base64Decode/

オレンジのBASE64デコード

こちらはPDFファイル(本命・DUNS Numberが書かれているPDF)

  1. 以下のリンクを開く
  2. メールのオレンジの箇所をコピペ
  3. decodeボタン
  4. ファイル名をsample.pdfと書き換える

http://opinionatedgeek.com/dotnet/tools/Base64Decode/

赤の箇所のデコード

この箇所にはPDFファイルの本来の名前がエンコードされている。ファイル名まで知りたい場合は復元。

  1. 以下のリンクを開く
  2. メールの赤の箇所をコピペ(変換前文字列欄)
  3. decode_mime(変換前文字種)
  4. sjis(変換後文字種)
  5. 変換実行ボタン

http://seo.atompro.net/webtoolfree_strcnva_.html

メールサンプル

–=_mixed 3626764349257B21_=
Content-Type: multipart/related; boundary=”=_related 3667628434439257B21_=”

–=_related 3667628434439257B21_=
Content-Type: multipart/alternative; boundary=”=_alternative 3667628434439257B21_=”

–=_alternative 366768434349257B21_=
Content-Type: text/plain; charset=”ISO-2022-JP”

<途中略>

<br><font size=2 face=”sans-serif”>この度はDUNSナンバーをお申し込み頂き誠にありがとうございました。</font>
<br>
<br><font size=2 face=”sans-serif”>御社のDUNSナンバーを添付にて送信いたしますので</font>
<br><font size=2 face=”sans-serif”>ご査収のほどよろしくお願い申し上げます。</font>

<途中略>

–=_alternative 366743549257B21_=–
–=_related 36676445257B21_=
Content-Type: image/jpeg
Content-ID: <_2_034810580348084036456449257B21>
Content-Transfer-Encoding: base64

7T1Snp3I42pUlpVsbjLiyPFcxdx2nMluUOyzBeATdF2LN6/wC6n3I6
49E8jRq6Ww2KyUFjFm5LJka9qbhKJWTjvWsxEIdgAOHhm3Ljwp/Wf+bGg/u+rnJs8wnvonvppsEW
Dq52yt8P2SOGWwrh5l0ptvoloz+w+9bL7at8I5XzhPzRfil5Y/ql1zsMCbOss/4gsSJORkbIVkF0
GEjEKbO0UYjCCiOYXRN28cM9N3+6q62+uijfXRNSRcKtW0eeHf6mvsc9LvZz/tl/t1kdX3f6ws6o
gyI1Tdxlv6YU4v409L9OrQdtJvmylhP+59RuibfaZ7RfcTrD13Grv6qqYCuMHBhJ6hwla/XAbJrc
aeCz82aTnJCYFHKH9skkqzA79Hh5X9oQVhkoVK

–=_related 628434439257B21_=–
–=_mixed 628434439257B21_=
Content-Type: application/octet-stream; name=”=?ISO-2022-JP?B?jvWsxEIdgAOHh+9bL7at8I5m=?=”
Content-Disposition: attachment; filename=”=?ISO-2022-JP?B?jvWsxEId0ptvolozgAOHhm=?=
Content-Transfer-Encoding: base64

JVBEs5+WPLJNkIwMDZCQzg4Mi0xLMTYNCiUlRU9GDQo=7T1Snp3I42pUlpVsbjLiyPFcxdx2nMluUOyzBeATdF2LN6/wC6n3I649E8jRq6Ww2KyUFjFm5LJka9qbhKJWTjvWsxEIdgAOHhm3Ljwp/Wf+bGg/u+rnJs8wnvonvppsEW

Dq52yt8P2SOGWwrh5l0ptvoloz+w+9bL7at8I5XzhPzRfil5Y/ql1zsMCbOss/4gsSJORkbIVkF0
GEjEKbO0UYjCCiOYXRN28cM9N3+6q62+uijfXRNSRcKtW0eeHf6mvsc9LvZz/tl/t1kdX3f

–=_mixed 6456449257B21_=–

 Posted by at 19:46

SafariからMountain Lionに通知

 プログラミング  Comments Off on SafariからMountain Lionに通知
Aug 092012
 

Mountain Lionに搭載された通知機能をJavascript(JQuery)で活用する。Webサイト(HTML)からOSに通知する方法。トップシェアのChromeも対応。もちろんIEは対応していない。

Objective-Cでの話題は一旦置いておいて、JQueryでの対応方法。使いどころはアイデア次第だが、非同期で更新する仕組みやリロードする仕組みと連動すればデータ受信をもとに通知イベントを発生させる使い方もできる。大方、それなりに重いWEBアプリやクラウド経由の処理終了をお知らせするやタイムラグのあるネットワーク越しの相手から受信したデータを表示したタイミングでお知らせするのが自然な使い方ではないか。

JQueryの準備

JQueryファイルを入手しフォルダに格納。HTMLに記載。(全文は後半に掲載。)

<script src="js/libs/jquery-1.7.2.min.js"></script>
<script src="js/jquery.notify.js"></script>

イベントの準備

何はともあれボタンを押したら通知が起こるようにする。ここではaタグで用意。

<section>
<p><a href="#" class="button" id="call">Call</a></p>
</section>

クリック処理と通知発生

id=”call”のタグをクリックした時に通知が始まる。その処理は3段階。

  1. $.notifications.requestPermission ←通知許可を行う
  2. $.notifications.newNotification ← 通知を作成し通知オブジェクトを返す
  3. show() ← 通知オブジェクトを表示する(OSに通知)
<script type="text/javascript">

	$(document).ready(function() {

		$('#call').on('click', function() {

			$.notifications.requestPermission(function(){

				var title = $('#contents>h1').html();
				var content = $('#contents>p').html();
				var notify = $.notifications.newNotification('', title, content);

				if (notify!==false) {

					notify.show();

				};
			});
			return false;
		});
	});

	</script>



ソース全文

<!DOCTYPE HTML>
<html lang="en-US">
<head>
	<meta charset="UTF-8">
	<title></title>

</head>
<body>
	<section>
		<p><a href="#" class="button" id="call">Call</a></p>
	</section>
	<section id="contents">
		<h1>Blog Updated</h1>
		<p>This is new post.</p>
	</section>

	<script src="js/libs/jquery-1.7.2.min.js"></script>
	<script src="js/jquery.notify.js"></script>
	<script type="text/javascript">

	$(document).ready(function() {

		$('#call').on('click', function() {

			$.notifications.requestPermission(function(){

				var title = $('#contents>h1').html();
				var content = $('#contents>p').html();
				var notify = $.notifications.newNotification('', title, content);

				if (notify!==false) {

					notify.show();

				};
			});
			return false;
		});
	});

	</script>
</body>
</html>
 Posted by at 20:53