サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
Pixel 9
blog.9wick.com
objective-cでよく出てくる”@”から始まるコマンドってどう言うのがあるのかなと思って調べて見ました。 こういう”@”から始まるコマンドはコンパイラディレクティブというらしいです。 宣言/定義関係 意味
ランダムに色を作るという時にふと思ったのでメモっちゃいます。 普通、ランダムに色を作るというと次のようなコードをかくと思います。 [objc] float rand1,rand2, rand3; //乱数など UIColor color = [UIColor colorWithRed:rand1 green:rand2 blue:rand3 alpha:1]; [/objc] しかし、これだと綺麗な色も汚い色も全部出てきてしまってちょっと困ることもあります。 綺麗なな色の作り方 この問題は、RGB方式の色ではなく、HSB方式の色を考えてあげると簡単に解決します。 [objc] float rand; UIColor color = [UIColor colorWithHue:rand saturation:1 brightness:1 alpha:1]; [/objc] HSB方式では色の
昨日に引き続きNimbusKitをいじってます。 今日はNimbusKitでのデバッグです。 NimbusKitのデバッグは 導入が簡単 PCいらずでアプリでバッグが出来る というのが特徴みたいです。 NimbusKitのデバッグは組み込みが簡単 たったの2行でとっても簡単に組み込めるようです。 [objc] - (BOOL) application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { [NIOverview applicationDidFinishLaunching]; self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; CatalogTabl
GoogleMapがiPhoneでリリースされて、それにはNimbusKitが使われてるらしい! NimbusKitではCSSでViewの外見が設定できるらしい! って噂を聞いたので、噂のNimbusのサンプルをいじってみました NimbusKitでできること サンプルには三種類のプロジェクトが入ってて、その中はサンプルがいっぱい入ってて・・・という普通の構成でした。 機能としては大きく分けると2つ、「みんなが使ってたもののコードが簡単にかけるようになったよ」というものと「Nimbusだからこそこれができるよ!」というものに勝手に分けました。 まず、「みんなが使ってたもののコードが簡単にかけるようになったよ」は、見ててもあんまし面白く無いので省略。 ちょっとだけ書くと、UILabelの拡張やらNavigationBarの色変更、ネットワーク経由の画像表示などです。 それぞれ個人で工夫してク
UIWebViewを長押しすると下からニュっとアクションシートが出てくるわけですが、これの中身を変えたくなりました。 ネット上で探したところ・・・・これとか解決策っぽいのはあったんですが、なんかもうやること多いし、UIWindowのサブクラスを作らなきゃいけないし、英語だし、なんか嫌だったので、もっと簡単な方法でハックしてみました。 ちょっと精度が悪かったり、反応しない時があったりとポンコツ気味ですが、簡易的に作るならこれぐらいがいいなーって感じです。 やり方 大雑把な手順としては 本来のリンク長押しの機能をオフにする jsでリンク長押しを検知してobj-cの方に教えてあげる 普通にアクションシートを出してあげる という3段階構成です。 「本来のリンク長押しの機能をオフにする」と「jsでリンク長押しを検知してobj-cの方に教えてあげる」はどっちもjsなので、 具体的にはとあるjsを読み込
curl_multiというのを見つけたので使ってみました. 外部APIを使う人にとっては必須かもしれません. curl_multiとは そのまんま,curlを複数並列に走らせるための関数です. 直列にすると待機時間が長いので,並列にリクエストを投げることで高速化が見込めます. php5から使えるようです. 基本的な使い方 使い方としては次の通り. それぞれのリクエスト用のcurlを作成する curl_multiを一つ作り,そこにそれぞれのリクエスト用のcurlをセットする 実行!&リクエスト終了待ち それぞれのリクエスト用curl,curl_multiの両方をcloseする php関数リファレンスよりサンプルコード [php] <?php // cURL リソースを作成します $ch1 = curl_init(); $ch2 = curl_init(); // URL およびその他適切なオ
fuelphpのfieldsetはすごく便利です。 formの出力とバリデーションが一体となって、似たようなコードを何回も欠かずに済みますし、文言の修正等も一箇所ですむようになります。 でも、webで検索していろいろ見ると、皆さんview画面が自由にカスタマイズできないから使えないと言ってバッサリ切ってしまっています。 すごくもったいないです。 かという自分も、view画面はきっちりと自分で作りたい派(というより仕事内容的に作らざるを得ない派)なので、fieldsetは使えないでいました。 しかし、個人サイトを作るときにfieldsetを使って以来、使えないのがストレスになってきたので、拡張して使えるようにしてみました! これでストレス無く、制作が簡単なfieldsetを使うことができます どう拡張したのか coreをいじるのは嫌だったので、継承したクラスたちをpackageでまとめるとい
昔、fuelphpのoil自動生成でphpdocを自動で書くようにするという記事を書きましたが、これでもだんだん不満に思ってきて、より便利な物を作りました。 補完ができるのとできないのでは開発効率も違いますし、何よりストレスがかからなくなるので重要です。 前作ったものの不満点 ちょっとだけ作った経緯を書いておきます。 昔作ったものは自分でもいいなと思って作ったわけですが、 既存のソースを変更する必要がある modelを作成するときにしか使えない と、案外不満点がありました。 しかし、FuelPHP、コード補完用コード生成コードの記事を見て、taskで作ればいいのかと思い、新たに作成しました。 補完するもの 作成したtaskは単純にmodelのクラス宣言の直前にphpdocをつけるだけのものです。 モデルフォルダのファイル一覧を撮ってきて、それぞれのファイルにphpdocを強制的につけます。
久しぶりのiPhone関係記事です。 アプリを作っていると,自分のところでは再現しないものの リリースしていろんな人に使ってもらうとバグだらけのクラッシュだらけというのはよくあります. しかし,ユーザーに「再現できないからバグ修正しません」というわけにもいかず, どうやって再現するのかを詳しくユーザーに聞きたいけど,AppSoteのレビュー欄は返信できないしと結構問題があります. そんな悩みを抱えていた今から3か月ほど前に,友人からcrittercismというのを教えてもらって,すごい便利なので紹介します! どんなシステムか crittercismはすごい単純で,クラッシュして落ちた時のスタックトレースを記録し,統計を取ってくれるシステムです. 統計を取ってくれるので,どこで落ちた人が何人というのが分かり,より重要なバグから順番に直すことができます. また,ただたんにクラッシュしたスタック
大量のデータを処理するとき、メモリをちょっとだけ気にしてデータベスからIDリストを取ってくる→それぞれのIDでデータを再度取得し、計算するといったことをよくやります。 fuelphpでもこれをやろう!と思ったのですが、ormを使っているとなかなかうまくいきませんでした。 一応出した自分的結論がこれ [php] $ids = Model_Sample::query()->select(‘id’) ->get_query() ->execute() ->as_array(null,’t0_c0′); [/php] これをやると、 [plain] array ( 0 => ’1′, 1 => ’3′, 2 => ’2′, ) [/plain] こういう形でデータが帰ってきます。 t0_c0はfuelphpが勝手につけるカラムの名前です。 一番最初のカラムにはこの名前が付けられるようなので、書きま
すごい久しぶりにブログ書きます。 fuelphpで細かい案件をいっぱいこなしてるんですが、どうしても実装するのがめんどくさいものの一つに認証がありました。 特に、管理画面でIDとPASSWORDが人セットでいい時などfuelphpのデフォルトでついているsimpleAuthだとDB用意して、コマンドラインからユーザー作ってとものすごいめんどくさいです。 そこで、すごいシンプルにID,PASSWORDをarrayにしてconfigに突っ込めばOKな認証パッケージ作りました!! いつもどおりguthubで公開しているので、 https://github.com/9wick/fuelphp-easypass からDLしてpackagesに配置 config/easypass.phpをapp/configにコピー コピーしたeasypass.phpを編集してID,PASSWORDの設定をする co
fuelphpの自作パッケージ二個目です。 webを作るときに個人的には基本だと思うエラーメール機能がfuelphpではデフォルトで入っていないので、パッケージとして作ってみました。 packcage名に少し悩んだんですが、error-mailってなると複数単語になるのでalertにしました。 ・・・複数単語の時namespaceとかフォルダ階層関連であまりうまく行かない気がするので。 ソースはGitHubで公開してます https://github.com/9wick/fuelphp-alert つかいかた 前回とほとんど同じですが、一応使い方を。 DLしたalertフォルダごとfuel/packagesフォルダに入れる fuel/packages/alert/config/alert.phpをfuel/app/config/alert.phpにコピー fuel/app/config/a
最近fuelphpでパッケージ化にはまっています。 最初に作ったパッケージがこれ。 https://github.com/9wick/fuelphp-background 結構マニアックかなと思いますが、バックグラウンドでプロセスを走らせるパッケージです。 メルマガもどきを作らなきゃいけなくなって、調べたら1通/sec以上の速度で送るのはスパム扱いされるからやめたほうがいいと。 でもタイムアウトは60秒だし、100通ぐらいは送りたいし・・・・ということで裏で動かすことにしました。 fuelphpにはtaskというものがちょうどあるので、task限定で裏でプロセスを起動させるようにしました。 つかいかた 一般的なpackageと同じだと思いますが、一応使い方を。 DLしたbackgroundフォルダごとfuel/packagesフォルダに入れる fuel/packages/backgroun
いつの間にかiTunesConnectのカスタマーレビューのところにRSS機能がついていました!! iTunesConnectログイン→Manage Your Applications→アプリ選択→Customer Reviewsの右側のボタンでRSS配信ができます これはもう読むしか無い!と思ったらちょっと使いづらいみたいなので少し工夫してみました RSSが国ごとになっている まずこのRSS、URLが http://itunes.apple.com/jp/rss/customerreviews/id=462799850/sortBy=mostRecent/xml のようになっています。 このとき、id=462799850がアプリ固有のIDなのでここはアプリごとに変えなければいけません。 これはいいのですが、なんと途中にjpってあって、このRSS、国ごとなんです! 国ごとのRSSなんて登録
fuelphpのoilでのモデル自動生成が便利なんですが、またまたちょっとだけ不満があって、 自動生成なのにphpdocを書いてくれない・・・・ それによって自動補完もされないので、使いづらい。 って思いが積もったので、oilの中身を改造してphpdocを書くようにしてみました。 oilのなかみはときどきviewをつかったり、時々model側(でいいのかな?)に直書きしたりと読むのが大変なコードでしたが、多分ここだけ追加すれば大丈夫だろうというところをメモっときます。 まず、packages/oli/classes/generate.php これはmodel関数のみ変更した [php] public static function model($args, $build = true) { $singular = ¥Inflector::singularize(¥Str::lower(ar
PHPでWebサービスを作るときの定番の機能として、ユーザー認証があります。 FuelPHPではこのユーザー認証に便利なsimpleAuthというものがついています。 これはDBにUser情報を保存して、Sessionなどを使いアクセス制限を行うものです。 デフォルトでプログラムに組み込まれているので非常に使いやすく、便利なのですが、いくつか欠点もあります。 それが プロパティの追加が難しい DBに入っているUser情報をOrm¥Modelを通して使えない というものです。 simpleAuthではデフォルトで付いているプロパティはemailぐらいで、ほんとにユーザーの認証ぐらいにしか使えません。ですが、ユーザー登録と同時に様々な情報を登録するのはよく要望にあがります。 いちおうSimpleAuthでも追加できるようになっているのですが、 デフォルトではDBのカラムにprofile_fie
fuelphpのCRUDテンプレート デフォルトで生成されるCRUDが気に入らなかったので、自分で作ってみた。 自動生成の不満点は クラスが継承じゃないので全体を変えたいときに不便 なぜかViewの方ではテンプレートを組み込む形でやっているので、好きなテンプレートエンジンへの移行がしにくいこと 確認画面がない createとeditが別々にある indexでページャーが居ない モデルにプロパティをひとつ追加した時の変更が大変 というわけでつくりました。 controller/crud.php [php] <?php class Controller_Crud extends Controller { protected $_modelClassName = NULL; protected $_inputProperties = array(); protected $_baseUri =
CMSを作るときに、fuelphpとnicEditという組み合わせがMITライセンスでお気に入りなんですが、 nicEditの画像アップロードが外部サーバーのため、ちょっとプライベートな用途には使いにくいというのがあります。 そこで、どうせMITライセンスなんだし、改造しちゃえ!ってことできちんと自分のサーバーに画像をアップロードするようにしてみました。 nicEdit側の修正 画像のファイル位置を修正 [plain] iconsPath : ‘/assets/img/nicEditorIcons.gif’, [/plain] var nicUploadButton=…の行を展開する nicURI: のところをファイルをアップロードするURLに変更 アップロード時に表示される画像を削除 [js] this.myStatus.setContent(‘<img src="http://file
fuelphpが最近のお気に入りフレームワークなのですが、一つ不満点がありました。 fuelphpではview側で使うクラスがあり、htmlを書くのを補佐してくれるのですが、 引数が連想配列や配列を求めることが多く、smartyではその部分がネックとなりすごい扱いづらいものとなってました。 補助してくれるクラスがあるのに使わないでhtmlを直書き・・・・ということもしばしば。 しかし、smarty3になって、じつは連想配列がすごい簡単に作れるようになってた!! のでちょっとメモがてら紹介しちゃいます。 やり方も簡単で [ と ] を使うだけです。 [plain] [ "a", "b", "c"] [/plain] で [php] array("a","b","c") [/php] の意味、 [plain] [ "a" => "b", "c" => "d"] [/plain] で [php]
CoreDataの恐ろしい一面を垣間見てしまったので、これはブログに書かねば!と意気込んでます。 今までCoreDataといえば 簡単・お手軽 データ保護など、安全にデータを保存してくれている メモリ関係も自動でやってくれる という認識でいました。 これらの利点があるから使っていました。 ・・・・ですが、CoreDataを使えば使うほどだんだんこれらの利点に疑問が出てきました。 マルチスレッドになると一気に使いにくくなる そもそもCoreDataの危険性に気づき始めた原因がこれなんですが、 CoreDataはマルチスレッドで扱おうとすると一気に使いにくくなります。 使いにくくなるというのはコードを書く量が増えるという意味ではなく、考慮しなければならないことが多くなるという意味です。 どのスレッドがどのタイミングでデータを書き込み、それをどのスレッドがどういう形で情報を受け取るのか、などです
fuelphpのfieldsetはすごく便利です。 formの出力とバリデーションが一体となって、似たようなコードを何回も欠かずに済みますし、文言の修正等も一箇所ですむようになります。 でも、webで検索していろいろ見ると、皆さんview画面が自由にカスタマイズできないから使えないと言ってバッサリ切ってしまっています。 すごくもったいないです。 かという自分も、view画面はきっちりと自分で作りたい派(というより仕事内容的に作らざるを得ない派)なので、fieldsetは使えないでいました。 しかし、個人サイトを作るときにfieldsetを使って以来、使えないのがストレスになってきたので、拡張して使えるようにしてみました! これでストレス無く、制作が簡単なfieldsetを使うことができます Continue reading »
データベースを活用するとき、よく論理削除を使います。 論理削除とは削除時は削除フラグを立てるだけで、実際には削除しないでデータを残しておくというものです。 実際には削除しない事で、トラブルが起きた時にきちんと原因を探る事ができるようになります。 そんな論理削除をfuelphpで使ってみました データベース側の変更 deletedというカラムをtiny int(1)で作成しました。 基本的にクエリはwhereでdeletedを指定することになるので、きちんとindexを貼っておくといいかもしれません。 モデルの変更 モデルでは、次の3つのメソッドをオーバーライドしました。 [php] /** * * @param type $options * @return OrmQuery */ public static function query($options = array()) { $qu
fuelphpでファイルをアップロードするとき、なかなか参考資料がなかったのでメモ。 基本的にはリファレンスを解読すれば一つ一つの関数について書いてあるので理解は出来るのですが、 サンプルがなかなか無く、もっと現物的なものが欲しかったので。 結構fuelphpが気に入ったので、記事はしばらくfuelphp関連になるかもしれません。 設定ファイル まず、fuel/core/config/upload.phpをfuel/app/configフォルダにコピー それぞれのプロジェクトによってupload.phpを書き換える 自分が今回した設定は次の通り。変えたのはファイル名が被らないようにsuffixを追加したのと、upload場所をappやcoreフォルダと並べたuploadフォルダにしたこと。ちなみにuploadフォルダは自動で作られる設定にしたので自分では作っていない。 return arr
UIViewやUIImageなどを扱う時、よくCGRectやCGSizeをLogに書きだしたりしたくなることがあります。 そんなとき、毎回 [objc] NSLog(@"rect : %f %f %f %f",rect.origin.x,rect.origin.y,rect.size.width,rect.size.height); [/objc] と書くのはかなり手間です。 文字が長いので、書くだけで気合いを使い果たしてしまいそうです。 マクロで定義しちゃえば簡単に書けるようにはなりますが、あまりマクロに詳しくない人もいると思います。 そこで、Appleが準備しているほうのマクロを紹介しようと思います ■NSStringFromXXXマクロ NSStringにはNSStringFromXXXといったタイプのマクロがあります。 これらを使うと、 [objc] NSLog(@"rect :
つまり、ライブラリを#importするまではアプリの容量が変わらず、ライブラリ内のクラスを実際に使って初めてリンクされるようです。 最近のリンカは賢いようですね! どのクラスまでリンクされるか つぎに、ライブラリ内のどのクラスまでリンクされるのかな〜と試してみました。 クラスAがクラスBを使っていれば、クラスAをリンクした時点でクラスBもリンクされました。 当たり前ですね。 しかし、逆に言うと全く関係のないクラスCはリンクされなかったということなので、 ライブラリ内でお互いの依存関係が複雑だと、余分なクラスをロードしてしまう可能性が高くなるということです。 できるだけ系統立ててライブラリを作るのがいいのかなと思います。 曲者のカテゴリ おぉ 実はリンカ賢いじゃん!と意気揚々としていたら、落とし穴が少しだけありました。 その落とし穴は「カテゴリ」。 スタティックライブラリを作るとき、カテゴリ
UISliderを独自画像で使ってみたのですが、なぜかネット上で画像の大きさについての情報がなかったのでメモっておきます。 ■画像の設定方法 setMinimumValueImage: setMaximumValueImage: setMinimumTrackImage:forState: setMaximunTrackImage:forState: setThumbImage:forState: の5つを使って設定します。 それぞれの画像の位置はこんな感じです ■画像の大きさ いろいろ試してみたところいくつかわかりました。 ThumbImage(中央の動かす部分)のサイズは任意で、どれだけ大きくてもいい MaximunTrackImage、MinimumTrackImageは太さ固定(おそらく10px) 10pxより太い場合はつぶれて表示される MaximunTrackImage、Min
cocos2dでCCSpriteの画像を切り替えたい!って時はよくあります。 簡単&基本なことですが、日本語の情報ではなかったのでメモ。 これを調べるのに3日もかかってしまった・・・・。 方法その1:CCAnimateを使う 一連の動作をさせたい時や、ループした画像切り替え(歩く動作など)をしたいときにおすすめです。 流れとしては、 画像の名前が入った配列を作る 画像の名前からテクスチャを作り、テクスチャの配列を作る テクスチャの配列を元にCCAnimateを作る CCAnimateを元にCCAnimationを作る(場合によってはここでループ用のanimationを作る) CCAnimationを実行 CCAnimationとCCAnimateが出てきてすごい紛らわしいですね。 違いがいまいちわかってないです・・・。 下に1.png~5.pngをループさせる時のコードを書いておきます。
Xcodeでたま〜に補完がうまく機能しなくなることがあります。 その時この方法を使えば一発で治ります。 対処法は簡単です オーガナイザを開く プロジェクトタブを選択する うまく保管されないプロジェクトを選ぶ Derived Dataを削除する これで、少し待てば補完機能がきちんと機能するようになります なぜこれで直るのか xcodeでは(というかほとんどの補完機能付きエディタでは?)すばやく補完候補を出すために indexを作っています。 補完機能がうまく動かないときはこのindexが壊れているようです。 なので、オーガナイザ経由でDerived Dataの中に含まれるindexのキャッシュを削除することで、 新しくindexを作り直すので補完が効くようになります。 補完が効かなくなると作業効率がガタ落ちすると思うので、ぜひ利用して快適な開発時間を過ごしてください
xcode4になって、新しくworkspaceという機能がありました。 いままで全く感心持ってなかったんですが、自作ライブラリをそろそろ作ろうかと思ったときに便利そうだったので使ってみました。 workspaceは 複数のプロジェクトを一つのwindowで開ける そのビルド結果をworkspace内で参照し合える 他のプロジェクトを参照した場合、ビルド時にそのプロジェクトもビルドし直してくれる という機能があります。 これを利用することで、プロジェクトAでライブラリをつくり、プロジェクトBでそのライブラリを使用するということができるようになります。 プロジェクトはそのまま(設定をいじることなく)流用できるので、複数プロジェクトで同じコードを使っている場合、かなり便利です。 ■workspaceをつくる xcodeでFile → New → New Workspace…を選択し、新規作成する
次のページ
このページを最初にブックマークしてみませんか?
『エンジニア開発記 | iPhone + MySQL + PHP + VPSな開発日記』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く