2012/08/24

Cocos2d Downloadからダウンロード

cd xxxx/cocos2d-iphone-2.0/ ./install-templates.sh

#import "CCBReader.h"
[CCBFileUtils sharedFileUtils];
    //[director_ pushScene: [IntroLayer scene]];
    [CCBReader unzipResources:@"ccb.zip"];
    CCScene* scene = [CCBReader sceneWithNodeGraphFromFile:@"CCBTest.ccbi"];
    [director_ pushScene: scene];

  2012/08/23

7/21 第3回iphone_dev_jp 東京iPhone/Mac勉強会がMTLカフェで開催されましたでiPhone勉強会の並列処理ustが掲載されています。

  2012/07/30

http://iphonedesign.firebird.jp/?p=2267

  2012/07/26

今日からライオンでも使える!XCODE4.4 MODERN OBJECTIVE-C SYNTAXでコードをきれいにする方法」を参考に、早速試してみました。 ---2012/09/06追記 参考:Objective-C Literals

@synthesize の省略

@property で宣言した変数は、自動的に @synthesizeをコード補完してくれます。

@property (nonatomic) NSString *name;
@property (nonatomic) float time;

... @synthesize がいらない ...

- (void)bind {
   _name = @"Mike";
   _time = 10.0f;
}

これは省略もそうですが、コードの統一感という点で非常に大きな意味があると思います。 今までだと、アンダースコアをつけなかったり適当にコーディングできましたから。

NSArray, NSMutableArrayの記述

NSArray は @[...] で、NSMutableArray は [@[...], mutableCopy] で記述

@property (nonatomic) NSString *name;
@property (nonatomic) float time;

- (void)bind {
    NSArray *values1 = @[
                       @"1_setting01.png",
                       @"1_setting02.png",
                       @"1_setting03.png",
                       @"1_setting04.png",
    ];
    NSMutableArray *values2 = [@[
                       @"1_setting01.png",
                       @"1_setting02.png",
                       @"1_setting03.png",
                       @"1_setting04.png",
                       ]
                       mutableCopy];
}

---2012/09/06追記 Object Subscripting ってのが追加されているようです。 今まで、NSArray や NSDictionary ではのキーによるデータ取得はC言語のような(?)記述では取得できませんでしたが、これもできるようになりました。

  int cArray[] = { 100, 200, 300 };
   NSArray *nsArray = @[ @100, @200, @300 ];

   cArray[1]; // 200
   nsArray[1]; // @200

    NSMutableArray *nsArray = [@[ @100, @200, @300 ] mutableCopy];
    nsarray[1] = @33;

これは、かなり嬉しい構文ではないでしょうか?

リテラル値の記述

int,float を NSNumber に変換とか、リテラル値の変換を省略できるようになりました。

- (void)update:(int)score :(float)time {
    NSMutableDictionary *value = [NSMutableDictionary dictionary];
    [value setValue:@(score) forKey:@"score"];
    [value setValue:@(time) forKey:@"time"];
}

NSDictionary, NSMutableDictionary の記述

さらに、NSMutableDictionary を省略すると

- (void)update:(int)score :(float)time {
    NSMutableDictionary *test = [@{@"score":@(score), @"time":@(time)} mutableCopy];
}

  2012/07/26

NSArrayの重複判断をするのに今まで Iterate とかしてたのですが、containsObject っていうメソッドが凄く便利です。

function addUniqueValue:(NSInteger )value {
    NSNumber *number = [NSNumber numberWithInt: value];
    if(![values containsObject:number] ){
        [values addObject:number];
    }
}

valueForKey とか objectAtIndex だとエラーを考慮しないといけない点もありますしね。 ただ、中身が配列とかだと Iterate しないといけないかとは思います。。。

  2012/07/13

会社でスマホサイトの切り分けどうやるの?って聞かれたのでちょっと実装してみる。


var sp_url = 'スマホのURL';
var default_msg = "このサイトはスマートフォン対応です。【OK】でスマートフォンサイト、【キャンセル】でPCサイトを表示します。";

var is_sp = isUserAgentSP();

if (is_sp) {
    var cookie_mode = $.cookie('mode');
    if (!cookie_mode) {
        if (confirm(default_msg)) {
            $.cookie('mode', 'sp');
            location.href = sp_url;
        } else {
            $.cookie('mode', 'pc');
        }
    } else {
        var mode = getUrlVars()["mode"];
        if (mode == 'sp') {
            $.cookie('mode', 'sp');
            location.href = sp_url;
        }
    }
} else {
    $('.mode_url').css('display', 'none');
}

function getUrlVars() {
    var vars = [], hash;
    var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
    for (var i = 0; i  0 
          && navigator.userAgent.indexOf('iPad') == -1) 
          || navigator.userAgent.indexOf('iPod') > 0 
          || navigator.userAgent.indexOf('Android') > 0);
}

(1) UserAgentの取得 (2) URLのパラメータを解析してもーで「mode=sp」を取得 (3) cookie で保存して判別(この場合、mode に sp を保存) (4) PC接続の場合、 class="mode_url" の要素を display:none に変更

UserAgent(iPhone, iPad, iPod, Android)とCookieでやってるので完璧ではないです。 スマホなので、フラグ保存はWebDataStrageを使った方がかっこいいかとは思います。

  2012/07/08

フロントエンドエンジニアのためのブラウザ上でHTML5コーディング・実行・共有できるサービス一覧 JS do JS Fiddle JS bin Dabllet Thimble Fiddlesalad Codepen Adobeオープンソース「Brackets

とりあえず、投稿されたサンプルを観てるだけでも参考になりますね。

  2012/07/08

最近、HTML5を高速化する方法が流行ってますね。

HTML5でアプリ!と言ってもやはりネイティブに比べると格段に遅いです。 とくに相対的にスマホやタブレットアプリの処理では顕著だと思います。 ブラウザベースなので、基本どうやってもネイティブには勝てないと思いますが、それでも現状より速くする手法は色々ありますよね。

サイバーエージェントの中の人、「HTML5 Web Applicationのつくりかた」の記事も参考にちょっとメモしてみました。

小さな画像はbase64で直接埋め込み

小さな画像はCSSに直接画像をbase64で埋め込む。



みたいな

画像をbase64に変換するには、プログラミングするもよし、ツールを使うもよし。

ちなみにPHPだったら、


CSS Sprite

いわゆる1枚画像で座標を指定して、画像をパーツを表示する手法 ゲームのテクスチャでよく使われる手法ですね。

ちなみに、Adobe Fireworks CS6からは標準で書き出し機能が搭載されました。 (それ以前は機能拡張で対応) CSSスプライト書き出し機能の使い方

Canvasタグ

これは言わずもがな。 ただ、高機能な分面倒かな?と




var ctx = canvas.getContext('2d');
var img = new Image();
img.src = '画像URL';
$("#sample").attr('width', img.width);
$("#sample").attr('height', img.height);
ctx.drawImage(img, 0, 0, img.width, img.height);

※jQuery利用

画像サイズを取得して、Contextに描画する際にサイズ指定します。 事前にサイズがわかってる場合はCanvasにサイズ指定すればいいですが、それってどうよ?と個人的には思います。

SVG(AiファイルをCanvasに埋め込む)

MacBookPro Retinaの登場によりこれから、高解像度にも柔軟に対応する必要がでてきました。 そこで登場するのが恐らくSVGの技術かと。

Ai→Canvasっていうプラグインを使うと、ベジェ曲線とかパス情報データを書き出してくれます。 で、これをCanvas の Context に直接わりあてる何とも合理的な方法です。

JSON x gzip圧縮

転送データをJSONにしたり、圧縮をかける事によりデータ転送を減らすようにしてます。 (流石はソーシャルの中の人)

gzip転送する場合は、Apacheで mod_deflat を有効にする必要があります。

まぁ、普通のサービス運営ではここまでする機会はないとは思いますが、知っておく知識ではありますね。

CSS拡張のメタ言語Sass

SassはCSSを拡張して、効率よくコーディングできるメタ言語です。 ※「Sassを覚えよう!」、「Sass、そしてSassy CSS (SCSS)」などを参考

環境構築は「Scout」を利用します。 OSX専用なら「Codekit」ってのもあります。

Sassは、それだけでトピックが長くなりそうなので割愛(と言うか勉強中)

PNG画像最適化

OptiPNGで必要の無い情報を削除し、画像容量を軽量化します。 画像数が多い場合には有利。

window.onhashchange

ちょっと高速化から話がずれますが、ブラウザ上でローカル処理をするとURLリンクが活用できません。 window.onhashchange を利用してページ遷移の履歴みたいに利用します。

http://hoge.com/page1#1

みたいな。 これでネット検索でアクセスした時に同じ結果を出す事ができます。

改行、空白などを削除

これも画像とは関係ないですが、HTMLの軽量化になるかと。 ただファイルアップする度にやる必要があるので、自動化する仕組みを作っておかないと忘れがちな作業ではありますが・・・。

pngファイルの軽量化
Google DriveのIconを再起的に削除
php-markdownでバニラPHPなコードブロック処理
laravel-ffmpeg を使う
2021年版 Ubuntu + certbot + Let's Encrypt でサーバ証明書設定
GihHub のデフォルトでない master ブランチを checkout する
マルチログインで未認証のリダイレクト
Homebrew で Redis をインストール
CSS だけでスムーズスクロール
EC-CUBE4 で Gmail の smtp を利用する
Amazon Linux 2 の amazon-linux-extras とは
UNIQUE カラムのバリデーションで自分自身を除外して更新
フォーム有効期限切れで Page Expired をリダイレクト
ログを日付でローテーションやクリアや削除
Homebrew で PHP8.0 から PHP7.4 にダウングレード
Big sur で zsh 移行と Homebrew アップグレード
Mac に minikube をインストール
途中から .gitignore に追加する
Larevel 6.x から Laravel 8.x にバージョンアップ
Composer で Allowed memory size (メモリ不足)エラー
Blade でカスタムクラスを利用する
git push git pull にブランチ指定せずに実行する
git pull や git push できなくなったとき
Docker のコンテナからホストOS に接続
Mac で ローカル IP アドレス(ipv4)のみを表示する
ホストOS から Docker の MySQLコンテナに接続
caching_sha2_password のエラー
node-config で環境設定ファイルを利用する
rootパスワードを初期化(再設定)する
Git から clone したときのエラー対処
Mac に MySQL をインストール
Mac に PostgreSQL をインストール
Laravel 環境構築 - Mac ネイティブ編
Firebase 入門 - Firebase とは
Firebase 入門 - CLI インストールとデータベースの設定
AWS 無料枠(t2.micro)で容量とメモリエラー
Cloud9 を起動する -初心者編-
gcloud で GCEインスタンスを起動してみる
AWS CLI と jq でインスタンス一覧を整形して表示
React と Laravel7 のプロジェクトを作成する
Homebrewインストール-2020年版
3直線で囲まれた範囲塗りつぶし
PuLP で線形最適化問題を解く
カスタムのペジネーションを作る
node-sass を使って sass をコンパイルする
Log ファサードでSQLログを分離して書き出す
いちから始める Docker - 複数のコンテナを使う - (2020年)
いちから始める Docker - docker-compose を使う - (2020年)
AWS ECR を使ってみる
Laravel7 でマルチ認証