Intellj IDEA 配置go 开发环境

1. 下载安装版本go 1.8

2. 按照提示下一步下一步安装好 go 后,应该是在C:\Go 目录
3. 可以在cmd 命令行$go 试试看能不能答应出usag
4. mac 可以使用homebrew 安装,安装完后应该是在homebrew 下的Celler 下面
5. 配置gopath 目录指向一个你用于存放go 源码、包、可执行文件的目录,
并且go 强制要求在此目录下简历src bin pkg目录存储相关的go 源码文件和包文件
当你使用go get github.com/urlshor…..之类的包的时候就会存储在这些src 目录下了
6. 下载安装intellj IDEA , 地址:http://www.jetbrains.com/idea/
激活可以使用licenseServer 激活,server可以使用:http://idea.iteblog.com/key.php

7. 启动idea ,并在config中找到plugins ->browse repositories中输入go 安装go language
8. 新建项目 配置go sdk 选择你安装go的目录,也就是那个C:\Go 目录
9. 编写go 代码
#10. 关于包的管理,IDEA 强制包名同目录名,如果你想建立一个package在本地,然后main 包引用
那么你需要建立相应的目录在src 目录中,然后通过import “./packagename” 引入

How to configure and make a open source code

How to make a open source code

        或许我们经常会遇到这样的问题,就是如何去把我们使用到的一个open source 的code 放入自己的代码库,方便自己的编译,有多方便呢?就是当新人来的时候,可以不用这里找找,那里改改。当服务器突然被某个新手一不小心搞挂的时候,重新搭建服务器后,依旧可以快速顺利的编译完整个工程代码.(我记得我那时候是小白的时候也曾三次搞挂公司编译服务器.然后每次重新装一次编译服务器都要搞个半天一天的,还被骂.

以下是我编译的经验.

1. 如果你要新加入一个open source 的code,那么你可以新建一个open source 的code相关的目录,一般就直接建成open source的名字就好了,记得不要加任何版本相关的信息.

2. 把下载下来的 open source XXXX.tar.gz 的原始包放进目录,然后解压文件.

3. 在 自己建立的目录加一个Makefile 作为自己的编译,所有你需要配置的,clean  install  distclean 的选项都从新自己写一遍.

4.  这时候在现有的Makefile 中编写configure 的脚本,当然我们每次git clone code 的时候,可能每台机器,或者自己的目录都不一样,这时候可能在自己这台机器配置完的,然后git push上去仓库的代码,再别人那里又编译不过了,所以configure 最好是每次git clone code的时候都做一次配置,确保每台机器都是更加机器的现有配置来配置open source code, 但是还有一个问题就是,我们自己git clone 代码的时候,应该配置完一次后,第二次则不应该再重新配置,除非使用make distclean 清楚配置后. 这里我们可以根据open source code 目录下面是否有Makefile 文件来判断是否进行configure ,因为很多的open source code Makefile是动态生成的.

5. 每个我们编译的open source code 基本都是默认配置在用户编译的机器使用,所以采用的编译选项和安装选项基本都是x86 的配置,这时候如果你做的是嵌入式的东西,使用到交叉编译记得配置使用 cross cc 交叉编译环变量,另外一个需要注意的就是配置prefix 选项,这个选项会涉及到你在make install 的时候应该安装到哪里,以及当你的程序运行时,应该在你的嵌入式环境中哪里去链接动态库, 所以这里我比较建议的是配置成自己的嵌入式环境的目录结构下,open source 运行的目录结构. 然后在你建立的目录结构中增加一个 BIN 相关的目录,在Makefile中做make install 的时候把编译的版本需要的binary 自己写cp 命令拷贝到BIN 目录下边,在打包的时候再拷贝到自己是target下面。

6. 基本编译的问题解决了,这时候可能你还会涉及到改动open source code 相关的东西. 建议大家可以首先考虑配置是否能解决(我记得我曾经就编一个rip 的时候本来可以用配置解决的,我却搞了半天想去改代码,最后发现配置一下配置文件就搞定了),如果非要改open source的代码的时候,可以先把现有的刚刚解压出来,没有编译和configure的代码先上库,然后再在Makefile中添加一个macro 宏定义 ,用宏定义包含自己要修改的代码范围,这样可以控制编译的时候编原始代码还是编译自己修改过的代码.  还有一个比较重要的问题,就是我发现很多小企业不重视LICENSE 这种问题(我个人觉得这是一个比较重要的问题,就像小米被告一样,如果一个企业要想搞大,那就必须注意license 问题,注意给出GPL ,也可以定义自己的license),如果涉及到license ,可能我们还需要在建立的目录下添加一个GPL 的目录作为编译GPL release用.

7. 然后如果要做版本升级的时候,只需要重新下载一下新版本的open source XXX.tar.gz 然后合一下你自己的改动(去查commit log),然后改动一下Makefile 编译的版本即可解决升级的问题,而且还不用创建一大堆的各种版本的目录,和配置各种版本。

8. 我给出一个我配置lighttpd 写的Makefile 做一个example:

目前我还存在的疑问:现在我编译samba的时候,我发现我配置完prefix后,编译可以通过了,但是当我做make install 的时候,install到自己的目录的时候会出错,也就是:make install DESTDIR=”samba/BIN/”
但是如果我配置prefix目录为 “samba/bin/” 的时候,我make install 的时候回正常,但是当我放进去板子跑的时候又会出现连接库文件的时候找不到,出现运行出错.

目前这个问题我还不知道怎么解决,还期待有人可以指导指导这样的问题该怎么配置会比较好。

写得不对的欢迎拍砖.
本文章版权归作者所有,如有转载,请注原始出处,并通知作者.

Traceroute test program implement

traceroute 通过逐渐变更的TTL值发送UDP包(我见busybox 也有icmp 类型的),然后等待ttl 值变为0的那一跳回复icmp time exceeded 包来测试网络的连通性。首先,traceroute送出一个TTL是1的IP数据包到目的地,当路径上的第一个路由器收到IP数据包时,将TTL减1。此时,TTL变为0,所以将该路由器会将此IP数据包丢掉,并返回一个ICMP time exceeded数据包,当traceroute收到这个消息后,接着继续发生TTL为2的IP数据包给第二个路由器。以此类推,直到IP数据包达到最后一台路由器时,会返回一个ICMP echo reply 或者 地址不可达的数据包。我们通过建立原始套接字来接收返回的icmp 数据包,然后通过解析数据包的字段,析出地址,然后给出连通性的信息。

以下代码存储测试,写完可以跑了就没理了,没考虑过释放内存,关闭套接字等一系列细节,就一测试程序,跑完就结束了。

简单系统架构

简单系统架构:

MD5 API 基础

openssl/md5.h:

#define MD5_DIGEST_LENGTH 16

typedef struct MD5state_st
{
MD5_LONG A,B,C,D;
MD5_LONG Nl,Nh;
MD5_LONG data[MD5_LBLOCK];
unsigned int num;
} MD5_CTX;

int MD5_Init(MD5_CTX *c);
int MD5_Update(MD5_CTX *c, const void *data, size_t len);
int MD5_Final(unsigned char *md, MD5_CTX *c);[/code]

需要用到的接口主要就是这些了。

struct MD5state_st是md5算法要用到的ctx结构
MD5_Init 是初始化ctx结构
MD5_Update 则是对输入参数data(其长度为len)进行md5计算。
MD5_Final是最后把结果输出至缓存md中。
OK,写一个程序试试:
file:md5.c

编译:
gcc -o md5 md5.c -lcrypto

1 2 3