回顾 2017

2017 关键词:Birds、离职、狼人杀、白洋淀、iOS、自如。 Birds Birds 是自己编写时间最长的一个 Web 项目。项目接手、改版、重构、迭代、盈利,上半年每天工作都是面对它。 Birds 良好的表现与需求互相推动,这点很重要,假如有需求而项目没有成长,或项目成长没了需求,对工程来说都只能是纸上谈兵、无事可做。项目中的规范的重要性,无论是代码还是数据库,只要项目不是夭折终将显现,对于规范性我绝不会开倒车,做任何妥协,种种经历只说明:这里欠的东西总会还。如何应对需求的千变万化,小结几点:模块化、组件化思想,功能多可配置,功能可拔插,功能方法粒度要小;不要对程序肆意进行打补丁式的修改,减少对流程入侵;当某一处的逻辑增加时要及时重新修改、定义流程;对需求目的的正确理解更是能高效开发。 对前端重新认识的一年。现在的前端和大学时刚刚接触时,已经大不一样了。前端能做的事情越来越多,很多业务逻辑都在前端处理,服务端只需要提供接口,分工合作更容易。浅尝 React Vue Webpack 后,也许前端才是自己的归宿。 离职 离职的不是我。老人走,新人来,新人走。离职一词在我身边跟了一年都没有停下来。同事离职的原因很多,离开北京、公司发展、自我发展… 马云说离职的原因就两个:1. 钱没给够。2. 受了委屈。我起初是认同这一说法的,但是后来觉得 “人” 或者说 “人的思想” 或者说 “人性” 在其中影响作用非常的大。相同的事情不同的角度看,结果相去甚远,如果基本的理念不同,那事情基本是无法调和的。 对做的事情的认同感,对自我的定位与认识,对现实情况的冷静思考,这几点需要反复咀嚼。 分享一篇文章:公司没大牛带,需要离职么?。对于刚入门的我们,这是一个很有代表性的问题。太多时候我们期待别人,忘了自己。公司有大牛,能跟着学是幸运,没有是常态。先接受了这个设定,会更容易找提高自己的方法。有没有大牛并不重要,我们是为了那个更好的自己。 狼人杀 2017 火的游戏很多:狼人杀、守望先锋、王者荣耀、吃鸡。狼人杀这一杀,好像杀到了毕业前和同学舍友在一起臭 high 的日子。可说骚话、互相 diss、互相吹捧,真真假假其乐无穷。最赤鸡的是鱼炸出了个女盆友,各路同学亲上加亲,无法克说。 白洋淀 我想 你说 你不要在孤单 让我做你的伴 白洋淀去过四次,那里的温泉过去两次,年中 Team Building 再喜加一,而这一次让这里有了美丽故事。喷泉、沙发,出现了对的人。 iOS React Native 的一波尝试后,走上了移动开发的道。Swift 让上 iOS 车的门槛降低不少,Swift API 趋向稳定,可以说这是最好的时候。GitHub 应该是再也放不下了,外文的书籍、文档确实靠谱啊,推荐一个教程网站 iOS Tutorials - Ray Wenderlich 真的零基础入门。 我相信:一个人语言的界限,就是他世界的边界。 自如 一场大火让无数人无家可归,年末换房也受牵连。被自如圈粉,其他中介的房子真的太 low 了。自如订房子居然也要抢,一波三折、失而复得。在没抢到房子时,真的想走,想离开这里了,很凄凉。最终是在公司对面住下了,过上了在家吃中饭晚饭的日子。 2018 Happy New Year 2017 自己是幸运的,2018 猥琐发育,不要浪,胜利属于伏地魔。 ...

December 31, 2017 · 1 min · 73 words · Me

【Git 权威指南】读书笔记 - 独奏 - Part 4

主要内容:【历史穿梭】、【改变历史】、【Git 克隆】 历史穿梭 查看条件个数: git rev-list HEAD | wc -l 版本表示法:git rev-parse git rev-parse pick out and massage parameters for other git commands. --git-dir 可以显示 Git 版本库的位置 --show-cdup 当前工作区目录的深度 --parseopt 可以用于被 Git 无关应用用于解析命令行参数 # 显示分支,tag git rev-parse --symbolic --branches git rev-parse --symbolic --branches # 显示定义的所有引用 git rev-parse --symbolic --glob=refs/* # 显示多个表达式的 SHA1 哈希值: git rev-parse master refs/heads/master 6652a0dce6a5067732c00ef0a220810a7230655e 6652a0dce6a5067732c00ef0a220810a7230655e ^后面的数字代表该提交的第几个父提交,~<n>就相当于连续<n>个符号^ git rev-parse A~3 A^^^ e80aa7481beda65ae00e35afc4bc4b171f9b0ebf e80aa7481beda65ae00e35afc4bc4b171f9b0ebf # 暂存区里的文件和HEAD中的文件相同 git rev-parse :gitg.png HEAD:gitg.png fc58966ccc1e5af24c2c9746196550241bc01c50 fc58966ccc1e5af24c2c9746196550241bc01c50 # 在提交日志中查找字串的方式显示提交 git rev-parse :/"Commit A" 81993234fc12a325d303eccea20f6fd629412712 版本范围表示法:git rev-list git rev-list 可以帮助研究 Git 的各种版本范围语法。 ...

December 25, 2017 · 3 min · 586 words · Me

iOS 招聘总结

自己也做了一次面试官。简历看到了很多,内容总结如下: 一些感受 一些基本的技能感觉不用写,不会吸引什么注意力。所以要精懂一些特别的技能,技术点。 一些 “与产品沟通” “安排工作”,我觉的也不用写,也没什么吸引力。 简历要体出自己擅长的地方,特别的地方,其他的一笔带过就可以。 简历上的字词的细节我比较在意,iOS & IOS,Xcode & XCode。 有 GitHub Blog 绝对的好评,但要有内容。 基础知识、业务能力、性格、气场。 技能 基础 Objective-C Swift 内存管理机制,MRC & ARC 代理、通知、Block 回调机制 闭包 KVC,KVO 机制 CoreData FMBD 归档存储 SQLite NSUserDefaults runtime 运行机制,runloop 运行机制 GCD NSOperation NSThread 多线程编程 Socket 通信 单例 观察者 MVVM RESTful 业务 瀑布流 抽屉 断点续传 媒体流 瀑布流 SSO 单点登陆 Framework Cocoapods 支付宝 高德 二维码扫描 友盟 极光推送 短信验证 微信 微博登陆 支付 in-app purchase SDWebImage AFNetworking Alamofire SnapKit MBProgressHUD IM 环信 Spring 动画 ICSDrawer 侧滑菜单 AVOS Cloud SDK ZXing ZBar 二维码 XMPP 其他 Axure 良好英文文档阅读能力 职责 模块封装 上架 迭代 沟通 整体框架 KVO 监听实现自定义下拉刷新 针对不同的网络状态 设置不同的缓存策略 各种 SDK 集成 HTML5 Native 相互调用 奇巧淫技 自己对 iOS 的理解还并不深,如何面试更有经验的人? ...

November 25, 2017 · 1 min · 118 words · Me

Photoshop 编辑 GIF

录制 GIF 推荐使用 LICEcap 小巧好用。 GIF 查看方法 在 Mac 上双击 GIF 将是按帧查看一幅一幅的图片,按住 空格 可以动起来。也可以选择 GIF 图片直接点击空格预览。 GIF 编辑 预览 在 Mac 中可以直接使用 预览 对 GIF 进行删除帧的操作。但是发现再次保存的 GIF 只播放一次,不会循环播放。 Photoshop 使用 Photoshop 打开 GIF,点击 窗口 -> 时间轴,可在时间轴中对图片进行编辑。文件 -> 导出 -> 存储为 Web 所用格式 然后在 循环选项 选择 永久。 在这里也可以降低 图像大小 对图片进行压缩。 点击 存储 导出新的 GIF。 – EOF –

November 23, 2017 · 1 min · 56 words · Me

关于 GitHub README.md 中图片加载失败

遇到的问题 在编写 GitHub 的 README.md 后,其中引用的网络图片无法正常显示,点击 alt 的文字提示:Content length exceeded。 分析 根据 About anonymized image URLs 这篇文章:上传的图片 URL 将被修改,所以个人信息将不会被跟踪。GitHub 将使用 开源项目 Camo。Camo 将为每一个图片生成一个以 https://camo.githubusercontent.com/ 匿名代理 URL 同时隐藏来自其他用户的浏览器详细信息和相关信息。 我引用的 GIF 图片有 7MB 多,那么图片大小的限制是多少? camo - server.coffee#L18 content_length_limit = parseInt(process.env.CAMO_LENGTH_LIMIT || 5242880, 10) 换算后大小正好是 5MB。 References 关于 GitHub 无法图片加载的问题

November 22, 2017 · 1 min · 47 words · Me

Linux Mac 使用代理连接 SSH

Ubuntu ssh -oProxyCommand="nc -x 127.0.0.1:1080 %h %p" ubuntu@111.111.1.1 Mac ssh -o "ProxyCommand nc -X 5 -x 127.0.0.1:1080 %h %p" ubuntu@111.111.1.1 SecoureCRT Session Options - Connection - SSH2 - Firewall,创建、选择代理。 参数 -o ProxyCommand:SSH 命令选项,你可以理解成使用 “在 SSH 中使用代理”。 nc:netcat 命令。 127.0.0.1:1080:本地 Shadowsocks 的监听地址和监听端口。 命令行 HTTP 代理 export http_proxy=http://127.0.0.1:1087;export https_proxy=http://127.0.0.1:1087; 鉴别自己是否真的使用了代理来登陆服务器 root@ubuntu:~# who root pts/2 2017-05-13 18:13 (xxx.xxx.xxx.xxx) References Mac OS 使用 shadowsock 来代理 ssh 访问服务器 – EOF –

October 28, 2017 · 1 min · 66 words · Me

MacBook 使用小感

现在自己的开发主力机是:2015 版的 MacBook Pro。对于工程师来讲,MacBook 绝对是用来提高生产力的,不是装杯的。如果条件允许十分推荐,反正我是回不来了。 一些感受 购买型号选择:15 寸 i7 Pro 没的说,屏大看的很爽。 F1… 等键并有没有原来想象的那么重要,游览器刷新什么的都有代替的键。我感觉 F 系列的键默认为功能键挺好的。Filco 键盘开始吃灰。 续航时间是真的长,待机功耗很小,不用关机。扣上盖子装包带走,不拿充电线。 触控板真的好用。原来都是没鼠标时不得已才用触控板。(后来发现老司机们都爱触控板) 鼠标 - 滚动方向:自然,需要适应。 Chrome Tab 随便开。 很安静。 装包时边沿有些割手。 软件推荐 2020-03-25 更新: My MacBook | Yifans_Z。 – EOF –

October 28, 2017 · 1 min · 36 words · Me

Git checkout --theirs --ours 解决冲突文件

在代码合并时遇到 conflict 是常有的事情,有些内容是自动生成的资源文件,手工处理起来很麻烦,某一文件如何全部以某一分支的内容为准? 使用 checkout --theirs . checkout --ours .。 场景实例 Engineer A、B 同时从 master checkout 自己的功能分支: # Engineer A git checkout -b feature-a # Engineer B git checkout -b feature-b Engineer A 开发比较快先进行了 push: git add . git commit -m "feat: feature-a" git checkout master git merge feature-a git push Engineer B 再 push 前需要拉最新的 master,因为改到了同一行代码,出现代码冲突。 merge 合并代码 使用 merge 命令导致的代码冲突。 git checkout master git pull git merge feature-a 在处理冲突的过程中: ...

August 30, 2017 · 1 min · 136 words · Me

【Git 权威指南】读书笔记 - 独奏 - Part 3

主要内容:【Git 基本操作】 Git 基本操作 先来合个影 在 Git 里,“留影”用的命令叫做 tag,更加专业的术语叫做“里程碑”(打 tag,或打标签)。 git tag -m "Say bye-bye to all previous practice." old_practice 里程碑无非也是一个引用,通过记录提交 ID(或者创建 Tag 对象)来为当前版本库状态进行“留影”。 git rev-parse refs/tags/old_practice 41bd4e2cce0f8baa9bb4cdda62927b408c846cd6 git describe 显示当前版本库的最新提交的版本号。格式:最近的 tag - 距离此 tag 的个数 - 该提交的 SHA1 git describe old_practice # .. commit something git describe old_practice-2-g8861c65 删除文件 rm *.txt 针对的是 工作区,对 暂存区 和 版本库 没有任何影响。 git rm detached-commit.txt hack-1.txt new-commit.txt welcome.txt 删除动作加入了暂存区,commit 后在版本库罪行提交中删除了,在历史提交中尚在。 ...

August 3, 2017 · 2 min · 308 words · Me

IMOOC React 入门

【注意】内容不再维护。 React 介绍 初识 React React 不是一个完整的 MVC、MVVM 框架,其只负责 View 层,MVC 已经不适用于某些场景的开发 React 跟 Web Components 不冲突 React 的特点就是“轻”,数据单向绑定,独立、小巧、快速、创新 组件化的开发思路,小组件构成大组件,高度可重用 React 应用场景 复杂场景下的高性能 重用组件库,组件组合 “懒”,少做无用功 你总是这样轻言放弃的话,无论过多久都只会原地踏步。 —— 多啦 a 梦 前置知识 JS CSS Sass Compass Yeoman Grunt Webpack CommonJS NodeJS Git GitHub To Be A Better Engineer 无论知识有多新、项目有多难,只要来了什么姿势都要上 没人疼、没人爱,团队中没人可以帮上忙,要学会借助外力,视频、Google、开源项目 积极要求进步 React 的 JSX 与 Style 官网:React - A JavaScript library for building user interfaces 罐头是 1810 发明出来的,可是开罐器呢,却在 1858 年才发明出来。有时就是这样,重要的东西可能迟来一步,但却一定会到。生活和爱情,都是如此。程序,当然也不例外。 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta http-equiv="X-UA-Compatible" content="ie=edge" /> <title>Hello World</title> <script src="https://unpkg.com/react@latest/dist/react.js"></script> <script src="https://unpkg.com/react-dom@latest/dist/react-dom.js"></script> <script src="https://unpkg.com/babel-standalone@6.15.0/babel.min.js"></script> <style> .fontcolor { color: blue !important; } </style> </head> <body> <div id="root"></div> <script type="text/babel"> var Hello = React.createClass({ render: function () { return <div className="fontcolor">Hello {this.props.name}!</div>; }, }); class Welcome extends React.Component { render() { return <h1>Hello, {this.props.name}</h1>; } } ReactDOM.render( <div> <Hello name="World" /> <Welcome name="World" /> </div>, document.getElementById("root") ); </script> </body> </html> 添加组件属性,有一个地方需要注意:class 属性需要写成 className ,for 属性需要写成 htmlFor ,这是因为 class 和 for 是 JavaScript 的保留字。然后,属性名都是驼峰命名法。 ...

July 20, 2017 · 2 min · 260 words · Me