为什么使用Mantle

项目地址: https://github.com/Mantle/Mantle

今年上半年在两个项目中都将Model层替换为Mantle,大大减少了开发中实体转换的时间;选择mantle的初衷是因为看到了大神的blog,里面的应用场景也是在开发中我们经常遇到的情况:
iWangKe.me - 为什么唱吧iOS 6.0选择了Mantle

对比一下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# http://bubbler.labs.douban.com/j/user/wheats

{
"homepage": "http://www.douban.com/people/wheats",
"icon": "http://img3.douban.com/icon/u46721592-5.jpg",
"userid": "46721592",
"r": 0,
"stats": {
"board": 0,
"bub": 0,
"collect": 0
},
"title": "welsonla",
"uid": "wheats"
}

阅读更多

关于Xcode单元测试(XCTest)的一些总结

单元测试可以让我们快速检测项目接口与一些功能的可用性,这次编写了大量的单元测试,让我对之前的一些疑惑有了一个透彻的理解

  • 单元测试中,可以直接import我们项目中的类
  • 想要执行的方法,必须使用test开头,testLogin会被执行,userLogin这样的方法名不会被执行
  • 单元测试没有头文件,一些变量声明,写在interface里面
  • 对于一些变量的初始化,放到setup里面进行
阅读更多

Rails code snippets

(摘录来自: persie. “Ruby on Rails 教程”)

short key

1
2
3
g   generate
d destory
s server

脚手架以及一些常用的变量类型

1
rails g scaffold user name:string age:int email:string description:text cash:float

删除脚手架生成的代码

1
rails d scaffold Users

生成Controller与action

1
rails g controller TodoList list delete index

删除Controller

1
rails d controller TodoList list delete index

生成Model

1
rails g model User name:string email:string

删除Model

1
rails d model User name:string email:string

添加字段到表

1
“rails generate migration add_password_digest_to_users password_digest:string”

根据Model生成数据库表

1
rake db:migrate

我的2014

生活

今年完成了几件大事:
三月,订婚
五月,买房,成为了房奴
八月,拍婚纱照
九月,结婚

今年生活上发生了很大的变化,与小关关组建了新的家庭,也让我肩负起了一个男人的责任,为了我们新的生活而奋斗。希望我能为家人和老婆创造更好的生活条件。

感谢小关同志的陪伴与理解,七年长跑,我们终于走到了一起

工作

今年工作发生了变动,离开了工作三年的老东家,加入了新公司,在各方面都对自己的提升非常大,技术上有了比较明显的提升,由于产品是直接面对用户的,在各方面的细节的要求也比较高,尤其是用户体验方面。

跨部门沟通上,由于团队非常大,涉及的业务部门也比较多,这一年有了不少机会与别的部门进行工作上的沟通协作,与人沟通上,也让我不再对人际交往有恐惧感。

工作方式上,拆分复杂业务,从最小的点逐步分析整个复杂的功能系统,在功能的实现上有了更明确的思路,对时间节点也有了更好的控制。抽离与重用,减少重复代码,精简了项目代码,提高了可扩展性。

通过龙哥的处理问题的方式跟思路,也让我积累到了很多宝贵的编程经验:

  • 清晰的调试思路与正确的分析,在一些棘手的问题上,不再是猜和逃避,而要找到出错的地方进行修复;
  • 对公共资源的全局封装,自定义的Color使用Category方法封装,比用宏定义更优雅;
  • 对业务的不同状态进行枚举化,使用起来更可读
  • 对Notification的name常量化,更易查找
  • 接口都继承自同一基类,公共的处理由基类完成,在较大变动的情况下,只需要在基类做出理,就能兼容新需求
  • 特定符号写成常量,如接口返回值,在接口变动时只需要修改下常量即可

推荐的书

  • 《我编程,我快乐》
  • 《大教堂与集市》
  • 《重来》

bye, 2014

Mac Mini开箱

###背景
从3月份换了新工作,就一直在使用自己的电脑,每天背着上下班,后来自己又买了显示器和新的机械键盘。想想这时候如果上Mac mini的话,外设都已经齐全了。
一直在等9月份的Mini新版,无奈对新版确实有些失望,一直摇摆不定,恰巧双十一的前一天,发现京东的MD387已经降价到了3588,果断决定入手了。

阅读更多

Instruments无法启动

最近在iOS7的系统上使用Instrument想检查内存的leaks,启动时候总是提示失败,花了些时间,解决了这个问题,做下笔记。

阅读更多

你的Mac慢了么

本子是MC700,已经陪伴我coding了三年,中间升级了内存,硬盘加了SSD,但是自从电池坏掉以后,我拆掉了电池,接电使用,发现越来越卡,经历了三个月左右的煎熬,我的mac终于又重新焕发了青春,说说遇到的问题

阅读更多

我的2013

####作品

  1. 对晴天进行了两次更新;
  2. 和小伙伴们一起做了一个密码管理的软件passbox
  3. 写了一个对SQLCipher加密数据库转换的Mac程序

####读书

  1. 《打造Facebook》
  2. 《MacTack人生元编程》
  3. 《写给程序员的Web设计书》
  4. 《写给大家看的Web设计书》
  5. 《淘宝技术这十年》
  6. 《苹果开发之Cocoa编程》
  7. 《代码整洁之道》

####健康
12年有一阵子住院,13年特别注意锻炼身体,9月份每天和几个朋友去紫竹院跑步运动。强度不是很大,天气渐冷,入冬,雾霾跟严寒,使运动停止。

13年身体并没有什么大碍,感谢

####技术
感觉自己这一年的技术,进步不大,惭愧。在用户体验跟交互方面,倒是有了一些自己的心得。对Mac的编程有了越来越浓厚的兴趣。

####济南
从十月份,陆续跟女朋友在济南看了几套房子。主要参考的房子是90平米以上可以落户的房子,现在我女人已经开始考虑学区的问题了,经十路沿线现在也越来越多的高楼在崛起,房价也在逐渐的攀高,房价是每个年轻人心里的痛。

####2014

  1. 多读书
  2. 更多的iOS上的作品
  3. 更多的Mac应用
  4. 深入Object-c,并继续强化Ruby on Rails
  5. 锻炼身体
  6. 从AppStore赚多一点钱
  7. 与几个朋友的小工作室,希望我们能成为TapBot
  8. 换新工作
  9. 买房结婚(房子已买)

generate new host RSA key

最近oschina的git服务器进行了迁移,导致了原有的git项目push不上去,总是提示

1
2
3
4
5
6
7
8
9
10
11
12
13
14
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: POSSIBLE DNS SPOOFING DETECTED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
The RSA host key for git.oschina.net has changed,
and the key for the corresponding IP address 112.124.6.106
is unknown. This could either mean that
DNS SPOOFING is happening or the IP address for the host
and its host key have changed at the same time.
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.

第一个问题非常简单,就是修改/etc/hosts,添加一个IP与域名的对应关系即可

第二个是要求你更新know_host中的RSA key,执行如下命令即可

1
ssh-keygen -R git.oschina.net
1
cat /.ssh/known_hosts

查看known_host中的数据可以看到key已经更新了

vim-note

####移动到行首

1
0

####移动到行尾

1
$

####剪切多行

1
2
3
v
向下移动
d

####粘贴

1
P

####在nerdTree光标处新建一个文件

1
m

####删除多行(数字+dd)

1
5dd #删除5行

####多行注释

1
2
3
4
5
6
1.ESC+v
2.方向键向下或者向上选中多行
3.Control+v
4.Shift+i
5.#
6.Esc,Esc

git笔记

一些全局配置

1
2
3
4
5
6
git config --global push.default matching

git config --global color.status auto
git config --global color.diff auto
git config --global color.branch auto
git config --global color.interactive auto

添加所有新文件

1
git add .

从版本中去除一个文件

1
git rm test.html.rb

假设有很多新文件和删除了好多文件

1
git add -A

获取所有远程版本

1
git fetch

创建并切换到新分支

1
git checkout -b newbranch

切换到分支

1
git checkout master

迁移原有git项目到新得项目地址

1
git remote set-url origin git@git.github.com:welsonla/studio.git

查看当前git分支

1
git branch -r

查看git log

1
git log

查看当前tag

1
git tag

创建一个新的tag

1
git tag v1.1

降当前tag推送到服务器

1
2
3
4
git push origin --tags

推送单个
git push origin v1.1

将现有svn项目转换成git项目,并保留所有commit log

1
git svn clone [SVN-Path]

回滚

1
2
3
#http://stackoverflow.com/questions/1338728/delete-commits-from-a-branch-in-git
git reset --hard commitid
git push --force

ignore

.gitignore 新文件使用正则匹配
1
2
*.file_extension
.idea/*
remove exist files(现有文件需要软删除)
1
2
3
git rm -r --cached . //soft delete
git add .
git commit -m 'remove ignore files'

blog with github(4)-开始写吧,骚年

Octopress提供很多的Rake任务去创建post和pages,他还会根据你的posts来生成Category,你可以在atom.xml或者blog/categories/<category>/atom.xml中找到这些内容

####Post

这些Post页面必须存放在Source/_posts目录下面,并且命名方式和jekyll的命名方式一样,会转换成YYYY-MM-DD-Post-title.markdown,这个文件的名字就是你的blog的url slug,日期帮助你排序这些文章

1
rake new_post["Title"]

在使用了ZSH的话,你要这样创建

1
rake new_post或者rake new_post[\"Title\"]

例如

1
2
rake new_post["Zombie Ninjas Attack: A survivor's retrospective"]
Creates source/_posts/2011-07-03-zombie-ninjas-attack-a-survivors-retrospective.markdown

or

1
2
3
4
~/Code/rails/octopress(branch:source) » rake new_post                        
Enter a title for your post: blog-with-github-4
mkdir -p source/_posts
Creating new post: source/_posts/2013-06-03-blog-with-github-4.markdown

生成的内容大致如下

1
2
3
4
5
6
7
8
---
layout: post
title: "Zombie Ninjas Attack: A survivor's retrospective"
date: 2011-07-03 5:59
comments: true
external-url:
categories:
---

你可以关闭comments,或者为他添加categories的tag,并且你还可以添加author: Your Namepublished: false来控制是否发布

####Page

生成Page的命令

1
2
3
4
rake new_page[super-awesome]
# creates /source/super-awesome/index.markdown

rake new_page[super-awesome/page.html]

如果使用了zsh的话,方法要参照post的创建方式

生成的pages的默认内如大致如下

1
2
3
4
5
6
7
8
---
layout: page
title: "Super Awesome"
date: 2011-07-03 5:59
comments: true
sharing: true
footer: true
---

####Content

如果列表中不想显示全文内容的话,可以添加<!-- more -->标签,这将在文章下面生成一个“Continue →” 链接,链接到全文的地址

###Generate & Preview

1
2
3
rake generate   # Generates posts and pages into the public directory
rake watch # Watches source/ and sass/ for changes and regenerates
rake preview # Watches, and mounts a webserver at http://localhost:4000

本地使用http://localhost:4000就可以访问了

blog with github(3)-Octopress配置

Octopress的配置相当的简单,并且一般配置完成后,你不需要再对Rakefile和_config文件进行修改,下面这些是Octopress的配置文件

1
2
3
4
5
_config.yml       # Main config (Jekyll's settings)
Rakefile # Configs for deployment
config.rb # Compass config
config.ru # Rack config

Rakefile大多是与部署相关的配置,如果不需要同步的话,你就不需要进行修改

####Blog配置

_config.yml有三部分配置,你必须修改url,并且title,subtitle和author也要修改,还有一些第三方的服务需要启用

#####主配置

1
2
3
4
5
6
7
8
9
10
11
url:                # For rewriting urls for RSS, etc
title: # Used in the header and title tags
subtitle: # A description used in the header
author: # Your name, for RSS, Copyright, Metadata
simple_search: # Search engine for simple site search
description: # A default meta description for your site
date_format: # Format dates using Ruby's date strftime syntax
subscribe_rss: # Url for your blog's feed, defauts to /atom.xml
subscribe_email: # Url to subscribe by email (service required)
category_feeds: # Enable per category RSS feeds (defaults to false in 2.1)
email: # Email address for the RSS feed if you want it.

#####Jekyll&Plugins

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
root:               # Mapping for relative urls (default: /)
permalink: # Permalink structure for blog posts
source: # Directory for site source files
destination: # Directory for generated site files
plugins: # Directory for Jekyll plugins
code_dir: # Directory for code snippets (for include_code plugin)
category_dir: # Directory for generated blog category pages

pygments: # Toggle python pygments syntax highlighting
paginate: # Posts per page on the blog index
pagination_dir: # Directory base for pagination URLs eg. /blog/page/2/
recent_posts: # Number of recent posts to appear in the sidebar

default_asides: # Configure what shows up in the sidebar and in what order
blog_index_asides: # Optional sidebar config for blog index page
post_asides: # Optional sidebar config for post layout
page_asides: # Optional sidebar config for page layout

#####第三方配置

1
2
3
4
5
6
7
8
9
Github - List your github repositories in the sidebar
Twitter - Setup a sidebar twitter feed, follow button, and tweet button (for sharing posts and pages).
Google Plus One - Setup sharing for posts and pages on Google’s plus one network.
Pinboard - Share your recent Pinboard bookmarks in the sidebar.
Delicious - Share your recent Delicious bookmarks in the sidebar.
Disqus Comments - Add your disqus short name to enable disqus comments on your site.
Google Analytics - Add your tracking id to enable Google Analytics tracking for your site.
Facebook - Add a Facebook like button

blog with github(2)-部署到github

###使用github pages

如果想使用 http://username.github.io 的域名作为你的blog地址的话,首先要创建一个仓库,名字为你的用户id.github.io(比如我的是welsonla.github.io)

用户使用的是Github Pages的master版本下面的public作为你的网站主目录,你可以通过浏览http://username.github.io 来查看。如果你想在source这个版本上面维护代码,并且把内容提交到master分支,Octopress有一个命令来帮助你完成这些

1
rake setup_github_pages

然后,他将

  1. 询问你的github pages的url
  2. 将远程的重‘origin’重命名为‘octopress’
  3. 在远程的origin讲你的github pages仓库添加进去
  4. 切换当前branch从master切换到source
  5. 根据你的仓库名,重新配置你的blog地址
  6. 在_deploy目录下面设置master分支,用于部署

接下来执行

1
2
3
rake generate
rake deploy

这将生成你的blog,并将生成的文件copy到_deploy目录下面,并添加到git,将他们commit和push到master分支上面,稍后,你会收到一份来自github的email告诉你,你的提交已经收到,并且很快将发不到你的web上面

并且,不要忘记提交你的代码到source分支

1
2
3
git add .
git commit -m 'your message'
git push origin source

####自定义域名绑定

首先你要source目录下面创建一个CNAME,

1
echo 'your-domain.com' >> source/CNAME

之后去你的域名服务商或者你的dns服务商那里创建一条CNAME记录,记录指向的IP为
(不要使用顶级域名指向到pages,要使用二级域名)

1
207.97.227.245

blog with github(1)-前期准备

##开始之前

  1. 安装Git
  2. 使用rbenv或者RVM安装ruby 1.9.3

安装完后确保你的ruby版本是1.9.3

1
ruby -v

##设置Octopress

1
2
git clone git://github.com/imathis/octopress.git octopress
cd octopress

接下来安装一些依赖

1
2
3
gem install bundler
rbenv rehash
bundle install

安装Octopress默认主题

1
rake install

–未完待续,哥去睡觉