junctioner

2007年5月30日

序:给自己找点事做

时间和日子在无知无觉中过去,问自己收获了什么?

每天无所事事。


列个标题,挖个坑,希望每天能来挑一点土。

《解读eclipse_3.50_galileo 源码》

从第一次使用eclipse(大概是03年的事,那时比较好用的是2.1版还是1.4版已记不清了)就想看看这么巧妙的一个玩意儿是怎么实现的,一直懒散无度,从未下手。

这段时间用SWT做个小工具,是边找边抄,为什么要那么写,不知道--真是有违一惯的作风。

每天下班后,都不是为什么奔忙着,网页?网游?都不知道自己看了些什么,玩了些什么。

eclipse 的jar很多,核心的是core.runtime和osgi(早些版本里,是没有osgi的),core.runtime比较小,就几个类,先攻击小的少的--毛主席真是伟大的军事家呀。

敬礼,睡觉去。

posted @ 2009-09-16 22:17 junctioner 阅读(227) | 评论 (0)编辑 收藏

一穷二白学习C语言(1)

前言
  一直想学习C,在刚知道有计算机的时候就想学习C,上学时,偷上计算机专业的课,学了半年Turbo C,学到指针时,晕了,也就没有下文。工作之后,时有心血来潮之时,但还是没怎么学习,Java还是比较简单,Java几乎占据了工作全部,更少有学习C了。用Java,研究到Java的核心,发觉还是得学C,学呀,学吧。
  今天也是一时的心血来潮了,趁着有股劲,开始动手,记录一下,以期待和方便下次来潮。

  写出的代码,得编译才可以运行,这个编译环境,得先搭起来。VC、Visual Studio,都微软的东西,有点抵触,也有些大,不安装了,手工配一套环境吧。
  网上搜了一下,Windows系统配C的编译环境,得要MinGW或者cygWin,以前都下载过,但一直不知道它们本身是个什么东西,再查,知道大概:二者均基于GCC(GNU Compiler Collection -格努编译套件),再加一些基本的类库。去各自的官网分别下载安装,感受:cygWin更象是一个linux的模拟器,把linux环境下的GCC给模拟出来,其它的就都一样需要基本的编译器、类库,其它的如make工具。使用的时候,个人取向选择minGW,在环境变量中指向{$minGW}\bin,gcc和make就可以在cmd中运行了。
  写个简单的hello world源程序,gcc一把,生产可执行文件,运行,结果出来,OK!

  注,下载minGW时,我选择了自动安装下载,一个个的下载,点来点去,累的慌。
单独下载minGW,要如下几个包,再分别解开放在同一目录中。
gcc-core
C语言编译器
gcc-c++
C++语言编译器
mingw-runtime
MinGW的运行时库(这个必须安装)

win32api

win32API函数头文件和连接库

binutils

MinGW的汇编器和连接器等基础工具

gdb

MinGW中的调试工具
mingw32-make
Make工具,用以更好的管理你的项目
make解后,没有通常的make.exe,只有一个mingw32-make.exe文件,其实,把这个文件改名为make.exe就行。

posted @ 2008-12-22 15:53 junctioner 阅读(1686) | 评论 (6)编辑 收藏

年迹

1978:第一个关键的年份
1988:虽然是第一个十年,但十岁的生日没多少印象了,更多的是开始注意的第一个年份。
1993:初中结束了,
1997:高中结束了,
2000/06/30:大学毕业了,世纪之交呀!
2000/08/03:子身跑到汕头的一个小镇开始第一份工作,真正的人生地不熟。到目的地时,身上只有20块钱了,还是年青的老板给我付的“摩的”费。
2001/11/03:混到一份跟自己所学专业,所做的工作一点也不相关的工作,毅然一个人跑到北京。首都呀!当时天很冷,比我想象的要冷,下车后把能穿的都穿上,不知象什么熊。打22块钱的车找到公司,竞然还没到上班时间。
2004/06/xx:一个伤感的月份,也注定要离开这个做了好几年有公司。
2004/08/04:换了一个比较远的公司,在朝阳,自己租住在西直门。
2005/02/28:一个没有29日的月份,还没开始工作,就没有选择的离开了。
2005/07/03:
2006/07/03:换了一份工作,不知什么感受。

posted @ 2007-06-19 16:35 junctioner 阅读(266) | 评论 (0)编辑 收藏

Velocity之首次研究

    与Velocity的第一次见面,是03年,有个新同事推荐使用,因当时我在做别的项目,也没怎么仔细了解,简单的知晓类似如模板一类的东西。之后有过几次接触,但,都没花时间仔细看,前段时间,帮朋友做一个小东西,觉得用个模板做,会省很多事,想到Velocity。东西很小,做完了都没时间看Velocity,今天正好有时间,研究研究。
    Velocity是apache下的一个开源项目,其网址:http://velocity.apache.org/;下载地址:http://velocity.apache.org/download.cgi,可直接下载源码,也可通过SVN获取源码。
    在eclipse中创建一个web应用工程,把Velocity的源码拷到java资源目录下,自动编译后,报几个错,拷贝下载的Velocity源码lib目录下的commons-collections-3.1.jar、oro-2.0.8.jar、commons-lang-2.1.jar这个三类包到web应用工程的lib目录下即可。
    准备就绪,就写个例子跑跑试试。写一个hello.vm的模板文件,创建一个对应的Servlet,就可以运行了。两文件源码贴出如下:
    hello.vm
<html>
    
<body>
    #set($greet = "你好哇!")
        Hello!$name, $greet
    
</body>
</html>
    HelloServlet.java
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Hashtable;
import java.util.Properties;

import javax.servlet.ServletConfig;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.velocity.Template;
import org.apache.velocity.app.Velocity;
import org.apache.velocity.context.Context;
import org.apache.velocity.servlet.VelocityServlet;

public class HelloServlet extends VelocityServlet {

    
protected Properties loadConfiguration(ServletConfig config)
            
throws IOException, FileNotFoundException {

        Properties p 
= new Properties();

        String path 
= config.getServletContext().getRealPath("/");

        
if (path == null) {
            path 
= "/";
        }

        p.setProperty(Velocity.FILE_RESOURCE_LOADER_PATH, path);
        p.setProperty(
"runtime.log", path + "velocity.log");
        p.setProperty(Velocity.INPUT_ENCODING, 
"GBK");
        p.setProperty(Velocity.OUTPUT_ENCODING, 
"GBK");
        
return p;
    }

    
public Template handleRequest(HttpServletRequest request,
            HttpServletResponse response, Context ctx) {
        Template template 
= null;
        
try {
            ctx.put(
"name","Velocity");
            template 
= Velocity.getTemplate("/hello.vm");
        } 
catch (Exception e) {
            e.printStackTrace();
        }
        
return template;
    }
}
    创建servelt要注意的几个地方。
    1、新建的Servlet要扩展Velocity的VelocityServlet
    2、在servlet中要实现 public Template handleRequest(HttpServletRequest request,HttpServletResponse response, Context ctx)
       A)把要返回到页面上的数据放到context中对应到指定键值(键值名为对应模板中定义的变量名)
       B)引入指定模板文件
    3、导入配置文件的方法protected Properties loadConfiguration(ServletConfig config),是否实现,是可选的 ,其作用在后面说明。

发布运行后,访问http://localhost:8080/vt/HelloServelt,就可看到结果了。

运行起来,看到结果,是觉得很简单,其运行过程,就要跟踪看源码才能知道了。

    看源码,先看的,肯定是VelocityServlet.java。发现源码注释中,这个类已不推荐使用,推荐使用Velocity的一个子项目tool中的VelocityViewServlet.java,我没有当tool子项目,就先看这个“过时的”实现。
     VelocityServlet.java,扩展了HttpServlet,实现了doGet、doPost、init基本方法,前两个方法都直接调用新实现的doRequest方法,这些都是很常规的操作。
    doRequest方法做如下几件事:创建上下文、设置响应内容文件类型、获取模板(调用每个请求中的具体实现)、合并数据做出响应、出错处理及资源清理。看到这儿,整个请求和响应过程很清晰,并没什么特别的处理。
    接下来,看看它的初始化做了些什么事。就做了三件事,超类初始化、自己的初始化、缓存内容类型数据。自己的初始化,也就是(i)导入配置信息,(ii)根据配置信息做初始化设置。导入配置信息,是根据指定的几个地方,获取配置数据(在提供的样例中,重载了它的获取配置数据的方法,自己灵活的写入一些配置信息);根据配置信息做初始化的工作,应用单例设计模式,保证初始化工作的处理唯一。
    VelocityServlet自已的初始化,调用另一个类org.apache.velocity.app.Velocity的init( Properties p )方法,就看看Velocity里做了些什么。Velocity里全是静态方法。主要有如下几个方法:
    1、初始化;2、预演传入的数据(发现在应用中没有使用,只在单元测试代码中引用到);3、合并数据和模板;4、设置/获取属性;5、操作信息提示(不过,都不推荐使用了),整个的看下来,有两点:1、主要的还是初始化和数据合并了;2、这个类只是一个中转类,所有的方法,最终都是调另一个类org.apache.velocity.runtime.RuntimeSingleton的方法。
    打开RuntimeSingleton的代码,看一看,发现它同Velocity类差不多,类本身不做实际的处理操作。它与Velocity不同的是,它是申明一个静态的实例,再调用这个实例,个别地方(init())加了同步控制。如此处理体现它这个类的名字--单例,核心的还是这个静态实例org.apache.velocity.runtime.RuntimeInstance。
    到RuntimeInstance,就开始接触到Velocity的处理核心了。

    写到这儿,突然没有写下去的冲动了,暂切休息一下。
   
    抽时间看了一下Velocity子项目tool下的VelocityViewServlet的源码,比VelocityServlet要实现的好多了,与struct接合的比较好。
    Velocity,不仅仅适合于web应用,还可以作生成SQL、XML的模板,内容比较多,待一一挖掘。

posted @ 2007-05-30 15:49 junctioner 阅读(2899) | 评论 (3)编辑 收藏

<2007年5月>
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789

导航

统计

常用链接

留言簿(8)

随笔分类

随笔档案

文章档案

搜索

最新评论

阅读排行榜

评论排行榜