配置apache代理支持一个服务器多个域名对应多个服务

最近租了台服务器把blog迁了上去,同时也买了个域名,把www和主域名的解析都指向了服务ip,接着装了apache服务器并配置根目录到blog的文件夹,这样就完工了吗?看上去是的,但是一台服务和一个域名这么用好像就这么浪费掉了,如果以后想把其他东西放上去呢,比如一个jetty或者tomcat服务,又或者想搭一个mock服务,本篇则记录如何配置多个域名的请求转发到本机的多个服务。最终效果实现如下:
http://www.nightfarmer.win 到blog
http://mock.nightfarmer.win 到mock服务
http://jetty.nightfarmer.win 到jetty服务

使用productFlavors对项目进行多产品发布

long long ago,android开发还只能在eclipse环境中进行开发,如果遇到多产品发布的需求,唯一的选择就是把工程项目拷贝一份出来,然后定制修改后进行打包发布。如果是深度定制的还好,若只是修改logo或应用名称的这种场景,再进行项目的开发就需要在所有产品的项目工程里进行重复性的调整,可怕。
而如今,我们有了更成熟的方案,只需要在guild.gradle文件中进行简单的配置,就可以实现一个项目打包多个产品的目的,果真是逆水行舟,不进则退。

注:这里的“产品”特指对客户进行定制化开发,类似于多渠道发布。

在ReactNative中使用MobX框架管理State实现ListView的局部更新

在ReactNative中UI的刷新大多数情况依赖于state的变更,通过调用组件的setState方法来更新state以达到通知组件重新渲染UI的目的。当然这种做法是官方提供的标准解决方案,在进行简单UI设计时足以满足大多数需求。
但是当遇到结构复杂并存在数据交互的界面设计时,手动管理state这种做法则会把代码逻辑变得非常混乱,组件内不但要负责UI的渲染,还要兼顾state的变更以及不同组件间数据的传递和同步。当项目遇到这种时,引入一个状态管理框架则显得尤为重要。
本篇则着重以一个List的数据展示及更新的例子来展开,记录如何在ReactNative中使用MobX框架来代替手动管理state更新Ui,以及如何实现最小粒度的界面渲染。
下面两图分别是不做任何处理的全局更新列表数据和使用MobX框架局部更新列表数据的运行效果,可以看到在使用MobX框架在更新行数据时只会重新渲染当前行的组件,而全局更新则会将ListView中的所有ItemView全部渲染一次,同时在实际操作中也会感到细微的卡顿。

image image

Android7.0新增工具DiffUtil详解

自从Google提供了RecyclerView之后,这个控件在Android列表和表格的开发中越来越多的替代了ListView和GridView,而且RecyclerView额外的提供了一些旧控件所没有的行为,比如局部刷新、列表表格更新动画、元素拖拽等等,极大程度的简化和方便了集合数据的展示UI的开发。
而在使用RecyclerView进行一些局部刷新时,往往会手动记录集合元素的增、删、变更、移动等事件,并分别调用不同的方法来通知adapter来对控件进行更新。而本篇介绍的工具类则对这些操作进行了完美的封装,让我们不再需要手动计算并记录元素的变更,而是交由DiffUtil来计算新旧数据集合的差异并通知adapter调用不同的更新方法来更新UI。

排序 局部刷新

WGS84、GCJ02、BD09地图坐标系间的坐标转换及坐标距离计算

在开发中用到定位和地图功能的都会知道位置信息会有多个坐标系来表示,而不同地图厂商使用的坐标系也可能是不一样的,web、Android以及iOS可能使用了不同厂家的地图,这就出现了在不同坐标系间转换坐标的需求。
然而一些地图SDK给出的地图坐标转换接口的实现是在服务器进行的,那么这些接口的调用不但会发起网络请求而效率上也会非常的慢,无论是对于客户端离线操作还是在自己的服务后台批量转换坐标数据,都需要本地实现坐标转换的算法来满足快速运算的需求。

坐标系 解释 使用地图
WGS84 地球坐标系,国际上通用的坐标系。设备一般包含GPS芯片或者北斗芯片获取的经纬度为WGS84地理坐标系,最基础的坐标,谷歌地图在非中国地区使用的坐标系 GPS/谷歌地图卫星
GCJ02 火星坐标系,是由中国国家测绘局制订的地理信息系统的坐标系统。并要求在中国使用的地图产品使用的都必须是加密后的坐标,而这套WGS84加密后的坐标就是gcj02。 腾讯(搜搜)地图,阿里云地图,高德地图,谷歌国内地图
BD09 百度坐标系,百度在GCJ02的基础上进行了二次加密,官方解释是为了进一步保护用户隐私 百度地图
小众坐标系 类似于百度地图,在GCJ02基础上使用自己的加密算法进行二次加密的坐标系 搜狗地图、图吧地图 等

SQLite数据库Orm框架GreenDao3使用详解

Android平台能够使用的数据库无非SQLite和Realm两种,Realm是第三方的响应式移动平台数据库,而SQLite则是Android原生支持的文件数据库。
今天要记录的是SQLite数据库的Orm框架GreenDao3,和EventBus出自同一开源组织,来自于greenrobot。
GreenDao3相对于GreenDao2使用起来更加便捷,是不可多得的兼效率和便捷于一身的SQLite Orm框架。
GreenDao架构图

,