自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

陈硕的Blog

吾尝终日而思矣,不如须臾之所学也。吾尝跂而望矣,不如登高之博见也。……君子生非异也,善假于物也。 @bnu_chenshuo

  • 博客(150)
  • 资源 (3)
  • 收藏
  • 关注

原创 《C# Primer 中文版》探讨

我是陈硕,与侯捷老师合作翻译了《C# Primer》这本书。这本书于2003年底出版,已经快两年了。这是我参与翻译的第一本书,虽然在翻译过程中下了很大的功夫,但我相信其中一定还有很多不足之处,也正如读者评论的“翻译得不太成熟”。现在看来,这本书里很多译注是多余的,有点唠叨,可能会影响读者阅读的思路。(我的一位好朋友也曾经向我提到这一点。)这本书不是那种每看一遍都有新的收获的经典好书,它的作用在于助

2005-10-22 10:54:00 9159 8

原创 关于在FPGA上实现AES算法的笔记

针对 key 长度为 128 bits 的AES算法。1. AES算法要做10轮运算,最基本的实现实现用11cycles。2. 每轮加密要用到16个Sbox,每个Sbox要占用1个2048 bit 的ROM。key expansion要用4个Sbox。如果on-the-fly 地进行,那么一共要20个Sbox;如果提前做好key expansion,那么需要16个Sbox外加1408bits RA

2005-10-21 13:05:00 8263 2

原创 利用Bresenham算法控制多部步进电机匀速转动

计算机图形学中绘制直线的Bresenham算法原本是用在绘图仪上控制X轴方向和Y轴方向的两部电机的,最近遇到一个十分类似的步进电机控制问题,用Bresenham算法恰好能解决。问题描述:有左右两个相同的步进电机,用8051单片机控制L297 + L298芯片驱动,需要它们同时转动(同时启动,同时停止),但转速不同。例如左侧电机正转180步,同时右侧电机反转97步。这就好比从原点出发画一条到点(18

2005-09-24 21:48:00 8823 1

原创 分析函数调用关系图(call graph)的几种方法

绘制函数调用关系图对理解大型程序大有帮助。我想大家都有过一边读源码(并在头脑中维护一个调用栈),一边在纸上画函数调用关系,然后整理成图的经历。如果运气好一点,借助调试器的单步跟踪功能和call stack窗口,能节约一些脑力。不过如果要分析的是脚本语言的代码,那多半只好老老实实用第一种方法了。如果在读代码之前,手边就有一份调用图,岂不妙哉?下面举出我知道的几种免费的分析C/C++函数调用关系的工具

2005-09-24 19:28:00 88716 7

原创 用CodeViz绘制函数调用关系图(call graph)

CodeViz是《Understanding The Linux Virtual Memory Manager》(at Amazon,下载地址在页尾)的作者 Mel Gorman 写的一款分析C/C++源代码中函数调用关系的open source工具(类似的open source软件有 egypt、ncc)。其基本原理是给 GCC 打个补丁,让它在编译时每个源文件时 dump 出其中函数的 cal

2005-09-22 01:15:00 37170 10

原创 LaTeX 写作的两个辅助工具:统计中文字数和关闭Acrobat中的PDF文档

LaTeX 没有像 Word 那样自带中文字数统计功能,加上 LaTeX 源文件中有许多控制字符,不能通过文件大小获知其中有多少汉字。为此我用C写了一个统计中文字数的小工具,名为 cwc ,即 chinese word counter。这个程序只有 count_files() 函数使用了 Windows API,稍作修改就能移植到 Linux/Unix 下。#include #include #i

2004-11-27 20:59:00 15196 1

原创 为 LaTeX 添加英文 TrueType 字体

在Windows + MikTeX环境下,添加中文字体最方便的办法恐怕是使用 Hooklee 的 xGBKFonts 工具(http://www.hooklee.com/tex.html);在 Linux 环境下,王垠改进的 GBKFonts (http://learn.tsinghua.edu.cn/homepage/2001315450/programs.html)或许是最好的选择。我用 xG

2004-11-21 15:14:00 9318 2

原创 《Word排版艺术》读后感——兼谈与LaTeX的比较

《Word排版艺术》读后感——兼谈与LaTeX的比较 我有两年多的LaTeX使用经验,用它排实验报告、毕业论文和书籍(半本);Word的使用时间长一些,但真正用好也不过是近一两年的事。这两个软件我都用得很熟,我想我可以一边谈谈读《Word排版艺术》的感受,一边把Word和LaTeX这两个排版软件做一对比。(考虑到本文可能会以纯文本方式传播,我只好把LaTeX写成这样了L,另外,文本所称

2004-11-19 12:52:00 25093 7

原创 支付每个勘误 2.56$ 会花 Knuth 多少钱?

基本上不花钱:)因为 Knuth 寄的是支票。我想每个收到这样支票的人,都会把它当作自己从 TAOCP 中找到了错误的证据,用镜框装好,挂在墙上:)估计没有几个人真的去把有Knuth亲笔签名的支票兑现,毕竟Knuth的签名比$2.56更值钱:)有几个网页为证:http://www.kernelthread.com/miscellaneous/dek.htmlhttp://budling.nytud

2004-11-12 23:21:00 6368 3

原创 正态分布的随机数发生器 in C#

主要参考《Numerical Recipes in C++ 2/e》p.292~p.294 和《Simulation Modeling and Analysis 3/e》p.465~p.466。Box 和 Muller 在 1958 年给出了由均匀分布的随机变量生成正态分布的随机变量的算法。设 U1, U2 是区间 (0, 1) 上均匀分布的随机变量,且相互独立。令X1 = sqrt(-2*l

2004-11-12 12:23:00 9373 4

原创 SystemC 初始化步骤

环境:VC toolkit 2003 + SystemC 2.0.1   为了找出SystemC定义了哪些全局变量/静态变量,我在crt/src/crt0dat.c的 void _initterm(_PVFV * pfbegin, _PVFV * pfend) 函数中设下断点,at Line 598:         if ( *pfbegin != NULL )            (**pf

2004-07-05 13:15:00 10891 18

原创 SystemC——一套将C++扩展为硬件描述语言的Class Library (初学SystemC有感)

这几日接接触SystemC,有些感触:1. SystemC 是一套C++ Class Library,将C++扩展成了一门硬件描述语言(HDL)。我感觉,学习SystemC至少要懂两样东西:C++、一门硬件描述语言。我熟悉C++,并且熟悉Verilog,因此学SystemC能举一反三、触类旁通。2. SystemC 使用了C++的很多特性:多重继承、虚拟继承、模板、RTTI (at lea

2004-07-03 17:00:00 11409 8

原创 HEC虚拟机的一些改进建议

HEC虚拟机的一些改进建议 陈硕 2004-02-13 在《虚拟机的设计与实现——C/C++》一书中,作者Bill Blunden描述了一个简单但完整的虚拟机——HEC的设计及实现。在阅读第三章的过程中,我发现有几处值得改进的地方。不是针对HEC的总体设计和代码结构——那样牵一发而动全局,而是针对HEC虚拟机实现代码中某些细节做些改进。 1.        转换字节序 HEC的字节序(byte o

2004-06-21 11:24:00 8260 9

原创 第二届北师大程序设计竞赛

5月29日和5月30日这两天,北师大举行了第二届程序设计竞赛(暨 ACM 选拔赛)。我作为命题人(1 of 3)和裁判(1 of 4),参与了这次竞赛。 5月29日是热身赛,供选手熟悉比赛环境(PC2 )http://www.ecs.csus.edu/pc2/;30日上午9:30至下午2:30正式比赛,共6题,个人单独参赛,每人一台电脑,编程语言为C/C++,可查资料。 比赛过程中,评判软件没有出

2004-06-01 11:11:00 7887 7

原创 while (n-- > 0) 与 while (--n >= 0)

循环 n 次,除了最常用的 for (int i = 0; i 之外,还可以写 while (n-- > 0) {...} 和 while (--n >= 0) {...}。这两种写法的区别在于,如果 n 是 unsigned 类型,那么后面那种写法会导致infinite loop。今天就被这只小 bug 咬了一口:) 也怪自己偷懒,不爱写 for 循环。

2004-05-21 11:40:00 11888 6

原创 大学四年总结(一)

获专业一等奖学金次数:0获专业二等奖学金次数:0获专业三等奖学金次数:0获奖学金总次数:0获奖学金总金额:0元获各种荣誉称号:0次。专业课成绩排名:27 of 91英语:两次考6级,均不及格:(下场:被保送北师大电子系读研结论:一次不拿奖学金不难,难的是连续四年连一个三等奖学金都没有拿到,难上加难的是,这样的人居然还获得保送读研的资格,当真是天理不容啊:)

2004-05-19 23:07:00 16282 26

原创 LaTeX 与字体

在我看来,字体是 LaTeX 中最复杂的问题。1. 选择字体  适合屏幕阅读的字体不一定适合打印,适合CRT显示器的字体不一定适合LCD显示器。例如Windows自带的宋体在屏幕上显示很清晰,而打印出来就比较难看(显得单薄)。正文我一般喜欢用华康简宋或方正书宋简体这两种宋体。英文字体也是如此,在屏幕上我比较喜欢看无衬字体(sans serif)例如 Verdana 和 Arial,而打印到

2004-05-04 14:45:00 21931 4

原创 LaTeX 常用功能

1. 段首缩进  中文习惯在段首缩进两格,在LaTeX中,/parindent 表示段首缩进的长度,我们将它设置为当前字号的两个大写字母M的宽度,大约正好是两个汉字的宽度:/setlength{/parindent}{2em}LaTeX 默认每节的第一段的段首不缩进,这不符合中文排版习惯。我们希望正文的每一段都要缩进,使用indentfirst宏包就可办到:/usepackage{

2004-05-03 01:06:00 33002 8

原创 变长参数的 Tracer

几天前,在CSDN论坛看到这么一则讨论:在宏定义中怎么使用可变参数?(http://expert.csdn.net/Expert/topic/2925/2925165.xml)。楼主希望能定义这样的macro:#define fun1(a, b, ...)   fun2(__FILE__, __LINE__, a, b, ...)我猜楼主是想写trace,如果不能使用可变参数的macro,

2004-04-29 22:15:00 7511 10

原创 Linux 下配置 802.1X

寝室的网络采用802.1X认证,新装了个RedHat 9 ,发现上不了网,需要安装 802.1X 认证客户端。学校的网管只提供华为的Windows客户端,没有Linux版。自己动手,从 www.open1x.org 下载 xsupplicant ,从 http://libdnet.sourceforge.net/ 下载 libdnet-1.7.tar.gz 。先编译安装libdnet、再安装xsu

2004-04-29 16:07:00 15117 8

原创 LaTeX 印象

  LaTeX是一款半专业的排版软件。之所以说它“半专业”,是因为 1) 它能排出专业出版水准的书籍和文章;2) 它不是为专业排版人员准备,而是给书籍/文章的作者用的。我目前主要用LaTeX排版书籍和毕业设计报告,因为版式和内容完全可由我控制。如果用它排文章,那么哪家杂志社(非学术刊物)会接受LaTeX的稿件呢;)  学习LaTeX不难,一下午就能上手,一两周就能熟练运用。对我而言,LaTeX

2004-04-28 20:09:00 6673 8

原创 书籍的基本结构, in XML & LaTeX

http://worldhello.net/doc/docbook_howto/  三国演义      贯中    罗  宴桃园豪杰三结义 斩黄巾英雄首立功    话说天下大势,分久必合,合久必分。  张翼德怒鞭督邮 何国舅谋诛宦竖    且说董卓字仲颖,陇西临洮人也,官拜河东太守,自来骄傲。 

2004-04-28 15:39:00 5274 6

原创 Microsoft Visual C++ Toolkit 2003 发布

http://msdn.microsoft.com/visualc/vctoolkit2003/ The Microsoft Visual C++ Toolkit 2003 includes the core tools developers need to compile and link C++-based applications for Windows and the .NET Com

2004-04-23 17:10:00 8449 5

原创 算法复杂度攻击

1. Hashing我们经常使用这样的字符串的Hash函数:// 随手写的,未严格测试unsigned long Hash(char* str){    assert(NULL != str);    unsigned long hash_val = 0xDEEDBEEFul;   // hash seed    unsigned char* p = (unsigned char*)str

2004-04-22 13:06:00 7975 2

原创 书评:《C# Primer》 by Joe Casad

书评:《C# Primer》Joe Casad / 陈硕 译译注:Joe Casad是 C/C++ Users Journal 杂志的主编(editor-in-chief)。原文发表于 CUJ Online Exclusives, March 2003,网址为:http://www.cuj.com/webonly/2003/0303/web0303a/web0303a.htm

2003-08-12 22:15:00 3695

原创 zlib 与 libpng 的配置与使用 part 3 libpng的安装与生成PNG图片

libpng 的安装接下来,安装 libpng 的过程要稍微轻松些。先下载最新的 libpng 程序库源文件。网址是http://sourceforge.net/projects/libpng/或http://www.libpng.org/pub/png/。不妨设下载的文件是 libpng-1.2.5.tar.gz,将这个文件释放到D:/libpng/。修改D:/libpng/libpng

2003-04-04 10:54:00 25900 1

原创 zlib 与 libpng 的配置与使用 part1

zlib 与 libpng 的配置与使用Solstice  2003/04/3说明:本文节选自我主页上的一篇文章,原文介绍了1) Wave 文件的格式、2)读取 Wave 文件内容,并显示文件的基本信息、3)压缩库 zlib 的安装与简单应用、4)PNG 库 libpng 的安装、5)使用 libpng 生成 PNG 文件、6)绘制 Wave 文件的波形,这里只截取3、4、5这三部分内容。

2003-04-04 09:10:00 6117

原创 zlib 与 libpng 的配置与使用 part 2 zlib的安装

zlib 的安装libpng 是一套免费的、公开源代码的程序库,支持对 PNG 图形文件的创建、读写等操作。libpng 使用 zlib 程序库作为压缩引擎,zlib 也是著名的 gzip (GNU zip) 所采用的压缩引擎。我们首先安装zlib,从其官方网站下载最新的源程序,不妨假设文件名是zlib-1.1.4.tar.gz。网址:http://www.gzip.org/zlib/。

2003-04-04 09:10:00 9646 1

原创 用next_permutation()生成r-组合数,兼发现VC7的一个bug

    C++ standard library提供了两个生成排列的algorithms:next_permutation()与prev_permutation(),却没有提供生成组合数的标准函数。    由于排列与组合之间有着密切的联系,我们很容易就可以从“排列”获得“组合”。从n个元素中任取r个元素的组合,有n! / (r! * (n-r)!)个。这些组合可用多重集{r·1, (n-r)·

2002-10-21 09:10:00 7424 2

原创 STL性能测试

 作者主页http://www.chenshuo.com可下载测试文本与源代码C++ Standard Template Library——STL的性能究竟如何,不同版本的STL其性能差异有多少?为了解这些,让我们来做一个简单的测试吧。测试的基本思路是用C与C++分别实现一个程序,实现相同的功能,并要求C++程序的主要数据结构用STL中的Containers、Algorithms等来实现。

2001-10-03 12:18:00 15729 13

当析构函数遇到多线程── C++ 中线程安全的对象回调 PDF

编写线程安全的类不是难事,用同步原语保护内部状态即可。但是对象的生与死不能由对象自身拥有的互斥器来保护。如何保证即将析构对象 x 的时候,不会有另一个线程正在调用 x 的成员函数?或者说,如何保证在执行 x 的成员函数期间,对象 x 不会在另一个线程被析构?如何避免这种竞态条件是 C++ 多线程编程面临的基本问题,可以借助 boost 的 shared_ptr 和 weak_ptr 完美解决。这也是实现线程安全的 Observer 模式的必备技术。 本文源自陈硕在 2009 年 12 月上海 C++ 技术大会的一场演讲《当析构函数遇到多线程》,内容略有增删。原始 PPT 可从 http://download.csdn.net/source/1982430 下载。 本文读者应具有 C++ 多线程编程经验,熟悉互斥器、竞态条件等概念,了解智能指针,知道 Observer 设计模式。

2010-01-23

《当析构函数遇到多线程》PPT

这是陈硕在 2009 年上海 C++ 技术大会演讲《当析构函数遇到多线程》的 PPT 投影片,可自由用于个人学习,其他使用需得到作者许可。 简介:编写线程安全的类不是难事,用同步原语保护内部状态即可。但是对象的生与死不能由对象自身拥有的互斥器来保护。如何保证即将析构对象 x 的时候,不会有另一个线程正在调用 x 的成员函数?或者说,如何保证在执行 x 的成员函数期间,对象 x 不会在另一个线程被析构?如何避免这种 race condition 是 C++ 多线程编程面临的基本问题,可以借助 tr1 中的 shared_ptr 和 weak_ptr 完美解决。这也是实现线程安全的 Observer 模式的必备技术。

2010-01-10

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除