# 大染志
分享编程、运维、生活与思考

Junv's blog

## 一个Nodejs写的简易订饭程序

发表于 2012-07-11 更新于 2026-08-04

因为公司最近开始不统一订饭了，但是我那么点工资到下面食堂去吃，既贵也吃不好，其他那些没工资的实训的同学就更伤不起了。为了脱离机械式的让每个人在纸上写上自己的名字。我用nodejs写了一个简单的程序来完成在网上订饭的功能。用户只需要进入网址。即可以完成订饭。这个程序是用nodejs+mysql完成的。使用了nodejs的 express和mysql包

使用下面的命令即可安装：

    1
    2
    3

    npm install express

    npm install mysql

下面就附上代码吧，只有50多行，当然功能也很简单，只有订饭和查询所有已订饭的功能：

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37

    var express = require('express'),
     mysql = require('mysql');
    var app = express.createServer();
    //create mysql client
    var client = mysql.createClient({
     user:'root',
     password :'root'
    });
    //设置mysql属性
    client.host ='127.0.0.1';
    client.port = 3306;
    client.database = 'orderfood';
    //拦截地址
    app.get('/add/:name',function(req,res){
     var name = req.params.name;

     res.charset = 'utf-8';
     //查询数据库中是否已经有该用户的记录
     client.query('select * from orders where name= ?',[name],function(err,results,fields){
     if(err) throw err;
     //阻止用户多次提交
     if(results[0]!==undefined){
     res.send('哈哈，'+results[0].name+'小子！你想重复提交吗？没门！！\n');
     return ;
     }else{
     //将数据存入数据库中
     client.query('insert into orders(name) values(?)',[name],function(err,results,fileds){
     if(err) throw err;
     console.log("你的名字为"+name);
     res.write("恭喜你订餐成功！你的名字为"+name +"\n");
     });
     client.query('select * from orders',function(err,results,fileds){
     if(err) throw err;
     if(results[0]!==undefined){
     var count=0;
     res.write("=================已定名单====================\n");
     for(var i=0;i

格式可能有点问题哈。

## 解决不能访问google reader

发表于 2012-07-05 更新于 2026-08-04

如果你和我一样都打不开Google reader。或者你打开网页是现实了下面的信息：

> ### 很抱歉，在 www.google.cn 上没找到您要访问的网页

你的页面跳转到：http://www.google.com/reader/?hl=zh-CN&tab=wy

因为我们众所周知的原因，它的确访问不到了。不过我们可以通过下面这个地址访问：

> http://reader.google.com.tw

是不是瞬间从屌丝变成高富帅了？哈哈

## JAVA创建git仓库

发表于 2012-07-04 更新于 2026-08-04

我们通常使用git都是使用的git的客户端，比如linux下的脚本。其实windows下也是间接使用linux脚本来进行操作。不过在现在有完全使用java语言实现的git：JGIT。我们可以通过jgit来完成我们所有的git操作。

下面我将简单些一个例子来说明，使用java来创建一个git仓库，并且为仓库添加一个远端仓库地址。如果通过git脚本来执行，那么语句就是：

    1
    2
    3

    git init

    git remote add git://XXXXXX

首先我们需要下载org.eclipse.jgit.jar 包，并将其加入eclipse 的classpath中（当然这里使用eclipse来完成操作）。示例代码为：

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62

    package com.toozhao.git;

    import java.io.File;
    import java.io.IOException;
    import java.net.URISyntaxException;

    import org.eclipse.jgit.api.Git;
    import org.eclipse.jgit.api.InitCommand;
    import org.eclipse.jgit.api.errors.GitAPIException;
    import org.eclipse.jgit.lib.Repository;
    import org.eclipse.jgit.lib.StoredConfig;
    import org.eclipse.jgit.transport.RefSpec;
    import org.eclipse.jgit.transport.RemoteConfig;
    import org.eclipse.jgit.transport.URIish;

    public class TestJGit {
     public static void main(String[] args) {
     Repository repo = null;

    String path = "d:/testjgit"; // 设置git仓库的路径
     InitCommand init = new InitCommand();
     // 设置路径
     init.setBare(false).setDirectory(new File(path));
     // 执行git init ，创建仓库
     Git git;
     try {
     git = init.call(); // 创建仓库
     repo = git.getRepository();
     System.out.println("create repo success");
     } catch (GitAPIException e) {

    e.printStackTrace();
     }
     // 执行 git remote add 命令
     // 实例化一个RemoteConfig 对象，用户配置远端仓库
     StoredConfig config = repo.getConfig();
     try {
     RemoteConfig remoteConfig = new RemoteConfig(config, "origin");
     // 设置你的远端地址
     URIish uri = new URIish("git://github.com/wahyd4/testjgit");
     // 设置哪个分支
     RefSpec refSpec = new RefSpec("+refs/head/*:refs/remotes/origin/*");
     // 更新配置
     remoteConfig.addFetchRefSpec(refSpec);
     remoteConfig.addPushRefSpec(refSpec);
     remoteConfig.addURI(uri);
     remoteConfig.addPushURI(uri);
     // 更新配置
     remoteConfig.update(config);
     // 保存到本地文件中
     config.save();
     System.out.println("git remote add success.");
     } catch (URISyntaxException e) {

    e.printStackTrace();
     } catch (IOException e) {
     e.printStackTrace();
     }

    }

    }

执行完本代码后，打开d:/testjgit/可以看到一个.git的隐藏文件夹（如果看不到，请设置去除隐藏文件夹）。表明它已经是一个git仓库了。如果你的eclipse安装有aptana 插件，将仓库导入eclipse,eclipse还可以自动识别出git仓库。而在Egit 1.x插件中版本中都不能识别出。

如果你打开.git/CONFIG文件。你还可以看到：

    1
    2
    3
    4
    5
    6
    7
    8
    9

    [core]
     repositoryformatversion = 0
     filemode = false
     logallrefupdates = true
    [remote "origin"]
     url = git://github.com/wahyd4/testjgit
     pushurl = git://github.com/wahyd4/testjgit
     fetch = +refs/head/*:refs/remotes/origin/*
     push = +refs/head/*:refs/remotes/origin/*

这些既是我们对仓库进行的配置，全都由这个文件定义。使用aptana，你可以直接将仓库push 到你设置的远端地址。

## 使用maven编译Sonatype Nexus源码

发表于 2012-07-03 更新于 2026-08-04

首先需要使用git客户端从github下载nexus的最新源码：https://github.com/sonatype/nexus

因为nexus本身就是一个非常复杂的maven项目，因为我们只能使用maven来编译。如果我直接编译，nexus就会报各种找不到包的错误。

原因是我们需要把nexus官方的一个仓库加入到maven的settings文件中。代码为：

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32

      sonatype-forge

          sonatype-forge
          http://repository.sonatype.org/content/groups/forge/

            true

            true

          sonatype-forge
          http://repository.sonatype.org/content/groups/forge/

            true

            true

    sonatype-forge

然后再次编译，就应该可以构建成功了。由于nexus的仓库在国外，个人感觉速度比maven中央仓库要慢一个等级。在编译过程中，maven会自动执行一些插件和完成相关的单元测试。大概等待1-2个小时左右（由电脑性能和网络决定），就可以编译完成了。

## 复活？？

发表于 2012-07-01 更新于 2026-08-04

大概把博客恢复了。不过图片还是不行的。

以前的主题也用不了了。造孽。

后面再慢慢选主题吧。

## 那些年我用过的开源软件、框架

发表于 2012-07-01 更新于 2026-08-04

作为一个Java程序员，我想我们很多时候都需要和开源（open source software）扯上关系，我不得不说如果我的生活没有开源，肯定会比现在更糟，我们程序员效率一定没有现在这么高。我们通过使用那些著名的开源软件，逐步深入，不断提升了自己的编码水平。也学习了人家的设计功力。

到目前为止我没有设计出或者说贡献出什么开源软件，我自知自己的能力真的还不够。不过我希望哪一天可以为开源世界添砖加瓦，也希望其他童鞋能够加入这个行列。让世界变得更美好。

下面是我曾经用过的开源软件，可能有些只是简单了解，并不是很熟悉，但是我觉得它很不错也会记录在下面：

========================== 开发语言 ===============================

Java 不多说，正是我现在深入学习，使用的。

PHP 适合于快速开发的服务器语言。我只是学习过一些，大概有两三次学习，每次都是学习一点，然后又放弃。最后遗忘。因为我还是喜欢java

Node.js 基于js的服务器后台语言框架。其非阻塞的特点，便于开发高性能的网站。开发快速，现在在国内已经开始流行，而且有很多开源的组件，使得node.js的可以实现的功能越来越多，比如著名的express.js 这是提供快速开发网站的支持，自带restful

**C#, C ,**曾经学过，现在已经快忘得差不多。

javascript 主要是用于浏览器的脚本语言，现在有了node.js当然也可以用在后台服务器，入门较简单。jquery也是必学。学好这个东西很重要。现在HTML5 的世界，javascript可以做到事越来越多了。基于V8虚拟机，也使得javascipt在chrome的性能提升了很多倍。

==================== 工具类 ===================

Eclipse 开源java IDE，当然这个IDE也可以用来开发C/C++ ,PHP,ruby等程序，我认为它是世界上最好的集成开发工具。可以通过插件无限扩展其功能。

netbeans oracle开发的开源java IDE，不过我认为和eclipse还是有一定差距的。不够好用，而且有点卡。

notepad++ 开源的文本编辑器，支撑几乎所有语言的高亮显示，还支持安装各种插件扩展其功能哦。很小巧。

tomcat 开源的java servlet容器，轻量级服务器。性能很好。不过很多Java EE的特性程序，是不能在tomcat上运行的。

Jboss AS 开源的JAVA 应用服务器，它的功能则强大得多，支持tomcat的所有功能，而且对JAVA EE也提供完整支持，现在最新的jboss AS 7中，加入了OSGI功能，使得它更加强大。

Jetty 开源的java servlet容器，你可以把它简单理解和tomcat 差不多，不过它更加小巧，甚至可以内嵌到应用中，小到只有一个包。也就是你的程序可以本身就单独运行，当然需要在程序中加入jetty相关包。

Aptana 开源的eclipse插件，功能强大，提供了很多web开发功能，支持主题、内嵌git 插件等，而且它的javascript 辅助功能也更加强大。其他很多功能我还没有用到，但是它值得你开始使用。

checkstyle 用于检查代码语法和结构的eclipse插件，它的要求比eclipse自身更加严格，对开发人员的编程规范要求很高，不过可以让你写出的代码质量更高、更易于他人阅读理解。

findbugs 检查代码中潜在bug的eclipse插件。我对它使用还不够熟悉，但是它还是很有用，方便你随时检查下代码是否有常见bug。

MAVEN 类似于ANT的项目打包、构建工具，也是基于组件式的，你可以通过使用多个maven插件来完成很多功能。使用自动化构建程序等任务，比ant强大很多，同时支持调用ant命令。

git 开源的代码版本控制工具。分布式，没有中央服务器照样安全工作。

chrome 谷歌浏览器，我通常用它来调试web 应用程序，相当给力啊。

Nexus 开源的maven 仓库管理工具，功能很强大。

Jenkins 开源的项目自动构建、持续集成服务器。基于Hudson 开发。

run jetty 在eclipse 内一键运行jetty的插件，在开发maven项目的使用用起来特别方便。简单，而传统的run on server是做不到这点的。

M2E 开源的maven eclipse 插件，提供图形化支撑。

=====================java开发框架=======================

struts 很著名的控制层框架，不过我不太喜欢

spring framework 全世界最好的框架之一，它的能力之强大，使用范围之广。据说它里面的代码实现相当经典，不过还没有拜读。其衍生出的很多框架也很好。比如spring security

hibernate 开源的ORM框架，将所有对数据库的 操作都做成操作对象的形式，不过它的弱点在于不能直接使用sql 语句操作，在处理一些比较复杂的查询功能时没有直接操作sql语句简单。很麻烦。

jgit git的java实现。很不错哦，在一个eclipse插件里面使用了这个包，这样再也没有狂平台的问题，java帮我解决了一切。

apache poi 开源的java api，你可以用它来操作windows 文档：doc，xls，ppt，pdf等等。很方便。以前用它作过导出数据到excel中。

jersey 开源的java restful 服务实现。比较简单吧。用起来也舒服。

apache CXF 另一个开源的java web services 实现，当然支持标准的rest服务。通过它还有osgi 版本，很前卫。

dom4j java的操作xml 的开源类库，有了它读或者写xml文档都很简单。

apache fileupload java开源的文件上传插件，很实用，也比较简单。

log4j java 开源的日志框架，可以将软件日志写到控制台、外部文件、数据库中

slf4j 另外一个开源的java日志框架，但是它本身并不提供实现，而是提供了接口。如过你想把日志写入外部文件或者数据库还需要配合log4j等其他框架使用。

================其他开发框架 =========================

twitter bootstrap twitter的开源前端框架，用它开发一个网页界面，超级简单，快速，而且很美哦，兼容性也很好。

artdialog 一个中国人写的开源js弹出层框架，很好用，而且也很绚丽。强烈推荐。

jquery form 一个开源的jquery form 插件，可以用来执行ajax 表单请求。等等。

xml2json 一个用于把xml文档转成json的jquery 插件。js操作json还是更加舒服。

highcharts 开源的js图表插件，功能强大，有多种图表，并支持ajax异步强求。

jquery 这个强大的js 框架，让js变得更加好用。

jquery UI jquery 的UI控件框架，集成了很多网页UI组件，不过我认为有了twitter bootstrap 此框架少了很多吸引力。

jquery mobile 用于移动平台的jquery UI插件，可以把节目做得更像移动平台原生，我感觉目前性能还有待提升。

目前只想到这些，文中对开源软件的描述可能有错，欢迎指出，讨论。

不要重复造轮子。

## 抗议SAE !!

发表于 2012-03-22 更新于 2026-08-04

真心觉得SAE流氓。

我这个博客流量这么小，如果按照新浪的指标来的话，每个月可能都得花20块钱。和GAE差太远了。让人恶心。

我想我可能会在近期又再一次迁徙吧。

哎，当初真的不应该支持新浪？？

## Maven 直接部署第三方jar，bundle,war包到仓库

发表于 2012-03-09 更新于 2026-08-04

上一个月，很忙碌。到后面还没退加班到9点，所以就很久很久没有打理自己的博客了。今天说一些如何使用maven部署一个只有编译后的jar的第三方包到我们的nexus仓库服务器。通常我们说的部署都是部署一个maven项目，有pom.xml，里面写有部署管理 ** **元素。我们直接使用maven deploy即可以部署成功。今天我们所有的只有一个编译好的jar文件，下面开始部署

我们将使用 mvn deploy:deploy-file 命令执行部署。在命令行中输入下面命令：

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15

    mvn deploy:deploy-file

    -Dfile=

    -DgroupId=

    -DartifactId =

    -Dversion=

    -Dpackaging =

    -Drep[ositoryId =

    -Durl =

回车即可执行了，需要注意的是，版本里面定义的snapshots 和release 要和后面部署的仓库地址对应哦，即是：snaposhot版本只能部署到snapshot仓库。这个很重要。

如果你确保所有信息都输入正确，仍然不能部署成功，请尝试 mvn -e deploy:deploy-file

## maven 远程部署项目到jboss as 7（maven remote deploy to jboss as 7）

发表于 2012-02-11 更新于 2026-08-04

在Jboss as 7中，我们需要通过JMX进行远程部署项目，并进行权限验证。而jboss as 7默认是将jmx 远程关闭了的。

甚至我们尚且不能通过远程主机的真实IP进行访问。默认情况下我们只能通过localhost或者127.0.0.1 进行访问。

下面我们进行通过jboss-as-maven-plugin 远程部署项目到jboss as 7上面。这里只讨论standalone模式。

第一步，首先我们需要允许用户通过外网IP访问服务器。打开${JBOSS_HOME}/standalone/configuration/standalone.xml .

搜索文件中的127.0.0.1 我们大致可以搜索到下面几条信息：

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13

    ${jboss.bind.address:127.0.0.1}

通过上面这些信息，我们可以看到jboss已经把其web服务器以及web console(web控制台)以及 comman line（命令行）的地址都绑定到127.0.0.1上面了。也就是用户只能通过本地对服务器对其访问与管理。在网上看到有人解释说，这是因为jboss处于安全的考虑。这个姑且不管，我们现在需要实现通过真实IP访问。

因为将文件中的127.0.0.1全部替换为0.0.0.0,保存文件后，重启。

现在输入服务器的外网IP就已经能够访问了，不管是8080，9990,还是9999端口。

下面添加远程JMX的配置

同样是该文件。我们通过搜索定位到：

    1

在其节点中，添加下面的信息：

    1
    2

该信息即是让jboss as 7 支持远程访问的关键。如果想取消远程访问，则请删除该行后重启服务器即可。

下面是对项目中的pom.xml进行配置，添加jboss-as-maven-plugin

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35

    org.jboss.as.plugins

    jboss-as-maven-plugin

    7.1.0.CR1b

           install

             deploy

              192.168.1.106

               9999

               admin

               wahyd4

现在配置好了，执行mvn install时候 ，maven就会自动部署项目到jboss as 7中了。

这个东西，一直在网上都没有找到答案。。

格式 没有缩减，请谅解。。有问题，请留言一起讨论。

## 解决 hudson/Jenkins git can not fetch from any repository错误

发表于 2012-02-02 更新于 2026-08-04

hudson是一个很强大的持续集成服务器，支持maven、git等强大工具,通常情况下我们我们使用期来持续集成如git 仓库中的代码，编译后打包发送到maven包仓库如nexus中。

今天在执行Hudson编译git仓库中代码的时候发现如下错误：

    1
    2
    3
    4

    ERROR: Problem fetching from origin / origin - could be unavailable. Continuing anyway
    ERROR: Could not fetch from any repository
    FATAL: Could not fetch from any repository
    hudson.plugins.git.GitException: Could not fetch from any repository

在网上看到一些资料，这里有一篇Jenkins对git plugin 的描述比较详细：https://wiki.jenkins-ci.org/display/JENKINS/Git+Plugin 。

发现。出现这种问题的大多是windows 系统上的git。不能fetch数据，也就是将服务器上最新的代码下载下来与本地同步。大致原因就是因为git找不到读取git 仓库中代码所需要的密钥。

我们所需要做的是将系统中集成的path to git executable 路径换成msysgitcmdgit.cmd，而不是我们通常设置成的msysgitbingit.exe.

这样git就可以成功工作了。当然也就可以fetch repository 了。

现在应该就可以正常工作了吧。

0%