终于有一本书的读书笔记写到第二篇了,呵呵~~不过这本书的第一篇读书笔记更像是速记的内容:)
1. Javascript只有public作用域,没有private,更不用说protected,另外也没有静态方法。
2. this指向的是调用该方法的对象
obj.color = “red”;
obj.show = function(){
alert(this.color); //output “red”
}
3. 定义类的几种方法(略去最后一种,根本没看懂,而且说非常不推荐这种做法)
(1) Factory
function showColor(){
alert(this.color);
}
function createCar(color, doors, mpg){
var temp = new Object;
temp.color = color;
temp.doors = doors;
temp.mpg = mpg;
temp.showColor = showColor;
}
var car = createCar(“red”, 4, 23);
缺点:没有共享函数。不同的实例间可能有不同的函数调用。可以改变一个对象的函数绑定。不用new构造,不像是类(当然,只是不像)。
(2) Constructor
function Car(color, doors, mpg){
this.color = color;
this.doors = doors;
this.mpg = mpg;
this.showColor = function(){
alert(this.color);
}
}
var car = new Car(“red”, 4, 23);
优点:用new构造
缺点:同工厂的第一点。
(3)Prototype
function Car(){}
Car.prototype.color = “red”;
Car.prototype.doors = 4;
Car.prototype.mpg = 23;
Car.prototype.showColro = function(){
alert(this.color);
}
var car = new Car();
优点:函数真正共享,不会出现不同实例之间使用不同函数的情况(指的是同一函数名的情况下,同时Javascript里不存在函数重载)。可以使用car instanceof Car
缺点:显而易见,函数共享的同时把属性也共享了,没什么比这个更糟糕的了。
(4) Mixed Constructor/Prototype
function Car(color, doors, mpg){
this.color = color;
this.doors = doors;
this.mpg = mpg;
}
Car.prototype.showColor = function(){
alert(this.color);
}
var car = new Car(“red”, 4, 23);
优点:函数真正共享,但不共享属性。不过我发现可以把属性加入prototype来实现静态的属性。也可以使用car instanceof Car
(5) Dymanic Prototype
function Car(color, doors, mpg){
…
if(typeof Car._initialized == “undefined”){
Car.prototype.showColor = function(){
alert(this.color);
}
Car._initialized = true;
}
}
这个更大的进步就在于,函数的创建只有一次了。
4. 一个StringBuffer实例,通过Array.join()来实现append()。同时还有实现Array.indexOf()方法(这个Prototype.js里也有的)。前面一个用的是构造类,后面用的是prototype
Author: Marshall
企业应用架构模式读书笔记(一)
最近懂得要写写读书笔记了。平时看了一些书,看过就忘,真是坏习惯。但记在本子上又不怎么看,觉得BLOG还算个好地方。以后都记在这里吧。当然,这本书的笔记还要为技术沙龙做一些准备。
模式先不说,先把那个例子解释清楚。英文版的看起来还是有点难度的,要看两遍才知道(其实就是因为那个例子是什么意思不知道)。不过这种经典书应该是多看几遍的吧?
先把数据库表列出来
Prouducts
| int | id |
| varchar | name |
| varchar | type |
Contract
| int | id |
| int | product_id |
| int | revenue |
| date | signon |
RevenueRecognition
| int |
contract_id |
| int | amount |
| date | recognizeon |
有三种产品,数据库、字处理软件、电子表格软件。IBM三件套是DB2, Lotus Word, Lotus123,微软三件套大家都很了解了,不过是SqlServer, Word, Excel。产品表很好理解了。合同表里有个产品的ID,也就是说,一份合同只是一份软件(虽然听起来比较ridiculous),还有收入(估计每一份都不一样价钱吧)。比较难理解的是收确认。因为有这么一项业务逻辑:字处理软件在签合同的当天就确认收入;而电子表格是在签合同当日确认三分之一,60天后确认三分之一,90天后确认三分之一,有点像分期付款吧;数据库也分三份,当天、30天、60天。每一次确认收入都要记录在数据库里,这样可以计算在某一日前有多少已确认的收入。
服务有两项。第一项是计算某一个合同在某一天前所确认的收入。其实这靠一条SQL语句就可以办到的。第二项是向数据库里插入某项合同的确认收入条目。比如Word就插入一条,DB2就插入三条。
顺便说一说第一个模式,也是最简单的模式:Transaction Script吧。这个是初学者常用的办法,如果再高级一点,可以用上个Command模式,让所有的Script都继承一个接口。所有的业务都在一个Script里完成,包括了业务逻辑、数据库操作、甚至是事务处理。这种模式,毋宁说是反模式,成也简单、败也简单。当然做一个DEMO、或者是以后不需要扩展的程序还是可以考虑这种模式的,呵呵。
FCKEdtior初步集成
我使用的是Javascript版本+Java的。主要用Javascript, Java的只是用来参考一下源代码。
1. 拷贝文件,主要是js包里的,根目录下fckeditor.js, fckconfig.js, fckstyles.js, fcktemplates.js以及editor目录拷贝到web应用下。拷贝到哪里与以后要设置的BasePath有关系。
2. 显示代码: 在页面里包含 fckeditor.js。然后写这一段:
<script type=”text/javascript”>
var oFCKeditor = new FCKeditor(‘content’) ;
oFCKeditor.BasePath = “fckeditor/” ;
oFCKeditor.Height = 600;
oFCKeditor.ToolbarSet = “Default” ;
oFCKeditor.Value = ”;
oFCKeditor.Create();
</script>
最主要是BasePath的设置。比如你把fckeditor.js放在了http://localhost:8080/test/fckeditor/fckeditor.js,你的调用文件在http://localhost:8080/test下,你就把BasePath设成”fckeditro/”(后面要跟’/’)
3. 上传文件的设置:
(1)修改fckconfig.js里的最后几部分,如LinkUploadURL, ImageUploadURL, FlashUploadURL,改成你上传文件的地址。不管那些什么Language了。
(2)修改editor/filemanager/browser/default/frmupload.html,把那个form的action改成上传的地址。这个不知道为什么,我是找了好久才找到的。
(3)编写upload servlet。参考Java包里的那个ConnectorServlet里的doPost()方法。 主要是返回值要设对。
javascript高级程序设计读书笔记(一)
上“人机交互”课上时记的一些东西,留下来备忘。上次那个JVM书的读书笔记真的只有一篇了,因为只能在IBM里才能看到,呵呵~~
1. isFinit(Number) 判断数字是不是无穷大, isNan(..)判断是不是数字
2. parseInt(String, int), 可以解析各种进制的整数
3. Nan != NaN, typeof(null) == “object”
4. Stirng.charCodeAt(int)
5. String.slice()基本上等于String.substring,不同的是substring(3, -4) == substring(3),对于负数,substring是忽略的。
6. ===, !==
7. Array.push(), Array.pop(), Array.shift(), Array.unshift()
8. Array.splice(),可以插入、替换、删除数组中的元素
9. Global对象,很大部分全局函数是Global对象的属性
10. encodeURI(), encodeURIComponent()
转一篇关于VC的文章
IT界里最有名的VC应该就是红杉资本(Sequoia Capital)了吧?这是一篇很不错的介绍文章。
http://www.edimsum.net/archives/vagabond/2006/10/ie_1.html
要学的技术太多了
(本来只想放在我的技术blog里的,想了想也转到这里吧
)
在IBM实习了三个月,学到了不少东西,认识了不少同事,见识了大公司的开发流程,但同时,我的学习也被耽搁了三个月。本来计划得不错,下班和周末可以好好看看书了。但毕竟上班对着电脑8、9个小时的,下班了见了电脑屏就恶心,书也不想看,除了看看电视、报纸杂志什么的,其他也没什么兴趣了。于是这些学习计划也就作空了。不过后来的开发任务少了,上班时间也开始看看东西。回学校以后,发现自己已经落后于时代了。
感觉落后主要来源于低年级的同学吧。觉得最近我和他们都是在交流、研究同一种东西,对于JAVA的开源工具、框架的使用情况也差不多。其实对于JAVA,我的入门还是比较晚的。大一一直都在搞C++,大二上学期新学JAVA,对JAVA还比较不屑,那个时候加入了工作室,然后就折腾了一个学年的.NET,感觉也没学到什么东西。大三开始做JAVA的Web应用,对JAVA才有一点点感觉。不过DLZX网站的开发对我来说是一个噩梦,对Web应用的感觉还不是很好。然后是VOD的项目,经验不足导致开发产品的质量很差。不过终于开始学习开源框架和工具了,接触了Hibernate和Velocity(这主要还是得到了烧饭的提示),才开始对Java Web应用有一点点感觉。而CMS之后,我也决定了以后的发展方向–Java,以Web为主。再加上实习三个月,我和他们基本上处于同一水平线上吧。这也是我一直所乐于见到的,有一群技术相当的人可以一起做项目,进行讨论。
说到技术上,特别是Java Web,我主攻的技术的落后,还是比较惭愧的。现在主流的开源框架中的核心–Spring,我是压根没用过,虽然书和技术文档看过一些,但还是没有真正动过手实践。而Web层的框架,除了Struts,也没用过别的,比如WebWork,Tapestry, Maverick, JSF等等。就是Struts,也觉得用的不是很深,而那些Taglib基本就没动过,因为我主要用的是Velocity(模板还行,不过Velocity是个轻量级的东东,也没多少东西可以深入,而FreeMarker就是不懂了)。模型层技术除了Hibernate(也只是简单的用用),也没试过IBatis,更糟糕的是,JDBC基本上忘了该怎么用了。更不用说那些数据库连接池DBCP、C3P0,还有缓存的工具OSCache,EhCache,JBossCache。EJB更是一窍不通。Jakarta底下的项目,比如commons,除了io和fileupload接触过,beanutils之类比较基本的不行(所以一直想用那本Jakarta-commons实例,不过图书馆的被人借走了,有米了买一本吧)。
最近大三的在做TORM的软件设计大作业,用到的一些技术也是我没有接触过的。比如cglib和BCEL。其实本来对Reflection的运用就不够。Java Security的技术倒是最近一直在看,对ClassLoader有一点感觉了,不过没有做到具体的应用。Java底层如JVM的东西也还待挖掘。
Web方面,本来一直在看Ajax的,不过被实习打断了。最近重拾Ajax in Action,反有几份陌生。Javascript的类库只会用prototype的很基本的功能。而高级一些的如DWR, Dojo的没见过。我想,连Widget Base都还没达到吧。
对于桌面应用,RCP、OSGi等技术也很不错,在IBM的时候看了一些资料,跟tutorial做几个demo,有不小的兴趣。
Java已经如此,更不说其他方面了。最近也在学RoR,觉得开发实在是太便利了。约定高于配置,多么好的开发场景。Python, Perl早浮云了。
接下去还有Apache, Linux… .NET呢?下辈子吧,呵呵
当然,我也知道不能好高骛远。只是感叹一下,技术如此之多。以上也只要任选一种,就够捧个好饭碗的了~~~不过好高骛远好像一向是技术人员的毛病。。。
嗯,脚踏实地,从开发中学习吧!
对了,好像还有管理要积累经验的吧?我晕。。。
Web文件上传的草案
转自张博的blog。想到写以前的项目,要做到Ajax,可是在文件上传这一步,始终没办法逾越。只能用
<form target=”…” enctype=”multi-part/form-data” method=”post” >
…
</form>
<iframe name=”..”/>
这种提交到一个内部iframe的办法搞。而且上传结束的event只能通过服务器端返回的javascript调用,可以说要多难看有多难看。这个draft定义的API虽然简单,可是也够用咯~~
<![CDATA[转自张博的blog。想到写以前的项目,要做到Ajax,可是在文件上传这一步,始终没办法逾越。只能用
…
这种提交到一个内部iframe的办法搞。而且上传结束的event只能通过服务器端返回的javascript调用,可以说要多难看有多难看。这个draft定义的API虽然简单,可是也够用咯~~]]>
It’s time to say goodbye
刚写好了Farewell Letter,发出去了。离职的手续只剩下一个最后的签字。三个月在IBM的时间,很快就过去了。收获还是很多的,就不一一列出了(以后有机会再写吧,呵呵,先开个空头支票)。
这里每个人都很nice,当你遇到问题的时候都会热情地帮助你。特别是我的mentor, Stephen,总是会耐心解答我的问题。而团队活动,一次滑雪,一次Team Show,特别是Team Show,让我感到这个团队的凝聚力。最后的时候经理的appreciation让我信心大增。
很喜欢这里的工作环境,虽然不像Google那么夸张,两年后搬到IBM大厦以后应该会更好吧。技术气氛很浓厚,大家就像一家人,经理也和我们一起玩。不喜欢机关、事业单位那种Office Politics。
对于IBM,我想还是那一句话来概括:
IBM是家大公司。
Project release
The project I’m working on finally released on my last working day in IBM.
哈根达斯在美国,在中国
以前曾在网上看到文章说Haagen Dazs在美国和欧洲是垃圾食品,觉得被骗了。后来又有文章说这是国内枪手的文章。也就信了,继续觉得那是个好品牌。今天在Food版上看到了又一篇贬Haagen Dazs了,还贴出了Amazon.com的图。这下我也不得不信了,自己上Amazon查了查,结果发现果然如此。第一个搜索结果(附图)是16oz的,1oz = 30g,$3.99。也就是一斤的Haagen Dazs只有32块不到。我们可以对比一下Mac。在美国,一个汉堡是$0.99,国内肯定没有8块钱。而在国内的Haagen Dazs,即使是在超市买的,32块钱不知道可以买到几克。