ubuntu

很久没有更新了,我和本站之前的几位作者已经分开有两年的时间,时间过得还真快,这里都快杂草丛生了,不过再怎么样,这里都是一个技术博客,我希望这里会比雅虎邮箱活的久一点。

这是一篇几个月前发表在我个人博客上的文章,原文地址是:http://blog.foolbird.net/3162.html,说起使linux移民已经是一个很老的话题,bobhero已经早在几年前全面开始使用archlinux进行日常工作,在这么多年之后,我终于也迈出了这一步,不过道行还不深而且我比较懒只能暂时依赖ubuntu。

我曾经很多次打算放弃windows,将所有的工作全部转移到linux下,也曾经在linux环境下工作了很长一段时间,但最终由于种种原因,还是没有坚持下来,那已经是很多年前的事情了。

今年的某一天,我终于下定决心,专门买了一台二手笔记本,开始了艰难的移民之路。

首先是挑选笔记本,经过一番挑选之后,我入了一个东芝R200,Intel双核1.2/板载256内存/128显存,淘宝上都是一些翻新机,低配价格一般都在500左右,之后花240买了一块32G的固态硬盘,还花了50块钱将内存升级到1.25G。

r200

一.安装系统

做为个人环境,首选是LTS版本的ubuntu,目前的最新版是12.04,虽然我也挺喜欢archlinux和debian,但是每一次都会为安装驱动而抓狂,特别是网卡驱动,两年前的某一天,我发现ubuntu上无线网卡基本都是内置的,所以毅然转移到ubuntu阵营。

本子刚到手的时候为装系统纠结了好一段时间,因为R200是一款轻薄型笔记本,没有内置光驱,于是我开始尝试进行硬盘安装,换了几个方案都没有安装成功;然后折腾了几天U盘安装,但是很奇怪,我手里的几个ubuntu镜像一进了u盘连check都过不去。最终只能妥协,网购了一台外置刻录机,一次性就装好了,让我很意外的是整个过程没出任何意外。

二.桌面环境

做为一个开发者,桌面环境首选肯定是awesome了,简洁高效配置灵活,其实换掉unity还有另外一个理由,就是只要一进unity这破本子的风扇就响个不停,awesome下如果不跑太大的进程,写代码看网页几乎没什么声音。

平时没声音了,但是ubuntu开机之后的登录管理器lightdm还是特别吵,而且无法定制,寻觅一番之后改用了mdm,选了一个非常简洁的主题。

IMG_20130331_015912

awesome可以进行深度定制,但其实默认配置也足够用,所以我只简单换了一下布局和颜色,然后自己写了一个显示电池电量的widget。

awesome的平铺式桌面

awesome的平铺式桌面

三.开发环境

其实linux都是天生为开发而设计的,所以除了没办法开发windows程序之外,其它的事情都变得特别简单,特别是这类有软件包管理器的linux发行版,编辑器我觉得最终也只有vim和emacs两个选择。

我最近在做一个产品原型,之前都是在windows下用axure来做,到了linux下我打算用balsamiq mockups替代,balsamiq mockups基于adobe air,虽然目前adobe air已经停止对linux的支持,并且ubuntu官方源里也找不到air,但还是可以去adobe官网下载一个旧版的air来用。air程序安装完是没有执行程序的,特别是awesome里还没有程序目录和桌面快捷方式,balsamiq mockups需要手动启动,启动脚本的位置在/opt下。

四.终极方案四.终极方案

之前几次放弃使用linux环境的原因,都是因为某些事情在linux下无法实现,最致命的就是支付宝和网银,还有IE的兼容性测试。

为了彻底解决这个问题,我装了一个virtualbox来跑windows xp虚拟机,安装虚拟机的过程也是很曲折的,首先官方源安装的virtualbox无法正常运行,报错:No suitable module for running kernel found,尝试了网上的一些方法都没有解决,最终去virtualbox官网下了一个deb才正常执行;然后是windows xp的各种问题,我家里的几张光盘都有些问题,有些无法正常安装,有些安装完运行还不流畅,最终我在雨林木风官网下了一个纯净版6.0的镜像,安装完后遇到了VMware Accelerated AMD jameshallison casino PCNet Adapter的问题,在设备管理器里选择更新驱动然后重新选择网卡即可,分了512的内存和5G的硬盘给xp,上网银还是很流畅的。

五.漂洋过海

其实现在来看这个事儿已经不仅仅是技术的事儿了,任何一个人都有漂洋过海获取信息的需求。目前来看hss和npv已经都可以被获截和锁封,经高人指点之后我编译了支持手握淆混的hss detacsufbO(详情:http://bit.ly/10b5zLy)。

下一步我打算将以前windows下的svn和项目都迁移过来,还有配置文件的自动备份,远程文件的自动下载和备份等等,32G有点小,以后可能需要一台NAS。

最后一句话,趁早去做,再不做就老了。

发表在 Ubuntu | 标签为 | 一条评论

PHP

1.PHP中可以静态调用非静态方法么?

今天我被问到PHP中可不可以使用 className::methodName() 的方法来调用一个没有声明Static的方法。在我的印象中,我好像是见过这种用法,但又有些不确定。大家都知道,在手册或者教程里,方法被分为静态方法和非静态方法,通常我们静态调用的方法,肯定是静态方法。

那如果我们调用了非静态方法会怎么样呢?首先做测试.
<?php
class test{
function test(){
echo "it works";
}
}
test::test();

执行以下,返回错误如下
Fatal error: Non-static method test::test() cannot be called statically in /home/×××/test.php
on line 7 Call Stack: 0.0002 332548 1. {main}() /home/×××/test.php:0

这个时候,可能大家就会认为静态调用非静态方法是行不通的了,但其实,结论下的过早了,因为test()这个方法比较特殊,与类同名,是构造方法。

我们继续测试。
<?php
class test{
function test(){
echo "it works";
}
function test2(){
echo "it works too";
}
}
test::test2();

执行结果:
it works too
这说明,静态调用非静态方法是可行的,但是静态调用构造方法是不可以的。为了验证这个结论,我又做了如下测试:
<?php
class test{
static function test(){
echo "it works";
}
}
test::test();

执行的结果如下:
Fatal error: Constructor test::test() cannot be static in /home/xxx/test.php on line 9
构造方法不能声明静态,所以上面的推论正确。

但这个结果的确是很特殊的,因为可能只有PHP可以静态调用非静态方法,我用Java做了实验,如果静态调用非静态方法会报如下错误:
Cannot make a static reference to the non-static method showString() from the type HelloWorldApp
其他语言我没有一一尝试,但这已经足够来说明PHP的特殊之处,关于为什么PHP会有这样的情况我暂时没有找到相关说明。

2.静态调用非静态方法是否应该被应用?

那我们是不是可以使用这种方法来代替static方法呢? 首先在代码的可读性上来看,静态调用非静态方法当然是不被推荐的,这会让维护者产生疑惑。

接下来我们再做一些实验,来看一下静态调用非静态方法在效率上是否会有一定的优势。
<?php
class test{function test2(){}}
for($k=0; $k<10000; $k )
{
test::test2();
}

上面代码在我这里的执行时间是18到28毫秒,我们再来测试标准的写法。
<?php
class test{static function test2(){}}
for($k=0; $k<10000; $k )
{
test::test2();
}

上面的代码执行时间在5到10毫秒之间,这样看来,静态调用非静态方法的效率要比标准的静态方法调用低的多,所以在效率上也不推荐静态调用非静态方法

发表在 PHP | 标签为 | 5 条评论

symfony

由于种种原因,本站的symfony系列教程已经停止更新一年之久,又因种种原因,本站的编辑们也都停止了对本站的维护。

symfony是我使用过最经典的php框架,symfony可能不是最好的,但在我用过的种种框架中,symfony绝对是最优秀的,虽然,我现在已经连创建项目的命令都已经忘掉了,但是symfony的oo思想让我获益匪浅。

目前symfony的2.0版本已经在开发阶段,国内的symfony开发者也越来越多,本站绝大多数的symfony文章都是1.2版本的时候写的,可能已经跟不上时代,但其中的思想仍然值得广大symfony入门者参考,我对本站的symfony文章进行了一次整理,很遗憾没能把这些文章写成一个系列。

基础篇

进阶篇

高级篇高级篇

在此感谢站长bobhero和每一位做出过贡献的编辑们(排名不分先后)zhuozi,kthiz2006,hansir,szn000,duandi,同时也感谢各位读者对我们的支持。

发表在 PHP, symfony | 2 条评论

session IE

工作中,遇到一个问题 ,同样的代码在FIREFOX 和 IE 下 表现 相差太多 ,查之 ,竟然是因为 session_id() 返回值的问题,解决过程如下
1. 测试 FIREFOX 和 IE ,IE每次刷新页面时 得到的SESSION_ID 值不一样,FIREFOX 一样
2.测试 IE6,IE7,IE8 竟然 只有IE7 有这种 现象………..
3.经多方查证,没有结果 ,网上没有人和我的情况一下,自己解决吧

4.我左三圈右三圈 ,最后发现 竟然 是 内裤 掉色 ……………………………………………………………

域名里 有 下线 “_” ,这个竟然 是BUG 所在点

结论: 在IE7 下 ,如果 域名里包括下划线,SESSION 将失效

如果你觉得本BLOG对你有帮助 ,请帮助其它人

发表在 PHP | 2 条评论

IEScript Debuggerjavascript

该死的浏览器战争,苦了我们这群web开发者,每天都要面对html兼容性,css兼容性,javascript兼容性! 还有什么比这更要命的么?

通常情况下, 我都用Firefox下的Firebug插件来开发Javascript应用, 但是经常会有代码在IE下就失去作用, 而且IE的错误提示还很模糊, 经常会让我无从下手.

以前听说过IE下的一些调试工具,从没用过,刚刚被一个语法错误逼的没办法向bobhero求助,他推荐我装了Script Debugger.

这是微软开发的一款开发工具, Google之, 进入微软的网站下载安装, 如果你不是Win98或者Win Me记得要下载 Script Debugger for Windows NT 4.0 and Later, 否则等着杯具去吧.

安装过程大概就是, 下一步->下一步->下一步->下一步->下一步->下一步….

安装完毕后, 进入Internet选项->高级, 如下图把禁用脚本调试(Internet Explorer)和禁用脚本调试(其他)两个选项关闭掉. 如果你忘了这步, 那么, 痛苦去吧, 你会发现和没装没什么差别.
ie-script-debugger-01

搞定上一步之后, 找你的错误去吧.
ie-script-debugger-02

ie-script-debugger-03

我刚刚发现我还装过另一个调试工具,我怎么就不记得了呢…

发表在 JavaScript | 标签为 | 评论关闭