2008-12-13

AHK实现的鼠标中键粘贴选中字符串

;命令前置条件:鼠标选中文字
MButton:: ;鼠标中键激发事件
Send, ^c ;复制选中的文字
clipwait ;等待复制完成
Click ;在点击鼠标中键的地方模拟左键点击
Send, ^v ;粘贴
TrayTip, clipboard, %clipboard%, 20, 16
return



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


#space::
Click
return

*#p::MouseMove, 0, -10, 0, R ; Win+UpArrow hotk
*#n::MouseMove, 0, 10, 0, R ; Win+DownArrow => Movewnward
*#b::MouseMove, -10, 0, 0, R ; Win+LeftArrow => Move cursor
*#f::MouseMove, 10, 0, 0, R ; Win+RightArrow => Move cursor to

发送电子邮件: test.gif

Photobucket

2008-12-10

短信是被监控了?还是巧合?

昨天,朋友WQ通知我LC要结婚啦.这么老远回不去, 很是遗憾,礼得随啊.
问WQ要了银行号, 朋友刚把银行号发过来.

....三四个小时后.....

收到一条短信:
先不要存进去, 我原来那帐户没有用了, 我重新给你发一个农业银行的帐户: 622848 0860 3370 30610 户名: 陈亮

回了一条: 谁?
然后就没有音信了...


下面这个帖子里有个好办法来对付这种诈骗短信.
http://www.deyi.com/thread-20379-1-6.html

2008-11-27

mingle

迭代式的开发协作工具mingle

在线http://studios.thoughtworks.com/试用了一下, 这个工具的优点是能够将条目性的东西,以卡片的形式展示出来.
更形象,而且卡片内容选项比较丰富.

开发这种工具时可以借鉴. 而且有QA管理及功能点管理等很多内容.

其它方面还不太清楚,下载一个试用版先试试说.

安装以后,打localhost会进入系统初始设置向导.

第二页是初始数据库:




果然是java系的,机器上也没有mysql也没有NTFS盘,还是睡觉先..

2008-11-25

看不懂翻译就看看原版



图中红色框是读书时的疑点(因为会上人员大都读过陈皓的C++ 虚函数表解析,也做了实验证明,大家了解到目前microsoft的编译器是不会将Base2::mumble()放大那个位置的.)

如果(对C++中虚表不太了解)
{
可以参考:陈皓专栏:http://blog.csdn.net/haoel/archive/2007/12/18/1948051.aspx
}

书中讲到关于编译器为支持多重继承下的虚函数的传统做法:
翻译如下:


因为实在理解不上来:
后来看了一下英文版:对应段落如下:
With the advent of runtime linkers in support of dynamic shared libraries, the linking of symbolic names can be extremely slow梪p to 1 ms per name, for example, on a SparcStation 10. To better accommodate the performance of the runtime linker, the Sun compiler concatenates the multi-ple virtual tables into one. The pointers to the secondary virtual tables are generated by adding an offset to the name of the primary table. Under this strategy, each class has only one named virtual table. "For code used on a number of Sun projects [the speedup] was quite noticeable.

看完以后恍然大悟.
连锁一词用的不好, 连接更合适.
另外"连锁为一个"后的冒号改为句号更合适一些,更易懂一些.


====================================
读书会回忆:怪不得今天LT跟SGG说暗语大家听不懂.暗语大概如下:
LT:"是冒号还是逗号?"
SGG:"是句号".
XY:"枯藤老树昏鸦, 小桥流水人家".




2008-11-23

还记得emacs不?

周未没事,突然一想如果visual studio下用emacs的快捷键, 不是很好?
果然搜到一个工具,很好用.

http://xkeymacs.sourceforge.net/archive/xkeymacs317.msi

django

django开发网站很快.

xx同学工作很忙利用业余时间开发出了易搜酷网站.
准备面试的也可以参考一下这个网站.

http://www.esocou.com/

www.speak2me.com

非常不错的网站.
可以练英语听力,口语,还有词汇.

今天算是通宵啦.

2008-11-22

System.Data.SQLite

asp.net程序中使用sqlite

References: http://sqlite.phxsoftware.com/
http://sourceforge.net/project/showfiles.php?group_id=132486

周未无事, 试着将以前写的一个小应用从sql server移到sqlite.
发现sqlite暂时不支持外键约束,不过可以用触发器实现约束.

另外得出一个经验,触发器还是少用的好,移植时比较费事.

2008-11-21

感恩节

今天感恩节, 不对, 应该是昨天.
大家拍了一个短片,内容大致如下 :

组长:我们是感谢家人朋友小组。

1、 感谢爸爸给我健康的体魄。

2、 感谢妈妈对我的细心照料。

3、 感谢朋友在我最困难的时候站在了我的身边。

4、 感谢女朋友,我坚实的后盾。

 

不早了, 睡觉明天还考C#呢...?#!@....

B

涉及机密内容:过滤中...

 

C:

组长:社会也得感谢啊!

1、 首先感谢党中央。

2、 感谢小平爷爷改革开放.

3、 感谢比尔盖茨发明了电脑。

4、 感谢市场经济,猪肉降价了!

 

D:

组长:难道我们身边的人不用感谢吗?

1、 感谢清洁大婶,给我们干净的生活环境。

2、 感谢卫生间的大爷,男卫生间不用愁了。

3、 感谢前台,天天给我打电话。

4、 感谢食堂,让我苗条又健康。

2008-11-19

X-Mouse

今天推荐大家一款不错的工具:X-Mouse

True X-Mouse Gizmo 是一款让你可以自动地拷贝你所选择的文本到剪贴板(一松开鼠标左键立即执行),而不需要先右键选择然后选择拷贝命令来执行拷贝任务的非常方便的鼠标增强工 具.然后你可以使用鼠标中间键点击替换传统的右键点击/粘贴方法来拷贝文本.一个小型的位于鼠标指针一侧的 X 指示你所选择的内容已经被拷贝到了剪贴板上.


另外,有个网站不错可以看看,很多挺实用的工具.
http://www.appinn.com/

2008-11-02

加密的RAR

平时用到的邮件服务器会检测发送的邮件中是否含exe等危险文件,有的服务器会不接受此类邮件.

有时用RAR将其压缩也不行.

但是当对RAR压缩包设置密码,以后邮件服务器就会放行.

很好用.


----------------------
update: 后来发现直接改文件后缀名更方便.

2008-10-25

as 和 强制转换

 
此邮件可以和下列文件或链接附件一起发送了。
as.JPG

说明: 为了保护计算机不受病毒的侵害,电子邮件程序会阻止发送或接收某些文件附件的类型。请检查电子邮件设置是如何处理附件的。

Convert.ToInt32(null)会返回0而不会产生任何异常,但int.Parse(null)则会产生异常。

        try
        {
            int.Parse(null);
        }
        catch(Exception ex)
        {
            Response.Write(ex.Message);
        }

        try
        {
            int.Parse("mxmdslsl");
        }
        catch (Exception ex)
        {
            Response.Write(ex.Message);
        }

        int i = -1;

        try
        {
            i = Convert.ToInt32(null);
        }
        catch (Exception ex)
        {
            Response.Write(ex.Message);
        }

        Response.Write(i);

输出:

Value cannot be null. Parameter name: String
Input string was not in a correct format.
0

2008-10-16

阅读effective C++时未解决的问题,做个标记,有空再调查



1.在创建资源需要申请内存时,是否需要捕获内存不足时的异常。

2.为了减少代码的冗余,在拷贝构造函数中调用赋值运算符或者在赋值运算符中调用拷贝构造函数带来的后果是什么。



今天的口号是:还我清白.

不要析构函数中抛出异常

Effective C++ 第3版45页第5行告诉我们:
不要析构函数中抛出异常, 因为C++中同时出现两个异常意味着不确定行为.
大家可以运行下面这段程序看一下结果.

#include "stdafx.h"
#include
#include
using namespace std;

class A
{
public:
~A()
{
cout << "~A()" << endl;
throw 3;
}
};

int _tmain(int argc, _TCHAR* argv[])
{

try
{
A a;
A a2;

}
catch(...)
{
cout << "exception catched" << endl;
}

return 0;
}

另外作者为我们提供了一些对策来处理析构中的异常.详情参见effective c++ 第3版45页

2008-10-14

c++两点: 1用拷贝赋值运算符调用拷贝构造函数. 2.构造函数互相调用


class A
{
public:
A(int _x)
{
new(this)A(_x, 23);     //调用另外一个构造函数
}

A(int _x, int _y) { x = _x; y = _y; }

public:
int x;
int y;
};

class B
{
public:
B() { x = 4; }

B(const B& rhs)
{
if ( this == &rhs ) return;
x = rhs.x;
}

B& operator= (const B& rhs)
{
this->B::B(rhs); // 调用拷贝构造函数
}
public:
int x;
};

int _tmain(int argc, _TCHAR* argv[])
{
A a(3);

B b;
B b2(b);

cout << a.x << " " << a.y << endl;
cout << b2.x ;
return 0;
}

2008-10-12

软件推荐: Microsoft Office OneNote

Microsoft Office OneNote 是一个专门用于做笔记和搜集、整理资料的一个强大的应用程序。
利用它可 在上课时记下教授的讲课内容,开会时做会议记录,甚至只是写一个待办事宜列表;搜集资料时很方便地进行资料分类管理、检索;特别是不需要额外地进行保存,完全由程序自动保存。
没有用过的朋友可以试一下这个软件。

另外可以和outlook合作使用
如果有tabletPC就更方便啦, 手写记录的内容也是可被搜索的.

python 中动态执行 JavaScript代码



this post is obviously out of date, so now you should try  https://code.google.com/p/pyv8/  
这个帖子已经明显过时了,你应该试试https://code.google.com/p/pyv8/



-------------------------
以前因为写了这段代码, 刷了一下google adsense的链接, 结果google不让我用adsense了.
因为google adsense中javascript代码应该是通过混淆的,当时分析没有找到头绪,就找到了spidermonkey.
这段代码主要是在python中通过spidermonkey类库, 动态执行混淆后的javascript,找到真正链接.





a.py




from spidermonkey import Runtime
import time, urllib2, httplib, random, re
import urllister

def get():
    httplib.HTTPConnection.debuglevel = 1

baseurl = 'http://pagead2.googlesyndication.com'
dt = str(int(time.time() * 1000))
print 'start sleep...'
time.sleep(random.randint(0, 9))
print dt, 'end sleep...'
url = 'http://pagead2.googlesyndication.com/pagead/ads?client=ca-pub-6581680843370427&dt=' + dt + '&lmt=1156579898&format=468x60_as&output=html&url=http%3A%2F%2Flocalhost%2Ftest.html&color_bg=F6F6F6&color_text=9E5205&color_link=B8A80D&color_url=B8A80D&color_border=9E5205&ad_type=text&cc=100&u_h=800&u_w=1280&u_ah=779&u_aw=1280&u_cd=24&u_tz=480&u_his=1&u_java=true&u_nplug=9&u_nmime=91'

request = urllib2.Request(url)
request.add_header('USer-Agent',
                   'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.5) Gecko/20060731 Ubuntu/dapper-security Firefox/1.5.0.5')
opener = urllib2.build_opener()
conn = opener.open(request)
html = conn.read()
conn.close()

print html
regex = re.compile(r'function jcc\(a\).*function ha\(a\).*?jcc\(a\).*?\}')
m = regex.search(html)
if m is not None:
    func = m.group(0)
func = re.sub(r'pha=document\.getElementById\(a\)', 'phahref=a', func)
print func
func = re.sub(r'pha\.href', 'phahref', func)
print func
func = re.sub(r"a=='aw0'", 'a == a', func)
print func
else:
    pass

parser = urllister.URLLister()

parser.feed(html)
parser.close()

href = baseurl + parser.href[0]

javascript = func + ' href="' + href + '"; ha(href); print (href);'
print javascript
rt = Runtime()
cx = rt.new_context()
f = cx.eval_script(javascript)
s = cx.get_global("phahref");
print s

request = urllib2.Request(s)
request.add_header('USer-Agent',
                   'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.5) Gecko/20060731 Ubuntu/dapper-security Firefox/1.5.0.5')
opener = urllib2.build_opener()
conn = opener.open(request)
html = conn.read()
conn.close()

if __name__ == '__main__':
    import thread
    import analy

    for i in range(20):
        print get
        thread.start_new_thread(analy.get, ())
        print i

-->


参考网址:

http://wwwsearch.sourceforge.net/python-spidermonkey/
http://pypi.python.org/pypi/python-spidermonkey/0.0.1a

Effective C++ 第七条款中讲到: 多态基类声明virtual析构函数

Effective C++ 第七条款中讲到: 多态基类声明virtual析构函数

 

关于这个问题, 我们有一个疑问:

如果父类中不定义虚的析构函数, 而通过父类的指针delete子类的对象, 会怎么样?

 

class Base

{

private:

      int m_iBaseData;

};

 

class Derived : public Base

{

public:

      Derived()    {          m_piDerivedData = new int(3);    }

      ~Derived()  {          delete m_piDerivedData;           }

private:

      int * m_piDerivedData;

};

 

int _tmain(int argc, _TCHAR* argv[])

{

      Base BaseObj;

      Base* pb =  new Derived();

      delete pb;

 

      return 0;

}

 

我觉得这个问题应该分两块来剖析.

1.       C++语法方面,

因为父类没有声明虚函数,所以不会有虚表出现(参见C++对象模型第一章), 进而无法实现多态, 所以子类的析构函数不会被调用到.

有一点我们可以肯定, 因为子类的析构函数没有被调用到, 子类申请的资源将不能通过析构函数释放, 将造成内存泄露.

2.       从内存管理方面

首先, 我们知道CRT进行内存管理过程中, new一块内存时需要提供一个size, 这样delete时才能记住, 先前申请了多大的内存块.参考下面一段话:

 

摘自: http://topic.csdn.net/t/20061104/21/5133631.html

这里有一个问题,就是当我们调用   new   operator   分配内存时,有一个   size   参数表明需要分配多大的内存。但是当调用   delete   operator   时,却没有类似的参数,那么   delete   operator   如何能够知道需要释放该指针指向的内存块的大小呢?答案是:对于系统自有的数据类型,语言本身就能区分内存块的大小,而对于自定义数据类型(如我们自定义的类),则   operator   new     operator   delete   之间需要互相传递信息。   
    
 
  当我们使用   operator   new   为一个自定义类型对象分配内存时,实际上我们得到的内存要比实际对象的内存大一些,这些内存除了要存储对象数据外,还需要记录这片内存的大小,此方法称为   cookie.这一点上的实现依据不同的编译器不同。(例如   MFC   选择在所分配内存的头部存储对象实际数据,而后面的部分存储边界标志和内存大小信息。g++   则采用在所分配内存的头   4   个自己存储相关信息,而后面的内存存储对象实际数据。)当我们使用   delete   operator   进行内存释放操作时,delete   operator   就可以根据这些信息正确的释放指针所指向的内存块。   
    
 
  以上论述的是对于单个对象的内存分配/释放,当我们为数组分配/释放内存时,虽然我们仍然使用   new   operator     delete   operator,但是其内部行为却有不同:new   operator   调用了operator   new   的数组版的兄弟-   operator   new[],而后针对每一个数组成员调用构造函数。而   delete   operator   先对每一个数组成员调用析构函数,而后调用   operator   delete[]   来释放内存。需要注意的是,当我们创建或释放由自定义数据类型所构成的数组时,编译器为了能够标识出在   operator   delete[]   中所需释放的内存块的大小,也使用了编译器相关的   cookie   技术。

 

我们来做一个实验:

#include "stdafx.h"

#include <iostream>

using namespace std;

 

class Base

{

public:

   Base() { m_iX = 2; m_iY = 3; }

private:

   int m_iX;

   int m_iY;

};

 

int _tmain(int argc, _TCHAR* argv[])

{

   Base* pb =  new Base();

   int * int_pointer_to_base = (int*) pb; //Base类的指针转成int*

 

   delete int_pointer_to_base;

   return 0;

}

   设置断点: 在执行delete int_pointer_to_base;之前, 内存状况如图1所示:

从图中看到int_pointer_to_base实际上是指向了m_iX的位置.

F10再走一步, 当执行完delete 操作后, 内存如下图2所示:

我们看到delete, m_iX, m_iY内存变成了0xfeeefeee(Debug模式下, VC编译器自动将delete掉的内存块, 填充上0xfeee), 虽然Release模式下, m_iXm_iY的内存不会被填充0xfeee, 但是我们已经知道, 内存管理中已经将申请时的大小sizeof(Base)回收了.

 

结论:

    Base BaseObj;

      Base* pb =  new Derived();

      delete pb;

 

通过父类指针来deletenew出来的子类的对象, 对于子类对象的内存区域中(继承中子类实例内存部局, 请参考C++对象模型), 不仅父类的部分会被回收, 子类的部分也会被回收.

 



图1:
图2:

2008-10-11

繁忙一周

这周真是忙, 每天都11:30以后睡觉, 7点起床, 白天喝咖啡.

今天是周六, 早上一起睡到12:00才起床, 真是睡到自然醒 :)




顺便推荐一个很不错的网站, 提供相片打印服务(新注册会员还有20张免费打印优惠), 把你的数码照片通过这个
网站打印,并邮寄出去.

http://www.kachayu.com

2008-10-06

国庆总结

国庆就背日语来着, 背了大概18课的单词及语法.

另外把越狱第一季从头到尾又看了一遍. 这些编剧太强了.

2008-09-10

还记得这篇古文的题目不?

今天是老师节,找了篇古文古一下子,也祝老师们节日快乐!


古之学者必有师。师者,所以传道受业解惑也。
人非生而知之者,孰能无惑?惑而不从师,其为惑也,终不解矣。 生乎吾前,其闻道也固先乎吾,吾从而师之;生乎吾后,其闻道也亦先乎吾,吾从而师之。吾师道也,夫庸知其年之先后生于吾乎?是故无贵无贱,无长无少,道之所存,师之所存也。 嗟乎!师道之不传也久矣!欲人之无惑也难矣!古之圣人,其出人也远矣,犹且从师而问焉;今之众人,其下圣人也亦远矣,而耻学于师。是故圣益圣,愚益愚。圣人之所以为圣,愚人之所以为愚,其皆出于此乎? 爱其子,择师而教之;于其身也,则耻师焉,惑矣。彼童子之师,授之书而习其句读者也,非吾所谓传其道解其惑者也。句读之不知,惑之不解,或师焉,或不焉,小学而大遗,吾未见其明也。 巫医乐师百工之人,不耻相师。士大夫之族,曰师曰弟子云者,则群聚而笑之。问之,则曰:“彼与彼年相若也,道相似也,位卑则足羞,官盛则近谀。”呜呼!师道之不复,可知矣。巫医乐师百工之人,君子不齿,今其智乃反不能及,其可怪也欤! 圣人无常师。孔子师郯子、苌弘、师襄、老聃。郯子之徒,其贤不及孔子。孔子曰:三人行,则必有我师。是故弟子不必不如师,师不必贤于弟子,闻道有先后,术业有专攻,如是而已。 李氏子蟠年十七,好古文,六艺经传皆通习之,不拘于时,学于余。余嘉其能行古道,作《师说》以贻之。

我的侄女王嘉伊





2008-08-30

BUG




今天突发其想, 说买个域名吧, 结果用招行的专业版, 还把我给郁闷了一把.
几次都出错.这几个BUG是严重级别的, 当天连续试了5次出现4次.
不过这几天用了几次, 还没有出现那种状况.