使用 OpenVPN 将内网 eMule LowID 转换为 HighID

以前在学校里用的是移动网,每人都有公网ip(真是美滋滋)。现在换了电信网后反而只能得到一个内网ip了,比如我现在的网络中除了我自己的路由器,外面还夹着两个路由,过了这两个路由才是电信的路由,然后才到外网∠( ᐛ 」∠)_ 。这种状况想要正常地获得 eMule 的 HighID 实在困难。另外 easyMule 貌似是有 lowID 互相通讯的打洞功能,但是 easyMule 名声不好不想用。。正好手头也有 vps,于是准备用它来作映射。


DirectWrite 文字描边

直接用 rendertarget 的 DrawText 方法显示文字的话无法为文字增加描边,用路径对象配合字体字形进行显示,并在内部用画刷填充的话可以达到描边的效果。


水面效果的2D实现

游戏里需要一个背景,直接贴 2d 图片的话显得有些单调了,打算做个动态的背景。用水面的话视野比较广阔,感觉比较合适。因为游戏是直接用 dx 写的,所以水面的实现也自然是写 shader 来完成了。


Apache 虚拟主机配置 SSL

总结一下Linux(样例为 centos)上 apache 为多台虚拟主机启用 ssl 连接的设置。


Ramnit 蠕虫分析

最近在办公室里突然有蠕虫传播开了,因为办公室内网里都是没装杀软的,然后发发邮件就感染一片了(笑),而且只要有一台计算机没有清除就依然会传遍局域网。在电脑上找了一下,发现了名称为 DesktopLayer.exe 的病毒文件,于是把它保留了一份,打算研究研究。


Duilib无法连续创建两个模态对话框

调试一个 Duilib 界面程序时遇到一个问题:当在主函数里使用 ShowModal() 显示第一个对话框并关闭对话框后,再一次使用 ShowModal() 显示第二个对话框时第二个对话框便直接关闭退出了。


指针类型的类成员变量突然指向无效内存

最近在查一个Bug,好几天下来一直没有头绪,而且重现条件挺看RP……查了一阵子遇到阻碍,感觉没有什么思路,总之先加了一些日志,顺便在这里记录一下状况。


《修改代码的艺术》读书笔记

第6章 修改代码的技术

    新生方法:

  • 将新增代码形成一个新的方法,并在修改点对其进行调用。
  • 类的依赖关系太恶劣时,可考虑将新方法作为公有静态方法,并将this作为参数传递(便于测试)
    新生类:

  • 确定修改点后在修改点生成新的类,需要将原来的局部变量传递时则将其传递给构造函数,同时有需要返回结果则构建对应的方法并进行调用来获得结果。
  • 优点在于进行侵入型较强的修改时能有更大的自信继续进行,而且不用改变现有的头文件,不会增加原类的编译负担。
  • 缺点是会使系统中的概念复杂化。

软件中出现纯虚函数被调用的错误

我的情况是退出软件时偶尔产生这种错误,也算是多线程中的一个使用不当的情况。
简化后的模型如下:


win7在任务栏上固定图标后运行时会出现两个图标的问题

有些应用在往任务栏(win7及以后)上固定图标后,单击图标运行实例时会生成一个新的图标,win7下似乎还能再次固定新的图标。

造成两个图标的原因在于应用使用了自定义的AppUserModelID
win7及以后的任务栏通过AppUserModelID来关联程序的图标,也就是说相同AppUserModelID的进程会在任务栏上共用一个图标。比如资源管理器,当你打开多个资源管理器窗口时,任务栏上始终只有一个对应的图标,鼠标移至图标上时就会显示出所有打开的窗口,也就是所有窗口被分为同一组了。应用程序可以根据实际需要来设置这个ID相同与否来达到控制应用在任务栏上的图标显示,特别是对于一些多进程、多显示窗口的应用用处会比较大。