rose 反向工程【推荐EA,rose根本不行】

 

Rational rose生成代码及其反向工程

关键词Rational    rose    生成代码    其反向工程                                          

Rational rose生成代码及其反向工程
一 通过模型生成代码
rose帮助位于 HELP>>CONTENTS>>ROSE JAVA>>HOW TO >>FORWARD ENGINEER FROM  ROSE  TO JAVA SOURCE
下面是简单翻译和图文以及注意事项
步骤 :  1 Checking for Java Syntax Errors
3 Generating Java Source from a Class Diagram
4 Mapping Components for Code Generation
5 Browsing the Java Source
6 Completing the Generated Java Source
 
当你尝试把模型组件转化成代码框架时候,应该考虑到先检查将要生成的类有无语法错误。
1、打开你要专化的目标diagram
2、选择你要转化的包或者类
3、单击  tools>java/j2ee>  Syntax Check 来检查目标代码是否符合规范,比如命名错误。
4、察看rose log窗口(下方)察看检验结果,如果有错误,即errors那么生成的代码很可能无法通过编译
5、根据需要校正这些组件或者图(Correct the components as needed.)
6、复 步骤3直到检验不出错误,然后你就可以进入下一步了(Generating Java Source from a Component Diagram)假设以上步骤已经搞定了error
7、选择你要转化的包或者类
8、单击 Tools > Java/J2EE > Generate Code一般来说如果你还没有将一个package或者组件映射到一个rose的classpath目录中(就是指定生成的东西放哪里),那么系统不会允许你在接下来的界面里点ok,那么现在就编辑目标路径
9、点classpath entries下的edit按钮,再出现的界面右上角找new(insert)(删除左边那个),然后在列表里新增的行里选择目标路径,你可以选择目标是生成一个zip,jar,还是一个目录,我们选择目录。指定目录,ok,那么你选择的路径就新建成功了,选择这个路径,点ok回到界面(层次 好多阿,界面很丑阿)
10、现在你看到classpath entries里有东西了,选择右侧列表里你要转换的包或者组件,点assign,即分配给目标classpth,理论上你可以把选择好的包组件或者类图分别分配个多个classptah
对象。点ok开始生成
11、成功后就可以到指定的classpath下看代码了,生成的代码之间拥有如类图所示的关系。

二 反向功能
rose 帮助位于 HELP>>CONTENTS>>ROSE JAVA>>HOW TO >>REVERSE ENGINEER FROM  JAVA SOURCE TO ROSE反向工程就是通过java代码生成或者更新一个模型的过程。你可以用ROSE对以下文件进行反向
  A.Java source code (.java files)
  B.Java bytecodes (.class files)
  C.zip, .cab, and .jar files
1、 Open the model you want to create or update.
打开一个你刚创建或者想更新的模型新建一个class diagram(如果你还不会,那么这篇文章就别看了)
2、单击Tools > Java/J2EE > Reverse Engineer
     那么现在大家可以想象一下rose会怎么做,刚才是选择了图,创建目标路径,生成代码,那么现在是否指定路径读文件生成图呢,you can say that again!!
在出现的界面上选择一个classpath(如果已经存在)当然,你也可以通过edit classpath按钮新建一个(新建路径的界面刚才讲过了,不再累赘),然后选择这个classpath,更改下面的filter下拉列表,更改目标文件类型(注意不仅仅三行,可以滚动的,对rose的界面真是垃圾这一点又深有体会了),我们这里选择.java,如果这个classptah下存在.java文件,那么就会被列出来 。
注意:你可以通过 add添加选中的文件,也可以通过add all添加所有列出来的,更可以通过 add recursive 递归添加这个路径下所有的文件和子目录下所有文件等等。可以看到rose并不会自动列出甚至显示有没有子目录,从添加好的文件里选择你想反向的文件,点 Reverse 开始创建或者更新无论成功还是失败都会警告,并有log。有错你就改到没错为止。
假设你成功了,点击done结束反向,回到rose主界面。           
注意:rose并不会针对你反向过来的类和组件自动生成图,生成的class已经按照包关系列在你的class diagram下面,你需要把他们加到你的图中去(靠,什么玩艺) ,你有两种方法让这个半自动反向工程化上句号。
   1、手工把class或者组件拖拉到目的图里
   2、在目标图的界面下点击 Query > Add Classes 或者 Query > Add Components ,选择视图方式,一般是logic view,选择要拖拉的类或者组件,>>或者all,点ok完成。生成的类图即反映了代码本身之间的关系。

Continue reading rose 反向工程【推荐EA,rose根本不行】

mule-jxpath-filter 示例

/>myjmx-plugin<?xml version="1.0" encoding="UTF-8"?>
<mule xmlns="http://www.mulesource.org/schema/mule/core/2.2"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:spring="http://www.springframework.org/schema/beans"
xmlns:stdio="http://www.mulesource.org/schema/mule/stdio/2.2"
xmlns:vm="http://www.mulesource.org/schema/mule/vm/2.2"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.mulesource.org/schema/mule/core/2.2 http://www.mulesource.org/schema/mule/core/2.2/mule.xsd
http://www.mulesource.org/schema/mule/stdio/2.2 http://www.mulesource.org/schema/mule/stdio/2.2/mule-stdio.xsd
http://www.mulesource.org/schema/mule/vm/2.2 http://www.mulesource.org/schema/mule/vm/2.2/mule-vm.xsd
http://www.mulesource.org/schema/mule/xml/2.2 http://www.mulesource.org/schema/mule/xml/2.2/mule-xml.xsd
"
>

<description>

</description>

<model name="adapterModel">
<service name="AdapterService">
<inbound>
<vm:inbound-endpoint path="xxx/adapter"
synchronous="true" />
</inbound>
<outbound>
<filtering-router>
<vm:outbound-endpoint path="xxx/adapter/ccc"
synchronous="true" />
<expression-filter evaluator="jxpath"
expression="(adapter/header/trx/@value)='logadd'" />
</filtering-router>
<filtering-router>
.....如此重复
</filtering-router>
</outbound>
</service>
<service name="sdoService">
<inbound>
<vm:inbound-endpoint path="xxx/adapter/ccc"
synchronous="true" />
</inbound>
<component class="cc.xxx.adapter.TestComponent"></component>
</service>
</model>

</mule>

Continue reading mule-jxpath-filter 示例

【转】wxPython评估笔记

wxPython评估笔记

|  | 评论(4)

最近写的一点笔记,留作备忘。

================================================================

wxPython(1)wxWidgets

新开张的一个项目需要同时支持Windows和Linux的图形界面,以及内里对复杂XML的处理。又需要去寻找solution了。XML的处理简单,交给Perl去做,Perl的hash结构和simple xml模块足够快速打败这个任务。而且Perl程序也可以很方便地打包(linux上用pp,Windows上用ActivePerl)成可移植二进制包。而GUI的跨平台设计,简单的考虑,有三个可能方向:

QT - 在Linux可用QT Designer,WYSIWYG的设计界面很方便。Windows上不详。但是QT的license对商业应用有限制 
Java - 人人都知道它跨平台,我们之前开发GUI也都一向用控件集合SWT+文档视图类JFace,不过这玩意的开发效率和运行效率都真的不咋地 
wxWidgets - 最近几年比较热门的一个C++图形库,本质上用本地控件,在不同平台上效果会和本地主题一致,图形库在Linux上是基于GTK的,Windows上基于Windows Platform SDK。形式上它和MFC框架很像,用过MFC的人多半都能很快进入状况。

我以前MFC玩得多了,Qt和Java也都有所了解也都不太满意,那么首先拿wxWidgets体验下,需要关注的是安装、快速开发、打包

Windows安装

首先需要一个本地C++编译器。当然可以装MinGW之类的编译器,我懒得搞了,装了个Visual Studio.NET 2003,比较老的版本了。其实微软网站上现在Visual Studio.NET C++ 2008 express是免费下载的,但我不确定那个免费的包里头有没有Wind32 Platform SDK,也许需要另外装SDK。总之装好之后把nmake所在目录加到Windows系路径,把Platform SDK目录加到系统库路径后面就方便了。

然后下载wxWidgets安装。下载的其实是源代码2.8.9版本,需要编译成本地*.o文件,这个还满费时间的。具体编译过程看readme就好,需要注意的是要选择语言格式和后台图形库支持,我选的是UNICODE和gtk2。建议选这两个,因为是主流。

现在就可以用了。找几个例子程序(源代码包里面有的)来编译下,如果有问题,多半都是因为库的路径等原因,稍微调整一下就好。

Linux安装

这个就方便了,现成用g++编译。同样要注意选UNICODE编译选项。

快速开发

很多geek是看不上快速开发工具滴。。。我也同意快速开发工具(RAD tool)并不是那么重要,因为很多稍微复杂一点的界面操作都是快速开发工具做不了的,还是得写代码。但是当你对一个库里头有些什么控件都没概念的时候,一个好的快速开发环境能让你省很多翻书翻手册的时间。很不幸,我试验过了wxDev-C++和wxGlade,前者在我机器上极端不稳定,后者只支持 sizer方式定位控件。

Java 比较熟悉的同志可以把wxWidgets的sizer类类比成Java的container类,对于只玩过MFC的同志们可能有点陌生。简单说,以前 Visual Studio里头,把一个控件拉到dialog后,生成的代码或者资源文件里控件的位置和大小是用(x,y)绝对值来表示的;这个思维很直接,不需要解释。wxWidgets觉得这样不好,当整个窗口被拉大的时候,控件就全挤左上角了,不好看,所以发明了sizer类动态管理控件的位置。 wxWidgets中有很多sizer类,sizer类可以套sizer类或者控件。很像那个装在盒子里的人。。。不过,写HTML写得多的人(这个,很多人折腾过自己blog的模板吧)应该能理解,HTML里面定位不就是用表格和frame嵌套的方式套来套去达到在不同的分辨率下都可以看么,就是太麻烦了。--当然wxWidgets还是支持绝对定位方法的,找不到快速

打包

我没找到合适的打包工具,虽然说编译的是本地可执行代码,可是我得手工把一些wxWidgets的库拉出来才能脱离开发环境运行。麻烦。。。

考虑到用C++开发还需要处理异常,忒麻烦,退缩了,想其它办法去

 

资料

网上很容易找到《Cross-Platform GUI Programming with wxWidgets》和它的中文版本《使用wxWidgets进行跨平台程序开发.pdf》,看起来用它的人还真不少。这本书再加wxWidgets自带的帮助和例子程序,基本上就够用了。

 

================================================================

wxPython(2)Python

前文说到,直接用wxWidgets还是很麻烦的,调查了一下,基于wxWidgets,有很多wrapper,例如wxPerl, wxPython, wxRuby,分别是用Perl/Python/Ruby来包装C++的wxWidgets。先去调查了一下wxPerl,开发度很差,人气很比较差,现在基本是停滞状态。wxRuby是新事物,人气满旺但开发度不够。wxPython大家都认为已经做得不错了。到SourceForge上搜了一圈,发现 Linux上的某BT软件,还有我以前用过的本地blog编辑工具zoundry,都是用wxPython做的,这两个用户量都不小。另外,Zoundry现在开源了,用CVS软件(在windows上可以用TortoiseCVS,Linux自带svn)下载了源代码运行起来,界面很酷。

那么先花几个小时学一下Python。这个脚本语言的语法和支持对象的VB有点像,习惯了C++/Java/Perl这种“类C”语言的人难免刚开始有点皱眉头,但是其实习惯了它的逻辑就好:例如说用空白正确缩进在Python里很重要,重要到了关系程序能不能正确和正常运行的程度;例如说它的函数没有明显的结尾,没有花括号结尾也没有return也可以;变量名没法像perl的use strict一样强制预先定义。

因为要处理XML,考察了一下Python的XML处理。像我这样被perl庞大而且强大的开发者代码共享社区的CPAN宠坏了的人发现Python没有一个好用的开发者社区的时候还是满震惊的。花了不少时间在搜索引擎上才明白ActiveCode上Python的代码比较多,但是也是在找了几个版本之后才找到一个好用的,和Perl的XML::Simple用法相当的XML2Obj模块。

用 XML2Obj读的XML文件到内存以后,是一个嵌套的dictionary,这种结构相当于Perl的hash, 但是,真难用啊,居然没有Data::Dumper模块可以把这个dictionary给打印出来,还得在XML2Obj里面写一个 xmlTree2String( )函数。

有一本叫《A byte of Python》的书,里面有一节叫“Why not Perl?” ,是打击Perl的,理由是用perl开发大型程序很困难--这个人明显没有好好用Perl的面向对象特性的,我们做的Perl程序都相当复杂了,照样组织得好好的。但就是他,也不得不承认Perl的CPAN社区太强大了,希望能够把Perl的模块转到Python上。我很奇怪为啥没有人来组织一个类似的社区网站。

最后,基本上我觉得学计算机语言没啥好说的,看看语法,安装开发环境跑几个例子就好。Python的电子书很容易找到,在这个网站www.pythonid.com里面直接能下载到很多,我就是花了几个小时随便看了两三本,发现网上有人比我还激进,号称十分钟可以学会Python,:-)

参考链接

华蟒用户新闻组 http://groups.google.com/group/python-cn

Python news group http://groups.google.com/group/python

以上两个新闻组的地址是用来搜索的,要发言还得设置outlook express用NNTP协议连新闻服务器。

 

================================================================

wxPython(3)wxPython

对Python语法和面向对象方式稍有了解就可以来玩wxPython了。下载wxPython安装。我在Windows上下载的是runtime binaries, 在Windows XP上安装运行没有任何问题。但是在Linux上只有源代码可以选择,编译的时候出问题了(我的wxWidgets版本是2.8.9),某个类缺少一个 CreateBitmap()方法。看了一下,似乎只是一个wrap而已,自己加一个空的CreateBitmap()就好?搜索一下,果然有人给出了patch,和我想的一样。

Python下使用wxWidgets编程,不二的教程就是《wxPython in Action》,虽然这本书已经有了中文版,但是500多页16开读起来也不是那么容易的,我的办法是直接运行和阅读源代码,可以急速读完:D

使用wxPython的开源项目很多,用wxPython做关键词在google code或者sourceforge上一搜一大把项目,其实我前面推荐的zoundry是很复杂的项目,推荐一个litebook,比较简单易学。另外,豆瓣网是全用python开发的,而网上能搜到的一些豆瓣插件也往往是用python写的,例如“豆瓣好友跟踪”,也有源代码可以参考。

下面说说wxPython的快速开发工具了。wxPython的界面有两种写法,一种是用自带的XRCeditor,创建一个叫XRC的XML文件,界面和控件都写成XML格式固化。因为我的软件的界面会有动态元素,所以跳过这种先进方式,直接寻找用源代码创建控件的方法。

搜来搜去,发现大家都在提一个叫BOA的工具。当下Windows版,安装,然后,呃,开始菜单里什么都没有增加呀?想了下,BOA自己称自己也是基于wxPython的,那么全硬盘搜索下"boa.py”,果然在python的site packages里面找到了,直接python boa.py,一个类似于以前Delphi开发环境的GUI就出来了。

前面说过wxWidgets的布局是用一个叫sizer的类,我不用搞那么复杂,直接按绝对像素布置控件就好。那么就简单了,在BOA里创建一个 frame, frame上创建几个panel, 把控件放在不同的panel里想要的位置,然后点那个对勾图标,代码就生成好了。直接运行,想要的窗口就出来了。BOA还支持消息映射,可以在GUI里添加消息映射和消息处理函数。

结论:Python+wxWidgets+BOA 非常好用!

 

================================================================

wxPython(4)distribution

基于wxPython的软件做好,一定要打包的,你没法保证目标机器上的运行环境和本机一致。

打包Python程序有很多种选择,在Windows上很简单,用py2exe。只要写一个setup.py, 然后使用python的标准分发接口disutilis的标准用法

python setup.py py2exe

如果setup写得不对会生成很多文件,希望出来的结果干净一点,setup.py要这样写,设置bundle_files

from distutils.core import setup  
import py2exe  
includes = ["encodings", "encodings.*"]  
options = {"py2exe":  
            {   "compressed": 1,  
                "optimize": 2,  
                "includes": includes,  
                "bundle_files": 1  
            }  
          }  
setup(     
    version = "0.1.0",  
    description = "radargraph",  
    name = "radargraph",  
    options = options,  
    zipfile=None,  
    windows=[{"script": "myApp.py", "icon_resources": [(1, "myApp.ico")] }],    
    )

其中myApp.py和myApp.ico要改成自己的文件。做出来的有一个win32可执行程序,一个vc7的dll,两个文件而已,很干净。大小大约在4M到10M之间。

在Mac上据说py2App的表现和py2exe一样方便,我没有Mac系统没法试验。

在Linux上有点麻烦,我试验了Python自带的freeze.pl,以及cx_FreezepyInstaller。这三种工具都有标准python disutils接口,使用方法都一样,写一个setup.pl文件(当然不同的工具对这个的格式要求可能不一样,详细见各个工具的手册和例子),然后运行python setup.pl xxx (这里xxx是各工具的名字)。

试验结果如下,pyInstaller, 打包失败,原因不详,也许是我setup.pl写得不好?但我看了又看,没看出问题,然后发现它网站上的例子我也编译不成功,没耐心了。 freeze.pl打包成功,但是拷到其它Linux机器上运行失败,因为库文件没有拷全。我估计自己手工把python和wxWidgets的*.so 文件拷过来应该可以,但是查找dependency很麻烦啊。cx_Freeze是最后一棵稻草。运行下来,嘿嘿,所有*.so都拷全了,虽然有些不必要的gcc的*.so它也拷过来了。最后做出来的是一个可执行文件和十多个so文件,其中libwx_gtk2ud_core-2.8.so.0文件就有 20M。这个tar.gz之后还有20多M。。。确实能够工作,可是尺寸太大了!我们想要的是一个能够通过email发给客户的版本,这个太巨。

-----------另外,关于wxPython用到的资源文件----------

用 BOA来在界面上创建Bitmap图标或者bitmap时,生成的代码是直接调用bitmap文件。这样子生成的可执行文件,在目标机器上可能会找不到资源。解决方法是参考《wxPython in Action》的第二章的例子代码,里面有个images.py,是由Python的XRCeditor里面的encode_bitmaps.py生成的资源文件。打开encode_bitmaps.py看一下就明白应该怎么做,会生成一个python文件,里面有若干PyEmbeddedImage对象(和第二章的例子有点不一样了)。例如

Image_title = PyEmbeddedImage( 
    "iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAIAAABMXPacAAAAA3NCSVQICAjb4U/gAAAek0lE" 
)

要用的时候就在需要BITMAP的地方Image_title.GetBitmap()就好了。缺点是这样改之后,BOA就不能load这个项目了,因为BOA不认PyEmbeddedImage。

----------------------------------------------------------

继续寻找新方法。大家都知道,连接Python和C/C++库的桥梁有: 
1. 直接使用Python提供的C API - 这个很麻烦 
2. SWIG 其实SWIG不只支持Python, 它功能很强大,很多脚本语言都用它和C接口。当年wxPython开发时1.0版本用方法1,后来没法维护了,最后只好改成SWIG。缺点是很繁琐。 
3. Boost.Python 据说用这个接口C++很方便 
4. Pyrex 

pyrex,是一种新的脚本语言。它用类似于Python的语言来写代码,然后用pyrex工具变成C代码,最后编译成可执行程序。同时pyrex代码中可以使用和调用Python代码。于是有些人就利用这个方式来通过pyrex把python变成C,再编译成可执行代码。David McNab有一个关于如何做的教程,我试验过了,简单的Python程序可以;但是对于wxPython程序,转出来的C文件编译不成功,看起来对于wxWidgets的支持有问题。

参考

牡蛎的如何编译Python程序 
Pyrex, 和Python的C扩展

------------------------------------------------------------

最后这个项目可耻地还是用了Java SWT+Jface。原因就是20M的可执行包太大了。其实,对于没有这种限制的项目,wxPython+BOA+cx_Freeze真是飞速、稳定、可分发的开发环境,强烈推荐。

Continue reading 【转】wxPython评估笔记

it-e-30 Electronic Learning

Never in the history of the world has the rate at which new information is created increased

so rapidly. According to a study done at the University of California-Berkeley, "the amount of

new information stored on paper, film, magnetic and optical media has roughly doubled in the

last three year." The study estimates that about, "Five exabytes of new informationroughly five

billion gigabyteswas created in 2002 alone." How can one keep up with the rapid increase in

information?

One of the many uses of the computer is for e-learning. Derek Shockley defines e-leaning as,

"The delivery of a learning, training or education program by electronic means." Therefore

e-learning can involve a computer, cell phone, television and DVD play, etc. The new way of

learning goes beyond the classroom and textbooks to make use of the latest technology to teach

people in a variety of settings with a variety of methods.

E-learning can be divided into 3 main categories: computer based teaching (CBT), distance

learners and their tutors, and finally classroom instruction online. The first category is a method

where the learner learns at his or her own pace. The material has all been prepared ahead of time

and is available on a CD-ROM or via the Internet through a browser. Some examples of this type

of learning include: children's educational software, on-line tutorials, searchable reference

material, etc.

The second method, distance learning, allows the student to communicate with a real person.

This person is usually knowledgeable in the area of study and can be contacted through an

Internet chat session, e-mail, telephone, etc. This method usually includes some kind of

self-study component, but the learner is periodically in contact with someone else who assesses

their progress, answers questions the learner has and may provide extra motivation for learning.

Some examples of this type of e-learning include: an e-mail based study program where one

lesson must be completed before receiving the next one, a home schooling program where a

teacher receive completed lessons by e-mail for evaluation, and so on.

The third method can be described as a virtual classroom. The students that make up the class

are physically separate, but are again connected through some electronic medium like a satellite

link, the Internet, etc. Some examples include: video conferencing, a satellite broadcasted training

program, etc. Within each category, one can find many different environments to provide this

learning opportunity. As technology advances, more e-learning possibilities will become available.

What advantages does e-learning have over more traditional forms of education? Since

e-learning is usually electronic, it's much easier to update and distribute than a textbook for

example. Also, one presenter is able to "teach" many students in different locations and at

different times in some cases. Although the initial development costs for a good course can be

costly, the maintenance and distribution costs are not as expensive. The transportation costs, and

course fees for a traditional several-day course are often much more expensive.

The concept of e-learning, however, is still relatively new. A poorly designed course will not keep

a person's attention for very long. It's been reported that between 20%~50%

of distance learners don't finish the courses they have started. A pre-prepared course cannot

adjust to the level and interests of the students as easily as a good teach can. Although, a well

designed course can tailor the material to the level and interest of each student to a certain degree.

The biggest obstacle to e-learning, however, is the mindset of the individual as well as high level

management. People are still willing to pay 2,000 USD for a 3-day course with a live instructor

than to pay a fraction of the cost to cover the same material through e-learning on the Internet.

What will e-learning look like in another 5, 10 or even 15 years? As technology develops

and the tools to develop quality e-learning courses evolve, one can expect to see an even greater

emphasis on e-learning in the future. Some of the technologies currently being perfected include

things like teleconferencing with a holographic display (3D realistic image using light) of the

student and instructor together. In the future learners will put on special LCD goggles and use

haptic (touch) technologies to give the feeling of actually being in a real situation to learn a

particular skill. Faster Internet speeds and more powerful computers will provide more realistic

multimedia applications to stimulate learners. More experience with e-learning courses will also

provide higher quality courses in the future.

Learning cannot be limited to the first 20 years of one’s life. With the constantly changing

environment we live in, learning is something that needs to happen regularly for our entire

lifetime. Whether you need to learn a new programming language or want to know how to grow

roses, the relatively new world of e-learning will provide you with many opportunities to expand

your knowledge. Go ahead and learn something new today!

 

1, tutor  ['tju:tə]
vt. 辅导;约束
n. 导师;家庭教师;助教
vi. 当家庭教师;(美)在家庭教师指导下学习

2, pace  [peis]
n. 速度,步调,步法
v. 踱步,缓慢的走,引导
3, obstacle  ['ɔbstəkl]
n. 障碍
4, mindset  ['maindset]
n. 意向,精神状态
5, evolve  [i'vɔlv]
v. 进展,进化,展开
6, haptic  ['hæptik]
adj. 触觉的

Continue reading it-e-30 Electronic Learning

memcached 入门

memcached的安装见

http://www.iteye.com/topic/844687

它要依赖libevent ,见

http://blog.chenlb.com/2008/12/install-memcache-and-libevent.html

http://www.cnblogs.com/taosim/articles/2025260.html

Continue reading memcached 入门

php介绍

javaphp比较:

参见文章:

http://blog.csdn.net/jinxfei/archive/2010/08/10/5801280.aspx

http://www.zendstudio.net/archives/some-php-development-tips-from-my-own/

上手复杂度:PHP

我用 Java 做了 2-3 年的 Swing 开发,然后转向WEB,第一个接触的框架是 Struts,当时的感受就是要配置的东西太多了,前后鼓捣了三个多月,才感觉渐入佳境了。

如今PHP从开始了解到现在总共三个月左右的时间(而且只是业余时间),其中有一周的时间在看PHP官网的文档,了解主要的语言特性,后面基本上就是边看边改代码,并照猫画虎的写东西。虽说当年对软件开发的理解不能和今天相提并论,但客观的说,PHP的确简单、易学,而且特别适合做WEB开发。

开发感受:各有胜场

PHP
最让我不爽的地方:

经常是出错后屏幕一片空白(White ScreenOf Death,都有专有名词了,可见这是PHP出错表现的一大特性),什么信息都没有。

这可通过error_reporting (打印在web容器log里)和 display_errors(直接在输出上显示)来设置
开发工具的auto complete能力远不如javaIDE方面还在起步阶段

PHP比较爽的地方:

php中,数组和哈希表等价,而且是使用最广泛的数据结构,变长参数+数组做参数,能大大提高写代码的灵活性。

基本上不用为NPE(null pointer error)担心。Php存在垃圾自动回收机制

访问数据库比JDBC简单多了,不用什么持久化框架也能很快的写出类似DAO的代码。Php也存在ORM框架,但是php的特点不适合搞这些东西,php就是要简单,高性能,针对特定应用。

许多专为WEB设计的特性,使得从页面获取信息,或者向页面输出信息都变得非常轻巧。

谈不上爽或者不爽的特性:

echo 的内容直接到前台页面上了,一开始我以为echojavaSystem.out一样,会写到日志。

由于不像Java那样对classpath以及class的路径有着严格的要求,一时之间还不习惯,原来创建一个Java类放在什么地方基本上没什么可考虑的,但现在经常要决策一个文件该放在哪个目录下。

因为可以OOP,也可以不OOP,所以,增加新功能点的时候,经常很纠结O还是不O

代码风格啊!太习惯了getData这样的命名,是在不适应get_data这样的函数,因此,执着着,没有入乡随俗的改过来,也好,一眼就可以看出,哪些是属于框架的,哪些是属于我的。
平台对比
如果拿PHPJAVA比,我觉得PHP是瑞士军刀,而JAVA则是家庭五金维修工具N件套,N >=100,在解决网站开发这一问题上,PHP的确是小巧、易用,但也有不尽如人意的地方。
比如,我发现J2EE中几乎必不可少的JDBC连接池,在PHP中约等于无,所以,用户请求过来,如果需要访问数据库,都是现连、现取、现关,究其原因,是架构不同造成的。
  实际上,J2EE中有Web Container的概念,用户请求是由Container分配的线程完成的,线程可以使用进程的内存空间交互数据;PHP是依附于Apache的,每 次用户请求,Apache都启动一个新的进程来执行PHP脚本,进程执行完,一切资源都回收了,所以在默认情况下,一个PHP脚本想要留下点全局的东 西并不容易(我一开始就被 global 这个关键词给骗了);当然,也不是说不同的请求之间完全没法交换数据,只是这样需要使用共享内存,或者使用文件做持久化。
不过,Apache用进程处理请求应该比线程模式要更加健壮,因为在J2EE中,因为一个线程的问题导致整个Container挂掉的情况屡见不鲜。
OOP
PHP主流版本已经对OOP的支持很好,但因为历史原因,好多PHP的开源项目的代码都是不那么OOP的。一开始,我是跟着框架的习惯,用不怎么OOP的方式写代码,在写了十几个零散的函数之后,终于忍不住,又全部重构成对象了。
  做了这么多年的JavaOOP的思想已经非常深入,虽然当年从学校出来的时候,也是从结构化程序设计转向面向对象的,但N年之后,再从面向对象转向结 构化,这种不习惯的感觉更加强烈。也许是OOP真的是更加符合自然的思考习惯吧,现在看着一长串的零散的函数,很有一种不安全的感觉,况且还要挖空心思的 为方法起名,以避免冲突,累!
总结
1、应该把PHP纳入自己的开发工具箱
2PHP不够完美,但可圈可点之处甚多。
3、面向对象为PHP增色不少
4、在开源领域,PHP方面比较发达的是最终应用,所以才有那么多人使用wordpress建独立博客,哪怕没有开发经验;JAVA方面比较发达的是开发框架和类库,给程序员们使用的。从这个角度来讲,Java是个小众的语言。 

php联合java

http://hi.baidu.com/lei0827/blog/item/28439a4e923234ced1c86a18.html

直接调用的方式

1、种是用php自身带的模块调用java(经过网友的证明发现这种方法不好)。

2、通过php-java-bridge模块调用java。(经过网上普遍推荐)。[最新的版本实现是基于pjb,感觉倒不如直接用http调用.]


间接调用的方式

3、通过webservice或者直接http方式访问java服务

 

xmpp php

http://code.google.com/p/xmpphp/ 这个稍微强一点

http://www.code.blitzaffe.com/pages/phpclasses/files/jabber_client_52-11

由于php对多线程支持的不好,且对象生命周期短,几个php xmpp库都不理想,不知道怎么实现webchat。

考虑的问题:怎么在1个session里面保持住连接,不至于每次请求都登陆一次吧。

 

php运行环境:

web服务器(apache, nginx)--开源免费

php--开源免费

zendframework--开源免费

经过实际应用证明的高性能,稳定,可用。

http://blog.s135.com/post/314/

http://lin128.blog.51cto.com/407924/277272

http://guogoul.com/2008/07/08/nginx_2/

 

使用php的应用:

www.yahoo.com

www.baidu.com

www.sina.com

www.163.com

www.sohu.com

这些就足够了

Continue reading php介绍

php基础

先花一分钟看看常见符号和函数: http://www.chinaz.com/program/2010/0331/110317.shtml

 

echo和print的区别

PHP 和 HTML 最简单的交互是通过 print 和 echo 语句来实现的,在实际使用中, print 和 echo 两者的功能几乎是完全一样。可以这么说,凡是有一个可以使用的地方,另一个也可以使用。但是,两者之间也还是一个非常重要的区别:在 echo 函数中,可以同时输出多个字符串,而在 print 函数中则只可以同时输出一个字符串。同时,echo函数并不需要圆括号,所以echo函数更像是语句而不像是函数。

echo 和 print 都不是函数,而是语言结构,所以圆括号都不是必需的。他们的区别在于:
(1) echo可以输出多个字符串,像下面这样:
echo 'a','b','c';
如果你非要加上圆括号,注意写成echo ('a','b','c');是错误的,应该写成:
echo ('a'),('b'),('c');
它没有像函数的行为,所以不能用于函数的上下文
(2) print只能输出一个字符串,它可以表现得像一个函数,比如你可以如下使用:
$ret = print 'Hello World';
所有它能用在更复杂的表达式中。
另外,echo的效率相对比较快~

如下代码:

<?php
$a='hello ';$b='php world!';echo $a,$b.'<br />';//echo 可以用逗号分隔字符串变量来显示print $a.$b.'<br />';//而print不能使用逗号,只能用点号分隔,print $a,$b.'<br />';//使用逗号时报错。
?>

echo    命令和    print    命令    相同,没有区别  
echo    函数    和    print    函数    有区别。  
echo()    无返回值,与echo    命令相同  
print()    有返回值,成功,返1,false,返0.    
printf()    和    sprintf()    类似,均为格式化输出,不同的是前者输出到标准输出,后者输出到变量  
形如  
echo    <<<    EOT  
EOT;  
print    <<<    EOT  
EOT;  
的书写格式,其含义如下:  
<<<    运算符,将由自定义分界符间的内容视为字符串,可对其间的变量做处理  
EOT    自定义分界符,结束时必须位于行首

传址与传值:

>$a = 1; function go(&$b) { $b = $b + 1; } go($a); echo $a; ========系统输出2,因为函数直接修改了$a的数值

Continue reading php基础

html5 demo赏析

http://html5demos.com/观赏html5 demo

 

Storageevents

可监听本地存储localStorage里面某一项的改变事件

 

dataset (data-*attributes)

<div id="test" data-name="viael.dataset" data-height="short">This element hasdata</div>

el.dataset.name = "via el.dataset"

el.dataset.height = "short"

注意属性是以data-开头的

 

History API usingpushState

使用pushState函数修改浏览器历史记录。

 

Browserbased file readingNot part of HTML5

通过FileReader 获得文件控件的路径

 

Drag files directlyinto your browserNot directly part of HTML5

原理同上,浏览器可就收外部拖拽的文件。

 

Simple chatclient

利用websocket

 

Two videosplaying in sync

Vedio标签 currentTime控制播放进度

 

Interactive canvas gradients

Canvas & Video
Video

Canvas 

Canvasvideo特性

 

ContentEditable

标签的contenteditable 属性使得标签及其子标签都可编辑

 

GeolocationWorkson Safari Mobile too

使用navigator.geolocation

 

postMessagesame domain

postMessagecross domain

 

使用postmessage跨域请求,接收页面需要代码(window.onmessage)监听消息

 

drag and drop

drag anything

新增了可监听的事件,使用dataTransfer 

offline detectionWorks on Safari Mobile too

如下代码:

addEvent(window, 'online', online);

addEvent(window, 'offline', online);

 

navigator.onLine testsDoesn't use events, only polls

使用navigator.onLine属性判断

 

on/offlineevent tests

window , body都提供online/offline事件

offlineapplication using the manifestFF 3.6 isstill buggy - doesn't request manifest after initial load

使用window.applicationCache存储。

 

Storage

Window的两个属性sessionStorage,localStorage

 

Web SQL DatabaseStorage

Web SQLDatabase - rollback test

openDatabase ,transaction,executeSql Web Workerswatch out - uses a lot of CPU!

使用Worker对象,多线程

使用postmessage传递参数(调用方和worker线程之间),使用onmessage事件监听。

 

IndexedDB

是一种轻量级NOSQL数据库

window.indexedDB = window.mozIndexedDB || window.webkitIndexedDB;

var request = indexedDB.open("MyTestDatabase"); 

http://rainsilence.iteye.com/blog/984569

Continue reading html5 demo赏析

Pagination


Total views.

© 2013 - 2024. All rights reserved.

Powered by Hydejack v6.6.1