QTTabBar,这个不错的,感觉比那Ribbon UI好很多啊

windows 8的新的UI出来,微软看到谷歌把chrome os变成一个大浏览器,微软心急了,微软想了想,那我就把windows变成一个大的office,Ribbon UI听说也要在windows 8的文件管理器的界面了。可是老觉得微软把它搞复杂了,今日闲逛,发现这个好东西QTTabBar,真是个不错的想法,好东西,好想法,微软那些人怎么不添加这个功能呢,哎,我也不是果粉,但谷歌和苹果以简单为理念,把简单做到极致,微软貌似是个功能狂,功能越来越复杂。windows ce的教训怎么还没忘呢,当时就有人说:windows ce支持多任务支持多用户,等等等等,功能超多,但他把用户想的太聪明了,反而诺基亚的塞班,把用户想的简单,反而蒸蒸日上,知道iphone的出现,iphone刚好介于两者之间,所以iphone成功了。
原文也说了(懒得翻译,自己看吧,也不难懂):

There’s an interesting post over at the Building Windows 8 blog today (a blog which, by the way, I am monitoring like a hawk). They even mentioned us as one of several popular add-ons!

So, it seems the ribbon is here to stay. Personally, I don’t mind it as long as it can be minimized, but I know many people hate it with an intense passion. The Quick Access Toolbar looks very nice, a great return to form that makes our own button bar look outdated. I highly doubt this will be possible, but would be so great to be able to put our own buttons on that thing. I expect another build will be leaked after the BUILD conference in September… I can’t wait to get my hands on it and see how hackable it is.

发表在 海棠社 | 留下评论

PHP开发手机应用程序入门

Mobile for PHP developers

随着智能手机的普及,手机应用开发已经成为趋势,作为一名PHP程序员,当然也不能错过这个潮流。手机开发需要注意什么呢,看看下面的幻灯片吧,很不错哦,分别介绍了IOS和Android下如何开发,不过只是入门。个人很看好web app开发,借里面一句话(这个貌似也所套用java applet的)Write once ,run anywhere.

发表在 程序员 | 标签为 , , , , | 留下评论

PHP该不该用面向对象的方式呢?

说是高级教程,其实也是很基础的内容,不过里面有说到SPL这个类库,记得之前我就很在意这个库,而且觉得这个库应该会改变PHP的一些编码方式,不过身边用的人不多,还是国外用的多,国内不多呢,这个倒不清楚。看看总有帮助的。

发表在 程序员 | 标签为 , , , | 留下评论

base36和PHP的intval函数

先来看个映射表:

//start
Decimal 	0 	1 	2 	3 	4 	5 	6 	7 	8 	9 	10 	11 	12 	13 	14 	15 	16 	17
Base 36 	0 	1 	2 	3 	4 	5 	6 	7 	8 	9 	A 	B 	C 	D 	E 	F 	G 	H

Decimal 	18 	19 	20 	21 	22 	23 	24 	25 	26 	27 	28 	29 	30 	31 	32 	33 	34 	35
Base 36 	I 	J 	K 	L 	M 	N 	O 	P 	Q 	R 	S 	T 	U 	V 	W 	X 	Y 	Z
//end

没晕吧,我们知道16进制是0-9外加A-F,以此类推,上表所示的为0-9 外加A-Z,姑且叫做“36进制”好了。应该说是一种编码,就如Base64,只不过又多了些字符而已(比如说还外加了=号之类的),那么,一个有趣的题目来了:

//将会显示什么结果呢?
$result = intval("php", 36);
echo $result;

查看手册,知道第二个参数为base值,这个base值的意思就是将 第一个参数 转换成base的进制,然后返回。
问题来了。

既然是进制转换,那应该有“from进制”和“to进制”,从“from进制”转换到“to进制”,可是这里只有一个base值呢?要不不急吧,先运行看看结果

33037

好奇怪的数字啊?!

联系我上面说的from啊,to啊,再看看下面的代码,可能对你有帮助

$result = base_convert("php", 36, 10);
echo $result;

运行下看看结果先

33037

跟intval的那个输出是一样,所以intval(“php”, 36);的意思是 “from进制” = 36; “to进制” = 10;(这个10为隐含的条件)

相信你一定会去查查手册,看看base_convert具体是怎么用的,然后又将会有惊奇发现,也就是那个base值在2-36之间。然后你可能还会将36改成37,39之类的,发现输出的结果为0或者其他,因为返回false了。还有什么其他的功能呢?等你去发现。

发表在 程序员 | 标签为 , , , | 一条评论

HTML5 for PHP Developers

其实是HTML5 for JavaScript,But PHP?套用里面一句话吧:“PHP developers have to learn JavaScript as well!”
看看吧!
(BTW:仔细看下那个Youporn is using HTML5 video!你会发现惊喜)

发表在 程序员 | 标签为 | 留下评论

PHP的 Ctype 函数

我们经常会判断用户输入的数据是否全为数字,在防止SQL注入的时候,高手们会常常告诫我们“你一定要用is_numeric方法来检验是否为数字”,这是个不错的建议。但如果老板跑来告诉你,用户不只可以输入数字,还可以输入字母,这时你会疯掉,你需要回到 is_numeric的地方,然后从字母c开始按Backspace键,然后可能还会用到正则去匹配,你的正则可能是从网上拷贝的,用户“一不小心”输入了个下划线_,你的正则没注意到,等待你的是老板的斥责了。
这里展现的就是一个PHP里的验证模块Ctype 函数 。官方的说法是ctype_digit的速度要比is_numeric快三倍,我也没测试过,估计危言耸听了,就像php.net说SPLFixedArray比array快一样,希望你用SPL库的小伎俩而已。
例子如下,很简单的测试,看官看了基本上也就知道该怎么用了。之后的废话也就不多说了。

// Check if input is alphanumeric (letters and numbers)
ctype_alnum('abcdef1234'); // This returns TRUE
ctype_alnum('£%^&ab2'); // This on the otherhand returns FALSE

// check if input is alpha (letters)
ctype_alpha('dssfsdf'); // returns TRUE
ctype_alpha('12345dssfsdf'); // Returns FALSE

// Check if the input is numeric
ctype_digit('1234'); // TRUE
ctype_digit('1as2d34f'); // FALSE
	

它还包含一个很有趣的功能, 继续阅读

发表在 程序员 | 标签为 , , | 留下评论

apache配置虚拟目录

首先将httpd.conf文件里的下面这行打开

Include conf/extra/httpd-vhosts.conf

然后在extra/httpd-vhosts.conf文件里写上如下代码:

<virtualhost *:80>
	ServerName ok.cn
	DocumentRoot F:\ok

	<directory>
	Options -Indexes FollowSymLinks
	AllowOverride None
	Order allow,deny
	Allow from all
	</directory>

</virtualhost>

其中F:\ok为项目路径
windows下配置hosts文件里的ok.cn指向127.0.0.1,就可以在本地访问ok.cn了。

127.0.0.1    ok.cn
发表在 程序员 | 标签为 , , | 留下评论

call_user_func小例子

call_user_func用法
call_user_func ( callback $function [, mixed $parameter [, mixed $... ]] )
(摘自:http://justcoding.javaeye.com/blog/650843)

·1 直接调用函数

    function  eat ( $ fruit )  {
       echo  $ fruit  .  "\n <br /> ";
   } 

  var_dump ( call_user_func ( "eat ", "apple ")) ;//apple NULL
  var_dump ( call_user_func ( "eat ", "orange ")) ;//orange NULL
  

·2 调用类的内部方法

  class  Klass {
    function  say ( $ name )  {
          echo  $ name  .  "\n <br /> ";
      }
  }
  $ class  =  "Klass ";
  call_user_func ( array ( $ class , 'say ') , 'pldream ') ;//pldream
  

·每次都要查一下这个方法才知道怎么用,不是因为记不住,而是因为记混了

发表在 程序员 | 标签为 , | 留下评论

fsockopen用法之简单实例

fsockopen的简单用法,获取echosock.php远程文件 echosock.php里的内容为

Hello fsockopen()
This is a test page

演示文件sockopen.php的代码如下

$host = "pldream.com";
$ip = gethostbyname($host);
$html = "";
$fp = fsockopen($ip, 80, $error, $errstr, $timeout = 30);
if($fp){
	$out = array("GET /b/test/ex03/echosock.php HTTP/1.1\r\n","HOST: " . $host . "\r\n", "Connection: Close\r\n\r\n");
	fwrite($fp, join($out));
	while(!feof($fp)){
		$html[] = fgets($fp, 128);
	}
	fclose($fp);
}else{
	exit("fail");
}
发表在 程序员 | 标签为 , | 留下评论

Function对象之冒泡遍历对象(简单实例)

刚刚看到个题目,运行后,你就会觉得很奇怪了

var i = 5;
function fo(){
	var i=4;
	var fi = new Function('alert(i);');
	fi();
}
fo();

上面的结果为i=5;
这个结果开始令我有点小惊讶,不过后来研究发现,其实,new Function中的i,它是从自身开始往上不断的找,直到直到这个i才停止,如果没找到,则为提示i没定义,我们可以把这个例子稍加更改,则会更好理解些。

var i = 5;
function out(){
	this.i = 2;
	function out2(){
		this.i = 3;
		function fo(){
			var i=4;
			var fi = new Function('alert(i);');
			fi();
		}
		fo();
	}
	out2();
}
out();

你可以先打印出i的值,然后再注释第五行打印看看,再注释第三行打印看看,最后注释第一行打印看看,相信你在试过后,一定会得出结论的。

发表在 程序员 | 标签为 , , | 留下评论