0

每天看 svn 库变更的一个小 shell 脚本


#!/bin/bash

TODAY=/tmp/$(date +%Y%m%d)
CONTENT=$TODAY/update_content_sina.tmp

if [ ! -d $TODAY ]; then
mkdir $TODAY
fi

if [ -f $CONTENT ]; then
rm $CONTENT
fi

svn up ~/job/code//sinahouse/ >> $TODAY/svn_update_list.tmp
LIST=`cat $TODAY/svn_update_list.tmp | grep ‘.php’ | awk ‘{print $2}’`

for L in $LIST; do
svn diff -r PREV $L >> $CONTENT
done

/usr/bin/vim $CONTENT

0

snow leopard 下通过 py 脚本下载 google music


最近在国内没办法再用 spotify 听歌了,迫于无奈只好转向 google music 。

因为 firefox 尴尬的内存占用,并且考虑把歌同步到 iPhone 上来听,开始着手找下载 google music 的小工具,发现骨头做的 gmbox 不错,可惜现在是只支持 ,只好用 gmusic.py 这个脚本。

运行 gmusic.py 首先要安装 3 环境,去 官方网站载下 3.1 然后 configure –enable-shared && make && sudo make install && ln -s /usr/local/bin/3 /usr/bin/3 既可

用 gmusic.py 下载速度在我的 istat 里显示大概是 800K 左右,非常不错。

01

pplive for ubuntu linux


看到这条新闻有点唏嘘,多年以前做视频网站时和领导们聊过,为什么不去研究跨平台客户端,本地框架P2P Client + 在当时已经可以实现了……

0

清除指定squid缓存文件的脚本


用wget来清空squid缓存

可以使用以下命令来清空squid的缓存:

代码:
/usr/bin/wget -O squid.log -S –header=”ragma: no-”  url

代码:

squidclient -m PURGE -p 80 “http://you.video.sina.com.cn/index.

代码:

http://www.cdn.com/api/purge.?action=purge&host=61.55.111.111&url=http://www.md5.cn/

一款老外的程序,可以批量清除某类URL的Squid缓存,支持正则表达式。

  下载网址:http://www.wa.apana.org.au/~dean/squidpurge/

  编译:
代码:
wget http://www.wa.apana.org.au/~dean … 20040201-src.tar.gz
tar zxvf purge-20040201-src.tar.gz
cd purge
make
  清除Squid缓存示例:
  1、清除 URL 以“.mp3”结尾的缓存文件(例如 http://www.s135.com/abc.mp3、http://www.s135.com/01/a.mp3)
代码:
./purge -p localhost:80 -P 1 -se ‘\.mp3$’
  2、清除URL中包含s135.com的所有缓存:
代码:
./purge -p localhost:80 -P 1 -se ‘s135.com’
  我喜欢将程序推到后台去执行,让它慢慢地去清Squid缓存,同时将输出内容记录到purge.log文件:
代码:
./purge -p localhost:80 -P 1 -se ‘s135.com’ > purge.log 2>&1

 Squid web缓存加速软件目前已经是新浪、搜狐、网易等各大网站广泛应用。Squid会在设置的缓存目录下建立多个目录,每一个目录下又建立多个目录,然后才在最里层的目录中存放缓存文件(object)。squid会根据用户请求网页的URL进行哈希,生成缓存文件,存放在某一个目录中。squid启动之后,将在内存中建立一个哈希表,记录硬盘中缓存文件配置的情形。

  对于类似http://you.video.sina.com.cn/index.html之类的网页,squid只会生成一个缓存文件。可以用squid附带的squidclient工具清除:

代码:
squidclient -m PURGE -p 80 “http://you.video.sina.com.cn/index.html”
  而对于带有参数的网页,例如新浪播客的Flash播放器http://vhead..sina.com.cn/pl … 9852&uid=1278987704,因“?”后面的参数不同,导致URL也不同,squid会生成多个缓存文件,哈希分散存放在不同的目录。如果修改了这个outer_player.swf文件,要更新squid缓存就要去清除不同目录下及内存中的很多个缓存文件,十分麻烦,于是我编写了一个Linux下的shell脚本,去完成这件麻烦的事:

  脚本文件名:clear_squid_cache.sh(8月2日修正了UC网友“城市中的寂寞”反馈的BUG)

代码:
#!/bin/sh
squidcache_path=”/data1/squid/var/cache”
squidclient_path=”/usr/local/squid/bin/squidclient”
grep -a -r $1 $squidcache_path/* | strings | grep “http:” | awk -F’http:’ ‘{print “http:”$2;}’ > cache_list.txt
for url in `cat cache_list.txt`; do
$squidclient_path -m PURGE -p 80 $url
done
  注意:请赋予clear_squid_cache.sh可执行权限(命令:chmod +x ./clear_squid_cache.sh)。请确保脚本所在目录可写。

  设置:
  squidcache_path= 表示squid缓存目录的路径
  squidclient_path= 表示squidclient程序所在的路径,默认为squid安装目录下的bin/squidclient

  用法:
  1、清除所有Flash缓存(扩展名.swf):
  
代码:
./clear_squid_cache.sh swf
  2、清除URL中包含sina.com.cn的所有缓存:
  
代码:
./clear_squid_cache.sh sina.com.cn
  3、清除文件名为zhangyan.jpg的所有缓存:
  
代码:
./clear_squid_cache.sh zhangyan.jpg
  效率:
  经测试,在DELL 2950上清除26000个缓存文件用时2分钟左右。平均每秒可清除缓存文件177个。

0

Intel® I/O Acceleration Technology (Intel® I/OAT)


Intel® I/O Acceleration Technology (Intel® I/OAT),
with Intel® QuickData Technology, moves data more efficiently through
Intel® Xeon® processor-based servers for fast, scalable, and reliable
network performance.

Performance

A
primary benefit of Intel I/OAT is its ability to significantly reduce
CPU overhead, freeing resources for more critical tasks. Intel I/OAT
uses the ’s processors more efficiently by leveraging
architectural improvements within the CPU, chipset, network controller,
and firmware to minimize performance-limiting bottlenecks. Intel I/OAT
accelerates TCP/IP processing, delivers data-movement efficiencies
across the entire server platform, and minimizes system overhead.

Scalability

Intel
I/OAT provides network acceleration that scales seamlessly across
multiple Gigabit Ethernet (GbE) ports. It cost-effectively scales up to
eight GbE ports and up to 10GbE, with power and thermal characteristics
similar to those of a standard gigabit network adapter. TCP Offload
Engine (TOE) solutions, in contrast, require a separate TOE card for
each port, resulting in significant cost and thermal challenges for
server platforms.

Reliability

Intel I/OAT
is a safe and flexible choice because it is tightly integrated into
popular operating systems such as Microsoft Server* 2003 and
*, avoiding support risks associated with relying on third-party
hardware vendors for network stack updates. Intel I/OAT also preserves
critical network configurations such as teaming and failover, by
maintaining control of the network stack processing within the
CPU-where it belongs. This results in reduced support risks for IT
departments.

via Intel

0

Savage 2


这个游戏太棒了,RTS + FPS ,并且还是跨 win , , mac 三个平台,并且还免费。爽~~~~

RTS 模式

FPS 模式

0

GTK+主循环(main loop)的工作原理


转至:http://www.builder.com.cn

我们知道GUI应用程序都是事件驱动的。这些事件大部分都来自于用户,比如键盘事件、鼠标事件或笔点事件。还有一些事件来自于系统内部,比如定时事件、socket事件和其它文件事件等等。在没有任何事件的情况下,应用程序处于睡眠状态。

因为这种事件驱动机制,GUI应用程序都毫无例外的需要一个主循环(main loop)。主循环(main loop)控制应用程序什么时候进入睡眠状态,什么时候被唤醒。主循环实现得好,应用程序才能工作正常又省电。

Win32 GUI应用程序的主循环是我们比较熟悉的,其大致如下:

// Main message loop:

while (GetMessage(&msg, NULL, 0, 0))

{

if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))

{

TranslateMessage(&msg);

DispatchMessage(&msg);

}

}

在这个主循环中,它不断的从消息队列中提取消息,然后分发给消息的目标(通常是窗口),直到GetMessage返回FALSE(收到WM_QUIT消息,一般调用PostQuitMessage)为止,如果队列中没有消息,应用程序就进入睡眠状态。这种方法简单明了,缺陷也是明显的,它只能挂在消息队列上,而不能同时挂在多个事件源上(如管道和socket)。要挂在多个事件源上,需要使用其它方式,比如用WaitForMultipleObjects,那就比较麻烦了。

而在+应用程序中,其主循环(main loop)更加简单,但是非常的不明了:

gtk_main ();

不少人用GTK+写了很长时间的程序,还是觉得这行代码很神秘,不知道里面到底干了什么。本文试图分析一下gtk_main的工作原理:

gtk_main主要是对main loop的包装,基本上分为三步:

1. 调用初始化函数。

2. 进入glib main loop

3. 调用~初始化函数。

所以弄清楚glib main loop之后,gtk_main的实现也就尽收眼底了,本文重点分析glibmain loop的实现。main loop使用模式大致如下:

loop = g_main_loop_new (NULL, TRUE);

g_main_loop_run (loop);

g_main_loop_new创建一个main loop对象,一个main loop对象只能被一个线程使用,但一个线程可以有多个main loop对象。在GTK+应用中,一个线程使用多个main loop的主要用途是实现模态对话框,它在gtk_dialog_run函数里创建一个新的main loop,通过该main loop分发消息,直到对话框关闭为止。

g_main_loop_run则是进入主循环,它会一直阻塞在这里,直到让它退出为止。有事件时,它就处理事件,没事件时就睡眠。

g_main_loop_quit则是用于退出主循环,相当于Win32下的PostQuitMessage函数。

Glib main loop的最大特点就是支持多事件源,使用非常方便。来自用户的键盘和鼠标事件、来自系统的定时事件和socket事件等等,还支持一个称为idle的事件源,其主要用途是实现异步事件。Main loop的基本组成如下图所示:

GMainLoop的主要部件是GMainContextGMainContext可以在多个GMainLoop间共享,但要求这些GMainLoop都在同一个线程中运行,前面提到的模态对话框就属于这一类。GMainContext通常由多个GSource组成,GSource是事件源的抽象,任何事件源,只要实现GSource规定的接口,都可以挂到GMainContext中来。

GSource的接口函数有:

1. gboolean (*prepare) (GSource *source, gint *timeout_);进入睡眠之前,在g_main_context_prepare里,mainloop调用所有Sourceprepare函数,计算最小的timeout时间,该时间决定下一次睡眠的时间。

2. gboolean (*check) (GSource *source); poll被唤醒后,在g_main_context_check里,mainloop调用所有Sourcecheck函数,检查是否有Source已经准备好了。如果poll是由于错误或者超时等原因唤醒的,就不必进行dispatch了。

3. gboolean (*dispatch) (GSource*source, GSourceFunc callback,gpointer user_data); 当有Source准备好了,在g_main_context_dispatch里,mainloop调用所有Sourcedispatch函数,去分发消息。

4. void (*finalize) (GSource *source); Source被移出时,mainloop调用该函数去销毁Source

Main loop的工作流程简图如下:

下面我们看看几个内置Source的实现机制:

Idle 它主要用实现异步事件,功能类似于Win32下的PostMessage。但它还支持重复执行的特性,根据用户注册的回调函数的返回值而定。

1. g_idle_prepare把超时设置为0,也就是即时唤醒,不进入睡眠状态。

2. g_idle_check 始终返回TRUE,表示准备好了。

3. g_idle_dispatch 调用用户注册的回调函数。

Timeout 它主要用于实现定时器,支持一次定时和重复定时,根据用户注册的回调函数的返回值而定。

1. g_timeout_prepare 计算下一次的超时时间。

2. g_timeout_check 检查超时时间是否到了,如果到了就返回TRUE,否则返回FALSE

3. g_timeout_dispatch调用用户注册的回调函数。

线程可以向自己的mainloop中增加Source,也可以向其它线程的mainloop增加Source。向自己的mainloop中增加Source时,mainloop已经唤醒了,所以不会存在什么问题。而向其它线程的mainloop增加Source时,对方线程可能正挂在poll里睡眠,所以要想法唤醒它,否则Source可能来不及处理。在下,这是通过wake_up_pipe管道实现的,mainlooppoll时,它除了等待所有的Source外,还会等待wake_up_pipe管道。要唤醒poll,调用g_main_context_wakeup_unlockedwake_up_pipe里写入字母A就行了。

0

google背后的分布式架构


  Google是与众不同的。它的独特不仅仅表现于革新的思维和充满创意的应用 (比如那个大堂里的地球模型),更在于其有别常规的IT策略……

  加利福尼亚州山景城(Mountain View)Google公司(Google,下称Google)总部有一个43号大楼,该建筑的中央大屏幕上显示着一个与Google地球(Google Earth)相仿的世界地图,一个转动的地球上不停地闪动着五颜六色的光点,恍如罗马宫廷的千万烛灯,每一次闪动标志着地球的这个角落一名Google用 户发起了一次新的搜索。

  这同时意味着Google又一次满足了人们对未知信息的好奇与渴望。

  Google是与众不同的。它的独特不仅仅表现于革新的思维和充满创意的应用 (比如那个大堂里的地球模型),更在于其有别常规的IT策略。从人们的常理来看,简单的硬件商品和免费软件是无法构建出一个帝国的,但是Google做到 了。在性能调整后,Google把它们变成一个无可比拟的分布式计算平台,该平台能够支持大规模的搜索和不断涌现的新兴应用。我们原本认为这些应用都是个 人消费级别的,但是Google改变了这一切。现在商业世界也在使用它们,这就令这家搜索公司显得那么与众不同。

  GoogleWeb 服务背后的IT架构对无数使用搜索引擎的用户来说也许并不是非常重要,但它是Google几百位致力于把全球信息组织起来,实现“随处可达,随时可用”目 标的工程师们的最核心工作。这就需要一个在覆盖范围和野心上都与Google的商业愿景完全相符的IT蓝图作为支撑。

  Google 的经理们一直对公司的IT策略话题保持沉默,他们厌恶谈及特定的厂商或者产品,当被问到他们的服务器和数据中心时,他们总是闭口不谈。但与几位 Google的IT领导一起呆了一天后,我们最终得以揭示该公司的IT是如何运作的,那可不仅仅是一个运行在无数服务器集群上的、表面看来非常简单的搜索 引擎。在其简单的外表下,蕴涵着许多内部研发软件、定制硬件、人工智能,以及对性能的执着追求和打破常规的人力管理模式。

  IT理念方面,Google对同行有一条建议:尽量避免那些人人都在使用的系统和软件,以自己的方式做事会更有独特的竞争优势。

  “企业文化决定了你的做事方式。”道格拉斯”美林(Douglas Merrill),这位Google工程副总裁和事实上的首席信息官(CIO) 指出,“到了我们这样的发展阶段,企业观念和文化非常与众不同,这也反过来鞭策我们必须要采用与众不同的方式来运行那些他人看来很常规的系统。”
  Google 最大的IT优势在于它能建造出既富于性价比(并非廉价)又能承受极高负载的高性能系统。因此IT顾问史蒂芬”阿诺德(Stephen Arnold)指出,Google与竞争对手,如亚马逊网站(Amazon)、电子港湾公司(eBay)、微软公司(Microsoft,下称微软)和雅 虎公司 (Yahoo,下称雅虎)等公司相比,具有更大的成本优势。Google程序员的效率比其他Web公司同行们高出50%~100%,原因是Google已 经开发出了一整套专用于支持大规模并行系统编程的定制软件库。据他估算,其他竞争公司可能要花上四倍的时间才能获得同等的效果。

  打造服务器

  Google 究竟是怎样做到这点的呢?其中一个手段,美林认为,“是因为我们自己动手打造硬件。”Google并不制造计算机系统,但它根据自己的参数定制硬件,然后 像MTV的节目“靓车打造”(Pimp My Ride)那样自己安装和调整硬件系统。开源程序经理克里斯”迪博纳(Chris DiBona)评论道:“我们很善于购买商业服务器,并且改造他们为我们所用,最后把性能压榨和发挥到极致,以致有时候他们热得像要融化了似的。”

  这种亲手打造的方式,来源于Google从车库诞生时与生俱来的节俭风格,更与Google那超大型的系统规模息息相关,良好的习惯一直延续至 今。据说 Google在65个数据中心拥有20万~45万台服务器—这个数目会有偏差(取决于你如何定义服务器和由谁来做这项统计)。但是,不变的是持续上升的趋势。

  Google不会去讨论这些资产,因为它认为保密也是一种竞争优势。事实上,Google之所以喜欢开源软件也是因为它的私密性。“如果我们购 买了软件许可或代码许可,人们只要对号入座,就可以猜出Google的IT基础架构。”迪博纳分析说, “使用开源软件,就使我们多了一条把握自己命运的途径。”

  Google喜欢规模化的服务器运行方式。当有成百上千台机器时,定制服务器的优势也会成倍增加,效果也会更趋明显。Google正在俄勒冈州 哥伦比亚河边的达勒斯市建造一个占地30亩的数据中心,在那儿它可以获得运算和降温需要的低价水力电力能源(参见边栏《Google数据中心自有一套》)。

  Google以“单元”(Cell)的形式组织这些运行 Linux操作系统的服务器,迪博纳把这种形式比喻成互联网服务的“磁盘驱动器”(但别和一直谣传的Google存储服务Gdrive混淆了,“并没有 Gdrive这回事。”一位Google女发言人明确表示。),公司的软件程序都驻扎在这些并不昂贵的电脑机箱里,由程序员决定它们的冗余工作量。这种由 很多单元组成的文件系统代替了商业存储设备;迪博纳表示Google这些单元设备更易于建造和维护,他还暗示他们能处理更大规模的数据。

  Google 不会漏过对任何技术细节的关注。多年来,公司的工程师就在研究微处理器的内部工作机制,随着Google规模的持续壮大,必然会用到特别定制和调节过的芯 片。知名工程师路易斯”巴罗索(Luiz Barroso)去年在一篇发表在工业杂志上的论文中证实,近年来Google的主要负荷都由单核设计的系统承担着。但许多服务器端的应用,如 Google搜索索引服务,所需的并行计算在单核芯片的指令级别上执行得并不好。

  曾在数据设备公司(Digital Equipment)和康柏公司(Compaq)当过芯片设计师的巴罗索认为,随着AMD公司、英特尔公司(Intel)、太阳计算机系统公司(Sun)开始制造多核芯片,必将会出现越来越多芯片级别的并行计算。

  Google 也曾考虑过自己制造计算机芯片,但从业界潮流来看,这个冒险的举动似乎不是很必要。“微处理器的设计非常复杂而且成本昂贵,”运营高级副总裁乌尔斯”霍尔 茨勒(Urs Holzle)表示。Google宁愿与芯片制造商合作,让他们去理解自己的应用并设计适合的芯片。这是一种客户建议式的设计,其关注点在于总体吞吐量、 效能,以及耗电比,而不是看单线程的峰值性能。霍尔茨勒表示,“这也是最近多核CPU的设计潮流与未来方向。”
裁缝般地定制软件

  为了能尽量压榨硬件性能,Google开发了相当数量的定制软件。创新产品主要包括用于简化处理和创建大规模数据集的编程模型 MapReduce;用于存储和管理大规模数据的系统BigTable;分析分布式运算环境中大规模数据集的解释编程语言Sawzall;用于数据密集型 应用的分布式文件系统的 “Google文件系统”(Google File System);还有为处理分布式系统队列分组和任务调度的“Google工作队列”(Google Workqueue)。

  正是从Sawzall这些工具里体现出Google对计算效率的执著关注。并不是每家公司都能从底层去解决效率问题,但是对Google来说, 为常规关系型数据库无法容纳的大规模数据集专门设计一种编程语言是完全合理的。即使其他编程工具可以解决问题,Google的工程师们仍然会为了追求效率 而另外开发一套定制方案。Google工程师认为,Sawzall能与C++中的MapReduce相媲美,而且它更容易编写一些。

  Google 对效率的关注使它不可能对标准Linux内核感到满意;Google会根据自己的需要运行修改过的内核版本。通过调整Linux的底层性能,Google 工程师们在提高了整体系统可靠性的基础上,还一并解决了数据损坏和数据瓶颈等一系列棘手问题。对内核的修改也使Google的计算机集群系统因为通信效率 的提高而运行得更快。

  当然,Google偶尔也会出现系统故障,情况一旦发生,无数的用户就会受到影响了。三年前一次持续30分钟的系统故障使20%的搜索流量受到影响。

  Google 开发了自己的网站服务器却没有使用开源的Apache服务器,尽管它在网站服务器的市场占有率超过60%。迪博纳认为,Google的网站服务器可以运行 在更多数量的主机上,对Google站点上内容庞大又彼此互相依赖的应用程序来说,这种服务器的负载均衡能力远比Apache的能力更高。同时,在用标准 公共网关接口(CGI)访问数据库动态网页方面,Google服务器的编程难度要比 Apache更高,但是最终运行速度却更快。“如果我们能够压榨出10%~20%的性能,我们就可以节省出更多系统资源、电量和人力了。”迪博纳在总结中指出。

  Google还设计了自己的客户关系管理(CRM)系统用于支持自己基于竞价和点击的互联网广告收费业务。但对是否需要设计自己的工具,Google的态度也不是一成不变的。比如在财会软件上,它就使用了甲骨文公司(Oracle)的Financials软件。

  美林拿着一只叉子举例说明现成的产品也可以带来价值。但在有些场合现成的软件产品就不一定适用了。“我们的文化在各个层面对我们的运作都有深远影响,”他表示,“所以我们不想让购买所得的工具改变我们的工作方式和文化层面。”
Google’s BigTable 原理 (翻译)

题记:google 的成功除了一个个出色的创意外,还因为有 Jeff Dean 这样的软件架构天才。
—— 编者

官方的 Google Reader 中有对BigTable 的解释。这是Google 内部开发的一个用来处理大数据量的系统。这种系统适合处理半结构化的数据比如 RSS 数据源。 以下发言 是 Andrew Hitchcock 在 2005 年10月18号 基于: Google 的工程师 Jeff Dean 在华盛顿大学的一次谈话 (Creative Commons License).

首先,BigTable 从 2004 年初就开始研发了,到现在为止已经用了将近8个月。(2005年2月)目前大概有100个左右的服务使用BigTable,比如: Print,Search History,Maps和 Orkut。根据Google的一贯做法,内部开发的BigTable是为跑在廉价的PC机上设计的。BigTable 让Google在提供新服务时的运行成本降低,最大限度地利用了计算能力。

BigTable 是建立在 GFS ,Scheduler ,Lock Service 和 MapReduce 之上的。

每个Table都是一个多维的稀疏图 sparse map。Table 由行和列组成,并且每个存储单元 cell 都有一个时间戳。在不同的时间对同一个存储单元cell有多份拷贝,这样就可以记录数据的变动情况。在他的例子中,行是URLs ,列可以定义一个名字,比如:contents。Contents 字段就可以存储文件的数据。或者列名是:”language”,可以存储一个“EN”的语言代码字符串。

为了管理巨大的Table,把Table根据行分割,这些分割后的数据统称为:Tablets。每 个Tablets大概有 100-200 MB,每个机器存储100个左右的 Tablets。底层的架构是:GFS。由于GFS是一种分布式的文件系统,采用Tablets的机制后,可以获得很好的负载均衡。比如:可以把经常响应 的表移动到其他空闲机器上,然后快速重建。

Tablets在系统中的存储方式是不可修改的 immutable 的SSTables,一台机器一个日志文件。当系统的内存满后,系统会压缩一些Tablets。由于Jeff在论述这点的时候说的很快,所以我没有时间把听到的都记录下来,因此下面是一个大概的说明:

压缩分为:主要和次要的两部分。次要的压缩仅仅包括几个Tablets,而主要的压缩时关于整个系统的压缩。主压缩有回收硬盘空间的功能。Tablets的位置实际上是存储在几个特殊的BigTable的存储单元cell中。看起来这是一个三层的系统。
客户端有一个指向METAO的Tablets的指针。如果METAO的Tablets被频繁使用,那个这台机器就会放弃其他的tablets专门支持 METAO这个Tablets。METAO tablets 保持着所有的META1的tablets的记录。这些tablets中包含着查找tablets的实际位置。(老实说翻译到这里,我也不太明白。)在这个系统中不存在大的瓶颈,因为被频繁调用的数据已经被提前获得并进行了缓存。

现在我们返回到对列的说明:列是类似下面的形式: family:optional_qualifier。在他的例子中,行:www.search-analysis.com 也许有列:”contents:其中包含html页面的代码。 “ anchor:cnn.com/news” 中包含着 相对应的url,”anchor:www.search-analysis.com/” 包含着链接的文字部分。列中包含着类型信息。
(翻译到这里我要插一句,以前我看过一个关于万能数据库的文章,当时很激动,就联系了作者,现在回想起来,或许google的 bigtable 才是更好的方案,切不说分布式的特性,就是这种建华的表结构就很有用处。)

注意这里说的是列信息,而不是列类型。列的信息是如下信息,一般是:属性/规则。 比如:保存n份数据的拷贝或者保存数据n天长等等。当 tablets 重新建立的时候,就运用上面的规则,剔出不符合条件的记录。由于设计上的原因,列本身的创建是很容易的,但是跟列相关的功能确实非常复杂的,比如上文提到 的 类型和规则信息等。为了优化读取速度,列的功能被分割然后以组的方式存储在所建索引的机器上。这些被分割后的组作用于 列 ,然后被分割成不同的 SSTables。这种方式可以提高系统的性能,因为小的,频繁读取的列可以被单独存储,和那些大的不经常访问的列隔离开来。

在一台机器上的所有的 tablets 共享一个log,在一个包含1亿的tablets的集群中,这将会导致非常多的文件被打开和写操作。新的log块经常被创建,一般是64M大小,这个GFS的块大小相等。当一个机器down掉后,控制机器就会重新发布他的log块到其他机器上继续进行处理。这台机器重建tablets然后询问控制机器处理结构的存储位置,然后直接对重建后的数据进行处理。这个系统中有很多冗余数据,因此在系统中大量使用了压缩技术。

Dean 对压缩的部分说的很快,我没有完全记下来,所以我还是说个大概吧:压缩前先寻找相似的 \行,列,和时间数据。

他们使用不同版本的: BMDiff 和 Zippy

BMDiff 提供给他们非常快的写速度: 100MB/s – 1000MB/s 。Zippy 是和 LZW 类似的。Zippy 并不像 LZW 或者 gzip 那样压缩比高,但是他处理速度非常快。

Dean 还给了一个关于压缩 蜘蛛数据的例子。这个例子的蜘蛛 包含 2.1B 的页面,行按照以下的方式命名:“com.cnn.www/index.:http”.在未压缩前的web page 页面大小是:45.1 TB ,压缩后的大小是:4.2 TB , 只是原来的 9.2%。Links 数据压缩到原来的 13.9% , 链接文本数据压缩到原来的 12.7%。
Continue Reading

0

[转] 移动互联网的终端革命


From: http://www.bouhe.com/mobile-marketing/1694

诺基亚、爱立信公司的首席技术技官都已驻扎在硅谷办公,他们不得不来到这里,因为他们突然发现苹果和谷歌已经开始威胁到他们的业务。2007年,iPhone、Gphone无疑是最热门的词汇,就连微软也提出了Mphone(Multi-phone)的概念,认为手机应该融合多种无线技术、多种输入技术和多种应用功能。

“2008年会成为MID(移动互联网设备)元年。”业内人士预测。这一判断主要是基于明年上半年英特尔公司即将推出可以放在口袋里的移动终端,而45纳米技术的突破以及多核技术的应用,可以满足MID芯片的移动性和无处不在的计算,并同时降低功耗和尺寸。作为PC互联网时代的最大赢家,英特尔希望将其霸主地位延伸到移动终端领域。就连全球最大的网络书店亚马逊也新推出了手持终端——电子书阅读器,开始软硬兼备。

随着手机和互联网的融合,越来越多的公司开始涉足手机及其他移动终端的生意,硅谷已然变成了手机谷。而围绕着终端的变革,原有的硬件、软件、服务、内容等公司都开始跨越产业链上的多个环节,致使原有的产业边界越来越模糊。以往我们耳熟能详的公司如诺基亚、苹果、谷歌等已经不能单一定位了,它们早已不单是手机、电脑和搜索公司了,而是在移动互联网的大背景下,走到了同一条竞争线上。

随着微软、英特尔、诺基亚、谷歌、苹果等全球巨头加入到移动互联网的战役中,既有的产业格局也会出现新的变化。苹果和谷歌已经成为事实上的虚拟运营商,在它们的平台上会开发和开放各种应用,移动运营商未来的地位会下降。事实上,苹果公司一直和AT&T等移动运营商捆绑销售,并和运营商进行分成。而谷歌打算用46亿美元竞拍美国700MHz的一个无线频段,更有传言,谷歌会收购美国第三大电信运营商Sprint Nextel。

相比苹果、谷歌对移动通信市场的入侵,中国的移动互联网行业还呈现比较封闭的状态,但这并没影响到国内众多创业公司的参与热情。曾有VC感慨,现在只要是和手机相关的商业计划书,十之八九都是手机客户端软件,例如手机聊天、手机下载等各色各样的手机软件。这些公司几乎百分之百都号称要做成手机平台,以黏住用户。

移动终端的影响力之大,在于其离用户最近。作为最终用户,人们与外界的联系节点已由最早家庭的邮政编码,到PC时代的一串IP地址,再转移到移动电话的手机号码。联系的终端越变越小,但却越来越跟随、紧贴用户。在众多公司抢占终端的过程中,用户需求成为最终的变量。在这一点上,无论是iPhone还是Wii的热卖,在于其最先洞察并引领用户需求,通过改善人际交互的界面方式,将用户从键盘中解放出来,满足用户对于自由的渴望。

但仅仅成为一个酷品还不足够,用户更需要终端上的服务和内容。在这一点上,iPhone还远远不够。移动互联网不仅仅是将互联网搬到手机上,看YouTube、上Facebook,随着医疗健康、教育、金融等服务在手机上实现,一定会诞生新的商业模式。

一台便携的移动终端,随时随地连接互联网,围绕这个目标,移动运营商、芯片厂商、终端厂商、互联网服务商、内容提供商史无前例地集体参战,成为过去一年最热闹的场景。而在这场战争背后,首先是对终端的争夺,人机交互界面从键盘到多点触控(multi-touch)率先成为风潮。

当苹果公司的iPhone在欧美手机市场刮起旋风的时候,另外一个手机“门外汉”也把自己的利益触角伸向了这个领域,这家公司就是全球最大的互联网公司谷歌。

对于这家在互联网上取得了巨大成就的公司来说,谷歌进入手机市场并不需要像苹果公司一样自己设计并制造出一款特立独行的酷品手机GPhone来争取用户,而是采用了它更为擅长的方式——用开放的软件平台使自己成为一个联盟的组织者,就像在互联网上用AdSense建立了自己的广告联盟一样。

在2007年11月5日谷歌宣布的手机联盟中有34家企业成员,包括摩托罗拉、T-、HTC(宏达电)、高通及中国移动等34家全世界不同国家和地区的移动运营商、手机芯片提供商和手机生产商等等。谷歌将为联盟的成员免费开放一个基于Linux的手机操作系统平台“Android”。谷歌称,这个平台是完全开放的综合性移动平台,供联盟成员在此基础上开发新产品、改进服务和压缩用户成本。

在互联网上,谷歌用这种免费提供软件的方式获得了大量的广告收入,2007年前三个季度,谷歌的广告收入达到了约118亿美元,它的这种模式将一直靠卖操作系统软件为生的微软搞得非常被动,如今谷歌又希望能在手机平台上重演这一幕。

在苹果、谷歌这样的新势力纷纷用新模式、新平台进入封闭的电信市场的背景下,以手机为最终表现形式的移动通信市场会发生怎样的深刻变化?也许我们可以从25年前发生在PC行业上的一切来寻找答案。

25年前,整个PC行业还处于群雄割据的状态,没有一个整体性的产业标准,各个PC制造商都有属于自己的一套独立的操作系统,他们靠自己强大的渠道和产品设计能力去争取用户,而微软在这个时候却用软件捆绑机器的销售方式统一了大多数的PC平台,一定意义上这也统一了PC行业。

回到现在正在发生剧烈变化的手机行业里,当手机作为基本语音通话工具时,固定标准是存在的,而当手机逐渐发展成为一个个人随身数据平台,类似于一台小型PC时,这似乎又回到了25年前PC行业的混乱时代,在这个混乱的各自为政的时代,用何种模式、何种平台来统一手机终端就成为了未来这个产业中最大的悬念,在这个悬念破解之后,又会在其背后引发一系列更大更复杂的产业变革。

统一平台下的入侵计划

中国是全球最大的移动市场,在2007年11月底,中国手机用户数已经超过了5.39亿。如此庞大的市场也驱使众多的风险投资及创业者在其中淘金,北京天腾时空信息科技有限公司就是其中之一。

这家由创业基金扶持的公司成立于 2005 年,号称拥有领先的移动多媒体通信和软件研发实力,他们正在开发适用于不同型号手机的第三方客户端软件。这项工作并不容易,因为中国市场上的手机型号实在是太多了,他们要根据系统的不同、机型的不同来对开发出的软件做出调整。尽管如此,天腾时空的CEO马腾对未来还是充满着信心:“我们正在构建一个移动生活圈,把互联网上的东西都带到手机上,我们的目标就是让所有人自由,让大家的网络生活摆脱那根网线和电源线。”

把互联网上的所有东西带进小小的手机终端,这个梦想驱使着中国无数的创业公司在其中寻找着机会,尽管他们坚信手机与互联网的结合是未来的趋势,但是以他们的力量,在中国移动把持的移动运营市场上还是显得太薄弱,现在有了全球最大的互联网公司谷歌的加入,互联网侵入手机的征程就显得不再那么坎坷了。

在谷歌看来,全球有30亿部手机,但是在大多数情况下,手机只被设定为语音通信和发送短消息的一种工具,通过手机上网获取及发布信息的功能被忽略掉了。“这给用户带来了不必要的麻烦,并限制了他们可以享用到的服务。”谷歌移动服务总监Andy Rubin认为,这样的缺陷实际上是过去几十年间移动通信行业迅猛发展的副产品,尤其是移动电话的市场割据更加深了这一点。在这种情况下,手机制造商有充足的商业理由来开发他们各自的受保护的软件,而且运营商也更在意他们眼前所能获得的利益。

这种“各自为政”的发展方式意味着应用服务的提供商必须花大量的精力来实现不同系统的兼容,他们大量的精力和技术人员都花在了如何让自己的软件能顺畅地运行在不同型号的手机上,而不是从用户的利益出发进行创新。

缺乏共享软件平台,也打击了移动领域外的商业力量的积极性,他们不愿意投入更多的时间和资金来挖掘手机更广泛的应用潜力。每当提起正在做手机客户端及免费WAP的公司,风险投资商们都会苦笑着摇摇头。“这种缺乏统一平台的做法使研发的成本居高不下,从而阻碍了创新。”Andy Rubin说。

谷歌的Android平台至少让我们能看到这样一种可能,即在开放的互联网运作模式下,一个如YouTube、Facebook这样的创意,都能通过一个统一的平台将服务惠泽于互联网上的每个人。这也是互联网上能产生对用户有利并促进商业公司收入增长的新服务及新模式的主要原因。

现在,要让互联网顺利的入侵进手机,谷歌所要做的就是用免费提供软件的方式先尽可能地统一手机的平台,然后再依托互联网向这个被自己洞开的门户源源不断地输入各种应用和内容。

“用这款诺基亚6131i手机坐公交车可以直接当公交卡使用”,“可以直接在诺基亚手机上学习新东方的英语课程。”2007年12月11日,在北京举办的诺基亚“完全互联生活2008”大会的一侧,众多诺基亚旗下的公司及合作伙伴展示着诺基亚基于移动互联网推出的新的应用服务。其全球副总裁邓元鋆也宣布诺基亚从2007年开始已经成为了一家互联网公司。2007年8月,诺基亚就已经在全球宣布推出了Ovi(芬兰语中意为“门户”)网络服务,服务内容包括了在线地图、在线游戏和在线音乐商店。

最近几年来,诺基亚在全球收购了一大批提供各种互联网应用服务的公司:2006年8月,斥资6000万美元收购了拥有160万首歌曲的音乐网站Loudeye;2007年7月,收购美国多媒体公司Twango,Twango主要提供为互联网上共享、发布多媒体信息搭建平台的服务;紧接着在9月份,他们又收购了一家名为Enpocket的移动广告公司;10月初,诺基亚又宣布以81亿美元收购美国的Navteq公司,Navteq是汽车导航系统、个人导航设备和其他企业数字地图及基于网络地图系统的主要供应商,同时还拥有提供美国交通信息的Traffic.com网站,这也是诺基亚迄今为止最大的一笔收购; 12月,诺基亚又收购了为手机用户提供共享电脑文件的Avvenu公司。

一系列的收购行动使这家全球最大的手机制造商逐渐成为了一家提供互联网综合服务的公司,通过整合一系列的应用,他们将互联网服务引入到了自己生产的手机平台上。

诺基亚是全球手机行业的霸主,在全球手机市场上的市场占有率接近40%,在中国,2007年的前三季度,他们就卖出了5050万部手机,目前约有超过1.3亿中国用户在使用诺基亚。作为一家处于产业链下游的公司,诺基亚已经不满足于只是制造和销售手机了,它不仅要牢牢掌握住终端,而且还想把握住这个未来的信息渠道。

谷歌成立的Android联盟在一定程度上也在威胁着诺基亚。诺基亚是另一个手机软件平台Symbian的控制者,虽然诺基亚控制的Symbian联盟不具备像Android联盟这样将移动终端、、运营、软件应用、设计等产业链的各个层面的力量都集成在一起的能力。不过依靠市场占有率的绝对优势,诺基亚并不惧怕手机领域的新闯入者,2007年上半年Symbian智能手机在全球共出货3460万部,Symbian智能手机累计出货量已经达到1.45亿部,在智能手机市场的份额达到72%。目前诺基亚、摩托罗拉和索尼爱立信手握全球六成以上的市场占有率,这意味着Symbian至少将在相当一段时间内横行智能手机市场。

诺基亚想用自己的实际行动证明,诺基亚的手机霸主地位是任何一家公司都无法撼动的,现在它在维持霸主地位的同时正主动向互联网靠拢。显然不用怀疑诺基亚适应变化的能力,它已有将近140年的历史,之前卖过劳保用品,也制造过电视机,因此,诺基亚公司坚信,与其自身所经历过的困难相比,目前向互联网转型的所有困难都显得微不足道。

重构手机价值链

整个移动通信领域,2007年最受关注的公司是苹果。自从6月份推出iPhone以来,iPhone至今已销售了超过140万部。更为重要的是,iPhone的出现开启了一个新型的与电信运营商分享收益的模式。

苹果运用的是彻底封闭型平台策略,苹果通过与当地电信运营商的业务捆绑销售产品,从用户收入中抽取一定分成。苹果在美国与运营商AT&T、在德国与T-Mobile、在英国与O2、在法国与Orange都采取了这样的合作方式。以苹果与AT&T的合作为例:苹果公司每月从已经与AT&T签署iPhone服务协议的每位用户中可抽取3美元费用;而新用户,苹果每月则可从每位用户中抽取高达11美元的费用。

为什么苹果能与移动运营商分成?答案之一就是,苹果的iPhone能通过WiFi的方式接入互联网,使得每位用户的ARPU值增加,为运营商带来除语音通话之外的数据业务收入。

曾传言苹果在2007年11月份与中国移动探讨过这种合作模式,但是对于靠语音及短信业务为主、且在移动产业链中处于主导地位的中国移动来说,他们并不喜欢手机产业中新出现的一些商业模式。这也证明了谷歌移动服务总监Andy Rubin对封闭的电信行业的判断,利润流向了少数的几家具有垄断性质的手机制造商与移动运营商那里,这种方式有碍于这个行业创新应用的产生。

随着谷歌这样的互联网公司将触角逐渐伸向电信领域,并且诺基亚也在主动向着互联网转型,曾经强硬封闭的运营商也只能慢慢地走向开放。移动业务价值链势必会有一个重构的过程。

据悉,谷歌打算用46亿美元竞拍美国700MHz的一个无线频段,并向美国联邦通信委员会(FCC)提出了参加拍卖的四个条件:要求获胜者向手机用户开放应用,开放设备,向移动运营商开放批发服务,向内容提供商开放网络。这就意味着,谷歌决意要彻底改变原有电信业的商业模式。除此之外,又有传言说谷歌会收购美国第三大电信运营商Sprint Nextel。

全球最大的互联网公司反过来收购一家电信运营商,如果这样的事情真的在2008年发生,那整个电信行业就会步入一个新的时代,不管怎么说,互联网入侵移动通信市场的序幕已经真的拉开了。

狂欢吧,身体!

在电影《迷失东京》中,女主角斯佳丽·约翰逊用好奇的眼神观看着一名玩着跳舞游戏的日本男子,他大汗淋漓,正操作一种需要手舞足蹈甚至360度旋转身体才能配合画面节拍的游戏。在东京,拥有这种运动式大型游戏机的游戏厅非常多,电影选择这个场景也是有意突出西方人对奇特的日式娱乐的惊讶。

然而,从2006年底开始,一款由日本任天堂公司开发的名为“Wii”的游戏机迅速风靡欧美家庭,这款电视遥控器般大小的游戏机正像上世纪80年代的卡拉OK一样,它凭借更接近自然的交互方式让全家老少都能参与到游戏中来。一时间,自由交互式操控的复兴给整个游戏机产业注入了新的活力。

在Wii诞生之前,游戏业多少有些尴尬:上班族没时间玩,老年人上手又太难,小孩子受到家长的严格监督和管制。实际上,大多数人的游戏经验都只停留在童年,游戏随着玩家长大成人遭到放弃甚至厌恶和抵制。多数人后天的发展不仅没有打开体验的更广阔天地,反而是一步步进入专业化、职业化的路径,再也没机会感受自身生活范围以外的世界。

Wii的出现改变了这一切,Wii的设计师宫本茂也因此成为英国《经济学人》的“年度创新大奖”的获得者,“当今电子游戏界的关键人物”的评价也从另一个角度证明了Wii的创新价值。

Wii的重要性在于,设计者宫本茂坚信,游戏必须与每个人的日常生活发生联系;游戏必须更加深入社会,得到整个社会的理解。这可以看作这位游戏设计大师的游戏世界观,正是这样的信仰产生了Wii的颠覆性创想。这种信仰也正好道出了游戏的本质——游戏本来就是生活的延伸,是人们工作之余的一种经验扩展,游戏让人获得习以为常的生活里难以体会到的感受,甚至是经验和知识,怎么能将大部分人隔离于游戏之外呢?

被束缚的自由

“硅谷海盗”乔布斯似乎比一般人更加难以忍受密密麻麻的按键和狭小的屏幕给人的束缚感,素来爱凭自我感受来判断技术趋势的他坚信:技术进步不应该成为束缚人自由的枷锁。iPhone证明乔布斯又“赌”对了。这款手机在把实体按键简化到只剩一个之后,更是利用多点触控(multi-touch)屏幕让自由轻松的触控体验发挥到了极致。他曾经描述,自己过去在使用手机时,看着密密麻麻的按键却找不到一个简单的功能时,头脑中就只有把手机砸掉的冲动,何谈使用它正常工作。

交互设计大师、“Macintosh”之父杰夫·拉斯基(Jaf Raskin)早就指出,好的设计不会让使用者养成对今后工作不利的习惯,但设计人员却经常有意无意地给用户设下坏习惯的陷阱。事实上,良好的设计应该在给用户带来帮助的同时,把对其未来可能出现的限制性障碍降到最低,保持使用者自由的可扩展性。

实际上,界面的不自由长久以来是一个被忽视并且有点积重难返的问题,越来越复杂的设备和使用者界面,大大增加了拉斯基所说的陷阱的数量,而解放使用者自由就需要下更大的决心和冒更大的风险颠覆传统。

当互联网信息过载让人们淹没在信息海洋中时,谷歌充当了颠覆者的角色,它只在网页上显示一个输入框;当手机开始附加各种原来PC的功能而变得日益复杂,学习成本上升时,iPhone开创性地只保留一个实体按钮。大刀阔斧地删减界面信息、按钮和选项,使用户不用进行多余的思考,即可快速进入想要达成的任务。

Wii mote被设计成客厅里最具亲和力的电视遥控器样式,让你接触无距离感,拿起它你就知道如何使用,而玩好它却又需要时间和技巧。正如谷歌简单的输入框背后有复杂的运算;苹果电脑薄薄的《使用说明》上第一句话是,“你的苹果电脑被设计为你能很快设置并且马上开始使用”,说明书的封面上印着一行灰字:“Congratulations,you and your MacBook were made for each other.”很有从此“人机合一,形影相随,只有我懂你”的性感意味。

正是因为这样,根据互补资源价值相关的原理,心理需求上互补的、无线的、可移动的和能带来真实触感的资源将变得稀缺而更有价值。这就是解放四肢的Wii和自由触控的iPhone之所以获得极大成功的深层社会心理学原理。

从芯片到设备的连锁爆发

基于社会心理学上的新需求是商业应用市场爆发的充分而非必要条件,Wii、iPhone等颠覆键盘和鼠标操作方式的产品之所以在2007年爆发,也必须有一些上游技术方面的必要条件。

实际上,从1980年施乐实验室帕洛阿尔托研究中心(PARC)的计算机“STAR”算起,“鼠标+图像化界面”在计算机上的应用已经走过了37年历史,最早的鼠标连线还是在其后部,更像是老鼠的尾巴 。其实正是CPU芯片计算能力的增强,使得计算机可以模拟出更丰富的图形化界面效果,鼠标这种低技术含量但实用的发明才有用武之地。

同样,iPhone的多点触控技术和更简单的Wii mote手柄的单点触控技术都不是新发明,它们之所以在2007年大行其道,除了符合人们普遍对密密麻麻的键盘和狭小屏幕的厌烦心理,更根本的原因是芯片计算能力的进一步增强。 LUPA开源社区’B!I*G2^ m5T-P1^

英特尔高级副总裁、前CTO 帕特·基辛格在谈到45纳米芯片的突破以及“多核”技术的未来影响时表示,更低功耗、更强性能和更丰富功能的芯片为无线的、模拟图形的和能感知触觉的计算提供了更好的技术准备。用户可以不用为了机器刻意改变行为习惯,而机器具备了更精确的识别人的动作并做出更丰富反馈的能力。

简单说,计算能力的进步使得我们已经可以抛弃“计算机中古时代”的键盘和鼠标,拥抱更现代、更性感和更自由的多点触控技术。它为交互性更强的应用打开了新的天地,比如,当iPhone靠近人脸时,多点触控屏幕会自动感应,让触控点全部关闭,因为这时候你正在接听电话,不需要任何按键,而当机器感受到你进入其他场景的信号时,你正好需要的按键又会聪明地出现。当机器能以人的自然动作为中心时,机器的操作大大降低了门槛,几乎不需要学习。

从购买和使用Wii的人群也可以看出,难以掌握复杂操作的学龄前儿童和对新的电子设备接受度最差的中老年人,都可以轻松学会使用Wii。这更加证明了过去繁琐的操作和束缚自然动作的低级交互方式扼杀了许多人获得新鲜体验的自由。Wii也成为了圣诞节流行的一款送给小孩子的礼品。虽然这会让使用者耗费更多的动作及体力,不过,却能够在操控过程中获得更多的乐趣。这种操作方式抛弃了目前所使用的键盘(按钮)、鼠标,将进一步体现出人性化操控界面的未来趋势。

到目前为止,Wii已经销售了超过1300万台,Xbox360早推出1年,但是已经不敌Wii的风头,以几十万台的差距落后,而PS3则只有500多万台售出,而且增长缓慢。虽然市场上开始出现拙劣模仿者和盗版游戏,就像当初MP3厂商模仿iPod一样,而且同类厂商开始降价应对Wii的冲击,但Wii依然在营造产品紧缺的状态,坚持不降价,保证了极高的利润率。任天堂的市值也一路攀升,超过索尼近一倍,成为日本证券市场上仅次于丰田的第二大市值的公司。

宫本茂已经沿着解放身体的思路把Wii驶入家庭健身器市场,Wii fit系列游戏包括了滑雪、跳舞、瑜伽、俯卧撑、呼啦圈和英式足球等。设备上,Wii又推出了平衡板(Wii balance),可通过在上面运动和改变姿势来操控屏幕上的虚拟角色。

微软的客厅战争也打算以多点触控技术作为杀手锏。去年春天,网上开始流传一段Microsoft Surface的视频,其演示的多点触控技术令观者赞叹不已。Surface大大的触摸屏可以响应很多种手势,而且,当你把电子设备放在它的触摸屏上时,Surface电脑马上会“看到”你的设备(通过隐藏的多个摄像头),并即时在屏幕上展现出各种可能的操作。比如你放个数码相机上去,它就会问你是否要查看照片,这种简单的操作一旦推向市场很可能像Wii一样改变家庭PC产业。

苹果公司也已经展示了下一代应用触控屏幕的台式电脑iMac,惠普公司的PDA产品iPaq在触控技术上也做了独特的尝试,主要是实现了在小小屏幕上用手指实现精确到毫米的控制。三星电子全球CEO尹钟龙也认为下一代手机要性感并且易于操作,今年他们推出了触摸屏手机SGH-P520,以应对来势汹汹的iPhone。而iPhone也在触感互动上深入探索,在申请按压虚拟按钮仍然有弹回感觉的技术专利。

苹果公司预计iPhone的销量在2008年1月14日的Mac world大会之前达到500万部,但从近20%的产品被购买后没有开通AT&T的服务,可推测这些产品是流入了非美国市场破解后使用,看来iPhone病毒式的扩散威力还只是开了个头。

iPhone的热销引发了同类厂商的跟随效应。去年,在芯片技术领域,国内厂商美芯半导体的销售人员惊奇地发现,他们投资的适合计算空间平衡改变的芯片,其销售业绩大大高于其他芯片产品。这些芯片主要应用于交互式的游戏机、可感知使用者行为的手机等设备上。

实际上,通过iPhone的热卖我们完全可以预见到,下一阶段的芯片必须为下一代手机等电子产品的这些特点做足准备:用容量有限的电池(意味着芯片的功耗必须是低的),功能越来越丰富(意味着芯片支持更多任务同时运行),越来越便携(意味着更好的支持无线通信)而且更讲求视觉和触感体验(意味着模拟计算等能力更强)。目前,唯一独立存在的GPU(图形处理器)厂商Nvidia公司,就是由于专注于这个越来越重视视觉体验的消费电子市场,才取得了这两年的高速成长。可以预测适合这些特点的芯片的爆发性需求应该会在2008年日渐明显。

另外,IT咨询顾问公司InStart的殷建松认为,2008年值得期待的是46英寸屏幕的电子设备的出现,iPhone和iPod Touch的屏幕是3.5英寸,而46英寸的屏幕视觉和触觉体验效果更好,并且仍然能放入口袋中。像iPod Touch一样仅仅作为游戏、娱乐和信息浏览器的工具也是46英寸的屏幕最为合适,它恰好是体验和便携性的平衡。

以上种种都为我们描绘出一个能够更加全面和丰富地感知人的自然行为的未来世界,这个世界的基础应该是一种无所不在的感知、收集、识别,最后做出更丰富和人性化反馈的计算机。在这个用户体验极大丰富和更自由交互的世界面前,引领时代的厂商们已经占好了跑道,各就各位。

0

[转]AT指令集及S寄存器


AT命令使计算机或终端与调制解调器通讯,所有命令行必须由ASCII字符“AT”开始并由 <Enter> 结束。除了A/指令和推出(缺省为+++)。这些将在后面讨论。字母”AT”用以提醒调制解调器注意,其后将有一条或多条命令出现, “AT”及其后的字母可以是大写或小写。

AT必须同为大写或小写。如”At”或”aT”是不允许的。

    一串命令可以写在一行里。为了便于阅读可以加或不加空格。命令中或命令间的空格会被忽略,命令行的最多字符数为39(包括”AT”)。在输入一条命令期间,可以用退格键(backspace)改正除”AT”以外的错误。若命令行中任一处出现语法错误,本行其后的内容将被忽略,并返回ERROR。大数带有超出正常范围的参数的命令将不被接收并返回 ERROR.本章列出所有设置调制解调器的命令。包括控制ACTIVE调制解调器的贺氏标准AT命令集。贺氏V系列命令集和扩展命令集

AT命令集的描述

      符号 * 表明该命令的设置可用AT&Wn命令存于两个用户方案中的一个

A/        重执行命令

重执行前一AT命令行,主要用于连接时占线,无应答或号码错误。这一命令必须单独构成一命令行并由”/”字符结束,(<Enter> 不能用于结束命令)。

+++       退出字符 缺省:+

切换调制解调器从在线状态到命令状态,而不会中断数据连接。可以通过改变S寄存器S2的值来改变这一字符。

AT=x      写入被选的S寄存器

这一命令将数值x写入当前被选的S寄存器,一个S寄存器可由ATSn命令选择,若 x 是一个数字,所有S 寄存器将返回 OK 响应。

AT?       读被选的S寄存器

  这一命令读并且显示被选的S寄存器的内容。一个S寄存器可由ATSn命令选择。

ATA       应答

它必须是命令行中的最后一条指令。调制解调器在应答方式下继续执行连接程序。在与远端调制解调器交换载波后进入连接状态,如果在由寄存器S7规定的时间内(缺省值=50秒)没有检测到载波, 调制解调器将挂机。在连接过程中,通过DTE输入的任何一个字母都将中断这一命令。

ATBn*     选择ITU-T或Bell模式 缺省=0

 ATB0 选择在1200和300bps速率下通讯的ITU-T V.22和V.21协议
 ATB1 选择在1200和300bps速率下通讯的Bell 212A和103协议

ATCn      载波控制缺省=1

包含这一命令只是为了保证兼容性,执行号只是返回一结果码而没有其它作用。
ATC1 正常传输载波切换

ATDn      拨号

它必须是命令行中的最后一条指令, ATD命令使调制解调器摘机后, 根据输入的参数拨号,以建立连接。如果不带参数,调制解调器摘机后,不拨号进入发起方式。

使用标点可使命令更易读懂。圆括号,连字符和空格符会被忽略。拔号命令行中如果出现了非法字符,则该字符及其后的内容将被忽略。调制解调器允许的拨号命令长度为36个字符。

参数:0-9 A B C D * # L P T R ! @ W , ; ^ S=n
0-9     DTMF 符号0到9
A-D     DTMF 符号A,B,C和D。在一些国家中不使用这些符号
*       “星”号(仅用于音频拨号)
#       “#”号(仅用于音频拨号)
J       为本次呼叫执行在可提供的最高速率下的MNP10链路协商(可选)
K       使本次呼叫MNP10链路协商期间电源电平可调(可选)
L       重拨上一次拨过的号码
P       脉冲拨号
T       双音频拨号
R       逆叫方式。允许调制解调器使用应答方式呼叫只能作为发起使用的调制解调        器, 必须作为命令行中的最后一个字符输入。
!       使调制解调器按照S29中规定的值挂机一段时间再摘机。
@       使调制解调器等待5秒钟的无声回答
w       按照寄存器S7中规定的时间,在拨号前等待拨号音。
,       在拨号过程中,按照寄存器S8中规定的时间,暂停
;       拨号后返回命令状态
^       打开呼叫音
()      被忽视,用于格式化号码串
-       被忽视,用于格式化号码串
<space> 被忽视,用于格式化号码串
S=n     用AT&Zn 命令存在地址n处的号码拨号

ATE*     命令回应           缺省:1

ATE0 关闭命令回应
ATE1 打开 命令回应

ATHn     摘挂机控制       缺省:0

ATH0 使调制解调器挂机
ATH1 当调制解调器处于挂机状态,使调制解调器摘机,返回响 OK,等待进一步的命令。

ATIn     识别

I0 报告产品代码
I1 报告ROM中预先计算的校验和
I2 计算校验和并与ROM中的校验和比较,返回”OK”或”ERROR”结果码
I3 报告固件修正
I4 报告OEM定义的识别串
I5 报告国家代码参数
I6 报告固件修正
I7 报告调制解调器数据泵类型

ATLn*    扬声器音量       缺省:2

ATL0 扬声器低音量
ATL1 扬声器低音量
ATL2 扬声器中音量
ATL3 扬声器高音量

ATMn*    扬声器控制       缺省:1

ATM0 关闭扬声器
ATM1 扬声器在呼叫建立握手阶段打开至检测到来自于远端调制解调器的载波后关闭
ATM2 扬声器持续开
ATM3 扬声器在应答期间打开。当检测到来自于远端的调制解调器的载波和拨号时关闭

ATNn*     调制握手       缺省:1

 ATN0 要求调制解调器S37选择连接速率,若S37=0,则连接速率必须与发出的上一条AT命令的速率相匹配。如果所选择的速率可用不止一个通讯标准实现(如Bell212A或ITU-T V.22 速率在 1200bps)调制解调器同时参考ATB 命令选择。ATN1 允许时使用双方调制解调器都支持的任一速率握手,使能够自动检测。在这一方式下,ATB命令被忽视,调制解调器只用ITU-T方式连接。

ATOn     进入数据在现状态 缺省:0

ATO0 使调制解调器从命令在现状态直接返回数据在线状态,不经过自动均衡。
ATO1 使调制解调器从命令在现状态返回数据在状态,经过自动均衡。

ATP*     设脉冲拨号为缺省
 

ATQn*    结果码显示        缺省:0

ATQ0 调制解调器向DTE发送结果码
ATQ1 禁止调制解调器向DTE发送结果码

点击查看S寄存器详解!

ATSn     设S寄存器n为缺省寄存器
 ATSn?    读S寄存器

读S寄存器中的内容,所有的S寄存器都可以读

ATSn=x   写入S寄存器

将 x值写入指定的S寄存器n

ATT*     设音频拔号为缺省
 

ATVn*    结束码类型 (消息控制)        缺省:1

ATV0 发送短型 (数字型) 结果码
ATV1 发送长型 (字符型) 结果码

ATWn*    协商进程报告                缺省:0

ATW0 不报告纠错呼叫进程
ATW1 报告纠错呼叫进程
ATW2 不报告纠错呼叫进程,CONNECT xxxx指示DCE速率。

ATXn*     扩展结果码            缺省:4

ATX0 调制解调器忽视拨号音和忙音。当由盲拨建立连接时,发送CONNECT信息。ATX1 调制解调器忽视拨号音和忙音。当由盲拨建立连接时,CONNECT XXXX 反映的是比特速率

ATX2 调制解调器忽视忙音,但在拨号前等待拨号音,如果5秒钟内检测不到拨号音,则发送NO DIAL TONE 信息,连接建立后 发送 CONNECT xxxx反映比特速率。

ATX3 调制解调器忽视拨号音,若检测到忙音,发送BUSY信息,当由盲拨建立起连接时, CONNECT XXXX 反映的是比特速率。

ATX4 如果5秒钟内检测不到拨号音,发送NO DIAL TONE 讯息,检测到忙音, 发送BUSY信息。连接建立后发送CONNECT XXXX 反映比特速率。

ATYn*     控制长间隔拆接         缺省:0

ATY0 不允许长间隔拆接
ATY1 允许长间隔拆接

ATZn      复位                缺省:0

重新调出由用户方案规定的动态配置
ATZ0 软复位并重新调出用户方案0
ATZ1 软复位并重新调出用户方案1

AT&An*    握手异常终止(备选)    缺省:1

 AT&A0 在握手时禁止用户进行异常终止。当拨号或应答时,握手不能异常终止,只有DTR 信号下降。AT&A1 用户可以在握手时进行异常终止.在接收到DTE的字符后,发起和应答可以在握手期间随时进行异常终止.

AT&Cn*     RS232-C DCD          设置缺省:1

AT&C0 DCD为ON,不论来自远端的调制解调器的数据载波的状态为何。
AT&C1 DCD 跟随来自于远端调制解调器的数据载波的状态

AT&Dn*    RS232-C DTR          设置缺省:2

决定了调制解调器与来自串口的DTR信号相关的操作。由于跟踪DTR的下降引起的操作在下表列出:

 
&D0 
&D1 
&D2 
&D3 
&Q0 
NONE 
&Q1 
&Q2 
&Q3 
&Q4 
&Q5 
NONE 
&Q6 
NONE 

1 调制解调器断开连接并发送结果码OK
2 若在数据状态下,则进入命令状态,并发送结果码OK
3 调制解调器断开连接并发送结果码OK, DTR 为 OFF时不能自动应答
4 调制解调器执行热启动(即与ATZ命令相同)

AT&Fn     重新调用工厂            设置缺省:0

&F0 重新调用作为V.42bis自动可靠方式的出厂缺省设置
&F1 重新调用作为MNP5自动可靠方式的出厂缺省设置
&F2 重新调用作为DIRECT方式的出厂缺省设置
&F3 重新调用作为MNP10方式自动可靠方式的出厂缺省设置(可选)

AT&Gn*    设置保护音            缺省:0

AT&G0 无保护音
AT&G1 无保护音
AT&G2 1800HZ保护音

AT&Jn*    电话插头选择          缺省:0
 

包含这一命令只是基于兼容性的考虑,没有任何功能
AT&J0 不操作任何功能
AT&J1 不操作任何功能

AT&Kn*    DTE/调制解调器流    控制缺省:3

AT&K0 关闭流控制
AT&K3 使用RTS/CTS流控
AT&K4 使用XON/XOFF流控
AT&K5 使用透明XON/XOFF流控
AT&K6 使用RTS/CTS和XON/XOFF流控(作为传真方式下的缺省)

AT&Ln*    传输线类型            缺省:0

AT&L0 拨号线
AT&L1 二线专线 (备选)
AT&L2 四线专线 (备选)

AT&Mn*    通讯方式

与AT&Q0-3相同

AT&Pn*    拨号脉冲占空比        缺省:0

AT&P0 39%61%占空比@10PPS
AT&P1 33%67%占空比@10PPS
AT&P2 39%61%占空比@20PPS
AT&P3 33%67%占空比@20PPS

AT&Qn*    通讯方式             缺省:5

AT&Q0 选择直接异步操作
AT&Q1 选择同步模式一操作
AT&Q2 选择同步模式二操作
AT&Q3 选择同步模式三操作
AT&Q4 选择自动同步模式操作
AT&Q5 选择纠错模式操作
AT&Q6 选择标准模式下的异步操作

AT&Rn*    RS232-C RTS/CTS   设置缺省:0

AT&R0 CTS跟踪RTS, 本地DTE发送的RTS由OFF变为ON经过由寄存器S26所规定的以10微秒为增量的延迟后,CTS变为ONAT&R1 调制解调器忽视RTS,除非使用了AT&K3命令,CTS保持为ON

AT&Sn*    RS232-C DSR       设置缺省:0

AT&S0 DSR始终为ON
AT&S1 DSR根据EIA-232-C的规定操作

AT&Tn*    测试和诊断            缺省:4

测试只能在非纠错方式下(标准或直接模式)下的异步操作中进行,除参数7和8以外,要中止正在进行中的测试必须首先敲入退出符。若S18非零,则测试经由S18规定的时间后自动中止并显示OK。AT&T0 终止进行中的测试
AT&T1 启动本地模拟回环
AT&T3 在本地启动远端数字回环·,若连接未建通,返回ERROR
AT&T4 允许调制解调器响应来自远端的进行远程数字环回测试的请求
AT&T5 拒绝调制解调器响应来自远端的进行远程数字环回测试的求
AT&T6 启动远端数字环回测试,若连接未通,返回ERROR
T&T7 启动远端数字环回自测试,若连接未建通,返回ERROR
AT&T8 启动本地模拟环回自测试
 

AT&V     看当今配置及用户参数

AT&V0 查看当前配置、用户方案和存储的电话号码
AT&V1 显示最后一次数据连接的详细情况

AT&Wn    储存用户参数              缺省:0

AT&W0 作为用户0存贮
AT&W1 作为用户1存贮

AT&Xn*    选择同步时钟源             缺省:0

AT&X0 调制解调器提供传输时钟,内部时钟。 AT&X1 DTE提供传输时钟,外部时钟。
AT&X2 由调制解调器从接外载波信号中提供传输时钟,从属接收时钟

AT&Yn*    指示缺省用户参数            缺省:0

在硬复位后可选择将使用的用户方案。
AT&Y0 选择用户方案0
AT&Y1 选择用户方案1

AT&Zn=x   储存电话号码(n=0-3)         缺省:0

将一36位数字电话号码(x)存放在一指定电话号码表中(n), 作以后拨号用(参见命令ATDS=n)

AT\An 最大MNP块的大小缺省:2
AT\A0 设最大块为64个字符
AT\A1 设最大块为128个字符
AT\A2 设最大块为192个字符
AT\A3 设最大块为256个字符

AT\Bn     发送中断信号(n=1-9)        缺省:3

当在非MNP连接期间输入此命令,调制解调器向远端调制解器发送一中断信号,中断信号长度参数为n值的100倍(以毫秒            为单位),在MNP模式下,输入此命令,调制解调器向远端调制解调器发送一链路注意码PDU

AT\Gn     调制解调器到调制解调器的流控制    缺省:0

AT\G0 关闭流控(XON/XOFF)
AT\G1 打开流控(XON/XOFF)
 

AT\Jn     DTE速率自动调整控制            缺省:0

AT\J0 关闭匹配线路速率的DTE速率调整功能
AT\J1 打开匹配线路速率的DTE速率调整功能
 

AT\Kn     中断控制                     缺省:5

在数据传输期间收到来自DTE的中断信号时,调制解调器作出如下响应AT\K0,2,4 调制解调器进入连机命令状态,而不向远端发送中断信号
AT\K1 调制解调器清空终端的缓冲器并向远端调制解调器发送中断信号
AT\K3 调制解调器不清空终端的缓冲器,但向远端调制解调器发送中断信号
AT\K5 调制解调器随发送的数据发送中断信号. 调制解调器在连机命令状态时数据传输过程中,做如下操作
AT\K0,1 调制解调器清空终端的缓冲器,并向远端调制解调器发送中断信号
AT\K2,3 调制解调器不清空缓冲器,但向远端调制解调器发送中断信号
AT\K4,5 调制解调器随传输的数据按顺序发送中断信号 在非纠错模式下收到来自DTE的中断信号时,调制解调器做如下操作
AT\K0,1 调制解调器清除终端的缓冲器,并向本地DTE发送中断信号
AT\K2,3 调制解调器不清除缓冲器,但向本地DTE发送中断信号
AT\K4,5 调制解调器随接收的数据按顺序发送中断信号
 
 

AT\Ln     MNP块传输控制                 缺省:0

AT\L0 对于MNP链路连接使用流模式
AT\L1 对于MNP链路连接使用块模式
 

AT\Nn     操作模式控制                 缺省:3

AT\N0 选择标准速度缓存模式(无纠错)
AT\N1 选择直接模式(等效于&M0,&Q0)
AT\N2 选择可靠模式,可靠连接失败会使调制解调器挂机
AT\N3 选择自动可靠模式
AT\N4 选择LAPM纠错模式,LAPM纠错连接失败会使调制解调器挂机
AT\N5 选择MNP纠错模式,MNP纠错连接失败会使调制解调器挂机

AT\Vn     单线连接信息                 缺省:0

AT\V0 关闭单线连接信息。
AT\V1 打开单线连接信息。

AT%C*    压缩控制                    缺省: 3

AT%C0 关闭数据压缩 AT%C1 打开MNP5数据压缩
AT%C2 打开V.42bis数据压缩
AT%C3 打开MNP5和V.42bis数据压缩

AT%En    开/关自动均衡                缺省:2
 

控制是使调制解调器自动监听线路质量并请求均衡(%E1)还是当线路质量不好时降速,线路质量好时升速。

AT%E0 关闭线路质量监听和自动均衡。
AT%E1 打开线路质量监听和自动均衡。
AT%E2 打开线路质量监听和速率自动调整上升或下降。
AT%E3 打开线路质量监听和采用快速挂机的自动均衡。

AT%L     报告接收灵敏度

返回接收信号的电平值,提供以下数值

001=-1dBm接收电平
002=-2dBm接收电平
: :
043=-43dBm接收电平

AT%On     选择应答或呼叫模式             缺省:1

AT%O0 选择应答式模
AT%O1 选择发起式模

AT%Rn     选择接收灵敏度 (适用於专线型号) 缺省:0

AT%R0 -43dBm
AT%R1 -33dBm
备选:适用於拔号线型号,JP2跳线:-33dBM 连接1-2 针;-43 连接2-3针

AT%Q     显示线路信号质量

返回眼图指标(EQM)值的高字节,该字节的表示范围为0到127,当这一数值为70DC±10(依赖于线路速率)或更大时,若已使用了AT%E1命令则调制解调器将自动均衡,标准连接时这一数在0到15之间。到60时则为较差连接。

AT#CIDn   呼叫者身份鉴定                 缺省:0

AT#CID=0关闭呼叫者身份鉴定
AT#CID=1打开DTE格式化形式的呼叫者身份鉴定
AT#CID=2打开DTE非格式化形式的呼叫者身份鉴定
AT#CID? 从调制解调器中恢复当前呼叫者身份鉴定方式
AT#CID=? 返回调制解调器允许模式的列表,表中各部分间用逗号隔开

AT-SDR=n  鉴别性振铃                    缺省:0

AT-SDR=0 允许任何振铃、并报告”RING”
AT-SDR=1 允许一类型振铃
AT-SDR=2 允许二类型振铃
AT-SDR=3 允许一及二类型振铃
AT-SDR=4 允许三类型振铃
AT-SDR=5 允许一及三类型振铃
AT-SDR=6 允许二及三类型振铃
AT-SDR=7 允许一、二及三类型振铃

振铃类型 
振铃时段模式 
响2秒、停4秒
响0.8秒、停0.4秒、响0.8秒、停4秒
响0.4秒、停0.2秒、响0.4秒、停0.2秒、响0.8秒、停4秒

AT+MS*     选择线路调制方式

命令格式为(336型号):
AT+MS=<模式>,<自动模式>,<最小速率>,<最大速率>
缺省值为 AT+MS=11,1,300,33600 (336型号)命令格式为(560型号):
AT+MS=<模式>,<自动模式>,<最小速率>,<最大速率>,
<x_law>,<rb_signal>,<maxup_rate>
缺省值为 AT+MS=12,1,300,56000,33600 (560型号)

AT+MS?  向包含所选选项的DTE发送一信息流

AT+MS=? 向包含所提供选项的DTE发送一信息流
 
 

自动模式 
选 项 
关闭自动模式 
打开自动模式 
模式 
  调制方式选择
可能 波特率(bps) <最小 波特率> <最大 波特率> 
V.21 300
V.22 1200
V.22bis 2400或1200
V.23 1200
V.32 9600或4800
10 
V.32bis 14400,12000,9600,7200 或4800
11 
V.34 33600,31200,28800,26400,24000,21600,19200, 16800,14400,12000, 
9600,7200,4800或2400
12 
V.90 56000,54667,53333,52000,50667,49333,48000,46667,45333,42667, 
41333,40000,38667,37333,36000,34667,33333,32000,30667,29333, 
28000 (560型号适用)
56 
K56flex 56000,54000,52000,50000,48000,46000,44000,42000,40000,38000, 
36000,34000,32000 (560型号适用)
64 
Bell 103 300
69 
Bell 212 1200

<x_law> 是一个可选的数字,用来确定码类型,选择是:

0 = u-Law 1 = A-Law注意:ATZ命令将复位<x_law>值为0 (u-Law)。
 

<rb_signaling> 是一个可选的数字,用于配置一个发送数据的调制解调器产生“丢失位”信号或不产生“丢               失位”信号;或配置一台接收数据的调制解调器检测“丢失位”信号或不检测“丢失位”信               号。选择是:

0 = 发送数据的调制解调器产生丢失位信号。接收数据的调制解调器检测丢失位信号。1= 发送数据的调制解调器不产生丢失位信号。接收数据的调制解调器不检测丢失位信号。

注意:ATZ命令将复位<rb_signaling>值为0。
 

Maxup_rate : 连接速率的最大值。

Trackback: http://tb..csdn.net/TrackBack.aspx?PostId=1535176

Previous Page

Random Posts Recent Comments

  • 女友糖尿病害我蛀牙 Says:

    汗一个…...

  • Htj06 Says:

    zhenyouchuangyi...

  • 电商圈 Says:

    试图该怎么建立啊,,怎在程序中是吸纳...

  • edward Says:

    看得人心旷神怡,好文,情不自禁的顶一下...

  • Daniel Says:

    我也在处理这个问题,没有找到好的方法。我用了楼上兄弟的方法,还是可以的。不知道您找到好的方法了吗、我暂时楼上兄弟的方法。...

  • 卡,卡 Says:

    弱弱问一句:博主,你博客的模板这样设计pv高吗?...

  • 站长工具 Says:

    博主,兔年快乐!...

  • health Says:

    great post!!I hope I can read more in your website....

  • pdu Says:

    好博文,支持分享...

  • 站长工具 Says:

    博主的文章很不错,我是站长工具-站长精灵的作者,一款专业的SEO工具软件(可以帮您提高博客的流量),想跟您交换个链接,不知可否...

Tag Cloud

arm audio blog brew cache class debug flash google html j2me java javascript Joke linux lua mobile mtk php python ror ruby server shell stream unix web windows 优化 动态加载 女人 女生 平台 开发 手机 技术 流媒体 测试 漫画 生活 男人 男生 缓存 芯片