E*/); } ?> Heat space - In the heat of the sun

Windows7使用VNC连接Ubuntu 11桌面

刚把公司的电脑装上了ubuntu 11,而我自己带上笔记本上班的,实在不想使用两个两个鼠标和两个键盘,但我一直是在笔记本上用两个显示器,这就想到了用VNC去连接,然后放到扩展显示器上全屏幕显示,这样就方便了,就和同时操作两台电脑没什么分别

直接在Xwindow里的管理器中安装了VNC,然后在笔记本里使用realvnc连接上去。

这里假设我笔记本(windows7)IP是192.168.2.10,而公司电脑(ubuntu 11)IP是192.168.2.11

结果超慢(其实慢的原因和我笔记本用的是无线,而且和台机网段不相同有点关系的),显示画面都是看着它从上至下绘制的,而且一直与ubuntu桌面同步,还经常出现部分区域没有刷新的情况。

勉强用了一会,刚好更新了一些软件,要重启,问题出来了:realvnc死活连接不上去(这时没有在192.168.2.11上登录),然后登录后就OK了

这样,我就怀疑是因为vncserver安装在Xwindow下,并且在登录后才启动的

好吧,怕了你,我在终端下重装一个vncserver就是

要启动vncserver就要使用ssh连接,然后启动vncserver

所以安装ssh还是必要的,SSH的安装和配置就不多说了,下面说说vncserver的安装

安装vncserver

$sudo apt-get install vnc4server

完成后,vncserver默认将安装在 /usr/bin/vncserver

配置vncerver:

修改~/.vnc/xstartup文件,找到:

x-window-manager &

在它最前面加上’#',即把它注释了,然后在最后面加上:

gnome-session &

这样就把默认环境配置好了

执行:

$vncserver

即可进入。

指定使用gnome桌面启动,并设置vnc会话号为1,可使用下面命令:

$vncserver -name gnome-session:1

如果是第一次使用,将要求输出连接vnc server密码,输入两次相同密码就是

在windows下使用realvnc连接:

在realvnc里,输入ubuntu的IP,并在后面输入会话号,如:192.168.2.11:1

点击连接后,要求输入密码,输入刚才设置的密码即可(要修改vncserver的连接密码,可使用:vncpasswd命令)

要结束会话则在终端输入:$vncserver -kill :1

其中,1为启动时指定的会话号

在使用过程中,发现不管在什么地方,只要按一下’d'就会显示桌面,原来是系统的快捷键,改一下就是:

方法为:在Ubuntu的桌面上,点击“系统”–>“首选项”–>“键盘快捷键”,找到“隐藏所有桌面窗口并将桌面设为焦点”,可以看到他的快捷键是D,把它改成”Alt+D”就可以了。

好了,现在可以享受一下用一个鼠标一个键盘来控制两台电脑了

Tags: ,

Leave a Comment

增城自驾一天乱游

先声明一下:该文章并非攻略,想看攻略的请绕道…
已经没有和朋友外出活动很久了,有大半年了吧,近来心情烦闷,可能是更年期了,决定抛弃老婆,自个儿出去和朋友玩(估计某人看到了一定要开骂)。不知是刚好还是怎么样的,朋友第二天居然说要去增城玩了。

一大早7点就起来(因为手机没电了,没有闹钟,完全不知时间,只有起来后开电脑,打开bios看时间),8点在宿舍楼下等啊兴车,话说,等了差不多20分钟车才到(荃达….你要怎么补尝我啊)。出发了,一路上接了3个都认识的朋友,直奔增城第一站:肥钟家里(集合成员有:肥钟,他弟,老婆,女儿),继续出发,路边的农村买了一只7斤多重的鸡(一百多块,好像是28块一斤),还有一些水果。经过几次的冤枉路,终于到了第二站,增城著名景点“白水寨”。白继波同学远远看了这里的景色,就开始抱怨,怎么没和他说有这景点,害他没带相机…结果,游玩此站总共花费了不到10分钟…任务很简单:门口拍照留念,一人一碗豆腐花,完事… Orz..  门口那售票员估计快要吐血了..白继波同学估计也在同吐..

已经是下午一点多,外面估计有37+度,继续前往第三站。再次冤枉经过几段路,终于到可以要解决问题的地方,这问题可是中国花了几十年才解决下来的重大问题--温饱问题。看清楚,只是到了这地方.. -_-!   洗米、洗鸡、找柴、搭灶、生火,还有人去抓鱼..也不知多少时间,好像已经2点多。过程中看见两条狗经过:“这狗能吃吧”,看到旁边的竹笋:“这个味道好像很不错”,看到地上长了一堆蘑菇:“这个好像也能吃吧”…  难怪著名演员周星星说了:地球很危险的…。折腾到3点多,不知里的饭被翻开了多少次,终于可以开饭了,我看怎么样都像稀饭…也不管了,吃了再说。那鸡还真的好吃,农村的就是好,肉质非常的有弹性,皮都是脆号的,而且没多少鸡油,骨头不是一般的硬,最终结果是,鸡没了,饭还有半锅…反正我吃了三碗,没亏..好饱,呵呵..

再次出发,最后一站..路上又去了吃“正果云吞”,这时我都已经饱得我不行了,见有些人坚持要去,说好吃,看到门口上写着“神记云吞美食”,“神记小食店”,“始创1951年”,“三代传人”,“60年字号”..好吧,也去试一下,其实我都已经是饱得想吐…进去看了一下,环境还真的非常原始,和我家里83年左右的环境差不多,椅子都是完全用竹子做的,环境的确不怎么好,没人介绍的话,估计我是不可能进去的,大约等了5分钟左右吧,云吞就出来了,实在是看不出有什么特别。不过呢吃下口味道还是很不错的,里面材料不多,基本就是猪肉,但吃得出,这猪肉还是精瘦肉,不是那种杂肉,用料上还真大方,皮也很薄很滑,汤底我吃得出主要味道是胡椒和砚水,结论是:非夏天的话,感觉会非常好,肉里加上芝麻的话味道会更好。最后我还是把一碗的云吞搞了下来,我也很佩服我自己..

吃完后就出发最后目的地增江河去玩水。肥钟买了条橡皮艇,还装了马达,单把这艇装好就花了大半小时,汗。然后把两个女同学和一小孩丢在江边,七条大汉穿上救生衣,坐艇去江中心玩水去了,我还是第一次驾驶,时不时就会无故绕圈,差点把肥钟也绕到水里去了,估计要被吓死了吧,哇哈哈,最后结果是半路就把油给用光了。那水还真有意思,上面1米左右的水都是热的,下面就非常的冷,好想潜下去爽一下,但因为是深不到底,想一下就算了,不敢乱来。也不知玩到几点,上岸了,发现丢在河边的两位女同学居然不知所踪了,电话也没人接,我们的衣服、钱包都在车年,原来她们去骑自行车去了,等她们回来,我们的裤子都干了,悲剧… 最后直接就在河边的大排档把晚餐解决掉。其实这时我还是很饱,那里的菜味道也很不错,就是吃不下去了..

就这样,愉快的一天基本结束,起程回广州

最后要谢一下啊兴和肥钟这两位老大,给了我们一个这么好的活动安排,还当了这么久的司机,(敬礼)你们辛苦了。

Start Slide Show with PicLens Lite PicLens

Tags: ,

Leave a Comment

通过优化图片提高单一服务器站点的性能

最近,一老朋友叫服务器慢,看能不能处理一下。问题反映:打开页面慢、机房报说带宽用尽

试了下,使用Chrome打开站点首页,发现并不是响应慢,而是传输时间长,130+个请求,我这里可是100M的带宽,完全打开页面用了30+秒,再看一下数据量,居然是4M+,偶的天哪…看一个页面等于下载一个软件了,按Size排序,排第一的居然是一张500K+的图片,后面的都是200-300k+的不等有7、8个,还有一堆100+K的。

另外DOM的加载时间用了3秒+

主要问题基本出来了:前端设计中图片相关处理不合理的结果

关于前端图片相关解决方案

1、 可以使用文字和样式解决的界面不要使用图片
2、用户上传图片必须在后端压缩才能显示在前端(这个要求比较基础吧)
3、非用户上传图片(如广告)先用软件压缩再传
4、 图标可以集中存放在一张图片上,通过样式background设置偏移得到对应图片

前3点是减少流量(因为JPEG本身就是压缩格式,是没办法再压的),第4点是有效减少请求数。其中第四点的重要性这里有必要解释一下:

1、浏览器对单一域名并发请求数是有限制的,基本都是2-3个,老的甚至只能一个请求,这样的话用户不得不一个个等待,后面的请求都处于阻塞状态(当然可以通过使用多个域名或CDN来增加下载的并发,这就超越本文内容了)
2、请求-响应需要额外的时间开销。当请求多了,请求-响应占用时间的比例就会变大,当然可以通过设置Web服务器keep-alive使一个连接来响应多个请求(要使用http 1.1协议),但还是有时间限制的,一般不会超过3秒吧(最少我是这样设置的)
3、能减少请求/响应头信息,如Cookie,User-Agent,Host等信息。其中特别是请求头,是属于上传,在一网络传输过程中,上传带宽远比下载带宽少得多,一般没有1/4,假设这些信息长度为4k,在一次页面访问中有100个请求,那就要传输4k x 100 = 400K的数据了,对于有一定访问量的站点来说,这数字可不是小数目

服务器(Apache + Nginx)相关设置

Nginx用于响应静态文件,如图片,CSS,JS等,动态脚本请求转发给Apache处理
Nginx打开Gzip,Apache打开 deflate模块,用于压缩输出文本
Nginx使用ETag,告诉浏览器来缓存图片文件

为什么这样的组合?原因很简单,Nginx处理静态文件的能力远比Apache要强,同时转发能力也是Nginx强项,另外由于Nginx的简单设计,使得他非常的健壮。至于使用Apache嘛,强大的功能不用解释了,而且使用module的方式执行PHP非常的稳定(目前PHP以FastCGI方式运行好像还不太成熟,不过速度上的优势没得说)

还在上班过程中,先不说了,欢迎朋友们提出更多的建议,如有错误,请指证

Tags: , , , ,

Leave a Comment

整理一下sina sae

SAE的PHP Runtime环境提供了标准的MYSQL,MYSQLI和PDO模块,三个模块都由MYSQLND驱动,支持几乎所有MYSQL的特性,您可以使用您习惯的方式来操作数据库.建议大家在使用MYSQL的时候注意主从分离,同时使用SAE的预定义变量连接数据库
以mysql模块为例:

/* 连主库 */
$link=mysql_connect(
‘m’.$_SERVER['HTTP_MYSQLPORT'].’.mysql.sae.sina.com.cn:’.$_SERVER['HTTP_MYSQLPORT'],
SAE_ACCESSKEY,
SAE_SECRETKEY
);

/****
*
* 连从库:
*
$link=mysql_connect(
’s’.$_SERVER['HTTP_MYSQLPORT'].’.mysql.sae.sina.com.cn:’.$_SERVER['HTTP_MYSQLPORT'],
SAE_ACCESSKEY,
SAE_SECRETKEY
);
*
****/
if($link)
{
mysql_select_db(’app_’.$_SERVER['HTTP_APPNAME'],$link);
//your code goes here
}
其中:
主库host首字母为m 从库为s
$_SERVER['HTTP_MYSQLPORT'] 为 端口号
‘app_’.$_SERVER['HTTP_APPNAME'] 为 数据库名
SAE_ACCESSKEY 为 用户名
SAE_SECRETKEY 为 密码

当然SAE也提供了SaeMysql类,已经内置了主从分离,我们也推荐您使用这个类来操作mysql资源。
PS.:其实这里的例子有点错,把:$_SERVER['HTTP_APPNAME'] 也写成 $_SERVER['HTTP_MYSQLPORT'] 了

另外:SAE_ACCESSKEY和SAE_SECRETKEY其实也是有对应的$_SERVER环境变量

Tags: ,

Leave a Comment

好东西呀,PHP register_shutdown_function函数

这个函数还真的有用,相当于类别的析构函数,关键是他连代码出错而终止也会被执行,这样的话我想到主要用途主要有几个:

1> 连接的结束

2> 内存释放

3> 结合ob_start()就可以写LOG

关于写log,测试了一下:

<?php

ob_start();

function shutdown() {

$str = ob_get_contents();

ob_clean();

echo ‘this is return str:’ . $str;

}

register_shutdown_function(’shutdown’);

$x = new abc();

?>

当然,写log的时候也就可以把当前的一些运行时环境同时保存下来了

这是关于这函数的译文:

脚本时常死掉,而且并不总是那么好看. 我们可不想给用户显示一个致命错误,又或者一个空白页(在display_errors设为off的情况下) . PHP中有一个叫做 register_shutdown_function 的函数,可以让我们设置一个当执行关闭时可以被调用的另一个函数.也就是说当我们的脚本执行完成或意外死掉导致PHP执行即将关闭时,我们的这个函数将会被调用.所以,我们可以使用在脚本开始处设置一个变量为false,然后在脚本末尾将之设置为true的方法,让PHP关闭回调函数检查脚本完成与否. 如果我们的变量仍旧是false,我们就知道脚本的最后一行没有执行,因此它肯定在程序执行到某处死掉了.我准备了一个非常基本的例子,可以演示在一个致命错误需要显示时,你应该怎么给用户一些合适的反馈.你可以通过关闭致命错误的显示(译注:可以设置display_errors和error_reporting),让例子看起来好看些.

<?php

$clean = false;

function shutdown_func(){

global $clean;

if (!$clean){

die(”not a clean shutdown”);

}

return false;

}

register_shutdown_function(”shutdown_func”);

$a = 1;

$a = new FooClass(); // 将因为致命错误而失败

$clean = true;
?>

正如你看到的,如果关闭回调函数运行时,clean变量没有被设为true,shutdown_func函数将会打印出一些东西.这个东西可以包装成一个类(不使用全局变量).更多有用的相关信息,我推荐大家查看 EZ组件库的实现方式.

Tags:

Leave a Comment

freebsd备忘录

网卡重启相关:

/etc/rc.d/netif restart (如果设置了dhcp取IP,要使用该指令)
/etc/netstart

SSH 使用密码登录方式登录:
添加一用户, 并添加到wheel组(这样才能使用su)
vi /etc/ssh/sshd_config
修改:
PasswordAuthentication yes

/etc/rc.d/sshd restart

关机:
shutdown -h now

mysql 开机自动启动:
进入mysql(如/usr/local/mysql)目录后,执行:
cp support-files/mysql.server /usr/rc.d/mysql.sh
修改/etc/rc.conf 添加:mysql_enable = “YES”

重启后提示类似:
My unqualified host name(localhost) unknown;sleeping for retry
主要是因为设置的主机名没办法解释:解决方法有二:
1>修改/etc/hosts,在127.0.0.1 那行的后面添加你的主机名
2>主机名填写你真正的域名

Tags:

Leave a Comment

经验:ie又一JS性能问题

一直以来,如果项目中没有使用JQuery之类的框架时,添加事件都直接使用onxxxx = function(){…}的方法,觉得直观、方便,而且一直以来也没出过什么问题,直到今天..

现象
每次翻页(ajax)后,内存暴增500K-1M (每次更新都先清除相关DOM) ,而且不关浏览器的话都无法释放。
使用排除法,最后定位在添加<Img>时出现,再次尝试,移除img上面的事件(onclick,onmousedown…),一切正常,尝试在img父级元素添加事件也出现同样现象,最后问题定位在:在img上不能使用onxxx=function(){..}的方式添加事件,否则无法清除DOM,即使在清除DOM时使用onxxxx=null的方式也无法处理

解决方法
ie下改用attachEvent()与detachEvent()代替,一切正常

Tags: , , ,

Leave a Comment

转一下《在淘宝开店受骗的经历》,同事的亲身经历

在淘宝上开店,没想到第一个单就给骗了.决定写下来跟大家分享这次经历:

首先, 买家陆壳型盆地s1d(自称也是做充值了,现在没有货,有个客服催他充值) 在 旺旺上一边问我有没有货,一边崔我要联系电话,说方便沟通,还时不时发振屏,营造一个急着要货的气氛!然后我急忙就告诉他有货和电话(好兴奋啊,新店的第 一个买家!)他告诉我已经拍了,并且电话联系了我,叫我帮他手动充值。我告诉他还没有付款(这时我还是有点警惕感),他告诉我已经付款了,叫我看看邮件, 我一看邮件的确收到“支付宝”的邮件(这个是他伪造的邮件), 告诉我买家已经付款了。而且我还看了看发送的地址:alipay@mali.alipay.com, 支付宝发给我的(原来那个mail错了,真是眼瞎了!)

然后他在电话里不停的催我快点,这时我就糊涂了!!(忘了看淘宝上的订单状态),然后我就慌张的帮他充值(真是傻了!), 那时他挂了电话,在旺旺上叫我把充值成功的截图发给他看,他要给客服看。

这时另一个买家炫耀殇痕也拍了,我说暂时没有货(因为新开店,软件没有充值那么多钱),明天才买,或充少些,他说不行,要投诉我,并且发了截图给我
(投诉是假的,是他ps出来的), 我也收到支付宝的邮件
我也没办法,也不理他,我就叫买家陆壳型盆地s1d确认收货,他说确认不了,并且截图给我看


(确认不了的截图也是他ps出来的)这时我更加晕了,他反问我怎么办(好像很热情的!!),还叫我去叫买家炫耀殇痕撤诉!我就叫他等等,我要去问问客服,客服一查告诉我他基本没有付款,我才反应过来!

原来受骗了!新开店,第一个单就给骗了,就当交学费(苦笑!本来以为买个软件,设置自动充值和评语,就搞掂!事实不是那么简单的~!!)

在这里告诉新开的话费充值店卖家听一切以订单的状态为标准

伪造发邮件是要知道对方的email地址才能发过来,刚开始我不明白他们怎么知道我的email地址?问了客服才知道,在“已买到的宝贝“列表和交易详情那是可以看到卖家的这些私隐信息的


向淘宝建议: 如果email地址是因为为了方便买家联系卖家,必须显示给买家知道,那应该在帐号管理的邮件地址那加提示告诉用户知道这些(我个人觉的有必要!!)

Start Slide Show with PicLens Lite PicLens

Tags: ,

Leave a Comment

转帖:vim 代码折叠方法

1. 折叠方式 
可用选项 ‘foldmethod’ 来设定折叠方式:set fdm=*****
有 6 种方法来选定折叠:
          manual           手工定义折叠
          indent             更多的缩进表示更高级别的折叠
          expr                用表达式来定义折叠
          syntax             用语法高亮来定义折叠
          diff                  对没有更改的文本进行折叠
          marker            对文中的标志折叠

注意,每一种折叠方式不兼容,如不能即用expr又用marker方式,我主要轮流使用indent和marker方式进行折叠。

使用时,用:set fdm=marker 命令来设置成marker折叠方式(fdm是foldmethod的缩写)。
要使每次打开vim时折叠都生效,则在.vimrc文件中添加设置,如添加:set fdm=syntax,就像添加其它的初始化设置一样。

2. 折叠命令
选取了折叠方式后,我们就可以对某些代码实施我们需要的折叠了,由于我使用indent和marker稍微多一些,故以它们的使用为例:
如果使用了indent方式,vim会自动的对大括号的中间部分进行折叠,我们可以直接使用这些现成的折叠成果。
在可折叠处(大括号中间):
zc      折叠
zC     对所在范围内所有嵌套的折叠点进行折叠 
zo      展开折叠
zO     对所在范围内所有嵌套的折叠点展开
[z       到当前打开的折叠的开始处。
]z       到当前打开的折叠的末尾处。
zj       向下移动。到达下一个折叠的开始处。关闭的折叠也被计入。
zk      向上移动到前一折叠的结束处。关闭的折叠也被计入。

当使用marker方式时,需要用标计来标识代码的折叠,系统默认是{{{和}}},最好不要改动之:)
我们可以使用下面的命令来创建和删除折叠:
zf      创建折叠,比如在marker方式下:
                   zf56G,创建从当前行起到56行的代码折叠;
                   10zf或10zf+或zf10↓,创建从当前行起到后10行的代码折叠。
                   10zf-或zf10↑,创建从当前行起到之前10行的代码折叠。
                   在括号处zf%,创建从当前行起到对应的匹配的括号上去((),{},[],<>等)。
zd      删除 (delete) 在光标下的折叠。仅当 ‘foldmethod’ 设为 “manual” 或 “marker” 时有效。
zD     循环删除 (Delete) 光标下的折叠,即嵌套删除折叠。
          仅当 ‘foldmethod’ 设为 “manual” 或 “marker” 时有效。
zE     除去 (Eliminate) 窗口里“所有”的折叠。
          仅当 ‘foldmethod’ 设为 “manual” 或 “marker” 时有效。

Tags:

Leave a Comment

关于编写JS的一点经验[不定期更新换代]

1、一定要封装
只要是调用接口无论是FLASH还是应该程序提供的接口(其实很多情况都应该封闭,只是这种情况的必要性更xx了 ),一定要另外封装主要原因是:

  • 保证自己编写的JS代码的独立性,减少因接口返回的内容而受到影响
  • 方便调试:因为大部分接口都不是只调用一次的,只要在封闭的地方输出一下就知每一个地方所 返回的内容,而且用VC调试的话,很快就能根据调用堆栈里快速得到问题所在。再者,现在IE8自带的性能测试工具也是基于方法的
  • 数据模拟:在别人接口尚未完成或出问题的时候,只要使用模拟数据就可以继续调试自己的代码,可以的话写测试用例都没问题目
  • 方便接口切换:只要在封装内容里简单修改,并保存返回内容的一致性即可切换

Leave a Comment