Javascript

最近接的一个项目里需要修改 Javascript , 于是花了 3 个礼拜去写 Javascript , 发现了一些值得记录的东西.

一. 作用
Javascript 最终要实现的目标是控制 HTML 元素的显示, 所以它可以根据需求来更改 HTML 元素的显示样式和数据. 样式和数据可以是事先定义好或者从别的地方获取.

二. 语法
Javascript 会从头到尾顺序执行, 如果 Javascript 里控制的元素/样式/数据是在执行的语句的后面被定义, 则元素/样式/数据在这个时候会是 undefined 或 null . 也就是说它不会事先检查语句, 有错误只有在执行的时候才会发现.

Javascript 的变量有 Boolean/Number/String/Undefined/Null 和 Array/Object 这一些数据类型, 但是它们声明的时候全都使用 var 关键字, 变量里存储的数据的类型会随赋值而改变.

三. DOM
Javascript 控制元素/样式/数据时需要用到 DOM . 在 DOM 里 window 对象表示当前浏览器窗口, windows.document 表示当前窗口显示页面的 DOM 对象, window.parent.document 表示当前页面的上一层页面 DOM 对象, window.top.document 表示当前浏览器窗口最外层页面的 DOM 对象.

要从 DOM 获取元素, 可以使用 document.getElementById(“[ElementID]”)/document.getElementsByName(“[ElementName]”)/document.[FormName].[ElementName] 等几种方法, 需要注意的是, 当存在相同 Name 的元素时, 后两种方法得到的是一个 Array .

四. jQuery
jQuery 是使用 Javascript 开发的一个框架, 使用它可以简化开发工作.

我在项目里使用了基于 jQuery 的 jQuery UI 框架, 为的是实现 Modal Dialog , 我发现它的定义语句会在所有页面解析完后才执行, 这一点与上面第二点提到的按顺序执行不相同.

另外不管是 jQuery UI 里的 Dialog 还是 另一个 Javascript Modal Dialog 框架 Boxy , 在 Frameset 方式的页面里都弹不出来.

五. 兼容
IE10/IE9/IE8/IE7/IE6/Chrome/Firefox/Safari/Opear 这些浏览器对于支持的 HTML 标准都不尽相同, 所以就会遇到写好的语句会在不同的浏览器呈现不同的样式. 要解决这个问题只能是尽量遵行所有浏览器都支持的写法, 或都干脆针对不同的浏览器使用不同的写法. 但不管是哪种方式, 都搞的头都大了, 这太让人痛苦了, 前端的活真不是人做的!

Web连接被无规律断开

背景:
一个虚拟主机,独立IP: 1.1.1.1,为域名a.b.c提供web服务。a.b.c域名在国内注册,DNS记录由afraid.org管理。

道具:
PC1: win7(电信2M adsl/dns:8.8.4.4、208.67.222.222)+IE8+Chrome11
PC2: win7(电信4M adsl/dns:8.8.4.4、208.67.222.222)+IE8+Chrome9
Laptop: win7(dns:8.8.4.4、208.67.222.222)+IE8+Chrome9
Server1: win2k3(电信IDC 100M共享/dns:8.8.4.4、208.67.222.222)+IE8

本市另一个区的一台PC3:XP(电信接入,其它参数不详)+IE7
本市另一区的一台PC4:win7(铁通2M adsl/dns:8.8.4.4、208.67.222.222)+IE8
本省另一市的一台PC5:Win(参数不详)
另一省的一台PC6:XP(电信2M adsl,其它参数不详)+IE7

现象:
2011.02.20晚上开始从PC1访问a.b.c会随机出现以下三种情况之一:
1,正常打开。
2,能显示部分页面内容,但格式不正确。
3,打不开,Chrome里显示”错误 101 (net::ERR_CONNECTION_RESET):The connection was reset.”

在上面三种情况之一刷新页面,会随机出现上面的三种情况之一。
使用Fiddler进行侦测,发现第2、3种情况时Fiddler会提示若干”远程主机强迫关闭了一个现有的连接。”

PC2访问a.b.c时出现PC1相同的现象,Laptop在PC1、PC2网络环境下访问a.b.c时亦出现相同现象,Server1访问a.b.c时正常,PC3、PC4、PC5、PC6访问a.b.c时均正常。

处理:
1,Server1、PC3、PC4、PC5、PC6均能正常访问说明Web服务器没问题,Web服务器IP也没有被GFW加入黑名单。
2,PC1、PC2、Laptop能正常访问其它网站,说明PC1、PC2、Laptop配置正常,本地网络也正常。
3,那么问题只能是出在本区的电信设备上。

于是开始找证据支持这个观点。在PC1打开Fiddler放在左边,打开Chrome放到右上,打开IE放在右下,然后一边不停地打开Chrome/IE、输入a.b.c、刷新、关闭,一边查看Fiddler的结果。

非正常显示和打不开时,Fiddler不停地显示”远程主机强迫关闭了一个现有的连接。” 这样进行了半个多小时后,突然发现,正常打开a.b.c后转变成非正常显示或者打不开之前,总是会关闭一个含有/twip/路径的连接,也就是说在关闭这个连接之后,访问a.b.c就会出现异常。

twip是a.b.c空间里安装的一个twitter应用,PC1、PC2、Laptop均安装了Chrowety,并通过它来连接twitter。之前Chrowety一直正常使用。难道会是它被GFW墙了,连累了访问a.b.c?

于是卸载了Chrowety,这时连接a.b.c正常,使用Laptop访问a.b.c也正常。为了确认这个原因,我再次安装Chrowety并设置好,访问a.b.c时故障现象重现。

GFW很强大,升级后的GFW更强大。

Install ZendOptimizer 3.3.9 to Lenny

# php -v
PHP 5.2.6-1+lenny9 with Suhosin-Patch 0.9.6.2 (cli) (built: Aug  4 2010 03:25:57)
Copyright (c) 1997-2008 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2008 Zend Technologies

# wget http://downloads.zend.com/optimizer/3.3.9/ZendOptimizer-3.3.9-linux-glibc23-i386.tar.gz

# tar zxvf ZendOptimizer-3.3.9-linux-glibc23-i386.tar.gz

# cp ZendOptimizer-3.3.9-linux-glibc23-i386/data/5_2_x_comp/ZendOptimizer.so /usr/lib/php5/

下面这步是重点
# echo “zend_extension=/usr/lib/php5/ZendOptimizer.so” > /etc/php5/conf.d/zend.ini

# /etc/init.d/apache2 restart

# php -v
PHP 5.2.6-1+lenny9 with Suhosin-Patch 0.9.6.2 (cli) (built: Aug  4 2010 03:25:57)
Copyright (c) 1997-2008 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2008 Zend Technologies
    with Zend Optimizer v3.3.9, Copyright (c) 1998-2009, by Zend Technologies

Code Highlighter Test

标题

这里开始是内容:
最近几天才开始使用代码高亮,起初用的是SyntaxHighlighter,测试的时候发现在有些浏览器下会异常,但也没理它。然后今天打开网页却发现高亮没了,在任何浏览器下面都是这样,相当灵异的一件事情。于是换成WP-Syntax,至少在所有的浏览器下都显示一样了,还支持我所需要的语言。

代码:

#region   执行Insert语句并返回自增长字段值
/// 
/// 执行Insert语句并返回自增长字段值
/// 
/// Insert语句、查询@@IDENTITY
public static string RunSQLID(string SQLstr)
{
   SQLcom = new SqlCommand(SQLstr, OpenConn());
   try
   {
      string id = SQLcom.ExecuteScalar().ToString();
      return id;
   }
   catch (Exception ex)
   {
      MessageBox.Show("错误:" + ex.Message, "错误提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Error);
      return null;
   }
   finally
   {
      if (OpenConn().State == ConnectionState.Open)
      {
         OpenConn().Close();
         OpenConn().Dispose();
      }
   }
}
#endregion

2009.09.07小帖士

1,Chrome现阶段的windows环境程序默认是不支持windows2003的, 但如果在启动的快捷方式里加上参数–single-process就可以了, 不过这也有局限性, 当设置Chrome为默认浏览器时, 外部程序引用网页时启动的Chrome还是不能启动.

2,24900+的产品, 分别导入到compiere3.1和adempiere3.41中去, 花费的时间分别是:

compiere 10:30 am – 3:50 pm = 320′
adempiere 16:58 pm – 17:40 pm =  42′

在订单中使用扫描条码的方式找出某产品, compiere需要20”±, 而adempiere只需要<1”.

3,openerp中的报表可以直接在openoffice writer中设置并上传, 而所需要的准备工作仅仅是给openoffice安装一个扩展. adempiere的报表设计是由ireport来完成, 不过相比openerp, 它上传并使用定制的报表要复杂许多.

何处安"家"!

    每次升级都是一个痛苦的过程,原因却是时代互联。

    当初选择它是因为可以定制空间,这样至少可以做到不浪费钱。但在这一年来的使用过程中,发现它存在的问题还有很多:

    首先是速度不够,不知道它的一台机子里设置多少个空间?即使我与空间所在机房在同一城市里,速度依然很慢,而其它地方能否打开还是一个未知数。

其次是限制较多。如果你想做伪静态,对不起,mod_rewrite模块是没有加载的,.htaccess文件也是没有启用的。要是说前面这一点还能够忍耐的话,那ftp限制则能让人抓狂,时代互联的空间只允许一个会话连接,并且在一个会话进行传输的情况下还会限制连接时间,也就是说,我们只能以一个会话传输60秒钟,然后你得等60秒才能再进行传输,我使用filezilla、leapftp、cuteftp均出现此问题,致电客服,至今连根毛也没回。

    -_-!

    再次是独断专行。今年4月的某天突然打不开网站,后在邮箱里发现了时代互联系统自动发来的信息,说是cpu占用过高而停用,原因是由于空间里某个文件引起的。估且不说是不是由于这个文件引起的,就单说日志里显示的访问这个文件的IP均为同一个,在同一秒内有1000+个会话,那么,难道时代互联的防火墙只是一个摆设么?我使用wordpress都可以做到这一点,而时代互联号称有怎样怎样的防火墙却不能,丢人啊!待我致电质问时,时代互联的回答是:传真不会再有类似情况的保证书才给开通。

    -_-!!

    除了这些之外,像nobody这样的问题我已经不想再说了,反正也要换isp了,若不是国外的isp一个个被gfw,我实在不愿这么辛苦,但是没办法啊,别期望国内的isp能好到哪去,毕竟,大环境是这个样子。

    另,我一直很奇怪,时代互联居然提供leapft、cuteftp破解下载。
    -_-!!!

m0n0 and pfsense

最早使用的是etch+iptables,那时还在做着几个网站,所以也就把它当成了临时的测试环境。几个月过去,当它只剩下路由功能之后,被那繁琐超长的命令折磨的痛苦不堪的我终于下决心把它改成了m0n0。在顺利使用一段时间之后,无法查看和统计IP流量的缺陷又让我把它改成了pfsense。至此,我以为就这个样子能使用很长一段时间,一来是我根本时间去折腾它了,二来是pfsense的功能已经满足了我大部份的需求。可是,事情远没结束。

自从这一切待定之后,我便放下了心,没有对它再花更多的心思了。所以当21的流量每每上传几十倍于下载,也没有引起我足够的警觉,只是脑子里有一个印象:“这个客户端有问题”。然而,今天,我却突然想起了这件事,也立刻明白了问题的严重性,这让我脊背发凉。不能再等了!查进程、看启动、翻程序、装杀毒… 把能使的手段都使出来了,最后的嫌疑锁定在了kugoo的身上。还好,结果没有想象中的那么糟。但这却并没有让我轻松多少:“pfsense在我手上用的比较失败!”

确定地说,m0n0已经在我的手上实现限速功能,而pfsense却没有。我很想大声地喧告:“pfsense不可以限速!” 但基于pfsense强大的基础和团队,我认为还是承认自己不会用pfsense的比较好。既然如此,那就换吧。

对于m0n0还是比较熟的。三下五除二就把它搞好了,下面帖几个限速的图,为了将来有个参考。要知道,迟早,我还是要用回pfsense的,在学会限速之后。

p1

p2

p3

r1

r2

r3

HTTP Status 404

留个位,把关键点帖出来。

– HTTP Status 404 – /openbravo type Status report description The requested resource (/openbravo) is not available
– can not bind port 8180
– tomcat5.5 wont start
– etc i forgot

解决方法

# vim /etc/init.d/tomcat5.5
find n replace TOMCAT_SECURITY=YES to NO

柳暗花明又一村

我总是没有做笔记的习惯,好多有价值的文字资料就这样白白浪费了,这让我吃不了少苦头。这些天不知道脑袋里的哪根神经发飙,突然想起要架个wiki 来记录工作中的那些记录,算是亡羊补牢。wiki系统选用的是DokuWiki,在安装完毕之后,花了两三个小时就把自己写wiki的水平从0经验提高到了熟手的程度,由于可见,DokuWiki算是比较人性化的。

不过,在刚开始试写wiki的时候,系统在空间里产生了许多因为nobody问题而无法在ftp里删除的目录和文件,按以往的处理办法,找ISP请求在空间服务器后台进行删除处理,但被告知周末休息:-( 正当郁闷着的时候,脑袋里却灵光一闪,它们不是由php产生的么?那么php是不是可以… 立马查php手册—unlink()可以删除文件,rmdir()可以删除目录。试着删了几个文件,发现效率太低,最终经google得到以下代码:

<?php
function removeDir($dirName)
{
     $result = false;

    if(! is_dir($dirName))
    {
         trigger_error(“目录名称错误”, E_USER_ERROR);
    }
    $handle = opendir($dirName);
    while(($file = readdir($handle)) !== false)
   {
        if($file != ‘.’ && $file != ‘..’)
      {
          $dir = $dirName . DIRECTORY_SEPARATOR . $file;
          is_dir($dir) ? removeDir($dir) : unlink($dir);
        }
   }
    closedir($handle);

    $result = rmdir($dirName) ? true : false;

   return $result;
}
echo removeDir(“DIR”);
?>

搞定!再也无需因为nobody的问题折腾自己了:-D

eclipse 3.3 + lomboz + jboss

一、先安装eclipse 3.3
打开官方网站http://www.eclipse.org/downloads/
下载Eclipse IDE for Java EE Developers

二、下载lomboz 3.3

打开官方网站http://lomboz.objectweb.org/downloads/drops/R-3.3-200710290621/
下载org.objectweb.lomboz-and-prereqs-R-3.3-200710290621.zip

三、下载jboss 4.2.2
打开官方网站http://labs.jboss.com/jbossas/downloads/
下载jboss-4.2.2.GA.zip