RECORDING MY FANTASY

Tuesday, September 05, 2006

让人苦笑不得的"中国版类似GoogleEarth软件"

 

 

吃完晚饭,在新浪的科技版上发现一条新闻- "中国版类似Goolge Earth软件问世".一开始没看清楚,还以为是Google Earth出中文版, Google Earth出中文版没什么稀奇的吧?后来仔细一看,原来是中国版的类似Google Earth软件,于是明白了-咱中国人也终于弄出功能的地图软件来了. 以前不是中国的砖家们狠命地砸google earth,说是泄露了咱中国人的军事机密吗?!怎么现在不来砸砸这个中国版的类似google Earth软件呢?!

里面附着几张图,第一张是启动画面, 和Google earth的及其非常而且很类似. 不是现在大家都在创新吗,怎么也不搞出一个好看的启动界面来,还学google的.

这个也就罢了,然后的文字介绍中有一段挺搞笑的, 说:

“我们的系统只用装在一个PC机上就可以带到任何地方使用”北京超图地理信息技术有限公司专用软件事业部总经理王尔琪对新浪科技说。他表示,Google Earth必须使用互联网接入连接到服务器才能访问使用地图,在没有网络环境的情况下Google Earth无法使用。

 

而且:

据王尔琪介绍,该系统内目前已经有了北京等大城市的地理信息,其他更多地理信息可根据需要随时加入到其中。目前该套系统中数据量已经达到2TB(1TB=1024GB),目前国内虽然也有公司做出过类似的大型软件,但是当数据量达到一定规模时,系统将变的非常缓慢。

 

我觉得在网络如此发达的现在,炫耀自己的系统只用装在一个PC机上就可以带到任何地方使用是非常弱智的一种提法,提个创新点也用不着提这种嘛! Google Earth接入服务器就能获得非常好的服务,如果他们要做一个单机版的google earth,肯定是轻而易举的事情啊! 现在网络时代, 就连microsoft都开始全面转型live.com了,还有人炫耀自己的系统装在pc上就能带到任何地方使用, 不可理解.

再者, 炫耀自己的系统数据量很大,竟然达到了"2TB"-俺的娘唉!这么大, 你让google的人看见了不笑话死你! 现在是个网络服务提供商,那家的系统数据量不是上TB的! 还有 说别人做的类似系统软件,数据量达到一定规模后就非常缓慢.-我觉得除非是做的非常非常的差,-比如象很多整天吃饱了不干事的国家事业单位的闲人们做的东西,稍微用一下大家都在使用的技术,实在不行,花点钱买个牛X的数据库,这些问题就解决了吧? 怎么可能会非常缓慢?! 真要是这样的话,那些做数据库的厂商都喝西北风去啊!

<end>

 

Monday, September 04, 2006

GTK+中国社区

今天才在google上面找到的,上面关于学习gtk的资料有很多,而且还有一个论坛。
听不错的。呵呵

Friday, September 01, 2006

cet english test website

http://cet.etang.com/demand_da3c51418e3dc478e2d1e1...

ATIRadeon DRI driver found on freedesktop.org

 

在水木上有人说使用这个版本的Radeon显卡的驱动,在测试中,fps提升不少,于是到freedesktop上面找了一下,

发现我的笔记本上的x300显卡所对应的是r300 系列的,于是从http://dri.freedesktop.org/snapshots/上面下了一个 r300-20060403-linux.i386.tar.bz2的源码包, 另外没有看到dri对内核版本和xorg有什么非常苛刻的要求,解压后里面有一个install.sh文件,直接以root权限执行它就ok了.

关于config.

网页上面有专门的介绍,如下:

Config
Also see 'radeon' and 'xorg.conf' manpages.
Section "Module"
...
Load "glx"
Load "dri"
EndSection

Section "Device"
Identifier "name" # your alias
Driver "radeon"

# XAA seems 5-10% faster than EXA for 3D, but
# contrary to the manpage XAA seems less stable on my system
# so try EXA when you experience hardlocks
Option "AccelMethod" "XAA"

# 1-8 Does not affect PCIE models.
Option "AGPMode" "1"

# 1/0 Does not affect PCIE models.
Option "AGPFastWrite" "1"

# 1/0 Increases 3D performance substantially
# seemingly in XAA mode only
Option "EnablePageFlip" "1"

# 1/0 Increases 3D performance substantially
# affected stability only positively on my system
Option "ColorTiling" "1"
EndSection

Section "DRI"
Group "video"
Mode 0660
EndSection


Further finer, and per application, userspace config is achieved with DriConf

centos 下 scim 安装

CentOS下,先下載SCIM的RPM包。目前還沒有針對RHEL4的RPM包,我安裝的是針對Fedora 3的包,還算穩定。下載地址:http://fedoraproject.org/extras/3/i386/。對于中文輸入,共有五個RPM包,scim、scim-pinyin、scim-tables、scim-tables-zh,以及scim-tables-additional。
安裝以前,先停運iiim的service,以免引起沖突。依次安裝前面的RPM包,然后執行一次scim -d命令。這樣,就可以在英文環境下,輸入漢字了。
Ubuntu下的情況差不多,也是安裝一下SCIM包,再執行一下scim -d命令。

 

从网上找着的.还没有体会过.

Thursday, August 31, 2006

SCIM on CentOS...

Use update-alternatives to change the xinput setting so that can use SCIM in en_GB enviroment.

# update-alternatives --install /etc/X11/xinit/xinput.d/en_GB xinput-en_GB /etc/X11/xinit/xinput.d/scim-anthy 60
# update-alternatives --install /etc/X11/xinit/xinput.d/en_GB xinput-en_GB /etc/X11/xinit/xinput.d/scim-canna 50
# update-alternatives --install /etc/X11/xinit/xinput.d/en_GB xinput-en_GB /etc/X11/xinit/xinput.d/scim-prime 50
# update-alternatives --install /etc/X11/xinit/xinput.d/en_GB xinput-en_GB /etc/X11/xinit/xinput.d/scim-skk 50
# update-alternatives --install /etc/X11/xinit/xinput.d/en_GB xinput-en_GB /etc/X11/xinit/xinput.d/none 10

If want to change back en_GB enviroment not to use any input method,
use

# update-alternatives --config xinput-en_GB

to change the "Best Version".

---------

this is on the webpage : http://www.debian.org.hk/blog/301

but I have not tested yet.

understanding linux network internals chinese translation webpage

http://www.hlbbs.com/linuxdoc/

However, this book is not completed yet. but many contents have been translated.

I would like to join them, but don't know whether there's chance.

Monday, August 28, 2006

硬盘 I/O 功率分析方法---from Intel software Network

在多核系统上处理IO的一些经验方法:来自intel

多线程代码的硬盘 I/O
让 我们看下 I/O 对多线程代码的影响,以及多线程要求从硬盘读取数据时的最佳 I/O 策略。便于分析,本文作者根据 IJG 库创建了一个内部位图到 JPEG 代码,可利用其将一系列位图转化成 JPEG。下图显示了该应用的串行版本。"读取" 框是指以 64 KB 块大小读取位图文件(写 .JPG 文件时也是相同的块大小)。读/写时间占用了总运行时间的约 41%,而 BMP2JPEG 占用了约 59%。与读取文件(每个 BMP 文件都约为 10 MB)文件相比,输出 JPEG 相当小,因此大部分的读/写时间都被读取占用了。

点击查看大图

在双核设备上执行多线程的一个方法就是分散成两个线程。一个线程可负责奇数的文件,而另一个线程负责偶数的文件,如下图所示:



另一种多线程的方式是,在单线程上执行缓冲读/写,然后在多线程上处理计算密集型转换操作:



最后一种方法是采用排队的 I/O。在所有读取请求排队处创建 I/O 完成端口,多线程则在完成端口等待读取请求完成。转换操作首先启动,完整的输出文件经过缓存,最终在一个线程中被写出。该方法提供了系统的负载平衡,以及轻松扩展线程数量的可能性。



下图所示为这些多线程方法的性能:



当 利用多线程实施来执行缓冲 I/O 和排队 I/O时,性能扩展了约 1.52 到 1.56 倍,但 I/O 操作仍在两个线程中执行时,性能不会扩展。性能表现不佳是由于竞争线程引起了硬盘颠簸。当两个线程都在运行,同时硬盘试图读取 64 KB 数据块时,会导致硬盘严重的寻道/旋转损耗。由于需响应两个线程中的请求,每次读取缓存块后都要重新定位读取磁头。这就导致了次佳的硬盘旋转,增加了总读 取时间,还掩盖了多线程的性能优势。如下能量图表明排序 I/O 提供了最佳的功率和性能优化:

is there live writer @Linux?

These days, I try Windows Live Writer on Windows XP to publish my texts, it's very smart and easy to use, and it supports other web blogs as well. It can know the setting of one of your blog, it can get the template ,too.
I really would like to know whether there are some tools like live writer uner Linux, who can give me some advise?

Saturday, August 26, 2006

First E-shop experience

today I have finished one trade with my classmate, he opened one shop on taobao.com recently. through this, I think it can raise its reputation.

Thursday, August 24, 2006

David Turner's LCD ClearTye-like pateches and packages for Debian sid

http://quanli.googlepages.com/davidturner%27slcdcl...

 

it's for sid,

if it's for ubuntu, I will try it .

google blog's response for my blog: Non-spam review

Hello,
Your blog has been reviewed, verified, and cleared for regular use so that
it will no longer appear as potential spam. If you sign out of Blogger and
sign back in again, you should be able to post as normal. Thanks for your
patience, and we apologize for any inconvenience this has caused.
Sincerely,
The Blogger Team

 

--------------------

I am so glad, thank you, google!

Wednesday, August 23, 2006

redhat的kernel hacker果然不是盖的!

今天从redhat的网站上找到一篇介绍 异步的零拷贝的网络IO的paper

-The Need for Asynchronous, Zero-Copy Network I/O

Problems and Possible Solutions

作者是Red Hat, Inc. 的Ulrich Drepper, 他的webpage是

http://people.redhat.com/drepper/

发现他的主页上面很多与网络相关的文章,看来是一位网络方面的expert了.

现在做一个 从高速网络上传输数据写到磁盘上 的程序,发现在网卡1Gib,磁盘RAID0(两个SATA的盘)的情况下,如果传输以太网packet的速度在七八十兆的情况下,被应用程序丢掉的包就有很多了(2,000,000个中可能有几千个,有时候甚至是上万个了,非常恐怖).

影响因素很多了,主要的是有这么几个方面:

1. 磁盘写的速度有限制, SATA的盘理论值也就在70MBps了,这还是在写连续的文件,没有考虑磁道,扇区,磁头在切换位置时产生的比较大的影响.

2.接收的线程在接收数据的时候需要做几次非常多余但又在目前情况下不得不做的内存拷贝, -这样造成1Gib的网卡也不能达到理论上的125MBps的速度, 在100MBps的时候,网卡就要丢很多的包了,这还没有说kernel在调度的时候所发生的未知行为造成的丢包.

其他 的不说,还没有细看作者的文章,只是看了一下abstract和里面的一些figure,发现提出的方法非常适合高速网络的高速传输,如果去掉几次不必要的内存拷贝,网络的性能肯定大有提高吧?-待细看了文章再说吧.

some useful website related with Linux Kernel development

http://www.lkml.org

http://www.kerneltrap.org/

Saturday, August 19, 2006

Hands-on Preview: Motorola Rokr E2 music phone


Linux graphics stack vendor Trolltech recently supplied LinuxDevices.com with a Motorola Rokr E2 music phone for (p)review. The phone appears to be the same E2 that shipped in China last week through carrier China Mobile, but semi-localized to the U.S., to demonstrate the phone's capabilities to stateside carriers and journalists.


The Linux-powered Rokr E2 phone has FCC approval, and could be sold in U.S., pending carrier interest. As a tri-band (900/1800/1900MHz) GSM/GPRS phone, the E2 would most likely be picked up by Cingular, which operates a 1900MHz GSM band in the U.S.

Motorola lists the following key features and specs for the Rokr E2:
  • 2-inch, 240 x 320 TFT (262k colors)
  • Fast data transfers based on "drag-and-drop" USB 2.0 PC networking
  • Dedicated side-mounted hardware music-player keys
  • Built-in FM radio
  • Support for Motorola's new iRadio service
  • Support for Bluetooth- and 3.5mm jack-based headsets
  • 1.3-megapixel camera with 15 fps video capture and playback
  • MMS (multimedia messaging service) client
  • Opera browser
  • Unique "airplane mode" claimed to allow safe listening onboard airplanes
  • PIM (personal information manager) with picture caller ID
  • "Screen3" technology for "zero-click access to news, sports, entertainment, and other premium content"
Motorola's answer to Sony/Ericsson "Walkman" phones

The E2 follows up Motorola's Rokr E1, a non-Linux phone that included a somewhat crippled version of iTunes, the music player found in Apple iPods. It also follows up several Linux-based music phones that shipped in Asia, including the original E680 and second-generation E680i.

The Rokr E2 has an endless list of smartphone capabilities -- messaging of all kinds, PIMs, 1.3MP camera, contacts synchronization, Java runtime, games, video/photo/music players, Opera browser, and on and on and on. However, it is primarily positioned as a combination mobile phone and music player. As such, it competes directly with Sony/Ericsson "Walkman" phones.

The Walkman phones have proven extremely popular, shipping nearly four million units last quarter and helping Sony/Ericcson increase its 2006 net profits 91 percent, year over year, according to WirelessWeek.

Given the runaway popularity of both mobile phones and portable music players, combining the two only makes sense. But can the Rokr compete?

Seamless music/call handoff


Rokr E2 buds
(Click to enlarge)
The Rokr E2's headset's right speaker wire has a little pod that dangles at mouth level. The pod houses a microphone, and a small push-button. When a call comes in, the music pauses, and the phone starts ringing -- perhaps playing back an mp3 file that has been designated as the ringtone. The user pushes the button on the little pod, and answers the call, talking into the microphone on the little pod. When the call finishes, the music resumes right where it left off.

There's no need to fish for music player and phone, and no need to switch headsets. This is a big step forward in convenience, compared to separate devices.

The handoff works with the Rokr's built-in FM radio, too.

Nifty tricks with USB client ports and loadable kernel modules


"Connections" menu,
showing USB port in
"Memory card" mode

(Click to enlarge)
Another really innovative and useful Rokr E2 feature is a USB client port that can be switched easily between "modem" and "storage card" modes, depending on whether the device is being used as a phone or as a portable music player. In either mode, the phone begins charging its battery over the USB connection as soon as it is plugged in.

In the default "modem mode," the phone presents itself to a host PC as a USB modem. On our Debian Linux test system, the phone showed up as /dev/ttyACM0, and caused the USB subsystem's "CDC-ACM" driver to be loaded, as shown in the following kernel messages:

Jul 12 18:18:27 hank kernel: usb 1-4: new high speed USB device using ehci_hcd and address 5
Jul 12 18:18:28 hank usb.agent[5318]: cdc-acm: loaded successfully
Jul 12 18:18:28 hank kernel: cdc_acm 1-4:1.0: ttyACM0: USB ACM device
Jul 12 18:18:28 hank kernel: usbcore: registered new driver cdc_acm
Jul 12 18:18:28 hank kernel: drivers/usb/class/cdc-acm.c: v0.23:USB Abstract Control Model driver for USB modems and ISDN adapters

After that, we launched KMobileTools, a handy KDE application that enabled us to control the phone from our computer, using serial commands. Dialing out and taking calls worked great. However, we could not test SMS functionality due to a lack of GPRS service in our secret Nevada testsite location.

Were GPRS service available, presumably we could have also tried using the phone as an Internet gateway for the PC. The phone can serve as an Internet data "modem" through either its USB or Bluetooth interfaces. Our prototype had no difficulty bonding with our Nokia 770 Internet tablet via Bluetooth, and we appreciated the Rokr's wealth of confirmation messages, a nice safety feature in the era of Bluesnooping and Bluesnarfing.

Next, we shut down KMobilePhone, unplugged the phone, and switched its USB system to "storage card" mode. When we plugged the phone back in, it then presented its SD card to the PC as a USB storage device, as shown by the kernel messages below:

Jul 12 18:34:26 hank kernel: usb 1-4: new high speed USB device using ehci_hcd and address 6
Jul 12 18:34:27 hank kernel: scsi2 : SCSI emulation for USB Mass Storage devices
Jul 12 18:34:27 hank usb.agent[5634]: usb-storage: already loaded
Jul 12 18:34:32 hank kernel: Vendor: Motorola Model: Phone Rev:
Jul 12 18:34:32 hank kernel: Type: Direct-Access ANSI SCSI revision: 04
Jul 12 18:34:32 hank kernel: SCSI device sda: 246016 512-byte hdwr sectors (126 MB)
Jul 12 18:34:32 hank kernel: sda: Write Protect is off
Jul 12 18:34:32 hank kernel: sda: sda1
Jul 12 18:34:32 hank kernel: Attached scsi removable disk sda at scsi2, channel 0, id 0, lun 0
Jul 12 18:34:33 hank scsi.agent[5661]: sd_mod: loaded successfully (for disk)
Jul 12 18:34:38 hank kernel: usb 1-4: reset high speed USB device using ehci_hcd and address 6

After that, we were able to mount the vfat-formatted card using (as root):
    mkdir /mnt/rokr; mount /dev/sda1 /mnt/rokr
We then cd'ed to the card and scp'ed some high-quality variable bitrate mp3 files from our network-based music server.

zd:# cd /mnt/rokr/
zd:/mnt/rokr# ls
MyMusic MyPhoto MyVideo
zd:/mnt/rokr# cd MyMusic
zd:/mnt/rokr/MyMusic# scp user@2nz:mp3/corey_harris/daily_bread/*.mp3 .
01_daily_bread.mp3 100% 7178KB 1.2MB/s 00:06
02_i_see_your_face.mp3 100% 4272KB 1.4MB/s 00:03
03_got_to_be_a_better_way.mp3 100% 4846KB 1.2MB/s 00:04
04_a_nickel_and_a_nail.mp3 100% 5180KB 1.3MB/s 00:04
05_the_sweetest_fruit.mp3 100% 5692KB 1.4MB/s 00:04
06_mami_wata_feat_olu_dara.mp3 100% 4428KB 1.1MB/s 00:04
07_lambs_bread.mp3 100% 5256KB 1.3MB/s 00:04
08_just_in_time.mp3 100% 4636KB 1.5MB/s 00:03
09_khaira.mp3 100% 4452KB 1.1MB/s 00:04
10_big_string.mp3 100% 7836KB 1.3MB/s 00:06
11_more_precious_than_gold.mp3 100% 5950KB 1.5MB/s 00:04
12_the_bush_is_burning.mp3 100% 4872KB 1.2MB/s 00:04
13_the_paech_feat_olau_darabonus_track.mp3 100% 13MB 1.2MB/s 00:11
zd:/mnt/cdrom/MyMusic# cd
zd:~# sync && umount /mnt/cdrom
Obviously, we could also have tried copying some JPEGs to the MyPhoto directory, or some video files to the MyVideo directory, after first converting them to .3gp format using something like ffmpeg or 3gpwiz.


The elusive item
(Click to enlarge)
For a while, we struggled to figure out how to create a playlist on the Rokr phone out of these new tracks, without having to laboriously load each song one at a time and "apply" them to a playlist. Eventually, we found the "rescan" utility that updates the Rokr's internal database of music files and id3v2 tags; it resides under a context-button in the top-level "My Media" interface layer, rather than anywhere within the music player itself. After that, we could quickly create playlists. However, it seemed strange that the update script would not simply be configured to run automatically at each SD Card remount (i.e., when the phone is unplugged from the PC).

Uh-oh... a show-stopper?

Next, we began listening to the Rokr, and trying it out with various headphones and systems to see whether it actually produced good sound. To our surprise and horror, the Rokr punted when asked to drive a car- or home-stereo's line-in jack, falling back on its tiny, tinny built-in speakerphone speaker after about half a second. This seems like a serious failing, since every other portable stereo device we've ever used could easily be plugged into our home and car systems.

The ear buds that come stock with the Rokr are not terrible. They are efficient and support loud listening levels in fairly noisy environments. However, when auditioned in a quiet environment, they seem to have poor high-frequency response, and tend to make everything sound slightly muffled, like FM radio.

Other headphones with standard 1/8th inch stereo mini-plugs worked while playing back mp3 files in our prototype Rokr, and sounded better than the stock earbuds. However, if you want to take advantage of the cool "music/call handover" feature described above, you have to use the stock earbuds. Additionally, the FM Radio refused to work with anything but the stock headphones, suggesting that it probably uses the mic wire as its antenna.

Anyhow, if the Rokr E2 achieves anything close to the popularity of the Sony/Ericsson's Walkman phones, aftermarket audiophile headphones and adapters for line-level audio out are likely to reach market in short order.

Another slight flaw, in our opinion, is that the Rokr E2's audio circuitry is switched off between each played-back file. This probably helps save some battery power. However, it produces audible static between each song in a playlist. Worse, clicking around the interface with headphones on and the volume turned up a bit becomes absolutely maddening, due to all the static pops and spikes. There's probably a way to disable interface feedback clicks -- everything else on the phone is customizable -- but it was not easily found.

Speaking of customizability, a few words about the Rokr's "Chameleon" interface are in order.

It's two -- Two! -- interfaces in one


Joystick and
context buttons
The Rokr does not have a touchscreen. Most operations are done using a tiny four-way+down toggle-stick, and two context-sensitive buttons, although the music player and other features are blessed with hardware buttons of their own (click here to see the music player's side-mounted hardware controls, and here to see the side controls for voice commands and keyboard locking).


Custom "Pokiok Falls"
wallpaper, stock icons

(Click to enlarge)
The Rokr E2 is one of the first phones equipped with Motorola's new "Chameleon" interface, a Motorola creation written on top of Trolltech's basic Qtopia Core graphics framework and interface toolkit. In the best tradition of Linux itself, and true to its name, Chameleon is highly user-customizable.

In stock form, the Chameleon interface offers a deceptively simple, task-based interface to Rokr features such as the camera, messaging system, Opera browser, and so forth. The interface is so simple that the Rokr could easily be mistaken on casual inspection for a midrange "feature-phone."


Control Panel-like
interface

(Click to enlarge)
However, from the homescreen, pushing the tiny joystick straight in brings up a Control Panel-like interface with a 3 x 4 matrix of graphical icons. This matrix resembles the home screen created by Trolltech for its Qtopia Phone Edition stack, albeit with more sophisticated animated icons. This Control Panel-like interface leads to application and configuration sub-menus three or four levels deep in some cases, exposing a lot of capability, and also a lot of complexity. However, complexity is mitigated by a clever "Customize Home" feature accessible from the homescreen.

The "Customize Home" feature lets the user configure the functionality of four graphical shortcut icons on the Rokr E2's homescreen. The shortcuts are actuated by toggling the phone's little joystick right, left, up, or down, providing instant access to frequently used applications or configuration screens of the user's choosing.

Novice users might leave the stock icons alone, for fast access to the camera, messaging, SIM card addressbook, and call log. Users with lots of mobile devices could add a Bluetooth connection shortcut, in place of the camera link, as shown in the photo at right, or perhaps a shortcut to Motorola's Motosync interface for backing up and sharing data with PCs.



Customizable UI
(Click to enlarge)
In time, most every user will likely wish to customize the phone's primary home interface according to their usage habits and taste. The icons can also be hidden, without affecting shortcut functionality.

In general, LinuxDevices.com testers liked the Chameleon interface, because it helped them quickly make use of the phone's features, without a big learning curve. Testers also praised the UI as "snappy, colorful, and entertaining" -- the button-press feedback audio clips sound like they were sampled from the Flaming Lips song, "Yoshimi Battles the Pink Robots, Pt. 2," one observer stated.

Some menu item names, such as "apply to playlist," are rather mystifying. However, the Rokr E2 we tested appears to have been configured by Trolltech as a demo unit. Hence, its Chinese-language interface may have been translated into English by Norwegians. Any E2's reaching U.S. customers will obviously benefit from interface improvements and commercial service integrations such as iRadio from both Motorola and carriers.

Conclusion


Rokr E2 kit
(Click to enlarge)
The Rokr E2 is an astonishingly functional device characterized by innovation, integration, and ingenuity. Physically, it's a gem to behold, much smaller and thinner than it looks in photographs. The device works well as a phone. The networking options are bountiful, even without WiFi. We liked the funny little music player well enough once we got used to it. The hardware buttons, such as keylock, are well-placed and well-chosen. The software user interface is fun and clever. Battery life is good... there's not much not to love here.

We do hope Motorola will fix the problem that prevents the Rokr E2 from driving line-level inputs, such as those found on home and car stereos. Motorola did not respond by publication time with regards to plans to fix the problem. Were it not for that failing, we could whole-heartedly endorse the Rokr, because it's a mighty fun gadget to have around. Look out, Sony/Ericsson...

For zillions and zillions of screenshots of the Rokr's "Chameleon" interface, see this Russian-language article. For another Rokr E2 preview, look here. More about Motorola's other Linux-based phones can be found here.

The Motorola Rokr E2 was originally expected to be available to consumers in the first half of 2006, priced between $200 and $250 with a two-year contract. Its radio technologies and carriers have not yet been announced. Further details will be announced upon consumer availability, the company says.

Monday, August 14, 2006

Thursday, August 10, 2006

Sunday, May 07, 2006

轻松面试找到理想员工-非官方的面试技术指南 -转自csdn

作者: 周思博 (Joel Spolsky)译: Chen Bin 编辑: Rick Ju 2000年3月23日
雇佣合适的人对于Fog Creek软件公司来说是非常关键的。在我们这个领域,有三类人可以挑选。在一个极端, 是哪些混进来的, 甚至缺乏最基本的工作技巧. 只要问这类人两三个简单的问题,再读一下他们的简历,就可以轻易地剔除他们。另一个极端的类型是 才华横溢的超级明星 这些人仅仅为了好玩就用汇编语言为Palm Pilot(一种手掌电脑)写了一个Lisp(一种人工智能编程语言)编译器。在这两种极端类型中间的是一大群不能确定水平的候选者,也许他们中的某些人能干些什么?这里的关键是明白超级明星和那一大堆属于中间类型的人的区别,因为Fog Creek软件公司只雇佣超级明星。下面我要介绍一些找出超级明星的技巧。

Fog Creek公司最重要的雇佣标准是:
有头脑, 并且完成工作
就是这些了。符合这样标准的人就是我们公司需要的员工了。 记住这条标准。 每天上床前背诵这条标准。我们公司的目标之一就是雇佣拥有这样的潜质的人,而不是雇佣懂某些技术的人。任何人所拥有的某些具体技术都会在几年内过时,所以,雇佣有能力学习新技术的人,要比雇佣那些只在这一分钟知道SQL编程是怎么回事的人对公司更划算一点。

有头脑确实是一个很难定义的品质。但是让我们看一些在面试时能提问的一些问题,通过这些提问,我们可以找出拥有这种品质的人。完成工作非常关键。看起来有头脑但是不能完成工作的人经常拥有博士学位,在大公司工作过,但是在公司中没有人听他们的建议,因为他们是完全脱离实际的。比起准时交活儿,他们宁愿对于一些学院派的东西沉思。这些人由以下特性而可以识别出来。他们总是爱指出两个根本不同的概念间的相似性。例如,他们会说“Spreadsheets是一种特殊的编程语言”,然后花一个礼拜写一篇动人的,智慧的白皮书。这篇白皮书论述了,作为一个编程语言,spreadsheet关于计算语言特性的方方面面。聪明,但是没用。

现在,我们来谈谈完成工作但是没有头脑的人。他们爱做蠢事。从来也没有考虑过将来得靠他们自己或者别的什么人来亡羊补牢。通过制造新的工作,他们成为了公司的负债而不是资产。因为他们不仅没有为公司贡献价值,还浪费了好员工的时间。这些人通常到处粘贴大堆的代码,而不愿意写子程序。他们是完成了工作,但是不是以最聪明的方式完成工作。
面试时最重要的法则是:
做决定
在面试结束时,对于被面试者,你不得不做一个直截了当的决定。这个决定只有两个结果:雇佣或者不雇佣. 回到你的电脑前,立刻用电子邮件通知招聘负责人你的决定。电子邮件的主题应该是雇佣或者不雇佣。接着你需要在正文中写两段来支持你的决定.

  • 没有其他的答案。永远不要说,“雇佣你,但是不能在我的团队中”。这是非常粗鲁的,因为你在暗示应试者没有聪明到能有和你一起工作的资格,但是以他的头脑适合进入那些天生输家队伍。如果你发觉自己被诱惑,想说出那句“雇佣你,但是不能在我的队伍中”,那么就简单的把这句话变成“不雇佣”再说出口。这样就没事了。甚至如果某个人在特定领域很能干,但是在别的队伍中将会表现不好,也是不雇佣。事物变化的如此之快,我们需要的是在任何地方都能成功的人。如果某些情况下你发现了一个白痴专家(拥有某些特殊能力的白痴),这个专家对于SQL非常,非常,非常的精通,但是除此之外什么也学不会,不雇佣。在Fog Creek公司他们没有将来。
    永远不要说,“也许,我吃不准”。如果你吃不准,意味着不雇佣。看,比你想象的容易的多。吃不准?就说不!同样,如果你不能作出决定,那意味着不雇佣。不要说,”嗯,雇佣,我想是这样的。但是关于...,我想知道 ...”。这种情况就是不雇佣。
    最重要的是记住这点,放弃一个可能的好人要比招进一个坏人强(译者按:中国有位哲人说过,宁可错杀一千,不可放过一个,呵呵)。一个不合格的求职者如果进入了公司,将要消耗公司大量的金钱和精力。其他优秀员工的还要浪费时间来修复这个人的错误。如果现在你还在犹豫,不雇佣。
    如果你是Fog Creek公司的面试官,当你拒绝了大量的应聘者时,不要为Fog Creek公司将因此雇不到任何人了而忧虑。这不是你的问题。这是招聘负责人的问题。这是人力资源部的问题。这是Joel(译者注: Fog Creek公司的老板,本文作者)的问题。但不是你的问题。不停地问自己,哪种情况更糟糕?一种情况是我们变成了一个庞大的,糟糕的软件公司,充斥着许多脑袋空空如可可果壳的家伙,另一种情况是我们是一个小而高品质的公司。当然,找到优秀的应聘者(并聘用他们)是很重要的。找到有头脑而且完成工作的人是公司中的每个员工的日常工作之一。但是当你作为Joel Creek公司的一员真的开始面试一个应聘者时,要装作现在正有很多优秀的人想打破头挤进Fog Creek公司。总之,无论找到一个不错的应聘者是多么的难,永远不要降低你的标准。
    但是你如何作出雇佣或者不雇佣这样艰难的决定?你只要在面试过程中不停地问自己:这个人有头脑吗?这个人能完成工作吗?要作出正确的回答,在面试时你必须问对问题。
    开个玩笑,下面我要问个有史以来最差的面试问题: “Oracle 8i中的数据类型varchar和varchar2有什么区别”这是一个可怕的问题。掌握这种琐碎的技术细节和Fog Creek公司想雇佣你之间没有任何联系。谁会去记这种东西?如果有在线帮助,你可以在15秒内找到答案。
    实际上,还有更差的问题,等会儿我会谈到的。
    现在我们要谈到有趣的部分了:面试时提哪些问题。我的面试问题清单来自于我去微软公司找第一份工作的经历。这里实际上有几百个微软面试问题。每个人都有偏爱的问题。你也可以发展一套自己的面试问题以及面试的个人风格,这样你就可以比较容易地作出雇佣/不雇佣的决定。以下是我成功使用过的一些面试技巧,
    在面试前,我读一遍应试者的简历,然后在一张纸片上随便写以下我的面试计划。这个计划实际上就是我要问的问题清单。以下是一个例子(用来面试程序员的):
    介绍
    应试者参加过的项目
    无法回答的问题
    C语言函数
    你满意吗?
    设计问题
    挑战
    你还有什么问题?

在面试前,我非常,非常当心,避免自己先入为主。如果在面试前你就已经想当然地认为,一个麻省理工的博士一定是一个有头脑的人。那么在接下来的一小时的面试时间内,无论那个麻省理工的博士说什么都不能改变你的最初印象。如果在面试前你就认为这个应试者是个傻瓜,那么他面试时说什么也无济于事。面试就象一个非常精巧的天平。一小时的面试结束后就要对一个人下结论是不容易的(但是你又必须在面试结束后得出结论)。一些不起眼的细节可能会影响最后的结论。如果你在面试开始前对于应试者有了一点了解的话,就好比天平的某一端加上了重重的砝码。这样面试本身就会变得没有用处了。以前有一次在面试前,一个招聘负责人跑进我的房间说,“你肯定会爱上这个家伙的!" 对一个男孩? 天哪,这简直让我发疯。我本来应该说,“嗯,如果你这么确定我会喜欢他,为什么你不干脆雇佣他,何必让我浪费时间来面试?”但是那时我还太年轻幼稚, 所以还是面试了那个人。当这个家伙开始说一些蠢话时,我对自己说,“哇塞,这应该是个例外情况,也许是大智若愚。”我开始带着玫瑰色眼镜看他了。于是我以说“雇佣”结束了面试,虽然他是一个糟糕的面试者。接下来发生了什么事?除了我,其他的面试官都说,不要雇佣这个人。教训是,不要听别的人的话,在面试应试者前不要四处打探这个面试者的情况。最重要的是不要和别的面考官谈论应试者,除非你们都已经作出了独立的判断。这才是科学的做法。


作为面试步骤的第一步,介绍的目的是让应试者放轻松。我通常花30秒钟,讲一下我是谁,接下来面试会如何进行。我总是使得应试者确信,我们关心的是他(她)如何解决问题的,而不是他(她)的最终答案是对还是错。顺便说一下,面试时,你不要和应试者隔着一个桌子坐着,否则在你和面试者之间就有了一个障碍,并且暗示着一种比较正式严肃的气氛,这样应试者就很难放松了。更好的办法是把桌子靠墙放着,或者和应试者坐在桌子的同一边,这样有助于应试者放松。只有应试者不会因为紧张而表现失常,你才能更有效的进行面试.


第二步的内容就是问应试者最近做了些什么项目。对刚毕业的学生, 如果有论文就问问论文, 没有的话, 就问问他们做过什么很喜欢的大作业.例如,有时候我会问一下,“你最喜欢上学期哪门课程?不一定要和计算机相关的。”事实上,如果应试者回答的课程和计算机没有关系,我会比较高兴。有时候你会发现这个计算机系应届生选择了尽可能少的计算机相关课程,但是却选修了很多和音乐相关的课程。但是他(她)却说最喜欢的课程是《面向对象数据库》。哼哼,不错啊. 不过如果你直接承认你喜欢音乐胜于计算机, 而不是在这儿胡说八道的话, 我会更高兴一点。
当面试有工作经验的人时,你可以让他们谈一下前一份工作。


我问这个问题的目的是在寻找一样品质:热情。在应试者谈到他(她)最近做过的项目时,你观察到以下迹象都是不错的:
谈到他们做过的项目时变得热情洋溢;他们的语速更快,语言更生动活泼。这说明他们对某些东西有兴趣,有热情(因为现实中有许多人对所做的项目根本漠不关心呢)。即使他们激动地表达对做过的项目的负面感情,这也是一个好的信号。“我曾经为上一个老板安装Foo Bar Mark II,但他是个傻瓜!”表现出热情的人就是我们要雇佣的人。差的应试者对工作根本就不关心,所以根本不会激动。一个非常好的信号是当应试者很激动地谈论上一份工作,以至于暂时忘记了他们正在被面试。有时候应试者刚开始面试时表现的很紧张 -- 这是很正常的现象,所以我通常忽略不计。但是当他们谈到单色计算艺术(Computational Monochromatic Art)时,这个家伙变得极端兴奋, 一点都不紧张了。不错,我喜欢这样的应试者,因为他们关心他们做的事。(什么是单色计算艺术?拔掉你的电脑显示器的电源就可以看到了)
能认真地去解释事情。某些人被我拒掉的原因就是他们不会用普通人能明白的语言去解释他们做过的项目。很多工科专业的人总是以为所有人都知道Bates理论(译者注: Bates Theorem,一种经济学的理论)或者Peano公理组(译者注: Peano's Axioms,数论中的一些定理)是什么。如果应试者开始满口行话了,让他们停一停,然后你说,“能帮我个忙吗?就是为了练习一下,你能把刚才说的用我老祖母也能理解的话说一遍吗?”但即便如此, 有些人还是继续用那些术语, 而且根本没法让人明白他们在说什么。天哪!
如果这个项目是一个团队项目,看看他们是否在有承担领导责任的迹象?一个应试者可能会说:“我们用的是X方法,但是老板说应该是Y,而客户说应该是Z。”我会问,“那么你怎么做的?”一个好的回答可能是“我设法和团队中别的人开了个会,然后一起搞出个办法...”坏的回答看起来象,“嗯,我什么也不能做。这样的问题我解决不了。”记住,聪明并且能完成工作。要搞清楚某人是否能完成工作的一个办法就是看看他(她)过去是否倾向于完成任务。事实上,你可以主动要求他们给你个例子证明他们能担任领导作用,完成任务。-例如克服公司的陈规陋习。
现在我们谈谈清单上的第三款,无法回答的问题。这很有趣。这个主意的关键在于问一些不可能有答案的问题,就是想看一下应试者怎么办。“西雅图有多少眼科医生?”“华盛顿纪念碑有多重?”“洛杉机有多少加油站?”“纽约有多少钢琴调音师?”
聪明的应试者猜到你不是要测验他们的专业知识,他们会积极地给出一个估计。“嗯,洛杉机的人口是七百万;每个人平均拥有2.5辆轿车...”当然如果他们的估计完全错误了也没有关系。重要的是他们能积极地试着回答问题。他们可能会试着搞清楚每个加油站的储量。“嗯,需要四分钟给一个储油罐加满油,一个加油站有十个油泵每天运行十八个小时...”他们也可能试着从占地面积来估计。有时, 他们的想法的创造力让你吃惊. 而有时, 他们直接要一个LA的黄页去查。这都是好迹象。
不聪明的应试者则被难住了。他们目瞪口呆地望着你,好像你来自火星。你不得不提示:“嗯,如果你想建立一个象洛杉机那么大的城市,你需要建立多少个加油站?”你还可以提示他们:“加满一个储油罐要多长时间?”不过,这些榆木疙瘩脑袋还是只会坐在那里发呆,你得拖着他们往前走才行。这类人不会解决问题,我们可不要这样的人。

关于编程问题,我通常要求应试者用C语言写一些小函数。以下是我通常会出的题目:
将一个字符串逆序
将一个链表(linked list)逆序
计算一个字节(byte)里有多少bit被置1
搜索给定的字节(byte)
在一个字符串中找到可能的最长的子字符串,该字符串是由同一字符组成的
字符串转换成整数
整数转换成字符串(这个问题很不错,因为应试者要用到堆栈或者strev函数)

注意,通常你不会希望他们写的代码多于5行,因为你没有时间理解太长的代码。
现在我们来详细看一看其中几个问题: 第一个问题: 逆序一个字符串。我这辈子还没有见过那个面试者能把这题目一次做对。所有的应试者都试图动态生成缓冲区,然后将逆序的字符串输出到该缓冲区中。问题的关键在于,谁负责分配这个缓冲区?谁又负责释放那个缓冲区?通过这个问题,我发现了一个有趣的事实,就是大多数认为自己懂C的人实际上不理解指针和内存的概念。他们就是不明白。这真叫人吃惊,无法想象这种人也能做程序员。但他们真的就是!这个问题可以从多个角度判断应试者:
他们的函数运行快吗?看一下他们多少此调用了strlen函数。我曾经看到应试者写的strrev的算法竟然只有O(n^2) 的效率,而标准的算法效率应该是O(n),效率如此底下的原因是因为他们在循环中一次又一次调用strlen函数。
他们使用指针运算吗(译者按:原文为pointer arithmetic,指的是加减指针变量的值)?使用指针运算是个好现象。许多所谓的“C程序员”竟然不知道如何使用指针运算(pointer arithmetic)。当然,我在前文说过我不会因为应试者不掌握一种特定的技巧而拒绝他。但是,理解C语言中的指针不是一种技巧,而是一种与生俱来的才能。每年一所大学要招进200多个计算机系的新生,所有这些小孩子4岁就开始用BASIC语言在Atari 800s写冒险游戏了。在大学里他们还学Pascal语言,学得也很棒。直到有一天他们的教授讲了指针的概念,突然,他们开始搞不懂了。他们就是不能再理解C语言中的任何东西了。于是90%的计算机系学生转系去学政治学。为了挽回面子,他们告诉朋友,他们之所以转系是因为他们计算机系英俊貌美的异性太少。许多人注定脑子里就没有理解指针的那根弦。所以说理解指针是一种与生俱来的品质,而不是一种单纯的技巧。理解指针需要脑子转好几个弯,某些人天生不擅长转这几个弯。


第三个问题可以考考面试者对C的位运算的掌握,但这是一种技巧,不是一种品质,所以你可以帮助他们。有趣的等他们建立了一个子函数用来计算byte中为1的位的数目,然后你要求他们优化这个子函数,尽量加快这个函数的运行速度。聪明的应试者会使用查表算法(毕竟这个表只有 256个元素,用不了多少内存),整个表只需要建立一次。跟聪明的应试者讨论一下提高时间/空间效率的不同策略是十分有意思的事情. 进一步告诉他们你不想在程序启动时初始化查询表。聪明的面试者可能会建议使用缓冲机制,对于一个特定的byte,只有在第一次被查询时进行计算,然后计算结果会被放入查询表。这样以后再被查询时直接查表就行了。而特别特别聪明的面试这会尝试有没有建立查询表的捷径,如一个byte和它的置1的bit数之间有没有规律可循?
当你观察应试者写C代码时,以下一些技巧会对你有帮助:
事先向应试者说明,你完全理解,没有一个好的编辑器光在纸上写代码是困难的,所以你不在乎他们手写的代码是否看上去不整洁。你也完全明白没有好的编译器和调试器,很难第一次就写出完全没有bug的程序,所以请他们不必为此担心。
好程序员的标志:好程序员写完“{”符号后,通常立刻跟上“}”符号,然后再在当中填上代码。他们也倾向于使用命名规则,虽然这个规则可能很原始。如果一个变量用作循环语句的索引,好程序员通常使用尽可能少的字符为它命名。如果他们的循环语句的索引变量的名字是CurrentPagePositionLoopCounter,显而易见他们写代码的经验还不够多。偶尔,你会看到一个C程序员写下象if (0==strlen(x))一样的代码,常量被放在==的左边。这是非常好的现象。这说明他因为总是把=和==搞混,已经强迫自己养成这种习惯以避免犯错。


好的程序员在写代码前会订一个计划,特别是当他们的代码用到了指针时。例如,如果你要求逆序一个链表,好程序员通常会在纸的一边画上链表的草图,并表明算法中的索引指针当前移动到的位置。他们不得不这样做。正常人是不可能不借助草图就开始写一个逆序链表的程序的。差的程序员立刻开始写代码。

不可避免的,你会在他们的程序中发现bug,于是我们现在来到了第五个问题:你对代码满意吗? 你可能想问,“好吧,bug在哪里?”这是来自地狱的一针见血的问题,要回答这个问题可要大费口舌。所有的程序员都会犯错误,这不是问题。但他们必须能找到错误。对于字符串操作的函数,他们通常会忘记在输出缓冲区加上字符串结束符。所有的函数,他们都会犯off-by-one错误(译者按:指的是某个变量的最大值和最小值可能会和正常值差1)。他们会忘掉正常的C语句结尾的分号。如果输入是零长度字符串,他们的函数会运行错误。如果malloc调用失败而他们没有为此写好错误处理代码,程序会崩溃。一次就能把所有事情做对的程序员非常,非常,非常地少.不过要是真的碰上一个的话, 提问就更有意思了. 你说,"还有Bug"。他们会再仔细地检查一遍代码。这个时候, 观察一下他们内心是否开始动摇了, 只是表面上勉强坚持说代码没有问题。总之,在程序员写完代码后,问一下他们是否对代码满意是个好主意。就像Regis那样问他们!(译者按,Regis Philbin是美国ABC电视网的游戏电视节目主持人,他的口头禅是“这是你的最后的答案吗?”)
第六部分:关于设计的问题。让应试者设计某样东西。Jabe Blumenthal,Excel的原始设计者,喜欢让应试者设计房子。Jabe说,曾经有一个应试者跑到白板前,画了一个方块,这就是他的全部设计。天哪,一个方块!立刻拒绝这样的家伙。你喜欢问什么样的设计问题?
好的程序员会问更多的信息。房子为谁造的?我们公司的政策是,我们不会雇佣那些在设计前不问为谁设计的人。通常,我会很烦恼我得打断他们的设计,说“事实上,你忘记问这个房子是给谁设计的了。这个房子是给一群长颈鹿造的。”


笨笨的应试者认为设计就像画画,你想画什么就画什么。聪明的应试者明白设计的过程是一系列艰难的权衡。一个很棒的设计问题是:设计一个放在街角的垃圾箱。想一想你得做多少权衡!垃圾箱必须易于清空,但是很难被偷走;易于放进垃圾,但是碰到狂风大作,里面的垃圾不会被吹出来;垃圾箱必须坚固而便宜。在某些城市,垃圾箱必须特别设计,以防恐怖分子在里面藏一个定时炸弹。


有创造力的应试者会给出有趣而独特的设计。我最喜欢的问题之一是为盲人设计一个放调味品的架子(译者按:原文为spice rack,老外的厨房里有个专门放调味品的架子,上面放了很多小罐罐,里面装了各种各样的调料)通常许多应试者的建议是把布莱叶文(一种盲人使用的文字)刻在放调料的罐子上,这样文字会卷起来而变形。我碰到一个应试者,他的设计是把调料放在抽屉里,因为他觉得水平地感知布莱叶文比垂直地做更方便。(试试看!)这个答案这样有创意,使我震惊!我面试了有一打得程序员,从来没有人想到过类似的答案。这样有创意的答案确实跃过了普通人考虑问题的条条框框。仅仅因为这个答案太有创意了,而且应试者别的方面还过得去,我雇佣了这个应试者,他现在已经成为Excel团队中一个优秀的项目经理了(译者按,本文作者曾在微软工作过)。


总是争取一个确定的了结。这也是完成工作的特质的一部分。有时候应试者会犹犹豫豫不能作出一个决定,试图回避困难的问题,留着困难的问题不作决定就直接向下进行,这很不好。好的应试者有一种推动事情自然地前进的倾向,即使你有意把他们拖回来。如果关于某个话题的讨论开始原地打转变得没有意义了,好的应试者会说,“嗯,我们可以整天谈论这个,但是我们得做点什么。为什么我们不开始...”


于是我们来到了第七部分,挑战。这部分很好玩。在面试中留心一下, 当面试者的回答绝对的百分之百毫无争议时, 你可以说: " 嗯, 等一下等一下." 然后花上两分钟玩一下魔鬼的游戏(译者按,原文为devil's advocate,魔鬼代言人指的是违背自己的良知,为错误邪恶的观点辩护). 记住一定要在你可以肯定他正确时和他争论。这个很有意思.
软弱的应试者会屈服。那我就和他说拜拜了。
坚定的应试者会找到一个办法说服你。他们会以肯尼迪总统的口才来说服你,“也许我误会了你的意思,”他们这样开头,但是正文仍是坚定地站稳立场。这样的人我就雇佣。
不得不承认,面试双方的地位并不是平等的。有可能应试者由于害怕你的权力而不敢于你争辩。但是,好的应试者有足够的热情和勇气坚持正确的观点,他们由于热切希望说服你而会暂时忘记正在被面试。这样的人就是我们要雇佣的人。


最后,可以问一下应试者有什么想问的。一些人喜欢看看应试者这时是否会问一些聪明的问题。这是市面上流行的面试书籍的标准技巧。我个人不在乎应试者问什么,因为这时我已经做了决定。麻烦在于,应试者也许已经见了5、6个人,进行了好几轮面试,他们可能很累了,以至于不能为每轮面试都准备一个聪明而独特的问题。所以如果他们没有可问的,没关系。


我总是留下面试的最后5分钟来推销我的公司。这很重要。即使我不打算雇佣眼前这个应试者。如果你幸运的找到一个很棒的应试者,你当然愿意做任何事情说服他(她)来你的公司。即使他们不是好的应试者,你也要尽力让他们为Fog Creek公司激动,这样面试结束时他们会对Fog Creek公司留下一个很好的印象。记住,应试者并不仅仅是可能的雇员,他们也是顾客,也是我们公司的推销员。如果他们觉得我们的公司很棒,他们也许会推荐朋友来面试。


啊哈,我记得我说过我会给出一些应该避免的非常不好的反面的试题例子。
首先,避免不合法的问题。有关种族,宗教,性别,出生国,年龄,服役记录,是否老兵,性取向,生理障碍的问题都是不合法的。即使他们的简历说他们1990年在军中服役,也不要问有关问题。也许这会让他们愉快地谈论在海湾战争中的经历。但是你的问题还是不合法的。如果简历上写着他们上过Technion in Haifa, 不要问他们是否是以色列人, 即使只是为了闲谈, 因为这是违法的. 下面有一个很好的不合法的例子。点击这里有很多关于什么是违法的讨论。(但是这个网站的其余问题够愚蠢的。)
其次,不要在问题中给予应试者暗示,我们公司喜欢或者不喜欢什么样的员工。我能想到的一个例子是问应试者是否有小孩或者是否结婚了。应试者也许会想我们不喜欢有家庭拖累的员工。
最后,不要问那些脑筋急转弯的题目,例如6根火柴怎么拼出4个三角形。象这样的灵机一动的问题是不能看出应试者是否有“有头脑/完成工作”的品质。


面试与其说是科学不如说是艺术。但是只要你记住有头脑/完成工作这个原则,你就可以应对自如。有机会就问问你的同事他们喜欢的面试问题和答案。这是我们公司员工午饭时热衷的话题之一。

blogspot.com上不去,blogger还有什么意义!?

一直搞不明白为什么要把blogspot.com给封了,却能够不用代理直接访问blogger.com,

blogspot.com上不去,blogger还有什么意义!?

Wednesday, February 22, 2006

grub下,安装 linux-2.6.*内核

# mkinitrd /boot/initrd-2.6.4.img 2.6.4
# pwd
/usr/src/linux-2.6.4
# cp arch/i386/boot/bzImage /boot/bzImage-2.6.4
# cp System.map /boot/System.map-2.6.4
# cd /boot
# ln -s System.map-2.6.4 System.map

Tuesday, February 21, 2006

uboot 在 ARM s3c2410 上移植过程zz from http://www.blogcn.com/user64/iceisland

http://www.blogcn.com/user64/iceisland/blog/25363937.html
总述
u-boot是德国DENX小组的开发用于多种嵌入式CPU的bootloader程序,在LINUX下可以通过CVS来得到当前正在开发的u-boot软件。当前版本号:u-boot 1.0.2,见include/version.h中的定义。
#cvs –dserver:anonymous@cvs.sourceforge.net:/cvsroot/u-boot login
#cvs –z3 –d server:anonymous@cvs.sourceforge.net:/cvsroot/u-boot checkout –P u-boot
本文讲述S3C2410中u-boot的移植过程:S3C2410的硬件配置是:
l CPU:S3C2410
l NOR: 16M,INTEL EP28F128J3A
l SDRAM:64M, MICRON 48LC16M16A2-75 B
l DM9000AVICOM (10/100M) 网卡
l USB HOST一个
配置自已的主板
l 阅读Makefile文件,在Makefile文件中添加两行:
s3c2410_config: unconfig
@./mkconfig $(@:_config=) arm arm920t s3c2410
其中ARM是CPU的种类, arm920t是ARM CPU对应的代码目录,s3c2410是自已主板对应的目录。
l 在board目录中建立s3c2410目录,复制smdk2410目录中的内容(cp smdk2410/* s3c2410)。
l 在include/configs/目录下复制smdk2410.h(cp smdk2410.h s3c2410.h)
l 修改ARM编译器的目录名及前缀
本人ARM编译器的目录是在:/opt/host/armv4l/bin/armv4l-unknown-linux-
把CROSS-COMPILE = arm-linux- 改为实际目录:如
CROSS-COMPILE = /opt/host/armv4l/bin/arm4l-unknown-linux-
l 完成之后,可以测试一下你的配置:
#make s3c2410_config
#make
编译应该在processor.h中出错
l 修改processor.h中:
union debug_insn
{
u32 arm;
u16 thumb;
}
修改成:
union debug_insn
{
u32 arm_mode;
u16 thumb_mode;
}

l 编译成功,编译好的程序同smdk2410一样。
l 注:如果第一次修改后编译没有在processor.h中出错,而在examples目录出错,认真检查以上修改(修改的内容不正确),并在 examples目录中运行touch命令(不运行touch还会出错,可能uboot Makefile没有写好,没查原因),再编译。
生成最基本的u-boot, 没有功能,只能起动
l 修改程序连接地址:
在board/s3c2410中有一个config.mk文件,用于设置程序连接的起始地址,因为会在u-boot中增加功能,所以留下6M的空间,修改33F80000为33A00000。
l 为了以后能用uboot的GO命令执行修改过的用loadb或tftp下载的u-boot:在board/s3c2410的memsetup.S中标记符”0:”上加入五句:
l mov r3, pc
l ldr r4, =0x3FFF0000
l and r3, r3, r4 //以上三句得到实际起动的内存地址
l aad r0, r0, r3 //用GO命令调试uboot时,启动地址在RAM
l add r2, r2, r3 //把初始化内存信息的地址,加上实际起动地址
u 0标记符0, 原来存在的标记符)
l 用SJF软件通过jtag口下载编译的u-boot, 启动!读取环境块时CRC出错,然后进入SMDK#。
l 把MIZI vivi中的PrintHexWord, PrintWord拷过来, 这样可以在调试汇编时可以打印一些信息,但其中有的 PrintHexNibble中有缺陷,ldr r0, [r2, r0] 应改为ldrb r0, [r2, r0],这样可以在四字节对齐的系统中使 用。
INTEL nor flash操作功能
l INTEL 的28F128,在board目录中找到CMI主板有此FLASH,把cmi中flash.c拷到s3c2410目录代换原来的flash.c。
l cmi 中的flash.c在写入时要交换字节,所以删除它的write_short()和wirte_buff()函数,把ep7312主板目录中 flash.c的wirte_word()和wirite_buff()函数复制过来。把flash.c中的FLASH_BASE0_PRELIM改为 CFG_FLASH_BASE。把FLASH_BLOCK_SIZE改为0x20000,(E28F128J3A flash中块的大小是128K)。
l 把s3c2410.h中的flash内容由原来的:
1. #define PHYS_FLASH_1 0x00000000 /* Flash Bank #1 */
2. #define CFG_FLASH_BASE PHYS_FLASH_1
3. #define CONFIG_AMD_LV400 1
4. #if 0
5. #define CONFIG_AMD_LV800 1
6. #endif

7. #define CFG_MAX_FLASH_BANKS 1 /* max number of memory banks */
8. #ifdef CONFIG_AMD_LV800
9. #define PHYS_FLASH_SIZE 0x00100000 /* 1MB */
10. #define CFG_MAX_FLASH_SECT (19) /* max number of sectors on one chip */
11. #define CFG_ENV_ADDR (CFG_FLASH_BASE + 0x0F0000) /* addr of environment */
12. #endif
13. #ifdef CONFIG_AMD_LV400
14. #define PHYS_FLASH_SIZE 0x00080000 /* 512KB */
15. #define CFG_MAX_FLASH_SECT (11) /* max number of sectors on one chip */
16. #define CFG_ENV_ADDR (CFG_FLASH_BASE + 0x070000)
改为:
1. #define PHYS_FLASH_1 0x00000000 /* Flash Bank #1 */
2. #define PHYS_FLASH_SIZE 0x01000000 /* 16 MB */
3. ##define CFG_FLASH_PROTECTION
4. define CFG_FLASH_BASE PHYS_FLASH_1
5. #define CFG_MONITOR_BASE PHYS_FLASH_1
6. #define CFG_MAX_FLASH_BANKS 1/* max number of memory banks */
7. #define CFG_MAX_FLASH_SECT 128/* max number of sectors on one chip */
8. #define CFG_FLASH_ERASE_TOUT (2*CFG_HZ) /* Timeout for Flash Erase */
9. #define CFG_FLASH_WRITE_TOUT (2*CFG_HZ) /* Timeout for Flash Write */
10. #define CFG_ENV_IS_IN_FLASH 1
11. #define CFG_ENV_ADDR (PHYS_FLASH_1 + 0x60000)
12. #define CFG_ENV_SIZE 0x20000 /* Total Size of Environment Sector */
l 把cmd_mem.c中的cmd_get_data_size函数的default_size全改为1, 默认以字节显示,更直 观,并且不会出现地址对齐错(data abort)。而在do_mem_mw()及mod_mem()中加入:
if(addr2info(addr) != NULL)
{
printf(“can’t wirte or modify in flash! Use cp instead.\n”);
return 0;
}
以使mw和mm命令不能修改flash中的数据,而只开放cp修改flash中的数据。
l 改board/s3c2410/flash.c中的flash_erase(),把start = get_timer(0)移到for(), 以去掉flash_erase timeout 错误。
设置FLASH和SDRAM时序
根据28F128J3A-150,这是一150ns的flash, 所以把flash时序设为最慢。把s3c2410设成202.8MHZ, 并且工作在异步模式, 修改memsetup.S。

实现网卡功能
本人的网卡是DM9000,在uboot中没有相应的驱动,所以自已写了一个网卡驱动。
1. 把驱动拷到drivers/dm9000.c
2. 在drivers/Makefile中加入dm9000.o
3. 在lib_arm/board.c中修改CS8900=>DM9000
4. 在include/configs/s3c2410中加入以下几句
#define CONFIG_DRIVER_DM9000 1 /* we have a CS8900 on-board */
#define DM9000_BASE 0x08000000
#define DM9000_BUS16 1 /* the Linux driver does accesses as shorts */
#define CONFIG_ETHADDR 08:00:3e:26:0a:5b
#define CONFIG_NETMASK 255.255.255.0
#define CONFIG_IPADDR 192.168.2.120
#define CONFIG_SERVERIP 192.168.2.122

实现USB功能
1. 在include/configs/s3c2410中的CONFIG_COMMANDS中加入:
l CFG_CMD_USB |l CFG_CMD_FAT |2. 并在文件中加入以下设置:
l #define CONFIG_USB_OHCI
l #define CONFIG_USB_STORAGE
l #define CONFIG_USB_KEYBOARD
l #define CONFIG_DOS_PARTITION
l #define CFG_DEVICE_DEREGISTER
l #define CONFIG_SUPPORT_VFAT
l #define LITTLEENDIAN
3. 这时usb start 和 usb info等功能正常,而其它一些功能不正常。
4. 功能fatls 不正常,修改fs/fat/fat.c
l 没有把VFAT的UNICODE字符转换过来,加入UNICODE字符转换函数。Uni2ansi(), 增加slot2str()的cp936版, 增加一个toshort()。
l 加入#define cp936
l 在fat_getenv()中有一个对齐错误,修改fat.h使fatbuff字对齐。
l 在do_fat_read()中加入两句,以消除列根目录错误。
l 在board/cmd_fat.c中加入两句,以消除没有usb storage设备时的错误:
if(!dev_desc)
printf(“Not init storage usb device:\n usb start\n usb info\n usb scan\n”);
5. 修改fs/fat/fat.c
get_cluster()函数中加入 if(size / FS_BLOCK_SIZE > 0), 以防读文件时不能成功读出。
引导LINUX
现在我们可以引导LINUX了。
l 要引导bzip2的linux核,把CFG_MALLOC_SIZE改为大于4M
l 把编译好的LINUX内存,通过uboot/tools/mkimage转换成uboot格式
1. mkimage -A arm -O linux -T kernel -C bzip2 -a 30000000 -e 30008000 -n 'linux kernel' -d vmlinux1.bz2 c
2. mkimage -A arm -O linux -T kernel -C gzip -a 30000000 -e 30008000 -n 'linux kernel' -d vmlinux.gz b
3. mkimage -A arm -O linux -T ramdisk -C gzip -a 0 -e 0 -n 'init ramdisk' -d ramdisk.image.gz ramdisk
l 在include/configs/s3c2410.h中加入:
1. #define CONFIG_BOOTARGS "initrd=0x30800000,0x200000 root=/dev/ram init=/linuxrc console=ttyS0,115200"
2. #define CONFIG_BOOTFILE "vmlinux_for_uboot.gz"
3. #define CONFIG_BOOTCOMMAND "bootm 0x80000 0x1a0000"
0x80000为内核在flash中的位置。
0x1a0000为ramdisk.image.gz在flash中的内容。
4. #define CFG_LOAD_ADDR 0x30800000 /* default load address */
l 在lib_arm/armlinux.c的do_bootm_linux中加入:
1. memcpy ((char *)CFG_LOAD_ADDR, (char *)data, len);
2. data = CFG_LOAD_ADDR;
把ramdisk复制到0x30800000位置的RAM中
3. 定义以下配置,把信息传入LINUX核心的TAG区
#define CONFIG_SETUP_MEMORY_TAGS
#define CONFIG_INITRD_TAG
#define CONFIG_CMDLINE_TAG



常用U-BOOT命令介绍

1. ?得到所有命令列表
2. help: help usb, 列出USB功能的使用说明
3. ping:注:只能开发板PING别的机器
4. setenv: 设置互环境变量:
5. setenv serverip 192.168.0.1
6. setenv ipaddr 192.168.0.56
7. setenv bootcmd ‘tftp 32000000 vmlinux; kgo 32000000’
8. saveenv: 保存环境变量
9. 在设置好环境变量以后, 保存变量值
10. tftp: tftp 32000000 vmlinux, 把server(IP=环境变 量中设置的serverip)中/tftpdroot/ 下的vmlinux通过TFTP读入到物理内存32000000处。
11. kgo: 起动没有压缩的linux内核,kgo 32000000
12. bootm:起动UBOOT TOOLS制作的压缩LINUX内核, bootm 3200000
13. protect: 对FLASH进行写保护或取消写保护, protect on 1:0- 3(就是对第一块FLASH的0-3扇区进行保护),protect off 1:0-3取消写保护
14. erase: 删除FLASH的扇区, erase 1:0-2(就是对每一块FLASH的0-2扇区进行删除)
15. cp: 在内存中复制内容, cp 32000000 0 40000(把内存中0x32000000开始的0x40000字节复制到0x0处)
16. mw: 对RAM中的内容写操作, mw 32000000 ff 10000(把内存0x32000000开始的0x10000字节设为0xFF)
17. md: 修改RAM中的内容, md 32000000(内存的起始地址)
18. usb:
l usb start: 起动usb 功能
l usb info: 列出设备
l usb scan: 扫描usb storage(u 盘)设备
19. fatls:列出DOS FAT文件系统, 如:fatls usb 0列出第一块U盘中的文件
20. fatload: 读入FAT中的一个文件,如:fatload usb 0:0 32000000 aa.txt
21. 把USB中的aa.txt 读到物理内存0x32000000处!
22. flinfo: 列出flash的信息
23. loadb: 准备用KERMIT协议接收来自kermit或超级终端传送的文件。
24. nfs: nfs 32000000 192.168.0.2:aa.txt , 把192.168.0.2(LINUX 的NFS文件系统)中的NFS文件系统中的aa.txt 读入内存 0x32000000处。

Tuesday, January 03, 2006

取消农业税了,网友的评论-全是实话阿,可惜没人听

农民手里的那点田地更本养不活一家人,所以都进城打工,老实说种田是亏本的是最辛苦的,农民逼迫自己种田这么多年受尽苦累,没有假日,没有保险,没有养老,所以要靠儿子来养老,这就是为什么计划生育的原因,现在进城打工人家还要你暂住,控制低素质人员进城,我真不明白在我们国家把善良的劳动人民叫低素质人员,叫暂住人员,真不明白我们的劳动人民靠什么过日子,请不要把我们的善良的百姓逼上死路,大家都知道我们的医院,我们的学校,我们的税收,我们的消费都是需要很多钱的,而我们的劳动人民是没有任何保障的,生病了靠坚强的意志挺过来,孩子要上学就把口粮卖了,把牲畜卖了,把耕牛卖了,还不够,把裤子当了实在不行卖血吧!我可怜的劳动人民你们真苦啊,只有粮食价没涨,种子化肥,农药,除草剂价钱疯涨,还有的黑心的买给你假货,在遇上天公不作美的年头,实际上这样的年头很频繁,田地里根本长不出粮食,但税收却依旧,交不出怎么办?村里乡里自然有人来牵牛,搬电视,拆房,打人,这就是我们劳动人民的日子,我就想了,我不想过这样的日子,我不种田了行不行我去打工行不行?不种田可以但税收不会少收你的用现金抵更好,实际上到城市也受到了非人的待遇,有人歧视你,说你是乡下人破坏人家的生活影响市容,还有就是要办暂住,还要限制进城,我们的劳动人民是最美的人,比选美选出来的小姐还要美,美来自内心,来自辛勤劳作,我就要质问我们的国家我们的父母官了,请问你为你们的子民提供了什么?当你们的在包厢里享受欢乐的时候可想到人民可能还没吃的还没穿的,当你们抱着MM亲热的时候可想到还有多少青年找不到老婆,你们住在高级别墅里享受生活温暖的时候可曾想到劳动人民是否还是住草棚,你们出门还有轿车劳动人民有什么?自行车可有一辆?百姓要办点什么事情要求官老爷,真的要用求的,今日的局面完全是当官的不作为造成的,劳动人民已经为社会发展贡献出了所有的力量,现在该是做点什么的时候了,不然当我们再一次举起镰刀斧头的时候一切将难以挽回,这是忠告也是警告,本人是农民没念过多少书文笔不通。

Monday, January 02, 2006