my clojure notes

  • let 解构: 顺序集合,map.
    同时作用于: fn, defn, loop, for etc.
    &: rest.
    map: :keys, :strs, :syms
  • Clojure有两个假值:nil, false,任何非nil或非false的值都判断为true.
  • recur: not autoboxing
  • reduce: 归约
  • partial, comp:无参风格,不用显式定义它的参数
  • memoize: 缓存相同的参数
  • 主要抽象:Collection/Sequence/Associative/Indexed/Stack/Set/Sorted
  • seq:任何nil 或者任何空集合都返回nil.
  • rest:(), next: nil
  • nth:会抛出异常, get: nil,
  • 习惯用法:关键字作为函数
  • list/vector : hash-set/hash-map
  • transient: vector/map/set
  • delay: 只执行一次
  • future: 在另外一个线程执行
  • pmap: 并行,用future实现
  • swap! 会一直重试,直到设值成功
  • atom不能存在ref里面
  • meta: ^: or ^{}
  • 前置声明: declare
  • agent: 串行执行,在一个STM事务里只会执行一次
  • send: 固定大小的线程池
  • send-off: 不限制大小的线程池,跟future利用的是同一个线程池,适宜阻塞的(I/O),非CPU密集型的action
  • 只有在函数满足不了需求的时候才去使用宏
  • syntax quote: 语法引述: “`”
  • unquote: 反引过: “~”
  • splicing-unquote: 编接反引述: “~@”
  • 协议提供的是基于单个参数类型的函数分派
  • extend / extend-type / extend-protocol
  • deftype/defrecord:
  • 工厂函数: ->MyType, map->MyType, MyType/create
  • require: 从classpath载入命名空间, use: require + refer
  • 如果代码并不包括互操作调用,就没必要包括类型提示, 函数参数或返回值的类型提示都不是类型签名声明
  • gen-class: 必须AOT
  • long -> BigInt -> Rationals -> BigDecimal -> double

setup exim on debian

我的debian版本:6.0.3,使用系统自带的exim,如果你的系统还没有安装exim,先装这几个包:

1
2
3
4
5
Shell:~ >: aptitude search exim | grep '^i'
i exim4 - metapackage to ease Exim MTA (v4) installa
i exim4-base - support files for all Exim MTA (v4) packag
i exim4-config - configuration for the Exim MTA (v4)
i exim4-daemon-light - lightweight Exim MTA (v4) daemon

设置你的/etc/hosts, /etc/resolv.conf

1
2
3
4
Shell:~ >: cat /etc/resolv.conf
nameserver 127.0.0.1
nameserver 8.8.8.8
nameserver 8.8.4.4

可以装一下dnsmasq,避开那些讨厌的dns问题

1
2
3
Shell:~ >: aptitude search dnsmasq | grep '^i'
i dnsmasq - A small caching DNS proxy and DHCP/TFTP se
i A dnsmasq-base - A small caching DNS proxy and DHCP/TFTP se
开始配置

假设我的域名为:number23.no.de,可以先写在/etc/hosts里,

more >>