2014年3月11日 星期二

iOS 開發筆記 - 使用 AssetsLibrary (assets-library://) 取得相簿內照片的原圖、縮圖

一直以來都是自己檔案管理,最近開始想要用內建相簿來管理儲存。

用法:

#import <AssetsLibrary/ALAssetsLibrary.h>
#import <AssetsLibrary/AssetsLibrary.h>

typedef void (^DoneHandler)(NSDictionary *ret);
- (void)get:(NSString *)key callback:(DoneHandler)handler {
 
ALAssetsLibrary* assetslibrary = [[ALAssetsLibrary alloc] init];
 
[assetslibrary assetForURL:[NSURL URLWithString:key] resultBlock:^(ALAsset *asset) {
//NSLog(@"asset:%@",asset);
UIImage *image = nil;
image = [UIImage imageWithCGImage:[asset aspectRatioThumbnail]];
image = [UIImage imageWithCGImage:[[asset defaultRepresentation] fullResolutionImage]];
image = [UIImage imageWithCGImage:[[asset defaultRepresentation] fullScreenImage]];
        handler(@{@"image":image});
} failureBlock:^(NSError *error) {
        handler(@{});
}];
}


其中 key 是類似這樣:assets-library://asset/asset.JPG?id=xxx&ext=JPG。

iOS 開發筆記 - 使用 MD5

忽然發現,自己在 iOS 上沒有用過 MD5 耶,一定是太少寫程式了 Orz

#import <CommonCrypto/CommonDigest.h>

- (NSString *)md5:(NSString *)str
{
    const char *cStr = [str UTF8String];
    unsigned char result[CC_MD5_DIGEST_LENGTH];
    CC_MD5( cStr, strlen(cStr), result );
    return [NSString
            stringWithFormat: @"%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X",
            result[0], result[1],
            result[2], result[3],
            result[4], result[5],
            result[6], result[7],
            result[8], result[9],
            result[10], result[11],
            result[12], result[13],
            result[14], result[15]
            ];

}


驗證方式:

$ echo -n "string" | md5

參考資料:Calculate MD5 on iPhone

[OSX] 使用 ntpdate 和 systemsetup 更新系統時間 @ Mac OS X 10.9.2

公司的 Air 被幫我當成不關機的裝置,只是隨著不關機的時間拉長時,系統的時間就會開始延遲,解法就是用 ntpdate 設定一下。

$ sudo su
# ntpdate -u $(systemsetup -getnetworktimeserver|awk '{print $4}')

[Javascript] AngularJS 與 img src & img ng-src

用 AngularJS 在處理 img 時,沒看手冊的用法:

<img src="{{item.url}}" />

雖然網頁顯示一切正常,但仔細看 Google Chrome 開發人員工具時,發現有奇怪的 requests 發出去,是的,發出去的資料就是 http://hostname/%7B%7Bitem.url%7D%7D ,解法就是改用 ng-src 吧!

<img ng-src="{{item.url}}" />

AngularJS 官方文件 ngSrc :

Using Angular markup like {{hash}} in a src attribute doesn't work right: The browser will fetch from the URL with the literal text {{hash}} until Angular replaces the expression inside {{hash}}. The ngSrc directive solves this problem.

2014年3月6日 星期四

AWSome Day 2014 Taipei

AWSome Day 2014 Taipei

記得上一回使用 Amazon EC2 已經是 2009 年年底了,當時有 firefox plugin 可以管 EC2 就很威了!經過幾年少用 EC2 後,今年想說該複習一下,就報名參加了 :P

聽完一輪的想法:
  • AWS 提供很完整的方案,甚至企業型用法的 Amazon Virtual Private Cloud (VPC)
  • 比起 2009 年的概念,現在有很完整的 Access control 稱作 AWS Identity and Access Management (IAM)
  • 現在有 Amazon Relational Database Service (RDS),我猜應該本就有 HA 功能,而 RDS 所謂的 HA 方案是指跨 region 程度的。此外自家也有推 Amazon DynamoDB 的 NOSQL 方案
  • 檔案儲存的 Amazon S3 也有便利的 access control !以 bucket (類似folder) 為單位
  • Amazon ElastiCache 還可以建 Cluster ,有常見 Redis 跟 Memcached 方案 
  • AWS Elastic Load Balancing (ELB) ,如其名 load balancing
  • Amazon CloudWatch,可以監控機器狀況,若太操時可以選擇自動加開機器等
  • 有點內建 CDN 功能:世界各地有 Region 跟 Edge,其中 Region 是可以開機器,而 Edge 則是 cache 
聽到這裡,我認為 AWS 真的很猛,大概把一般公司對 MIS 的需求都做完了 XD 難怪一直主打 startup 廣告,如 airbnb 如何在 2012 年靠 AWS 服務,處理六個月內倍增的訂單數等,其他家則是說用了 AWS 省了多少錢。

對於錢的角度,我認為 AWS 就像買保險一樣,初期看起來花費比其他家 VPS 貴,但它提供的方案很全面性,如彈性計算的 EC2、資料庫 RDS、檔案儲存備份 S3、服務分流 ELB 跟服務監控與自動彈性調整 CloudWatch 等,一整個讓 startup 不必分心於管機器這件事,更可以專心做服務。流量大就砸錢,錢花完就增資 XD

管機器啊,只有真的管過才知道機器難管之處 XDDD 所以,要怎樣說服老闆花錢又是另一門學問囉!例如顧一個 MIS 年花 60 萬好了,但這個價碼初期用 AWS (WebOps) 好像很噴錢(大多都是 RD 兼職),但一旦服務流量變大時,馬上加人不見得可以處理好,用 AWS 卻像買個保險可以快速解決,甚至某些服務性質來說,有可能省到錢(節省人力)。

最後一提...不是用了 AWS 就可以自動 scale up!當然是自家服務本身就要設計,所以在 AWS 的傳道上,會鼓吹一開始就設計可以 scale up 的架構,而非像其他 startup 先不作重在 scale up ,等做大再煩惱 :P

相關連結: