Python获取本机IP

除了用inetface库和分析ifconfig输出以外,一个比较简单的获取本机IP的方法:

import socket
def get_local_ip():
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    s.connect(("sdo.com",80))
    return s.getsockname()[0]

参考 http://stackoverflow.com/questions/166506/finding-local-ip-addresses-in-python

Maven recipe #1: Test Java code with groovy

问题: 受够了,不想写Java了,写个含有数据的map还要new出来一个一个put进去,想用groovy解决单元测试
解决: gmaven+groovy eclipse插件可以解决这个需求
在pom.xml中添加gmaven的依赖,注意,仅用来测试。老大不让生产代码里有不可靠的东西。

...
        <dependency>
            <groupId>org.codehaus.groovy.maven.runtime</groupId>
            <artifactId>gmaven-runtime-default</artifactId>
            <version>1.0-rc-3</version>
            <scope>test</scope>
        </dependency>
...
            <plugin>
                <groupId>org.codehaus.groovy.maven</groupId>
                <artifactId>gmaven-plugin</artifactId>
                <version>1.0-rc-3</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>generateStubs</goal>
                            <goal>compile</goal>
                            <goal>generateTestStubs</goal>
                            <goal>testCompile</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

在eclipse中新建source folder, src/test/groovy,在其中创建groovy test case即可

开始实践Poromodo Technique

看了@juvenxv的博客介绍Poromodo Technique Illustrated一书,结合我现在低下的工作效率,我决定实践一下这个方法。

  • 一张TODO表记录今天的计划
  • 一张Activity Inventory表用于记录长期的任务,标记已完成的任务
  • 一张Record表统计每天完成的任务数量

一个Poromodo持续25分钟,在这25分钟内只专注当前任务。Poromodo间隙用来给大脑做缓冲,清空前一个任务的影响,以便下一个Poromodo开始时快速切换到相应任务。

应对Interruption,对internal的accept, record & continue,一个poromodo作为一个原子单元不可被打断,一旦被打断应该重新开始。
对external的,评估重要性,分别拒绝、延后、安排时间、安排回调。

交通游戏OpenTTD

我总是对这种城市建设、交通规划一类的游戏欲罢不能,以前在Linux上一直只是玩Lincity,后来发现了纯交通类的simutrans,最近升级到Ubuntu10.04以后,终于可以玩这个六年磨一剑,精雕细琢的OpenTTD了。

Chindhattan Springs Transport, 19th Dec 1953

可以建造各种客运货运的汽车站、火车站,机场,码头等等,可以建设道路、铁路,可以购买公交车、卡车、火车头、火车车厢等等。可惜我玩了大半天还不知道怎么盈利。。。

My First Hello World Web App Using Compojure

Compojure是一个用Clojure写成的类似Sinatra的Web框架。Leiningen是一个新的Clojure构建工具,它用Maven来处理依赖管理,而通过封装Lancet(基于Ant)来实现build-in的task。

以上是背景介绍。以下是HelloWorld。

创建一个目录作为工程目录

mkdir compojure-app
cd compojure-app

像创建build.xml和pom.xml一样创建project.clj

(defproject info.sunng/compojure-app "0.0.1"
        :description "A demo app running on compojure framework"
        :dependencies [[org.clojure/clojure "1.1.0"]
                        [org.clojure/clojure-contrib "1.1.0"]
                        [compojure "0.3.2"]]
        :dev-dependencies [[leiningen/lein-swank "1.1.0"]]
        :main info.sunng.compojureapp.helloworld)

首行定义了项目的groupId, artifactId和version,其后的是maven风格的依赖定义,最后我们还定义了程序的主类。

这个helloworld只有一个文件,被放在src/info/sunng/compojureapp/目录下

(ns info.sunng.compojureapp.helloworld (:gen-class) (:use compojure))

(defroutes example-routes
    (GET "/" "Hello W0rld")
    (ANY "*" [404 "Page Not Found"]))

(defn -main []
    (run-server {:port 8080} "/*" (servlet example-routes)))

中间就是Sinatra风格的URL映射定义,最后在主类中通过一个run-server方法以嵌入式的方式运行一个jetty

回到工程目录,执行构建

lein deps
lein compile
lein uberjar

通过uberjar可以将依赖通通打入一个jar包中,接着就可以通过
java -jar compojure-app-standalone.jar
启动你的Web程序了,很酷吧

除了这种方式,还可以通过
lein swank
启动一个swank server(project.clj中定义了dev-dependency),再用Emacs的SLIME交互式地运行程序。

参考