分类 默认分类 下的文章

RXJava 1.* 中的 flatmap 操作符例子

例子:

Integer[] values = {1, 2, 3, 4, 5}; 
List<Integer> list = Arrays.asList(values); 

Observable.from(list).flatMap(new Func1<Integer, Observable<Integer>>(){
    @Override
    public Observable<Integer> call(Integer t) {
        Integer[] nums = {t, t + t, t * t};
        return Observable.from(nums);
    }
    
}).subscribe((i) -> {System.out.println("what I get is: " + i);});

与map 操作符的主要区别是: map 只是输入一个event,返回另外一个event,flatmap 输入一个event,先返回一个Observable,然后这些返回的Observables 在merge到一个Observable 里面去

函数式编程与命令式编程的区别 Functional, Imperative Programming

关于 函数式 和 命令式 还是下面这三篇讲的比较好:
http://www.cnblogs.com/lisperl/archive/2011/11/21/2257360.html
http://www.cnblogs.com/lisperl/archive/2011/11/22/2258995.html
http://www.cnblogs.com/lisperl/archive/2011/11/23/2259363.html

个人理解:

现在的大部分语言都是对汇编的封装, 汇编是基于内存,CPU这种物理结构来解决问题的,所以它在运算时,有自己的内部状态,通过一步步的算法修改内部状态,最终得出结果。函数式是基于数学函数的,它对于给定的输入参数,经过函数运算得出输出,它通过函数对函数的调用,最终得到结果。函数式是声明式的一种。

命令式:

int a = 0;
b = a * a + 3;
System.out.println(b);

函数式:

add: (a, b)->{return a + b;};
power: (a)->{return a * a};
println(add(power(a), 3));

windows 远程执行命令 安装软件

最近要对几百台windows批量安装软件, 其中少部分是古老的 windows Server 2003, 另外一部分这是 windows server 2008.
最初的想法是使用 chef 或者 puppet 管理来安装, 由于时间比较紧张, 最后采用 PsPools 的远程执行命令来完成, 远程命令使用 windows batch, 这样就不用安装任何脚本软件, 并且同时适合 Windows Server 2003 & 2008.

windows 远程执行

使用 PsTools 工具集中的 PsExec.exe 非常方便

window batch 命令

cd %USERPROFILE% ##进入用户主目录
echo Start installation git now > installGit.log ##写入日志
IF EXIST "C:\cygwin\bin\git.exe" echo exist ##判断文件是否存在
if not exist x:\ echo not exist ##判断x盘是不是存在
net use x: \abc.tianxiaohui.com\c$ password /USER:corp\admin ##添加网络驱动盘x
takeown /f C:\cygwin /r /d y ##把 cygwin 文件夹的ower 改成当前用户
icacls "C:\cygwin\usr\" /t /grant Everyone:F ##每个用户都可以对这个文件夹有控制权限
rmdir C:\cygwin\usr\man /S /Q ##删除文件夹
xcopy x:\share\setup-x86.exe /Y ##copy 文件

Unicode 字符集 和 UTF 编码

  1. Unicode 是字符集, 类似ASCII 码有127字符, Unicode 已经包含17个planes, 每个plane包含65536个代码点(code point)
  2. UTF 是Unicode字符集的编码, 就是Unicode 字符集在磁盘的表示, 参考这篇很不错的文章 十分钟搞清字符集和字符编码
  3. Windows 和 Java 默认使用 UTF-16, Web 默认使用 UTF-8
  4. UTF-8 兼容ASCII
  5. 非英文域名 即 IDNs 要使用 Punycode 去转. 尽管你的URL的域名部分是 新华网.中国 或 %E6%96%B0%E5%8D%8E%E7%BD%91.%E4%B8%AD%E5%9B%BD (encodeURI("新华网.中国")的结果) 在去到DNS 解析的时候, 都是翻译为 Punycode 去做DNS 查询的
  6. Unicode 要区分 字符, codepoint, UTF 编码后的值 如 : 田 的codepoint 是30000 (0x7530), UTF-8 编码后是: E794B0 (使用 encodeURI("田") 得到)

HTML 编码

URL 编码

URL使用%编码,即 %后边跟该字符对应的 UTF-8 编码后的16进制值, 每2个前面加一个%, 不是codepoint.
如 encodeURI("新华网.中国") = %E6%96%B0%E5%8D%8E%E7%BD%91.%E4%B8%AD%E5%9B%BD
如 %65bay.com = ebay.com

JavaScript 使用 escape(), encodeURI(),encodeURIComponent(). escape() 方法已经被废弃

  1. 协议或schema 是固定的那么些协议
  2. 主机名 只能是白名单(字符数字和-)里面的
  3. path 浏览器一般使用UTF-8 去解码
  4. query 参数 一般使用html的Content-Type去解码
  5. anchor 一般使用UTF-8 ? 还是用 Content-Type 去解码?

HTML 内容编码

HTML 文档里可以出现2种编码

  1. <, >, &, ', ", 空格, 这些HTML 标签使用的的编码, 可以使用 %gt; %lt; %nsbsp; 来编码;
  2. 另外可以用Unicode的进制编码 %#xH; (16进制), %#DD (10进制)编码

JavaScript: 这个问答有2个非常好的答案 HTML-encoding in JavaScript/jQuery
Java 版本:

import static org.apache.commons.lang3.StringEscapeUtils.escapeHtml4;
String escaped = escapeHtml4(source);

JavaScript 内容编码

  1. 某些控制字符 \t, \r \n \b \v \f
  2. 8进制3位数字 \145 : e \060 :10进制0
  3. 16进制2位数 \x65 \x30
  4. Unicode 4位数 \u0065 \u7530 \u0061lert(1) 这种能用在字符串之外的位置, 其它则不可

CSS 编码

  1. CSS 属性中可以使用十进制, 十六进制表示
  2. CSS 兼容HTML中的进制表示法.