无主题

Android中ListView的垃圾回收 - 王胜

ListView中ItemView的复用

为了提高ListView的加载速度和用户操作的流畅度,ListView底层做了ItemView的复用,避免重复地为每一个ItemView开辟空间。

  • ActiveView

    激活view,当期显示在屏幕上的激活的view

  • ScrapView
    废弃view,被删除的ActiveView会被自动加入ScrapView

ListView的ItemView中大图片的覆盖显示

由于复用机制,当Item中包含大图时,由于Java GC的回收机制不够及时,造成ScrapView中图片资源不能立即释放,当用户上拉加载新的item内容时,却看到了之前加载的图片,直到新图从网络下载完毕,才会刷新view正确显示图片。

考虑到这种情况,Android 在API Level1中已经为ListView和GridView添加了RecyclerListener回调接口。开发者只需为ListView注册回调,重写onMovedToScrapHeap方法即可。

示例:

1
2
3
4
5
6
7
8
mListView.setRecyclerListener(new RecyclerListener() {
@Override
public void onMovedToScrapHeap(View view) {
// Release strong reference when a view is recycled
final ImageView imageView = (ImageView) view.findViewById(android.R.id.icon);
imageView.setImageBitmap(null);
}
});

参考资料:

提升用户体验的7大微交互 - 张超耀


众所周知,我们总是依据封面来判断书的好坏,聪明的设计师会创造实用有吸引力的界面。潜在用户可能会被吸引,但如何一直黏住他们呢?

要试着回答这个问题,所有一切都指向人本设计,其中用户是最主要的考量。以人为本:你的应用应该使用日常用语,包括情绪、口语,外观还要有一丝“诱惑力”。界面应当成为你的好朋友,时刻准备给出建议提升你的体验,让你会心一笑。

  • 是微交互在起作用。精确的说,这主要是界面附带的交互动画,使它更具表现力。优秀的动画能够:

    • 表达状态并提供反馈
    • 提升直接的操纵感
    • 将操作结果可视化
  • 在用户体验中,关键是你如何对待用户,还有他们使用产品时的感受。极小的细节都值得加倍留心。微交互提供了用户所需的反馈,表达了当前运行状况。无论背后逻辑有多么复杂,都能使界面更亲切。

显示系统状态

Jakob Nielsen在可用性原则启示第一条中描述:让用户始终知晓当前在发生什么。用户希望立马得到回应,但总有些情况下,网站需要一点时间等待操作完成。

那么,界面就应当在背景处显示图形,反映完成百分比。或是播放声音,让用户了解当前发生的事情。这个原则也关系到文件传输:不要让用户觉得无聊,给他们看进度条。即使是不太令人愉快的通知,比如传输失败,也应该以令人喜爱的方式展现。让你的用户微笑!

突出显示变化

通常为了节省空间,应用会在需要时把某个按钮替换掉。有时我们需要展现通知,确保用户注意到了。动画可以吸引他们注意,不至于忽略你认为重要的信息。


保持前后关联

在这个智能手机和小屏幕智能手表的时代,难以在屏幕上展现大量信息。有一种处理方式,是在不同页面之间保持清晰的导航。让用户理解什么东西来自何处,便能轻易回溯。有多种方式可以实现:

非标准布局

继续之前的例子,微交互应当帮助用户理解如何操作非标准的布局,去除不必要的疑惑。照片前后滑动、滚动式图表和旋转角色都是很棒的选择:


行动号召

除了帮助用户有效地操作应用,微交互也有鼓励用户操作的能力:持续浏览、点赞或分享内容,只因为这很有吸引力,用户不舍离去:


输入的视觉化

所有应用中,数据录入都是最重要的元素之一。数据录入决定了用户所得结果的质量。通常,这部分很无趣,但微交互可以使它与众不同:


使教程生动形象

当然,在应用发布后,动画可以教育用户。它突出一些基本功能和控件,排除用户在未来的使用中的障碍。


结论

所以,如果你重视用户体验,就应该从头到尾精细打磨界面,通过微交互与动画为它增色添彩。它会为你的项目赋予生命。

注意每个细节,是使人机交互易用的成功要诀

原文链接

曾铭

CLI 上手

CLI vs GUI

  • Command Line Interface VS Graphical User Interface
  • 分别是给工程师用的和给人(包含工程师)用的
  • 哪个方便用哪个,哪个好玩用哪个

CLI 能干什么?(for me)

  • 快速安装软件
  • CLI 开发:工具、服务,如 jenkins, sonar, ssh-key,

CLI 如何上手

  • 不要畏惧,把命令行当做大一上的 C 语言,是最简单,逻辑最清晰的。(鬼知道 GUI 背后都做了什么)
  • 理解环境变量 profile_load_path env echo,知道 shell 怎么去找一个命令即可
  • 安装软件,了解常见的包管理工具即可:homebrew(常用软件), gem(ruby 软件), npm (node.js 软件)
    • 基本都是 search install list ,会这三个参数就行了
    • 思想都是想通的,比如 pod (for iOS/OSX dev)
1
2
3
4
5
# 在终端输入试试
say "hi"
# 还有王胜推荐的 sl
brew install sl
sl

Sonar 学习

  • Sonar不叫Sonar 叫SonarQube
  • 开源的 刁刁的 项目地址
  • 管理平台代码质量
  • 支持plugin

    • 通过插件形式,可以支持包括 java,C#,C/C++,PL/SQL,Cobol,JavaScrip,Groovy等等二十几种编程语言的代码质量管理与检测
    • 插件库
    • 大部分免费 OC不免费 有第三方免费的
  • Sonar的3个组成部分

    • Database (支持多种类型的数据库MySQL/Oracle) 配置sonar实例 存储分析结果
    • Web Server 浏览代码质量分析结果
    • Analyzers 分析代码的分析器
  • Sonar Notes

    • SonarQube的web server和database只能有一个
    • 从性能上考虑 三个组件应该放在三个专有的电脑上,但是Database和Web Server可以安装在同一台电脑上
    • Datatbase和Analyzers不应该安装在同一台电脑上
    • Analyzers可以通过加电脑扩展
    • Database和Analyzers必须存在同一个网络内
    • 所有的机子必须时间同步
  • Analyzers

    • SonarQube Runner: recommended for all non-Maven projects
    • Maven: recommended for all projects built with Maven
    • SonarQube Ant Task: to integrate with projects built with Ant
    • Gradle: to integrate with projects built with Gradle
    • CI Engine: see Jenkins plugin or Hudson plugin or Bamboo plugin or AnthillPro plugin. Note that other CI engines can be used even if there is no SonarQube plugin available.
  • Mac下跑通sonar所有流程需要的东西

    • a Mac with Xcode
    • SonarQube
    • SonarQube Runner
    • xctool
      • xctool是facebook开源的一个命令行工具,用来替代苹果的xcodebuild工具
    • OCLint
      • OCLint是一个静态代码分析器,可以检测的Objective-C代码(同时支持Ç和c + +),发现常见的问题:例如的if / else / try / catch和/最后声明出错,未被使用的本地实例和参数,过度复杂(有效值代码行数状语从句:常循环复杂度太高),冗余代码,代码异味,以及其他不好的代码。
    • gcovr
      • 代码覆盖率分析工具

常用配置文件

配置Sonar-Runner

  • 路径 <放置sonar的目录>/sonar-runner/2.4/libexec/conf/sonar-runner.properties

  • 只摘录相关项

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #----- Default SonarQube server 
    sonar.host.url=http://localhost:9000

    #----- MySQL
    sonar.jdbc.url=jdbc:mysql://192.168.22.22:3306/sonar?useUnicode=true&amp;characterEncoding=utf8

    #----- Global database settings
    sonar.jdbc.username=sonar
    sonar.jdbc.password=sonar

    #----- Security (when 'sonar.forceAuthentication' is set to 'true')
    sonar.login=admin
    sonar.password=admin

配置Database和web server

sonar.properties

  • 路径 <放置sonarqube的目录>/sonarqube-5.1.2/conf/sonar.properties
  • 只摘录相关项
    1
    2
    3
    4
    5
    6
    7
    8
    9
    sonar.jdbc.username=sonar  // 数据库账号
    sonar.jdbc.password=sonar // 数据库密码

    sonar.jdbc.url=jdbc:mysql://192.168.22.22:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance
    // MySql路径

    sonar.web.host=0.0.0.0 // web host
    sonar.web.context=/sonar // web 路径
    sonar.web.port=9000 // 端口号

配置需要分析的项目 (需放置在项目根目录下)

run-sonar.sh 分析项目的脚本

  • 未做修改 直接拿来用

sonar-project.properties 项目的必要参数
只摘录相关项
看注释

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58

##########################
# Required configuration #
##########################

sonar.projectKey=51offer
sonar.projectName=51offer
sonar.projectVersion=1.9
sonar.language=objc

# Project description
sonar.projectDescription=test

# Path to source directories
sonar.sources=51offer
# Path to test directories (comment if no test)
sonar.tests=51offerTests


# Xcode project configuration (.xcodeproj or .xcworkspace)
# -> If you have a project: configure only sonar.objectivec.project
# -> If you have a workspace: configure sonar.objectivec.workspace and sonar.objectivec.project
# and use the later to specify which project(s) to include in the analysis (comma separated list)
sonar.objectivec.project=51offer.xcodeproj
sonar.objectivec.workspace=51offer.xcworkspace

# Scheme to build your application
sonar.objectivec.appScheme=51offer
# Scheme to build and run your tests (comment following line of you don't have any tests)
# sonar.objectivec.testScheme=myApplicationTests

##########################
# Optional configuration #
##########################

# Encoding of the source code
sonar.sourceEncoding=UTF-8

# JUnit report generated by run-sonar.sh is stored in sonar-reports/TEST-report.xml
# Change it only if you generate the file on your own
# The XML files have to be prefixed by TEST- otherwise they are not processed
# sonar.junit.reportsPath=sonar-reports/

# Cobertura report generated by run-sonar.sh is stored in sonar-reports/coverage.xml
# Change it only if you generate the file on your own
# sonar.objectivec.coverage.reportPattern=sonar-reports/coverage*.xml

# OCLint report generated by run-sonar.sh is stored in sonar-reports/oclint.xml
# Change it only if you generate the file on your own
# sonar.objectivec.oclint.report=sonar-reports/oclint.xml

# Paths to exclude from coverage report (tests, 3rd party libraries etc.)
# sonar.objectivec.excludedPathsFromCoverage=pattern1,pattern2
sonar.objectivec.excludedPathsFromCoverage=.*Tests.*

# Project SCM settings
# sonar.scm.enabled=true
# sonar.scm.url=scm:git:https://...

参考资料:

[上海] Android 小伙伴一起来 51offer 玩吧

国内留学行业整体上还是一个传统中介行业,51offer 致力于让人们更方便的通过互联网留学。
留学学生和留学学校虽然五花八门,但既有的留学流程大体一致,相应的盈利模式也比较清晰。但与之对应的如何切实通过产品降低留学门槛,在更多的学生与学校之间建立便利的联系,还有很多好玩的事情可以做。
在互联网留学这一块,51offer 目前可以算国内第一,同时身为一个互联网从业者客观来说,这个行业各公司产品、技术各方面还非常烂(包括我们 51offer)。

要做的事情很多,要决定不做的事情更多,要把不好变好的事情也有不少。
如果你愿意挑战既有现状,喜欢用聪明的方式把事情做好,最好再对这个教育细分领域感兴趣,让我们一起来做些有意义的事。

本人曾铭,ID: mithvv,目前负责公司移动团队。丁香园和百姓网的工作经历让我相信小而扁平的团队组织更加高效。如果前几天耗子和玉伯你站在耗子的一方,嗯,你会喜欢我们目前的合作方式。(ಥ_ಥ,想说玉伯也是我非常尊敬的前辈,他的观点适合支付宝……)

公司状况

  • 刚过 B 轮,两年内完成 5000 万美元融资,自身盈利也一直很好,生死存亡的问题你暂时不用担心
  • 我们基本不加班甚至很难让你加班,因为我们所有的加班(以小时计)都可以调休。我个人是每周三调休带孩子玩,周日上一天班 ;)
  • 公司在上海火车站边上,地铁出站过个路口就到(下雨天忘带伞问题都不大)
  • 技术团队人数目前 50+,谨慎扩张中
  • 技术语言各端不同。后端主要是 Java(大部分),搜索 C++,爬虫 Python,前端和移动各公司应该区别不大,移动这边 Swift 正在一起学习,计划 2.0 正式版出来后用到产品中

招聘要求(不罗列每个职位的技术细节了,意义不大)

  • 招 Android、Java、前端工程师,是工程师或者攻城狮,不招码农
  • 至少作为主程参与过一个产品的完整开发过程
  • 会或者可以快速学会 git,这样我们能快速在 Github 上玩起来
  • 有经验或者了解持续集成、自动化测试及其意义,这样我们在如何快速开发上比较容易达成一致
  • 能把一个技术点用自己的语言阐述清楚,我们的周技术分享期待你的 ShowTime
  • 加分项
    • 践行开源
    • 能跟产品从产品角度阐述清楚技术逻辑
    • 有稳定维护的 Blog 或 Github 帐号
    • 能自由访问国际互联网(如果不会我们教你,这点其实也必备)
    • 对技术有热情,(比如上面一些条件你并不完全满足,但你自认思路清晰,学习能力强,就是要来面一面。我们非常非常欢迎对技术有热情的你!)

薪资待遇

  • 整体 10k - 20k 之间,具体面议,牛人没法封顶

你都看到这了,简历快发给我吧: ming.z[at]51offer.com (24 小时内必有反馈哦)
有意聊天者时间你定,地点我定(工作忙,上海火车站附近即可),咖啡我请 ;)

原始链接:51offer-blog

移动组周技术分享-研发路上的那些事儿

心酸研发路 - 杨志平

  • 大版本发布周期过长(原因:团队专业有限,探索前进,频繁修改),导致没有什么机会思考、设计,人也拖的身心疲惫
  • 引入架构思想,软件质量提高。后期频繁加入改动,冲淡架构
  • 老板干涉过多 导致:压力过大 质量无法保证
  • 老板高度重视UI

研发路上的那些事儿 - 张超耀

  • 没有专业的移动端团队人员
  • 产品研发没有系统流程,走一步算一步
  • 需求人人可以改
  • 忙的时候忙的要死,闲的时候闲的蛋疼

研发之路上的坑 - 潘君

盲目相信自己,不合理的压缩周期

在开发周期过程中,过分相信努力的作用,以为团队只要努努力,可以爆发一个超越平时的战斗力.

在预估周期的过程中,过分考虑老板的感受,不合理的压缩周期,不断的向需求妥协,导致后期死的非常难看.

一方面自己的预估承诺没有兑现.另一方面团队本身也精疲力尽.

好事多磨,鸡血不能多打

一个好的项目不是短期可以做出来的,是必须慢慢打磨,而过分相信一个突击开发周期能够做出一个好产品是过于乐观的.

好事多磨,好的东西需要一个相对合理的周期.这个周期可能比较长,所以在较长的一段时间内要做的是保证团队的舒适度,而不是一味的打鸡血鼓励.

鸡血是一种需要正向循环的方式.如果没有一个好的反馈,鸡血的功效性就会越来越弱,最后反而会有逆效果.

高层强插改需求 - 吴明

  • 背景
    • 原公司移动开发中,在一项目层层过滤确定产品后,开发人员并已经开发了一段时间后,公司老板或者其他高层介入修改需求,延长开发时间。
  • 缺点:
    1. 开发时间浪费,花费时间做无用功
    2. 高层施压不利于下层产品开发,及产品迭代
    3. 项目延期打击开发团队人员士气和积极性
    4. 项目接近上线更改需求,严重影响开发人员心情,及代码编写质量
  • 后期流程改进
    1. 从项目入口抓起:所有指定项目必须经该项目需求方,产品,开发等直接最高领导确定,并且不更改需求下,开发人员才开发项目。
    2. 项目分阶段给高层领导汇报,把控项目质量。
    3. 高层需要项目后期改需求,只能下个版本迭代,本项目不予以改需求。

参与创业的辛酸史 - 郁兵生

  • 初创团队,没日没夜加班搞项目
  • 初创团队,不了解情况,项目周期把握不清。赶时间攒代码。

大众【设计占整个研发的重头】- 顾鹏凌

  • 完善的管理体
  • 细控的研发流程
  • 设计阶段作为重头,精雕细琢,避免后期遇到问题需要大改动

杂乱的管理 - 吴强

  • 初创团队,相关人员不完备
  • 产品经理只做了原型的工作,没有把控住需求的变更
  • 一人多职,多项目参与
  • 空降产品经理,做事一意孤行,跟团队不和

51offer的原始状态 - 庄丰洲

  • 没有移动端团队人员和移动端研发规范流程
  • 是个人都可以提需求

工作感悟-李仙鹏

  • 团队结构:

    崇尚扁平化的互联网公司,员工之间没有非常明县的上下级关系。

  • 需求把控:

    需求不明确、中途变更、压榨开发都TMD是耍流氓

    1. 一个好的项目需求,应该在kick off前全面规划产品,产品和设计明确需求并且画押签字,中途不得变更。当临时提出需求变更时,技术应该敢于把画押字据拿出来并且提出拒绝——把变更需求留在下一版本迭代。

    2. 不应该为了迎合进度而倒推时间压榨开发,这样做出来的东西很可能会是漏洞百出的

Better 的一路走来 - 王胜

第一个版本历时4个月的天天加班

  • 评估开发时间时,仅有原型;设计稿一出,开发人员瞬间觉得工作量要直线上升。
  • 按照一个有经验的工程师估出时间,然后上面说再调一个人,时间周期按照除以2来算。掉入《人月计划》中所说的坑。
  • 新组建的团队,缺少默契,需要磨合。【包括客户端之间,客户端与API之间,客户端与UI之间】
  • 临近上线,上面对体验要求无止境,导致细节调整没完没了

一起努力,挺过4个月

  • 打过鸡血
  • 慢慢地团队之间有了默契
  • 制定上线体验阀值,不能无止境提出体验调整的需求

后续版本的研发

  • 严格按照Scrum流程迭代开发版本,目前2周一迭代
  • Sprint确定需求后,不能强制加入新的需求
  • 特例的需求要插入Sprint,那么就顺延Sprint的周期

工作经历的一些片段 - 曾铭

文化

  • (敏感信息)略

好的

  • 工程师主导的开发流程:产品做调研,提目标,开发参与设计 feature 包揽实现、测试、验证
  • 牛人不少:一流的人招一流的人,二流的人招三流的人
  • 优秀工具的使用 (工具绝非一蹴而就, svn -> git,)
  • 对代码的极致追求 (代码行数、朝歌->镐京、Hackathon:一夜实现客户端聊天)
  • 相对优秀的办公环境 (畅通的网络等)

不好的

  • 目标不明确 (对商家态度的摇摆)
  • 不接地气(商业化不成功)
  • 理想主义者的碰撞, 无妥协
  • 急躁(寻求改变的高期望)
  • 压力大

以上不针对具体公司

代码开发效率提升方法

2015.06.19 - 技术分享,主题”代码开发效率提升方法”

snippet的制作与使用 - 杨志平

备份路径

~/Library/Developer/Xcode/UserData/CodeSnippets/

界面

image

使用
1.系统自带

很多我们的代码提示都是snippet系统已经有的代码块如:
block变量定义

typedef <#returnType#>(^<#name#>)(<#arguments#>);

2.常用变量
  • strong
  • weak
  • assign
  • block
3.常用方法
  • 比如:hiddenKeyBoard
  • 网络请求:getData
  • 上下拉刷新,等等
4.常用模块
  • 常用的代理协议方法集
制作

选中代码块拖入snippet library即可。为了方便调用可简单编辑

image2

PaintCode的简单使用

简单的图形绘制,可像xib一样拖拽图形,并添加到view的CALayer层上

  • drawRect方法

myEclipse分享 - 吴明

  • myEclipse主要WebService开发工具

  • MyEclipse,是在eclipse 基础上加上自己的插件开发而成的功能强大的企业级集成开发环境,主要用于Java、Java EE以及移动应用的开发。MyEclipse的功能非常强大,支持也十分广泛,尤其是对各种开源产品的支持相当不错。

  • myEclipse使用ssh框架

  • myEclipse常用快捷键

    • Alt+Shift+s:
      打开myEclipse快捷键菜单
      • 自动生成get set方法
      • 自动生成无参和有参构造方法
    • Ctrl+D:删除当前行
    • Ctrl+Alt+↓:复制当前行到下一行(复制增加)
    • Ctrl+Alt+↑:复制当前行到上一行(复制增加)
    • Alt+↓:当前行和下面一行交互位置
    • Alt+↑:当前行和上面一行交互位置
    • Ctrl+Shift+O:快速生成import,当从网上拷贝一段程序后,不知道如何import进所调用的类
  • ssh框架

OSX 快捷键入门 - 曾铭

OSX 系统级的快捷键支持
  • 统一标准的全局快捷键:如 FX、『设置』、opt
  • 在统一之外,留意每个应用的快捷键:如 chrome:opt+cmd+i,cmd+l
讨论常用快捷键 (具体快捷键请自己查)
  • 设置
  • 剪切复制粘贴全选
  • 新建、新建 tab、切换 tab、关闭 tab、关闭应用
  • 光标的自由游走
    • 上下左右(推荐 hjkl)、字符移动、行首行尾、文首文尾、向后删除、单词删除、行向前向后删除
  • Xcode
    • 上下移行 (@志平 推荐)
    • reveal to project navigator、切换 .h.m 文件
    • 显示隐藏 navigatiors、Debug area、Utilities
    • new tab、切换 tab、分割窗口
定制
  • System Preferences -> Keyboard : 配置快捷键、菜单快捷键、modifier keys
  • Karabiner
  • Keyboard Maestro 介绍
  • 定制建议
    • 原生为主,定制为辅
    • fix 原生不爽、有冲突的个别快捷键
      • 合理使用 opt, 规避冲突
    • 根据自己习惯定制
    • 常反思,记不住的快捷键都是『对你不重要』的快捷键

VIM - 潘君

vim起源
  • 源自开源vi
  • 作者Bram Moolenaar
  • 80年代末,Amiga计算机中无vi,作者自行开发
  • Vi IMitation(模拟) -> Vi IMproved(改良)
vim应用场景
  • linux
  • 平时代码
vim模式

列举常用模式如下
需要了解所有模式
在vim中使用:help vim-modes

  • Insert模式

    • 进入
      • i -> 在光标前插入
      • I-> 在句首插入
      • a -> 在光标后插入
      • A -> 在句尾插入
    • 离开
      • Esc
      • Ctrl + c
      • Ctrl + [
  • Normal模式

    • 进入vim的默认模式
    • 命令的天下
      • 简单移动
        • h j k l -> 左 下 上 右
        • 0 (数字零) -> 移动光标到行头
        • $ -> 移动光标到行尾
        • gg -> 到第一行
        • G -> 到最后一行
        • w -> 到下一个单词的开头。
        • e -> 到下一个单词的结尾。
      • 简单操作
        • dd -> 剪切当前行
        • yy -> 赋值当前行
        • p -> 粘贴
        • u -> 撤销
    • 神奇的.

      • 上次命令的重复
    • 命令的组合

      • daw -> 删除当前单词
      • 2dd -> 删除2行
      • 3p → 粘贴文本3次
      • 100idesu [ESC] → 会写下 “desu “100次
      • 0y$ -> 从行头拷贝到本行最后一个字符
  • visual模式

    • 进入
      • v
      • V
      • Ctrl + v
    • 退出
      • Esc
      • Ctrl + c
  • select模式

    • 进入

      • gh
      • gH
      • g(Ctrl + h)
    • 切换

      • Ctrl + o ->临时切换到可视化模式执行一个命令
      • Ctrl + g ->切换到可视化模式
vim大冒险游戏

VIM常用命令 - 王胜

光标移动
  • fx:移动光标到当前行的下一个 x 处。很明显,x 可以是任意一个字母,而且你可以使用 ; 来重复你的上一个 f 命令。
  • tx:和上面的命令类似,但是是移动到 x 的左边一个位置。
  • Fx:和 fx 类似,不过是往回找。
  • w:光标往前移动一个词。
  • b:光标往后移动一个词。
  • 0:移动光标到当前行首。
  • ^:移动光标到当前行的第一个字母位置。
  • $:移动光标到行尾。
  • ):移动光标到下一个句子。
  • ( :移动光标到上一个句子
替换
  • :s/hello/world 替换当前行中第一个hello为world
  • :%s/hello/world 替换每一行中第一个hello为world
  • :s/hello/world/g 替换当前行中所有的hello为world
  • :%s/hello/world/g 替换每一行中所有的hello为world
  • :%s/hello/world/gc 找到当前文件中所有的hello,并逐一询问用户是否要替换
内容提取
  • :r !date 将当前时间插入到当前文件
  • :r /path/to/src.file 将src.file里的内容输出到当前文件
总结

VIM的命令甚多,组合也很多,记忆是不能长时间记住的。唯一的捷径就是多多使用,用的多了,使用这些命令时就像手拿筷子一样,变成了本能。

Xcode插件管理 - 张超耀

  • 古人云“工欲善其事,必先利其器”,打造一个强大的开发环境,是立即提升自身战斗力的绝佳途径!以下是常用的一些有力的XCode插件。

  • 插件管理器:Alcatraz - The package manager for Xcode。

  • ColorSenseXCode颜色显示插件

    • 代码里的那些冷冰冰的颜色数值,到底时什么颜色?如果你经常遇到这个问题,每每不得不运行下模拟器去看看,那么这个插件绝对不容错过。更彪悍的是你甚至可以点击显示的颜色面板,直接通过系统的ColorPicker来自动生成对应颜色代码,再也不用做各种颜色代码转换了!
  • VVDocumenter规范注释生成器

    • 很多时候,为了快速开发,很多的技术文档都是能省则省,这个时候注释就变得异常重要,再配合Doxygen这种注释自动生成文档的,就完美了。但是每次都要手动输入规范化的注释,着实也麻烦,但有了VVDocumenter,规范化的注释,主需要输入三个斜线“///”,就OK啦!
  • XAlign代码整理

    • XAlign是一款专门用于代码整理的Xcode插件,其作者为来自Geek Zoo Studio的开发者QFish。XAlign能够对开发者的代码非常快速地进行对齐优化,有“=”、宏定义、属性三种对齐模式。当然,如果默认的对齐风格不是自己喜欢的,开发者还可以自定义或提出issues。
  • FuzzyAutocompletePlugin代码自动补全插件

    • 通过添加模糊匹配来提高Xcode代码自动补全功能,开发者无需遵循从头匹配的原则,只要记得方法里某个关键字即可进行匹配,很好地提高了工作效率。
  • XcodeBoost

    • XcodeBoost是一款可以让开发者轻而易举地检查和修改Objective-C代码的插件。XcodeBoost能够自动进行一些繁琐的操作,比如方法的定义与声明、添加基于命令行的代码处理(剪切/复制/粘贴/重复/删除行)、持续高亮等。
盘点开发者最喜爱的十大开源Xcode插件
那些不能错过的Xcode插件

开源

开源利弊浅谈 - 张超耀

开源?

  • 开源,(Open Source)全称为开放源代码。开源就是要用户利用源代码在其基础上修改和学习的。

优势何在?

  • 优势1:花费很少(如果有的话),许可费用
    • 当然,这往往省去那些讨厌的维护费用。
  • 优势2:易于管理
    • 只要你想,你可以在尽可能多的地方安装开源软件。无需为许可证合规性计数、跟踪或监视。
  • 优势3 :连续,实时改进
    • 因为每个人都可以访问源码,任何人都可以主动修改BUG,使其变得更好,而不必等待下一个版本。
  • 优势4:公司独立
    • 如果创建该软件的公司挂掉,代码仍然可以通过其用户社区继续存在和发展。
  • 优势5 :实践的探索
    • 我们可以很容易地“亲身探索”源码,以便更好地了解产品并作出改善。

劣势显著

  • 缺点1 :它不是完全免费
    • 开源软件可以涉及意料之外的实施、管理和支持成本。
  • 缺点2:学习曲线(技术支持)
    • 你可能在开源的产品上需要聘请专家,让自己加快速度。
  • 缺点3:迷茫的用户
    • 由于并行发展的努力在进行中,用户可能不知道哪个版本做什么或是否与你专有平台上的其他软件兼容。
  • 缺点4:孤立软件
    • 由于关键的程序员的斗争和退出,或他们失去兴趣转移到新的项目,使一些开源项目陷于停顿和死亡。
  • 缺点5:独立地(凭自己的力量)
    • 与商业产品不同,没有人在开源社区义务来帮助你,或回答你的任何问题。

开源,仁者见仁智者见智

与开源有关的小故事 - 曾铭

  • 比尔·盖茨
    • 软件私有,保护版权
    • 1976 年 《致计算机爱好者的公开信》
  • 理查德.斯托曼
    • Free Soft
    • GNU,GPL,Emacs,GCC
    • 推荐两本书:《大教堂与集市》《Just for Fun》
    • HHKB ;)
  • 思考
    • 开源软件和私有软件哪个质量更高?
    • 怎样参与开源?:
      • Github
      • 开源就是一种开放交流的态度
      • 不怕暴露自己的傻 X,(每个人都认为自己是对的,)万一对了呢 ;)
  • 最后再推荐一部纪录片:互联网之子

我如何接触开源 - 潘君

  • github trending

    • 代码 trending
      • 寻找有潜力的开源项目
    • 开发者 trending
      • 好的开发者应该不止一个好软件 顺藤摸瓜比较方便
  • 苹果官方开源

  • 开源软件闲暇阅读工具

    • CodeNav - 移动端优秀的代码查看软件
      • 优点
        • 支持多种方式导入源码
        • 交互不错 各种操作都算是方便
      • 缺点
        • 大屏支持还有bug
        • 不支持swift语法高亮

参与开源软件的心得 - 王胜

  • 参与方式:
    • 泡开源官方网站论坛,并参与issue讨论
    • 修改源码,生成patch文件,发给社区维护者
    • 有了Git && Github后,可以fork分支,修改代码,发送pull request
  • 参与过程情绪波动:
    查看源码 -> 领悟学习 -> 发现问题 -> 动手解决 -> 跟社区提交者沟通纳入源码树 or 通过github发送pull request
    -> 上游采用 -> 成就感十足。从而形成良性持续性参与感,并参与其中。
  • 收获心得:
    • 一次提交只做一件事
    • 提交说明规范、简单、见名知意。后续参与者看提交树就能看到软件的演化历史
    • 代码开源,足够多的眼睛,使bug无处可藏
    • 开源导致世界范围内可见,代码的创意来自于全球智慧的汇聚

OkHttp开源框架介绍 - 李仙鹏

SPDY

Google开发的基于TCP的应用层协议,用以最小化网络延迟,提升网络速度,优化用户的网络使用体验。SPDY并不是一种用于替代HTTP的协议,而是对HTTP协议的增强。

新协议的功能:

  • 数据流的多路复用
  • 请求优先级
  • HTTP报头压缩。
  • 服务器推送(即Server Push技术)

谷歌表示,引入SPDY协议后,在实验室测试中页面加载速度比原先快64%。

现在已经被Google弃用,推出新的基于SPDY实现的HTTP2.0。

HTTP2.0

HTTP也是基于TCP的应用层协议,大家熟知的为:

  • HTTP 0.9,只有基本的文本 GET 功能。
  • HTTP 1.0,完善的请求/响应模型,并将协议补充完整。
  • HTTP 1.1,在 1.0 基础上进行更新,增加了如 长久连接 keep-alive 与 chunked 等功能。

HTTP 2.0在2013年8月推出,基于Google的SPDY开发。

OkHTTP

OKHTTPis an HTTP client that’s efficient by default:

  • HTTP/2 and SPDY support allows all requests to the same host to share a socket.
  • Connection pooling reduces request latency (if SPDY isn’t available).
  • Transparent GZIP shrinks download sizes.
  • Response caching avoids the network completely for repeat requests.

OkHttp supports Android 2.3 and above. For Java, the minimum requirement is 1.7.
You’ll also need Okio, which OkHttp uses for fast I/O and resizable buffers.

如何推广自己的开源项目(github获取更多的star) - 杨志平

前言

你可能花费几天甚至几个月时间开源一个你写的代码,但是没有人去使用它,靠运气的话可能可以推广. 现在我讲讲如何让人们关注我们的作品。该要点是打破下面的图片的循环

图片一

六步(4-6是秘诀)

  1. Projects are Everything
  • Read and Research
  • Building the Repo
  • README 文件
  • 图解
  • 更新反馈

1.Projects are Everything

开源代码就是给其他程序员解决问题或者节约时间的

2.Read and Research

很多问题都已经解决成千上万次了
你可以想一个你感兴趣的开源项目,上网搜索确认它的实现是不是已经有很多人实现了并有很多人已经使用它了,那就忘了这个想法。但是如果没有,或者解决方案不理想(可以通过issues查看他们的不足)你有时间的话就建一个和他们相识的开源项目,修复一些issues使用自己的文档(感觉有点无耻,但听说很有效)

3.Building the Repo

有一点就是,通常我们后面的repo的star增加速度比以前的repo要快挺多的,可能是以前的repo使得更多人认识你相信你。

4.README 文件(推荐布局方案)

图片2

5.图解(特效,一目了然)

Flipboard playing multiple GIFs

6.更新反馈

完成以上步骤,并不断更新开源库及时解决issues里面的bug就很有希望进入
star趋势
图片2
贡献名人
图片2

开源协议 - 吴明

  • 无规矩不成方圆,开源协议

    • BSD开源协议:满足三个条件
      • 如果再发布的产品中包含源代码,则在源代码中必须带有原来代码中的BSD协议
      • 如果再发布的只是二进制类库/软件,则需要在类库/软件的文档和版权声明中包含原来代码中的BSD协议
      • 不可以用开源代码的作者/机构名字和原来产品的名字做市场推广
        • Apache Licence 2.0:(关心软件的专利问题,但同样希望宽松,选择这个协议)
        • 需要给代码的用户一份Apache Licence
        • 如果你修改了代码,需要再被修改的文件中说明。
        • 在延伸的代码中(修改和有源代码衍生的代码中)需要带有原来代码中的协议,商标,专利声明和其他原来作者规定需要包含的说明
        • 如果再发布的产品中包含一个Notice文件,则在Notice文件中需要带有Apache Licence。你可以在Notice中增加自己的许可,但不可以表现为对Apache Licence构成更改
    • GPL:(Linux)(希望代码使用者同样能把他们的贡献分享出来,那就选择GPL)

      • GPL协议和BSD, Apache Licence等鼓励代码重用的许可很不一样
      • 代码的开源/免费使用和引用/修改/衍生代码的开源/免费使用,但不允许修改后和衍生的代码做为闭源的商业软件发布和销售
      • 由于GPL严格要求使用了GPL类库的软件产品必须使用GPL协议,对于使用GPL协议的开源代码,商业软件或者对代码有保密要求的部门就不适合集成/采用作为类库和二次开发的基础。
    • MIT:(简单、宽松,”为所欲为”,选择这个协议)

      • 类似BSD协议
    • Mozilla

    • LGPL

      • LGPL是GPL的一个为主要为类库使用设计的开源协议。和GPL要求任何使用/修改/衍生之GPL类库的的软件必须采用GPL协议不同。LGPL允许商业软件通过类库引用(link)方式使用LGPL类库而不需要开源商业软件的代码。这使得采用LGPL协议的开源代码可以被商业软件作为类库引用并发布和销售。
    • 说了这么多最后一个开源协议的选择

    • 其他

博客分享主题

2015.06.05 - 博客分享主题

android学习网站 - 王胜

  • Android官网
    • 官方SDK
    • 官方API文档
    • 官方training教程
    • 官方Sample【1.x之后的Android Studio有直接导入Sample的功能】
  • 任玉刚博客
    专注Android底层实现机制解析

android博客与学习网站 - 李仙鹏

博客框架与网站&&博客推荐 - 杨志平

常见博客框架
常见iOS开发博客网站

Android博客分享 - 吴明

  • 代码家

    • 最新好玩的android效果
    • 1到2周更新一次
    • 提供源码
  • 郭霖博客

    • 资深Android开发工程师、架构师
    • 畅销技术书籍《第一行代码——Android》
    • 博客主要针对android的最新技术分享透彻逻辑性强
  • android性能优化

    • 学习Android应用开发的绝佳资料
    • Google Android团队在2012年的时候开设了Android Training板块
  • Android开发资源汇总

博客工具与博客推荐 - 潘君

聊聊静态博客平台 - 曾铭

  • WordPress
  • Blogger
  • Tumblr
  • Ghost (node.js) WordPress 替代
博客的需求:

>

  • 写文章:(markdown,draft,category,tag)
  • 交流:评论、社区
  • 好看:theme(排版、中文排版、代码)
  • 好玩:自定义
  • 域名
静态博客

>

  • 博客何必动态生成,静态页面即可
  • 评论用第三方:多说,Disqus

  • Jekyll (Github Pager)ruby

  • Octopress 基于 Jekyll
  • Hexo (node.js)
非静态

>

  • 我只是想『漂亮』的写文章

  • Scriptogr.am

    • dropbox 同步
    • 自定义主题
  • FarBox
    • dropbox 同步
    • 自定义主题
    • Mac 客户端
  • pancake.io
  • Medium
    • 有社区,大部分是设计师
    • 漂亮
    • 有 App
    • 不能导出 md
  • Logdown
  • 作业部落
  • 简书
大道无形

>

技术博客分享 - 张超耀

  • 唐巧的技术博客(记录下自己学习的点滴)

    • 唐巧:猿题库iOS开发工程师,给InfoQ的「iOS 开发周报」供稿,并且转载到个人博客上。
  • ITeye

    • ITeye起源:ITeye即创办于2003年9月的javaEye,缘起是创始人范凯自己在学习和研究java的开源框架却发现没有一个讨论的地方,于是自己就办一个。
    • 一个优秀的Java学习交流分享平台。

构建基于Jenkins+github的持续集成环境

  • 什么是持续集成

  • 持续集成的流程

    • CI服务器控制持续集成的整个过程,轮询代码库更新,根据预定义的脚本进行项目的构建,服务器将任务分配到Slave端
  • 为什么采用Jenkins+github的持续集成环境

    • Jenins是现在非常流行的持续集成CI服务器,Jenkins易于安装,不需要数据库的支持,直接通过Web界面进行配置,而且集成了Email的通知机制,具有丰富的插件。
    • 对于版本控制,SVN & Git,Jenkins都有提供插件支持
  • Jenkins安装

  • 丰富插件安装
  • 环境配置
  • 构建项目
  • 配置构建方法

项目开发前期注意细节探讨

  • 需求明朗
    • 最好有明确的需求说明文档
    • 能够及时和设计、PM沟通反馈,有效跟进需求变更
    • 工程师前期做好想法融合,先把需求想法抛出,不要等到研发过程中
  • 设计明确
    • 在研发过程中,功能和设计达到高度统一,不要做功能的时候忽略UI设计(前期UI设计模块尽量不要留下太多后期需要填补的坑)
  • 代码质量
    • 注释:在代码中一些自己写的方法尽量注释(功能、参数,使用)
    • code review(代码review很重要)
    • 复用
  • 团队协作
    • 沟通
    • 前期规划
    • 后期测试