话说在上篇(揭开Wayland的面纱(一):X Window的前生今世)中我介绍了一些X Window的历史及发展,还没有提到Wayland本身,不少人已经等不及了。不过,介绍这些是有必要的,毕竟要知道X Window的一些知识,才能明白为什么会有Wayland这个东西。
在本篇正式开始介绍Wayland之前,让我们先回到2008年11月4日,也就是整整两年前,我当时在中文领域第一时间报道了“Wayland”的新闻:Wayland:Linux的新X Server,在其后的一个月,又写了:Wayland最新动态。
当时这两篇文章主要是翻译Phoronix的新闻,自己也没有亲自把玩过Wayland,再加上Wayland项目还处于比较初期的阶段,对其的理 解有限。如今经过整整两年的开发,包括Linux内核在图形方面的不断的改进、GTK+图形库的不断进化,Wayland已经渐渐成熟,接近可用状态。
那么,回到上篇开头最初的那个问题:
Wayland究竟是什么?
如果在两年前,按照那篇《Wayland:Linux的新X Server》的理解,它是一个新的“X Server”,在于改善当前X Server的不足,从而取代它。现在,我们已经可以用更标准的语言来定义Wayland了,那就是:A Simple Display Server。
没错,Wayland是一个简单的“显示服务器”(Display Server),与X Window属于同一级的事物,而不是仅仅作为X Window下X Server的替代(注:X Window下分X Server和X Client)。也就是说,Wayland不仅仅是要完全取代X Window,而且它将颠覆Linux桌面上X Client/X Server的概念,以后将没有所谓的“X Client”了,而是“Wayland Client”。
更确切的说,Wayland只是一个协议(Protocol),就像X Window当前的协议——X11一样,它只定义了如何与内核通讯、如何与Client通讯,具体的策略,依然是交给开发者自己。所以Wayland依然是贯彻“提供机制,而非策略”的Unix程序。
“什么?Wayland还是Server/Client模式?”可以这么理解,但实际上与X Window的Server/Client有着本质的区别。
让我们用一张类似前文所示的图表来重新演示一下,在Wayland的框架下,窗口事件的响应是如何进行的。
在Wayland的架构图中,最显著的一些特点是:
- 它复用了所有Linux内核的图形、输入输出技术:KMS、evdev,因此已支持的驱动可以直接拿来用;
- Wayland没有传统的Server/Client的模式,取而代之的是:Compositor/Client,这不仅仅是换一个名称而已,后面会讲到具体区别;
继续阅读 >
2010年11月21日标签: Wayland,大佛Linux 分类: 大佛Linux
本人后脑勺有写突出,据说是天生反骨之相; 搞得真的一样,从离开湖南开始,已经陆陆续续换了4个东家,非技术岗位也有幸呆过一阵子; 之前心很散,得过且过, 这些日子来 开始吃老本了, 尽然一点点总结起来, 原以为这是程序员的不堪大论, 抱怨种种, 但和几个也同在coding的死guy深聊下,发现我竟然和主流程序员的思路格格不入, fuck, 背到家。。。
ok 整理罗列了下,给以后的自己看,会有什么效果, 以后不做技术, 第一职业就是去买羊肉串!
一、集权公司 个人比较lucky,每次开始找工作,不到一周,就会陆续收到offer,有些托大了,咬着舌头了, 呜呜呜.
我曾经因A公司缺少某方面的有经验人士(别被唬到,其实满大街都是,就是真的高手受不了束缚,死活不去),而被录用,当时就觉得离家比较近,就去了。 之后发现, 中型公司, 权利集中在女老板手上, 虽然女强人一个, 但是公司人才上很不协调. 很多小事也要请示,效率可见一斑。女强人比较自负,结果手下男职员都是唯唯诺诺,缺少发挥的余地。 杯具的是,带我的哥们,和我交下心, 结果离职了。。。晕。 不过这还不是我当时离开的原因,LD当时还想留在那边追我的梦姑^^^^^
这样的公司,所有的道德准则都在老板一人身上,而下方的执行结果,往往会放大原本的构思; 一有偏私,偏失严重.
二、开放、创新 某日,我被父母的刺激下,毅然放弃了追女孩的想法; 于是开始宅男生活,从事为大众不耻的程序员工作;
B公司很不错, 团队年龄相差不超过3岁,老板有容人的胸襟,技术出生, 可以说,技术团队里的人, 都是打心底佩服的; 在B公司的日子是我技术上成长最快的阶段,自由发挥的空间很大;
有利自然也有弊,运营上很多东四考经验积累起来的感觉, 然而技术气息和这种感觉天差地别, 协调得很困难; 很多技术上的革新要是没有很好的运营去支持, 难见天日; 而很好的idea, 缺少技术上靠背, 举步维艰; 开放 和 创新 确实得好好得放个天平。
三、规章束缚 这个东西,虽然大家觉得理解是相同的。 但你真的能安静坐下来和他们交交心,就会发现,每个人的天平都是向自己倾斜的; 规章是死的, 人是活得, 所以有时会演变成 第一种集权制. 有时, 也是天下太平,每个人只作自己那部分, 也就是散漫。 比如: 今天大伙儿找漏洞, 找到一个50块奖金, 于是coder纷纷吧自己的调式后门贡献给测试MM,漏洞看似少了很多,于是大家happy,唯独实际效果没达到。
四、死工作 当你在工作中获取不到满足感时, 你就开始死工作了; 这就意味着job is job, 我很奇怪,很多人已然在这个阶段,为什么还不准备自己下一份工作, 或者开始自己的事业? 最忌讳大工作量的死工作, 因为当时, 对个人的情绪容易产生恶性影响。 貌似誰都知道。
学习工作之外的知识, 不要停留在自己当前的领域, 作成极致是好, 但是能有几个极致, 看看身边当年成绩好的和坏学生如今的状况就知道: 不要仅仅专注于本职,学百家之法,行自身的良知。
END; 假如三个月后,看到此文,心境还是没有改变,准备去烤羊肉串、买红薯; 靠, 羊肉味的红薯! nnd, 貌似有些创意。。。
Mon Oct 18 04:14:17 CST 2010
漫漫长夜, 无心睡眠,心想近两年间发生的一切。恍如隔世。 前天与猴子聊天,豁然发现,由于我的离开,4个人的命运都偏离了原来的轨道, 有的影响还在继续。大伙没有怪我,反而於我鼓励。对于朋友的包容、谅解,很是欣慰,荣幸之至!
这半年对我来说比较难熬, 原来无牵无挂的passenger 多了很多包袱,有些喘不过气。。。当你认为生活风平浪静之时,忽然波涛汹涌、潜流暗涌,而你无能为力,身边却没有挚友可以倾诉,确实很难捱…
不过也确实学到很多道理:
1. 事情恶化,连他人也说你继续投入是徒劳无功时,重新评估这件事,是真无解,还是你能力不足; 大部分情况下,是你能力不足;
2. 决不企图利用朋友与你的关系,再微小也不能,你现在觉得没什么,但这会降低你的可信度,一段时间后,你仅仅是somebody;
3. 对人要真诚,学会体谅他人的难处,多从对方的观点看问题; 学着走一遍每个人的思路, 对比结果;
4. 不放弃、不抛弃 自己的幼稚、天真、矫情, 这是你唯一区别其他仓鼠的地方; 认清自我,因为你不会只走一条路;
5. 多学些与当前职业无关的东西,拓展视野只是次要,丰富你的思维,弥补你的不足,他山之石可以攻玉;
6. 尊重他人的选择, 祝福你得到幸福的朋友;
(PS:
假如小少爷真有心向佛,敬上最诚挚的祝福。将来能和得到高僧打禅机也不错,呵呵.
Edit: Mon Oct 18 03:26:19 CST 2010
平时在PHP操作HTML时间吃力不讨好的事情, 虽然有“The DOMComment class”之类的神迹,但远不如javasript操作html来得快。 所以懒人们高出一个 phpQuery, 像JQuery一样操作HTML.
<?php
include ‘phpQuery-onefile.php’;
$doc = phpQuery::newDocumentHTML($html);
echo $doc["head > title"]->text();
?>
注意: 看了源码,第二个参数可以指定编码。(utf8、gbk….) $html 必须是utf-8编码的,否则中文会出现乱码;
phpQuery: http://code.google.com/p/phpquery/
python版 pyQuery: http://pypi.python.org/pypi/pyquery
通过来源rewrite url,可以使得通过A网站,和通过B网站 过来访问内容的是不同的, 但是url还是那个; 是不是很帅!nginx轻松搞定。
if ($http_referer ~* mifunny.info){
rewrite ^/7474748\.html$ /html/ld/index.html break;
}
当别人把垃圾域名转向至你的服务器时, 如果不采取措施,那么几乎是傻等着被K。(国内机房一般都要求网站主关闭空主机头,防止未备案的域名指向过来造成麻烦。) 在Nginx的配置文件 nginx.cnf 最后加上下面代码:
server {
listen 80 default;
return 500;
}
以此类推, 禁止通过IP访问,可以写成:
server {
listen 80 default;
server_name _;
return 500;
}
自然周嘛,顾名思义,星期一是一周的第一天, 在MySQL中, 可以使用YEARWEEK函数获得:
SELECT SQL_NO_CACHE yearweek( from_unixtime( unix_timestamp(’2010-06-16 19:13:01′)-86400 ) ) AS week;
结果是 201024
PHP中就稍稍有些麻烦了:
1 <?php
2
3 $dateStr = ’2010-06-16 19:13:01‘;
4 echo getYearWeek($dateStr);
5
6 //获取自然周
7 function getYearWeek($dateStr){
8 $unixtime = strtotime($dateStr);
9 $ym = strftime(‘%Y%m‘, $unixtime);
10 $w = strftime(‘%V‘, $unixtime);
11
12 $y = substr($ym, 0, 4);
13 $m = substr($ym, 4, 2);
14 if( 6>(int)$m && 50<$w ){
15 $y = (int)$y - 1;
16 }
17
18 return $y.$w;
19 }
输出 201024 ; 如果需要计算自然周的第一天和最后一天,不妨参考taobao QA团队的文章: php 取得某个自然周的第一天和最后一天的方法
2010年06月16日标签: YEARWEEK,自然周 分类: MySQL,PHP
前段时间碰到一个很头疼的问题,就是大于12位的数字在PHP中,会自动转成科学计数法表示。 比如 1234567891234 显示为 1.23456789123E+12 , 最后只能在计算出大数之后,立即用 sprintf(‘%1.0f’, $number) 来格式化。
奇怪的是,在我的Arch Linux上却不会自动转换, 只出现在生产机上, 郁闷ing. 上网搜了下, 有不少和我遇到相同问题的:
[PHP] 大數運算問題 @ BJ の 狗窩 :: 痞客邦 PIXNET ::
PHP大整数输出成科学计数法问题
解决方法: 在PHP配置文件 php.ini 中, 有一行 precision = 14 , 一般*nix上是14,windows上是12; 不过以防万一, 以后编码 但凡遇到12位以上的数字,都用sprintf格式化.
PHP CGI 有3种形式:
- 最强悍的FPM, 功能最强大, 只要配置php-fpm.conf即可;
fpm主页: http://php-fpm.org/
- 使用 spawn-fcgi, 启动命令: env – PHP_FCGI_CHILDREN=3 PHP_FCGI_MAX_REQUESTS=1000 spawn-fcgi -a 127.0.0.1 -p 9000 -u www-data -g www-data -f php-cgi -P /var/run/spawn-fcgi.pid
使用时, 把www-data替换成自己的用户名和群组名;
参数含义如下:
-f <fcgiapp> 指定调用FastCGI的进程的执行程序位置,根据系统上所装的PHP的情况具体设置
-a <addr> 绑定到地址addr
-p <port> 绑定到端口port
-s <path> 绑定到unix socket的路径path
-C <childs> 指定产生的FastCGI的进程数,默认为5(仅用于PHP)
-P <path> 指定产生的进程的PID文件路径
-u和-g FastCGI使用什么身份(-u 用户 -g 用户组)运行,Ubuntu下可以使用www-data,其他的根据情况配置,如nobody、apache等
然后我们可以将这行代码加入到/etc/rc.local文件底部,这样系统启动的时候也可以同时启动PHP的FastCGI进程。
- 直接启动php-cgi, 使用命令: php-cgi -b 127.0.0.1:9000
不过这时php-cgi是使用当前用户身份, 执行session等相关操作会出错, 如果web用户(如ubuntu下的www-data)是可以登录的, 则使用命令: su www-data -l -c “php-cgi -b 127.0.0.1:9000″
如果www-data不能登录(bash位/bin/false), 那么直接修改用户权限,
sudo chown www-data:www-data which php-cgi
sudo chmod u+s which php-cgi
BTW: 近段时间看ZF手册,开头有这么一句: 对于只包含有 PHP 代码的文件,结束标志(”?>”)是不允许存在的,PHP自身不需要(”?>”), 这样做, 可以防止它的末尾的被意外地注入相应。 晕倒~~ 我这会儿才知道有这茬
最新评论