20 Jan 2016
已经两年没怎么关注Android开发了,Android的开发方式已经从MVC转向了MVP、MVVM了,之前也看过国外大牛写的 Architecting Android…The clean way?。中文版
使用MVP其中一个好处是更好地支持可测试,渐渐发现Github上开源的大多数项目都写满了测试代码,这点很值得学习,Google官方也推出了一个教程,如何写测试代码 Android Testing Codelabs。
看了一下Google提供的例子,这款笔记应用,一共提供了四个界面(Activity),其中一个是统计界面,另三个就使用了MVP的模式。
一个界面由Activity、Fragment、Presenter、Contract四个部分组成,其它Activity与Fragment就是MVP中的V,Presenter
就是MVP中的P,Contract
则是VP交互的接口定义,另外的M就是Model了。
Contract
定义了两个子接口,一个是Presenter -> View可交互的方法,另一个则是View -> Presenter的交互方法。
public interface NotesContract {
interface View {
void showNotes(List<Note> notes);
}
interface UserActionsListener {
void loadNotes(boolean forceUpdate);
}
}
View中的事件(生命周期的方法或按钮)去调用Presenter的loadNotes方法去请求Model获取笔记数据,然后再调用View的showNotes去显示,完成一个交互过程。
19 Jan 2016
学习SQL数据库已经是几年前了,已经很久没再使用过了。
最近因为想写一个简单的应用管理平台,有一些数据库相关的,因为在Raspberry Pi上没有对应的MongoDB,又不太想用MySql,所以就装个PostgreSQL来玩玩。
https://github.com/linguofeng/rpi-postgres
$ docker volume create --name postgres-data
$ docker pull linguofeng/rpi-postgres
$ docker run --name postgres -v postgres-data:/var/lib/postgresql/data linguofeng/rpi-postgres
$ docker run -i -t --rm --link postgres --entrypoint=sh linguofeng/rpi-postgres
$ psql -h postgres -U postgres
16 Jan 2016
Go开发环境配置会与其它语言的开发环境配置有所不同,主要是要理解GOPATH
变量的重要性,GOPATH
可以理解为Eclipse中的Workspace
。
有时候我们在开发一个新项目的时候,会创建该项目的GOPATH
,项目所有依赖的都相应的在该GOPATH里,当然这是一种过时的作法,现在1.5版本中新增了vendor
,可以把项目的依赖下载在当前项目的vendor
目录下。所以一般,我们只需要一个GOPATH变量。
> 安装GO,使用brew可以很方便地进行安装与升级,如果同时开发好几个项目,并且使用不同版本的Go,可以使用Gvm来同时安装管理多个版本的Go。
$ brew install go
$ go version
> 创建GOPATH路径
$ mkdir ~/gocode
$ echo 'export GOPATH=~/gocode' >> ~/.zshrc
$ source ~/.zshrc
> Hello
$ mkdir $GOPATH/src/github.com/linguofeng/hello
$ vim $GOPATH/src/github.com/linguofeng/hello/main.go
package main
import "fmt"
func main() {
fmt.Println("Hello")
}
$ go run $GOPATH/src/github.com/linguofeng/hello/main.go
15 Jan 2016
> Install
$ brew install protobuf --universal --c++11 --devel
$ brew install go
$ go get -u github.com/golang/protobuf/protoc-gen-go
$ protoc --version
> Hello
syntax = "proto3";
package pb;
message Hello {
string name = 1;
int64 mobile = 2;
}
$ mkdir pb
$ protoc --proto_path proto --go_out ./pb ./proto/hello.proto
$ vim main.go
func main() {
encode := &pb.Hello{
Name:"林国锋",
Mobile: 13800138000,
}
// 编码
out, err := proto.Marshal(encode)
if err != nil {
log.Fatal("encode error!!")
}
// 解码
decode := &pb.Hello{}
if err := proto.Unmarshal(out, decode); err != nil {
log.Fatal("decode error!!")
}
// 转换成json,proto3支持json
json_str, err := json.MarshalIndent(decode, "", " ")
if err != nil {
log.Fatal("encode error!!")
}
fmt.Println(string(json_str))
}
{
"name": "林国锋",
"mobile": 13800138000
}
14 Jan 2016
“狗日的”腾讯 http://baike.baidu.com/view/4013473.htm
正如上面的内容
应用宝SDK只能用烂得一塌糊涂来表示,一个功能,几百个版本的文档,仅是接登录功能,就看了N个版本的文档,并且提供的接口难用之极,这么大一家公司,开发出的SDK如此不优雅。
对于一开始要接应用宝SDK时,我是拒绝的。
还有配套的米大师就呵呵了,实在接不下去了。
还没用过如此难用的SDK。
最后就用“狗日的”腾讯来完结本文