George World

技术改变明天,创新塑造未来! i(at)huadev.com Follow Me: http://t.sina.com.cn/georgeworld

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  28 随笔 :: 0 文章 :: 5 评论 :: 0 Trackbacks

2010年3月2日 #

使用NetBeans Platform开发软件,你会发现软件标题栏总是类似这样的:
NetBeans Platform build 20120812
那么,如果将NetBeans Platform应用的标题栏换成自己的内容呢,Come on,下面一步一步来:

第一步:进入你的NetBeans Platform工程目录,如下图:

第二步:进入dist目录,将发布包解压缩,如下图:


第三步:以此进入如下目录:


第四步:将org-netbeans-core-windows_testnetbeanssuite.jar再解压缩,然后逐级进入解压缩后的目录,如下图:


第五步:修改Bundle_testnetbeanssuite.properties文件中的标题信息,如下:

CTL_MainWindow_Title=George Studio
CTL_MainWindow_Title_No_Project
=George Software Demo


第六步,删除原来的TestNetBeansSuite\dist\testnetbeanssuite\testnetbeanssuite\testnetbeanssuite\modules\locale目录下的org-netbeans-core-windows_testnetbeanssuite.jar文件,然后将
刚才解压缩后的TestNetBeansSuite\dist\testnetbeanssuite\testnetbeanssuite\testnetbeanssuite\modules\locale\org-netbeans-core-windows_testnetbeanssuite文件夹,打包为org-netbeans-core-windows_testnetbeanssuite.jar文件,放到原来org-netbeans-core-windows_testnetbeanssuite.jar文件所在的目录,注意,打包后,org-netbeans-core-windows_testnetbeanssuite.jar内的文件目录应该是这样的:


以上步骤完成后,备份新打包的这个org-netbeans-core-windows_testnetbeanssuite.jar文件,以备下次使用。

然后,返回:\TestNetBeansSuite\dist\testnetbeanssuite\testnetbeanssuite\bin,运行 testnetbeanssuite.exe,这时候,
你看到启动的NetBeans Platform应用,应经是刚才自己设置的标题了,如下图:



特别说明:
如果你看到的应用标题还是原来的老标题,不是你设置的新标题,那么肯定是NetBeans Platform缓存的问题,请删除:
C:\Users\gao\AppData\Roaming 目录下的以你的应用名为名字的文件夹,对于我的这个例子,就是:
C:\Users\gao\AppData\Roaming\.testnetbeanssuite

Mac OS X下,步骤相同,不同的是删除NetBeans Platform缓存文件夹的路径不一样。
至于Mac OS X下NetBeans Platform应用的缓存目录,我没有去查看,用OSX的同学可以自己去找一下缓存目录。



posted @ 2012-09-12 17:29 George-tech 阅读(1620) | 评论 (0)编辑 收藏

NetBeans Platform ,very good,使用它开发桌面软件很方便,但是默认基于NetBeans Platform开发的软件,启动屏图片都是NetBeans自己的,如何换成我们自己的呢?按照如下步骤来:

第一步:打开你的NetBeans Platform工程目录,找到branding文件夹,如下图:

第二步:逐级进入branding目录下的startup文件夹,如下图:


第三步:在该目录下添加一个启动屏图片,如下图:


第四步:打包发布NetBeans Platform应用,如下图:


第五步:到dist目录下面,解压缩发布包,运行刚开生成的NetBeans Platform应用,如下图:





第六步:欣赏你的Splash 启动屏幕吧










posted @ 2012-09-12 16:38 George-tech 阅读(1177) | 评论 (0)编辑 收藏

MyEclipse最大的优点是,开发web应用时,可以轻松地做到:修改Java类后,在浏览器中刷新页面立刻就可以看到修改的效果,不用手动重启Web Server。

但是MyEclipse除此之外其他方面的功能,都与NetBeans差距很大。




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

NetBeans中也可以做到Web 应用修改后“热部署”,但是我4G的内存,每次修改后,NetBeans热部署都会内存溢出。

今天把NetBeans的各个角落菜单翻了一遍,终于找到了NetBeans中正确“热部署”的步骤
在NetBeans中开发Web项目是,应该用“调试”状态来运行Web应用,这样就可以在修改java代码后,按Alt + D,然后再按Y键来热部署更改后的文件。
注意,一定要把Web项目属性中的选项:“在保存时部署”这个选项个取消,不然会保存java文件时很慢,然后就内存溢出了,所以,一定要把这个选项给取消掉。




posted @ 2012-09-12 15:27 George-tech 阅读(2765) | 评论 (1)编辑 收藏

如果在Struts2的Action中有一个变量: private String CCustomerInfo cCustomerInfo;

则使用MyEclipse生成的它的getter方法是:getCCustomerInfo()

生成的setter方法是:setCCustomerInfo(CCustomerInfo cCustomerInfo);

 

针对类似“aTestClass”这样的类变量,IDE生成的getter和setter无法与Struts2页面上的输入框name绑定,遇到这种情况,应该将“aTestClass”这样的类变量修改成“testClass”这样的变量名,然后在生成它的getter和setter,生成的getter和setter方法应该是:

getTestClass()、setTestClass(ATestClass testClass)

posted @ 2010-10-23 13:41 George-tech 阅读(801) | 评论 (0)编辑 收藏

使用sa用户登录查询分析器,然后运行如下SQL:

exec sp_changeobjectowner 'Table_Name,'User_Name' -- 第一个参数:表名字,第二个参数:用户

posted @ 2010-09-10 11:39 George-tech 阅读(156) | 评论 (0)编辑 收藏

设置Struts2的<s:Datetimepicker />标签的样式,实例如下:

<script language="javascript" type="text/javascript">
            function setDatetimepickerStyle(){//beginDate是时间选择框的ID
                document.getElementById("beginDate").childNodes(1).style.width = "199px";  //宽度
            }
            dojo.addOnLoad(setDatetimepickerStyle);
        </script>
posted @ 2010-09-09 11:59 George-tech 阅读(664) | 评论 (0)编辑 收藏

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>漂浮层代码-演示</title>
<script language="javascript" type="text/javascript">
var suspendDivWidth = "100";  //漂浮层宽度
var suspendDivHeight = "300";  //漂浮层高度
var qqNumberArray = new Array("1205640864","1491012702");  //QQ号码列表

var lastScrollY=0;
function heartBeat(){
    var diffY,percent;
    if (document.documentElement && document.documentElement.scrollTop){
        diffY = document.documentElement.scrollTop;
    }
    else if (document.body){
        diffY = document.body.scrollTop;
    }
    else{
        /*Netscape stuff*/
    }
    percent=.1*(diffY-lastScrollY);
    if(percent>0){
        percent=Math.ceil(percent);
    }
    else{
        percent=Math.floor(percent);
    }
    document.getElementById("georgeFloatingLayer_Div1").style.top=parseInt(document.getElementById("georgeFloatingLayer_Div1").style.top)+percent+"px";
    document.getElementById("georgeFloatingLayer_Div2").style.top=parseInt(document.getElementById("georgeFloatingLayer_Div1").style.top)+percent+"px";
    lastScrollY=lastScrollY+percent;
}

//合成浮动层的内容
function getContentOfFloatingLayer(){
    var floatingLayerContent = "";
    for (var i in qqNumberArray){
        floatingLayerContent = floatingLayerContent + "<a target=\"_blank\" href=\"http://wpa.qq.com/msgrd?v=3&uin="+qqNumberArray[i]+"&site=qq&menu=yes\"><img border=\"0\" src=\"http://wpa.qq.com/pa?p=2:178069108:41\" alt=\"点击这里给我发消息\" title=\"点击这里给我发消息\"></a><br />";
    }
    floatingLayerContent = "<fieldset id=\"georgeFloatingLayerFieldset\" style=\"-moz-border-radius:8px; text-align:center;\"><legend>在线联系</legend>"+floatingLayerContent+"</fieldset>";
    return floatingLayerContent;
}

var georgeFloatingLayer_1="<DIV id=\"georgeFloatingLayer_Div1\" style='left:0;POSITION:absolute;TOP:10px;width:0;height:0;border:0px;'></div>"
var georgeFloatingLayer_2="<DIV id=\"georgeFloatingLayer_Div2\" style='background-color:#FFFFFF;right:2px;POSITION:absolute;TOP:10px;width:"+suspendDivWidth+"px;height:"+suspendDivHeight+"px;border:0;'>"+getContentOfFloatingLayer()+"</div>";
document.write(georgeFloatingLayer_1);
document.write(georgeFloatingLayer_2);

window.setInterval("heartBeat()",1);
</script>
</head>

<body>
<div style="height:900px; background-color:#FF0000; border:solid #3399FF 1px;">ffffffffffff</div>
</body>
</html>

posted @ 2010-09-09 11:22 George-tech 阅读(1457) | 评论 (3)编辑 收藏

转载自《zhangjip_love的空间》George对原文进行了改进和部分注释说明>>

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

前几天因系统故障把系统重装了一下,谁知用 “深圳恒波软件”开发的文件夹加密器 居然打不开了,输入密码显示“密码错误”,真是岂有此理!我的密码是固定的,怎会输错?

在网上搜索了半天,用了各类软件,通过种种实验,最后终于取得进展,虽说没有破解,但找回了我的文件,这可是几个G呀!差点把我急死!

相信还有与我有相同遭遇的网友,现推荐一下:

方法来自网络,不敢居功!

1、用7-ZIP这个软件 直接打开那个文件夹 一直往里面的文件夹点 (这个隐藏的有俩文件夹,其中一个就是了) 等到最后的时候就是你加密的那个文件夹了   你把它复制或剪切出来就OK了 。

是不是很简单呀?!!!!

2、去除文件夹的属性后,也可再次输入密码,能够打开。(不知是否是巧合)

一,打开我的电脑--->工具--->文件夹选项--->查看--->去掉“隐藏受保护的操作系统文件”前面的勾--->勾选"显示所有文件和文件夹"--->去掉"隐藏已知文件类型的扩展名,这步做完,可看到加密过的文件夹里面有三个文件。(George PS:Windows 7的话,“隐藏文件夹(大概是这个名字)的选项也要取消,就在"隐藏受保护的操作系统文件"选项的下面”)

二,开始-->运行-->CMD 然后进入加密的文件夹,如果你加密的文件夹路径名为"c:\hack",那么就在CMD下面打开hack文件夹(cd c:\hack)

三,然后接着键入:attrib -s -r -h Thumbs.ms (George PS:我的名字是“Thumbs.mn”)这一步主要是去掉 Thumbs.ms 的其他属性.这时为了方便,我们可以将Thumbs.ms重命名为123(ren Thumbs.ms 123)(George PS:如果无法重命名,可以使用如下命令:ren file://.c:/hack/Thumbs.ms 123).

四,然后接着键入:cd 123 回车后,我们可以键入dir/x来查看123文件夹里面有些什么文件,我们发现下面有:COM1~1.{D3文件夹(George ps:这个名字不固定,我的是COM1.{一大堆字符}),我们在CMD下重命名它为456,(ren COM1~1.{D3 456),如果不能重命名,则需要在123文件下新建一个名为COM1-COM9中的任何一个,这里我们就新建名为com1的文件夹为例,如果用md com1 肯定出现目录无效 ,这里我们用命令为:md \\.\c:\com1 建立就可以了,然后我们再接着重命名COM1~1.{D3文件夹(ren COM1~1.{D3 456) OK。)(George PS:如果无法重命名,可以使用如下命令:ren \\.\C:hack\COM1~1.{D3 456

五,然后接着键入:cd 456 然后再键入dir/x 查看456文件夹里面有些什么文件。发现里面有一个“ 0915~1”(George PS:同样,这个名字也不确定)文件夹,这里需要注意,0915~1文件名前面和后面是有东西的,我们可以在显示出来的文件名中复制过来,这个文件夹是不可以直接双击打开的,我们在CMD下重命名 0915~1为789(ren 0915~1 789)

六,这时,我们就可以直接进入加密文件夹中打开加密文件下的123文件夹,再打开456文件夹,再打开789文件夹下的LastF文件夹,里面的文件,就是加密的内容,结束。

原文地址:http://hi.baidu.com/zhangjip_love/blog/item/e88cc9764ba41617b051b9a2.html

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

George 另附一个删除顽固文件夹的方法:

在待删除的文件夹的所在盘上新建一个文本文档,把以下内容复制到这个文档,然后选择另存为 文件名填上TEST.BAT,保存类型选择所有文件,然后把你想要删除的的文件拖到TEST.BAT的图标上.

DEL /F /A /Q \\?\%1
RD /Q /S \\?\%1

posted @ 2010-06-09 16:29 George-tech 阅读(1575) | 评论 (0)编辑 收藏

  1. 1、启动Oracle

新建批处理文件:startOracle.bat

输入命令:

 

net start OracleOraHome92TNSListener
net start OracleServiceORCL
其中

OracleOraHome92TNSListener

OracleServiceORCL

是Oracle的服务名称

  1. 2、关闭Oracle

新建批处理文件:stopOracle.bat

输入命令:

 

net stop OracleOraHome92TNSListener
net stop OracleServiceORCL
其中

OracleOraHome92TNSListener

OracleServiceORCL

是Oracle的服务名称

posted @ 2010-05-17 13:43 George-tech 阅读(772) | 评论 (0)编辑 收藏

查询出一个表的所有字段信息,包括字段名、字段类型、字段长度、是都允许空值等等。

 

select * from user_tab_columns c where c.table_name = upper('表名字')

posted @ 2010-04-30 15:38 George-tech 阅读(508) | 评论 (0)编辑 收藏

现有若干腾讯微博(QQ微博)的邀请链接,在我手里也没用,现发给网友:

想要邀请链接的朋友请加群:90298926 (只限软件开发人员,谢谢)

posted @ 2010-04-30 10:57 George-tech 阅读(120) | 评论 (0)编辑 收藏

框架结构:

<frameset rows="127,*,11" frameborder="no" border="0" framespacing="0">
  <frame src="top.action" name="topFrame" scrolling="no" noresize="noresize" id="topFrame" />
  <frame src="center.action" name="mainFrame" id="mainFrame" scrolling="auto" />
  <frame src="down.action" name="bottomFrame" scrolling="no" noresize="noresize" id="bottomFrame" />
</frameset>
<noframes>

 

当前位于框架页:top.action

需要被调用的JavaScript函数【funcA()】位于框架页:center.action

实现方法:

在top.action内:window.parent.window.frames['mainFrame'].funcA();

posted @ 2010-04-27 16:27 George-tech 阅读(1321) | 评论 (1)编辑 收藏

当sql配置文件中的元素select/insert/update中,需要使用大于号>和小于号<时,要使用

<![CDATA[

sql语句

]]> 

来将sql语句括起来,如:

<select id="test_query" parameterType="hashmap" resultType="hashmap">
        <![CDATA[
        select t.f1,t.f2

        from table t

        where t.f3 <> 1

        ]]>
        <include refid="test_sql_common" />
    </select>

posted @ 2010-04-26 11:50 George-tech 阅读(3126) | 评论 (0)编辑 收藏

分组。
含有group by 的语句,select  的字段除了group by中出现的,其余必须是聚合函数,类似max这些确定唯一一条的
SELECT a_id,max(b_id) FROM a_b GROUP BY a_id;

posted @ 2010-04-19 17:43 George-tech 阅读(223) | 评论 (0)编辑 收藏

第一步:从http://netbeans.org/downloads/zip.html下载Netbeans IDE模块文件:netbeans-6.8-200912041610-ml-xml.zip

和 netbeans-6.8-200912041610-ml-soa.zip (文件时间部分可能不同);

第二步:解压第一步中下载的两个压缩包,将[xml2]和[soa2]两个文件夹解压到Netbeans IDE的安装目录。

一切OK。

 

另外,附一篇网上的帖子,关于在ubuntu下配置Netbeans IDE的SOA和UML模块,原文如下:

把UML建模功能加入到NetBeans6.8中,步骤如下:

     1)下载地址

http://netbeans.org/downloads/zip.html

          选择/netbeans-6.8-200912041610-ml-uml.zip

     2)解压,把解压后的文件夹 uml6 一到netbeans安装目录

           我首先切换到root用户下了。

           root@zhouzhk-laptop:/usr/local/netbeans-6.8#mv /home/zhouzhk/下载/uml6  .

           然后修改文件加属主。

           root@zhouzhk-laptop:/usr/local/netbeans-6.8#chown -R root:root uml6

      3)重新启动NB6.8,在新建项目中就可以看到UML项目类型了。

     SOA模块用同样的办法安装。

     不过SOA依赖于XML模块,这两个模块需要同时安装。我首先下载的SOA模块,NB启动时报告依赖的众多XML模块不存在。于是我禁用了SOA模块,启动了NB。再把XML模块安装完毕后,新建项目的向导里没有SOA。怎么办呢?

     尝试到 /home/zhouzhk/.netbeans/6.8/Modules目录中看了看,这里面果然有各个模块是否启用的配置。例如:

     org-netbeans-modules-bpel-validation.xml

    把文件中

     <param name="enabled">false</param>

    修改为

      <param name="enabled">true</param>

    同样修改所有bpel、xml、xslt、wsdl等修改日期为今天的文件。

    重新启动NB,在新建项目向导中看到了SOA!

原文地址:http://zhouzhk.javaeye.com/category/101872?show_full=true
posted @ 2010-04-16 11:46 George-tech 阅读(412) | 评论 (0)编辑 收藏

1、C++函数的带默认值的参数只能在函数参数的最右侧;

2、带默认值的函数在声明时就写出默认值,实现时不需写出默认值。

posted @ 2010-04-13 10:30 George-tech 阅读(176) | 评论 (0)编辑 收藏

Netbeans默认的JDK是在安装时指定的,如果因为卸载或者更换JDK发生了路径变化,会引起Netbeans无法启动,这时就需要去Netbeans安装目录下找到etc文件夹,里面有个netbeans.conf文件。打开这个文件找到:
 # default location of J2SE JDK, can be overridden by using --jdkhome <dir> switchnetbeans_jdkhome="C:\Program Files\Java\jdk1.5.0_14"
修改等于号之后的路径到正确的路径,启动Netbeans就可以了.

posted @ 2010-03-09 11:06 George-tech 阅读(563) | 评论 (0)编辑 收藏

出现这个问题,多半是因为编译dll项目时,选择“代码生成”方式是“多线程 DLL(/MD)”,这样的生成方式,生成的.dll文件必须依赖Visual Studio的一些动态链接库,换成“多线程(/MT)”方式,可以解决问题,此时生成的.dll文件会比较大,可以部署在普通的windows机器上。

操作过程如下:


转载相关文章:
[VS2005]解决“由于应用程序的配置不正确,应用程序未能启动,重新安装应用程序可能会纠正这个问题”
   今天在准备发布用VS2005写的那个程序时,拷贝到我同事机器上,双击突然出现了“由于应用程序的配置不正确,应用程序未能启动,重新安装应用程序可能会纠正这个问题“,这个问题很让我意外,以前只出现过缺少DLL的情况,而这次出现这个问题,让我一时没办法。想想,无非是两个原因引起的,要么是他没有安装VS2005的原因,要么是我的程序里依赖了其它的一些库。于是百度一下,发现好多相关主题。我是按照这个帖子解决的:

在VS2005下用C++写的程序,在一台未安装VS2005的系统上,
用命令行方式运行,提示:
“系统无法执行指定的程序”
直接双击运行,提示:
“由于应用程序的配置不正确,应用程序未能启动,重新安装应用程序可能会纠正这个问题”

以前用VC6和VS2003的话, 如果缺少库文件,是会提示缺少“**.dll”,但是用VS2005却没有这样的提示。

自己实验了一下,感觉以下几种解决办法是可行的:
方法一:
在类似C:\Program Files\Microsoft Visual Studio 8\VC\redi
st\Debug_NonRedist\x86\Microsoft.VC80.DebugCRT 下找到了下列文件:

msvcm80d.dll
msvcp80d.dll
msvcr80d.dll
Microsoft.VC80.DebugCRT.manifest

把这几个文件拷贝到目标机器上,与运行程序同一文件夹或放到system32下,就可以正确运行了。

其他release版、MFC程序什么的都是拷redist下相应文件夹下的文件就可以了,文件夹后都有标识!

方法二:
修改编译选项,将/MD或/MDd 改为 /MT或/MTd,这样就实现了对VC运行时库的静态链接,在运行时就不再需要VC的dll了。

方法三:

工程-》属性-》配置属性-》常规-》MFC的使用,选择“在静态库中使用mfc”
这样生成的exe文件应该就可以在其他机器上跑了。

方法四:

你的vc8安装盘上找到再分发包vcredist_xxx.exe和你的程序捆绑安装

posted @ 2010-03-05 21:16 George-tech 阅读(3460) | 评论 (0)编辑 收藏

     摘要: 类的热替换是Java在线升级系统设计中的基础技术,从文中给出的实例来看,构建在线升级系统不仅仅是一个技术问题,还牵扯到很多管理方面的因素,比如:如何管理、部署系统中的可在线升级部分和不可在线升级部分以降低系统的管理、维护成本等。 对于许多关键性业务或者庞大的Java系统来说,如果必须暂停系统服务才能进行系统升级,既会大大影响到系统的可用性,同时也增加了系统的管理和维护成本。因此,如果能够方便地在...  阅读全文
posted @ 2010-03-03 13:35 George-tech 阅读(229) | 评论 (0)编辑 收藏

在%JAVA_HOME%\include\下找到 jni.h,在%JAVA_HOME%\include\win32\下找到jni_md.h,复制到“Visual Studio目录\VC\include\”下,即可解决问题

posted @ 2010-03-02 16:30 George-tech 阅读(990) | 评论 (0)编辑 收藏

围剿 Flash 的不仅有 HTML 5,还有 JavaScript,著名的 JavaScript 框架 jQuery 在运动特效方面已经越来越流畅,有时候你需要点一下右键来确认它不是 Flash。本文介绍了10个非常出色的 jQuery 运动特效,这些效果可以更有效地展示你的内容。

1. 流感导航菜单

下面的导航菜单,当鼠标在上面移动的时候,会很流畅地垂下解释菜单,当你将鼠标在上面快速左右移动的时候,会怀疑这是 Flash。

Fluid  Navigation – How to create an informative menu-bar with 
jQuery &  CSS

2. 转花灯

Roundabout 是一个 jQuery 插件,可以将一组 HTML 对象转换为旋转花灯的效果。

Move  Elements with Style

3. 拉洋片

拉洋片也许是 jQuery 最拿手的效果了。该效果在遇到 JavaScript 被禁用的场合会自动降级使用。

Automatic Image Slider w/ CSS & jQuery

4. jQuery Quicksand 插件

这个让人赞叹的插件,可以对一组 HTML 对象重新洗牌,效果非常出众。

jQuery  Quicksand Plugin

5. 导航滑块

这种风格的导航已经见于很多站点,鼠标在导航菜单上移动的时候,一个高亮指示条随着鼠标滑动,指示当前的导航位置。

jQuery  Magic Line Sliding Style Navigation

6. 文字的移动纹理

在文字上,显示移动的纹理,效果美轮美奂。原理是,做一个带透明文字的 PNG 图像放在一个容器里,容器的背景放一张图案,用 jQuery 移动容器的背景,很简单,不过,不支持 IE6,因为 IE6 不支持 PNG。

Text  with Moving Backgrounds

7. jDiv: jQuery 导航 Tab

一个可以显示丰富内容的下拉导航菜单(演示要翻墙)。

jDiv: A  jQuery navigation menu alternative

8. 基于 CSS3 和 jQuery 的半透明导航系统

鼠标在导航菜单上移动,显示半透明的指示图标。CSS3 做这个实在太容易了。

Halftone Navigation Menu With jQuery & CSS3

9. 云台式拉洋片

常规的拉洋片效果要么左到右,要么右到左,或者垂直上下,这个 jQuery 效果可以象云台那样扫镜头。

Animate Panning Slideshow with jQuery

10. SlideDeck

SlideDeck 是一种新颖的内容展示方式,有点类似 Outlook 的手风琴菜单,但视觉效果和用户体验更好一些。

SlideDeck

本文来源:http://devsnippets.com/article/10-jquery-transition-effects.html

转载自:http://blog.csdn.net/comsharp/archive/2010/03/02/5337530.aspx
posted @ 2010-03-02 11:28 George-tech 阅读(216) | 评论 (0)编辑 收藏

<iframe id="iFrame1" name="iFrame1" width="100%" onload="this.height=iFrame1.document.body.scrollHeight" frameborder="0" src="index.htm" mce_src="index.htm"></iframe>

posted @ 2010-03-02 11:15 George-tech 阅读(133) | 评论 (0)编辑 收藏

目前HTML编辑器可以说是种类繁多, 特别是国外, 开源的商业的, 各种版本, 不一而足. 我只是简单介绍几个常见的免费/开源 的可视化HTML编辑器 (WYSIWYG).

HTMLArea

功能一般, 文件不大, 支持是几种语言, 比较容易定制, 使用广泛,支持IE/Firefox/Mozilla等多种浏览器. 遵循BSD版权, 目前最新版是3.0.

官方网站: http://www.htmlarea.com/

FCKEditor

庞大, 功能强大, 加载慢. 在很多地方使用广泛, 比如CSDN的blog就是使用的这个. 功能也可以定制. 也支持多种浏览器, 遵循LGPL版权. 目前最新版是2.0

官方网站: http://www.fredck.com/

演示: http://www.fckeditor.net/demo/default.html

FreeTextBox

能定制编辑器界面, 包括Office 2000/Office XP/Office 2003 等界面, 运行速度一般, 功能还不错, 能够支持多种浏览器. 主要应用于ASP.net. 目前最新版是3.0.6.

官方网站: http://www.freetextbox.com/                 

演示: http://www.freetextbox.com/Default.aspx

aynHTML

界面比较象Windows, 美观度一般, 加载速度尚快, 遗憾的是只支持IE, 目前最新版本是

官方网站: http://www.aine.be/aynhtml/

演示: http://www.aine.be/aynhtml/editor.html

SPAW Ediotr

支持多种浏览器, 界面比较漂亮,类似MAC风格, 功能一般, 加载速度中等, 支持PHP比较好. GPL版权,

官方网站: http://www.solmetra.com/

演示: http://www.solmetra.com/spaw/demo/demo.php

TinyMCE

界面相当清新, 适合素雅主义使用, 功能比较强大, 不逊色于FCKEditor, 但是加载速度委实比较慢, 支持多种浏览器, 使用LGPL版权, 目前最新版本是2.0

官方网站: http://tinymce.moxiecode.com/

演示: http://tinymce.moxiecode.com/example_full.php?example=true

XinHa

界面还可以, 加载速度比较慢, 但是比TinyMCE强点, 定制功能相当强大, 而且本身支持功能也很强大, 支持多种浏览器, 也可以把它跟HTMLArea比较一下. 基于BSD授权,

官方网站: http://xinha.python-hosting.com/

演示地址: http://xinha.gogo.co.nz/xinha-nightly/examples/full_example.html

skyWriter

功能比较强大, 使用比较复杂. 开发源代码. 有兴趣可以尝试下.

官方网站: http://wysiwyg.skybuilders.com/

演示: http://wysiwyg.skybuilders.com/demos/skyWriter.html


还要许许多多的编辑器, 可以自己去发掘, 我上面发现的不过是一部分而已, 给网站制作一个参考.

想知道更多HTML编辑器, 可以访问: http://www.geniisoft.com/showcase.nsf/WebEditors

源作者:heiyeluren       2005/09/26

posted @ 2010-03-02 11:14 George-tech 阅读(569) | 评论 (0)编辑 收藏

看着个题目可能很玄乎,本来也想写的玄乎玄乎的,但Google了一下,觉得没有必要写的这么玄乎,其实,今天我就是要给大家介绍一款非常优秀的基于python(能够支持GAE)的blog程序而已,所以本文就言简意赅,不过,我会从头到尾,详细的道来整个过程。

问题的提出:1.我国内的虚拟主机感觉速度时好时坏,总不令人满意,所以有找一个稳定的主机的想法,但又不准备再花钱,因为国内和国外的主机买的时间也不长,也不想浪费金钱以及人力来搬家。2.几天前了解了一下Google App Engine,其实Google的东西总是太好太强大,以至于我这样的菜鸟只好避而远之,但又看到K_Reverter已经将整个网站都搬到了GAE,并且还实现了许多强悍的功能,所以羡慕不已。所以,有想利用GAE做点东西的想法了,只是暂时不敢大动干戈,所以今天建立一个blog程序算是尝试吧,更多的想法有待更多的尝试。

Google App Engine,简单的说就是一个Google提供的强大的开放的虚拟主机,每个用户可以建立10个app,也就是10个网站,每个网站500M的空间,也就相当于5G的个人空间。不过,大家不要动歪脑筋,因为Google的限制中一个app只能最多1000个文件,单文件最大500K,所以基本上以为这空间可以放大容量文件的就死心吧。加上GAE提供的是python语言的支持,还不支持PHP,更不用说.NET了,同时还没有MYSQL,自身提供的数据库好像还是很不强大的,另外还不支持FTP,需要使用python上传(不过还蛮好用),加上python的程序本身就不多,Google的GAE又有很多的限制,所以基本上只有拿GAE看看的份了。

今天寻找了一下python+blog,不过效果不是很好,虽然许多大大们都说python开发blog简直是小菜一碟,但我真的没有找到几个,可能国内的还不多吧。首先我找到的是pylogs,看了演示网站,觉得非常的不错,简洁明了,功能也是可以,于是就下载,上传到GAE,结果500错误,在本地调试,也是500错误,难道pylogs用的是Django 1.0框架,而Google提供的是0.96的框架?当然,pylogs是需要MYSQL支持的,而DreamHost的MYSQL是支持外联的,所以不应该存在问题。最后只好作罢。后来找到了这个micolog(官方网站(不过我这边上不去,可能又被墙了),下载地址,现在0.5版本),看到这个的时候是惊喜的,配置完成后登陆到后台完全是惊讶的,应该说这确实是一个非常不错的blog程序了,并且和wordpress做的很像,功能也类似,打着GAE python blog的旗号,让人非常喜欢。看看人家列举的功能吧:

  • custom theme
  • tags and categories for the blog entry.
  • rich content editor by tinymce
  • import data from wordpress export file
  • menu & pages management.
  • cache enabled
  • implement wordPress API and metaWeblog API ,support client writer (such as window live writer)

    看到上面这些功能我想基本上都够用了吧。既然说到这里,那么我们做一下简单的比较吧,我为什么要推荐这样的一个blog。首先不管zblog还是wordpress都需要空间存放,那就需要购买虚拟主机,而如果用GAE则完全免费,并且GAE的速度是飞快的没有怠机的(可能会有,但Google强大的集群技术应该不会出现这样的情况);其次,如果使用Google blog服务,虽然可以绑定自己的域名,但是总在页面最上显示Blogger的搜索和提示,总觉得不爽;再次,我想放自己的Google adsense怎么办(Blogger是支持adsense的)?总觉自己做模板什么的灵活一些,Blogger的adsense存放位置可能不是很灵活。可能原因还有更多,当然GAE的缺点也是有的,比如可能被墙挡住,数据库不容易控制等等。话题有点扯远,甚至说到了GAE和虚拟主机的比较去了。从上面的功能上来看,tag和categories我觉得不用说,定制皮肤还不错,我喜欢的是从wordpress导入、拥有pages功能和支持WLW,当然cache也不错。所以,如果你想用Wordpress,那么你可以先用micolog+GAE建立一个bolg试试,免费加快速访问,一定会让你惊喜的。

    回到正题,从头开始讲整个安装设置,包括Windows live writer中的设置。

    1.既然是使用GAE,那当然要注册一个GAE吧,你只要有Gmail帐号就可以了。然后按照步骤建立一个app,这样你就差不多得到你的网站名了,我注册的是tangf2004,所以可以使用tangf2004.appspot.com这个Google提供的免费二级域名来访问。

    2.下载App Engine SDK。因为要用到这个来上传app的。安装SDK,桌面上就提供了一个Google App Engine的文件夹快捷图标,进入该文件夹,看到的是一些py文件,不用管,只要知道dev_appserver.py是在本机模拟开发环境的,而appcfg.py是用于上传等工作的,具体就去参考入门指南吧。

    3.下载micolog,这是主程序当然要下载了。完成后是一个压缩包,将该压缩包解压缩到Google App Engine所在目录。

    4.进入Google App Engine下的micolog目录,用文本编辑器打开app.yaml文件,这是一个配置文件,只需要将第一行的application后的内容改成你所建立的app的ID就可以了,比如我的就是tangf2004。(要知道第一次就是因为没有理解这个导致文件上传到GAE都没有成功,笨吧)

    5.开始-运行-cmd,命令行进入到Google App Engine目录,输入命令:appcfg.py update micolog/,回车确定。第一次上传的话会提示输入Email,就是你自己注册的Gmail地址,密码也是你的gmail地址,然后提示一些信息,大致就是验证通过、找到多少文件、开始上传、结束上传等信息,很快就完成了。(如第4点所说,如果app.yaml文件的ID是错的那么你是上传不成功的)

    6.那就赶紧开始你的Blog之旅吧。登录tangf2004.appspot.com就可以看到效果了。点击右上角的admin就可以开始管理你的blog了。看一下简单的后台吧,和wordpress很像哦。

    虽然看上去完工了,但后续工作还没有完。下面再说几件事情吧。

    将该app绑定到一个自有的二级域名

    首先该域名是已经注册了Google apps,如何注册请看我的上一文:Google apps注册以及解析ghs.google.com。(不过遗憾的是,好像我上文提供的ghs的替代IP又出问题了,下面留言的朋友提供的IP也不行,最后勉强又找了一个可用的IP。我怀疑徐明的博客就是因为墙挡住了而无法访问)。

    然后,进入到appengine中你刚刚建立的app的控制面板,在左侧的管理工具栏中点击Versions,有一个add domain的按钮,就是它了,点击进入下一页面提示输入域名,直接就是国际域名,比如我的就是sharesh.cn,如果你的域名还没有注册Google apps那么会提示无法继续的。再继续的话就是进入到Google apps的管理面板了,提示输入域名,写一个二级域名就可以了,所以我就写了gae.sharesh.cn。确定后提示该二级域名的CNAME需要指向ghs.google.com,完成后才能确认点那个我已经完成了该操作的按钮。(这里很简单,图片也不上了,写的也很罗嗦,自己一步一步很容易搞定的)

    最后,需要在域名中设置上一步中的二级域名的CNAME记录。进入时代互联的控制面板,域名VDNS管理,增加一个二级域名gde,我没有使用CNAME,而是直接使用了A记录,A记录的IP设置为刚刚找到的可以访问的ghs对应的IP就可以了。重启VDNS,没有等待几秒,我就去点了上一步中的我已完成操作确认域名,竟然就直接可以用了,看来增加一个二级域名的DNS解析速度还是比较快的。

    所以,你现在可以通过这两个域名来访问我的GAE上的blog程序了:GAE.sharesh.cn(我自己的二级域名)和Tangf2004.appspot.com(Google提供的免费二级域名),两者访问的效果都是一样的。

    将wordpress数据导入micolog:

    这一个步骤还是很简单的,首先登录wordpress的后台,选择导出,导出的是wordpress自有个是的XML文件。然后,登录micolog后台(忘了说了,micolog的登录是和gmail已经集成了,看来又用到了gmail的API了,够强悍),在设置中的导入导出,选择刚才导出的XML文件直接导入到wordpress中,即可,非常的简单而方便。顺便要提一下的是,wordpress的固定链接,在micolog中也存在,所以,如果你真的准备搬家到GAE,那么可以使用完全一致的固定链接,对于SEO来说是不会有影响的,这一点做的非常的不错。

    只是,我在导入的时候我碰到了一个问题,竟然导入中断掉了,试了好几次都不成功,没有办法只好看XML文件,最后发现竟然有几个图片也导出成文章了,我把由图片生成的item删除,最后导入成功了,可能是wordpress的bug。

    使用Windows live writer写blog:

    上次我就写了一个文章推荐Windows live writer,没有看过的就回看一下我的文章吧:推荐:Windows live writer 2009(附WIN2003下安装方法)。用WLW来离线写作真的非常的棒,而micolog是和wordpress一样也是支持WLW离线写作的。

    首先登录micolog后台设置中的基本设置,在最下面有一个客户端(Xmlrpc)调用设置,这里写上你的用户名和密码,这样就可以支持WLW了。

    然后是配置WLW,在WLW中新增一个日志账户,其中提供者和接入地址,需要按下图填写。(这也是网上找的,不然也不会写这一点)。类型选择wordpress2.2+,接口为网址后面加/rpc,比如我的就是http://gae.sharesh.cn/rpc。经过我的测试,上传图片,嵌入iframe等都没有问题,并且WLW的缩略图等都支持,图片直接上传到GAE的空间,非常的不错。

    至此,使用GAE建立blog的过程已经全部完毕,你是否也心痒痒的要建立一个呢?那就赶紧开始吧。

    整个blog的寻找建立并摸索大概花了我小半个下午,而写此篇日志却花了我三个小时,郁闷,看来写日志真的不是一件容易的事情。不过,欣慰的是,我的网站又多了一个镜像,只是在考虑要不要真的把站点搬过去呢,我是要忍受不了国内主站的速度了。

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

    早上的时候又找了一个python blog列表,开源Python博客列表(fromGoogle App Engine 中文观察):
    Plog http://code.google.com/p/pyweblog/ 示例: http://plog.appspot.com
    n23 http://code.google.com/p/n23/ 示例: http://n23.appspot.com/blog
    xian-min http://code.google.com/p/xian-min/ 示例: http://xian-min.appspot.com
    tublog http://code.google.com/p/tublog/ 示例: http://ether.appspot.com
    NiuBi http://code.google.com/p/niubi/ 示例: http://niubi.appspot.com
    onlypy http://code.google.com/p/onlypy/ 示例: http://onlypython.appspot.com
    英文
    Potlatch Blog http://github.com/araddon/potlatchblog/tree/master DEMO: http://aaronspotlatch.appspot.com/
    Bloog http://github.com/DocSavage/bloog/tree/master DEMO: http://bloog.appspot.com/

    Rover.Tang , tfljh@163.com
    http://Tangf.CnBlogs.Com
    http://www.ShareSh.cn

    转载自:http://www.cnblogs.com/Tangf/archive/2009/02/23/1374539.html

  • posted @ 2010-03-02 11:13 George-tech 阅读(685) | 评论 (0)编辑 收藏

    转自http://blog.matrix.org.cn/page/Kaizen/?anchor=jtable_%E6%98%BE%E7%A4%BA%E5%9B%BE%E7%89%87

    JTable 显示图片

    Posted on Saturday 2006年01月07日

    今天在matrix上面看到的一个关于jtable显示图片的问题,以前我也没有实现过,今天在网上查找了半天,终于是有所了解。原来最基础的AbstractTableModel的getColumnClass不管你列中的类是什么都返回Object.class,而DefaultTableModel并没有覆盖这个方法,JTable中的DefaultTableCellRenderer对Object类的显示处理就是取Object.toString,然后将内容显示,所以不处理的话,程序将会显示图片路径.
    所以需要继承AbstractTableModel 并覆写getColumnClass()
    public Class getColumnClass(int c) //关键所在,取得对象类
    {
       return getValueAt(0, c).getClass();
    }

    posted @ 2010-03-02 11:05 George-tech 阅读(907) | 评论 (0)编辑 收藏

    /*
    * To change this template, choose Tools | Templates
    * and open the template in the editor.
    */
    package test.util;

    /**
    *
    * @author Administrator
    */
    public class StringUtil {

        public StringUtil() {
        }

        /**
         * 将指定byte数组以16进制的形式打印到控制台
         * @param hint String
         * @param b byte[]
         * @return void
         */
        public static String printHexString( byte[] b) {
            StringBuffer returnValue = new StringBuffer();
            for (int i = 0; i < b.length; i++) {
                String hex = Integer.toHexString(b[i] & 0xFF);
                if (hex.length() == 1) {
                    hex = '0' + hex;
                }
                System.out.print(hex.toUpperCase() + " ");
                returnValue.append(hex.toUpperCase() + " ");
            }

            return "[" + returnValue.toString() + "]";
        }

        /**
         *
         * @param b byte[]
         * @return String
         */
        public static String Bytes2HexString(byte[] b) {
            String ret = "";
            for (int i = 0; i < b.length; i++) {
                String hex = Integer.toHexString(b[i] & 0xFF);
                if (hex.length() == 1) {
                    hex = '0' + hex;
                }
                ret += hex.toUpperCase();
            }
            return ret;
        }

        /**
         * 将两个ASCII字符合成一个字节;
         * 如:"EF"--> 0xEF
         * @param src0 byte
         * @param src1 byte
         * @return byte
         */
        public static byte uniteBytes(byte src0, byte src1) {
            byte _b0 = Byte.decode("0x" + new String(new byte[]{src0})).byteValue();
            _b0 = (byte) (_b0 << 4);
            byte _b1 = Byte.decode("0x" + new String(new byte[]{src1})).byteValue();
            byte ret = (byte) (_b0 ^ _b1);
            return ret;
        }

        /**
         * 将指定字符串src,以每两个字符分割转换为16进制形式
         * 如:"2B44EFD9" --> byte[]{0x2B, 0x44, 0xEF, 0xD9}
         * @param src String
         * @return byte[]
         */
        public static byte[] HexString2Bytes(String src) {
            byte[] ret = new byte[8];
            byte[] tmp = src.getBytes();
            for (int i = 0; i < 8; i++) {
                ret[i] = uniteBytes(tmp[i * 2], tmp[i * 2 + 1]);
            }
            return ret;
        }
    }

    posted @ 2010-03-02 11:04 George-tech 阅读(468) | 评论 (0)编辑 收藏

    在mysql的bin目录下执行:

    mysqldump --user=用户名 --password=密码 --database 数据库名 >备份文件的路径【可以是完整物理路径】

    如:

    mysqldump --user=root --password=root --database test > E:\mysqlBackupFile\test_backup.sql

    posted @ 2010-03-02 11:03 George-tech 阅读(166) | 评论 (0)编辑 收藏

         摘要:   #include <QApplication> #include <QtGui> #include <QLayout> #include <QStyle>  class TitleBar : public QWidget { &n...  阅读全文
    posted @ 2010-03-02 10:31 George-tech 阅读(2174) | 评论 (0)编辑 收藏