2014年4月 ’ 的文章存档

代码手写UI,xib和StoryBoard间的博弈,以及Interface Builder的一些小技巧

code-xib-sb

 

最近接触了几个刚入门的iOS学习者,他们之中存在一个普遍和困惑和疑问,就是应该如何制作UI界面。iOS应用是非常重视用户体验的,可以说绝大多数的应用成功与否与交互设计以及UI是否漂亮易用有着非常大的关系。而随着iOS开发发展至今,可以说在UI制作上大家逐渐分化为了三种主要流派:使用代码手写UI及布局;使用单个xib文件组织viewController或者view;使用StoryBoard来通过单个或很少的几个(关于这点稍后会进行展开)文件构建全部UI。应该使用哪种方式来制作UI已经是iOS开发中亘古不变的争论话题了,或许永远不会有一个统一的结论。但是首先需要知道的是三种方式各有优劣,所以也各有自己最适用的场合,而不会有完全的孰优孰劣。对于初学iOS开发来说,一时间其实是很难判定最适合自己的UI架构方式的。在这篇文章里我希望能够通过自己的经验给出一些意见,以期能帮助入门者来挑选最适合自己应用场景的方案。对于老鸟的话,也不妨对照自己平日的使用习惯和运用场景,看看有没有可以改进或变化的地方。最后,因为我本人现在最习惯和喜欢的是用Interface Builder(之后简称IB)及xib来做UI,所以文末附上了一些IB使用时候的小技巧,算是做个总结。

代码手写UI

这种方法经常被学院派的极客或者依赖多人合作的大型项目大规模使用。Geek们喜欢用代码构建UI,是因为代码是键盘敲出来的,这样可以做到不开IB,手不离开键盘就完成工作,可以专注于编码环境,看起来很cool很高效,而且不到运行时大家都不知道会是什么样子,也显出了程序员这一职业的高大上及神秘气息(这个真的不是在黑..想想大家一起在设计师背后指点江山的场景吧)。大型多人合作项目使用代码构建UI,主要是看中纯代码在版本管理时的优势,检查追踪改动以及进行代码合并相对容易一些。

另外,代码UI可以说具有最好的代码重用性。如果你的目的是写一些可以高度重用的控件提供给其他开发者使用,那毫无疑问最好的选择应该是使用代码来完成UIView的子类。这样进一步的修改和其他开发者在使用时,都会方便不少。使用代码也是最为强大的,会有xib或者StoryBoard做不了的事情,但是使用代码最终一定能够完成所要的需求。
阅读全文

应用 Valgrind 发现 Linux 程序的内存问题

如何定位应用程序开发中的内存问题,一直是 inux 应用程序开发中的瓶颈所在。有一款非常优秀的 linux 下开源的内存问题检测工具:valgrind,能够极大的帮助你解决上述问题。掌握 valgrind 的使用以及工作原理,能够有效地定位进而避免应用开发中的内存问题。

Valgrind 概述

体系结构

Valgrind是一套Linux下,开放源代码(GPL V2)的仿真调试工具的集合。Valgrind由内核(core)以及基于内核的其他调试工具组成。内核类似于一个框架(framework),它模拟了一个CPU环境,并提供服务给其他工具;而其他工具则类似于插件 (plug-in),利用内核提供的服务完成各种特定的内存调试任务。Valgrind的体系结构如下图所示:

图 1 Valgrind 体系结构

image001
阅读全文

金庸笔下的良好代码风格

(文/王路)

我零九年看过一本小说,讲程序员的故事,从此,了解了一个新物种。最近又看《红楼梦》,史湘云有条谜语:“溪壑分离,红尘游戏,真何趣?名利犹虚,后事终难继。”我一想,这不就是程序猿吗?

我学过半年编程,唯一的收获是记住了一个名字叫谭浩强。读了那本小说,我知道还有个东西叫“良好的代码风格”,这几个字可比谭浩强有意思多了。可以跨领域应用,比方说,用在写作上。

例如,变量的命名。像本文,如果叫《论良好的代码风格》,姿态就不佳,一个“论”字就让读者反胃了。如果叫《如何写出良好风格的代码》,太装了,好像自己是编程大师似的。换一种叫法,《扯扯良好代码风格的淡》,就好比南锣鼓巷走了一圈,感觉亲民多了。
阅读全文

mysql 性能优化方案

内容简介:这是一篇关于mysql 性能优化的文章。网上有不少mysql 性能优化方案,不过,mysql的优化同sql server相比,更为麻烦,同样的设置,在不同的环境下 ,由于内存,访问量,读写频率,数据差异等等情况,可能会出现不同的结果,因此简单地根据某个给出方案来配置mysql是行不通的,最好能使用status信息对mysql进行具体的优化。

mysql> show global status;

可以列出MySQL服务器运行各种状态值,另外,查询MySQL服务器配置信息语句:
mysql> show variables;
一、慢查询
mysql> show variables like ‘%slow%‘;
+——————+——-+
| Variable_name     | Value |
+——————+——-+
| log_slow_queries | ON     |
| slow_launch_time | 2      |
+——————+——-+

mysql> show global status like ‘%slow%‘;
+———————+——-+
| Variable_name        | Value |
+———————+——-+
| Slow_launch_threads | 0      |
| Slow_queries         | 4148 |
+———————+——-+
配置中打开了记录慢查询,执行时间超过2秒的即为慢查询,系统显示有4148个慢查询,你可以分析慢查询日志,找出有问题的SQL语句,慢查询时间不宜设置过长,否则意义不大,最好在5秒以内,如果你需要微秒级别的慢查询,可以考虑给MySQL打补丁:http://www.percona.com/docs/wiki/release:start,记得找对应的版本。
打开慢查询日志可能会对系统性能有一点点影响,如果你的MySQL是主-从结构,可以考虑打开其中一台从服务器的慢查询日志,这样既可以监控慢查询,对系统性能影响又小。
阅读全文

XMLHttpRequest实现HTTP协议下文件上传断点续传

 

一、网盘割据的时代

不知大家有没有观察过,在秋季,也就是眼下这个时间,当阵风挂起的时候,地上的落叶就会以一个接一个,翻滚着一同被吹走,这就是“跟风”。老祖宗确实很有智慧,造出来的词语源于生活,又高于生活。

眼下,又是另一波跟风之势——“网盘”,犹如当年团购一样。不过,网盘还是有一定的技术和其他成本,因此,还不像团购那样“落叶漫天飞舞”的状态。但是,各大公司相继介入,可谓又是另外一场群雄之战。

1

 

我并不是专业的产品人,也不是公司的决策者,因此,面对一些纷杂繁芜的现象,自己无心去深入,也不会去评价。立志做个技术人,因此,我所关心的可能就是技术实现,至于孰对孰错,恩怨情仇,公关伎俩,生死天命等一概作云烟从眼前飘过。
阅读全文

Linux 系统实时监控的瑞士军刀—Glances

早些时候,我们提到过有很多可以用来监视系统性能的 Linux 系统监视工具。 但我们估计,或许更多的用户会倾向与绝大多数 Linux 发行版都带的工具 (top 命令)。

top 命令是 Linux 下的一个实时任务管理器, 同时也是用于在 GNU/Linux 发行版中寻找系统性能方面的瓶颈,并帮助我们作出正确操作的常用系统监视工具。 她有着一个极为简洁的界面,并自带少量的可以帮助我们快速了解系统性能的实用选项。

但是,有些时候想要通过她寻找一个占用系统资源比较大的应用或进程可能会比较困难。 因为 top 命令本身并不会帮助我们高亮那些吃太多 CPU,内存,或者其他资源的程序。

为了达到这个目标,这里我们将介绍一款超牛逼的系统监视程序 —— Glances。 她可以自动高亮利用最高系统资源的程序,并为 Linux/Unix 服务器提供尽可能多的信息。

什么是 Glances?

Glances 是一个由 Python 编写,使用 psutil 库来从系统抓取信息的基于 curses 开发的跨平台命令行系统监视工具。 通过 Glances,我们可以监视 CPU,平均负载,内存,网络流量,磁盘 I/O,其他处理器 和 文件系统 空间的利用情况。
阅读全文

从咖啡馆的经营看Web应用的扩展

译注:这是一篇趣文,作者是Vistaprint的工程师Sriram Devadas,他用如何经营一家咖啡馆作为例子来讲解Web应用所面临的扩展问题,文章生动有趣,讲解浅显易懂。

我经营着一家咖啡馆。经营成本同所用的资源成正比。

我的咖啡馆店面大概有一百平方英尺(约九平方米),雇佣了一个咖啡师,一台咖啡机。
阅读全文

Linux shell 变量 数学 运算

1, Linux shell 变量的基本运算

数值作为常规变量直接赋值给变量,并且以字符串形式保存。

1.1 let 命令可以用于直接执行基本操作:

当我使用 let 的时候,我们不使用 $ 符号引用变量。

no1=7;
no2=8;
echo "------------ let command -------------"
let no1++;
let no2--;
let no1+=3;
let no2-=5;
let result=no1+no2;
printf "let result=%d\n" $result;

ooo

1.2 “ [ ] “运算符跟 let 命令很相似:

“[ ]” 运算符里面可以使用 $ 符号引用变量,同时支持变量名与运算符之间不带空格。
阅读全文

java concurrent 探秘

我们都知道,在JDK1.5之前,Java中要进行业务并发时,通常需要有程序员独立完成代码实现,当然也有一些开源的框架提供了这些功能,但是这些依然没有JDK自带的功能使用起来方便。而当针对高质量Java多线程并发程序设计时,为防止死蹦等现象的出现,比如使用java之前的wait()、notify()和synchronized等,每每需要考虑性能、死锁、公平性、资源管理以及如何避免线程安全性方面带来的危害等诸多因素,往往会采用一些较为复杂的安全策略,加重了程序员的开发负担.万幸的是,在JDK1.5出现之后,Sun大神(Doug Lea)终于为我们这些可怜的小程序员推出了java.util.concurrent工具包以简化并发完成。开发者们借助于此,将有效的减少竞争条件(race conditions)和死锁线程。concurrent包很好的解决了这些问题,为我们提供了更实用的并发程序模型。
Executor                  :具体Runnable任务的执行者。
ExecutorService           :一个线程池管理者,其实现类有多种,我会介绍一部分。我们能把Runnable,Callable提交到池中让其调度。
Semaphore                 :一个计数信号量
ReentrantLock             :一个可重入的互斥锁定 Lock,功能类似synchronized,但要强大的多。
Future                    :是与Runnable,Callable进行交互的接口,比如一个线程执行结束后取返回的结果等等,还提供了cancel终止线程。
BlockingQueue             :阻塞队列。
CompletionService         : ExecutorService的扩展,可以获得线程执行结果的
CountDownLatch            :一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。
CyclicBarrier             :一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点
Future                    :Future 表示异步计算的结果。
ScheduledExecutorService :一个 ExecutorService,可安排在给定的延迟后运行或定期执行的命令。
阅读全文

无插件 Vim 编程技巧

作者@左耳朵耗子   来源:酷壳网

我在这里把我日常用Vim编程的一些技巧列出来给大家看看,希望对大家有用,另外,也是一个抛砖引玉的过程,也希望大家把你们的技巧跟贴一下,我会更新到这篇文章中。另外,这篇文章里的这些技巧全都是vim原生态的,不需要你安装什么插件。我的Vim的版本是7.2

浏览代码

首先,我们先从浏览代码开始。有时候,我们需要看多个文件,所以,传统的做法是,我们开多个tty终端,每个tty里用Vim打开一个文件,然后来回切换。这很没有什么效率。我们希望在一个Vim里打开多个文件,甚至浏览程序目录。

浏览目录的命令很简单:(你也可以直接vim一个目录)

:E

注意,是大写。于是,你会看到下面这样的界面:
阅读全文