OSC源创会-珠海

上周末的源创会总结。

免责声明

以下仅为个人观点,如有误会请谅解。

goparsec库

刘老师总是玩高大上的东西。这次的这个小库虽小,但是应该实用。
介绍的时候一直是吐槽Go没有泛型,3+次吐槽。
才写了5k+ Go代码的,也深深的觉得没有泛型太难受了。
goparsec能干什么:写语法解析。可以写Markdown的内容解析,也可以写SQL解析器。

SequoiaDB数据库

这是广告,这是广告,这是广告。

Docker

CentOS下玩过Docker,太简单上手了。
再来听这个主题,受益很多:Docker里边的ssh还不能放到外边来访问,Docker这货还有安全问题。
Docker不错,估计以后可以拿来整开发的环境。
还有Docker hub这个可以推荐。
觉得这个主题是底层的也有讲到一些,很有收益。

OpenStack社区

小眼那个迷离。主题不错,介绍了OpenStack社区,怎么为OpenStack提交代码。
那个代码提交多审核的机制很妙:多个自动编译通过,代码review通过,才能提交到主干中。
浏览过OpenStack的Github,这货是有很多个模块的东西,感觉太难下嘴啃了。

企业视角看见不一样的开源

华为参加开源项目的方法和遇到的坑。

END.

编译Hadoop 2.4.1完整步骤

编译Hadoop 2.4.1完整步骤

因为下载的bin包中的lib是32位的,64位的CentOS调用不上,只能自己动手编译一下了。
编译挺简单,下载依赖包比较花时间。
以下环境都是在CentOS 6.5 Mini。

安装jdk

下载 server-jre-7u67-linux-x64.gz

1
2
tar zxf server-jre-7u67-linux-x64.gz -C /opt/
ln -s jdk1.7.0_67 jdk

配置vi /etc/profile
最后添加

1
2
export JAVA_HOME=/opt/jdk
export PATH=$PATH:$JAVA_HOME/bin

安装Maven

1
2
wget http://apache.fayea.com/apache-mirror/maven/maven-3/3.2.2/binaries/apache-maven-3.2.2-bin.tar.gz
tar zxf apache-maven-3.2.2-bin.tar.gz -C /opt/

配置vi /etc/profile
最后添加

1
2
export MAVEN_HOME=/opt/apache-maven-3.2.2
export PATH=$PATH:$MAVEN_HOME/bin

安装ant

1
2
wget http://mirror.bit.edu.cn/apache/ant/binaries/apache-ant-1.9.4-bin.tar.gz
tar zxf apache-ant-1.9.4-bin.tar.gz -C /opt/

配置vi /etc/profile
最后添加

1
2
export ANT_HOME=/opt/apache-ant-1.9.4
export PATH=$PATH:$ANT_HOME/bin

安装项目的系统依赖

1
2
3
4
yum install gcc
yum install gcc-c++
yum install autoconf automake libtool cmake
yum install zlib-devel openssl-devel

安装protobuf

下载,解压

1
2
3
4
5
6
wget https://protobuf.googlecode.com/files/protobuf-2.5.0.tar.gz
tar zxf protobuf-2.5.0.tar.gz
cd protobuf-2.5.0
./configure
make
make install

下载源代码,解压

1
2
wget http://mirror.bit.edu.cn/apache/hadoop/common/hadoop-2.4.1/hadoop-2.4.1-src.tar.gz
tar zxf hadoop-2.4.1-src.tar.gz

编译Hadoop

不编译doc,跳过单元测试

1
2
cd hadoop-2.4.1-src
mvn package -Dmaven.javadoc.skip=true -Pdist,native -DskipTests -Dtar

查看编译的64位lib

1
2
cd hadoop-dist/target/hadoop-2.4.1/lib/native
objdump -f libhadoop.so

结果显示是i386:x86-64,这就是64位的lib了。

END.

yum安装软件出错

问题

yum安装软件yum install wget,报错:

1
http://mirrors.aliyun.com/centos/6.5/updates/x86_64/Packages/coreutils-8.4-31.el6_5.1.x86_64.rpm: [Errno 14] PYCURL ERROR 56 - "Failure when receiving data from the peer"

解决办法

1
2
yum clean all
yum makecache

重新执行安装命令,就可以。

END.

Scala安装指南

Scala安装指南

确认Java已经安装

1
java -version

下载最新版本的Scala

1
http://www.scala-lang.org/downloads

安装

设置环境变量

Environment Variable Value (example)
Unix $SCALA_HOME /usr/local/share/scala
$PATH $PATH:$SCALA_HOME/bin
Windows %SCALA_HOME% c:\Progra~1\Scala
%PATH% %PATH%;%SCALA_HOME%\bin

测试是否正常

查看当前scala的版本

1
scala -version

进入交互shell

1
scala

Hello, world!

测试例子使用代码

1
2
3
4
5
object HelloWorld {
  def main(args: Array[String]) {
    println("Hello, world!")
  }
}

交互方式输入

1
2
3
4
5
6
7
8
9
10
11
12
13
14
> scala
This is a Scala shell.
Type in expressions to have them evaluated.
Type :help for more information.
scala> object HelloWorld {
    |   def main(args: Array[String]) {
    |     println("Hello, world!")
    |   }
    | }
defined module HelloWorld
scala> HelloWorld.main(null)
Hello, world!
scala>:q
>

编译方式,编译

1
> scalac HelloWorld.scala

然后运行

1
> scala HelloWorld

END.

Docker基础指南

Docker介绍

Docker作为一个容器运行,运行一个unix进程与服务器隔离提供里强大的安全保障,你的软件可以重复地运行在任何地方,因为它的容器包含了所有的环境依赖关系!

Docker.io 是轻量级的“容器引擎+映像仓库”,在LXC(linux轻量级容器)的基础上构建,可以运行任何应用程序。
docker.io的核心层由以下几个部分组成:

  • 可执行程序,“/usr/bin/docker”
  • docker.io网站上有一系列创建好的操作系统和应用程序映像
  • AUFS(另一个统一文件系统)来实现文件系统的快照,文件变化,控制只读或读写的需求。
  • LXC(Linux轻量级容器)
  • Cgroups(各种资源和命名空间的管理)

安装

以下以Linux版本:CentOS release 6.5 (Final),管理员用户运行

1
cat /etc/centos-release

安装docker-io

1
yum -y install docker-io --enablerepo=epel

安装成功后,运行命令得到相关的介绍

1
2
docker
docker -v

安装的版本是:Docker version 1.0.0, build 63fe64c/1.0.0

配置服务运行和自动启动

1
2
service docker start
chkconfig docker on

需要拉取images,拉取基本的CentOS的images

1
docker pull centos

拉取完成后,运行命令查看images

1
docker images

得到列表显示

1
2
3
4
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
centos              centos7             1a7dc42f78ba        7 days ago          236.4 MB
centos              latest              1a7dc42f78ba        7 days ago          236.4 MB
centos              centos6             cd934e0010d5        8 days ago          206.9 MB

基础命令列表,显示image的版本,运行image中的top命令,搜索images

1
2
3
docker run centos:centos7 cat /etc/centos-release
docker run centos:centos7 /usr/bin/top
docker search centos

进入image中的命令模式,使用exit命令退出

1
docker run -i -t centos:centos7 /bin/bash

开启工作进程

开启一个长时间工作进程

1
JOB=$(docker run -d centos:centos7 /bin/sh -c "while true; do echo Hello world; sleep 1; done")

查看这个工作进程的日志

1
docker logs $JOB

杀死进程,也可以先用后一条命名查看容器id,通过4位+的容器id来kill。

1
docker kill $JOB

查看所有运行中的容器

1
docker ps

制作自己的image

这里以制作带nc命令的centos7举例,后边这个images有用,进入某个版本的image的控制台

1
docker run -i -t centos:centos7 /bin/bash

在image中安装nc,并确认安装成功

1
yum -y install nc

之后退出这个控制台,查找这个image的Container ID:

1
docker ps -a

制作image并命名为centos7_nc,其中dbb52为上一个命令中得到的ID前四位

1
docker commit dbb52 centos7_nc

docker images可以确认image已经成功,然后确认这个image中有nc命令

1
docker run centos7_nc /bin/nc

为服务绑定一个TCP端口

为容器绑定4444端口,并告诉网络监听4444

1
JOB=$(docker run -d -p 4444 centos7_nc /bin/nc -l 4444)

查看容器用的公共端口,这个是对外的端口

1
PORT=$(docker port $JOB 4444 | awk -F: '{ print $2 }')

连接公共端口

1
echo hello world | nc 127.0.0.1 $PORT

确认网络连接是否工作,程序运行ok

1
docker logs $JOB

END.

开始学习Go

上星期开始,了解了一下Go,正如介绍

Go is an open source programming language that makes it easy to build simple, reliable, and efficient software.

Go确实是牛,除了开发者牛,后台牛。

我觉得最重要的一点是:这是开发语言使用者在开发了几十年后,重新思考了开发语言。

比如这不是基于VM的语言,Java,C#,Python,Ruby这些都是基于VM的,而Go不是,确提供了许多的语法糖。

同时还提供了goroutines,并行的goroutines。

还有很好用的go get, go test等代码管理调试命令。

先进的包管理使入门变得更轻松了。

推荐学习一下Go,本人2014年的目标之一就是学习和使用Go。

小说工匠

是不是一个优秀的小说家我不敢讲,但我要强调我一定是个非常优秀的小说工匠。工匠不对自己的作品形成美学,这就是没有天良了。——张大春

《小说稗类》是本不错的书。偶尔的几个晚上翻过几页,慢慢的品着里边的文字。虽然书里的部分字词,很陌生和比较难理解。

这段时间不断抽空看小说和一些杂书,都是几本同时开动。《大秦帝国》看了三分之二,《代码的未来》临睡前翻十几页,《小说稗类》也抽空翻几页。

有时看着看着,就慢慢的联想着编程那点事,比如上边引用的文字在《小说稗类》腰封上。
写代码其实也是同样的道理,要从代码工人上升到工匠,就必须不断的学习和观察钻研,对自己的作品形成美学,不能只是停留在一个点上。
要做把自己定位在是一个工匠上,才能把代码写好,产品做好。

摩尔定律:预计每18个月,芯片的性能会提高一倍。也就需要不断的进行程序代码的改进改良。

2013最后一场夜球

断断续续的,在附近小区的篮球场踢了几年的足球。
这个月休战了很多场,每周两场。
今晚还好,不是很冷。

想写一个叫《当我谈路测分析时,我谈什么》的小文,先订在这儿,慢慢打打草稿。
估计得有几篇小文才能把这个事情说好。
虽说在做电信路测系统的公司呆了几年,感觉是越做越是做不好。
心里有很多的念头,估计还是得写写,总结一下才行。
大体能说的不是具体的如何做路测,而是路测得到的数据,分析的时候要考虑什么基础的知识。
不会涉及专业的电信网络知识:比如层三信令怎么破,这些个专业的知识我也不太懂。
在我看来,路测数据就是一堆时间纬度和空间纬度上的点的度量集合。

好吧,慢慢在本子上打草稿,农历新年前后鼓捣鼓捣。

开始ol3需要注意的

Openlayers 3简称ol3确实是不错,架构方面好像好了很多,调整了projection的转换。
基于Google的Closure Library,贡献代码的入门难度加大了。
代码的质量和输出代码的体积方面好像确实小了很多。

截至到本文之前,API Docs奇差,网上浏览就有找不到北的感觉。
还有没有支持IE7/IE8。
弄了一些基本功能之后,才发现没有支持IE7,看来还要花点时间切回Openlayers2了。
估计还是可以在移动设备上尝试一下ol3的。

最小化安装CentOS

1. 下载安装文件

download CentOS-6.5-x86_64-minimal.iso file from mirrors.163.com/centos

2. 安装

安装过程略过。完成后网络没有启动。

3. 启动网络

查看网络配置:

1
cat -n /etc/sysconfig/network-scripts/ifcfg-eth0

修改网络配置:

1
vi /etc/sysconfig/network-scripts/ifcfg-eth0

配置内容如下:

1
2
3
4
5
DEVICE="eth0"
HWADDR="00:0C:29:6A:B0:95"
BOOTPROTO=dhcp
MM_CONTROLLED="yes"
ONBOOT="yes"

重新启动网络:

1
service network restart

4. 更新系统

1
yum -y update

5. 关闭IPV6

1
vi /etc/modprobe.conf

添加以下内容

1
2
alias net-pf-10 off
alias ipv6 off

保存退出,并重启系统。

6. 查看iptables状态

1
service iptables status

设置iptables开机自动启动:

1
2
chkconfig iptables on #开启
chkconfig iptables off #关闭

iptables开启关闭服务

1
2
service iptables start #开启
service iptables stop #关闭

7. 查看系统时间和时区

1
2
date -R #查看时间
date -s 11:15:26 #修改时间