- 博客(78)
- 资源 (13)
- 收藏
- 关注
原创 Markflow —— 简洁、优雅的在 Markdown 里绘制流程图
Markflow—— 简介、优雅的在 Markdown 里绘制流程图作为一个程序员,给别人写文档时,总需要加几个流程图。而现在写文档基本都使用 Markdown 来写,因为即使对方没有相应的渲染,源文件也可以无障碍的阅读。 个人觉得这时 Markdown 语法最大的亮点,于是就涉及到了一个问题,如何在 Markdown 文件中画流程图? 搜索了一下,一般的解决方案是采用 Flowchart.js
2017-01-02 18:01:25 11103
原创 Gradle 打的包 Tomcat 解不开:LifecycleException
Gradle 打的包 Tomcat 解不开:LifecycleException昨天用 Gradle 打的包,放 Tomcat 里解不开 gradle 打的 war 包,tomcat6 启动的时候报错:严重: ContainerBase.addChild: start:LifecycleException: Error initializaing : java.lang.NullPointe
2016-06-21 14:07:32 2112
原创 踩坑记:httpComponents 的 EntityUtils
今天写的一个服务程序,有人报告获得的数据中文乱码,而我是用 apache 通过 httpComponents 去取得数据的,于是开启日志的 debug 级别。在日志里果然发现中文不见了,有乱码出现:2014-07-02 16:35:01.348 DEBUG [Wire.java:86] http-outgoing-8 "1.0" encoding="UTF-8"?>... subje
2014-07-02 17:38:58 6924
原创 少写了 @ResponseBody 引发的古怪问题
最近在 Tomcat 里写一个异步的 HTTP 服务端,出于方便的考虑使用了 Spring MVC 注解来搞定,然后就发生了诡异的结果。代码如下: @RequestMapping("/test") public DeferredResult test( final @RequestParam(required = true) String uid,
2014-06-11 11:19:33 2274
原创 修复剑灵新装系统后不能玩的问题
其实是缺少 VC 的运行时库,去这里下载:http://www.microsoft.com/zh-cn/download/confirmation.aspx?id=26347另外,游戏目录里有个 components,里面有过 DXSetup.exe 是装 DirectX 的,也装一下。升级了 Windows 8.1,TX 的游戏就全挂了,悲剧啊!于是用 VHD 装了个 Windo
2013-11-25 17:13:41 2443
原创 全新的内存分配算法(折纸算法)
全新的内存分配算法,这个算法适合可变长对象,并且经常要扩展的内存块的分配,比如字符串。是空间换时间的算法。想象一张长长的纸条,不断的对折它,就可以把纸条分成一格一格,而且每次对折格子小一半,数量多一倍是吧。这个算法和这个过程很想,因此我命名为折纸算法。
2013-10-17 22:50:39 3297 3
原创 谈谈 C++ 和 Java 的区别
我有多年的 C++ 开发经验,但是最近由于公司的关系,不得不转 Java。看了几天 Java,谈谈感想。 经验丰富的 C++ 程序员应该可以很容易转到 Java 上来,因为他们有许多相似之处,基本语法是完全一样的,只是 Java 砍掉了大量的 C++ 特性,仅仅保留了类相关的部分,在 Java 的世界里,一切都是类。
2013-09-29 10:07:14 2156 1
原创 疯狂的预编译加类型推导能孵化什么吗?
Boost 是个庞然大物,也许很多人已经把它用得很顺了,不过它包含的两个库 MPL 和 Preprocessor 应该大部分人都不会熟悉。MPL 是用来进行模版元编程的工具,它将一些对象的推导工作做了抽象,可以把类型放入容器,在编译期实现一些很神奇的功能。Preprocessor 为预编译提供了一系列的工具,帮助通过预编译来生成代码。它们的结合帮助你在编译期实现很多强大的功能。
2013-09-04 15:25:09 2076
原创 TBB 的 BUG?
Threading Building Blocks 是很优秀的一个库,个人用得很多。近几天调试程序的时候,发现 tbb 的 _concurrent_queue_impl.h 166 行左右有这么一段代码: void assign_and_destroy_item( void* dst, page& src, size_t index ) { T& from
2013-08-15 08:59:51 2014 1
原创 "优雅"的C++观察者模式实现
C++ 是一种强类型的编程语言,于是最近一直在头疼如何实现一个比较优雅的观察者模式。如果一个事件附带的参数不同的时候,是否可以使用统一的界面来注册?比如我定义了一个事件,A,参数是 int,而事件B的参数是 string,如果采用统一的注册接口?最先想到的办法是事件用int 定义,采用 boost::any 来传递参数,而结束函数统一写成 void hand( boost::any a ) 这
2013-04-28 16:37:42 3268 2
原创 cmake 按构建类型指定不同文件名
cmake 生成工程的时候,很多教程都告诉你 CMAKE_BUILD_TYPE 是构建类型。原本想用这个来判断是否Debug 模式,并写if来修改文件名。但是,这个变量其实仅在生成 Make 文件这种非 multi-config下才起作用,在生成 VC 工程文件这样的 multi-config 里构建器里,仅会有一个叫 CMAKE_CONFIGURATION_TYPES 的变量。 不要
2013-03-08 15:09:01 4720
原创 像脚本语言一样写C++
疯狂的类型推导+虚函数+RTTI,会带来怎么样的东东?最近写了一个好玩的类 object, 目标是可以像脚本语言一样,存放任意类型,做任意操作。目前完成了大半,有兴趣的朋友可以拿来玩玩。 这个类可以这么玩void main(){ using namespace lugce; /// 当字符串 std::stringzz="zz";
2013-01-17 17:09:25 2727 3
原创 玩 Diablo3 前要会写脚本
我的笔记本电脑带 nVidia 的 SLI 功能,所以开游戏前要先切换到 高性能 (电源计划),以便打开 SLI,然后玩我的 Diablo III。结束后还要记得切换回 节能模式,免得费电和笔记本发热。而 Chrome、Vistual Studio 2010 等软件会阻止 SLI 开启,因此开启前还要关掉它们……反正为了开启 Diablo III,要做一大堆,有时候忘了某步,进了游戏才发现
2012-06-29 09:35:59 2704
原创 boost.string_algo - 字符串算法库 使用点滴
用来记录零碎的知识,防止自己忘了判断一个字符串是否全为数字:boost::all( str, boost::is_digit() );
2011-08-04 17:09:43 2796
原创 boost.asio 使用点滴
用来记录一些零散的知识点,防止自己以后忘了。socket 的 async_connect 被调用以后,is_open 立刻就会返回 true。
2011-07-20 16:26:32 2150
原创 中国象棋将帅问题的另类解法
<br />编程之美里有个将帅问题蛮有意思的,该问题的具体描述是:(根据中国象棋的基本原则)在只有双的将帅棋盘上,找出所有双方可以落子的位置(将帅不能碰面),但只能使用一个变量。<br /> <br />解法一般也就是 循环然后判断去除重复位置。而对于只能用一个变量的限制一般通过把变量拆成2个来解决。<br /> <br />我有一个全新的思路,不做判断,不拆变量,直接用计算来解决问题。<br />附算法源程序:<br />int _tmain(int argc, _TCHAR* argv[]){
2011-05-11 11:01:00 2463 2
原创 高性能无锁(Lock-free) 内存池
由于懒惰,一直脱到现在才完成,实在是罪过啊!很快会用它来改写我的无锁容器,嗯,如果我不懒惰的话。稍微解释一下关键问题:先分配一块内存,然后将内存划分为等大的内存格。每次调用 alloc 就分配一块内存格出去。可分配内存是个链表,这个链表被直接贮存在未分配的内存里。换句话说,未被分配的内存格里存放了一个指针,这个指针指向下一个未被分配的空闲内存格。另外,为了我们分配的内存可以被正确释...
2010-08-04 10:42:00 7440 10
原创 多线程无锁(lock-free) 堆的实现
堆的多线程化处理比较简单,它只有一个指向堆顶的变量需要竞争,因此我们可以很方便的用 cas 操作来完成。/* * Copyright (C) 2010 Chen Wang ( China ) * Email: jadedrip@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General
2010-06-18 15:22:00 3088 5
原创 用C/C++为 Lua 脚本设置全局表变量
Lua 使用压栈的方式,通过 C++向 Lua 传输数据。因此我们想为 Lua 环境设置全局的表变量时,可以这么做://把环境变量导入到 lua 的全局表 "environ" lua_newtable(L);//创建一个表格,放在栈顶 lua_pushstring( L, key ); lua_pushstring( L, value ); lua_settable( L,-3 );//弹出key,value,并设置到table里面去 lua_pushnumber( L, ikey );
2010-06-13 10:23:00 3108 1
原创 构建 Lua、LuaBind 的 C++ 编译环境
我写了部分 bjam 脚本来编译一些第三方库,以便能更方便的在 VC 中使用。主要原理是使用 boost 的库命名规则,以防止连接错误。这里主要涉及:lua, luabind. 附赠 cryptopp、curl、openssl、sqlite
2010-06-12 11:28:00 4221
原创 通过 LuaBind 让 C++函数返回Lua表
由于要返回表,我们的C++函数需要返回 luabind::object 对象。并且在绑定时指定 raw 策略。
2010-06-12 10:22:00 3697 5
原创 免费的数据库建模工具
<br />最好的数据库建模工具自然是 PowerDesigner,可惜它是收费的。在软件知识产权保护越来越被重视的今天(公司有人来检查盗版),只能找免费的软件了。<br />这里推荐 SQL Power Architect http://www.sqlpower.ca/page/architect<br />虽然是商业的,但是有免费开源版本,功能对基本建模足够了。<br /> <br />曾经试用了 OpenSystemArchitect,可惜它不支持中文(文件重新读入,中文就成?了),只好作罢。
2010-06-08 16:54:00 2010
原创 使用 Crypto++ 里的 Blowfish 加密数据
BlowFish算法用来加密64Bit长度的字符串,它所使用的密钥是对称的。Crypto++ 里的 Blowfish 加密使用起来非常简单。
2010-05-31 17:09:00 1699
原创 使用 bjam 构建 crypto++
最近打算使用 crypto++ 5.6.0 , 由于我的机器上装了不同版本的 vc, 为了构建方便,写了 bjam 的构建脚本,可以方便的用不同的编译器编译库和DLL,十分方便。 jamroot 文件import os ; import pch ;import path ; import common ; default-build = debug
2010-05-28 16:40:00 1231
原创 获取成员变量类型
这应该是模板元编程里的概念吧,有时候我们确实需要获取成员变量的类型,这里提供一个方法借助模板的偏特化达到目的:templatestruct MemberType;templatestruct MemberType{ typedef F member_type; typedef T class_type;}; 假设我们有个结构定义如下:struct Call
2010-05-12 16:47:00 1252
原创 也谈生成不重复的随机数系列(洗牌算法)
偶尔看到有人在讨论如何生成不重复的随机数系列(洗牌算法),发现他们用的方法复杂度十分高,要抛大量的随机数,因此把我以前用的洗牌算法也拿出来秀秀。 假设需要生成 1~54 的随机数,那么把 1~54 放入“未洗牌数组”,抛 0~53 的随机数,把指定序号的牌,放入“洗好牌的数组",然后用未洗牌数组中最后一张牌替换已经被拿走的牌。下一步,抛 0~52 的随机数…… 重复 53 次就
2010-05-10 11:13:00 2952 18
原创 注意!Cegui 修改了DX渲染目标,会导致DX混乱
最近在我的 DirectX 中添加了 Cegui (v0.7.1), 奇怪的发现原来正确的 DirectX 的绘制变得十分混乱,仔细查找后才发现,Cegui 改变了渲染目标而没有改回来,从而导致了我的 DirectX 渲染到了 Cegui 的底层窗体上。 因此,调用 Cegui 的渲染函数后要恢复渲染目标: IDirect3DSurface9 *_surface;device-
2010-03-02 15:45:00 821
翻译 InternetOpenUrl 函数
InternetOpenUrl函数通过一个完整的FTP,Gopher或HTTP网址打开一个资源。HINTERNET InternetOpenUrl (__in HINTERNET hInternet ,__in LPCTSTR lpszUrl ,__in LPCTSTR lpszHeaders ,__in DWORD值dwHeadersLength ,__i
2010-02-20 13:11:00 6424
原创 解数独游戏的源代码
公司搞了个小活动,让大家玩数独游戏,作为一个程序员,第一考虑就是用 C++ 穷举,于是就有了下面的代码:#include "stdafx.h"bool check( int buf[9][9], int j, int i ){ int v=buf[j][i]; // 检测横向是否有冲突 for( int l=0; l<9; l++ ) if( (l!=i) && (b
2010-01-22 14:22:00 1143
原创 从零创建最简单的 ogre 程序
般的 ogre 教程貌似都是从已有的例子框架开始创建 ogre 程序的,这篇文章教你从零开始,创建一个能显示一条龙的 Ogre 程序,这个程序只有最少的代码,没有其他功能,方便你理解 ogre 的一些基本概念。 开始一个新的 Win32 程序,你可以删除所有代码,只需要保留 WinMain 的声明。(让我们从零开始) 在 stdafx.h 里添加头文件包以及 lib 文件引用:
2009-12-31 09:32:00 1323
原创 使用 boost::signals2 的智能连接管理
boost::signals2 提供了使用智能指针的连接管理。可以通过下面的代码生成智能连接: using namespace boost::signals2;boost::shared_ptr class_ptr; // 这是观察者的智能指针 signal shoter; // 这就是我们的信号发射器了 typedef signal::slot_type sl
2009-11-11 16:04:00 1529 2
原创 如何判断当前是否全屏程序
static BOOL IsFullScreenActive() { /* 这个函数获取屏幕4角的窗口的进程句柄,判断与激活句柄是否相等的方式来判断是否全屏程序。 特别的,对 IE 之类的多标签多进程程序,子窗口的进程会和主窗口不同。需要获取窗口的主窗口来对比才可以 */ struct IsNotSameProcessID { IsNotSameProcessID( DWORD
2009-09-07 14:03:00 1874
原创 小心使用 RedrawWindow 和 InvalidateRect
当父窗体设置了 WS_CLIPCHILDREN 的属性后, 默认状态下,RedrawWindow 和 InvalidateRect 不会导致子窗体重绘,因此,如果子窗体同时设置了 WS_EX_TRANSPARENT 属性,子窗体就会被父窗体刷没了。解决的办法是 RedrawWindow 的时候添加 RDW_ALLCHILDREN 标志,强制子窗体也重绘,而不要使用默认的 RedrawWindo
2009-09-02 09:40:00 1815
LLVM-8.0.0-win64
2019-03-25
cmake-3.13.4-win64-x64.msi
2019-03-13
resiprocate 1.8.12
2013-08-26
resiprocate 1.6 源码包
2011-03-29
bjam 第三方库编译脚本
2010-06-12
DXUT框架剖析 CHM 版
2009-12-15
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人