2009/11/30
如果安装 Chrome OS 的系统免费怎样?
但是如果 安装了 Chrome OS 的netbook 免费送给你那会怎样? 你会不会想要一个? 比较可能的方案是: 将Chrome OS上网本与无线运营商的宽带服务绑定, 签一个 2年的每月 $30 的合约,白送你一个 Chrome OS 上网本!WIFI 自然是由Google 自家提供! Chrome OS 功能虽然弱,比起手机啥的还是要强大很多了吧?
这可以制造一个传统PC完全不同的用户体验,完全不一样的应用环境,完全不同的商业模式。如果用户完全适应了这样的 应用环境,还有谁会去买Windows? 微软的用户优势将当然无存! 有点耸人听闻? :)
也许这就是将来的互联网, 就如同 Sun Microsystem 的口号:网络就是计算机!
2009/11/20
Google Chromium OS 那点儿事儿
Google Chromium OS 的口号就是 “浏览器就是你的操作系统”!
很明显,Chromium的目标就是上网本。NVIDIA 在这里也后很多动作,特别是她们的 Tegra SoC芯片,在这个完全以浏览器为核心的平台上,用户尽可以忘掉自己用的是 Intel, AMD, X86, AMD64, or ARM。 其实这也符合Google的利益, 很难有x86的CPU卖到 20美元以下,而最贵的ARM CPU也就是20美元。 ARM架构的上网本,无疑会极大程度的推动 上网本的价格 更平民化。 越多的人拥有 上网本,就为Google提供了更多的用户。
这里的潜台词就是:“您上internet吗? 如果上internet就用Google吧!我们是最好的!” 听到这个,微软 一定要昏倒了。不过也不必反映过度,这终究只是一个新兴的领域。谁工作做的更到位,谁就会领先。 微软要加油了!
2009/10/02
从Graphic PU走向General PU
G300 作为 nVidia 的下一代GPU,3引入很多变化: 512 CUDA Cores, L1/L2 cache, GigaThread, ECC memory controller. 看起来都更像是一个General Processing Unit.
nVidia 还是有雄心壮志的,对于nVidia而言,这是一个大胆的尝试。
2009/09/28
Google Voice and bandwidth.com
The small high-tech company always be the source of creatures! Why we don't have these in China? //sigh
2009/09/02
VIM Wiki
这个非常简单,可以直接使用内置的`:sort' 命令。当然,还可以剔除重复的 `:sort u'.
2009/08/13
What's Byte Order Mark (BOM) in Unicode
A: No, a BOM can be used as a signature no matter how the Unicode text is transformed: UTF-16, UTF-8, UTF-7, etc. The exact bytes comprising the BOM will be whatever the Unicode character FEFF is converted into by that transformation format. In that form, the BOM serves to indicate both that it is a Unicode file, and which of the formats it is in. Examples:
| Bytes | Encoding Form |
|---|---|
| 00 00 FE FF | UTF-32, big-endian |
| FF FE 00 00 | UTF-32, little-endian |
| FE FF | UTF-16, big-endian |
| FF FE | UTF-16, little-endian |
| EF BB BF | UTF-8 |
链接是 UTF系列问题的权威解答FAQ,强烈建议阅读!
VIM unicode
if has("multi_byte")
set encoding=unicode
let &termencoding = &encoding
" Set default encoding as UTF-8 with BOM
setglobal fileencoding=utf-8 bomb
" Auto detect the file encoding BOM unicode, utf-8, GBK, Big5, Latin1
set fileencodings=ucs-bom,utf-8,cp936,cp950,latin1
" Walkaround the encoding problem for fenc=utf-8 && enc=ucs-2
augroup i18n
autocmd!
autocmd BufReadPost * if &fileencoding == "utf-8" | let &encoding = &fileencoding | endif
augroup END
endif
" Enable the Chinese characters
"set guifont=Bitstream\ Vera\ Sans\ Mono:h10:cANSI,NSimSun:h11:cGB2312
set guifont=Consolas:h11:cANSI,NSimSun:h11:cGB2312
set guifontwide=NSimSun:h11:cGB2312
2009/08/12
Google Wave Sandbox
- IM?
- Word?
- Blog?
- twitter?
- SNS?
It just likes someone said, "It looks more like a Microsoft product, not Google!" I think, it still takes time to figure out "What's a Wave?"
2009/07/14
Hex string to ASCII string in Perl
You can do
$to = join(",", map { unpack('H2', $_) } chr(length($from)), split(/(?=.)/, $from));or
$to = join(",", map { unpack('H2', $_) } split(/(?=.)/, pack('W/a', $from)));How to do the reverse??? A question for you :P
2009/06/30
An English-to-Chinese Dictionary based on the evil Google Suggest Quries
<SearchPlugin xmlns="http://www.mozilla.org/2006/browser/search/">
<ShortName>gDictionary</ShortName>
<Description>Google English-Chinese Dictionary</Description>
<InputEncoding>UTF-8</InputEncoding>
<Image width="16" height="16">data:image/png;base64,AAABAAEAEBAAAAEAGABoAwAAFgAAACgAAAAQAAAAIAAAAAEAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADs9Pt8xetPtu9FsfFNtu%2BTzvb2%2B%2Fne4dFJeBw0egA%2FfAJAfAA8ewBBegAAAAD%2B%2FPtft98Mp%2BwWsfAVsvEbs%2FQeqvF8xO7%2F%2F%2F63yqkxdgM7gwE%2FggM%2BfQA%2BegBDeQDe7PIbotgQufcMufEPtfIPsvAbs%2FQvq%2Bfz%2Bf%2F%2B%2B%2FZKhR05hgBBhQI8hgBAgAI9ewD0%2B%2Fg3pswAtO8Cxf4Kw%2FsJvvYAqupKsNv%2B%2Fv7%2F%2FP5VkSU0iQA7jQA9hgBDgQU%2BfQH%2F%2Ff%2FQ6fM4sM4KsN8AteMCruIqqdbZ7PH8%2Fv%2Fg6Nc%2Fhg05kAA8jAM9iQI%2BhQA%2BgQDQu6b97uv%2F%2F%2F7V8Pqw3eiWz97q8%2Ff%2F%2F%2F%2F7%2FPptpkkqjQE4kwA7kAA5iwI8iAA8hQCOSSKdXjiyflbAkG7u2s%2F%2B%2F%2F39%2F%2F7r8utrqEYtjQE8lgA7kwA7kwA9jwA9igA9hACiWSekVRyeSgiYSBHx6N%2F%2B%2Fv7k7OFRmiYtlAA5lwI7lwI4lAA7kgI9jwE9iwI4iQCoVhWcTxCmb0K%2BooT8%2Fv%2F7%2F%2F%2FJ2r8fdwI1mwA3mQA3mgA8lAE8lAE4jwA9iwE%2BhwGfXifWvqz%2B%2Ff%2F58u%2Fev6Dt4tr%2B%2F%2F2ZuIUsggA7mgM6mAM3lgA5lgA6kQE%2FkwBChwHt4dv%2F%2F%2F728ei1bCi7VAC5XQ7kz7n%2F%2F%2F6bsZkgcB03lQA9lgM7kwA2iQktZToPK4r9%2F%2F%2F9%2F%2F%2FSqYK5UwDKZAS9WALIkFn%2B%2F%2F3%2F%2BP8oKccGGcIRJrERILYFEMwAAuEAAdX%2F%2Ff7%2F%2FP%2B%2BfDvGXQLIZgLEWgLOjlf7%2F%2F%2F%2F%2F%2F9QU90EAPQAAf8DAP0AAfMAAOUDAtr%2F%2F%2F%2F7%2B%2Fu2bCTIYwDPZgDBWQDSr4P%2F%2Fv%2F%2F%2FP5GRuABAPkAA%2FwBAfkDAPAAAesAAN%2F%2F%2B%2Fz%2F%2F%2F64g1C5VwDMYwK8Yg7y5tz8%2Fv%2FV1PYKDOcAAP0DAf4AAf0AAfYEAOwAAuAAAAD%2F%2FPvi28ymXyChTATRrIb8%2F%2F3v8fk6P8MAAdUCAvoAAP0CAP0AAfYAAO4AAACAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAQAA</Image>
<Url type="application/x-suggestions+json" method="GET" template="http://suggestqueries.google.com/complete/search?client=suggest&hjson=t&ds=d&hl=zh-CN&q={searchTerms}"></Url>
<Url type="text/html" method="GET" template="http://www.google.com/dictionary?aq=f&langpair=en|zh-CN&hl=en&q={searchTerms}"></Url>
<SearchForm>http://www.google.com/dictionary</SearchForm>
</SearchPlugin>
2009/06/29
Small Skills of Command Prompt for Windows
1, How to do a substring in the CMD.exe -- %VAR_NAME:~POS
for example
set name=fingercatecho %name:~6,3%
set /p answer=Prompt Message Hereecho %answer%
2009/06/10
Inside the Erlang VM - focus on SMP
It is worth to read!
2009/04/22
VIMRC file
source $VIMRUNTIME/vimrc_example.vim
source $VIMRUNTIME/gvimrc_example.vim
set nobackup
set ch=1
set tabstop=4
set shiftwidth=4
"set softtabstop=4
set expandtab
colorscheme darkblue
"colorscheme oceandeep
" Enable the Chinese characters
set guifont=Bitstream\ Vera\ Sans\ Mono:h10:cANSI,NSimSun:h12:cGB2312
set guifontwide=NSimSun:h12:cGB2312
" display the syntax name under the cursor
map <F12> :echo synIDattr(synIDtrans(synID(line("."), col("."), 1)), "name")<CR>
" We can navigate the list by using the <F3> and <S-F3>
map <F3> :cnext<CR>
map <S-F3> :cprevious<CR>
" Let's help the tab navigation a little
map <F9> :tabprevious<CR>
map <S-F9> :tabnext<CR>
" Tlist
map <F5> :Tlist<CR>
set tags=./tags,../tags,../../tags
2009/03/15
C++ reinterpret_cast
说起 C++ 的类型转换,一共有四种:
- dynamic_cast
- static_cast
- reinterpret_cast
- const_cast
void FuncA(char *src, int len, int *pLen)
{
*pLen = len;
}
int _tmain(int argc, _TCHAR* argv[])
{
bool (*func_ptr) (char*, int);
func_ptr = reinterpret_cast<bool (*)(char*, int)>(&FuncA);
return 0;
}
当然了也可以用来转换 类成员函数,如:
class ObjectA
{
public:
void FuncA(char *src, int len, int *pLen)
{
*pLen = len;
}
bool FuncB(char *src, int len, int *pLen)
{
*pLen = len;
return false;
}
};
class ObjectB
{
};
int _tmain(int argc, _TCHAR* argv[])
{
bool (ObjectB::*func_ptr) (char*, int);
//ObjectA obj;
func_ptr = reinterpret_cast<bool (ObjectB::*)(char*, int)>(&ObjectA::FuncB);
return 0;
}
但是不能在普通函数和类成员函数之间转换。
2009/02/25
Install Safari4 without installation on Windows
2009/02/16
2009/01/20
Java GUI Effectives
- OpenGL-based render pipeline
As you know, Swing renders all the widgets by itself, that's the reason why some case the Java GUI looks so strange. :) Previously on Microsoft Windows, the DirectDraw and Direct3D was the only choice. But now you can use OpenGL pipeline as well.
It is disabled by default, but it can enabled by setting-Dsun.java2d.opengl=true
- Font Anti-Aliasing
It is an important feature for the font anti-aliasing. Now it is possible for Java application to specify the Font Anti-Aliasing feature by itself with system property:-Dawt.useSystemAAFontSettings=lcd - Metal and Nimbus Look and Feel
Metal (from Java 5.0) and Nimbus (from Java 6.0u10) are available in standard JRE distribution.
2009/01/16
C++ vtable
struct IObject {
virtual void MethodA() = 0;
virtual int MethodB(char *) = 0;
};
class A : public IObject {
public:
virtual void MethodA() {
std::cout << "method A" << std::endl;
};
virtual int MethodB(char *p) {
std::cout << "method B " << p << std::endl;
return 0;
};
public:
int MethodC(int c) {
std::cout << "method C non-virtual" << std::endl;
return ++c;
}
private:
int mem_;
};
int main(int argc, cahr *argv[])
{
IObject *pObj = new A;
pObj->MethodA();
pObj->MethodB(NULL);
// FIXME: This is a compile error!
pObj->MethodC(1); // error
delete A;
return 0;
};
C++ 运行时多态, 在执行代码中,主要通过 vtable 实现。让我们用C来重新描述上面的例子。
// VTABLE of class IObject
struct I_IObject {
void *pMethodA(void);
int *pMethodB(char *);
};
// Instance variant type of IObject
struct IObject {
struct I_IObject *vtable_this;
};
// VTABLE of class A
struct A;
struct I_A {
void *pDtor(A*)
};
// Instance object variant type of class A
struct A {
struct I_IObject *vtable_IObject;
struct I_A *vtable_this;
int *pMethodC(int);
int mem_;
};
void A_MethodA (void) {
printf("method A\n");
}
int A_MethodB (char *p) {
printf("method B %s\n", p);
}
int A_MethodC (int c) {
printf("method C non-virtual\n");
return ++c;
}
void A_dtor(struct A *_this) {
free(_this);
}
struct A *A_ctor() {
struct A *p = malloc(sizeof(struct A));
// Non-virtual function will be assign the value directly.
p.pMethodC = &A_MethodC;
/////////////////////////////////////////////////
// vtable initialization code
#ifdef A_MethodA
p.vtable_IObject->pMethodA = &A_MethodA;
#else
p.vtable_IObject->pMethodA = &IObject_MethodA; // Warning!
#endif
#ifdef A_MethodB
p.vtable_IObject->pMethodB = &A_MethodB;
#else
p.vtable_IObject->pMethodB = &IObject_MethodB; // Warning!
#endif
// vtable of A itself
p.vtable_self->pDtor = &A_dtor;
return p;
}
int main(int argc, char *argv[])
{
IObject *pObj = (IObject*) A_ctor();
pObj->vtable_self->pMethodA();
pObj->vtable_self->pMethodB(NULL);
A_dtor(pObj);
return 0;
}
C的定价物确实有些繁琐,不过基本的结构就是这样了。具体说来是这样:
1,如果一个类 virtual function, 这些 virtual funciton 就会被统一在一个 vtable 中;
2,包含 virtual function 的class 都会有一个指向 vtable structure的指针,如果当前类重写了 virtual function, 在对象初始化的时候相应的虚函数指针就会被替换;
3,虚函数的调用一律通过vtable定位,因为存在vtable这一层中继,就可以保证在运行态可以通过父类的指针执行指向子类对象的方法,因为类对象初始化的时候正确的重写了vtable的内容。
4,一个对象多一个包含virtual function的基类,就会在类变量的结构中多引入一个指向父类vtable structure的指针。在类对象初始化的时候,就需要更多的 vtable 初始化代码。:D
多重继承会导致 vtable 膨胀, Microsoft ATL 引入了一个 ATL_NO_VTABLE __declspec(novtable) C++ 扩展。关于这个,下回再说~~~
其实这个例子里面还有一个小问题, 不知道大家能不能看出来啊!
2009/01/15
2008/12/18
VIM is so cool
Adding and subtracting
*CTRL-A*
CTRL-A Add [count] to the number or alphabetic character at
or after the cursor. {not in Vi}
*CTRL-X*
CTRL-X Subtract [count] from the number or alphabetic
character at or after the cursor. {not in Vi}
The CTRL-A and CTRL-X commands work for (signed) decimal numbers, unsigned
octal and hexadecimal numbers and alphabetic characters. This depends on the
'nrformats' option.
- When 'nrformats' includes "alpha", Vim will change the alphabetic character
under or after the cursor. This is useful to make lists with an alphabetic
index.
- When 'nrformats' includes "hex", Vim assumes numbers starting with '0x' or
'0X' are hexadecimal. The case of the rightmost letter in the number
determines the case of the resulting hexadecimal number. If there is no
letter in the current number, Vim uses the previously detected case.
- When 'nrformats' includes "octal", Vim considers numbers starting with a '0'
to be octal. Other numbers are decimal and may have a preceding minus sign.
If the cursor is on a number, the commands apply to that number; otherwise
Vim uses the number to the right of the cursor.
For numbers with leading zeros (including all octal and hexadecimal numbers),
Vim preserves the number of characters in the number when possible. CTRL-A on
"0077" results in "0100", CTRL-X on "0x100" results in "0x0ff". Note that
when 'nrformats' includes "octal", decimal numbers with leading zeros are
impossible because they are indistinguishable from octal numbers.
The CTRL-A command is very useful in a macro. Example: Use the following
steps to make a numbered list.
1. Create the first list entry, make sure it starts with a number.
2. qa - start recording into buffer 'a'
3. Y - yank the entry
4. p - put a copy of the entry below the first one
5. CTRL-A - increment the number
6. q - stop recording
7.@a - repeat the yank, put and increment times
BlockChain 相关电子书
@copyright of Sam Chadwick - https://thehub.thomsonreuters.com/groups/bitcoin/blog/2017/09/10/blockchain-paper Blockchain Papers A c...
-
Today I do update the JavaScript syntax script for VIM to 0.7.2. Until now PRC 2007.01.30-21:37 my script got: Rating 332/99, Downloaded by ...
-
This is my first VIM syntax file. Personaly, I think it is better than the Javascript syntax packaged with the VIMRUNTIME packages. Origina...
-
Win32::GuiTest is a powerful tool for Windows GUI testing. I love it! This is a small function which allow GuiTest to send Mouse Events to t...