View ReactiveEchoServer.java
import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.nio.channels.*;
import java.util.Iterator;
import java.util.Set;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
View EchoServerWithAttachment.java
import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.nio.channels.SelectionKey;
import java.nio.channels.Selector;
import java.nio.channels.ServerSocketChannel;
import java.nio.channels.SocketChannel;
import java.util.Iterator;
import java.util.Set;
View EchoServer.java
import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.nio.channels.SelectionKey;
import java.nio.channels.Selector;
import java.nio.channels.ServerSocketChannel;
import java.nio.channels.SocketChannel;
import java.util.Iterator;
import java.util.Set;
View SocketReadWrite.java
package nio.sandbox;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.nio.channels.SelectionKey;
import java.nio.channels.Selector;
import java.nio.channels.ServerSocketChannel;
import java.nio.channels.SocketChannel;
import java.util.Iterator;
View BasicNIOUsage.java
import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.channels.SelectionKey;
import java.nio.channels.Selector;
import java.nio.channels.ServerSocketChannel;
import java.util.Iterator;
import java.util.Set;
/**
* Created by weinanli on 13/07/2017.
View learn.clj
user=> (re-seq #"(\d+)-(\d+)" "1-3")
(["1-3" "1" "3"])
user=> (read-string "(+ 1 2 #_(* 2 2) 8)")
(+ 1 2 8)
user=> (= [1 2 3] [1, 2, 3])
true
user=> (class 'a)
clojure.lang.Symbol
user=> (class '(a))
clojure.lang.PersistentList
View dag.gv
digraph DAG {
rankdir=LR;
size="8,5"
node [shape = doublecircle]; start fin;
node [shape = circle];
start -> a [ label = "1" ];
start -> b [ label = "2" ];
a -> b [ label = "3" ];
b -> c [ label = "4" ];
a -> c [ label = "5" ];
View Graph.java
package alg.dag;
import java.util.*;
/**
* Created by weli on 26/02/2017.
*/
public class Graph {
class Edge {
View 01.md

『阿男的Haskell进阶学习笔记』*01 开篇*

阿男之前在豆瓣上连载了Haskell的系列学习文章^1,介绍了一些Haskell的基础知识。接下来阿男想开一个新的专栏,继续深入介绍一下Haskell语言的方方面面,以及一些更高阶的Haskell方面的内容。这个专栏里面会更佳深入地讨论Haskell语言的类型系统,一些语言特性的实现,以及Haskell在各个领域的相关应用。

阿男想说,Haskell确实不是适合编程初学者学习的语言,很多语言特性比较抽象,类型系统学习门槛较高,学习资料相对偏少。而且必须承认,Haskell语言虽然也是图灵完备^2语言,但它的应用领域还是有自己擅长的特定方向的。作为一种typed system设计完善,规避side-effect,具有functional特性的语言,Haskell特别适合做语言处理方向的应用,比如pandoc就是Haskell社区很成功的开源项目[^3]。

虽然Haskell也许学习起来很难,但是学习Haskell是绝对值得的,阿男学过,用过的计算机语言非常多,每多学习一种语言,都会扩展自己的思维的边界,获得新的思维方式,而Haskell绝对是非常值得学习的语言,甚至是特别重要的一块。因此,阿男会把Haskell的专栏坚持做下去的,和大家一起学习成长。

View tokenize.rb
require "ripper"
require "pp"
code = <<EOF
i = i + 1
end
EOF
puts code
pp Ripper.lex(code)