介绍

Emmet (前身为 Zen Coding) 是一个能大幅度提高前端开发效率的一个工具:

icon

基本上,大多数的文本编辑器都会允许你存储和重用一些代码块,我们称之为“片段”。虽然片段能很好地推动你得生产力,但大多数的实现都有这样一个缺点:你必须先定义你得代码片段,并且不能再运行时进行拓展。

Emmet 把片段这个概念提高到了一个新的层次:你可以设置 CSS 形式的能够动态被解析的表达式,然后根据你所输入的缩写来得到相应的内容。Emmet 是很成熟的并且非常适用于编写 HTML/XML 和 CSS 代码的前端开发人员,但也可以用于编程语言。

使用示例

在编辑器中输入缩写代码:ul>li*5 ,然后按下拓展键(默认为 tab ),即可得到代码片段:

1
2
3
4
5
6
7
<ul>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
</ul>

新版 xcode 插件 不能用 解决方法

find ~/Library/Application\ Support/Developer/Shared/Xcode/Plug-ins -name Info.plist -maxdepth 3 | xargs -I{} defaults write {} DVTPlugInCompatibilityUUIDs -array-add `defaults read /Applications/Xcode.app/Contents/Info.plist DVTPlugInCompatibilityUUID`

xcode 插件管理器

Alcatraz

xcode 常用插件

xtodo 
fuzzyautocompelte
codepilot
xcodeboost
xalign
KSimageNamed
xcolors
@property (nonatomic,copy) NSString *propertyName;

self.propertyName是对属性的访问;使用_propertyName是对局部变量的访问。

所有被声明为属性的成员,在iOS5 之前需要使用编译器指令@synthesize 来告诉编译器帮助生成属性的getter,setter方法。 之后这个指令可以不用人为指定了,默认情况下编译器会帮我们生成。

编译器在生成getter,setter方法时是有优先级的,它首先查找当前的类中用户是否已定义属性的getter,setter方法,如果有,则编译器会跳过,不会再生成,使用用户定义的方法。

也就是说你在使用self.propertyName 时是在调用一个getter方法。

self.propertyName 会让计数器+1;_propertyName却不会。  

_propertyName是类似于self->_propertyName。

用self.propertyName 是更好的选择,因为这样可以兼容懒加载,同时也避免了使用下划线的时候忽视了self这个指针,后者容易在block中造成循环引用。

img

Rails中构建API的方式有很多种,Grape因性能而被推荐,其可构建于任何Rack上,仍建议使用Rails作为载体,来构建Grape,会非常省心。

安装配置

首先确保安装:

1
2
3
4
5
6
## Platform
gem 'rails', '4.2.0'

## RESTful API Engine
gem 'grape'
gem 'grape-entity'

组织架构

目录结构

api
├── api.rb
└── v1
	├── base.rb
	├── entities
	│   ├── base.rb
	│   └── user_basic.rb
	├── helpers
	│   ├── page_helper.rb
	│   └── user_helper.rb
	├── base_api.rb
	└── users_api.rb

base.rb 中定义着API的版本、输出格式,及挂载更多API。 users_api.rb 就像controller,对每个resources都进行分开写,然后在base.rb中进行mount entities 使用grape-entity,控制输出中的对象及格式。 helper 放置常用的helper,像分页,用户验证。

简介

img

Charles 是在 Mac 下常用的网络封包截取工具,在做 移动开发时,我们为了调试与服务器端的网络通讯协议,常常需要截取网络封包来分析。

Charles 通过将自己设置成系统的网络访问代理服务器,使得所有的网络访问请求都通过它来完成,从而实现了网络封包的截取和分析。

除了在做移动开发中调试端口外,Charles 也可以用于分析第三方应用的通讯协议。配合 Charles 的 SSL 功能,Charles 还可以分析 Https 协议。

Charles 是收费软件,可以免费试用 30 天。试用期过后,未付费的用户仍然可以继续使用,但是每次使用时间不能超过 30 分钟,并且启动时将会有 10 秒种的延时。因此,该付费方案对广大用户还是相当友好的,即使你长期不付费,也能使用完整的软件功能。只是当你需要长时间进行封包调试时,会因为 Charles 强制关闭而遇到影响。

Charles 主要的功能包括:

截取 Http 和 Https 网络封包。

  1. 支持重发网络请求,方便后端调试。
  2. 支持修改网络请求参数。
  3. 支持网络请求的截获并动态修改。
  4. 支持模拟慢速网络。

这个是 Rails 官方的 Gem,可以直接集成到 Rails 里面

你可以写 Benchmark 的测试用例:

1
2
3
4
5
6
7
8
9
10
11
12
require 'test_helper'
require 'rails/performance_test_help'

class HomepageTest < ActionDispatch::PerformanceTest
  # Refer to the documentation for all available options
  # self.profile_options = { runs: 5, metrics: [:wall_time, :memory],
  #                          output: 'tmp/performance', formats: [:flat] }

  test "homepage" do
    get '/'
  end
end

总结web应用中常用的各种cache

cache是提高应用性能重要的一个环节,写篇文章总结一下用过的各种对于动态内容的cache。 文章以Nginx,Rails,Mysql,Redis作为例子,换成其他web服务器,语言,数据库,缓存服务都是类似的。 以下是3层的示意图,方便后续引用:

                      +-------+
1                     | Nginx |
                      +-+-+-+-+
                        | | |
        +---------------+ | +---------------+
        |                 |                 |
    +---+---+         +---+---+         +---+---+
2   |Unicorn|         |Unicorn|         |Unicorn|
    +---+---+         +---+---+         +---+---+
        |                 |                 |
        |                 |                 |
        |             +---+---+             |
3        +-------------+  D B  +-------------+
                      +-------+

Sublime Text 2是一个轻量、简洁、高效、跨平台的编辑器,方便的配色以及兼容vim快捷键等各种优点博得了很多前端开发人员的喜爱。之前也不并知道它有这么多插件的扩展与支持,直到vincent问到有没有在用cTags插件,才知道原来Sublime通过插件也可以实现一些大型IDE的功能,遂google一下,本篇Blog就来介绍下Sublime下经常使用的插件。

安装包控制(Package Control)

打开Sublime Text 2,点击 Tools -> Command Palette 调出控制台Console;

将以下代码粘贴进命令行中并回车:

1
import urllib2,os;pf='Package Control.sublime-package';ipp=sublime.installed_packages_path();os.makedirs(ipp) if not os.path.exists(ipp) else None;open(os.path.join(ipp,pf),'wb').write(urllib2.urlopen('http://sublime.wbond.net/'+pf.replace(' ','%20')).read())

重启 Sublime Text 2,如果在 Preferences -> Package Settings中见到Package Control这一项,就说明安装成功了。

请大家检查下 Gemfile.lock,若在使用如下版本的gem包,那么请及时更新

  • therubyracer < 0.12.2

  • sidekiq < 3.5.1

  • celluloid > 0.16.0, < 0.17.2

  • zipruby <= 0.3.6

  • redcarpet < 3.3.3

  • grape < 0.2.5

https://github.com/ASoftCo/leaky-gems

Rails社区的gem库,按我感觉质量普遍比较高,这跟Rails社区的氛围有关,以下推荐的是我个人在项目中时常用到的并且比较主流的gem,想到哪儿写到哪儿,挂一漏万。

1.bootstrap(bootstrap-sass)

这个不用解释了吧,对于没有专业前端小伙伴的项目和团队是福音。而且对于想要学习前端技术的同学,bootstrap的源码非常值得进行深入的学习和理解。当然,缺点也是有的,就是大家的网站做出来都比较像,建议有条件的小伙伴使用的时候还是多进行一些个性化修改。

2.Capistrano(capistrano | RubyGems.org)

Capistrano最初就是用来向服务器部署ruby应用的,当然现在也开始支持其他类型项目的部署。Capistrano是一种在多台服务器上运行脚本的开源工具,它主要用于部署web应用。它自动完成多台服务器上新版本的同步更新,包括数据库的改变。使用起来非常方便,基本也是Rails应用开发必备。

3.bcrypt(bcrypt | RubyGems.org)

bcrypt是一个跨平台的文件加密工具。由它加密的文件可在所有支持的操作系统和处理器上进行转移。它的口令必须是8至56个字符,并将在内部被转化为448位的密钥。在rails上使用起来相当简便,web开发一般是少不了的。

4.sprockets(sprockets | RubyGems.org)

Sprockets 是一个 Ruby 库,用来检查 JavaScript 文件的相互依赖关系,用以优化网页中引入的js文件,以避免加载不必要的js文件,加快网页访问速度。这个现在貌似是rails工程默认自带gem,记不太清了,足见重要性。但是我在使用中发现有时候会跟bootstrap的js库发生冲突,主要是版本问题,有使用的小伙伴需要注意一下。