几个手机的性能测试。

趁着职务之便,能接触到不少手机,所以本着见啥测啥的精神,就有了此文。

目前测试软件只有 Quadrant Advanced,如果谁知道有其它测试软件,尤其针对应用程序 Load 时间的,欢迎推荐。

最后声明一下:本测试纯属个人兴趣,如果对某商品起到了促销作用纯属巧合,影响了某商品的销量也概不负责啊。

测试项目\测试机型 Sharp 8128u Nexus One HTC Incredible Samsung i9000
设备配置 CPU 高通 7x27(ARMv6) 高通 QSD8250(ARMv7) 高通 QSD8650(ARMv7) 三星 GT-I9000
主频 122.88MHZ-600MHz 245MHz-1113.6MHz 128Mhz-1228.8MHz 100MHz-1000Mhz
BogoMIPS 429.72 662.40 662.40 99.73
机身内存 407316KB 412052KB 422908KB 333416KB
屏幕分辨率 800x480 800x480 800x480 800x480
GPU Adreno ?? Adreno 200 Adreno 200 PowerVR SGX 540
OS 点心OS(2.1-update1) MIUI 1.3.18(2.2.1) HTC Sense 2.0 TouchWiz 2.1
Kernel 2.6.29-perf 2.6.35.9 2.6.32.28-ck2-CFS 2.6.29
Quadrant
Advanced
1.1.6
(2010-12-30)
总分 272 1279 1372 850
CPU (因AAC解码崩溃无法继续 ) 4050 4768 716
Memory 617 1042 829 1765
I/O 382 654 575 640
2D 100 263 276 302
3D 261 391 392 827

 

Posted by K*K Wed, 23 Mar 2011 17:44:56 +0800


春运又到了,献上更新版抓黄牛脚本。

好不容易搞定了火车票(当然不是通过酷讯或者黄牛),把去年写过的抓黄牛脚本重写了一下,提供给各位还在等待购买火车票的 Programmer 使用。说是抓黄牛,自然还包括普通转票者。原理还是通过轮询酷讯网站上的内容,但是增加了几个新特性:

  • 用 re 提供的正则表达式替换掉了 SGMLParser 提高效率
  • 可以轮询多个地址了,比如我到吉安和井冈山都可以,所以我要遍历两个地址
  • 可以将转向链接直接打印在屏幕上了
  • 提供了 Python 3 的 Package 级支持,但是因为 re 模块变更,正则表达式在 Python 3 里无法运行,暂时没心思更新了。

尽管酷讯推出了秒杀器,不过还是觉得不妥,一是没任何输出,谁知道它是否真的能秒到,二是不跨平台,在 Mac 和 Linux 上暂时无法使用。

Patches are welcome. :-)

#!/usr/bin/python
# encoding: utf-8
#
# Catch the yellow cattles script
#
# Author: Xuqing Kuang <xuqingkuang@gmail.com>
# New features:
# * Use regexp to instead of SGMLParser for performance
# * Polling multiple URL at one time.
# * Print out the redirect URL.
# * Basic packages compatible with Python 3
# TODO:
# * Use one regexp to split the href and text of link
# * Update re package usage to compatible with Python 3

import time
import os
import re

try:
    import urllib2 as urllib
except ImportError: # Python 3 compatible
    import urllib.request, urllib.error

urls = (
    "http://piao.kuxun.cn/beijing-jinggangshan/",
    "http://piao.kuxun.cn/beijing-jian/",

)

keyword = '3张'
sequence = 60

class TrainTicket(object):
    """
    Catch the yellow cattle
    """
    def __init__(self, urls, keyword, sequence = 60):
        self.urls = urls
        self.keyword = keyword
        self.sequence = sequence
        self.cache=[]
        self.html = ''
        self.links = []
        if hasattr(urllib, 'build_opener'):
            self.opener = urllib.build_opener()
        else: # Python 3 compatible
            self.opener = urllib.request.build_opener()
        self.result = []
        self.re_links = re.compile('<a.*?href=.*?<\/a>', re.I)
        # self.re_element = re.compile('', re.I) # Hardcode at following
        self.requests = []
        for url in urls:
            if hasattr(urllib, 'Request'):
                request = urllib.Request(url)
            else: # Python 3 compatible
                request = urllib.request.Request(url)

            request.add_header('User-Agent', 'Mozilla/5.0')
            self.requests.append(request)

    def get_page(self, request):
        """
        Open the page.
        """
        try:
            self.html = self.opener.open(request).read()
        except urllib.HTTPError:
            return False
        return self.html

    def get_links(self, html = ''):
        """
        Process the page, get all of links
        """
        if not html:
            html = self.html
        self.links = self.re_links.findall(html)
        return self.links

    def get_element(self, link = ''):
        """
        Process the link generated by self.get_links().
        Return list of the href and text
        """
        # FIXME: have no idea how to split the href and text with one regex
        # So use two regex for temporary solution
        href = re.findall('(?<=href=").*?(?=")', link) # Get the href attribute
        if not href:                                   # Process the no href attr
            href = ['']
        text = re.split('(<.*?>)', link)[2]            # Get the text of link a.
        href.append(text)                              # Append to the list.
        return href

    def get_ticket(self, request = None):
        """
        Generate the data structure of tickets for each URL.
        """
        if not request:
            request = self.requests[0]

        self.get_page(request)
        self.get_links()

        i = 0
        while i < len(self.links):
            link = self.get_element(self.links[i])
            if not link:
                continue
            url = link[0]
            name = link[1]
            if name and name.find(keyword) >= 0 and url not in self.cache:
                self.result.append((
                    i, name, url,
                ))
                self.cache.append(url)
            i += 1
        return self.result

    def print_tickets(self):
        """
        Process all of URLS and print out the tickets information.
        """
        while 1:
            self.result = []
            try:
                print('Begin retrive')
                for request in self.requests:
                    print('Begin scan %s' % request.get_full_url())
                    self.get_ticket(request)
                    print('Found %s urls.' % len(self.links))
                    for r in self.result:
                        print('Index: %s\nName: %s\nURL: %s\n' % (
                            r[0], r[1], r[2]
                        ))
                print('Scan finished, begin sleep %s seconds' % self.sequence)
                time.sleep(self.sequence)
            except KeyboardInterrupt:
                exit()
            except:
                raise

if __name__ == '__main__':
    tt = TrainTicket(urls, keyword, sequence)
    tt.print_tickets()

 

Posted by K*K Tue, 18 Jan 2011 22:54:18 +0800


高内聚、低耦合、SOA 和测试驱动。

软件工程:

随着软件工程的不断膨胀,功能的扩展变得愈发困难,因为增加一点点小功能而导致的 Regression 可能会越来越多,同时,因为项目越来越大,参与的人越来越多,代码的结构化、模块化便成了高质量产品非常重要的特性之一。

高内聚和低耦合,其实是好的模块化编程必须具备的两项特点,高内聚,我的理解模块独立完成特定,不重复实现其他模块已经实现过的逻辑,而低耦合,即模块与模块之间的直接连接要尽量低下,耦合性高,会导致牵一发而动全身,将导致未来的代码维护和功能扩展愈发艰难。

最简单的模块化即现在 Web 开发的 MVC 架构,数据库的建模部分由 Model 完成,页面展示由  Views 完成,而之间的协调和逻辑关系由 Controller 完成,以一个 Product 项目的创建为例,它会在创建时同时创建好另外两个字段的默认值 - Version 和 Component,当 Views 接收到用户的输入后,然后将它传递给 Controller,Controller 将会判断输入的合法性并同时创建好另外两个字段的类,再通过调用 Models 提供的方法将这三个类在数据库中持久化下来。

这需要在开发前定一套统一的 API,这样各个模块才能无障碍地随意调用。

那么这样的好处在哪里?其实是非常明显的,页面显示部分不用关注数据库会提供什么养的类型,而数据库也不用关注用户会提供什么格式的数据,都会因为中间 Controller 的调度和转化被统一起来,进而达到程序的模块化,以及开发人员的专职化。

以我自身经验为例,如果要和前端配合同时完成一套功能,我们会约定好我给他什么样的 Ajax method,参数是什么,返回的是什么样的格式,这样我们两个能够同时编写不同的代码,但到功能完成之时,将两个代码放在一起,直接就能运行起来。

SOA:

那么程序与程序之间的整合,使之同时完成一项功能如何才能做到?

传统的方法有提供 RPC 接口,轮询数据库或者文件系统,但是问题在哪里?

  • XML-RPC 同样会出现错误,而且缺乏 Error handler
  • 数据库和文件系统的轮询有很高的风险,首先轮询文件系统就以为着这个目录里的文件要小心放置了,因为不小心就会被程序轮询到,而因为轮询造成的数据库损坏的可能性更加难以纠正。
  • 很低的内聚性,很高的耦合性,为了同步两个程序间的数据,可能得克隆一份对方程序里的数据结构和逻辑方法,一旦任何一方的数据结构或逻辑改变,将导致同步失败。
  • 不实时,因为轮询总是有时间间隔的,轮询频繁会导致系统负载加重,轮询频率低了又容易等待时间过长。

那么程序之间的整合如何才能更好地做到,这就需要将 SOA 的思想引入进来了,SOA - Service Orient Architechture,面向服务的架构,程序与程序之间不再是程序,而是一个个的服务,这个服务可以通过 RPC 来实现对自身方法的调用,但是还有很重要的一点,是要将自身正在做的事情告诉别的程序。

下图是 Nitrate 项目目前的结构,其实我觉得它是模块化开发的一个典范了。

Nitrate 是标准的 MVC 架构,我来解释一下它的工作流,除了基本的 Web UI 界面和 XML-RPC 界面外,我们还提供了 Global signal processor(后简称 GSP)用于监听所有 Models 的信号,目前信号有三种 - Initial,对应于数据库的 SELECT 语句,Create 对应于数据库的 Insert 语句,Update 对应于数据库的 Update 语句,所有被注册的 Models 一旦发生以上动作将会出发对应的信号,然后 GSP 将信号推入 Plugin support(后简称PS),由它以线程方式将 Signal,Models 和触发消息的 Model Instance 交由 Plugin 处理。

这里我将 Plugin 分为了两类:

一类是 Special plugin,用于整合一些特殊的程序,这些程序不带有消息队列支持,它是以传统工具整合方式工作的,接受到信号后会根据已经定义好的参数判断信号是否符合条件,如符合则通过该 Special 程序提供的 RPC 接口将 TCMS 中的改动同步进该程序中,事实上该方法危险性较高,而且需要将对方的数据库表格和参数定义在插件里。

第二类是 Messaging queue plugin,这是我最偏好的方法,目前支持的 Messaging queue(以后简称 MQ)是 QPID,它将 Models 的 Signal 转译成 MQ 的数据格式,然后直接推入 MQ,然后别的需要 Nitrate 数据的程序可以提供第三方的一个 Sync middleware,作为两个程序间的桥梁对数据进行选择性的同步,这样的好处是逻辑不用重复实现,双方共享的数据之需要存在 Sync middleware 程序中即可,不影响双方逻辑和数据库结构。而 Nitrate 本身也提供了 TCMS Messenging listener 用于监听 MQ 内的 message,例如如果 Bugzilla 新创建了一个 Product,Nitrate 将很快便能监听到并在数据库中创建一份相同的 Product 供用户使用,全程自动化,智能化,无人干预。

“能听能说”的程序才能较好地整合到其它程序中,“听” 提供了 XML-RPC 接口,别的程序可以通过它更改 Nitrate 中的数据,“说”提供了 MQ 的支持,别的程序可以监听 Nitrate 中数据的变化,并以此为依据对自身数据进行添加、更改,而且不用存储对方数据表,不用了解对方的业务逻辑,只需要写好中间的 Sync middleware 即可,好处多多,其乐无穷。

测试驱动

在之前的 Scrum 培训总结中,我说到了 CI(Continuous Integration)是 Scrum 所要求必备的,那么为什么单元测试如此重要?

下面的图可以充分说明这点:

尽管手工测试可以降低编码时间,但这也仅仅是在项目非常非常小,而且没有后期维护成本的情况下。从上图可以看出,在第一个迭代的时候,开发如果和测试的时间是一样长,这或许可以生产出一个高质量的产品,但是到第二个迭代的时候,开发人员仅仅向软件中加入了很少的 Feature,但是测试却不能减少他们的工作量,依然要进行一遍完整的测试,而且还要检查是否有因为新加入的 Feature 导致的 Regression,到第三个迭代的时候开发的时间更加少,到第五个迭代后开发已经完全没用了,尽管测试占用的时间比例很大,但是依然无法保证测试完成,产品推到生产环境下会发现问题多多,开发人员就成了救火队员,下个迭代可能要用整个迭代的时间,去修上个迭代造成的 Bug,软件将停滞不前。

那么针对不同类型的语言和软件类型,有什么 Unit Testing 的方式呢?

这要从语言的类型和特点说起了。

* HTML,CSS - 前段,结构远远大于逻辑的语言。因为浏览器的兼容性问题,它是最难进行自动化测试的语言,但是依然是有办法的,可以使用类似 Dogtail 类的自动UI点击程序,判断 Console 中的错误输出,或者使用 W3C Validator 一类的工具,对它进行错误判断。

* Python/PHP/Java - 后端,结构和逻辑并重的语言。其实它是最好编写 Unit testing 的语言,因为它只负责一件事情:提供 API 供调用,我们只需要模拟输入,判断程序是否会出现 Error 即可,Django 提供了很好的 Unit testing 框架,可以模拟客户端的提交数据,以检测 Views 和 Controller 能否正常工作,Models 能否对数据库正常读写,或者 ForeignKey 的正确性也可以通过 UT 进行验证,Java 也提供了 JUnit 等工具。

* Javascript/其它 UI 语言 - 前端,结构和逻辑并重的语言。这是最有意思的地方,很多人说 UI 类的语言的 UT 非常难以编写,因为无法验证最终的正确性,其实仔细观察就可以看出,这类语言,其实只是调用了后端提供的 API,也就是说,对于此类语言,一检查提供给后端的 API 的参数是否正确,二检查能否将后端的返回正常生成数据结构并反应在页面上即可。前者依然可以通过检查后端的出错情况,而后者可以通过更改编码方式,将逻辑层和显示层拆分解决,例如后端返回的数据需要生成一个按钮,只需要将生成按钮的代码拆分,并通过单元测试检查按钮是否正常生成并符合条件即可,因为只要能正常生成,基本上现实在页面上不会出太大问题,这是基本功能了。

另外说一句有意思的事情,前两天听说了另一种 UT 的方式,名称叫 Monkey,写一个程序在屏幕上随机乱点,只要程序能稳定跑上几个小时就算通过,这来源于让猴子敲键盘,总有一天能敲出莎士比亚全集的传说。这也算是很有创意了,只是我觉得这不能叫 UT,可能只能叫 RT(Random Testing)了,缺点很明显,一是无法针对某个功能,二难以重现(可重现的 Bug 对开发人员很重要),三难以统计。

Posted by K*K Mon, 27 Dec 2010 01:36:18 +0800


字符串反转和判断素数的 Python 语言算法范例

第一个是反转字符串,前两种是我出来丢人的,请直接看第三种。

方法1:

取出最大长度并 -1,以此为索引,依次递减,并将结果加入数组。

def reverse(string):
    if not string:
        return string
    str_list = []
    i = len(string) - 1
    while(i >= 0):
        str_list.append(string[i])
        i -= 1
    return ''.join(str_list)

方法2:

类似 C 中的位移操作,使用一个中间变量 t 记录临时值,然后将前后为置换,时间主要花在将字符串转换成数组上,实际遍历只需要上面方法的一半,但比上面方法要多消耗一个临时变量 t 的内存。当然,如果用 C 就可以直接指向内存,这样最节省内存,但是 Python 可能没更好办法。

但因为对 str 操作会造成 TypeError,所以还需要组成一个临时数组并在最后合并。

def reverse2(string):
    if not string:
        return string
    
    idx = 0
    length = len(string) - 1
    h_length = length / 2 # Half of length
    # 'str' object does not support item assignment for Python
    # Use C to solve it will be better.
    # So we convert it to be a list from the string.
    str_list = [x for x in string]
    
    while(idx <= h_length):
        t_idx = length - idx
        # Use varible t to store the temporary string
        t = str_list[t_idx]
        # Start to move the bit
        str_list[t_idx] = str_list[idx]
        str_list[idx] = t
        idx += 1
    
    return ''.join(str_list)

方法3:

由 @Cotton 提供,直接用数组的方式,通过本用来做间隔数的段落进行反向遍历,我只能赞叹一句,Python 太强大了!

def reverse3(string):
    return string[::-1]

另一个是求素数,没想出什么比较好的算法,只能递归,但是因为除法(求余)非常缓慢,所以我对此算法非常不满。

方法1:

这里使用一个 range 直接生成一个数组,并用 for 递归,因为我觉得一次生成数组的速度应该比多次改写一个变量速度要快,但是自然,消耗内存稍大,如果对内存有要求,也可用 while 加递减代替。

def is_prime1(num):
    # Initial to presume it's a prime
    rt = True
    # It seems every number is possible to be the one, so it have to make a range.
    for i in range(2, num):
        if num % i == 0:
            rt = False
            break
    return rt

方法2:

jyf1987 提供,双数的判断一次解决(但是 3、5 的倍数如何能更快地排除呢?),剩下的是单数的递归,同时引入平方根(很好的想法,因为大于平方根后的数的计算已经没有意义,因为另一个数必然也是之前计算过的,因为 N = a*b,所以 N=M^2),降低运算量,引入 xrange 降低内存使用量,因为是原生实现,我相信应该不会比直接用 range 生成数组更慢。

from math import sqrt

def is_prime2(num):
    # Checking the Type/value
    if type(num) != int:
       raise TypeError

    if num < 2:
       raise ValueError('The number must be great than 1')

    # Inital to presume it's a prime
    rt = True
    sq_num = int(sqrt(num))

    # First we detect is it prime for 2
    if num == 2:
        return rt

    if num % 2 == 0:
        rt = False
        return rt
    
    # Now, start to detect the odd number
    # Because all of even number could division by 2, then how about 3? -_-#
    for i in xrange(3, sq_num, 2):
        if num % i == 0:
            rt = False
            break
    return rt

冰天雪地三十六度翻转跪求更好算法~嘿嘿。。。

Posted by K*K Thu, 09 Dec 2010 20:57:01 +0800


搞定梦幻手机 - Palm Pre

New palm pre

Palm Pre 是继 iPhone 之后唯一一个让我心动的手机,Android 虽然也让我感到很兴奋,但是因为它缺乏中心设计,也没有什么特别的创意,对它始终缺乏购买的欲望。

但是 Palm Pre 基于 Linux,全新的卡片式操作系统,实体键盘,手势操作,对云(主要是 Google)的全面支持,以及对苹果 iTunes 的支持,非常方便而且跨平台的 SDK,让我实在不能不趁着现在低价(2000+)赶紧入手一台。

大概就是这样了,办下天翼手机卡,找人去电信机房查号,刷 1.0.3 激活手机并写入 MEID/ESN,升级 1.1 写入 AKEY/HOME SID/NID 搞定童话,写入 AN/AAA 搞定 EVDO。

现在有 qinray 的 1.1 ROM,刷机写号更方便了,而且不用担心激活的问题了,但是写入 MEID/ESN 这步最好还是在 1.0.x 里做,因为 1.1 里的地址有所变化,反正我是写入后无效,重启后会自动复原。

Treo8 是个很好的 Palm 论坛,如果有兴趣可以去看一下:http://www.treo8.com/bbs/forum-33-1.html

现在还缺好用的中文输入法,无法发中文短信,但这都不是问题,因为"LInux 无限可能"。

root@castle: /var/home/root # uname -a
Linux castle 2.6.24-palm-joplin-3430 #1 175.1.23 armv71 unknown 

Posted by K*K Thu, 20 Aug 2009 17:52:00 +0800


Opera 10 Beta 1 running on Fedora 10

Opera 10 running on Fedora 10 

刚刚试了一下 Opera 10 beta 1,深深被这个界面漂亮,性能出色的浏览器吸引了,以后它就是我的主力浏览器了。

虽然之前也用过早期版本的 Opera,但是一直觉得 Opera 的界面太过于复杂,菜单太长,而且 Javascript 解释有问题,所以一直只是装完了试试就删除了。

今天装版本 10 beta 1,菜单被极度精简化了,设置选项也简单很多,简单设置一下,字体也变得和 Firefox 一样优秀,只是虽然通过了 ACID  3 测试,但是 Javascript 在 Flickr 的的上传页面依然除了些不兼容的现象 - 选择文件对话框无法打开。

不过依然是个出色的浏览器。

关于字体的设置,其实很简单,编译一下 /usr/share/opera/defaults/font.ini,禁用掉 X  Core Fonts 支持:

; One can disable xft or core fonts if necessary
;engine:xft=blacklist
   engine:x11=blacklist

并且把对应语言的中文字体改掉,我这里是文泉驿的微米黑:

; Known fonts that solves specific problems
; family:mincho|gothic=japanese good try-first
; family:kochi*=japanese good try-first
family:WenQuanYi Micro Hei|WenQuanYi Micro Hei Mono*=chinese-s try-first
  ; family:baekmuk*=korean good try-first

OK, enjoy your opera,我要去折腾我的 ibus 光标跟随了,希望能有 sci-qtimm 之类的 ibus 模块。

最后差点忘了要说一句:RnVja0dGV++8jOiuqeS9oOW7uuaIkOWFqOS4lueVjOacgOWkp+eahOWxgOWfn+e9kQo=

图片需要翻墙。

Posted by K*K Thu, 04 Jun 2009 06:41:33 +0800


简单办法搞定 Linux 上蓝牙和 USB 线 GPRS 拨号上网。

移动 TD-SCDMA 测试用的话费积攒到了 4000 多元了,女朋友消化得实在太慢,怎么办呢。

刚好趁着外出,把测试的 3G USIM 卡插上 Nokia E71(因为附送的熊猫山寨机太差了。。。-_-#),拿来给笔记本 GPRS 无线上网。

首先安装好 pppd 和 wvdial,把手机的 USB 连接模式改成 PC Suite,这样才能把手机当猫用,如果使用 Connect PC to Web 的话,屏幕上会出现 Nokia Connect to Internet 的盘符。

然后在 /etc/wvdial.conf 里写下如下代码,不用对 cmnet 接入点做特别设置,直接就会连接好了。

[Dialer nokia-usb]
Modem = /dev/ttyACM0
Baud = 3600000
Init1 = ATZ
Init2 = ATQ0 V1 E1 S0=0 &C1 &D2
Init3 =
Modem Type = USB Modem
Area Code =
Phone = *99#
Username = ppp
Password = ppp
Ask Password = 0
Dial Command = ATDT
Stupid Mode = 1
Compuserve = 0
Force Address =
Idle Seconds = 0
DialMessage1 =
DialMessage2 =
ISDN = 0
Auto DNS = 1
New PPPD = yes

[Dialer nokia-bluetooth]
Modem = /dev/rfcomm0
Baud = 3600000
Init1 = ATZ
Init2 = ATQ0 V1 E1 S0=0 &C1 &D2
Init3 =
Area Code =
Phone = *99#
Username = ppp
Password = ppp
Ask Password = 0
Dial Command = ATDT
Stupid Mode = 1
Compuserve = 0
Force Address =
Idle Seconds = 0
DialMessage1 =
DialMessage2 =
ISDN = 0
Auto DNS = 1
New PPPD = yes
 

写好后用 root 运行:

wvdial nokia-usb

应该就可以上网了。

如果要用蓝牙的话,需要先安装 bluez,建立 /dev/rfcomm0 设备,我是在 Fedora 10 上测试的,很奇怪改好 /etc/bluetooth/rfcomm.conf 后,重启蓝牙服务无效,所以还是手工绑定那个设备吧。

用下面命令绑定设别: 

rfcomm 0 (Bluetooth MAC Address) (Internet Dialer Channel)

如果不知道蓝牙的 MAC 地址的话,可以用下面命令进行搜索。 

hcitool scan

如果不知道 Internet Dialer Channel 的话,可以用下面命令查找:

sdptool search DUN

然后再执行上面的 rfcomm 命令,然后用下面命令拨号。

wvdial nokia-bluetooth

方法应该说比较简单了,Enjoy your wireless life 吧 :-)

Posted by K*K Sun, 03 May 2009 05:36:37 +0800


Python 技巧:@classmethod 修饰符

通常情况下,如果我们要使用一个类的方法,那我们只能将一个类实体化成一个对象,进而调用对象使用方法。

比如:

class Hello(object):
    def __init__:
        ...

    def print_hello(self):
        print "Hello"

 要用 print_hello() 就得:

hlo = Hello()
hlo.print_hello()
Hello

如果用了 @classmethod 就简单了。

Posted by K*K Fri, 06 Mar 2009 01:44:28 +0800


日版 D2C Key Wii 改版美版完美教程(持续更新)

前两天在逛 Wii 论坛上看到了目前市场上有很多韩版 Wii 改美版后进行销售的帖子,遂看到了居然有改区一说,于是乎想在自己的日版(已经加了 D2C 直读)的情况下尝试一下改区,没想到因为之前已经升级到 3.4J,降级后改版反而效果更好(Photo、Wii Shop Channel 都可以直接使用),后又去兔子那里改了下 D2C 直读的跳线,使原本只用 Starfall 的全区支持也更加完善。

现放出方法。

概况是:

  1. 通过网络升级到 3.4J
  2. 通过 这篇教程 进行降级,降级后进系统查看就应该已经是 3.2J,不过这个教程耗时稍长,但是确实完美。
  3. 使用 AnyRegion Changer 改区,并且安装 3.2U 系统。
  4. 找个 JS 帮你焊掉 D2C 芯片的 JP2 跳线(JP1 是美版,JP1 + JP2 是日版),或者先用 Starfall 顶着。
  5. 删掉 News 和 Weather 频道,并且用美版的替换(我还没做)。
  6. 用 Starfaill 开启频道全区支持并去掉光盘自动更新检查。

如果不出问题,改区之后原本系统里的 WII Shop Channel 已经是 49(美国),而且可以正常使用。

而我后来为了删帐号又改成了 1(日本),进去后也无恙,结果又改成 49 后进入报了 205958 错,改成 1 后,尝试删除帐号,输入序列号后又出现了 206651 错误,现在依然在尝试解决。所以在改区后如果 Wii Shop Channel 可以使用的话,建议不用删除帐号。

待续(晚上贴图,上传改版软件,贴具体办法)。。。

Posted by K*K Mon, 29 Dec 2008 18:24:44 +0800


Django 的 Form 真的很好用。

Django 的 Form 表单真的很好用,完全把以往繁琐的表单操作完全抽象出来,成了一个独立的组件。

该系统的最大特色就是与模板无关,表单元素完全在一个文件里就可以定义好,以后也可以随时扩充,修改,很方便。

为了使用富文本编辑器我还使用了 InPlaceEditor,之所以用它是因为它基于强大的 TinyMCE 编辑器,同时提供了很好的 Ajax 支持,为了使用它我还使用了 django-tinymce,这个东西理论上应该找不到编译好的包,可以用 easy_install 安装(在 Fedora 10 里的 python-setuptools-devel 包里),总之就是怎么方便怎么来啦。 :-)

OK, Let's get start it.

在 app 目录里建立一个 forms 的目录,touch 一个 __init__.py,然后在其中写下 newapp.py 文件,如下内容:

from django import forms
from tinymce.widgets import TinyMCE
 
TYPE_CHOICES = [
    [1, 'Desktop Computer'],
    [2, 'Laptop'],
]
 
class NewProduct(forms.Form):
    name = forms.CharField()
    type_id = forms.ChoiceField(choices=TYPE_CHOICES)
    description = forms.CharField(widget=TinyMCE(mce_attrs={})

添加 View 里某个方法(比如 index)填上:

def index(request):
    from testproject.app.forms.newapp import NewProduct
    new_form = NewProduct()
    return render_to_response('testform.html', { 'new_form' : new_form })

然后改模板,类似如下:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.01//EN">
<html lang="en">
<head>
    <title>New Product</title>
</head>
<body>
   <h1>New Product</h1>
   <form action="." method="POST">
        {{ new_form.as_table }}
     <p><input type="submit" value="Submit"></p>
    </form>
</body>
</html>

够好用吧?一个 form 定义好以后直接使用 as_table 方法就可以转换成表格。

如果需要更多自定义参数,也可以像访问数据库一样直接调用 form class 里的属性,如下:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.01//EN">
<html lang="en">
<head>
    <title>New Product</title>
</head>
<body>
   <h1>New Product</h1>
   <form action="." method="POST">
        {{ new_form.name }}
        {{ new_form.type_id }}
        {{ new_form.description }}
     <p><input type="submit" value="Submit"></p>
    </form>
</body>
</html>
 

在 Django 的官方教程里,设计一个 form class 的 ChoiceField 使用的是 Tuple,而我这里经过试验,List 也是可以的,而之所以使用 List,是因为这样可以通过数据库,向 ChoiceField 里添加数据,如:

from django import forms
from tinymce.widgets import TinyMCE
from testproject.app.models import ProductTypes
 
types = ProductTypes.objects.all()
TYPE_CHOICES = []
for type in types:
    TYPE_CHOICES.append([type.id, type.name])
 
class NewProduct(forms.Form):
    name = forms.CharField()
    type_id = forms.ChoiceField(choices=TYPE_CHOICES)
    description = forms.CharField(widget=TinyMCE(mce_attrs={})

嘿嘿,基本到此,还是比较简单的,附带一个我的 TinyMCE 的设置作为结尾好了。

from django import forms
from tinymce.widgets import TinyMCE
from testproject.app.models import ProductTypes
 
types = ProductTypes.objects.all()
TYPE_CHOICES = []
for type in types:
    TYPE_CHOICES.append([type.id, type.name])
 
class NewProduct(forms.Form):
    name = forms.CharField()
    type_id = forms.ChoiceField(choices=TYPE_CHOICES)
    description = forms.CharField(widget=TinyMCE(mce_attrs={'theme' : "advanced",
                                                            'skin' : "o2k7",
                                                            'skin_variant' : "silver",
                                                            'elements' : 'elm3',
                                                            'mode' : 'textareas',
                                                            'theme_advanced_toolbar_location' : "top",
                                                            'theme_advanced_toolbar_align' : "left",
                                                            'theme_advanced_resizing' : 'true',
                                                            'plugins' : "safari,pagebreak,style,layer,save,iespell,xhtmlxtras",
                                                            'theme_advanced_buttons1' : "fontselect,fontsizeselect,|,cut,copy,paste,pastetext,|,bullist,numlist,|,undo,redo,|,link,unlink",
                                                            'theme_advanced_buttons2' : "",
                                                            'theme_advanced_buttons3' : "",
                                                           })

不知道 Rails 或者其它 Web Framework 是否也有比较优秀的特色功能,希望也能有人能够介绍一下。

Posted by K*K Fri, 26 Dec 2008 00:44:13 +0800


一不小心,看到 Mac OS X 10.5.6 里的新东东。

今天打开 System Preference 发现 OS X 10.5.6 里多了个新的 Trackpad 选项,还有视频图解如何使用 Multi-Touch,我火星了?!

System Preferences in New Mac OS X 10.5.6

Trackpad in New Mac OS X 10.5.6

===========================================

附记:刚才在一班上看到可以在经典的铝外壳本上(最后一代非 Unibody)可以开启四指 Multi-Touch 的 kext 内核模块,

上传到了这里:http://www.box.net/shared/kp8jsregu2

经过测试,可用。

4 finger Trackpad multitouch with patched kext

苹果净干些非能力不可为而不为之的事情。 -_-#

Posted by K*K Thu, 18 Dec 2008 20:06:50 +0800


JavaScript 加密器

 给软件写个彩蛋,但是又不想随便被别人看见,于是乎给脚本加下密就成了必须的了,不是为了 Property software,而是来个 Easter egg 来取乐 :-)

找来找去,找到一个 JavaScript Compiler 还不错,经过测试可以在 Firefox 和 Safari 上正常使用(IE 就不考虑了,手头也没机器测试),普通的 Encrypt 工具可能可以支持 Safari,但是对 Firefox 的支持可真的是非常一般。

地址在:http://www.virtualpromote.com/tools/javascript-encrypt/

比如经典的 Hello World:

alert("Hello World");

被加密后就成了:

var enkripsi="cngpv'0:'00Jgnnm'02Umpnf'00'0;'1@"; teks=""; teksasli="";var panjang;panjang=enkripsi.length;for (i=0;i<panjang;i++){ teks+=String.fromCharCode(enkripsi.charCodeAt(i)^2) }teksasli=unescape(teks);document.write(teksasli);

看不懂了吧? ;-)

不过使用 JavaScript Compiler 有限制,生成的代码必须以单独的文件存放,而且文件还得写上 JavaScript 的标记段,因为其实它的原理是将加密的内容,解密后直接插入 DOM 树里形成的,如果不这样做,将会在浏览器窗口中直接看到解密后的 JavaScript  代码,从这种意义上说,它就不仅仅是 JavaScript 的 Compiler 了,HTML、CSS 一类也可以用它加密。

而且为了让加密后的代码能够更加容易地调用,我们最好还能够写成 Function 的模式。

这里是可供调用的完整的代码:

<script type="text/javascript">
function helloworld() {
    alert("Hello World");
}
</script>

加密后的代码就成了:

var enkripsi="'1Aqapkrv'02v{rg'1F'00vgzv-hctcqapkrv'00'1G'2Cdwlavkml'02jgnnmumpnf'0:'0;'02'5@'2C'02'02'02'02cngpv'0:'00Jgnnm'02Umpnf'00'0;'1@'2C'5F'2C'1A-qapkrv'1G"; teks=""; teksasli="";var panjang;panjang=enkripsi.length;for (i=0;i<panjang;i++){ teks+=String.fromCharCode(enkripsi.charCodeAt(i)^2) }teksasli=unescape(teks);document.write(teksasli);

把它单独存成一个文件(比如 foo.js),然后引用它:

<script type="text/javascript" src="/js/foo.js"></script>

以后,只要在程序中调用 helloworld 函数就可以显示 Hello World 了。 :-)

Posted by K*K Tue, 16 Dec 2008 23:02:49 +0800


用 Synergy 共享两台电脑的键盘鼠标

情况:

因为公司另有一台性能很强劲的 Linux 工作站,自己有台 mac 笔记本,在两台电脑间来回切换让人很郁闷,所以就想让一套键盘鼠标在两个系统上都能使用上,把两台电脑当成一台电脑用。

之前用过 Synergy,所以又重新打起了它的主意,唯一和以前不同的是,现在我懒了很多,都不愿意用命令行来做这种配置工作了。。。 -_-#

安装:

Mac 从 http://sourceforge.net/projects/synergykm 上下载 SynergyKM,并且安装,会在 System Preferences 里增加 SynergyKM 一项。

Fedora 9 用 yum install quicksynergy synergy 来安装 Synergy 程序,然后会在 GNOME 菜单下的 internet 项下增加 QuickSynergy 一项。

配置:

我这里是把 Fedora 工作站当成服务器,共享它的键盘鼠标,而我的笔记本放在工作站的左边,所以在 QuickSynergy 的 Share 标签页左边写上 Macbook Pro 的主机名,然后点击 Execute。

如图:

Quick Synergy for Fedora

然后在 Mac OS X 的 System Preferences 里启动 SynergyKM,选择 Connect to shared keyboard and mouse,然后在 Client Configuration 里写上服务器的主机名或者 IP 地址,点上  Apply Now,然后再回到 General 标签页里,点击 Turn Synergy On,如果下面的 Status 显示了 Connected 则连接成功。

如图:

SynergyKM for Mac OS X

好了,现在可以试试把台式机的鼠标指针“跨过”屏幕左边,直接挪到左边的 Mac 上进行操作了。

不仅如此,Synergy 还能在两台电脑间共享剪贴板,真正是把两台电脑当成一台用。

不过好像有点 Bug,在 Fedora 机器上开着一个菜单的时候,鼠标是被局限在 Fedora 的机器上的。

Posted by K*K Wed, 19 Nov 2008 21:13:45 +0800


在博客上加上 Fedora 10 发布计时器

 Fedora Project 提供了 Fedora 10 的发布倒计时器,只要在自己的博客边栏里加上下面的 HTML 代码,效果看我的博客旁边。

  1. <script id="fedora-banner" type="text/javascript"
  2. src="http://fedoraproject.org/static/js/release-counter-ext.js?
  3. lang=en_US"></script>

Posted by K*K Sun, 09 Nov 2008 01:33:10 +0800


scribes 编辑器,不错,不错

自定义了很多 HTML 标签,总算用起来比较顺手了。

稍后把 javascript、python 和 css 的 templates 都完善一下,就发上来。

最好用这个地址看:

http://www.youtube.com/watch?v=0IbUjO3J64c&fmt=18

Posted by K*K Wed, 29 Oct 2008 22:17:00 +0800


记下给 iPhone 做 ipa 和 ringtone 的方法

IPA:
  • 因为每次用 scp 把 .app 拷进 iPhone 实在是太 XX,所以还是做成 ipa,拖进 iTunes 让它自己同步的好!
  • 准备工作:
  • 首先,需要一份被破解了的 MobileInstallation, for iPhone OS 2.1 的一搜就有很多 - Google,然后用 scp 复制到 iPhone 的 /System/Library/MobileInstallation.framework 里,否则未经过 Apple 签名的程序都无法安装;
  • 找一份已经被破解的程序,比如 WeDict Pro;
  • 开始干活:
  • 再去 iTunes App Store 上找到 WeDict Pro 的页面,并且用鼠标右键点击其中的图标,选择 Copy iTunes Store URL,并且粘贴到一个文本编辑器里,比如这个:http://phobos.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=287799252&mt=8;
  • 把其中的 phobos.apple.com 替换成 phobos.apple.com.edgesuite.net,并且粘贴到浏览器地址栏中打开,可以看到乱七八糟的东西;
  • 打开源代码,并且在其中搜索“100x100-75”,然后把整个地址全部复制下来,并粘贴到浏览器地址栏里打开;
  • 这时可以看到 WeDict Pro 的图标了,然后把 100x100 换成 512x512,并重新打开,出现了超大图标;
  • 把打图标保存到电脑里,起名为 iTunesArtwork(不要扩展名,如果有必要的话,可能需要借助终端重新命名);
  • 随便找地方建个目录,叫 package,并且在 package 里再建一个目录叫 Payload(区分大小写);
  • 把刚弄的 iTunesArtwork 弄到 package 目录里,并且把权限改成 665(为什么是 665?!我也不知道),再把破解好的程序弄到 Payload 目录里;
  • 给 Payload 里的程序加上执行权限(需要 Mac OS X 或者 Linux,Windows 应该不行),比如 WeDict Pro 就是 chmod 755 Payload/WeDict\ Pro/WeDictPro
  • WeDict Pro 不用做,但别的程序可能要做的一步:用 Property List Editor(Mac OS X Only) 修改 Payload 程序里的 Info.plist,加上“SignerIdentity”段,内容是“Apple iPhone OS Application Signing”,并且保存;
  • 最后打包:
  • 到 package 目录里,用 WinRAR 把 iTunesArtwork 和 Payload 目录打进一个 .zip 文件里,或者 Mac OS X 的 Compress 2 items,Mac 上会生成一个 Archive.zip 文件
  • 把生成的 zip 文件,重新命名为一个 .ipa 文件(比如我的 WeDict Pro.ipa),把它拖进 iTunes,大功告成
Ringtong:
  • iPhone 就那么几个铃声,听多了多无聊啊,scp 拷上去的每次 iTunes 同步后都丢,怎么办,做成 iTunes 能认的不就行了
  • BTW: 现在 iTunes 可以创建铃声,不过仅限于从 iTunes Store 上购买的曲子,所以基本还是白搭
  • 首先准备好 mp3 文件,然后用 QuickTime 打开(QuickTime 需要注册一下,否则无法进行编辑),裁剪到合适的段落,不能超过 40 秒,否则能拖进 iTunes 可是无法同步
  • 然后用 Edit 菜单下的 Trim to Selection,并且导出成 AAC
  • 实际上导出是 .mov 的扩展名,把它改成 .m4r,然后拖进 iTunes 就可以了

Posted by K*K Sat, 18 Oct 2008 01:28:00 +0800


没事对三个 Web Framework 的 Mail-list 数量也做个比较

Mail-list count of Rails, Django and TurboGears

结果是:TurboGears 真的没人用了吗。。。

Posted by K*K Fri, 10 Oct 2008 18:58:00 +0800


Django 和 TurboGears ORM 性能测试完成

连续插入、查询、更改、删除 1000 个记录的测试,其实 ORM 比起在 MySQL 里直接执行真的慢多了(我的代码也得进一步优化)。。。

Django:

Django ORM performance test

TurboGears:

TurboGears ORM(SQLObject) performance test

下载在:http://www.box.net/shared/877kl03ht7

可以看出 Django 在 Insert 和 Select 动作上速度比较快,而在 Update 和 Drop 上稍慢一些。

这是因为 TurboGears SQLObject 提供了一个 get 方法可以直接获取数据库中对应 id 号的字段,而在做 DROP 操作时我使用了 clearTable 来直接清空表,而 Django 是一条条查询,一条条 delete。

总体上我还是对 Django 的性能比较满意的,这帮人在性能上的优化很 BT ...

PS: 下午给 SQLAlchemy 也做了个简单测试,还没搞明白怎么回事,执行 1000 次插入数据,结果实际只插入了一条,查询语句也有问题,不过性能已经能用”惨不忍睹“来形容了。

如下:

Insert Speed: 0.176656007767
Select Speed: 0.0367720127106
Update Speed: 0
Drop Speed: 0

Posted by K*K Fri, 10 Oct 2008 01:46:00 +0800


批量更改 mp3 id3 标签编码

不想用 id3mod,自然有自由软件的解决办法。
$ wget http://quodlibet.googlecode.com/files/mutagen-1.14.tar.gz

$ sudo easyinstall mutagen-1.14.tar.gz
Processing mutagen-1.14.tar.gz
Running mutagen-1.14/setup.py -q bdist_egg --dist-dir /tmp/easy_install-0hg6pP/mutagen-1.14/egg-dist-tmp--Dn1sG
zip_safe flag not set; analyzing archive contents...
mutagen 1.14 is already the active version in easy-install.pth
Installing moggsplit script to /usr/local/bin
Installing mutagen-inspect script to /usr/local/bin
Installing mutagen-pony script to /usr/local/bin
Installing mid3iconv script to /usr/local/bin
Installing mid3v2 script to /usr/local/bin

Installed /Library/Python/2.5/site-packages/mutagen-1.14-py2.5.egg
Processing dependencies for mutagen==1.14
Finished processing dependencies for mutagen==1.14
然后切到 mp3 的目录里,比如我的“~/Desktop/周杰伦/魔杰座”,直接执行:
$ cd ~/Desktop/周杰伦/魔杰座
$ find . -name \*.mp3 -exe mid3iconv -e GBK {} \;
Updating ./01 魔杰座.mp3
Updating ./02 女儿红.mp3
Updating ./03 东方之殿.mp3
Updating ./04 红楼梦中.mp3
...
拖入 iTunes,搞定~

Posted by K*K Sun, 05 Oct 2008 07:28:00 +0800


在 Mac OS X 上为 Django 安装 MySQL-python 1.2.2

在 Mac OS X 上安装 MySQL-python 花了一点点功夫, 记一下:

先去 Sun 网站上下载最新版本的 MySQL, 再去 djangoproject.org 上下载最新版本的 Django 1.0 release, 并且正常安装.

然后用 easyinstall mysql-python, 发现无法正常安装.

查看 easyinstall 的下载路径, 用下面的命令下载并且解压缩

$ cd /tmp
$ curl -o MySQL-python-1.2.2.tar.gz http://internap.dl.sourceforge.net/sourceforge/mysql-python/MySQL-python-1.2.2.tar.gz
$ tar xvf MySQL-python-1.2.2.tar.gz
$ cd MySQL-python-1.2.2

然后修改 site.cfg, 修改下面内容:

#mysql_config = /usr/local/bin/mysql_config

改成
mysql_config = /usr/local/mysql/bin/mysql_config

否则会出现找不到 MySQL config 的问题:
...
  File "/tmp/easy_install-nHSsgl/MySQL-python-1.2.2/setup_posix.py", line 24, in mysql_config
EnvironmentError: mysql_config not found


然后修改 _mysql.c, 把第 37 到 39 行注释掉, 如下:
//#ifndef uint
//#define uint unsigned int
//#endif

否则会出现:
In file included from /usr/local/mysql/include/mysql.h:47,
                 from _mysql.c:40:
/usr/include/sys/types.h:92: error: duplicate 'unsigned'
/usr/include/sys/types.h:92: error: two or more data types in declaration specifiers
error: command 'gcc' failed with exit status 1

然后再用 python ./setup.py build 编译
$ python ./setup.py build
running build
running build_py
copying MySQLdb/release.py -> build/lib.macosx-10.5-i386-2.5/MySQLdb
running build_ext
building '_mysql' extension
gcc -fno-strict-aliasing -Wno-long-double -no-cpp-precomp -mno-fused-madd -fno-common -dynamic -DNDEBUG -g -Os -Wall -Wstrict-prototypes -DMACOSX -I/usr/include/ffi -DENABLE_DTRACE -pipe -Dversion_info=(1,2,2,'final',0) -D__version__=1.2.2 -I/usr/local/mysql/include -I/System/Library/Frameworks/Python.framework/Versions/2.5/include/python2.5 -c _mysql.c -o build/temp.macosx-10.5-i386-2.5/_mysql.o -g -Os -arch i386 -fno-common -D_P1003_1B_VISIBLE -DSIGNAL_WITH_VIO_CLOSE -DSIGNALS_DONT_BREAK_READ -DIGNORE_SIGHUP_SIGQUIT
gcc -Wl,-F. -bundle -undefined dynamic_lookup -arch i386 -arch ppc build/temp.macosx-10.5-i386-2.5/_mysql.o -L/usr/local/mysql/lib -lmysqlclient_r -lz -lm -lmygcc -o build/lib.macosx-10.5-i386-2.5/_mysql.so
ld: warning in build/temp.macosx-10.5-i386-2.5/_mysql.o, file is not of required architecture
ld: warning in /usr/local/mysql/lib/libmysqlclient_r.dylib, file is not of required architecture
ld: warning in /usr/local/mysql/lib/libmygcc.a, file is not of required architecture

然后再用 python ./setup.py install 安装
$ sudo python ./setup.py install
Password:
running install
running bdist_egg
running egg_info
writing MySQL_python.egg-info/PKG-INFO
writing top-level names to MySQL_python.egg-info/top_level.txt
writing dependency_links to MySQL_python.egg-info/dependency_links.txt
reading manifest file 'MySQL_python.egg-info/SOURCES.txt'
reading manifest template 'MANIFEST.in'
writing manifest file 'MySQL_python.egg-info/SOURCES.txt'
installing library code to build/bdist.macosx-10.5-i386/egg
running install_lib
running build_py
copying MySQLdb/release.py -> build/lib.macosx-10.5-i386-2.5/MySQLdb
running build_ext
creating build/bdist.macosx-10.5-i386
creating build/bdist.macosx-10.5-i386/egg
copying build/lib.macosx-10.5-i386-2.5/_mysql.so -> build/bdist.macosx-10.5-i386/egg
copying build/lib.macosx-10.5-i386-2.5/_mysql_exceptions.py -> build/bdist.macosx-10.5-i386/egg
creating build/bdist.macosx-10.5-i386/egg/MySQLdb
...

然后用下面的命令进行测试:
$ cd ~
$ python
Python 2.5.1 (r251:54863, Apr 15 2008, 22:57:26) 
[GCC 4.0.1 (Apple Inc. build 5465)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import MySQLdb
>>> MySQLdb.apilevel
'2.0'
>>> import django
>>> print django.VERSION
(1, 0, 'final')


如果能正常输出就没有问题了 :-)

Posted by K*K Wed, 17 Sep 2008 08:22:00 +0800


用 Wine 将 Google Chrome 运行于 Linux 之上

如图:


运行平台是 Red Flag Desktop 6.0 SP1 Update。

环境是 wine 1.1.3 带 winetricks,安装后运行

$ winetricks riched20 riched30 flash allfonts

安装控件和 Flash 插件。

然后从网上下载 Google Chrome(从前一篇日志的地址),并安装,安装时需要 root 帐户(但不推荐用 root 帐户平时使用系统),可以用 sudo 切过去然后再改变文件的所有者和路径来改回普通用户。

安装后选择不要立刻启动 Chrome,否则会崩溃。

需要编辑一下桌面上的“谷歌浏览器.desktop”文件,把 Exec 那行末尾添上:
--new-http --in-process-plugins

例如:
Exec=env WINEPREFIX="/home/xqkuang/.wine" wine "C:\\windows\\profiles\\xqkuang\\Local Settings\\Application Data\\Google\\Chrome\\Application\\chrome.exe" --new-http --in-process-plugins

然后再把 Windows 中的 simsun.ttc 和 simhei.ttf 拷贝出来,放到 ~/
.wine/dosdevices/c:/windows/Fonts 路径下,这样就可以显示中文了。

然后点击桌面上图标就可以运行了。

不过目前仍然存在一些问题:

https 协议似乎无法访问,会导致一个“错误2(net::FAILD): 未知错误”。
标签页拖出来以后是一个黑块。

不过浏览普通网页够用了,所以可以先凑合用着。

主要参考了 LinuxTOY 这篇文章

Posted by K*K Fri, 05 Sep 2008 23:07:00 +0800


自从有了 Google Chrome,可以甩掉其它 Webkit 的浏览器了。

一直就对 Mac OS X 下的 Safari 颇有好感,可惜 Windows 版的 Safari 太鸡肋。

一直用 Arora for Windows 和 Midori for Linux 代替 Safari 在其它平台上的使用,主要就是因为 Webkit 是唯一一个在百度空间上可以不使用 FCKEditor 的浏览器。

白天一直都在 Linux 上工作,晚上才回到家,把玩了一下,感觉非常不错,性能非常不错,占用率在可接受范围之内。 :-)

Chrome

下载地址在:http://cache.pack.google.com/chrome/install/149.27/chrome_installer.exe
这里还有一个有趣的漫画(由“译言”翻译):http://yeeyan.googlecode.com/files/GoogleChrome.pdf

Posted by K*K Thu, 04 Sep 2008 06:36:00 +0800


以普通用户编包

RPM:

## 建目录

$ cd ~
$ mkdir rpm
$ cd rpm
$ ls /usr/src/redflag/ | xargs mkdir -pv
mkdir: 已创建目录 “BUILD”
mkdir: 已创建目录 “RPMS”
mkdir: 已创建目录 “SOURCES”
mkdir: 已创建目录 “SPECS”
mkdir: 已创建目录 “SRPMS”
$ cd RPMS
$ ls /usr/src/redflag/RPMS | xargs mkdir -pv
mkdir: 已创建目录 “athlon”
mkdir: 已创建目录 “i386”
mkdir: 已创建目录 “i486”
mkdir: 已创建目录 “i586”
mkdir: 已创建目录 “i686”
mkdir: 已创建目录 “noarch”

## 写 rpmmacros 定义变量

echo "%_topdir $HOME/rpm" > ~/.rpmmacros

## 开始 rpm -ivh xxx.src.rpm 开始编包吧。

Portage:

写一个 Overlay ;-)

Posted by K*K Mon, 01 Sep 2008 19:18:00 +0800


PHP 页面跳转的代码

做麦当劳网站的时候写了个页面跳转的代码,足够精简,贴在这里备忘,效果如下图:

页面跳转效果


 1 $connect = mysql_pconnect($host, $username,$password);
 2 mysql_select_db("test");
 3 
 4 $start = $_GET['start'];
 5 $limit = "25";
 6 $query_all = "SELECT id FROM test WHERE disabled=0";
 7 
 8 $result_all = mysql_query($query_all);
 9 $num=mysql_numrows($result_all);
10 
11 // 设置前后页变量
12 $prve=$start-$limit;
13 $next=$start $limit;
14 
15 // 设置向前翻页的跳转
16 if ($prve >= 0) {
17  echo "<a href=test.php?start=$prve _fcksavedurl=test.php?start=$prve _fcksavedurl=test.php?start=$prve _fcksavedurl=test.php?start=$prve>上一页</a>";
18  echo "&nbsp;";
19  echo "\n";
20 }
21 
22 // 显示页码
23 if ($num > $limit) { 
24  $nextstart = 0;
25  $pstart = $start;
26  for ($page = 0; $page < ($num/$limit); $page  ) {
27   $pagedisplay = $page   1;
28   if($page != $pstart / $limit)
29    echo "<a href=\"test.php?start=$nextstart\">";
30   else
31    echo "<font color=\"black\" size=\"3\">";
32    
33   echo "[$pagedisplay]&nbsp;";
34   
35   if($page != $pstart / $limit)
36    echo "</a>";
37   else
38    echo "</font>";
39    
40   echo "\n";
41   
42   if ($page > 0 && ($page % 20) == 0) {
43    break; //退出循环
44   }
45   
46   $nextstart = $nextstart   $limit;
47  }
48 }
49 
50 // 设置向后翻页的跳转
51 if ($next < $num) { 
52  echo "&nbsp;";
53  echo "<a href=test.php?start=$next _fcksavedurl=test.php?start=$next _fcksavedurl=test.php?start=$next _fcksavedurl=test.php?start=$next>下一页</a>";
54  echo "\n";
55 }

Posted by K*K Mon, 18 Aug 2008 05:42:00 +0800


Gentoo 和 Windows 时钟同步

Windows 时钟和 Linux 时钟其实都是分为了系统时钟和硬件时钟的,硬件时钟存储于 BIOS 内部,而系统时钟存储于内核里,这两者的区别是系统时钟往往具有时区功能,而这两种操作系统对于时钟的处理方式却是不一样的,Windows 的系统时钟与硬件时钟同步,而 Linux 系统中的硬件时钟往往是格林尼治时间(GMT),而系统时钟才是真正的本地时间。

这一区别导致了在双系统的电脑中,Windows 的时钟往往比 Linux 慢 8 个小时,如果 Linux 直接设置为本地时间(localtime),运行 date 命令时又会出现 Timezone should be set, see zic manual page 的提示,其实这是有办法解决的。

  • 第一种办法是使 Windows 使用 GMT 的硬件时钟,可以将下面内容另存为注册表文件(.reg)导入,或者直接在注册表编辑器(regedit)中修改:

    Windows Registry Editor Version 5.00
    
    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation]
         "RealTimeIsUniversal"=dword:00000001
  • 第二种办法是将 Linux 使用与硬件时钟同步的系统时钟,同时设置好时区

    首先设置好本地时区

    # zic -l Asia/Shanghai

    其次设置 /etc/conf.d/hwclock(Gentoo 的 Baselayout 2 OpenRC 系统),修改其中的 clock 字段:

    clock="local"
    修改为
    clock="GMT" # 是的,没有看错,虽然注释称双系统时设置需要设置成 local,但实际上只有设置成 GMT 时 Linux 才能将硬件时钟作为系统时钟使用。

Posted by K*K Fri, 04 Jul 2008 21:55:00 +0800


介绍个不错的编辑器 - e-texteditor

换到 Windows 后一直找不到感觉良好的编辑器,从 UltraEdit 到 EmEditor,把 EmEditor 用了一段时间,可是各个编辑器都有自己的特点,始终无法感到称手。

直到碰到了 e(不是 Linux 上的 enlightenment r17),总算找回了点 mac 下 textmate 的感觉。

e_mainwindow

该编辑器几乎就是 textmate 在 windows 上的克隆,操作方式和使用方法几乎完全一样,界面也是相同的简洁,同样有着 mac 操作的优雅。

在 File 菜单中点击 Open Dir as Project 后,还可以通过 Settings 对 Project 中的文件进行过滤:

e_proejct_settings

对各种编码的支持也是非常强劲的:

e_encoding

查找和替换和 Firefox 一样位于窗口下部,而且连行为样式都完全一样,但支持正则表达式(最舒心的地方之一):

e_search

后退功能异常强劲,甚至可以分出两支来做不同版本的恢复:

e_undo

TextMate 最强劲的 Bundle 功能,E 编辑器也完全照搬过来了,甚至可以和 TextMate 共享 Bundle,直接从 TextMate 网站上下载新的 bundle 即可直接放入 e 中使用。(据说 e 的作者和 textmate 的作者是老乡 -_-#)

e_bundles

按下 CTRL ALT T 键即可唤出 Bundles 窗口:

e_bundle_item

一些小技巧:

  • e 也是支持语法补全的,只是要按下 ESC 键
  • View 菜单下的 Web Preview 对 Web 开发者调试静态页面很有用
  • 如果发现 e 不正常换行,可以在 View 菜单下的 Word Wrap 下调节

更多截图可以去:
http://flickr.com/photos/xuqingkuang/sets/72157605641477669/

下载可以去我的 Box:
http://www.box.net/shared/unhobn6gco

Posted by K*K Mon, 16 Jun 2008 23:19:00 +0800


好好吃的可乐鸡翅

今天和宝贝儿一起吃可乐鸡翅,自己动手做!Yeah



准备材料:
鸡翅半斤(大约六块左右)

白砂糖
姜片
大料(八角)
蒜末
百事可乐1.25升(相对于可口可乐,百事的做出来的鸡翅更好吃,多了的可以吃鸡翅时喝掉,边吃可乐鸡翅边喝百事可乐爽哉爽哉。)

做法:
准备工作 - 在鸡翅上切上两刀,便于入味,切好姜丝,蒜末,越碎越好。

倒油,用大火烧,和平时做菜时一样多即可,因为后面还要倒可乐,所以不要多放油。

快加至热时撒一点点糖,因为可乐里已经有糖了所以只要放小小半勺即可

油热后关中火,放鸡翅,爆炒,炒至表皮有一点点黄,千万不要炒焦,发现有点粘锅立刻提锅。

炒黄后倒可乐和大料、姜丝、蒜末用中火炖,可乐淹过鸡翅即可,炖大约20分钟,等可乐快要熬干时出锅即可!

头一次做,好吃好吃~

Posted by K*K Sun, 15 Jun 2008 07:53:00 +0800


Everes 0.5 for Loongson(beta1) 五一发布

做了半年了,总算出来了。

http://www.linux-ren.org

Posted by K*K Thu, 01 May 2008 06:53:00 +0800


nbench 测试帖又加了两台机器的记录

今天对我新买的 Macbook 063 和龙芯盒子目前在做的 64 bits 版本的 everest 做了下 nbench 的性能测试。

所有测试结果放在: 这里

测试平台 发行版 整数 浮点 内存
Macbook 063(注5) Mac OS X 10.5.1 (leopard) 13.635 24.792 21.704
龙梦盒子 Everest 0.5(64bits) 3.183 4.754 2.728

Posted by K*K Thu, 27 Dec 2007 22:26:00 +0800


从 Blogger 迁移到 Hi Baidu

原来用朋友的 ftp 上传空间已经到期了,而 blogspot 也被封了,只好再一次搬家。

测试了很多 BSP,最后还是感觉 Hi Baidu 的速度最快,界面也最为简洁,遂决定选它。

与当初预想的不同的是,当初看上 blogger 主要还是因为支持其 API 的 BSP 较多,可这一次依然碰到了很大的麻烦。

首先是迁移工具。

在 Google 搜索“博客搬家”,出现了一排的工具,搜出来的“博客联盟中也有提到”: 首先是 Blog Mover,这是个专业的博客搬家工具,支持 11 个 BSP 的导入和 9 个 BSP 的导出,但它在使用 Safari 时会报告“设置读取器失败”的错误,而使用 IE 6 时会停止在“初始化读取器”的状态下,后来才发现只有 Firefox 能够驱动它,这是我在犯了一天的错后才发现的,当然后面会继续提到它。

我尝试了 maikr博客伴侣 ,但发现其支持 Blogger 的 API,但不支持从 Blogger 的备份,遂放弃。

尝试了 “QQ 驿站”的搬家工具 但发现其只能迁移到 5ilog.com 上,而且我测试始终不能从我的 blogger 里导出,遂放弃。 blogmove.cn 不提供从 blogger 迁移,遂放弃。

blogmover 的帮助里看到了一个叫“博客蓝”的地址,支持博客导入,但是好像要从博客蓝导出需要支持其扩展的 XMLRPC API,而且我实在没找到有导出的地方,遂再一次放弃。

后来下午看见 Firefox 3 Beta 2 出来了,down 下一个来看看效果如何,首先想到的就是,用它来测试一下 Blog Mover,果不其然,能很好地支持 Blog Mover 的 JavaScript(看来确实还是有些网站是 Firefox Only 啊),

Picture 3

然后直接导入 Hi Baidu,可是却报错了。

Picture 4

这是怎么回事?

测试了一下,以登录状态直接在地址栏访问 http://hi.baidu.com/xuqingkuang/creat/blog/,会提示该博客尚未保存,但依然可以回到编写页面。

但在 Blog Mover 里写入一次以后再访问,就出现了刚才的错误,回到首页时,已经是登出状态。


Picture 5

可能是因为 Blog Mover 写入时没有使用 Hi Baidu 的 Cookies,导致了这个问题。

于是开始了曲线救国策略。

目前 Hi Baidu 支持新浪博客和 MSN Live Spaces 的搬家,这个工具在 http://hi.baidu.com/sys/bmove/ 也是没有出现在百度空间上,搜索得来的。

想到新浪博客在国内速度还算不错,遂写入进它吧,Blog Mover 不用关闭,直接往新浪博客里写入,没过一会儿,88 篇博客便已经写入了,然后再百度搬家,等了不到一个小时,搬完之后,咦。。。日期怎么全部丢了,都成了 12 月 21 日的了。。。。

去新浪看了下它的博客,原来它只支持修改发布时间,不支持修改发布日期的。 -__-# ...

看来可能不是 Blog Mover 的问题,那么试试 MSN Live Spaces? 好,写入,“邦”一声,“org.apache.xmlrpc.XmlRpcException: Access Denied”,这个错误,Google 一下,搜到了“这个”。 好,先给自己的 Live Spaces 加上自定义域名。 然后确认权限是开放给所有人的。

Picture 6

然后修改 E-mail publishing,按照帮助中的说明开启 E-mail publishing 并设置好 Secret word。

Picture 7

然后把刚才的自定义域名作为用户名,Secret word 作为密码填入 Blog Mover 中,写入,总算正常写入了 :) 然后再在 Hi Baidu 中再一次搬家。

总算全部导入进来了,只是评论丢了,介于 Hi Baidu 也无法选择评论日期,以及评论人,或者使用匿名评论,所以只好将以前的评论放弃了。

另外说一点:Live Spaces 在全部 Clear 以后,再一次创建时,左边的博客栏会只留下当前月份,我这里就是 December, 2007,但 Blog 本身的日期是正确的。

Picture 8

另外也给 Hi Baidu 提四点意见:

一是取消掉五次搬家限制,因为搬家并不容易,我这次就已经消耗掉了两次机会。

二是可能的话加入博客蓝的 XML RPC API 支持,虽然目前 Hi Baidu 已经支持了新浪和 MSN Spaces,这两个使用人群最大的 BSP,但是依然有很多其它 BSP 用户同样希望能够使用上 Hi Baidu 高效、快速的服务,如果百度自身不希望去花太大人力物力来支持其它 BSP 的话,那仅仅支持博客蓝就已经可以支持其它 44 个 BSP 的搬家,那类似与 Apple 在 iChat 中加入 Jabber 一样,无疑是个英明的决定。

三是希望能提供更好的 XML RPC 接口,与 Wordpress、Blogger 等大型 Blog 工具保持兼容,以更好支持本地应用。

四是能够更好地支持非 IE 和 Firefox 的浏览器,当然目前绝大多数功能对 Safari 支持得已经非常好,只是编辑框实在太“扁”了,而且在编辑框里必须手写 HTML,否则会把回车符丢掉,而且在编辑页面里添加新的分类也无法生效。希望能够自动识别一下浏览器并做出决定。

Posted by K*K Sun, 23 Dec 2007 05:40:00 +0800


去掉了引用图片的 farm1

据称把 flickr 引用图片 URL 里的开头的 farm1. 去掉就可以使图片显示出来。

这么做了一下,果然如此。

看样子 G F W 封掉的只是 fam1 和 fam2。

Posted by K*K Thu, 21 Jun 2007 12:20:00 +0800


访问 Flickr

本月 8 日,全球最大在线图片供应网站 Flickr.com 出现“访问故障”,不少国内 Flickr 用户对此表示愤慨,Flickr Pro 付费用户也无法享受到应有的服务。

根据调查,flickr 中的图片服务器 http://farm1.static.flickr.com、http://farm2.static.flickr.com 均遇到“访问故障”问题,具体现象为页面可以打开,图片无法显示。

这里介绍两种访问 Flickr 的方法,一种是安装由一位同病相怜的伊朗人 Hamed Saber 所写的 Firefox 插件 Access Flickr!

安装后,不会出现任何菜单或者按钮,但在访问 Flickr 时会自动选择到正确的地址。

另一种是可以在 hosts 文件里加上如下两行:

68.142.232.116 farm1.static.flickr.com
69.147.90.156 farm2.static.flickr.com

Windows 版的 hosts 文件一般位于 “C:\WINDOWS\system32\drivers\etc”。
Linux 的 hosts 文件位于 “/etc”。

Mac 暂时除了安装 Access Flickr! 或者带套上网(tor)以外暂时没有其它好办法。

Posted by K*K Sun, 17 Jun 2007 12:42:00 +0800


A distribution system design

How do you wonder when you have more than two computers?

I have a workstation and a laptop, the workstation built-in the newest Core 2 Duo 2.4G with great performance, and the laptop is a Apple Powerbook 1.67.

Both system running on a Gentoo Linux, I shared resources between them.

/* Waiting for continue */

A distribution system design

Posted by K*K Fri, 12 Jan 2007 11:12:00 +0800


Optimization DRI for double performance

X have some options for better work, most time X just use the universality options for run on most computer.
But you can tweak them. With the best result, you will get the double performance.

My system is Gentoo 2006.1 with X.org Server 1.1.1-r3 and xf86-video-ati 6.6.3 with DRI(Direct Render Interface), also I have the beryl 0.1.4 and AIXGL for the 3D desktop test.
Hardware is Powerbook pre-High definition, G4 1.67 and ATI 9700 with 128M.

Let's see the default Display adapter configuration.

Section "Device"
Identifier "Card0"
Driver "ati"
VendorName "ATI Technologies Inc"
BoardName "RV350 [Mobility Radeon 9600 M10]"
EndSection


The frames per seconds benchmark with glxgear looks like below.

2007-01-09-114743_663x354_scrot

Add some options in this device section for tweak.

Option "AGPMode" "4"
Option "UseFBDev" "false"
Option "AGPFastWrite" "true"
Option "EnablePageFlip" "true"
Option "DynamicClocks" "true"
Option "RenderAccel" "true"


Let's bechmark and see it again.

2007-01-09-114539_665x354_scrot

Wow. double performance !

How about these options works in the full hardware acceleration berly ?

2007-01-09-115107_669x363_scrot

Oh, it back to half and unstable. But I think it's the free ati driver's problem.
I feel Intel's GMA series open source driver is much better and stable than it, I will also test it if I have time.

OK, What's these options and value means ?

Option "AGPMode" "4"
AGPMode define the bandwidth of the AGP bus, the 4 means 4 times than the default AGP bus bandwidth, the defualt AGP running on 66Mhz with 266MB/s bandwidth, and Xorg will auto decide in 1X in default, you can tweak this option for more bandwith, the highest value of this option is 8 but it's need you conform your hardware support it.

Option "UseFBDev" "false"
It's a IMPORTANT option.
Most display adapter support and universal driver mode called framebuffer. It create a spool in memery and map it to the screen pixel, it's a FB device. Xorg write data into this spool, and the the driver read from this spool and write the data to the screen. it's not fully optimized.
ATI driver support a DMA(Direct Memery Access) mode, Xorg can write the data into the memory of the display adapter, it means Xorg can write to screen skip the memory spool of the FB device.

Option "AGPFastWrite" "true"
Fast write option looks like FBDev, I't also a memery access mode of display adapter.
It's skip memory access and write data to display adapter directly.

Option "EnablePageFlip" "true"
Enable Page Flip will increases performance, it tweak the memory access mode.
This option will be disabled if EAX architecture is in used.

Option "DynamicClocks" "true"
DynamicClock is "Intel SpeedStep" technology for display chips. it adjust the performance of display adapter only for save energy.

Option "RenderAccel" "true"
RenderAccel looks like it name, enable it for Render Acceleration Mode.
This option is default enabled.

Other options will increases performance more, I will do more around it and blog it more.

Posted by K*K Wed, 10 Jan 2007 03:57:00 +0800


Replace my HD of Powerbook.

I'm using a Powerbook 17" for home and working. It was bought from Oct 2005.

It built-in a Seagate 5400.2 100G hard driver.

The broken HD - Seagate 5400.2 100G

But I feel some problem in it, the program can't write file in it sometimes, and there's no any error reported, just hang hang and hang,
I think maybe there are some bad block in it.

So I bought another Hitachi 5K120 120G HD to replace it,

My new HD - Hitachi 5K120 120G

I disassembly the powerbook with THIS GUIDE.

With a lot of work, the inside show to my eye.

Memory holdLooking inside - Logic Board and other stuff.

After assembly it, I clone my operating system in old disk into the new one, and start the system normaly.

HD in Sysinfo

How about the old disk, It's not broken that unrepairable, I repartition it and only use 80G of it, I bought a Datastorage PD2500 and put old harddriver into it.
I will store my movies in it. -)

The front of Datastorage PD2500The back of Datastorage PD2500

Posted by K*K Thu, 28 Dec 2006 17:30:00 +0800


COCOTRON

Cocotron 是由 Christopher Lloyd 编写的一套,相当于 Mac OS X AppKit 和 Foundation 在其它平台上的实现,通过它使用 Objective C 编译器将能够同时在 Mac OS X/Windows/Linux 上运行。

想法很好,但是问题是,Mac OS X 的菜单位于屏幕顶端,其它平台的菜单一般在窗口的标题栏下。

我还没试,先不乱猜测。

Right here: http://www.cocotron.org
Cocotron

Posted by K*K Wed, 27 Dec 2006 18:15:00 +0800


gxemul 0.4.3 loongson patch



 1:diff -Naur gxemul-0.4.3.orig/debian/changelog gxemul-0.4.3/debian/changelog
2:--- gxemul-0.4.3.orig/debian/changelog 1970-01-01 08:00:00.000000000 0800
3: gxemul-0.4.3/debian/changelog 2006-11-09 23:41:33.000000000 0800
4:@@ -0,0 1,134 @@
5: gxemul (0.4.3-1) unstalbe; urgency=low
6:
7: * New upstream release.
8:
9: -- Liangjin Peng <penglj@lemote.com> Thu, 09 Nov 2006 15:38:20 0000
10:
11: gxemul (0.4.2-2) unstable; urgency=low
12:
13: * debian/rules: Use -O0 on m68k to avoid a gcc ICE (closes: #381039).
14:
15: -- G ran Weinholt <weinholt@debian.org> Sat, 26 Aug 2006 20:41:20 0200

......

Download from my box: http://www.box.net/public/db9dx205gq in /Patches/gxemul/ directory.

The orignal gxemul emulator source code is from http://gavare.se/gxemul/.

Posted by K*K Sat, 23 Dec 2006 07:10:00 +0800


Native GTK running on Mac OS X


Native GTK running on Mac OS X, originally uploaded by K*K.

Successful running GTK 2.11 2006/12/21 cvs version on Mac OS X, no X11, no more requirements!
Plan:
1. Try to rebuild GTK with nquartz(Quartz Native) target, hope that GTK widget will looks like Aqua Widgets.
2. Merge Mac OS X like top menu patch in this version of GTK .

I recommend you to build it with a script gtk-osx-build.sh, you can download it from: http://www.box.net/public/db9dx205gq.

Want to learn how to port GTK to Mac OS X, you can download Porting-Gtk-MacOSX.pdf guide by Anders Carlsson from my box Documents folder.

Posted by K*K Sat, 23 Dec 2006 03:01:00 +0800


个人的时代(草稿)

起这个题目,要放在以人民公社为社会单位的年代,无疑是要受点惩罚的。

但不可否认,在上一次网络泡沫消逝之后,新的一轮 Web 2.0 又很“莫名其妙”地成为了风头浪尖,与上一次因为技术的高速发展所造成狂热相比,这次由 YoutubeFlickrInstructables 等等所谓 Web 2.0 社区所带来的,是给个人提供的舞台,提供了对个人能力的充分发挥和展现的机会。

个人的能力能有多大?这对于生长在红旗下的我们来说,无疑是个 XX,就政治课本而言,其中所描述的、宣传的社会主义社会性质,是一个人人为同一个目标为努力的社会,而从实际生活而言,确实独立行动对于个人而言,也似乎是非常遥远的,我们从小便按照国家、父母所制定好的计划行动着-前者是”努力学习本领,向着社会主义进发“,后者是“努力靠上大学,混个好工作,有个好钱途”,社会上的机会是很多的,但似乎没人问过我们-以一个个人的身份,愿意将自己的能力发挥到哪里?

但就学习内容而言,缺乏团队合作的学习和考试内容,又将个人的能力完全分隔,而毫无“人人努力向一个目标”的实质,所剩下的,也仅仅是从前作为学生的我们,将自己的能力无法凝聚在一起,各自应付自己“该应付的事情”-“考试”。学校里唯一能发挥团队精神的,可能就是春游和体育了,但作为学生真正的实际利益-考试,在那里放着,这种周边的团队精神是真实的吗?。可是不幸的是,正是这种很扭曲的“个人主义”,在真正走向社会后,被社会上的社会困难逐一击破了。


个人的能里能有多大?从前作为个人无法将自己的能力完全释放,很大一个因素是生产资料,从前政治书中就有写:资本家掌握生产资料,没有生产资料的无产阶级无法生产生活资料,只有家自己作为劳动力卖给资本家。

没有 DV,没办法 Youtube;没有相机,没办法 flickr;没有胶水钳子螺丝刀,Instructables 就算了;没有电脑和网络,前面三个一起白搭。好在现在工具措手可得,虽然从前一些工具依然能够得到,可是还有一个很大的问题 - 报纸、电视、电台等传媒都被把持,做出来也没人知道。而电脑和网络的兴起,对推动个人水平的发展,才真正起到了关键作用,进而推进了社会的进步,时代的进步显而易见。


个人的能力如何发挥?
。。。。


这就是《时代周刊》2006 年年度人物:你

你的能力能有多大?这只能看你自己,舞台,已经为你准备好了。

Time - Person of this year

Posted by K*K Mon, 18 Dec 2006 13:25:00 +0800


The Loongson 2 Emulator - a patched gxemul

Posted by K*K Tue, 12 Dec 2006 20:26:00 +0800


龙梦盒子 Municator 相片

通过公司的销售部门,我们拿到龙梦盒子。

机器是由厦门设计的 Municator,在市场上售价为 149 美元。

机器的配置是:
CPU: 龙芯 2E 666Mhz
内存: 256M
硬盘: 40G 笔记本硬盘
显卡:ATI Radeon 7000
芯片组:自行研发的北桥 VIA VT686 南桥
网卡:Realtek 8139
USB: 四个 USB 2.0

该机试用性能满意,应用主要以 Linux 和开源软件为主。

简单做了个 nbench 测试:
http://www.kuangxuqing.com/2006/10/nbench.html

龙梦盒子 Municator 龙梦盒子 Municator 龙梦盒子 Municator 龙梦盒子 Municator 龙梦盒子 Municator

Posted by K*K Tue, 12 Dec 2006 14:09:00 +0800


龙芯的人来联系了


你好:
我是龙芯产业联盟的管理员 ,听说你有意做龙梦电脑的everest移植项目,非常高兴。我和龙梦的市场人员有直接的联系。我可以帮你这个忙。你要几台?请和我联系
我的QQ XXXXXXXXX MSN XXXXXXX@hotmail.com 这个星期龙梦就要选定测试的人员。请尽快和我联系。
--
龙芯产业化联盟隶属于信息产业部,依托中科院计算所。以龙芯CPU技术为龙头,以中科院计算所为依托,以国内优秀企业为骨干,联合国内的各类应用技术研究发展单位、集成单位,重点是政府、教育、军事的研、产机构及广大用户,形成国产关键技术的强大推动力、强壮的产业链。有效扩大联盟成员在产业链上不同层次的市场份额及行业用户的有效规模化应用。
联盟网站www.china-cpu.org
论坛www.china-cpu.org/bbs
官方博客http://longxin2010.blog.sohu.com/


看来有事情做了。

经过申请,移植 Everest 到 MIPS 架构上的工作就交给我了。

以后的日志将以这个工作为主。

Posted by K*K Wed, 06 Dec 2006 08:05:00 +0800


迁移到了 typo

现在已经是 typo 了,全站基于 ruby on rails。

方案是 apache scgi。

但是 scgi 依然有问题,主要出在 RoR 将 app 作为静态网页来处理,可是什么东西应该发给 scgi/Ror 当作 app 处理,什么真正的静态文件该直接交给 web server 处理,这就成了一个问题。

目前采取的方法是,将所有带有扩展名的文件(文件名中包含一个 dot)都交给 webserver 直接处理:

# matches locations with a dot following at least one more characters,
# that is, things like *,html, *.css, *.js,
# which should be delivered directly from the filesystem.

< LocationMatch \.. $ >
# don't handle those with SCGI
SCGIHandler Off
< /LocationMatch >


但是这样出现了一个问题,即:主题怎么办?
主题文件都存放在 RoR 的 themes 目录里,除非直接拷贝到 public 目录里,否则 web server 无法获取到 theme 中的 css 图片,因为它们的文件名中有一个 dot,但如果真拷贝过去,又失去了更换主题的意义。

主题可以依靠直接复制文件,订死文件路径来解决。可是自动生成的 rss,包含两个带有 dot 的文件 - atom.xml 和 feed.xml 怎么办?

目前在网上似乎没看到有真正完美的解决办法,关键问题在于 Ruby 发展了多年依然缺乏一个好的容器,和 apache 交互竟然依然使用 cgi 的方式。

已经快四点了,剩下的事情明天该继续整理。

要尝鲜总要付出点代价,像 Leopard Developer Preview 的输入法很不稳定,本文写了一次可到结尾崩溃了,才注意到 Typo 缺乏一个利用 cookies 自动保存内容的功能(Wordpress 有插件可以做到这点)。

等这事情完成,要写篇长长的教程。

如果觉得页面太过与简洁了,可以看看 mongrel 下的表现力,这需要连接 4905 端口:

http://www.kuangxuqing.com:4905/

Posted by K*K Mon, 13 Nov 2006 15:18:00 +0800


一波未平,一波又起

话说 beta.blogger.com 被封还未解决,刚发现 google pages 的服务也被保护了。

难怪 js 和 css 们怎么都一个个无法获取,页面干净得就只剩下了 li。

解决 beta blogger 找到一个办法,在 hosts 文件里加入 :

72.14.219.190 beta.blogger.com

Linux/Mac/Unix 的 hosts 文件就在 /etc 下
Windows 的在 c:\windows\system32\drivers\etc

以后每次登陆都会利用 https 连接,以绕过伟大的 G F W。

google pages 没救了,只好把静态的文件都上传到服务器上,改好 template 上的路径,发现行间距宽了,凑合着先用吧。

但是普通用户如果不改 hosts 文件,就无法回复了(火星人同志在奥地利还是比较好办的 :-p),

昨晚折腾 typo 中,使用了 apache SCGI 的方案,因为借用好朋友的服务器,不敢有大动作。
不过发生了 500 错误,再者考虑 typo 如何导入 blogger,需要摸索一下。

本机上使用 typo 倒是非常顺利,使用了 mongrel,可以看下截图,typo 可是非常漂亮的:

typo_admin

typo_contents

想用 typo 的理由:
1. 趁机学一把 ruby on rails。
2. typo 很酷!自带的 Live Search 迷死了包括小火星在内的不少人,当然还有我 :-p
3. wordpress 已经腻味了,自身功能弱,还要去找插件,麻烦。
4. 这东西就是给 safari 玩的。

不想用 typo 的理由:
1. 自己搞了套 xmlrpc,flickr 和 drivel/echo 等程序都不支持了。
2. 打算使用 sqlite,备份起来简单,可是以后数据库迁移就麻烦了,使用 mysql 的话如果空间又崩了怎么办?
3. ruby 目前依然使用 byte code,对 unicode 支持不好。
4. 在这种不成熟的东西上,碰上麻烦了怎么办?

先自己试试,如果 ok,就写一篇《如何让自己的 blog 具有可移植性》 ;-)

Posted by K*K Mon, 13 Nov 2006 07:44:00 +0800


千万不要升级到 blogger beta

blogger beta 总算能够正常使用了,昨天就看到了 blogger 管理界面上大大的邀请各位帅哥赶紧 switch 的通告。

只是因为 beta.blogger.com 被伟大的 G F W 保护了,下班前利用 tor 连上了并点击了转换。

到家时收到 email 已经转换完了。

blogger beta 的新功能暂且不提,就提提转换后的不幸。

首先是-body 后面强制加上了 blogger 的 navbar。

在以前的 blogger 里,navbar 是可以隐藏掉的,一般第三方的 template 里都有那么一行:

/************** REMOVE THIS TO UNHIDE THE BLOGGER NAVBAR ****************
**/ #b-navbar {height:0px;visibility:hidden;display:none} /**
*************************************************************************

可是现在无论你加与不加,body 属性后面都紧跟一个 navbar 的 iframe

< iframe src="http://beta.blogger.com/navbar.g?blogID=xxxxxxxx"
marginwidth="0"
marginheight="0"
id="navbar-iframe"
frameborder="0"
height="30"
scrolling="no"
width="100%">
< /iframe >
< div id="space-for-ie" >
< /div>

忍了。

更糟的是-publish 的网页里加上了几个 blogger beta 上才有的 css 和 js:

< style type="text/css" >
< br / >
@ import url("http://beta.blogger.com/css/blog_controls.css");
< br / >
@ import url("http://beta.blogger.com/dyn-css/authorization.css?blogID=xxxxxxxx");
< br / >
< /style >

< script type="text/javascript" src="http://beta.blogger.com/js/backlink.js">< /script >
< script type="text/javascript" src="http://beta.blogger.com/js/backlink_control.js">< /script >
< script type="text/javascript">
var BL_backlinkURL = "http://beta.blogger.com/dyn-js/backlink_count.js";var BL_blogId = "xxxxxxxx";
< /script >

< style type="text/css" >
@ import url(http://beta.blogger.com/css/navbar/classic.css);
div.b-mobile {display:none;}
< br />
< /style >

而 beta.blogger.com 在国内是被封掉的。现在打开网页,浏览器会上 beta.blogger.com 上请求文件,因为获取不到,只有等待超时,结果国内的朋友打开网页速度巨慢,打开以后也是没有样式的。

最要命的是-凡是 switch 到新 beta blogger 的用户都无法回到以前的 -_-#

这不是逼着我上 Typo 嘛。 -_-#

Posted by K*K Sat, 11 Nov 2006 17:05:00 +0800


Logo 改了?

左上的俩洞是什么?

燃烧的香烟太颓废了,不符合自己的风格。

改成了 XaoS 的分型,可以无限放大,无限复杂。

最早接触这东西是在 BluePoint Linux 2.0 里面,有一个程序专门用于绘制这种图形。

http://wmi.math.u-szeged.hu/~kovzol/xaos/

GNU XaoS

Posted by K*K Mon, 06 Nov 2006 08:59:00 +0800


来自 37signals 的帅哥们

37signals 这家小公司(看过这个视频后觉得这公司更小了),在去年的 Web 2.0 风潮中因为推出了 Ruby on Rails Web Framework 而一下子名声大作。

连 Apple 都打算在下一个版本的 Mac OS X Leopard 中带上 Ruby on Rails,作为在 Mac 机上的成功范例,Apple 自然少不了要为他们拍一期 Profile。

让我们也来看一看这个诞生奇迹的小公司,以及 David Heinemeier Hansson。 :-)

视频地址:http://www.apple.com/education/whymac/compsci/video.html

37signals

Posted by K*K Sun, 05 Nov 2006 07:46:00 +0800


试奏圆舞曲一首

新 MIDI 键盘绝对好用,努力靠它学习弹奏中。

下面是练习用圆舞曲一首,因无法 blogger 无法上传 mp3,遂只好用 GarageBand 生成五线谱上传。

弹得不好,懂谱子的自己看吧。 -_-#

melody

Posted by K*K Wed, 18 Oct 2006 15:35:00 +0800


利用 tc 控制出口流量。

tc 是 iproute2 中带的命令,用于控制 Linux 的网络传输流量限制。

这感觉是比 iptables 还麻烦的东西,因为公司拿了台机器在内网做下载,为了不影响普通员工上网,所以才有了这么一想法控制一把在网络中的下载。

整个公司都没人懂这玩意儿,只好自己摸索着了。 -_-#

tc 里利用 Linux 中的 QoS(Quality of service)对包进行调度,所以需要确保在内核中将 QoS 下的 Class Based Queueing (CBQ)、Token Bucket Flow、Traffic Shapers 设置为 y 或者 M。

tc 最少得有 3 条句才能达到控制流量的目的:创建队列 -> 创建子分类 -> 创建过滤器,而且还要和ip命令结果起来控制流入的接口才可以达到限制的。

理解不深,试验没有做完,以后再补充 -_-#

Posted by K*K Sun, 15 Oct 2006 13:17:00 +0800


Kernel 2.6.17 和 2.6.18 在 SATA 硬盘上的性能对比

在最新的 Linux kernel 2.6.18 changlog 中,我们可以看到大量关于 SATA 的修正和增强,那么新内核在 SATA 硬盘的传输率方面是否真的有所提高呢?这个只有测试一下才能知道。

测试平台是 DELL M1210 的小笔记本,内存 1G,硬盘是 Toshiba 2.5", 40GB, SATA, 16MB, 5400转, 9.5mm,型号为 MK4032GS 的笔记本硬盘。 -_-#

结果是:

Everest 0.2 update 1 的 2.6.17.13-36smp 的内核:

# hdparm -Tt /dev/sda

/dev/sda:
Timing cached reads: 4712 MB in 2.00 seconds = 2359.41 MB/sec
Timing buffered disk reads: 96 MB in 3.05 seconds = 31.43 MB/sec

Everest 0.2 自己编译的 2.6.18smp 内核

# hdparm -Tt /dev/sda

/dev/sda:
Timing cached reads: 4788 MB in 2.00 seconds = 2395.98 MB/sec
Timing buffered disk reads: 96 MB in 3.03 seconds = 31.68 MB/sec

这是在接上 AC 电源,重复运行三次 hdparm,让硬盘能够全速转起来得到的结果,可以看到 2.6.18 内核确实对 SATA 性能有一定提高,但是效果不明显,硬盘物理速度依然是瓶颈。

找空拿个台式机来做测试,可能拿 iozone 跑一把。

另一件有趣的事情,双核的机器在运行多线程任务,满负载的时候,两个核的占用率相加接近 100%,如果用 yes 大法跑单线程的满负载,可以看见 CPU1 为 100%,同时运行两个 yes 尚未测试。

找空做进一步测试。

Cpu0 : 76.1% us, 2.7% sy, 0.0% ni, 16.6% id, 0.0% wa, 4.7% hi, 0.0% si
Cpu1 : 13.0% us, 1.7% sy, 0.0% ni, 79.7% id, 5.0% wa, 0.0% hi, 0.7% si

Cpu0 : 47.8% us, 2.0% sy, 0.0% ni, 49.2% id, 1.0% wa, 0.0% hi, 0.0% si
Cpu1 : 48.0% us, 2.0% sy, 0.0% ni, 46.3% id, 3.7% wa, 0.0% hi, 0.0% si

补充测试,同时运行两个 yes,基本到了 200% 了 :-)

Cpu0 : 82.0% us, 18.0% sy, 0.0% ni, 0.0% id, 0.0% wa, 0.0% hi, 0.0% si
Cpu1 : 88.2% us, 9.8% sy, 0.0% ni, 2.0% id, 0.0% wa, 0.0% hi, 0.0% si

Posted by K*K Thu, 12 Oct 2006 15:55:00 +0800


不同平台的 nbench 性能测试

nbench 是个很有意思的基准性能测试工具。
能够对单颗 CPU Core 的性能进行内存、整型运算和浮点运算性能。

基准分是 AMD K6/233*, 512 KB L2-cache, gcc 2.7.2.3, libc-5.4.38

以后我如果有新机器会随意测试一下性能,并记录在这里。

当然,nbench 仅仅支持单核也是它的缺点,但该程序更多的是测试 Linux 系统本身在进行一些计算时的效率。

其主页和下载在:http://www.tux.org/~mayer/linux/bmark.html

邹鹏程也有一份相同的测试报告在:http://pczou.blogchina.com/1529012.html

测试平台 发行版 整数 浮点 内存
Macbook 063(注5) Mac OS X 10.5.1 (leopard) 13.635 24.792 21.704
PowerBook 17"(注1) Gentoo 2006.0(gcc4.1.1) 14.516 10.259 9.502
PowerBook 17"(注1) Mac OS X 10.4.9 11.931 12.749 13.649
Intel 2.4G 开发平台(注释2) Everest 0.1 16.060 30.186 18.684
Intel 2.4G 开发平台(注释2) Gentoo 18.387 16.692 21.326
Intel Core Duo*2(4Cores total) 3.2G RFDC 5.0 13.480 13.488 15.706
DELL Latitiude D820@1GHz(注释3) RFDT 5.0(2.6.17.1-7smp) 8.507 16.480 10.019
DELL Latitiude D820@1.6GHz(注释3) RFDT 5.0(2.6.17.1-7smp) 8.469 16.362 9.986
DELL Precision 690 Xeon 3.2G RFDT 5.0(2.6.17.1-7) 9.098 17.261 15.180
Red Flag Alpha 下载服务器(注释4) Red Flag Linux 2.0 for Alpha 2.322 2.847 3.247
龙梦盒子 Debian etch 3.351 2.727 2.469
龙梦盒子 Everest 0.5(64bits) 3.183 4.754 2.728
Macbook Pro(T8300) Mac OS X 10.6.0 Beta1 20.190 37.898 22.963
HP XW4600(E7200) Fedora 11 17.013 36.669 16.797
RHEL in Xen(AMD 8356) RHEL 5.3 Running in Xen 11.694 14.412 9.201

 

注:绿底为同测试最高分,红底为同测试最低分。

 

Posted by K*K Wed, 11 Oct 2006 06:56:00 +0800


靠,ISP 居然倒了。

前一个 ISP 居然在 30 号那天倒掉了,好不容易花了两天把旧 blog 倒到免费的 blogger 上来,还好现在 blogspot 解禁了,不过指不定哪天又要被封。

这次还好,刚好在上个月 26 日备份了一次,要不然肯定要哭死。

以后 blog 要留两份,blogger 这里一份,my donews 一份。

顺道清理了一下,只是日期丢了,所有的 blog 都要重新排一遍日期。

可怜的 Tony,请我吃了顿麦当劳换来的共享主机,没用到两天就给咔嚓了。

还在和以前的 ISP 交涉中,把我数据丢了的罪过,可不小。

Posted by K*K Mon, 09 Oct 2006 13:09:00 +0800


Leopard 小试(一)

Leopard - Mac OS X 10.5 安装好了 :-)

OK,它有了什么东西在上一篇 Blog 中就已经说明了。
那么让我们来首先分析一下概况,尽管上一篇中基本都说明了。

1. Native 64 bits suppport - 是的,Mac OS X 拥有原生 PPC 64 位支持,这曾经在 Panther 中作为一大特性大吹大擂过一番,这次不同的是,挟 Universal Binrary 之势,Apple 把这 Mach-0 的旧酒,用 Leopard 新装了一遍,那么,它是什么?
$ file /usr/lib/libSystem.B.dylib
/usr/lib/libSystem.B.dylib: Mach-O universal binary with 4 architectures
/usr/lib/libSystem.B.dylib (for architecture ppc): Mach-O dynamically linked shared library ppc
/usr/lib/libSystem.B.dylib (for architecture ppc64): Mach-O 64-bit dynamically linked shared library ppc64
/usr/lib/libSystem.B.dylib (for architecture i386): Mach-O dynamically linked shared library i386
/usr/lib/libSystem.B.dylib (for architecture x86_64): Mach-O 64-bit dynamically linked shared library x86_64

OK, 一目了然,使用了 Mach-0 可执行文件格式的 Darwin,能够将多种平台的二进制代码编译进一个文件中,gcc 使用了这个特性,所以有了一个 APPLE ONLY 的 -arch 参数(详见 man gcc)。

不过 Leopard 有一定好处是,Carbon 程序也能 64 bits 了。

2. Time machine - 需要下一篇细说

3. Complete package - 垄断 。。。 垄断 - 不过必须承认 Apple 官方的软件质量更高。

4. Spaces - 和 XGL 的“把桌面贴到正方体上不同”,Spaces 所做的似乎和早就就有的自由软件 Desktop manager 一样,依然是一个平面,正如名字一样,有的窗口在 No.1 Space,有的在 No.2 Space,你无法指望拖出一半的窗口出当前 Space,然后切换到另外一边相邻的Space,并看到原来拖出去的那部分。
它与 XGL 谁优谁裂,不想评论,不同人有不同喜好,Spaces 在躲避老板上还是有好处的。
Spaces 由于是 Apple 官方推出,比起 Desktop manager 上还是有优势的 - 首先是移动窗口有了 Quartz 加速,播放中的视频在很短的特效中依然继续播放,而 Desktop manager 只是一个静态的截图。但 Desktop manager 的好处是-它是自由软件,它特效更多。

5. Spotlight - Google Desktop 和 Beagle 竞相模仿的对象,失败的 WinFS 的成功反例,但新家的跨机搜索虽然有用,但对我什么吸引力,我只有一台电脑。

6. Core Animation - OS X 的出色框架再添一员,整合 Core Animation 之后的的 Mac OS X 内置大量特效,使得 ISV 开发更酷的软件提供了基础。它或许也是未来 Mac OS X 完全 3D 化的前兆。

7. Voice Over - 感觉像被完全重写了,提供了更多自定义性的设置,当然这不是我所关心的,新加了一名叫 Alex 的男音,利用标点控制语速和“感情”上的能力依然不行,但是明显这次录音比以前好很多,清晰很多。


Technorati Tags: , ,

Posted by K*K Mon, 21 Aug 2006 14:46:00 +0800


Leopard

http://www.apple.com/macosx/leopard/

1 64位原生支持,但同时亦有32位兼容
2 时光机(Time Machine),这个特性对那些没有备份习惯的用户所准备的,时光机就是一个自动备份系统,可以为您备份文档、图片、音乐、你电脑里任何可以备份的东西。而它最具特色的地方就是它备份的方式,这也是它得到这个名字的原因,它可以必免覆盖原文档。而通过日期来快速的恢复你的文档。另外它还支持第三方程序!
3 软件包,包括Boot Camp、Front Row、PhotoBooth,它们都将是Leopard的一部分
4 虚拟桌面(Space),用户可以创建多个桌面,来按排它们的工作,而不同桌面上的文档可以通过拖拉方式进行转移。
5 Spotlight,这也是tiger的特性之一,但在Leopard里它将变得更强大。现在Spotlight可以搜索其他电脑和服务器上的文件了。
6 核心动画效果(Core Animation)
7 语音识别(VoiceOver),语音更自然,听上去像真人在朗读,支持中文和日文了。
8 Mail再度改进,模版(支持Html编辑)、待办事项、邮件记事功能
9 Dashboard,各种第三方的Widgets数量已经超过2500了,我们为开发者提供了名为Dashcode的开发软件,开发一个Widget极其简单。
10 iChat,支持多帐户登录、隐身、动态图标、视频录象和分页标签对话,iChat Theater功能可以向对方播放视频流、Keynote等等。还有很多视觉特效。

Leopard将会在明年春发布。

leopard.png

Technorati Tags: ,

Posted by K*K Tue, 08 Aug 2006 20:45:00 +0800


Brian Behlendorf 造访 CSIP

抱歉这是份起草时间太长的 blog,这篇本该8月23日就发出的 blog 一直拖到今天。

Brain header

Brian Behlendorf 于8月23日下午 2:30 造访了位于羊坊店路5号博望园10号信息产业部软件与集成电路促进中心(CSIP)。
我有幸参加并将会议记录了下来。

Brian Behlendorf 回答了很多关于自由软件、关于社区、关于 Apache 的问题,都非常有意思,比如作为一名社区的管理者如何管理社区,以及如何选择一个合适的 Licences 来平衡社区的力量 - Licences 给予用户的越多,社区将做得越大。

Brian Behlendorf 还回答了为什么自由软件以及社区在亚洲地区没有欧美发达。

大致是:
一、首先是语言障碍,
二、文化-西方文化更偏向于为追求真理而争斗
三、学生的自由时间很多
四、史前时代的计算机更加接近机器的本质,能够接触到更加底层的东西。

相关链接:
http://oss.org.cn/modules/news/article.php?storyid=657
http://forum.oss.org.cn/viewtopic.php?t=3491

brain_thumb.png

会议录音位于:
ftp://www.linux-ren.org/pub/kk/resources/csipevent/Tue-Aug-22-2006-BrianBehlendorf-CSIP.amr

Technorati Tags: , , ,

Posted by K*K Sat, 29 Jul 2006 05:15:00 +0800


I translated freshy wordpress theme to Simplified Chinese

Freshy is a great wordpress with a alterability header and linkbar, pretty web browser compatible, cool interface, and the most important the theme works with the Yammyamm multi-language switcher plugin.
I am using them on my site, and they are works perfect.

The are great products made by Julien De Luca.

I had translated the theme to Simplified Chinese and share it here.

Just upack it into Freshy theme folder and add codename zh_CN, short name cn into yammyamm language list.

Download here: freshy_zh_CN.zip

Technorati Tags: , , , ,

Posted by K*K Tue, 18 Jul 2006 16:49:00 +0800


Mac OS X 和 WMV9

jserv 在十八日介绍了 Kostya Shishkov 在 FFmpeg-devel 提出的 [RFC - VC-1 I-frames decoder]。
由于以前的 win32codec 在 Mac OS X 下无法使用,所以我对此表现了很大的兴趣。

经过试验确定确实可以使用,但效率目前仍然十分低下,在我的 PB17" 上只能达到 2 frames/sec.

补丁可以从 http://jserv.sayya.org/mplayer/ffmpeg-vc1.patch.gz 下载
jserver 的 blog 在: http://blog.linux.org.tw/~jserv/archives/001726.html

实际运行效果如:

$ mplayer -vc ffwmv3 '/tmp/test (DVD 640x480 WMV9)[CRC 9FD2].avi'
MPlayer dev-SVN-r18764-4.0.1 (C) 2000-2006 MPlayer Team
AltiVec found
CPU: PowerPC

Playing /tmp/test (DVD 640x480 WMV9)[CRC 9FD2].avi.
AVI file format detected.
VIDEO: [WMV3] 640x480 24bpp 119.880 fps 1269.1 kbps (154.9 kbyte/s)
Clip info:
Software: VirtualDubMod 1.5.10.1 (build 2366/release)
SUB: Could not determine file format
Cannot load subtitles: /tmp/test (DVD 640x480 WMV9)[CRC 9FD2].txt
==========================================================================
Forced video codec: ffwmv3
Opening video decoder: [ffmpeg] FFmpeg's libavcodec codec family
[wmv3 @ 0x4f2770]This decoder is not supposed to produce picture. Dont report this as a bug!
[wmv3 @ 0x4f2770]Header: 4FF10A01
[wmv3 @ 0x4f2770]Profile 1:
frmrtq_postproc=7, bitrtq_postproc=31
LoopFilter=0, MultiRes=0, FastUVMV=0, Extended MV=0
Rangered=0, VSTransform=1, Overlap=1, SyncMarker=0
DQuant=0, Quantizer mode=0, Max B frames=0
[wmv3 @ 0x4f2770]Extra data: 16 bits left, value: 401F
Selected video codec: [ffwmv3] vfm: ffmpeg (FFmpeg M$ WMV3/WMV9)
==========================================================================
==========================================================================
Opening audio decoder: [mp3lib] MPEG layer-2, layer-3
AUDIO: 48000 Hz, 2 ch, s16be, 192.0 kbit/12.50% (ratio: 24000->192000)
Selected audio codec: [mp3] afm: mp3lib (mp3lib MPEG layer-2, layer-3)
==========================================================================
AO: [macosx] 48000Hz 2ch s16be (2 bytes per sample)
Starting playback...
[wmv3 @ 0x4f2770]I Frame: QP=3 ( 0/2)
[wmv3 @ 0x4f2770]Consumed 12055/12056 bits
VDec: vo config request - 640 x 480 (preferred colorspace: Planar YV12)
Could not find matching colorspace - retrying with -vf scale...
Opening video filter: [scale]
VDec: using Planar YV12 as output csp (no 0)
Movie-Aspect is undefined - no prescaling applied.
SwScaler: using unscaled Planar YV12 -> Packed YUY2 special converter
VO: [macosx] 640x480 => 640x480 Packed YUY2
[wmv3 @ 0x4f2770]I Frame: QP=3 ( 0/2)000 72/ 72 27% 3% 7.5% 32 0
[wmv3 @ 0x4f2770]Consumed 14381/14384 bits
[wmv3 @ 0x4f2770]P Frame: QP=3 ( 0/2)000 76/ 76 27% 4% 7.2% 35 0
Error while decoding frame!
[wmv3 @ 0x4f2770]P Frame: QP=3 ( 0/2)001 80/ 80 26% 4% 6.8% 39 0
Error while decoding frame!
[wmv3 @ 0x4f2770]I Frame: QP=3 ( 0/2)001 84/ 84 24% 3% 6.5% 41 0
[wmv3 @ 0x4f2770]Consumed 36226/36232 bits
[wmv3 @ 0x4f2770]I Frame: QP=3 ( 0/2)000 88/ 88 24% 4% 6.2% 42 0
[wmv3 @ 0x4f2770]Consumed 43567/43568 bits
[wmv3 @ 0x4f2770]P Frame: QP=3 ( 0/2)000 92/ 92 25% 4% 6.0% 43 0
Error while decoding frame!
[wmv3 @ 0x4f2770]I Frame: QP=3 ( 0/2)000 96/ 96 24% 4% 5.8% 43 0
[wmv3 @ 0x4f2770]Consumed 58828/58832 bits
[wmv3 @ 0x4f2770]P Frame: QP=3 ( 0/2)000 100/100 24% 5% 5.6% 43 0
Error while decoding frame!
[wmv3 @ 0x4f2770]I Frame: QP=3 ( 0/2)000 104/104 23% 5% 5.4% 43 0
[wmv3 @ 0x4f2770]Consumed 76199/76200 bits
[wmv3 @ 0x4f2770]P Frame: QP=3 ( 0/2)001 108/108 24% 5% 5.3% 43 0
Error while decoding frame!
[wmv3 @ 0x4f2770]P Frame: QP=3 ( 0/2)001 112/112 23% 5% 5.1% 43 0
Error while decoding frame!
[wmv3 @ 0x4f2770]P Frame: QP=3 ( 0/2)002 116/116 22% 5% 5.0% 43 0
Error while decoding frame!
[wmv3 @ 0x4f2770]P Frame: QP=3 ( 0/2)002 120/120 21% 4% 4.9% 43 0
Error while decoding frame!
[wmv3 @ 0x4f2770]P Frame: QP=3 ( 0/2)002 124/124 21% 4% 4.9% 43 0
Error while decoding frame!
===== 以下输出省略 =====


mplayer -vc help 输出如以下:

$ mplayer -vc help  | grep ffwmv
ffwmv1 ffmpeg working FFmpeg M$ WMV1/WMV7 [wmv1]
ffwmv2 ffmpeg problems FFmpeg M$ WMV2/WMV8 [wmv2]
ffwmv3 ffmpeg crashing FFmpeg M$ WMV3/WMV9 [wmv3]


Technorati Tags: , ,

Posted by K*K Wed, 21 Jun 2006 14:02:00 +0800


免费的1G网络硬盘

从 digg 上看到了免费的网络硬盘 - www.box.net
非常好用,非常简单,没有广告,免费空间仅有 1G 容量限制。
利用 WebDAV支持直接 mount(就是 iDisk 使用的传输协议,在 Windows 可以使用映射驱动器)。

Windows 的使用方法参考:http://diglog.com/view/2728

首先去 https://www.box.net/signup 注册一个账号。
注册内容非常简单,仅需要填写电子邮件和密码即可。

Box.net sign up screenshot

注册完成之后会回到登录区,输入刚才填入的用户名和密码即可,然后便进入了管理主页面,可以在这里新建目录,上传文件等等操作。

Default folder list

界面非常简单,使用了 Ajax 技术,所有操作都是即时的,每个图标右上角都有一个小向下三角,点击后会弹出菜单进行操作。
非常好的一点是可以为文件添加更加详细的 Info,还能使用 Tags,还能设置 Public 共享和 Private 共享。
唯一需要注意的是删除文件,需要在 Edit 对话框中进行。
同时在 Safari 中是不能依靠拖拽上传文件的。

前面提到 Box.net 使用了 WebDAV 技术,这样便可以向访问本地驱动器一样访问 Box.net。

在 Mac 中可以直接使用 Go(转到)菜单中的 Connect to server(连接到服务器)。
Mac OS X - Connect to server menu

在弹出的对话框中输入如下:
Connect to server

然后输入你注册的用户名和密码

Enter password

回车后就可以看见 box.net 上的文件了~

Box.net at local host

之后我们便可以像操作本机上的文件一样操作 Box.net。
除了系统自带的 Connect to server,我们还可以使用大名鼎鼎的文件传输工具 Transmit,它同样支持 WebDAV。

而在 Linux 之上,我们也可以利用 Konqueror 3 以上版本或者 GNOME 的 Connect to server,gnome-vfs 会为我们做好一切。
或者使用 DavFS,直接将 box.net 作为一个文件系统加载:http://dav.sourceforge.net/

作为一个网络硬盘最大的好处是它可以作为你的 Data storage,这样你可以申请一个免费的网络空间,然后把大东西都放在 box.net 上,然后再在网页里调用它。就像下面这样 ;-)

点击文件图标后文件会直接下载,无论什么格式都不会显示在浏览器中,也无法复制链接。
那就点击好了,然后在 Firefox/Safari 的下载管理器中复制链接,IE 用户就要比较郁闷咯 >_<

Posted by K*K Thu, 25 May 2006 14:14:00 +0800


vim 7.0 release one week ago

Actually I had build it the day after release in my mac.

This version have three new features important for me:

  • Tab support
  • Online English syntax check
  • Automatic completion for development


Here's my vim resource profile, modified based others, just unpack it and place it to $HOME.
http://www.kuangxuqing.com/wp-content/uploads/vimrc.gz

Tab support
To create a new tab just input:
: tabe
or press CTRL-N with my vim resource profile.

it will be looks like this:
New vim tab.

If you want to switch tabs, just input:
: tabn
or tabp
You also can press CTRL-/ for next tab.

Close tab just enter:
: close
or CTRL-D.

If you want to close all the tabs, or quit vim directly, just enter:
:qa (enter for Quit All)

Online English syntax check
In previous version, you also can check your spell with aspell or other programs, or other vim plugins.
But the intergration spell check is first built-in in this version.

To enable spell check. just enter:
: setlocal spell spelllang=en

You will see like below, the wrong words will be highlight by red color.

Vim spell check

If also can select other languages if your vim release words database, you can check it in /usr/share/vim/vim70/spell/ directory.

Automatic completion for development
With this feature, vim goes to be a project center from a normal editor.
In the vim announce, professed to it support C, HTML, Ruby, Python, PHP and the others ready.

I had just only tested C.

vim 7 function complete

To use syntax completion, just press CTRL-X, vim will print:
-- ^X mode (^]^D^E^F^I^K^L^N^O^Ps^U^V^Y)

In this mode, these key means:
^]: Tag completion
^D: Definition completion
^F: File name completion
^I: Path pattern completion
^K: Dictionary pattern completion
^L: Whole line completion
^N: Keyword Local completion
^O: Omni completion
^V: Command-line completion

Other information about new vim, please check vim web site:
www.vim.org

Posted by K*K Tue, 16 May 2006 13:28:00 +0800


M$ Vista 用了新字体

简体的叫做微软雅体,繁体的叫做微软正体,让我们来看看它和 Mac OS X 下的默认字体华文黑体来对比一下。

标粗 粗体
标粗 粗体

Posted by K*K Sun, 30 Apr 2006 16:32:00 +0800


UTF-8 &#30340; Xoops

Xoops 是一套用于快速架站的 CMS 系统,以大量质量优秀,而且功能完善的模块著称。
除了官方的 CBB 论坛模块,还整合了 Wordpress 作为 blog, MediaWiki 作为 Wiki,台湾甚至有人做了 Xoops 的课程管理模块。

Xoops 刚刚获得了 sf.net 的开源社区第一届大奖赛中在所有的CMS系统中荣获开发类亚军,该组冠军为著名的Gaim项目。
有很多使用 Xoops 的社区在活跃着,包括大陆 Mac 界的麦客一班勃麦堂使用的都是 Xoops,Linux 界的社区的发行版 - CentOS 主页使用的也是 Xoops。

以 mambo 等其它 CMS 不同的是,Xoops 不是简单的 hook 似仅仅是账号的整合,而是从界面到内部模块之间都进行了整合,除了账户是通用的,模块之间的内容也可以互相调用。

因为工作关系,目前正在做 Xoops 相关的工作,将 Xoops GB2312 整体转换成了 UTF-8,在这里放出:
http://homepage.mac.com/xuqingkuang/FileSharing1.html (五月之前暂时别访问了,这个月竟然超出了 10G 的流量,详见抱怨帖

本版包含了一下模块:
  • Article 文章管理模块 0.9
  • libldap LDAP 模块 0.5
  • liens 联系我们 1.0
  • mediawiki 维基百科 1.63
  • MyAlbum-P 相册 2.86
  • Myiframe i框架 1.4
  • CBB 论坛(NewBB) 3.0.1
  • News 新闻 1.42
  • PrivateMessage 私信 0.1
  • Profile 账户管理 0.1
  • Protector 攻击防护 2.56
  • SiteMap 网站地图 0.7
  • system Xoop 系统 2.13
  • MyTinyd0 用于嵌入 HTML 2.22
  • WF-Downloads 下载 2.05
  • WhatsNew 最新内容 2.02
  • Wordpress 博客 1.63
  • XoopsPoll 投票 1.0
所有模块均包含了 UTF-8 中文界面。

因为 Xoops 对 PHP 和 MySQL 版本要求较高,建议使用 XAMPP 快速服务器包 1.4.10 使用,其它版本皆有各式各样的问题。

http://www.apachefriends.org/en/xampp.html

Posted by K*K Sat, 29 Apr 2006 15:17:00 +0800


LVS 会议记录。

LVS 会议记录。
总体上来说整场会议仅仅是概括,没有什么深入的东西。
8:00 Mike 的开场
8:10 冯岩就 Mac 与 Linux 发表演讲
8:17 章文嵩正式开始演讲 - Building Scalable Network Services using Linux Virtual Server
网络服务之需求:
扩展性
24x7
管理性
省钱
LVS 项目之目标:
为网络高可用性提供一个基本框架。
LVS总体框架
E-Comerce
General Network Services
Cluster Management
KTCPVS
IPVS
LVS Framework
IP Virtual Server:
Linux 内核级实现
三种负载分担手段:
NAT
IP Tunneling
Direct Routing
Comparison:
VS/NAT VS/TUN VS/DR
Server any Tunneling Non-arp device
Server net private LAN/WAN LAN
Server no. low(10~20) HIgh((100) High(100)
Server gw load balancer Own router Own router
KTCPVS:
Layer-7 switching in user-space
- high overhead of context switching and copying
- limited scalability
Cluster Monitoring Software
Red Hat Cluster Server / Piranha
- LVS Piranha
UltraMonkey
- LVS lvs-gui heartbeat ldirectored
Keepalived
Netparse
etc
高可用性
服务器完蛋检测:
- ping, server detection, etc
Load Balancer 完蛋检测:
- 数据同步/迁移
- Heartbeat

Technorati Tags: , ,

Posted by K*K Wed, 12 Oct 2005 07:42:00 +0800


PowerBook 17" 的 nbench 和 linpack 测试结果。

我的机器配制是:
Machine Name: PowerBook G4 17"
Machine Model: PowerBook5,7
CPU Type: PowerPC G4 (1.2)
Number Of CPUs: 1
CPU Speed: 1.67 GHz
L2 Cache (per CPU): 512 KB
Memory: 1GB
Bus Speed: 167 MHz
linpack 测试结果:
我的机器是:448679 Kflops
邹鹏程的测试纪录:
我的ASUS V6800V (PentiumM 2.0G) 的linpack结果为:340Mflops
我的desktop (Celeron 1.7G) 的结果为:200Mflops
builder (4 Xeon 3.4G) 的结果为:680Mflops
目前世界第一的Blue Genes的结果为:70720Gflops (Rmax)
曙光4000A的结果为:8061Gflops (Rmax)
nbench 测试结果:
我的机器是:
MEMORY INDEX : 12.511
INTEGER INDEX : 10.897
FLOATING-POINT INDEX: 12.605
邹鹏程的测试结果可以参考:这里

Posted by K*K Tue, 11 Oct 2005 05:52:00 +0800


三件事情

把邹鹏程的三个想法都记下来,都是不错的想法。

顺道记录一下我的工作进度。
  • 为未来的管理工具添加一个类似 Zimbra 的 Web 界面
    Zimbra 拥有一个出色的界面,用户可以通过拖放操作为 Email 添加 tag,对 Email 进行分类。
    今天用了半天时间将 Zimbra 安装到了 Asianux 2 上。
    界面的编写无疑要花费大量时间,更何况是 JavaScript。但我已经准备好迎接这个挑战。
  • 将 HA 和 Xen 进行整合
    Xen 拥有在一个硬件平台上运行多个操作系统的能力,将 Xen 和 HA 进行整合无疑对节约成本有很大帮助
    我在 Xen 的使用过程中,虚拟机始终停止在 Blocked 状态下,由于虚拟机运行于另一个环境下,包括 dmesg 在内的输出我无法获取。
  • 建立 Red Flag 开放社区
    OpenSuSE 和 Fedora 都有自己的社区,但它们仅仅是将自己的开发流程(仅仅是 Bugzilla 和 cvs)开放出来,而人在其中的位置微乎其微。
    邹希望建立一个真正的社区,人们都可以在期间自由交流,发表意见,每个人都有为 Asianux 打包的能力,别人也有为这个包评分的能力。
    希望通过这样来提高 Asianux 的品质。而这样无疑,比起 OpenSuSE 和 Fedora 基于产品理念的社区,这种以人为本的社区更胜一酬。

    相关网址:豆瓣

Posted by K*K Sun, 09 Oct 2005 06:06:00 +0800


首次使用 blogger

将 blogchina 上的文章都迁移过来。。。好大的工程啊。。。。

查找 Mac 上能够离线编写 blog 的工具,这才是使用 blogger.com 的真正目的。 ;-)

Posted by K*K Thu, 28 Jul 2005 06:11:00 +0800