2009年4月21日星期二

Oracle收购Sun!!!

早上因为班上第一场篮球赛,起得比较早,不过起得比我早的人大有人在了,起来随便转了转,就听到小丁说Sun被Oracle收购了,当时大为吃惊,之前听说过IBM意图收购Sun,没想到半路杀出过程咬金,Oracle将Sun搂入了怀中!
对于我来说,不管是IBM还是Oracle,都是Sun不错的归宿,特别是对于我们这些曾经担心Java技术发展的人,可以松一口气了!呵呵,以后就可以看看Oracle怎么对付Microsoft了,IT业界的世界大战一触即发了!还有就是得看看IBM会采取怎么样的措施了,我这件事对IBM也有一定冲击的。
总之,以后Java程序员底气会更加足了!Nice!

ps:今天首场篮球赛大胜八班,我们足球队的贡献不可磨灭,特别是最后阶段,场上几乎成了足球赛了,因为两边球员差不多是踢足球的了。
附上xq同学的日志,可以看看今天我们的风采!
http://user.qzone.qq.com/396961105/blog/1240295541

--
Be yourself.

2009年4月17日星期五

不寻常的友谊赛

今天班上足球队在kaka同学的带领下去到武大同他的高中同学踢球,本来是比较期待的,毕竟这是一次难得的交流机会,而且大学四年来还从来没有在武大的场地上踢过球,怎么说都是不错的感觉,可是比赛过程却超乎了我们的想象。
他们那边踢球的水平和我们是差不多的,但是脾气之大是我们不能远远不及的。先是上半场,他们的一次进攻,由于一名队员没有及时将球传到位球丢了,等待接球那位哥们就不客气了,马上发了火,后面就差点大打出手了,真是看得我们瞠目结舌!比赛自然无法进行下去了,后面他们换了人,比赛才继续下去,这也为比赛蒙上了阴影,注定了比赛的不愉快。
比赛在这种气氛中进行,双方也都有进球,但从场面上来说,我们控制得更好些,特别是他们的前锋,几乎没有碰到过几次球,后面的比赛,这位仁兄的心态就有些变化了,终于在一次角球争夺中,他和风雷同学起了争执,随即大骂出口,进而有大打出手的意思……在我们看来,角球争执起点摩擦都是很正常的,那位仁兄的做法就有点过分了,显得太没有素质了。在那之后我们也觉得很郁闷,没心思再继续踢球了,于是退出了比赛。
总的来说,今天的比赛比较郁闷,但从另外一个角度看来,也让我们认识到了比赛的另一面,按照小涛的话来说,就是认识到"我们是如此的有素质"!

ps:今天先打右后卫,后又和小鲍换位置,改打右边前,感觉还不错,而且还收获了一粒首开纪录的进球,cool!不错也浪费了好多机会,呵呵,这也要怪他们的门将表现太好了,我几个必进之球都被他挡出来了。总的来说,以后需要加强力量的训练,感觉自身力量还不够。
--
Be yourself.

2009年4月14日星期二

为Tomcat添加https

其实这个主题网上一搜可以找到很多答案,但是我看过后总是觉得没有表达清楚。

这个过程其实很简单,步骤如下:
1.生成自己的证书
先运行命令:

%Java_home%\bin\keytool -genkey -alias tomcat -keyalg RSA
上面的命令默认生成一个.keystore文件在用户主目录下,也可以在后面加上-keystore filepath参数,由filepath来指定.keystore文件的位置。
运行命令时会需要输入很多信息,根据提示输入即可,需要注意的是密码部分,
上面的过程中最后需要你输入一个密码,要保证和最先输入的一样,否则无法使用,另外需要在Tomcat的配置文件server.xml中配置你的密码,这个见第二部分。
这样生成的证书是没有经过认证机构sign的,网上有提供免费试用的certificate的站点,如Rapidssl(http://www.rapidssl.com/index.htm),它可以认证你的证书,这样浏览器就不会弹出证书不可信的警告了。至于怎么让它认证自己的证书可以参照认证机构的向导。
2.为Tomcat添加https
需要将tomcat目录下的conf目录下的server.xml中的定义https连接的connector启用即可。如下:
<-- Define a SSL Coyote HTTP/1.1 Connector on port 8443 -->
<!--
<Connector
port="8443" minProcessors="5" maxProcessors="75"
enableLookups="true" disableUploadTimeout="true"
acceptCount="100" debug="0" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"/>
-->
如果你的.keystore文件在不在你的用户主目录中,你需要加上属性
keystoreFile="yourpath/.keystore"
另外你还需要制定生成.keystore文件时所用的密码,如下:
keystorePass="yourpass"
所以配置好的<Connector>应该像这样:
<-- Define a SSL Coyote HTTP/1.1 Connector on port 8443 -->

<Connector
port="8443" minProcessors="5" maxProcessors="75"
enableLookups="true" disableUploadTimeout="true"
acceptCount="100" debug="0" scheme="https" secure="true"
keystoreFile="yourpath/.keystore" keystorePass="yourpass"
clientAuth="false" sslProtocol="TLS"/>

OK,大功告成,启动Tomcat,就可以用https连接了,注意的是url格式变了,不再是http://localhost:8080/而是https://localhost:8443/,另外要指明的是使用https对客户端和服务器端来说都是透明的,浏览器和web服务器已经把加密解密的过程完成了,看起来和使用普通的http一样,只是url变了而已。
参考Tomcat的官方文档的SSL配置:http://tomcat.apache.org/tomcat-6.0-doc/ssl-howto.html
--
Be yourself.

实现文件上传的Servlet

今天帮同学实现一个上传的servlet,本来以为很简单,最后做起来,才发现还是比较复杂的,虽然现在已经用惯了spring,但是基本的servlet也不能忘记。今天做这个收获颇多,特贴出来,以便以后使用。其实写的不是优雅,但也基本能完成任务。
对于文件上传有这么几点,首先是servlet接受到文件上传表单的数据后,并未提取出文件名等信息,需要自己分析。而且在文件数据前后都有一个添加上去的头和尾信息,需要自己去除。下面是我的代码:

import java.io.DataInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Date;

import javax.servlet.ServletException;
import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class HandleFileServlet extends HttpServlet {
    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        String path = "D:\\";
        String filename = "";

        // System.out.println(getServletContext().getContextPath());
        System.out.println("content type:" + request.getContentType());
        System.out.println("file length:" + request.getContentLength());

        ServletInputStream is = request.getInputStream();
        int readLen = 0, conLen = request.getContentLength();
        byte[] b = new byte[1024];
        int len = 0;
        String terminator = "";
        // read the head infomation
        while ((len = is.readLine(b, 0, b.length)) != -1) {
            readLen += len;
            String str = new String(b,0,len);
            System.out.println("a line: " + "length:" + len + "data:" + str);
            int pos = -1;
            //got terminate string
            if (str.startsWith("---------------------------")) {
                terminator = str;
                terminator += "--";
                System.out.println(terminator);
            }
            //got filename
            if ((pos = str.indexOf("filename=\"")) != -1) {
                pos += "filename=\"".length();
                filename = str.substring(pos, str.lastIndexOf("\""));
                System.out.println("got filename:" + filename);
            }
            // quit read head data
            if (b[0] == '\r' && b[1] == '\n') {
                System.out.println("break from rn");
                break;
            }
        }
        if (filename.length() == 0)
            filename = "unknown_name.txt";
        File f = new File(path, filename);
        if (!f.createNewFile()) {
            System.out.println("Cannot create file");
        }
        FileOutputStream fos = new FileOutputStream(f);
        byte[] data = new byte[2048];
        int toReadLen = data.length;
        
        System.out.println("read length:"+readLen);
        System.out.println("content length:"+ conLen);
        System.out.println("conLen - terminator.length() " + (conLen - terminator.length()));
        
        if(readLen + data.length > ( conLen - terminator.length()))
        {
            toReadLen = conLen - terminator.length() - readLen-2;
        }
        while ((len = is.read(data, 0,toReadLen))!= 0 ) {
            readLen += len;
            //String tempStr = new String(data, 0, len);
            fos.write(data, 0, len);
            if(readLen + data.length > ( conLen - terminator.length()))
            {
                toReadLen = conLen - terminator.length() - readLen-2;
            }
        }
        fos.close();
        System.out.println("read after header:" + new String(data));

    }
}

html页面:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>文件上传测试</title>
</head>
<body>
<h1>选择一个文本文件上传:</h1>
<form action="servlet/upload" method="post"
            enctype="multipart/form-data">
            <input type="file" name="file" id="file1" />
             <input type="submit" value="上传" />
        </form>
</body>
</html>

--
Be yourself.

2009年3月4日星期三

电影《八月迷情》――音乐与信念的力量

刚刚看完《八月迷情》,内心实在是澎湃激荡。不管是电影本身的情节,还是电影中那美妙的音乐,都让我如痴如醉,特别是最后中央公园的那场演奏,将主人翁的命运和激昂的音乐交织在一起,荡气回肠,扣人心弦。
很久没有被电影这样感动过。在我心海深处,最让我感动的两部电影是《芬尼的微笑》和《勇敢的心》。这两部电影都是描述一个人一生的史诗性质的电影,电影感人之处在于将主人公的命途之多舛描述得到位,而且表达出了主人公那种坚强、勇于同命运做斗争的精神,这种情愫深入观者肺腑,产生共鸣,激发出了人类本身的那种不服输、坚韧的品质。就我个人而言,从这两部电影中,也看到了人的一生,虽然短如白驹过隙,但生存下来却是不容易,但只要我们拥有那颗勇往直前,坚韧的个性,所谓的困难,不过是生活多彩的一面而已,有了它们人生才丰富多彩。
《八月迷情》围绕着Evan Tyler展开,通过他的音乐灵感将另外两个人的故事展开。而这两个人,便是曾经一见钟情,却没能圆满的Evan的父母。虽然故事中有些情节令人难以置信,像Evan的音乐才华,但我愿意相信,至少愿意相信他的信念。不能不说这部电影的配乐,特别是导演将大街上那些噪声剪辑成富于节奏感的旋律,真让人拍案叫绝!还有Evan和他的父亲那段吉他对话,真是天籁之音!故事结尾父母两人及Evan重逢时的交响乐,同三个人的命运交织在一起,将音乐、信念的力量演绎的淋漓尽致!看电影的时候,我不由得想起了《天堂电影院》,里面多多的爱情永远无法圆满,成为了他终身的遗憾,也让我觉得遗憾。《八月迷情》中Evan之父母得以圆满,也让我松了一口气,同时也很是欣喜。
说到这里也有点遗憾,这部电影已经出来很久了,应该是2007年的电影,当时有同学向我推荐过,却一直没有看,一直拖到现在才看,实在是遗憾!!!但是感动不会过期,我要永远珍藏这份感动!
刚刚google了一下,这部电影也翻译成《声梦奇缘》,甚为贴切。但是也容易让人想到《童梦奇缘》之类的,不太好,我还是比较喜欢《八月迷情》,以故事主人公的别名August Rush来命名,而且电影中的音乐包括Evan父母之爱情,都如同Rush一般,也贴近电影之内容。

2009年3月2日星期一

[转]老程序员的10个忠告

    [1]好好规划自己的路,不要跟着感觉走!根据个人的理想决策安排,绝大部分人并不指望成为什么院士或教授,而是希望活得滋润一些,爽一些。那么,就需要慎重安排自己的轨迹。从哪个行业入手,逐渐对该行业深入了解,不要频繁跳槽,特别是不要为了一点工资而转移阵地,从长远看,这点钱根本不算什么,当你对一个行业有那么几年的体会,以后钱根本不是问题。频繁地动荡不是上策,最后你对哪个行业都没有摸透,永远是新手! 
  
    [2]可以做技术,切不可沉湎于技术。千万不可一门心思钻研技术!给自己很大压力,如果你的心思全部放在这上面,那么注定你将成为孔乙己一类的人物!适可而止为之,因为技术只不过是你今后前途的支柱之一,而且还不是最大的支柱,除非你只愿意到老还是个工程师!   
 
    [3]不要去做技术高手,只去做综合素质高手!在企业里混,我们时常瞧不起某人,说他"什么都不懂,凭啥拿那么多钱,凭啥升官!"这是普遍的典型的工程师的迂腐之言。8051很牛吗?人家能上去必然有他的本事,而且是你没有的本事。你想想,老板搞经营那么多年,难道见识不如你这个新兵?人家或许善于管理,善于领会老板意图,善于部门协调等等。因此务必培养自己多方面的能力,包括管理,亲和力,察言观色能力,攻关能力等,要成为综合素质的高手,则前途无量,否则只能躲在角落看示波器!技术以外的技能才是更重要的本事!!从古到今,一律如此!
 
    [4]多交社会三教九流的朋友!不要只和工程师交往,认为有共同语言,其实更重要的是和其他类人物交往,如果你希望有朝一日当老板或高层管理,那么你整日面对的就是这些人。了解他们的经历,思维习惯,爱好,学习他们处理问题的模式,了解社会各个角落的现象和问题,这是以后发展的巨大的本钱,没有这些以后就会笨手笨脚,跌跌撞撞,遇到重重困难,交不少学费,成功的概率大大降低! 

    [5]知识涉猎不一定专,但一定要广!多看看其他方面的书,金融,财会,进出口,税务,法律等等,为以后做一些积累,以后的用处会更大!会少交许多学费!!  

    [6]抓住时机向技术管理或市场销售方面的转变!要想有前途就不能一直搞开发,适当时候要转变为管理或销售,前途会更大,以前搞技术也没有白搞,以后还用得着。搞管理可以培养自己的领导能力,搞销售可以培养自己的市场概念和思维,同时为自己以后发展积累庞大的人脉!应该说这才是前途的真正支柱!!!

    [7]逐渐克服自己的心里弱点和性格缺陷!多疑,敏感,天真(贬义,并不可爱),犹豫不决,胆怯,多虑,教条式思维等,这些工程师普遍存在的性格弱点必须改变!很难吗?只在床上想一想当然不可能,去帮朋友守一个月地摊,包准有效果,去实践,而不要只想!不克服这些缺点,一切不可能,甚至连项目经理都当不好――尽管你可能技术不错!

    [8]工作的同时要为以后做准备!建立自己的工作环境!及早为自己配置一个工作环境,装备电脑,示波器(可以买个二手的),仿真器,编程器等,业余可以接点活,一方面接触市场,培养市场感觉,同时也积累资金,更重要的是准备自己的产品,咱搞技术的没有钱,只有技术,技术的代表不是学历和证书,而是产品,拿出象样的产品,就可技术转让或与人合作搞企业!先把东西准备好,等待机会,否则,有了机会也抓不住!

    [9]要学会善于推销自己!不仅要能干,还要能说,能写,善于利用一切机会推销自己,树立自己的品牌形象,很必要!要创造条件让别人了解自己,不然老板怎么知道你能干?外面的投资人怎么相信你?提早把自己推销出去,机会自然会来找你!搞个个人主页是个好注意!!特别是培养自己在行业的名气,有了名气,高薪机会自不在话下,更重要的是有合作的机会...

    [10]该出手时便出手!永远不可能有100%把握!!!条件差不多就要大胆去干,去闯出自己的事业,不要犹豫,不要彷徨,干了不一定成功,但至少为下一次冲击积累了经验,不干永远没出息,而且要干成必然要经历失败。不经历风雨,怎么见彩虹,没有人能随随便便成功!

又下雪了

早上在床就发现外面特别亮,还以为天晴了呢,等我起来一看,外面已是白茫茫的一片,武汉又下雪了!才明白早期的同学的尖叫是因为外面的雪!武汉的天气也真是奇怪,这学期刚来的时候,气温为28度,然后就不停的下雨,气温也不断地降,现在经常在0度徘徊,确实很冷。天气冷,空气湿度有大,外面又下雨,经常不出去,感觉自己就像发霉了一样。多么期盼出去晒一晒!这样天气持续得越久,对晴天的向往就越强烈。现在早早期待着出去玩了,近的有古琴台,归元寺,木兰天池,远的有庐山,三峡,武当山,神农架……期待太阳早点出来吧!

2009年2月28日星期六

历史笔记之二:古希腊文明成就

文学
诗歌 《荷马史诗》――由《伊里亚特》和《奥德赛》两部分组成
阿喀琉斯之踵:形容一个人的致命弱处。
寓言 《伊索寓言》
戏剧 悲剧――埃斯库罗斯 《被缚的普罗米修斯》,索福克勒斯 《俄狄浦斯王》,欧里庇得斯《美狄亚》
喜剧――阿里斯托芬
希腊戏剧来源于对酒神的祭祀。
宗教和神话
"希腊神话是希腊艺术的土壤。"――马克思。
神话形象:
宙斯――万神之主
赫拉――宙斯之妻
波塞冬――海神,宙斯的哥哥
阿波罗――太阳神,是宙斯与黑暗女神勒托的儿子
雅典娜――智慧女神
阿瑞斯――战神,宙斯与赫拉之子
阿佛洛狄德――即维纳斯,爱与美之神
赫尔墨斯――神之使者
哈迪斯――冥神
阿尔忒弥斯――月神
狄俄尼索斯――葡萄酒之神
其他省略...
艺术
建筑 主要为柱式建筑,有三种风格。
多利亚柱式:直接放于台阶上,下粗上细,柱头是圆形的石板
爱奥尼柱式:有柱嘴,凹头深,涡卷形柱头
柯林斯柱式:近似于爱奥尼式,但柱头为提篮式,最为华美
典型代表:雅典卫城,其中帕提侬神庙――最为宏伟,卫城之主体建筑,多利亚柱式。还有伊瑞克提翁神庙――帕提侬神庙之北,爱奥尼亚式之代表。
阿波罗神庙――不在雅典卫城,位于希腊巴赛,科林斯式。
雕刻
早期比较呆板(古埃及雕刻也比较呆板)
代表:掷铁饼者(米浓) 驾车者(米浓) 克尼多斯的维纳斯――体现女性的温柔、妩媚,第一个大型裸体女性雕像
希腊化时代的雕塑 更为传神
《拉奥孔群像》――最传神的作品
米洛斯的维纳斯 弄发的维纳斯
萨默斯的胜利女神像(无头人像)
抱鹅的少年 老妇 自杀的高卢人(高卢人指法国人)
垂死的高卢人
绘画 瓶画和陶画居多
克里特王宫壁画 几何纹瓶画
黑绘式――红底上用素描画出的黑色图案
红绘式――黑色底色上用红色绘制
史学和哲学
史学三大家:希罗多德――历史之父 《历史》
修昔底德――《伯罗奔尼撒战争史》
色诺芬――《希腊史》
哲学三大家:苏格拉底
柏拉图
亚里士多德
希腊化时代的哲学家
第欧根尼――犬儒学派的代表人
大白天点着灯寻找诚实的人,主张清心寡欲,崇尚自然的状态,反对一切矫饰的生活,主张人像畜生一样生活。
阿基米德 阿基米德之死,发生在地中海的叙拉古王国,被古罗马士兵杀害。
世界古代七大奇迹
指地中海东部沿案及附近地区公元前3世纪以前完成的七项工艺高超的宏伟建筑。
  • 埃及的胡夫金字塔
  • 巴比伦城的空中花园
  • 奥林匹亚的宙斯神像(高14米)
  • 罗德斯岛的太阳神巨像
  • 以弗所的阿泰密斯神庙
  • 哈利卡纳苏的毛索罗斯陵墓
  • 埃及的亚历山大港灯塔

历史笔记之一:古希腊概况

上大一曾经旁听过一些社会学系的世界历史课程,现在把笔记贴上来,顺便回顾一下古欧洲历史。
 
古希腊(公元前800年-公元前146年)
 
古希腊文明的源头是爱琴文明(公元前2000年-公元前1000左右)
 
而爱琴文明分为两个部分:
克里特文明
迈锡尼文明――圆顶墓
 
其实爱琴文明也可以算作古希腊文明的一部分。
公元前12世纪,多利亚人入侵,使古希腊出现了4个多世纪的黑暗时代文化断层是欧洲文明的一个普遍现象。
 
公元前8世纪-公元前4世纪,古希腊文明的鼎盛时期。
 
期间著名的城邦:斯巴达和雅典城邦。(所谓城邦,就是一个国家,它以城市为中心,周围是乡镇。)
斯巴达:军营式的社会
7-20岁的男子进行统一管理,进行各种军事方面的训练
20-60岁在军营里生活
雅典城邦:当时最大的城邦。独特的民主政治。实行公民大会,10天一次,年满20以上的男子参加。
弗里内审判:雅典名妓弗里内被控告亵渎了神灵,但在最高法庭上,她的辩护人将她的长袍拉掉,结果法官都被她的优美身体所折服,判其无罪。
雅典民主政治的污点――苏格拉底之死
 
希波战争和伯罗奔尼撒战争
希波战争:抵抗波斯人入侵。(希波之解:希――希腊,波――波斯)
希波战争共两次。
第一次在公元前490年。著名战役为马拉松战役――马拉松运动的来源。希腊人最终取胜。
第二次在公元前480年。两大著名战役:温泉关战役和撒拉米海战
看过电影《斯巴达300勇士》的人应该知道,这部电影就讲的是温泉关战役,其中的领袖是斯巴达国王李奥尼达,而波斯人的领袖是薛西斯。这场战役以希腊人失败告终。但它为希腊人争取了宝贵的时间。在后面的撒拉米海战中,希腊海军打败了波斯海军,波斯人面临着补给被切断的危险,不得不撤退。自此,希腊人第二次取得了第二次希波战争的胜利。
伯罗奔尼撒战争:在第二次希波战争结束后不久,公元前431年兴起,一直持续到公元前404年。
它是希腊城邦之件的内战,最终导致希腊文明衰落。
 
马其顿的崛起(节选于维基百科-古希腊)
马其顿位于希腊的北部,处于希腊文明的边缘,被希腊人视为蛮族。公元前4世纪起,马其顿逐渐成为希腊北部的重要国家。公元前338年,马其顿打败以雅典为首的反马其顿同盟,取得了对整个希腊的控制权。
公元前336年,20岁的亚历山大即位。他随即平定了雅典城邦的起义,巩固了政权。
前334年,亚历山大率大军渡海东征,拉开了他征服世界的序幕。
前331年,亚历山大和大流士三世之间具有决定性意义的高加米拉战役爆发。亚历山大再一次取得了胜利,并乘势攻下巴比伦,波斯帝国灭亡。亚历山大继续东进,直到印度河流域方才折返。
前323年,亚历山大病死,他庞大的帝国也随之分裂,古希腊历史结束,希腊化时代开始。
 
希腊化时代
公元前323-公元前146
希腊化之含义:亚历山大大帝的东征也将古希腊文明带入了东部,各个文明相互融合,希腊文明广泛传播,开始了更为广范的影响。
古希腊之后的古罗马文明深受古希腊文明影响。
公元前146年,希腊被并入古罗马共和国。一般认为这是古希腊时代的结束。
 

用Foxmail写邮件

越来越发现写博客成为我的噩梦了,为了写一篇文章,我不得不打开浏览器,登陆我的blogger账户,然后再建立新的帖子,为了贴图,还得把图片上传到Google Picasa上面,再链接,实在是烦人。好在blogger有通过电子邮件发布的形式,我就可以试试用gmail来发帖了。
在邮件客户端上面徘徊了很久,先是windows mail,发现它实在是太简陋了,太难用。而outlook又太臃肿了,经常卡,搞不好就死掉了,再说使用盗版的也不怎么光彩。最后选择了foxmail,感觉还不错,以后就用这个来写吧。
顺便列一下最近的计划,虽然要做毕业设计,但我的题目相对比较简单,我可以抽出很多时间来学习其他的东西了。打算把MySQL和python好好学习一下,不能荒废了我的大好时光。相关的文章我会不断贴出来的。
测试一下看能不能贴图: