Tairan's Story

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


我的 Kindle 3

经常阅读的人应该入手一部电子阅读器,在信息时代我们的时间都已经分割成若干的碎片,阅读的场所随时都在变化,此外出门随手带上几本书也是常有的事情,如果书籍电子化了,随身带上一个小图书馆也不是什么难事。

根据自己的喜好,我选择了 Amazon 的 Kindle 3,最近 Kindle 4 touch 也出来了,如果也需要的话可以考虑入手一部。在使用 Kindle 3 的过程中我遇到了一些事情,现在记录下来。

我买的是 Kindle 3.5.1 WIFI 广告版,主要的原因是价格,虽然 Kindle 的价格已经比较低廉,但是工资有限需要用钱的地方又很多,所以选择了既能阅读又少花钱的版本。很多人担心广告版会到处铺满广告影响使用,实际上广告只会出现在2个地方:一个是待机屏幕,另一个是 Collection 的下脚,也就是所有书籍目录的下面,不是某一本书的目录。广告的内容大都是一些打折信息,曾经有人出钱买 Kindle 上的 Mac 打折促销代码。广告画面设计的也挺精美的,待机的时候就当换桌面背景了。

刚入手 Kindle ,一个很重要的初始用途是用来看技术文档,比如 RFC, 因为贪心,把所有 RFC 的 PDF 格式文档大约 6000+ 的文件一次放进 Kindle ,悲剧发生了,Kindle 罢工,会重启,无法响应。 后来实际的实践证明,在 Kindle 里一次放入很多书籍是一个巨大的错误,Kindle 的计算能力有限,书籍多了不易查找,一次放入很多书,自己都不会怎么看,完全背离的电子书最初的用途:阅读。对于我来讲,一次在 Kindle 中保有 10-20 本已经足够。

经过这段时间的使用,发现 Kindle 3 并不适合阅读技术书籍,尤其是A4尺寸的 PDF 文件。全屏,竖着看字体太小,横着看一屏无法显示整页,字体放大到任何尺寸后也都会一屏无法显示整页,用5way键移动很痛苦。也许 Kindle Touch 出来后会改善?

柳暗花明又一村,看技术文档不方便,可看其他的人文书籍简直就是天生佳品。一本接着一本,总觉得书籍来源太少。毕竟 Kindle 3 还没有正式进入景德镇,中文书籍依赖网络上各个站点提供的盗版,那感觉就是想花钱买正版却没有货。现在也有些网友准备做正版阅读计划,可那也是才开始,还不知道能否突破景德镇的限制。我也设想做一个电子书分享平台,将目前没有版权或者是自由版权的书整理成某种中间格式,然后生成各种电子阅读器的版本。这潭水太深,这个想法也只是停留在想法这里。

在决定买 Kindle 之前也考察过盛大的锦书,从价格来讲,锦书很有竞争力。但是有两个原因让我放弃了,第一是锦书的云中书城都是所谓的网络文学,99%的作品绝对是猴子打出的汉字。即锦书无法提供有价值的正版书籍购买渠道。第二是锦书配套的环境太差,所谓的管理软件云梯,在英文 Windows 系统上到处乱吗,bug 满天飞,各种限制。花钱买电子书不是为了折腾的,既然花钱就要有好服务,比起 Amazon 的 Email deliver 和 Kindle 支持的各种文档以及配套软件差太远。

Kindle 在使用 WIFI 的时候有个问题,如果 WIFI 信道使用大于 10 的时候,它无法搜索到 WIFI 信号。Mac OS X lion 也有这个问题。路由器上的无线信道设置成自动的或者1-9都可以解决这个问题。

Kindle 还在使用中,如果遇到其他问题再继续记录。 Enjoy reading. :-)

No Comments » | Tags: | Categories: 实践手札, 我的声音
转战亚马逊EC2

EC2 Nginx PHP FastCGI MySQL WordPress

关于 Amazon EC2 的教程已经铺天盖地了,有英文也有中文。现在EC2对新注册的用户有优惠,及Micro Instance级别的会有1年的免费份额。注意只是对新注册用户,如果你已经注册了 AWS 账户,即使并没有开通任何服务也不属于新注册用户,意思就是只要你使用就没有免费的。这一点我是用了$2美金的账单换来的教训。网上也有其他同学遇到,看来不仔细阅读文档就是没文化的代表。这里是账单查询地址https://aws-portal.amazon.com/gp/aws/developer/account/index.html?ie=UTF8&action=activity-summary 一旦发现产生莫名其妙的费用,赶紧查。

我这次使用 Amazon EC2 的目的是把即将到期的博客迁移到这里,并且让手中的一些闲置域名也利用起来。其中还有一个更重要的目的就是为部署一个很重要的网站,基于Django的。

首先要做的是迁移博客。
进入 EC2 后需要安装一些软件,因为Micro Instance只能使用Amazon Linux(redhat系),所以包管理器使用的是yum。

sudo yum install mysql mysql-libs mysql-server php php-mysql spawn-fcgi nginx

启动MySQL后,并更改root用户的密码

sudo service mysqld start
/usr/bin/mysqladmin -u root -p -h localhost password 'newpassword'

配置 Nginx, 在这里我遇到了一些问题,折腾了一天才搞定。这里要十分的感谢网友 hfw_1984 的帮助。遇到的问题主要集中在fastcgi部分,如果要让Nginx支持我博客的URL格式如http://www.tairan.net/index.php/2011/03/30/follow-the-right-way/ 则必须参照以下配置:

    location ~ ^.+\.php {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;  # 这一行必须放在 SCRIPT_FILENAME 上面,否则会被覆盖。
        fastcgi_param   SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        #fastcgi_param   PATH_INFO   $fastcgi_path_info; # 这两行并不需要
        #fastcgi_param   PATH_TRANSLATED $document_root$fastcgi_path_info;
        include /etc/nginx/fastcgi_params;
        fastcgi_pass 127.0.0.1:9000;
    }

Micro Instance 默认提供的Nginx Version: 0.8.53

以上就是这两天的战果,还有其他的一些东西已经被写成自动化脚本,为方便备份数据,再次迁移、部署提供方便。

总的来说在墙内,使用EC2也不错,性价比不是最好,但是绝对值得试用。:-)

No Comments » | Tags:,, | Categories: Technology, 实践手札, 我的声音
如何识别手机浏览器信息

想作一个网站,根据不同的访问者提供不同的显示模板,如适合手机的模板,适合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, 实践手札, 我的声音


我的豆瓣

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