DoneVII Alvin & Gavin Personal Blog

[转]昨天我狠狠教训了在小区楼前玩泥巴的两个小孩

昨天回家看到小区楼下两个小孩在草坪上挖了个洞玩泥巴,我一看情况危机,马上跑过去将两个小孩推开,几脚踩平了。两个小孩哇哇大哭,不巧他们家长也在附近,过来要跟我理论。我不屑一顾地说:没文化真可怕,你仔细看看,这栋楼后面是一栋15层的高层,已经给我们这栋楼造成了很大的水平推力,你家小孩在前面挖坑玩,目测已经达到了100mm的深度,这使得我们这栋楼承受的压力差急剧增大,如果不是我及时进行了回填,后果不堪设想。家长听得目瞪口呆,向我连连致谢,表示回去一定好好教育小孩,严禁做这种危险游戏。 转自:华山论坛

神意不是凡人能领会的

转载自神的blog http://blog.csdn.net/vbvan/archive/2007/10/30/1856481.aspx 搞挂你的C++编译器 Play with the compiler是一件很有趣的事情,编译死循环的程序便是其中之一。让我们和编译器一起做游戏吧~ 1、Preprocess a、Self Include(GCC only) 一般的编译器都有include嵌套层数的限制,所以你需要在适当的时候停止嵌套。利用GCC提供的__INCLUDE_LEVEL__可以很轻松的实现这一点。时间复杂度是na,n是每层的Self Include次数,a是嵌套层数。 在其它编译器中可以写出类似的代码,只是没这么简洁 #if INCLUDE_LEVEL<199 #include FILE #include FILE #endif b、Macro Expansion Explosion 顾名思义,就是让Preprocess之后的代码量达到O(2n),比如下例: #define F1(x) x,x #define F2(x) F1(x),F1(x) #define F3(x) F2(x),F2(x) #define F4(x) F3(x),F3(x) #define F5(x) F4(x),F4(x) #define F6(x) F5(x),F5(x) #define F7(x) F6(x),F6(x) #define F8(x) F7(x),F7(x) #define F9(x) F8(x),F8(x) #define G1(x) F9(x),F9(x) #define G2(x) G1(x),G1(x) #define G3(x) G2(x),G2(x) #define G4(x) G3(x),G3(x) #define G5(x) G4(x),G4(x) #define G6(x) G5(x),G5(x) #define G7(x) G6(x),G6(x) #define G8(x) G7(x),G7(x) #define G9(x) G8(x),G8(x) int main() { G9(1); } 当然,不同的编译器对预处理结果溢出的处理也不尽相同,一般上面的代码不会达到预期的目的。GCC会直接出错,而VC会出ICE(Internal Compiler Error) 2、Template a、嵌套 类似的,模版也有嵌套层数限制,但是也很容易绕过。 GCC的某些版本就会被下面的代码搞挂(VC不会): #include template struct Test { static const size_t Value=Test<Test >::Value; }; 不过利用VC的某个bug(或者说特性),可以很容易的写出O(na)编译时间的模版: #include

#define INNER(A3,N3,A2,N2) \ template\ struct A3\ {\ enum {N=A3::N+1};\ };\ template<>\ struct A3<0>\ {\ enum {N=A2::N};\ };

#define OUTER(A2,N2,A1,N1,A3,CONTENT) \ template\ struct A2\ {\ CONTENT\ \ enum {N=A3::N};\ };\ template<>\ struct A2<0>\ {\ enum {N=A1::N};\ };

#define LEVEL2(a,b,c) INNER(A##b,N##b,A##a,N##a) #define LEVEL3(a,b,c) OUTER(A##b,N##b,A##a,N##a,A##c,LEVEL2(a##1,b##1,c##1)) #define LEVEL4(a,b,c) OUTER(A##b,N##b,A##a,N##a,A##c,LEVEL3(a##1,b##1,c##1)) #define LEVEL5(a,b,c) OUTER(A##b,N##b,A##a,N##a,A##c,LEVEL4(a##1,b##1,c##1)) template struct A1 { LEVEL5(1,11,111) enum {N=A11::N}; }; template<> struct A1<0> { enum {N=0}; }; 这里比较有趣的一点是,标准并不允许这样在模版类里的特化。不知道这个算VC的bug呢还是扩展呢 A member or a member template may be nested within many enclosing class templates. In an explicit specialization for such a member, the member declaration shall be preceded by a template<> for each enclosing class template that is explicitly specialized 基于类似的思想,GCC&VC通用的版本也不难写出。 b、OLE 虽然通常模版的编译时间都是O(n)的,不过很多编译器的错误信息输出却是O(n2)的,利用这一点+很长的类名,很容易造成错误信息的Output Limit Exceed。比如:

#define ClassName A template class ClassName { enum {Value=ClassName::Value}; }; int main() { int n=ClassName<0>::Value; } 如果我把ClassName改成某个很长的名称(现代的编译器都支持很长的变量名),那么错误输出就很容易OLE PS:上面的代码在VC8里会直接出ICE,不过这是VC8的bug。VC2008没有这样的问题

团购 textmate

发现 zend studio for eclipse 和 netbeans 越来越不好用,越来越大(慢)。 快速开发还是转向 textmate ,正好 twitter.com/fire9 在组织团购,报名等待了,大概一人 200 多 RMB。 报名入口

网上闻名已久的“操帝”

</embed> 太逗了

textmate 支持 gb2312 的方法

下载 Textmate Bundle 问题就是我们使用TextMate不支持GB2312等编码,用着及其不方便,下面是解决方案:

打开Bundle Editor 选则Show all 选则文件夹TextMate(或者随便你选则什么) 增加一个新的template‘openEncodedFile’(或者随便你自己命名) 在Template data中如下设定 Extension:中 留空 Command(s):

# open CocoaDialog’s file select menu

file=$(CocoaDialog fileselect \
        --title "Open an encoded file" \
        --with-directory $HOME/ \
)
# check for valid file
if [ -n "$file" ]; then
# open CocoaDialog's dropdown menu
# for more encodings add them to '--items'
# to list all possibile encodings use the Terminal with 'iconv -l'
        res=$(CocoaDialog dropdown \
                --title "Open an encoded file" \
                --text "Choose the encoding:" \
                ??exit?onchange \
                --button1 "Open" \
                --button2 "Cancel" \
                --items "BIG5" "EUC-TW" "GB2312" "SJIS" "EUC-JP" "KOI8-R" \
        )
# if user canceled exit
        [[ $( (tail -r &lt;&lt;&lt;"$res") | tail -n1)  == "2" ]] &amp;&amp; \
                exit_discard
        res=$(tail -n1 &lt;&lt;&lt;"$res")
# add more 'elif' according to '--items' if needed
        if [ "$res" == 0 ]; then
                ENC="BIG5"
        elif [ "$res" == 1 ]; then
                ENC="EUC-TW"
        elif [ "$res" == 2 ]; then
                ENC="GB2312"
        elif [ "$res" == 3 ]; then
                ENC="SJIS"
        elif [ "$res" == 4 ]; then
                ENC="EUC-JP"
        elif [ "$res" == 5 ]; then
                ENC="KOI8-R"
        fi
# start conversion to UTF-8 and send the result as a new file back to TM
        iconv -f "$ENC" -t utf-8 "$file" &gt; "$TM_NEW_FILE"
fi
Output: Insert as Text 
- Activation: Key Equivalent shift+option+o (我的建议) 
- Scope: 留空


真人示范 罩杯大小尺寸[图片]

A cup — Airport

B cup — Barely there

C cup — Can do

D cup—Damn good

E cup—Ecstasy

F cup—Fake

G cup—God

H cup—Horrible

I cup—I can’t believe it

J cup—Joke

K cup—Kidding

L cup—Large

M cup—Monster

N cup—Nothing like that

上海13层大厦整体倒塌后的网友经典汇总贴

1、今天早上那声巨响难道不是雷 ,是这个房子?          2、再把它扶起来又可以卖了…..          3、扶起来,洗洗干净继续卖          4、这是开发商的行为艺术吗!          5、现在变成只有天窗的联体别墅了~          6、我国多了两个支柱产业:倒塌楼房预测业、扶楼业(扶大厦于已倾)。          7、新闻上说“除了”有个工人死亡外,“无”人员伤亡          8、支持保留现场,以飨后代          9、大楼说是它自己不小心摔倒的,它还说从哪里跌倒了,还会再从哪里爬起来.放心住吧.          10、2009年流行词汇:一座楼说:“我倒!!!”于是他真的倒了        11、一小撮不明争相的 混凝土 这么不和血!!        12、房子没有倒,它只是在做腑卧撑而已!      13、变形金刚到上海了。      14、还好楼距还凑和,要不然成骨牌了。      15、由于都不买房,没有入住,重心偏高,等居民都欢欣鼓舞的入住进去就能压住了。。。。      16、房子离河边太近,     会不会是河里的螃蟹钻地打洞破坏土层结构     导致楼房整体倒塌呢?      17、站起来是楼房 倒下去是绿坝      18、第一次见到房倒得这么有性格的      19、高层不流行了,规划局同意改成躺好死卖。      20、站着商品房,躺下骨灰盒!

(原創) 如何让一个thread在背景不断的执行? (使用semaphore)

要让一个thread在背景不断的执行,最简单的方式就是在该thread执行无穷回圈,如while(1) {},这种写法虽可行,却会让CPU飙高到100%,因为CPU一直死死的等,其实比较好的方法是,背景平时在Sleep状态,当前景呼叫背景时,背景马上被唤醒,执行该做的事,做完马上Sleep,等待前景呼叫。当背景sem_wait()时,就是马上处于Sleep状态,当前景sem_post()时,会马上换起背景执行,如此就可避免CPU 100%的情形了。 1/*// 2(C) OOMusou 2006 http://oomusou.cnblogs.com 3 4Filename : pthread_create_semaphore.cpp 5Compiler : gcc 4.10 on Fedora 5 / gcc 3.4 on Cygwin 1.5.21 6Description : Demo how to create thread with semaphore in Linux. 7Release : 12/03/2006 8Compile : g++ -lpthread pthread_create_semaphore.cpp 9*/ 10#include // printf(), 11#include // exit(), EXIT_SUCCESS 12#include

// pthread_create(), pthread_join() 13#include // sem_init() 14 15sem_t binSem; 16 17void* helloWorld(void* arg); 18 19int main() { 20 // Result for System call 21 int res = 0; 22 23 // Initialize semaphore 24 res = sem_init(&binSem, 0, 0); 25 if (res) { 26 printf("Semaphore initialization failed!!\n"); 27 exit(EXIT_FAILURE); 28 } 29 30 // Create thread 31 pthread_t thdHelloWorld; 32 res = pthread_create(&thdHelloWorld, NULL, helloWorld, NULL); 33 if (res) { 34 printf("Thread creation failed!!\n"); 35 exit(EXIT_FAILURE); 36 } 37 38 while(1) { 39 // Post semaphore 40 sem_post(&binSem); 41 } 42 43 // Wait for thread synchronization 44 void *threadResult; 45 res = pthread_join(thdHelloWorld, &threadResult); 46 if (res) { 47 printf("Thread join failed!!\n"); 48 exit(EXIT_FAILURE); 49 } 50 51 exit(EXIT_SUCCESS); 52} 53 54void* helloWorld(void* arg) { 55 while(1) { 56 // Wait semaphore 57 sem_wait(&binSem); 58 printf("Hello World\n"); 59 } 60}