2007年5月9日星期三

胡思乱想 之 银行取款报警码

        像绑架这种事情在电视看还是看的比较多,生活中确不多见,但还是有的,就像买保险一样不怕一万只怕万一。闲话少说,今天之乱想主题是银行取款报警码,功能症状如下:
        我们的银行卡帐号和密码是一一对应的,也就是一个帐号一个密码,这个报警码的出现将同样是这帐号的密码,可以取钱,但是一但你用这个密码取钱,你就相当于报了警,属于暗线报警,即不会马上鸣笛之类的,因为不这样的话会给被害人带来更大的危险。取钱的过程是一样的,取出来的钱是真的,但是与公安机关联网的公安人员马上会注意到你,启动银行内或取款机外的智能摄像头尽可能的拍摄图片,并马上根据用户资料联系其家人,同时马上启动便衣跟踪或其他跟踪。这样,对于犯罪份子来讲,他们根本不知道你给的是安全码还是报警码,同样可以取钱,但你用报警码时你已经被公安机关盯上了,无形之中报了警。这样不但不增加受害人危险程度,而且还报了警,并且还能尽可能的减少损失,也能加快破案时间和效率。
        我觉得还是可行的,更能增加银行的可信度和安全保障,让客户的钱在银行安全,出了银行仍然安全。

2007年4月29日星期日

中关村一人行有感

        为了买一破MP3,在中关村几大电脑城跑了一下午,那个累啊!说实在的我真怕一个人去中关村!一进那个大楼大门,我的个神啊!年轻的中年的男男女女开始张口伸手,向你靠拢...像是要被打劫了一样,姑且说是热情,可我感觉就是要被抢劫!平时和朋友一起来还不觉得,跟着他们就一个劲的猛走,现在忽然感觉很害怕一样,于是目光直盯着电梯口--猛冲。
        上了2楼三楼,大大小小的店面小摊位就很多了。看着这些大大小小的店面,大店面就是老虎,吃了不吐骨头;小店面就是蟒蛇,一样能吞象!想起了一个僵尸的恐怖片,那个僵尸王问那几个揍他的家伙:你们是让我咬脖子还是把手伸过来让我咬下?!反正都是挨宰!------人也真的多,老要问哪来这么多人买东西啊,后来知道点了,3-5成是电脑城的人。来来往往穿梭的人群还是以年轻男女为多,各式各样,卖点东西都像卖春似的到处大喊,这些商家也都这么想把,“美女”招客。受不了,估计他(她)们最喜欢情侣出现,帅哥出现,有钱人出现吧,一见这样的人就猛推贵的夸女的漂亮男的帅了,又开始新一轮的不讲人话了;呵呵,难怪我个农民样一跑过去人家就直接报最低价最便宜的了,再一讲那个脸色就就跟那暴风女一样了。结果一下午没买,倒是帮朋友买了个好鼠标垫,我自己买了个鼠键套;那老板也实在是好商人,不谈多的,只给最低价(我一路问过来的),然后就忙出出货进货,这才是商人嘛!要那些花哨的东西干什么,女人放床上不就完了么,拿这种地方恶心做什么;男的也必须穿个西装像个流氓的满电脑城喊啊拉啊请啊什么的,实在不是生意的料也是让顾客恶心的事。
        有啥办法,这电脑城又不是我开的,你叫人怎么相信诚信,忽飘忽飘这些玩意儿充斥着电脑城...没啥好怨的了,敬告YOU,一个人少往电脑城跑。

胡思乱想 之 大中城市公交改良建议

现状:
        这里就拿北京做示例,北京公交车多,为了缓解上下班压力,现在采取的方案是对特别路线使用快车,如300快之类的,然后把小公交车换大的,两节的或双层公交车,还采取的公交道的办法(实际中效果并不很理想,一到堵车时占道的小车仍然是抢道)等。但仍然每天上下班挤死人,我是这样形容挤车的:这男女到了这个时候就跟那肉夹馍似的,已经没性别之分了,像面包片一样一片贴着一片。我想即使扒手也难把手伸出来活动吧,呵呵,据说这是北京公交扒手少的原因之一。按目前的公交规则也是没办法的,要么新增加客车,缩短发车时间,300快就是1分钟1趟,仍然拥挤;但一过高峰这新增加的车必然增加成本,而且还资源浪费了。


胡思乱想:
        长远来讲目前的公交规划还只是马马虎虎刚好够,或者不出乱子的能运行下来。但08到来,听说北京得限制人口了吧。可想公交到那一段时间,是否真的承受得住还是出现崩溃的局面。
我的设想(巨大的资金成为不现实的主要因素,额外,此想法还尚未成熟):
订制式的交通系统--我称之为。大致如下:
车站(公交子站):

模式参考地铁站+长途客运站:
                A方案:站内的车在开车之前完全不知道目的地,由公交系统动态设定路线,可考虑导航系统。乘客在进入站口买票或打卡时选择目的地,公交系统根据乘客选择的目的地以及选择人数快速计算出最优公交车路线。
                B方案:站内车在开车之前知道自己可能会去某条线路,也就是说,线路定下来了,但是该线路的车次没有定下来,这样可以节省导航系统以及降低公交系统的复杂性,但灵活性也受到比较大的限制。
概述:发车时间根据排队人数和车辆等待时间来确定。如:如果确定路线人数超过额定公交承载数,如50人,那么马上发车,继续装载(当然在人特别多的时候可以临时决定每车多加N人,但不至于拥挤到都没地方扶手,可酌情考虑);如果人数不足,但等待时间超过限定时间比如5分钟或10分钟,也马上发车。这样积累规律,定期调整等待发车时间。这样一来,人少的时候,可以把车划拨到其他线路上去,可以减少其他线路乘客等待时间;忙时把其他人少线路的车又挑拨回忙的路线,最);公交系统子站系统(类似于一大限度的接近0等待,上满限定人数就走。

车站所需设备:需要尽量多的场地(可考虑复式多层停车场模式);N辆公交车;每台车的路线显示应为电子板(可动态更换个地铁站,需要N个多入口和刷卡设备以及售票窗口和自动售票机);工作人员。

车站兴建地点:根据商业区工业区交流流量的程度分别建立相应的规模如上所说车站,但并不是每一个公交站点都建立一个这样的车站。可根据流动密度以及车站之间的距离以及场地合适性来选择,搭配类似于超市免费公交车的接受车,讲乘客拉之车站,然后集中发送。需要注意搭配运载车所圈范围以及数量,也可根据人口流动时间段来接乘客至车站,如果出现这种车的拥挤也是设计不合理的;可考虑因为在上下班之高潮时,但车站瞬间并不能发送这么多趟车时把这些车临时改为配送车,接乘客至车站然后马上进入发车状态。

想到的一些小措施:
        1.N个进站口在在高峰来之前可根据积累经验预定路线,这样,乘客可以直接刷卡进站,不必选择目的地,从而加快进站速度以及减少站内停滞时间。

车站兴建条件分析:
        有利条件:现成的公交车,只需整合即可;非常独立,所以建好每一个站都可以独立的马上投入使用;原来的小车站仍然可以使用,可以作为下车站点;加上目前对交通的措施,如公交道,双层双节车等措施必将大大改善乘客拥挤状况,也极大增加了客运的可伸缩性等。
        不利条件:如果真出现这样的车站,目前公交系统的公交线路必定被打乱;由于北京每个地点都是黄金地,特别是想在黄金地段新建一个这样超大车站必然耗资巨大;车站未覆盖到的地区由于下车然后中途上车,仍然可能出现拥挤。

特点:集装箱似的,根据上下班流动态变化路线、车次等。


我一人暂时只能想到这么多,愿望只一个:改善乘客环境(主要指拥挤的上下班流),长远规划人口继续增加的带来的公交压力。

2007年3月11日星期日

胡思乱想 之 人才拍卖会

今天胡思乱想的主题是:人才拍卖会
身为一个IT新手,人家招聘总是要求你工作经验什么的,除非你名牌大学非一般的成绩,等天然因素,求职都是很困难的事,往往即使费力进入公司也是工资相当的低。
像我这样没工作经验也没学历的同胞怕是大有人在吧,我们找谁去要工作经验?我们没能力读名牌大学但我们做出的东西真的不如他们吗??我想这也不一定的。怎么办,我们得想自己的出路,今天想的就是自我推销人才拍卖会。
人才拍卖会与招聘会不同,是人才选企业,由主办方接受应聘者申请,并筛选出定额名单。主要关注其项目能力,不管你是否是在公司做的,一定是由你做的,其次知识的深度和宽度,最后筛选出若干名单,分批"拍卖".
到时候主办方对企业发邀请函。
“拍卖会”开始的时候,由会员(人才)自我介绍以及项目演示,最后由企业提出问题,总时间限定在1个小时。企业也可以提前否决当前人才,但得超过一定票数提交给主办方。讲解完后由企业出条件来吸引人才,由人才决定选哪家公司(一次举牌),企业保证该人才直接进入试用期或面试机会。
详细细节得多几个臭皮匠才行:)
这也许行不通,但是作为一个新手,我想为后来者提供一份思想,希望他们能和企业能拉近需求的距离,为解决一面企业人才需求大,但求职者更多的情况拉近距离。
由志同道合的朋友可以和我联系13397301350(唐).

2007年3月3日星期六

DOJO学习系列(前言+HelloWorld)

起初学习Ajax的时候是从《Ajax 基础教程》开始的,接触Ajax让我感触最深的却是javascript比想象中强大得多,之后一有空就淘淘好的javascript代码。随之出现的Ajax框架也很多,但我一直认为自己写才是王道,用那些框架干什么,所以也没研究。有需要就自己写了,并没考虑安全效率等问题。学asp.net的时候接触了下Atlas,试用了下确实很好用,根本不需要自己写代码,这样就萌发了学习下java下Ajax框架的想法,炒得比较火的有DWR、DOJO,按照接触顺序一次学习了下,写了一些demo,关于DWR我会写一篇blog,这里就谈谈DOJO吧。其实老师早跟我说过IBM 的DOJO,我当时还是坚持说网上DWR很流行,群里面也有蛮多人讨论DWR的,再加上草草看过DOJO源码和文章之后根本不知道它们在搞什么,demo也没能写出来,所以放了下来。这次项目给自己下了死命令一定要用DOJO,起码要DEMO一下,说实在的,网上下的文章没能帮助我多少,还是源代码来的直观。
我的第一个DOJO Demo还是要感谢 良葛格 的HelloWorld,只能怪我天生愚钝,第一次按他的写没能写出来。我第一次写是这样写的:只把dojo.js添加到web目录下然后demo调用,结果IE提示javascript错误,找不到什么什么,郁闷死了。源码下的demo看过之后脑袋都是大的,不知道如何下手,代码多了。突发奇想(对我而言:)),我把helloworld.html直接拷贝到源代码目录下,改下引入dojo的路径,嘿嘿,可以了,不需要应用服务器就可以了。这样我明白了过来...下面开始写吧:
1.下载dojo-0.4.1-ajax.zip
2.把解压后的dojo-0.4.1-ajax整个拷贝到web目录下(随后你可以知道其实并不需要这么多)
3.撰写测试页面(index.html)添加下面代码片段:

《script language="JavaScript" type="text/javascript">
// Dojo
configuration 这里设置是否输出调试信息 djConfig = { isDebug: true
};《/script>
《script type="text/javascript" src="dojo-0.4.1-ajax/dojo.js">《/script>
《script language="JavaScript" type="text/javascript">
dojo.require("dojo.io.*");
dojo.require("dojo.event.*");
dojo.require("dojo.widget.*");
dojo.require("dojo.widget.Button");
//这里你可以理解为java里面的import dojo.addOnLoad(init);
//这个是回调函数 function
helloCallback(type, data, evt) {
if (type == "error")
{
var txtNode =
document.createTextNode("error...");
} else
{
var txtNode =
document.createTextNode(data); }
var result =
dojo.byId("result");
dojo.dom.replaceChildren(result,
txtNode);
}
function helloPressed()
{
dojo.io.bind({url:"response.txt",
handler:helloCallback}); }
function init() {
var
helloButton =
dojo.widget.byId("helloButton");
dojo.event.connect(helloButton,
"onClick","helloPressed");
} 《/script>
《/head>
《body>
《button dojoType="Button" widgetId="helloButton"> Press
Me

《 divid="result">《/div>
《/body>

4.基本上写过Ajax就可以看个明白了,我们还需要在同目录下创建response.txt,写上HelloWorld !目录结构
—WebRoot
——WEB-INF
——|—...
——META-INF
——|—...
——dojo-0.4.1-ajax
——|—DOJO源代码
——index.html
——response.txt
5.启动应用服务器,OK,如果你的按钮变了颜色,并且没提示javascript错误,那么你成功了!!
6.我提供的HelloWorld是精简了的,像java一样,我只提取了我需要的js,比如引入的(require)io
以及widget的部分js文件,注意你需要a11y.js Manager.js如果没有这个文件 debug失效(暂时如此)
,如果你少什么debug会在页面上直接告诉你,你依次添加就行了。
下载地址
下一期讲widget下的DOJO小部件。
参考文章:苏小勇的bloghttp://www.bestunix.net/p/dojobook1.php
良葛格http://www.javaworld.com.tw/jute/post/view?bid=49&id=166519&sty=1&tpg=1&age=0

2007年3月2日星期五

Java 我该如何继续

学习Java有1年半有余,从基础的语法学习到学习AWT、Applet,然后学习JSP、EL、JavaBean、标签,再到后来学习Struts、JSF,最后学习流行技术Spring、Hibernate、Ajax。
每学一样自己不知道的技术都很兴奋,学完之后就是茫然,于是研究下JavaScript,eXtremeTable,JFreeChart等。
真的是广而不精,感觉对Java学习就是对拦腰式的从中间学起的,我想很多人也和我一样吧,特别是学生或一些程序员们,大家都困惑了。
这个时候想真正提升自己的话我觉得应该开始往两头发展学习,一方面我们可以学习研读 深入Java虚拟机 等一类优秀的书籍 从Java的原理开始,让自己知道我们以前写的类在虚拟机这边到底是怎样运行的,为什么都有莫名的错误等;一方面我们可以开始接触设计模式,深入理解其精髓。另外多读源代码也是受益匪浅的,像Tomcat、Struts这些开源的应用服务器都是非常不错的可读对象,我们甚至可以仿写。我想接下来我会这样做,你呢?

eclipse报内存不够的警告解决方案


eclipse用一段时间后可能出现内存不足的警告 随后可能意外卡死

如上图,解决方案:
打开根目录eclipse.ini,加入参数:
-XX:PermSize=64M
-XX:MaxPermSize=128M

JFreeChart初探

以前在作一个考试系统的时候需要用到统计图,如饼图。当时才学java不久,刚好学完applet和awt,所以选择了awt来画了。因为需要根据给定参数计算,以及验证之类的,画一个饼图用了好几百行代码,不过总算能行了,但每次加载起来特慢,打开网页半天才反应。用了一段时间后他们发现了一个更好的专业的画统计图的东西,可以画好并生成图片,这样一来applet和我当时还自豪的小成果被抛弃,当时还不知道什么,估计就是jfreechart了,但忙于学其他东西去了,就没管了。
初识它是在JR上看到的,然后在open-open上找到的,放在硬盘上一直没动,这不,现在一个项目中需要用到统计图表,不得不重新翻出来,运气差的是我下载文章仅一篇都看不了,又是过年在家,家里不能上网,只有jcommon-1.0.5.zip和jfreechart-1.0.1.zip两个东东。还是抱着先看看的想法开始了...(-_-#本人对英文有恐惧症,一般是先看一些中文文章才开始研究这些开源的东东)正题
1.解压jfreechart-1.0.1.zip,最让人赏心悦目的demo出现在眼前,但是是jar文件,也就是暂时只能看效果不能看demo的源代码了。
2.新建web工程(Test_JFreeChartDemo),把源代码下的lib文件夹下jcommon-1.0.0.jar和jfreechart-1.0.1.jar加入工程,把jfreechart-1.0.1-demo.jar也加入工程,这样可以直接看效果了,demo里面都有每个例子基本上都有main,所以加完后点右键可以直接运行例子,哇塞!!好牛叉!!这是我第一反应,有饼转图、柱状条形线形等统计图,3D的也有,例子很多,这里告诉大家一个我看了N个例子后偶尔知道的经验:直接运行其中一个SuperDemo,这是总图,左边一个树,点击相应的节点就可以看到相应的例子,这样就不用一个一个点击运行了:)当点击第三个面板即Source Code的时候,马上明白,这个demo的源码需要¥的!!-_-#
3.由于手头没有反编译工具,怎么办,浏览下jfreechart的源代码吧。在source下一直点下去,在source\org\jfree\chart文件夹下忽然发现居然有demo这个文件夹,嘿嘿!!马上打开把文件拷贝到工程中,运行OK。分别是一个柱状、饼图和连续时间图表(可能表达错误)。查看源代码,重要的有两个函数createDataset 和 createChart ,createChart就是用来创建统计图的了,返回类型是JFreeChart,而Dataset是统计图所需要的数据。JFreeChart可以转换成Image!!哈哈,基本上可以写一个自己的例子了。发现三个示例createChart里都调用了一个类里面的方法-->ChartFactory,这个就是图表工厂吧。
4.找到ChartFactory并打开,这是一个抽象类,我们调用的createBarChart、createPieChart都可以在这里面找得到。把整个类只看方法名过一遍之后基本了解。上面要钱的demo我也可以写,起码能多写几个简单的demo。工厂提供了相当多的方法供您创建所需的统计图表。如:饼状图中就有普通的,3D的,豪华一些的,多饼状图的,根据方法名可以一一得知。
5.看也看了,懂也懂点了。下面开始写一个属于自己的demo吧。我选择了3D饼状图,免费的!!嘿嘿。我甚至懒得把source\org\jfree\chart\demo下随便哪个复制改下名字,然后只需把createChart方法第一行“=”后面替换成ChartFactory.createPieChart3D就行了,参数一样,还可以改下第一个参数title,运行---OK!3D的饼状图出现在你眼前。
6.上面给出了最简单的demo,想更好的出效果,需要更多的拜读源码或网上找一些前辈已经总结好的例子以及文章。如果你只是简单的用这样足够满足你的要求了。
7.扩展:我们希望在页面看到生成的图表。a).把写好的demo中两个方法访问级别都改成publicb).新建servlet(ImageCode),添加访问demo的代码。如
PieDataset dataset=PieChartDemo1.createDataset();
JFreeChart chart =PieChartDemo1.createChart(dataset);
BufferedImage image=chart.createBufferedImage(500, 270);
// 输出图象到页面ImageIO.write(image, "JPEG", response.getOutputStream());
c).配置web.xml 如
《servlet>
《servlet-name>ImageCode《/servlet-name>
《servlet-class>ImageCode《/servlet-class>
《/servlet>
《servlet-mapping>
《servlet-name>ImageCode《/servlet-name>
《url-pattern>/imageCode《/url-pattern>
《/servlet-mapping>
e).新建页面(image.jsp) 添加代码如下
《img src="imageCode"》
f).打开浏览器(本人用的IE),哈哈,OK!!好了,基本上算了完工了,实际运用中可能你需要把它输出保存到硬盘上,以便不需要每次都新建一张图片等,你能得到JFreeChart就可以做到这些了。有什么问题保持联系:)

无题

写文章遇到了心里问题了 感觉我要说的网上已经都有了 都说得写得比我好 那到底是继续写还是继续学习等到很牛的时间到来再写呢
思虑之后 还是觉得既然是自己的博客就得写自己所想所知的东西 不在乎别人看不看 记下自己的笔记就行了 如果有好心的朋友给于指点 那是更好的了 :)

2007年2月9日星期五

Struts分页 Pager-taglib使用心得

对Pager-taglib的简介就免了 :)
先把 pager-taglib-2.0.war 给下回来 可以直接拷贝到tomcat webapps 目录下运行看效果
里面的代码比较长 开始看还是有点头痛的
我比较喜欢google的风格 所以把web-inf /jsp 下的google.jsp 给拷贝出来
还需要把pager-taglib.jar放到lib目录下(对应的目录下面有 拷贝出来)
以及pager-taglib.tld 拷贝出来 放到web-inf 下就行了 具体操作:

新建工程 PagerDemo
把Struts1.2添加到工程里(本人用的myeclipse)
把pager-taglib.jar添加到工程
把pager-taglib.tld 放到web-inf 下
把google.jsp放到web根目录下(这里默认为WebRoot)
打开web.xml
添加标签如下:
jsp-config>
taglib>
taglib-uri>
http://jsptags.com/tags/navigation/pager<>
/aglib-uri>
taglib-location>
/WEB-INF/pager-taglib.tld
/taglib-location>
/ taglib>
/jsp-config>
(-_-# 我晕 标签不好帖)

新建POJO User 包含属性 String username;String password
新建ActionForm 包含属性 users 类型:java.util.List
新建Action UserAction
execute方法代码如下:
UserForm userf = (UserForm) form;
if (userf != null) {
//不用每次都填充模型值
if (request.getParameter("pager.offset") == null) {
List datas = new ArrayList();
User user = new User();
user.setUsername("aaaa");
user.setPassword("aaaa");
datas.add(user);
user = new User();
user.setUsername("baaaa");
user.setPassword("aaaa");
datas.add(user);
user = new User();
......这里任意添加多条测试记录....
userf.setUsers(datas);
}
return mapping.findForward("list");

修改配置文件struts-config.xml 如下:
....
form-bean name="userForm" type=".....">
....
action path="/demo" name="userForm" scope="session" type="...UserAction">
forward name="list" path="/list.jsp">
/ action>

....

新建jsp页面list.jsp 主要代码如下:
< %@ taglib uri="http://jsptags.com/tags/navigation/pager" prefix="pg" %>
...
html:form action="/demo">
pg:pager url="demo.do" index="half-full" maxpageitems="5" maxindexpages="5" isoffset="">" export="pageOffset,currentPageNumber=pageNumber" scope="request">
table align="center">
logic:iterate id="u" name="userForm" property="users">
pg:item>
tr>
td class="FORM">
bean:write name="u" property="username">
td class="FORM">
bean:write name="u" property="password">
/tr>
/pg:item>
/logic:iterate>
/table>
jsp:include page="google.jsp" flush="true">
/pg:pager>
/html:form>
.....
好了 可以了 跑起来测试下吧 输入网址..... demo.do 应该可以看到您要的结果 祝您成功!
示例下载地址:
http://pickup.mofile.com/1851842248314322
提取码:1851842248314322

2007年2月3日星期六

适当的结合Spring和Struts

在整合Spring与Struts的过程中 参考了George Franciscus 的《使用 Spring 更好地处理 Struts 动作》一文 文中提到了三种方案:
1. 使用 Spring 的 ActionSupport
2. 覆盖 RequestProcessor
3. 将动作管理委托给 Spring
这三种方法都侵入了struts-config.xml文件
这点我不太喜欢 不希望在struts配置文件中出现任何spring有关的东西 觉得仅仅只需要在Action中注入业务层的对象就可以了
我的实现方式和上面方法2应该来说是一样的 或者他的实现要比我好 。

首先 我不是通过插件的方式来装载Spring的 而是把他的改写在到web.xml里面
这样容器加载的时候Spring的容器也启动 容器加载的时候所有的Action已经实例化

第二步,在spring配置文件中为Action注入业务层方法
注意这里bean的name的名字一定要和类名一样(大小写都一样) 如:
< name="ProductAction" class="com.tangjun.web.struts.action.ProductAction">

第三步,继承RequestProcessor 在struts-config.xml中加入
重写方法processActionCreate
一看名字就知道这个方法是用来创建或获得Action (这个时候大家应该知道了)
拷贝processActionCreate原来的代码
把 instance = (Action) RequestUtils.applicationInstance(className);
这行替换成我需要的:
ApplicationContext app = (ApplicationContext) request.getSession()
.getServletContext()
.getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE);
String beanName=className.substring(className.lastIndexOf('.') + 1);
instance = (Action) app.getBean(beanName);
表示第一次请求来时 从Spring容器中来获得实例对象

OK了 大致的思路就是这样子 关于上面名字对应的问题 做得好的话可以通过反射如配置文件什么的来实现 请多指教 :)