老Y是一个有着十多年经验的软件开发工程师。下面是老Y和代码架构设计有关的故事。 在软件开发者的职业生涯当中,一定会遇到大量关于代码架构方面的名词,比如“可维护性”、“可扩展性”、“高内聚低耦合”、“组件化”、“分层架构”、“SOLID”等等。在短短几十年的计算机历史中,涌现了大量有关软件架构的经典著作,对架构进行了极其全面又深入的讨论,这些著作基本来自于在软件行业有着数十年经验的大神们。既然已经有了这些全面、系统、深入的架构著作,为什么还要写这篇文章? [read more]
Stay Hungry, Stay Foolish —— Steve Jobs 成长是一个长久的话题,尤其是我们身处科技爆炸的信息时代。吴军在《浪潮之巅》中说: 科技的发展不是均匀的,而是以浪潮的形式出现。每一个人都应该看清楚浪潮,赶上浪潮,如此,便不枉此生。 —— 吴军 我们也同样处于这样一股浪潮之中,这是最好的时代,过去几十年中的技术变革超过了数百年,我们每天都有可能做着改变世界的事情,一行代码可能影响数以千万的用户。这也是最坏的时代,面对着技术的爆炸式更新,技术以比以往任何一个时候都快的速度被淘汰,每个人都面临着巨大的压力,焦虑时刻伴随着我们。 [read more]
老Y是一名iOS开发,近日在工作遇到一个闪退,临近提交App Store时才发现,虽然紧急修复后顺利提交审核,但由于问题暴露的时间过晚,因此引起了众多额外的关注。问题本身理应很容易发现,但为什么临近审核才反馈,老Y为了分析该问题,花了六天的时间才找到原因。在一个具有数百个模块的大型App中,如何根据各种蛛丝马迹找出问题根因?本文记录了老Y追查该问题的六个日与夜。 [read more]
前段时间在制作一个PPT时,效果总是不尽如人意,各种图表与文字完全不知放在哪里才合适。试了很多所谓好的模板,但很难将想要呈现的内容与这些模板完美的融合在一起,只能够生搬硬套模板中的样式,一旦版面的内容有所不同时,套用出来的效果就变得很差。网络上的PPT模板千千万,哪款才是适合的那一个?于是想着有没有一些通用的制作PPT的原则,可以让我们设计自己的模板,对于包含很多图表、数据、文字的页面,如何设计才能够让整个页面看起来没有那么业余,虽不一定要精美,但总不致于到难看的程度。看了很多介绍如何设计PPT的文章,但大多给出了结果,但不知道为什么要这么做,遇到自己的场景时依然没有头绪。还有很多文章都是介绍如何制作酷炫的动画,在使用PowerPoint的层面,这些都是术,有没有一种从更高层次来介绍如何设计的书?经过一番搜索,最终找到这本《写给大家看的设计书》。 所以这是一篇《写给大家看的设计书》的读后感,可能对于与我一样在制作PPT过程中充满困惑的朋友们有所帮助。 [read more]
进入iOS开发这些年,今年终于有机会去参加一次WWDC,朋友们笑称,这是趟朝圣之旅,我想也并不为过。 [read more]
单元测试在软件开发中一直有着极其重要的地位,iOS的开发也不例外。随着App规模的不断膨胀,开发也逐渐的趋向模块化,开发者常常以库的形式封装功能,最后组成App。此时由于App结构变得复杂,各种库又可能存在着相互依赖的缘故,单元测试也随之变得复杂起来。开发者可能面临着一系列问题,比如:单元测试如何处理这些依赖?如何在真机上运行测试?如何在App所在的环境中运行测试?本文将用一个模拟的开发环境逐一进行讨论。 [read more]
使用过iPhone或者iPad的朋友在拍照时不知是否遇到过这样的问题,将设备中的照片导出到Windows上时,经常发现导出的照片方向会有问题,要么横着,要么颠倒着,需要旋转才适合观看。而如果直接在这些设备上浏览时,照片会始终显示正确的方向,在Mac上也能正确显示。最近在iOS的开发中也遇到了同样的问题,将拍摄的照片上传到服务器后,再由Windows端下载该照片,发现手机上完全正常的照片到了这里显示的横七竖八。同一张照片为什么在不同的设备上表现的不同?如何能够避免这种情况?本文将和大家一一解开这些问题。 [read more]
最近在使用UIButton的过程中遇到一个问题,我想要获得手指拖动button并离开button边界时的回调,于是监听UIControlEventTouchDragExit事件,如文档所述: An event where a finger is dragged from within a control to outside its bounds. 这个事件正是我所需要的,可是最后却发现当手指离开button边界时,事件并没有触发,而是到了远离button近70个像素时才收到回调。 [read more]
不知各位有没有过这样的经历: Linux上创建的文件在Windows上打开时,结果所有内容会挤成一行。而Windows上创建的文件在Linux上打开时,每一行的结尾又多了一个奇怪字符^M。 在安装Windows版的git时,安装向导在某一步会提示你选择”Configuring the line ending conversions”,里面提到了Windows-style和unix-style的line endings,为什么会有这些呢? 调用C语言的API fopen时,会有text mode和binary mode,这两者有什么区别? 其实这一切都和我们常说的回车换行有关,但你有没有很奇怪,什么是回车?直接用换行不就好了,为什么要分开两个词?我们使用的键盘上的键明明起得是换行的作用,为什么叫回车?千万别被绕晕了,本文将和大家讨论有关回车换行的一段有趣的历史,随后将回答这些问题。 [read more]
近日在使用ssh命令ssh user@remote ~/myscript.sh登陆到远程机器remote上执行脚本时,遇到一个奇怪的问题: ~/myscript.sh: line n: app: command not found app是一个新安装的程序,安装路径明明已通过/etc/profile配置文件加到环境变量中,但这里为何会找不到?如果直接登陆机器remote并执行~/myscript.sh时,app程序可以找到并顺利执行。但为什么使用了ssh远程执行同样的脚本就出错了呢?两种方式执行脚本到底有何不同?如果你也心存疑问,请跟随我一起来展开分析。 [read more]