Tairan's Story

「知之真切笃实处即是行,行之明觉精察处即是知,知行工夫不可离。」


如何识别手机浏览器信息

想作一个网站,根据不同的访问者提供不同的显示模板,如适合手机的模板,适合PC浏览器的模板。

从哪里识别访问者的信息,以及如何识别呢?

依据 HTTP 协议,客户端浏览网页的时候会提供一些信息给服务器端。下面是PC浏览器访问时的 $_SERVER 的 dump 信息。

(array) Array
(
    [ALL_HTTP] => HTTP_CACHE_CONTROL:max-age=0
HTTP_CONNECTION:keep-alive
HTTP_CONTENT_LENGTH:0
HTTP_ACCEPT:application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
HTTP_ACCEPT_CHARSET:ISO-8859-1,utf-8;q=0.7,*;q=0.3
HTTP_ACCEPT_ENCODING:gzip,deflate,sdch
HTTP_ACCEPT_LANGUAGE:en-US,en;q=0.8
HTTP_COOKIE:__utmz=259664206.1262318873.1.1.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=51xna; __utma=259664206.724256099.1262318873.1262318873.1262318873.1
HTTP_HOST:www.51xna.com
HTTP_USER_AGENT:Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/533.2 (KHTML, like Gecko) Chrome/5.0.342.9 Safari/533.2
 
    [HTTPS] => off
    [SCRIPT_NAME] => /private/Kohana/index.php
    [HTTP_COOKIE] => __utmz=259664206.1262318873.1.1.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=51xna; __utma=259664206.724256099.1262318873.1262318873.1262318873.1
    [AUTH_PASSWORD] => 
    [AUTH_TYPE] => 
    [AUTH_USER] => 
    [CONTENT_LENGTH] => 0
    [CONTENT_TYPE] => 
    [PATH_TRANSLATED] => g:\wwwroot\51xna.com\wwwroot\mobile\index
    [QUERY_STRING] => 
    [REMOTE_ADDR] => 221.227.130.23
    [REMOTE_HOST] => 221.227.130.23
    [REMOTE_USER] => 
    [REQUEST_METHOD] => GET
    [SERVER_NAME] => www.51xna.com
    [SERVER_PORT] => 80
    [SERVER_PROTOCOL] => HTTP/1.1
    [SERVER_SOFTWARE] => Microsoft-IIS/6.0
    [APPL_MD_PATH] => /LM/w3svc/798/ROOT
    [APPL_PHYSICAL_PATH] => g:\wwwroot\51xna.com\wwwroot\
    [INSTANCE_ID] => 798
    [INSTANCE_META_PATH] => /LM/W3SVC/798
    [LOGON_USER] => 
    [REQUEST_URI] => /private/Kohana/index.php/mobile/index
    [URL] => /private/Kohana/index.php/mobile/index
    [SCRIPT_FILENAME] => g:\wwwroot\51xna.com\wwwroot\private\Kohana\index.php
    [ORIG_PATH_INFO] => /private/Kohana/index.php/mobile/index
    [PATH_INFO] => /mobile/index
    [ORIG_PATH_TRANSLATED] => g:\wwwroot\51xna.com\wwwroot\private\Kohana\index.php\mobile\index
    [DOCUMENT_ROOT] => g:\wwwroot\51xna.com\wwwroot
    [PHP_SELF] => /private/Kohana/index.php
    [HTTP_CACHE_CONTROL] => max-age=0
    [HTTP_CONNECTION] => keep-alive
    [HTTP_CONTENT_LENGTH] => 0
    [HTTP_ACCEPT] => application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
    [HTTP_ACCEPT_CHARSET] => ISO-8859-1,utf-8;q=0.7,*;q=0.3
    [HTTP_ACCEPT_ENCODING] => gzip,deflate,sdch
    [HTTP_ACCEPT_LANGUAGE] => en-US,en;q=0.8
    [HTTP_HOST] => www.51xna.com
    [HTTP_USER_AGENT] => Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/533.2 (KHTML, like Gecko) Chrome/5.0.342.9 Safari/533.2
    [REQUEST_TIME] => 1271408243
    [argv] => Array
        (
        )
 
    [argc] => 0
)

通常我们可以在HTTP_USER_AGENT中找到识别信息,其中PC浏览器的HTTP_USER_AGENT信息最全,很容易根据关键字来识别如’Chrome’, ‘Firefox’ 等,部分手机浏览器也可以可以通过 ‘Windows Mobile’, ‘Windows Phone’, ‘SymbianOS’, ‘Nokia’, ‘Opera Mobi’, ‘Android’等关键字识别,这里有一个手机HTTP_USER_AGENT识别列表http://www.zytrax.com/tech/web/mobile_ids.html。但是有些手机上的浏览器并不提供HTTP_USER_AGENT信息。

如今的智能手机大多都支持 XHTML 格式浏览,我们可以通过 HTTP_ACCEPT 来识别手机是否支持 XHTML 格式浏览。这里识别的关键字主要是 ‘application/xhtml+xml’。

另外还有一种识别方式,通过查找用户的上网方式,通常手机用户走的是 GPRS 路线,但是这中识别方式并不可靠,可以作为一种辅助识别手段。

对于只支持 WML 的手机目前我还没有解决,一些非智能手机在访问网站时会提示”不支持所访问的网站”。开始我以为是返回信息的问题,当我把返回信息严格按照WML格式输出时问题依然存在。不知道这种手机是通过什么方式访问互联网的。

为所有用户提供不同的定制服务是一件不可能的完成任务,支持大多数就好。完美主义总是很浪费时间。

最后感谢各位提供手机访问信息的童鞋们,让你们忍受在手机上输入如此之长的URL,实在辛苦!

1 Comment » | Tags:,, | Categories: Technology, 实践手札, 我的声音
基于(LFS)构建一个属于自己的Linux(一)

想挑战LFS很久了,终于从今天开始动工制作了。以前虽然没有动手开始创建LFS,但是也积累了不少的相关信息,一切都还算顺利。

今天是第一天,主要的工作是编译工具链和一些系统工具为Building the LFS System作准备。

准备HOST(宿主)系统,没有使用LFS-LiveCD, 而是在虚拟机中安装LinuxMint(没有特殊的含义),在开始之前需要在LinuxMint中安装编译LFS的相关工具。

sudo apt-get install build-essential bison

LFS 的版本为 6.5

LFS 提供了一个文件, 其中包含了构建LFS所有用到的源码下载链接 LFS-BOOK-6.5-wget-list

可以使用wget下载这些源码

wget -c -t 2 -i LFS-BOOK-6.5-wget-list -o down.log

需要注意的是,Perl-5.10.0 的路径已经被移除,取而代之的是Perl-5.10.1。采用了新的版本Perl后,原来针对5.10.0的patch就不用了。

依照LFS-BOOK的指示,编译起来还是很顺利的。如果英文不好可以对照着金步国翻译的中文版的LFS-BOOK-6.2

通常编译的步骤如下,先解压源码包,如果有patch则应用patch

patch -Np1 -i path_of_the_patch

之后就是念咒语

./configure --prefix=/tools #需要根据文档指示
make
make install

具体的编译还是应该参照文档,除非你运气真的很背,否则都会通过的。

编译是一件苦力活,根据机器的性能,也许会耗费你一天甚至更长的时间。其实也有自动化的操作,但是动手敲上一段咒语还是有很多额外的收获。

到此,编译了N个程序后准备工作就告一段落了,编译的这些程序是新世界的基础,很重要、也很费时! 接下来进入 Building the LFS System

No Comments » | Tags:,, | Categories: Technology, 实践手札, 我的声音
理解Drupal模块之Google

Google 是居家旅行、工作学习必备之搜索引擎,而且Google还可以给我们的网站带来收入。请看我细细道来:

Google的爬虫自不用说,不知道哪天就过来爬了你的网站,可这太依赖于运气,我们需要主动一点,向Google提交我们的网站信息帮助Google更好的索引我们的网站内容(?_? 咋就那么心甘情愿的交给Google呢)。同样Google为了方便我们提交资料,搞了个叫Sitemap的东西作为所有提交资料的规范格式。如此一说,我们对Drupal相关模块需求就了解了,我们需要一个能自动生成网站Sitemap的模块来供Google爬虫享用。

在Drupal模块页搜索”sitemap”, 首先映入眼帘的就是我们需要的那个啦 :-) 。下载、上传、启用模块不用罗嗦。Drupal Sitemap 模块中有5个功能,其中 Sitemap 是核心功能,必须滴!剩下的在仔细阅读说明后酌情启用!在51xna.com我启用了 XML sitemap engines 和 XML sitemap node 两个功能。这两个功能的用法还是蛮简单的,仔细阅读说明即可。

我们网站的资料都交给Google了,那么怎么知道网站都有哪些人来访问呢?这个问题Google也有解决方案,Google Analytics,顾名思义就是用来分析网站访问者的,如访问者的来源地、使用的浏览器、操作系统、访问页面、停留时间等等。

Drupal也有相关的模块来满足我们的这个需要,再次到Drupal模块页搜索“Analytics”,然后。。。(省略若干苦力活)在设置页面填上Google Analytics的帐号即可,其他的设置仔细阅读说明酌情操作。

最后,我们要从Google那里弄点米米养小站了。题外话,你该不是真的以为Google就是一个搜索引擎吧?其实Google是一广告机器,详细点说Google是一个跟广告有关的赚钱机器。Google Adsense 就是这部机器的关键部件之一。我们在Google Adsense上申请个账户,然后在自己的网站上提供广告位,然后Google利用你提供的广告位放广告,如果有人点击这些广告位上的广告,Google就按照专门的计算方式来给你分成,注意啦,分的是$美元。所以弄个Adsense的模块放在网站上是有必要的。

Drupal那里也有Google Adsense的相关模块(真的是要什么有什么:-))

Adsense模块的功能还挺多,有7个。AdSense core 这个是核心模块必须启用,Managed ads 管理广告滴,负责显示广告区块的后面详述,其他的功能带 old 的说明是不推荐使用的。

进入到 首页 › 管理 › 站点设置 › AdSense 有一个Publish ID,这是用来输入Google Adsense帐号的,必须滴!现在用 Managed ads 来管理广告啦。在 首页 › 管理 › 站点设置 › AdSense 中设置 Adsense Blocks,这里输入一个正整数,用来表示你准备在页面上放多少个广告位的,先设置一个练练手。这时在 首页 › 管理 › 站点构建 › 区块 中就可以看到一个AdSense: unconfigured 0 的待设置的区块,在配置选项中配置好相应的设置以后,把这个区块放到某个地方,保存收工!

现在网站就变成了自动提交资料到Google等搜索引擎、可分析网站访问信息、以及放置广告位收费半赚钱的机器了,那一半呢?当然是网站内容和用户来贡献的咯!

最后来句广告:tairan.net也放置了Google Adsense广告位!

EOF

2 Comments » | Tags:,,,, | Categories: Technology, 我的声音
理解Drupal模块之Book

在选择模块之前,要先弄清楚自己需要一个什么样的功能,然后再去找有没有合适的模块来实现自己所要功能。

那么我想要一个什么样的功能呢?

我需要在网站上转载一些别人的连载文章,一个系列的连载作为一篇完整的文章,系列连载的每个部分就如同书中的章节一样,有着上下文的关系。这样,从我的需求来看,一个制作书籍内容的模块就比较适合我。

需求确定了,开始找可以满足需求的模块。^_^ 可喜的是 Drupal 本身就内置了一个Book模块,在中文版里翻译为“手册”。

Book 模块使用还是比较简单的,像添加一条Story一样添加好标题和内容后,然后需要额外操作就是编辑“手册纲要”( 中文版的翻译)。在“手册纲要”部分有两个选项,一个是手册,另一个是权重。

“手册”,可以把它理解成为一本书的书名,如果书名不存在则选择“创建一个新的手册”,否则选择一个已经存在的书名。当选择创建一个新手册的时候,当前文章的标题就会成为这个手册的名称,也就是书名。

权重,就是在同级别的书本中,权重越大,那么在排序的时候就会排的越靠前。

到此,剩下的工作就是添加文章了,体力活o(∩_∩)o…哈哈!~ 大家如果想看我的劳动成果请到这里www.51XNA.com

EOF

1 Comment » | Tags: | Categories: Technology, 我的声音
近距离Drupal概览

面对国内用户,中文是必须的,因此需要安装中文语言包,目前6.x版本的中文语言包做的不错,下载后直接解压到drupal文件根目录即可。我是在使用drupal安装脚本配置之前就将中文语言包放到drupal所在的文件目录的,这样开始使用drupal安装脚本配置的时候会提示配置中文的。

Drupal 支持主题(Theme)和模块插件(Module),如此一来给网站换马甲和增加武器装备就变得容易。

如果你浏览了Drupal的主题和模块下载页面,你一定会惊讶主题和模块的种类是如此的多。挑一个喜欢的,实用的下载后分别解压到 drupal/sites/all/{theme,modules}目录下,如果这两个目录没有先创建。把主题和模块放在这里是推荐设置,顾名思义,这是对所有site生效的设置(Drupal支持同一程序下多个站点)。当然如果非要放到Drupal核心模块和主题那里也是可以的,只是不推荐而已。

在确定网站需要的功能后先到module下载页找找,实在没有的话就自己写,如果自己写的还有其他人需要的,再反馈给drupal社区,良性循环!

这是我对Drupal的第一次仔细观察的印象,之前也安装了几次,一直就没仔细瞧过,惭愧。

参考:

EOF

No Comments » | Tags: | Categories: Technology, 我的声音
Drupal

Drupal是一个出色的开源CMS系统,Whithouse也在使用。
现在把我今天配置Drupal的时候遇到一些问题以及解决办法记录在此,备查。

软件版本信息
Windows7
IIS7 + FastCGI
php-5.3.1-nts-Win32-VC9-x86
drupal-6.14

在PHP官方文档中提供了IIS7如何使用FastCGI配置PHP,需要注意的是当启用php.ini-development作为php.ini配置环境时,在CGI部分默认的是无法工作的,需要做如下修改

cgi.force_redirect = 1
cgi.nph = 0
cgi.fix_pathinfo = 1
fastcgi.impersonate = 0
fastcgi.logging = 1
cgi.rfc2616_headers = 0

在php.ini文件中需要启用的 extension

extension=php_gd2.dll    ;用来画图
extension=php_mbstring.dll   ;多语言支持
extension=php_mysql.dll    ;连接MySQL
extension=php_pdo_mysql.dll    ;使用PDO的方式连接MySQL,非Drupal必须
extension=php_sqlite3.dll    ;连接sqlite3,非Drupal必须
extension=php_xmlrpc.dll    ;xmlprc实现接口,非Drupal必须

使用PHP5.3会有遇到 Function ereg() is deprecated Error 在询问了万能的Google后并参考这篇文章Function ereg() is deprecated Error 错误对策,使用文章中提到的最后一种办法来解决这个问题:
在 drupal\includes\file.inc 第 902 行

//elseif ($depth >= $min_depth && ereg($mask, $file)) {
elseif ($depth >= $min_depth && preg_match('/'.$mask.'/', $file)) {

默认的php.ini-development还会遇到一个时区(date.timezone)的问题需要修改php.ini

[Date]
date.timezone = "Asia/Shanghai"

另外还遇到一个Drupal设置的问题,default.settings.php 文件是不能删除的,至少在安装过程中需要,因为配置程序会读这个文件。

以上就是今天安装Drupal的一些总结,接下来再仔细研究如何在Drupal上做二次的开发。我就不信开源的程序搞不出符合国情的站点。

EOF

2 Comments » | Tags:, | Categories: Technology, 我的声音
在linux上使用swap文件

作为个人用户,为swap分一个磁盘分区有些浪费,其实我们可以使用swap file来替代swap 分区,而且还可以很方便的调整swap file文件的大小。

To add a swap file:

1. Determine the size of the new swap file and multiple by 1024 to determine the block size. For example, the block size of a 64 MB swap file is 65536.

2. At a shell prompt as root, type the following command with count being equal to the desired block size:

      dd if=/dev/zero of=/swapfile bs=1024 count=65536

3. Setup the swap file with the command:

      mkswap /swapfile

4. To enable the swap file immediately but not automatically at boot time:

      swapon /swapfile

5. To enable it at boot time, edit /etc/fstab to include:

      /swapfile               swap                    swap    defaults        0 0

The next time the system boots, it will enable the new swap file.

6. After adding the new swap file and enabling it, make sure it is enabled by viewing the output of the command cat /proc/swaps or free.

参考:
RHL-8.0-Manual

EOF

No Comments » | Tags:, | Categories: Technology, 我的声音
云存储

过上云生活

如今的生活已经很难离开电脑了,上班在用电脑,下了班到家还是在用电脑,有些人的家里有不止一台电脑。如果有一些方便的工具把自己的一些不那么私密,又经常用到的资料,文件等在这些电脑中同步多好。

这里我有两个云存储要推荐给大家,其实我已经用上了。

一个是 Dropbox
选择Dropbox的原因是他已经可以跨平台,尤其是在Linux上表现不俗。而不像半死不活的liveMash那样只为Windows和Mac提供服务。新注册用户有2G的空间,完成指定的操作后,会给你加上250M,如果你还能邀请到其他人使用Dropbox的话,你的空间就可以升级到3G。如果只是放一些文字资料的话,这个容量还是够用的。

原来还比较担心Dropbox会遇到GFW的挑战,当看到Dropbox是基于Amazon S3的时候,稍微宽心了一点。

All files synced by Dropbox are encrypted and stored securely on Amazon’s Simple Storage Service (S3) over several data centers.

另一个是 SkyDrive
难得M$很慷慨的为我们提供了25G的存储空间,可M$到底是M$,在提供这么大空间后小家子气就犯了,不再提供其他的附加工具,你只能在Web上进行文件管理操作(IE当然首选)。不过可以借助第三方软件,把这个25G的网络存储空间当作本地硬盘来使用。如SkyDriveExplorerWindows Only!

这两个工具其实配合起来使用是佳选择,据我的体验来看,Dropbox的文件传输速度相对较快,适合放一些经常要用的资料。SkyDrive作为补充,放一些比较大,使用不是很频繁的资料,或者软件、AV什么的。

工具我给推荐完了,至于怎样用,发挥你的想象力吧!

最后,如果你看完这篇文章还是不知道什么是云存储,去问Google,什么是云存储

EOF

No Comments » | Tags:, | Categories: Technology, 我的声音
我的Linux-KVM



kvm

Originally uploaded by tairan.wang

用Linux当HOST有很多好处,有很多自由的虚拟机软件可以使用。现在我选择的是 Kernel-based virtual machine — KVM。

No Comments » | Tags:, | Categories: Technology, 我的声音
TMD还是Linux的桌面好用

本人过着双重生活,白天在MS讨生活,夜晚沉浸在Linux的世界中。一直以来总是认为Windows的桌面环境,尤其是WIN7要比Linux的桌面要易用一些,毕竟Windows是傻瓜化的操作。可今天我才发现Linux的桌面其实更好用。

在本人的双重世界中,Linux的运行时的硬件总是距今有3-4年之久,而Windows的硬件却是当今主流中端配置。所以在在Linux上运行桌面时总感觉没那么的流畅,没有Windows的方便。当我给Linux一个当今低端配置时,Linux世界发生了翻天覆地的变化。输入法也不迟钝了,窗口切换也流畅了,高清电影播放ok了,再跑个Virtual Box玩XP也绰绰有余了。

如此的好处只能自己亲自体验才行,如果你不相信的话,赶紧装个Linux试试!

废话少说,有图为证:
Linux Mint desktop

No Comments » | Tags:, | Categories: Technology, 我的声音


我的豆瓣

二维码快速链接
QR Code fuer diese Seite