MVVM 与 Android Data Binding

在 Android 开发过程中,由于 Android 作为 View 描述的 xml 视图功能较弱,开发中很容易写出臃肿繁杂的 Activity/Fragment,甚至有写出过数千行代码的 Activity。大量的显示、校验、事件响应、回调接口充斥在 Activity 中。Activity/Fragment 实际上成了 View 和 Controller 的混合体,既要承担 View 的显示功能,又要承担 Controller 的控制功能。承担的功能过多,膨胀成繁芜的巨类也就不足为怪了。

UI 界面设计模式

在传统的 UI 设计模式中,MVC 已经实践中证明了其价值,并在漫长的使用过程中((MVC最早出现于 1970 年代)演化出 MVP 和 MVVM 多个变种。

阅读全文 »

Ubuntu 搭建 shadowsocks

安装

在 Ubuntu 下安装 ss 很简单。只需要依次执行下面 3 条命令:

1
apt-get update
apt-get install python-pip
pip install shadowsocks

pip 是 python 下的方便安装的工具,类似 apt-get。

全部执行完毕且没有报错的话,我们的 shadowsocks 就算是装完了。接下来就是配置部署了。

写一个配置文件保存为 etc/shadowsocks.json,文件内容如下:

1
{
    "server":"0.0.0.0",
    "server_port":8388,
    "local_address": "127.0.0.1",
    "local_port":1080,
    "password":"mypassword",
    "timeout":600
}

server, server_port, password 需要自行根据自己的实际情况修改。

配置文件编辑完成后,接下来就可以部署运行了:

启动与停止

1
ssserver -c /etc/shadowsocks.json -d start

当然,我们可不希望每次重启服务器都手动启动 SS, 因此我们要把这条命令放到这个文件下:/etc/rc.d/rc.local,这样以后就能开机自动运行了。

好了,打开客户端呼吸墙外的空气吧!

停止 SS:

1
ssserver -c /etc/shadowsocks.json -d stop

自动启动

新建脚本文件/etc/systemd/system/shadowsocks.service,内容如下:

1
[Unit]
Description=Shadowsocks

[Service]
TimeoutStartSec=0
ExecStart=/usr/bin/ssserver -c /etc/shadowsocks.json

[Install]
WantedBy=multi-user.target

启动 shadowsocks 服务:

1
systemctl enable shadowsocks
systemctl start shadowsocks

检查服务是否正常

1
systemctl status shadowsocks -l

错误排除

出现如下错误:

1
AttributeError: /usr/lib/x86_64-Linux-gnu/libcrypto.so.1.1: undefined symbol: EVP_CIPHER_CTX_cleanup

是由于在 openssl1.1.0 版本中,废弃了 EVP_CIPHER_CTX_cleanup 函数,只需打开

/usr/local/lib/python2.7/dist-packages/shadowsocks/crypto/openssl.py

替换 cleanup 为 reset,重启 SS。

客户端下载链接

Fix Android Studio DataBinding cannot resolve symbol 'databinding' bug

Android DataBinding 使起来还是蛮有趣的,但是 Android Studio 总是不时莫名其貌的出状况,找不着生成的 databinding classes。构建的时候会出现如下提示:

构建提示

Google 了一些方法都不灵。最后只有以下这样将生成的 java 文件 copy 到正确位置解决问题。

1
// fix for dataBinder: Source folders generated at incorrect location
android.applicationVariants.all { variant ->
    def variantName = variant.name.capitalize()
    def inputDir    = "${buildDir}/intermediates/classes/${variant.dirName}"
    def sourceDir   = "${buildDir}/generated/source/dataBinding/${variant.dirName}"
    def copyTask    = tasks.create(name: "dataBindingFix${variantName}", type: Copy) {
        from inputDir
        into sourceDir
        include '**/*.java'
    }
    tasks["generate${variantName}Sources"].dependsOn copyTask
    variant.addJavaSourceFoldersToModel new File(sourceDir)
}

遇上同样问题的同学,将以下脚本加到 app build.gralde 就可以了。

Dagger2 小记

0x00 开始

开始以最无趣的 “Hello World” 开始吧。

1
public class Hello {
	
	public String greeting(){
		return "Hello World.";
	}
	
}

然后在 TextView 中显示,常规的方法是:

1
Hello hello = new Hello();
textViewHello.setText(hello.greeting());

那么,如果使用 Dagger2 进行依赖注入,我们使用 @Inject 将 Hello 实例注入:

阅读全文 »

JRE 导入 StartSSL 根证书

0x00 绪言

通过 java 执行 https 请求时可能出现以下错误:

1
javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

这是因为 java 在执行 SSL/TLS 通讯时使用特定的数据识别 Certificate Authorities(CA),如果你试图发起的 SSL/TLS 连接使用不属于这些根证书机构所颁发的证书,就会抛出

1
SunCertPathBuilderException: unable to find valid certification path to requested target

因此,如果你使用自签名证书,或者根证书机构不在 JRE 默认信任列表中,则需要向 JRE 导入根证书。

阅读全文 »

Ubuntu环境配置速记

一、安装 openssh

1
sudo apt-get install openssh-server

二、安装 mysql

1
sudo apt-get install mysql-server mysql-client
阅读全文 »

javascript 跨域问题小记

1、同源策略

同源策略是有 Netscape 提出的一个著名的安全策略,现在所有的支持 javascript 的浏览器都会使用这个策略。

所谓同源是指主机名、协议、端口相同:

  • 相同的主机名
  • 相同的协议
  • 相同的端口

三者必须同时满足,只要主机名、协议、端口三者其中之一不同,就为不同的源。

阅读全文 »

Pentaho CDE生火指南

1、安装CDA、CDE插件

登录BI Server后菜单Home - Marketplace

MarketMenu

阅读全文 »

Pentaho Report Designer生火指南

一、认识Pentaho Report Designer

Pentaho Report Designer

阅读全文 »

Pentaho BI Server 5.1生火指南

一、BI SERVER安装

  1. 安装JDK 1.6+

  2. 解压biserver-ce-5.1.0.0-752

  3. 启动start-pentaho.bat

  4. 访问BI SERVER

    启动界面出现Pentaho BI平台服务器就绪后,浏览器打开

    http://localhost:8080/pentaho

    Pentaho BI Server

阅读全文 »