Git简明练级攻略

最近发现发现很多同学使用git存在误区,很多人使用git已经很久了,在push代码时看到merge的错误信息依然会恐慌。对很多新手程序员来说,git对他们的作用,其实就是备份代码而已。其实备份代码,用网盘就可以了,自动同步,特别方便。

理解Git

这篇文章是写给git新手看的。现在很多新手程序员没有接触过svn,我觉得如果先入手svn,再使用git可能容易理解“版本控制”,因为svn足够简单,容易上手。Git是分布式,相对于svn来说是太复杂了。

Scrum实践——如何成为ScrumMaster

近两年来很多互联网公司都开始推行scrum敏捷开发,其实Scrum问世至今差不多20年了,scrum直到最近才开始被国内企业熟练使用,说明了两个问题:

  1. Scrum真的很难
  2. Scrum是有用的

前几天参加了ScrumMaster培训,培训非常棒,给Scrum中文网点赞。培训过程中认识了不少从事不同行业、不同岗位的新朋友,很多朋友来自传统行业,有不少是做软件外包、制造业的,这出乎我意料,我之前一直认为只有互联网公司才能用scrum。有的朋友直言:“甲方要求使用Scrum开发,我得好好学习一下Scrum,回去才有理由怼他们。”虽然这话让人哭笑不得,但这确实可以证明Scrum的影响力越来越大了。

APP里的好友备注要如何设计

很多APP里的都有好友关系,那么一般都会有这样的需求,用户可以为自己的好友设置备注,类似微信里的“备注名”,这个功能很实用,很常见,常见到大家会下意识觉得这个功能好简单,实际上细想一下这个功能还挺伤脑筋的呢。

首先数据结构比较简单,好友关系其实就是多对多的用户关联,好友关系表里再加个备注字段就可以了。存储比较容易,难就难在怎么展示。备注信息假如只能在好友详细信息页面查看,对用户来说就太不实用了,产品经理会要求所有出现好友昵称的地方都要显示为备注名(谁让微信是这么做的呢),比如下面这些页面:

Android蓝牙开发入坑指南

BLE简述

蓝牙是一套非常庞大复杂的协议栈,通俗的说就是一组应用于无线系统通信的约定,各个厂家根据这个约定生产出了各种蓝牙设备。由于蓝牙协议栈非常的庞大,很多厂商并不会完全实现蓝牙协议栈的所有功能。Android 4.3以后蓝牙开发一般都是基于低功耗蓝牙BLE4.0,BLE协议是蓝牙协议的子集。
BLE协议结构

被误会是表达者的宿命?

今天不知道怎的和老婆讨论起说话方式的问题,我一听忽然就想起老婆曾经说和她们公司的程序员交流特别费劲,总是一句话说不明白,开会啰哩啰嗦半天也不知道他们说的啥。我作为一个正常的程序员,我忽然发现我也有这个问题,于是我就从自身出发,思考这个问题的原因,想了好久,今天提到这个问题嘛,我就想解释一下我作为一个程序员,为啥会有上述问题:

程序员作为一个职业,当然也有其职业习惯,程序员们互相交流,往往并不会用大量语言去从头到尾详细描述一个事物,他们描述自己的工作,喜欢逐个介绍其中的特点,往往很难一句话简明扼要的说出一个事物。

何时可以转型?——Flutter开发实践

Flutter前段时间终于出了1.0,是时候亲手实践一把了。
实践之前先了解一下前人的智慧,发现一篇文章:

我花了 8 小时,”掌握”了一下 Flutter | Flutter 中文站上线
https://www.jianshu.com/p/9aaabc60d8af

这文章比较有意思,可能就是Flutter 中文站的人写的,非常有用,当然文章里的写的8小时我感觉快了点儿,捣鼓一遍肯定不够的,搞不好install都要好久。下载完flutter sdk和plugin之后要flutter doctor -v检查开发环境,结论一般都是:Doctor found issues in X categories,会给出相应的tip,一个一个照做就行了,实践发现这些issues不需要全部处理,例只做android的话,ios的 toolchain可以忽略,“Android license status unknown”的提示特别愁人,不过stackoverflow都有解决方法,我一开始兢兢业业地照做了,第二天手残更新了一下android studio,结果“Android license status unknown”的提示又出来了,不过我发现编译打包都没问题,就不管了。

烂代码是怎样炼成的

这两天接手一个离职员工的项目,改bug,个中不爽,难以启齿,有些代码写得实在是让人哭笑不得,不一一列举,摘一段集烂代码之大成的典型案例:

从老蒋越级指挥说起

蒋介石喜欢越级指挥是出了名的,常常在战斗中绕过各战区司令,直接打电话到前线,给前线的师长、团长下命令,常常搞得前线指挥官一脸蒙蔽,屡战屡败,后来他被赶出了大陆。

有人说蒋介石越级指挥是他玩谋弄权的体现:各个司令都是我老蒋重金养起来的,你要听我的,你手下的兵也都是我的,我让你当司令你才当司令的,你不能拥兵自重。有人说蒋介石越级指挥是因为他过于自负,总认为自己是当世张良,能定胜负于千里之外,他认为前线将领能力太差,于是忍不住上线微操一把,过个当指挥官的瘾。当然要我说嘛,蒋介石也许就是为了防止各个统兵大员尾大不掉,毕竟就算他再怎么瞎指挥、再怎么失败,他至少牢牢把握着党国的中央大权呀,还是有本事的。

不说老蒋了,就说我们自己的事,我们一线程序员,分明就是老蒋手下的兵,那些市场、销售、客服部老蒋们天天把电话往我们前线打,小兵们眼花缭乱,不知所措。如果不做好需求管理,项目能一两个版本保持健康就不错了,往后就直奔着失控去了。

用RxJava优雅的执行并发网络请求

Android或者ios原生开发,并发网络请求是个难排解的痛。现在来看,这个问题已经不是问题了,写个文章记录一下,毕竟当年曾经为了这个问题操碎了心。说这个事首先要明白下面这个问题:

痛在哪?——主线程之殇

Android的消息机制恨死人,众所周知,android UI操作只能在主线程进行,而且主线程里不推荐执行作UI操作以外的一切操作,当年Android早期在主线程里请求网络是不会报错的,顶多把界面卡黑屏。现在这么搞会乍样大家都知道的,编译时会有警告,运行时会crash。如何优雅地请求网络数据,然后切换到主线程去更新UI,无数志士仁人为了解决这个问题操碎了心,早期官方推荐用AsnycTask,后来出现了经典的httpAsync,后来又有volley,现在又有Retrofit。现在的小程序员们不用在乎这些问题,只要拿来用用就行,大公司也都有自己成熟的网络库。而且现在hybird、react native很流行,不会涉及到主线程的问题。但是如果把14年以前的项目源码翻出来,运气好还能看到handler满天飞的情况,真是恶心死人。

好久不写博客了

真的是好久好久不写博客了,主要是懒。。之前一直使用wordpress,可是国内好难找到好用的wordpress空间。之前一度以为daocloud.io是我的福音,我曾好长一段时间把博客放在daocloud上,可好用了,我也是那时候体会到了docker的强大。后来daocloud果然被监管了,我的博客被停了,于是这一年多来我的域名就被打入冷宫了。。当时数据都没来得及备份,真是遗憾。