HappyCoding:] ChildhoodAndy

思维世界的发展,在某种意义上说,就是对惊奇的不断摆脱。——爱因斯坦

深入浅出MagicalRecord-01

| Comments

《深入浅出MagicalRecord》我准备做成一个系列,记录我从0开始学习这个框架的所有心得、记录。希望能和大家一起探讨交流。

  1. 深入浅出MagicalRecord-01
  2. 深入浅出MagicalRecord-02
  3. 深入浅出MagicalRecord-03
  4. 深入浅出MagicalRecord-04

============================

1. CoreData与MagicalRecord

在 ios 开发中,我们会使用CoreData来进行数据持久化。但是在使用CoreData进行存取等操作时,代码量相对较多。而 MagicalRecord 正是为方便操作 CoreData 而生。

MagicalRecord 的三个目标:

  • 简化 CoreData 相关代码
  • 清晰、简单、单行获取数据
  • 当需要优化请求的时候,仍然允许修改 NSFetchRequest

MagicalRecord-Github地址

============================

2. 安装配置

方法1:

1.从github上下载MagicalRecord源码 [MagicalRecord-Github地址](https://github.com/magicalpanda/MagicalRecord)。

2.将MagicalRecord文件夹拖放并添加到Xcode项目中。

3.添加 CoreData.framework。

4.在项目的预编译头文件中(PCH)中导入CoreData+MagicalRecord.h。或者在将要使用的类中单独导入。

5.开始编码。

方法2:

1.如果已经安装了CocoaPods(不清楚CocoaPods使用的朋友们可以看唐巧的这篇用CocoaPods做iOS程序的依赖管理)。

在终端中输入pod search MagicalRecord,结果如下:

复制pod 'MagicalRecord', '~> 2.2'到项目中的Podfile并保存文件。命令行cd到工程根目录下,并执行pod install

2.以下步骤同方法1的3、4、5步骤。

注意:
如果你在使用 MagicalRecord 方法的时候不想带前缀MR_(比如用 findAll 代替 MR_findAll),只需在PCH文件中,在CoreData+MagicalRecord.h之前增加#defin MR_SHORTHAND即可。

============================

3. 环境需求

  • iOS SDK 6.x 及以上
  • OS X SDK 10.8 及以上
  • 使用Xcode5来运行github仓库中包含的测试Tests,但MagicalRecord库建立在Xcode4上。

下一篇:深入浅出MagicalRecord-02

IOS拍照自动保存到相簿

| Comments

Github项目地址

================


项目来自于苹果官方文档中的一个范例。

针对这个范例,我对一些英文注释做了中文说明,并尝试着加入自动保存到相簿的这个小功能。好吧,有些过于简单了。

保存到相簿
// 当从相册里选择一张照片或者用相机进行拍摄之后,该方法被调用
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
    UIImage *image = [info valueForKey:UIImagePickerControllerOriginalImage];
    NSLog(@"SMILE!");
    [self.capturedImages addObject:image];

    if ([self.cameraTimer isValid])
    {
        return;
    }
    
    if (self.imagePickerController.sourceType == UIImagePickerControllerSourceTypeCamera)
    {
        
        UIImageWriteToSavedPhotosAlbum(image, self, @selector(image:didFinishSavingWithError:contextInfo:), nil);
    }
    

    [self finishAndUpdate];
}
- (void)image:(UIImage*)image didFinishSavingWithError:(NSError*)error contextInfo:(void*)contextInfo
{
    UIAlertView *alert;
    
    if (error)
    {
        alert = [[UIAlertView alloc] initWithTitle:@"错误"
                                           message:@"保存失败"
                                          delegate:self cancelButtonTitle:@"确定"
                                 otherButtonTitles:nil];
    }
    else
    {
        alert = [[UIAlertView alloc] initWithTitle:@"成功"
                                           message:@"保存成功"
                                          delegate:self cancelButtonTitle:@"确定"
                                 otherButtonTitles:nil];
    }
    [alert show];
}

后面要加入的功能

  • 将拍照的照片存储到应用沙盒中

Python之数据采集google搜索联想词

| Comments

这是一个我在业余时间学习python的一个小练习,纯属新手,有不对的地方,还恳朋友们留言指出。

1. Google搜索

当我们在google搜索引擎中输入关键字的时候,会实时弹出一些联想提示短语的列表。这篇文章想通过python做这样一个数据采集的工作。我们使用 Chrome 浏览器来分析下。(Google服务被GFW禁掉,我采用了VPN。)

第一步【输入关键字】

第二步【Chrome浏览器开发者工具打开网络标签查看】

第三步【查看返回Preview/Response】

2. 代码思路 Github

这里随便选择了三个关键字,分别是lovelikehate

Python之数据采集google搜索联想词
# A demo to show how to collect the suggestion words when we search with search engine 


import urllib
import urllib2
import re
import time
from random import choice

wordsSearchingList = ['love', 'like', 'hate']

for item in wordsSearchingList:
    keyWord = urllib.quote(item)

    url = 'https://www.google.co.jp/complete/search?client=hp&hl=zh-CN&gs_rn=48&gs_ri=hp&tok=9rRotU-cEDUkHKHgOoZAZw&cp=4&gs_id=je&q=%s&xhr=t' % (keyWord)
# 填写Request Headers,防止被ban掉

    headers = {
        "GET": url,
        "Host": "www.google.co.jp",
        "Referer": "https://www.google.co.jp/",
        "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.114 Safari/537.36",
    }

    req = urllib2.Request(url)

    for key in headers:
        req.add_header(key, headers[key])

    html = urllib2.urlopen(req).read()

# 正则匹配

    pattern = re.compile(r'"({searchWord}.*?)"'.format(searchWord = keyWord))
    results = pattern.findall(html)
    for item in results:
        print item
    time.sleep(1)
    print '-------------------------------------'
输出结果
love
love tv show
love
love story
love the way you lie
love is an open door
love moschino
love never felt so good
loveq
love live 第二季
love actually
-------------------------------------
like
likert scale
likelihood ratio test
-------------------------------------
hate
hater snapback
hater帽子
hateoas
hater snapback uk
hate crime
hate speech
hateship loveship
haters gonna hate
hate什么意思
hater uk
-------------------------------------
[Finished in 5.0s]

3. 存在问题

正则匹配我用的是pattern = re.compile(r'"({searchWord}.*?)"'.format(searchWord = keyWord)),会匹配出类似"love story""love live 第二季"这样以love开头,并被双引号包围的短语。但这样会导致下面这个问题:

like 的联想词中其实是有中文联想的,但由于该正则表达式的问题,只显示了英文。

这个仍然有待改进。

推荐一款Mac下免费好用的番茄工作法软件

| Comments

番茄工作法是一个非常有效的工作方法,不了解的朋友点击这里看百科介绍

今天为大家推荐一款 Mac 下免费好用的番茄工作法软件

focus booster

这款软件的界面很清爽,相信你会喜欢上TA。使用起来也很简单,不用看什么帮助。基本上,25分钟 的工作时间,5分钟 的休息时间,当然这两个时间可以视个人情况进行调整。不过 25分钟 和 5分钟 是一个比较科学合理的时间,过长过短都不太好,推荐使用默认设置。

IOS获取设备信息常用方法记录

| Comments

1. 常用方法 GithubGist地址

常用方法
NSLog(@"HostName: %@", [[NSProcessInfo processInfo] hostName]);
//globallyUniqueString 唯一的标示符,每次调用都会不一样,可以用作一些临时缓存文件的名字
NSLog(@"GlobalUniqueString: %@", [[NSProcessInfo processInfo] globallyUniqueString]);
//操作系统名称
NSLog(@"OperatingSystemName: %@", [[NSProcessInfo processInfo] operatingSystemName]);
//操作系统版本
NSLog(@"OperatingSystemVersion: %@", [[NSProcessInfo processInfo] operatingSystemVersionString]);
//物理内存
NSLog(@"PhysicalMem: %llu", [[NSProcessInfo processInfo] physicalMemory]);
//进程名称
NSLog(@"ProcessName: %@", [[NSProcessInfo processInfo] processName]);

//供应商标识
NSLog(@"UniqueId: %@", [UIDevice currentDevice].identifierForVendor);
//设备类型(iPhone、iPad)
NSLog(@"userInterfaceIdiom: %d", [UIDevice currentDevice].userInterfaceIdiom);
//设备名字
NSLog(@"Name: %@", [UIDevice currentDevice].name);
//系统名字
NSLog(@"SystemName: %@", [UIDevice currentDevice].systemName);
//系统版本
NSLog(@"SystemVersion: %@", [UIDevice currentDevice].systemVersion);
//模型
NSLog(@"Model: %@", [UIDevice currentDevice].model);
//本地化的模型
NSLog(@"LocalizeModel: %@", [UIDevice currentDevice].localizedModel);
//电池状态
NSLog(@"BatteryLevel: %f", [UIDevice currentDevice].batteryLevel);

//2014-07-03 16:52:01.055 CityOfHeart[3528:60b] HostName: dounen
//2014-07-03 16:52:01.058 CityOfHeart[3528:60b] GlobalUniqueString: B4B1EC8C-A805-434B-9D57-106ED70C214A-3528-00000AF6A42D73D7
//2014-07-03 16:52:01.059 CityOfHeart[3528:60b] OperatingSystemName: NSMACHOperatingSystem
//2014-07-03 16:52:01.061 CityOfHeart[3528:60b] OperatingSystemVersion: Version 7.1.1 (Build 11D201)
//2014-07-03 16:52:01.063 CityOfHeart[3528:60b] PhysicalMem: 1035976704
//2014-07-03 16:52:01.064 CityOfHeart[3528:60b] ProcessName: CityOfHeart
//2014-07-03 16:52:01.074 CityOfHeart[3528:60b] UniqueId: <__NSConcreteUUID 0x16693c80> 5ACF8DA1-FAC1-4D70-AB1F-BB696188C5CA
//2014-07-03 16:52:01.075 CityOfHeart[3528:60b] userInterfaceIdiom: 0
//2014-07-03 16:52:01.157 CityOfHeart[3528:60b] Name: 童年
//2014-07-03 16:52:01.159 CityOfHeart[3528:60b] SystemName: iPhone OS
//2014-07-03 16:52:01.161 CityOfHeart[3528:60b] SystemVersion: 7.1.1
//2014-07-03 16:52:01.162 CityOfHeart[3528:60b] Model: iPad
//2014-07-03 16:52:01.163 CityOfHeart[3528:60b] LocalizeModel: iPad
//2014-07-03 16:52:01.165 CityOfHeart[3528:60b] BatteryLevel: -1.000000

2. 判断设备是否是7.0以上系统

[[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0f

注意:
假如我们的设备版本号为7.1.1(为字符串类型),对其进行floatValue浮点化后值为7.100000

3. 判断设备是否是iPhone、iPad

  • iPad:[[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad
  • iPhone: [[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone
UIUserInterfaceIdiom in UIDevice.h
typedef NS_ENUM(NSInteger, UIUserInterfaceIdiom) {
#if __IPHONE_3_2 <= __IPHONE_OS_VERSION_MAX_ALLOWED
    UIUserInterfaceIdiomPhone,           // iPhone and iPod touch style UI
    UIUserInterfaceIdiomPad,             // iPad style UI
#endif
};

Dropbox被GFW墙掉

| Comments

Dropbox最近被墙掉,我才意识到以前写的博客,采用dropbox的图片外链通通打不开了。

WTF!

后面准备采用七牛云存储。这个稳定,速度还不错。

等闲下来,我会将以前博客的dropbox图片外链地址修正下。

2014/07/02:图片地址修复完毕。