关于创客


一、了解创客

刚开始接触创客,对创客的概念还是挺模糊的。于是上网找了下相关的资料和博客,给自己扫盲一下。

什么是创客?

创客是那些愿意动手实现自己想法的人,“动手实现”和“自己的想法”是创客概念的两大核心。创造的欲望深植人类本性之中, 比如孩子们利用积木、乐高做出一些通常没有意义的东西后仍会感觉到巨大的成就感。

创客是什么意思?

创客是“Maker”一词的中文译名。创客(Maker)的“创”也是“创造(Make)”的“创”,是从无到有生成一件事物的过程,而不是“创新(Innovate)” 或“创业(Entrepreneurship)”。 详细资料,请查阅 程序员杂志-理解创客

二、加入创客

通过一番扫盲后,对“创客”有了一个比较完整的了解后才发现,不一定要很厉害的牛人才有资格成为创客。只要你想,就能成为创客!

那么,怎么开始我的创客之旅呢?

一些想法:

最近的共享单车这么火,我们能不能给它添加一些个性化的配件呢?

例如,给它添加一个迷你的智能灯环。

想制作的几个理由:

1、现在的共享单车都没有夜间提示灯,夜间在路况不好等环境下,容易发生意外。

2、虽然算不上骑行爱好者,但是时不时也有约上三五好友去深圳湾骑行。当我们自己的车队闪着一致的 logo 灯光,穿梭在黑夜中,是不是也算是一中别样风景和体验呢。

3、待续。。

想达到的效果:

1、轻巧,方便携带。

2、免安装,比如类似记忆手环那样,可以快速缠绕在自行车或者手上。

3、可 DIY 颜色和灯效。

4、待续。。

PS:

有时候挺想制作类似机器人,机器蜘蛛等这样的东西来的,但是考虑到自己的能力和时间精力有限,太复杂的作品可能没个一年半年都出不来。所以我更多的会往小型的配件方面想,找一个稍微容易实现一点的作品,自己用一用,体验一下创客的乐趣和成就感。

2016年终总结


一、2016 给自己定了什么目标:

工作方面:

  • 2016 上半年:多方面的项目开发和练习,通过工作丰富项目经验。

  • 2016 下半年:希望能达到熟练独立开发完整项目的能力。

技术积累方面:

  • 1、在 2016 年 4 月- 5 月之间:学习 Swift 语言,并用 Swift 语言写一些功能性的模块。  

  • 2、2016 年:坚持每个礼拜写一篇技术博客,发布到自己的技术博客上,完善自己的知识结构。  

  • 3、上网多看一些项目框架搭建的书籍。  

综合能力提升方面:

  • 1、 平时尽量多关注一些互联网技术和产品,开拓视野。

  • 2、有意识的训练自己的口头表达能力和交际能力。

  • 3、每周去健身房 3 次,提高体质体能。

2016 对自己总的目标:

跳出舒适圈,学习新的知识,提高自身能力,获得更好回报,健康生活;

二、2016 做了什么:

工作方面:

  • 1、独立完成了一个完整的 mesh 灯项目,更加深入的理解底层蓝牙相关的通信和应用。

  • 2、参与几个项目的开发,例如灯类的(畅达,iLight3.0, Lightstory),车载类的(爱车听,索浪等),音箱类的(蔚乐音箱);     通过这些项目的练习,感觉对oc这门语言更加的亲切和熟练,app 应用开发的能力也得到了整体的提高。

  • 3、参与了新技术的开发,例如蓝牙组网 mesh,和 ibeacon 蓝牙广播,个人技术能力和业务沟通协调能力也相应得到了一些提高。

技术积累方面:

  • 1、建立了个人博客 arrfu , 在上面写了一些平时遇到的一些问题和知识总结。

  • 2、正在学习 swift3 的一些语法知识。

  • 3、github 上积累一些有用的框架,总结和 Demo。

  • 4、有时候逛了下 stackoverflow ,顺便解答和提问下问题。

综合能力提升方面:

  • 1、最近才开始睡觉前用喜马拉雅听一些互联网相关的广播,例如逻辑思维,雷科技等,也有听一些娱乐和生活类的。

  • 2、口头表达能力和交际能力这块今年几乎没有锻炼到,得好好反省下,想下有没有别的更好的办法来锻炼下。

  • 3、健康方面,去健身房的次数和频率都不够,但是每周的羽毛球锻炼基本能坚持下来;身体健康精神方面也有了一点改善。

三、2016 留下了什么遗憾:

工作方面:

  • 1、对一些复杂的界面和模块类应用开发的比较少,对这块的整体把控和开发能力比较不足。

  • 2、对框架的搭建,整体项目的把控和开发能力比较不足。

技术积累方面:

  • 1、对 iOS 的一些进阶运用比较不足,例如 runtime 机制,绘制,渲染,性能优化,安装包大小优化等。

  • 2、个人博客积累总结的比较少,定下的一周一篇博客的目标也没有完成。

  • 3、swift 学的进度太慢,只学到语法阶段,离年初定下的用 swift 写一些功能性模块的目标相差很远。

  • 4、个人一些常用的工具类封装和积累的较少。

  • 5、平时上一些技术网站逛的比较少,例如 http://stackoverflow.com ,http://www.cocoachina.com 之类的。

综合能力提升方面:

  • 1、平时较少主动的去了解互联网相关的,科技类的新技术和新产品,视野很窄。

  • 2、业务沟通和团队协调能力需要提高。

  • 3、健康方面,年初定下的要练到130斤和大胸肌,现在还是这鸟样,只长了两三斤;是个比较大的遗憾,需要调整。

四、2016 总结:

总的来说,2016 是我比较重要的一年,无论对应用开发的经验和能力,都得到了一定的提高;但也有挺多不足和遗憾。

2016 给自己总结了几个关键字:

不自觉,不坚持,不全面。

五、2017 给自己定下的目标和规划:

工作方面:

  • 1、争取独立开发一两个偏软件的应用,提高对项目的把控和开发能力。

  • 2、多做一些对框架的搭建,模块开发和封装相关的项目。

技术积累方面:

  • 1、对 iOS 开发进阶的学习,通过视频资料,项目等途径,要达到熟练开发的程度。

  • 2、个人博客积累总结,需要达到平均 2 周一篇的小目标。

  • 3、swift 新技术的学习,需要在 3 月份之前学完所有语法和基本使用,7 月份之前达到熟练重写一些简单模块和界面的能力, 11月份之前要达到熟练开发项目的能力。

  • 4、积累和总结个人常用的工具类,做好封装放在 GitHub 仓库中,需要达到拿来就能直接用的高效开发。

  • 5、要多上技术相关的网站,比较重要的网站,例如 http://stackoverflow.com ,先定它一个小目标,比如到 2017 年底,要达到 300 分。(目前是 102 分)

综合能力提升方面:

  • 1、多关注了解一些互联网相关的,科技类的新技术和新产品;目前想到的途径是:喜马拉雅,技术网站,新闻。

  • 2、提高自己的专注度,提高业务能力,团队协作能力和高效开发能力。

  • 3、健康方面,一周 2~3 次健身房的频率;多参加一些活动,每天坚持吃一个苹果;目标:将身体无机盐含量调整到健康值,体重增加到 130 斤。(目前是 117~120 斤之间)

目标清单:

  • 1、个人博客平均每 2 周写一篇博客。

  • 2、GitHub 开源 2 个项目,每个项目收获 10 个 Star。

  • 3、StackOverflow 新增 200 reputation。

  • 4、SegmentFault 新增 50 声望。  

  • 5、swift3 需要在 3 月份之前学完所有语法和基本使用,7 月份之前用 swift 写一个小应用发到 GitHub 上。

2017 对自己总的目标:

扎实技术,高效办事,全面能力,健康身体,愉快生活!

每月进度更新:

2017 可量化的目标如下:

时间:2017 年 01 月 16 日 - 2017 年 12 月 31 日

  • 1、个人博客平均每 2 周写一篇博客。
    完成度:Blog-arrfu **+ 1 **

  • 2、GitHub 开源 2 个项目,每个项目收获 10 个 Star。
    完成度:GitHub-arrfu

  • 3、StackOverflow : Reputation 102 -> 300。
    完成度:StackOverflow-arrfu

  • 4、SegmentFault : Reputation 29 -> 80。
    完成度:SegmentFault-arrfu + 5 Stars [9%]

  • 5、swift3 需要在 3 月份之前学完所有语法和基本使用,7 月份之前用 swift 写一个小应用发到 GitHub 上。
    完成度:

免费搭建个人博客的几种高效方案


一、博客搭建可行性方案:

就我目前所了解到的,较多人采用的博客搭建方案有如下几种:  

  • 1、Git+Github+Markdown+jekyll (免费)  
  • 2、Git+Github+Markdown+hexo (免费)
  • 3、虚拟主机+插件+Wordpress (付费)

个人有个不成熟的小建议:

  • 如果你不想付费,也不想备案,那你基本上就已经确定了前面两种方案了,免费版走起。
  • 如果你是高富帅,或者要求较高又不想浪费多余精力在搭建博客上面,那强力推荐采用第三个方案。轻松加愉快,爽的飞起。  

图1

二、博客主题选择:

1)、jekyll主题

官网:http://jekyllrb.com
jekyll主题:http://www.zhanxin.info/themes.html
搭建教程:http://www.arrfu.com/windows_configuration_Jekyll.html

jekyll是一个简单的免费的Blog生成工具,类似WordPress。但是和WordPress又有很大的不同,原因是jekyll只是一个生成静态网页的工具,
不需要数据库支持。但是可以配合第三方服务,例如Disqus。最关键的是jekyll可以免费部署在Github上,而且可以绑定自己的域名。

优点:  

  • 1、jekyll是一个静态文件生成器,网站不需要数据库,只要把自己的博客放到对应的目录即可。
  • 2、能部署到github或者gitcafe上,不需要自己的vps,因为是静态的,迁移起来非常方便。
  • 3、原生支持markdown。现在github默认支持jekyll, 所以原生的文件如果放到github上,它会自动帮你生成静态网站。
  • 4、相对hexo而言,可以直接在github网页版上编辑和发布博客,PC间切换和同步非常方便。(这点本人非常喜欢)

缺点:  

  • 1、jekyll用的liquid语法确实不是对程序员友好的,。不过jekyll功能比hexo强大很多,有时间折腾的可以选它。
  • 2、相对Wordpress而言,没有强大的后台和插件支持,学习成本较高,需要一些网页基础。

2)、hexo主题

hexo主题:https://hexo.io/themes/
搭建教程:http://baixin.io/

Hexo是一个基于node.js的静态博客生成系统,它使用markdown语法来写作,同时支持丰富的自定义标签系统。   
用户在本地安装Hexo系统并进行写作,通过一条命令,Hexo可以自动生成静态页面,并发布到多个平台上。
与传统的博客相比,Hexo可以说是一个本地运行远程发布的博客程序。     

优点:

  • 1、搭建的博客平台,速度快,免费,可以搭建在 Github 上。
  • 2、操作比 Jekyll 简单,命令少,易于记忆。 3.支持markdown,Hexo最终生成的是一个静态博客,这就意味着它拥有其他博客系统无法比拟的低负载与高速度的特性。

缺点:

  • 1、每次在一台新电脑或者别人电脑首次使用时,都要重新安装和配置编译环境,不适合随时随地愉快的写博客。(不能优雅的装逼,略微不爽)
  • 2、相对Wordpress而言,没有强大的后台和插件支持,学习成本较高,需要一些网页基础。

3)、wordpress主题

wordpress主题:https://www.wpdaxue.com/themes/
安装搭建教程:http://ztmao.com/jiaocheng/2352.html

WordPress是一种使用PHP语言开发的博客平台,用户可以在支持PHP和MySQL数据库的服务器上架设属于自己的网站。
用户可以在支持 PHP 和 MySQL数据库的服务器上使用自己的博客。
WordPress有许多第三方开发的免费模板,安装方式简单易用。不过要做一个自己的模板,则需要你有一定的专业知识。
比如你至少要懂的标准通用标记语言下的一个应用HTML代码、CSS、PHP等相关知识。

优点:

  • 1、安装简单方便,甚至很多虚拟主机供应商都提供了Wordpress的一键式安装工具。用户连上传文件的步骤都省了。
  • 2、功能强大,可扩展性高,丰富的插件使用起来更加方便。
  • 3、wordpress搭建的博客对seo搜索引擎友好,收录也快,排名靠前。

缺点:

  • 1、对域名空间要求,wp需要自己购买虚拟主机,低配版大概两百多块。
  • 2、迁移成本高,且插件装多了会变慢。
  • 3、Wordpress对于中小型网站应该是不错的选择,但对于大型的门户网站,数据库、用户管理、内容的分类管理等方面的限制,还是会让Wordpress会有些力不从心的吧。

三、部署博客的主机选择

  • 1、github

  • 2、coding

  • 3、国内付费主机(阿里云,西部数码等)

将博客部署在 github:

优点:

  • 1、对于喜欢经常逛github的童鞋来说,把博客部署在github上或许是再合适不过了。可以直接在github上编辑和发布博客。
  • 2、免费,稳定,使用人多,且对google引擎友好度高。

缺点:

  • 1、国内访问速度慢。
  • 2、百度收录几乎没有,原因是github禁止百度爬虫抓取数据。(这点无疑是巨大的缺点,毕竟在天朝混,使用百度的用户数量还是相当大的)

为什么 Github Pages 禁用了百度爬虫?
官方给出的回复如下:

Sorry for the trouble with this. We are currently blocking the Baidu user agent from crawling GitHub Pages sites in response to this user agent being responsible for an excessive amount of requests, which was causing availability issues for other GitHub customers.

This is unlikely to change any time soon, so if you need the Baidu user agent to be able to crawl your site you will need to host it elsewhere.

Apologies again for the inconvenience.

大致意思就是百度爬虫爬得太猛烈,已经对很多 Github 用户造成了可用性的问题了,而禁用百度爬虫这一举措可能会一直持续下去。

将博客部署在 coding

优点:

  • 1、解决了github上的博客不能被百度爬虫抓取和收录的问题。
  • 2、国内访问速度较快,不需要翻墙。

将博客部署在 国内付费主机

优点:

  • 1、访问速度快,稳定,安全。
  • 2、对搜索引擎友好,便于网站对推广和使用。

总结:

几种方案,各有各的好处。如果你有点网页基础,或者有意向想要了解网站搭建和建设的一些知识,那无疑就是选择前面两种方案了。   
如果自己对网站要求较高又不想浪费多余精力在搭建博客上面,那强力推荐采用第三个方案。   
总的来说,根据个人的需求,采用适合自己的方案,才是正解。   

持续更新中。。。

iOS 处理崩溃的第三方框架 NullSave 和 AvoidCrash 比较


AvoidCrash 功能介绍及使用场景:

  • 这个框架利用runtime技术对一些常用并且容易导致崩溃的方法进行处理,可以有效的防止崩溃。

  • 并且打印出具体是哪一行代码会导致崩溃,让你快速定位导致崩溃的代码。

  • 你可以获取到原本导致崩溃的主要信息<由于这个框架的存在,并不会崩溃>,进行相应的处理。比如: 你可以将这些崩溃信息发送到自己服务器。

  • 你若集成了第三方崩溃日志收集的SDK,比如你用了腾讯的Bugly,你可以上报自定义异常。

github 地址:https://github.com/chenfanfang/AvoidCrash

NullSave 功能介绍及使用场景:

  • 这个框架通过将Null控制替换为nil,而nil是安全的,可以向nil对象发送任何message而不会奔溃。可以有效的防止崩溃。

  • NullSafe 是一个 Category,使用起来非常方便,只要加入到了工程中就可以了。

  • NullSafe在ARC和非ARC中都能使用。

github 地址:https://github.com/nicklockwood/NullSafe

iOS 服务器返回空值NULL及崩溃的解决方式总结


一、产生问题现象及原因:  

客户端在访问服务器接口时,理论上服务器都会返回对应的有效数据。但是在现实开发中,往往会出现不尽人意的情况。例如:

  • 服务器端返回null数据,若直接对该空值进行赋值或访问操作,会导致程序崩溃。

  • 由于接口变动或新需求等原因,常常返回字段缺失或者新增字段等情况,这时候若直接访问缺失字段会导致程序崩溃。

  • 由于服务器开发人员失误或者接口需求变动,将之前约定返回某个字段的类型改变为其他类型;例如json中某个字段为string型,但是服务器端却返回的是int型, 这种情况也很容易导致程序崩溃。

二、解决办法:  

由上面的几个例子可以看出,无论是哪方面的原因,作为一个合格的开发人员,都必须要做好各种情况的处理,提高程序的健壮性。而不是别人随随便便传个空值给你, 你就崩了,这样弱不禁风的应用,想必不是你真正想要的。

那怎么处理才能解决这个问题呢?我找到的几种解决方式总结如下:(PS:如果你有更好的解决方案,请务必告知一声,非常感谢!)      

  • 1.较直接的方式:

   当我们使用AFNetwork第三方库访问服务器的时候,可以用它自带的清除空值属性 removesKeysWithNullValues 为我们自动处理返回数据中携带空值的字段。  

/**
 Whether to remove keys with `NSNull` values from response JSON. Defaults to `NO`.
 */
@property (nonatomic, assign) BOOL removesKeysWithNullValues;
      

使用方式,直接设置为Yes即可:

  self.removesKeysWithNullValues = YES;

这样的话,后台返回的JSON数据中空的键值对,将会被自动删除,可以避免我们对这些空值做操作,造成崩溃问题.  

  • 2.使用第三方框架:

  利用第三方框架处理服务器返回的JSON数据,将空值设置为nil,而nil是安全的,可以向nil对象发送任何message而不会奔溃。    

  github上比较多人使用的是NullSafe ,使用方式简单,直接将该分类拖入工程中即可。      

  链接地址:https://github.com/nicklockwood/NullSafe    

  • 3.给自己的程序添加容错处理:

   很多人为了方便省事,常常直接对传进来的参数做各种操作处理,而不考虑该参数是否合法,这样对自己的程序往往是致命性的。  

   好的编程习惯应当给自己编写的代码添加容错处理,判断参数的合法性,增强程序的健壮性尤为重要。    

未完待续。。。

iOS swift3 闭包的用法总结


一、什么是闭包:    

  • 闭包是自包含的函数代码块,可以在代码中被传递和使用。
  • Swift 中的闭包与 C 和 Objective-C 中的代码块(blocks)以及其他一些编程语言中的匿名函数比较相似。

二、闭包的语法表达式:     

{ (parameters/接收的参数) -> (return type/闭包返回值类型) in
statements/保存在闭包中需要执行的代码
}