2009-05-25

开始认真写博客了

之前的博客位于 http://mindsbook.blogspot.com ,由于blogspot经常被封,所以决定还是使用国内的服务,最终还是确定baidu,主要有以下几个原因:
  1. 喜欢这个简单的界面
  2. high availability
  3. 响应速度还是可以的
而baidu的不足也是明显的:
  1. 这个编辑框也太傻了点(list都没有)
  2. 界面过于花哨,当然baidu就没想着让技术人员来入驻吧
  3. 不支持email写博客
即使有如上的不足,但是作为一个基本的blog hosting, baidu还是足够胜任基本的功能的,所以决定以后经常写博客,将自己的一些知识的积累,一些感想记录下来,也作为知识管理的一部分.至于技术人员为什么要写博客,你可以在这里这里看到.

有如下的计划:
  1. 每周写3篇中文的技术博客
  2. 每周写2篇英语的技术博客(这个会在使用另一个BSP的服务)
  3. 接下会把之前写的博客搬到这里
我写博客的大致流程会是:
  1. 使用gmail来写博客(比较喜欢它的编辑器)
  2. 复制到baidu的写博客编辑器中
  3. 发表,并且向blogspot中也同样发表(保持二者的同步)
当然最重要的就是坚持了,坚持,而后在漫长的道路上不断充实前行!

2009-05-21

itoa一个比较好的实现

代码如下:

void myitoa(int num, char* s, int radix)
{
int newnum;
int i=0;
int j;
char tmp;
newnum = (num<0)?(-num):num;   //此处可能会导致int overflow
while(newnum != 0)
{
tmp = (newnum % radix > 9)?(newnum % radix - 10 + 'A'):(newnum % radix + '0');
s[i++] = tmp;
newnum /= radix;
}
if(num<0)
s[i++] = '-';
s[i] = '\0';
//printf("%s => %d => %d\n", s, strlen(s), i);
// revert s
for(j=0; j<i/2; j++)
{
tmp = s[j];
s[j] = s[i-j-1];
s[i-j-1] = tmp;
}
}

这个函数的局限:
  1. 只能处理到36进制的数(当然不是程序的限制,没有合适的字符来表示更高进制的数了)
  2. s的大小在程序中无处理,更多基于调用者的职责
常见的错误:
  1. 负数未考虑
  2. 数的进制未考虑
  3. 大整数问题(一个典型的int取值范围为:-2147483648-2147483647 (VC6.0)
一个改进的实现为:

int myabs(int a)
{
return (a>0)?a:-a;
}

void revert(char *s)
{
int i, j, c;
for(i=0, j=strlen(s)-1; i<j; i++, j--)
{
c = s[i];
s[i] = s[j];
s[j] = c;
}
}

void myitoa(int num, char* s, int radix)
{
int newnum = num;
int i=0;
char tmp;
int t;
while(newnum != 0)
{
t = myabs(newnum % radix);
tmp = (t > 9)?(t - 10 + 'A'):(t + '0');
s[i++] = tmp;
newnum /= radix;
}
if(num<0)
s[i++] = '-';
s[i] = '\0';

// revert s
revert(s);
}
 

2009-05-15

使用 docbook完成第一个helloworld(中文Pdf)

作为一种基于XML的文档定义标准,docbook规定了相关的解释规范,而已有的不同的parser和compiler会将docbook的源文件解释为不同类型的目标文件,如html,word,pdf,rtf,txt等。本文主要介绍下面几部分的内容:在linux(ubuntu)下配置相应的docbook环境、基于docbook写出第一个可以编译为pdf的整个过程。
  1. 配置Linux下的docbook环境
    • 在ubuntu下可使用apt-get来获得相应的deb包,主要安装下面的几个包:
      • docbook
      • xmlto
      • docbook-utils
      • docbook-xls
      • FOP
  2. docbook的中文HelloWorld
    • 在开始进行中文之前,可先尝试英文的第一个HelloWorld
      • docbook源文件如下(命名为test.xml)
      • <?xml version="1.0" encoding="UTF-8"?>
        <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
        "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
        <book>
        <bookinfo>
        <title>My book </title>
        <author>
        <firstname>My First Name</firstname>
        <surname>My Last Name</surname>
        </author>
        <publisher>
        <publishername>CSDN</publishername>
        </publisher>
        <isbn>ISBN#</isbn>
        <copyright>
        <year>2005</year>
        </copyright>
        </bookinfo>
        <part>
        <title>My Part</title>
        <chapter>
        <title>My Chapter</title>
        <sect1>
        <title>My Section1</title>
        <para>This  is a demo of a book.</para>
        </sect1>
        </chapter>
        </part>
        </book> 
      •  使用命令 xmlto fo test.xml
      •  这时会生成一个test.fo文件
      • 使用命令 fop test.fo test.pdf
      • 即可生成相应的pdf文件

    • 中文的hello world
      • 而在含有中文的docbook中则复杂了许多,如需要相应字体的支持等(如果照搬上面的步骤则中文会出现#这样的字符)
      • 生成相应的字体信息文件(假定使用文泉字体)
      • fop-ttfreader -ttcname "WenQuanYi Zen Hei Mono" /usr/share/fonts/truetype/wqy/wqy-zenhei.ttc font.xml
      • 如果是ttc文件则需指定相应的ttcname
      • 生成fop的配置文件,首先在参考中的3下载配置文件,然后修改其中的fonts部分,并命名为config.xml,如下
      • <font metrics-url="font.xml" kerning="yes" embed-url="/usr/share/fonts/truetype/wqy/wqy-zenhei.ttc">
            <font-triplet name="WenQuanYiZenHei" style="normal" weight="normal"/>
            <font-triplet name="WenQuanYiZenHei" style="normal" weight="bold"/>
            </font> 
      • 其中metrics-url必须指定为刚生成的font.xml, embed-url为对应的字体路径
      • 这里系统xmlto默认(通常为 /usr/share/xml/docbook/stylesheet/nwalsh/fo/docbook.xsl),我们修改为(命名为my.xsl):
      • <?xml version='1.0'?>
        <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
        xmlns:exsl="http://exslt.org/common"
        xmlns:fo="http://www.w3.org/1999/XSL/Format"
        xmlns:ng="http://docbook.org/docbook-ng"
        xmlns:db="http://docbook.org/ns/docbook"
        exclude-result-prefixes="db ng exsl" version='1.0'>
        <xsl:import href="/usr/share/xml/docbook/stylesheet/nwalsh/fo/docbook.xsl" />
        <xsl:param name="l10n.gentext.language" select="'zh_cn'"/>
        <xsl:param name="body.font.family">WenQuanYiZenHei</xsl:param>
        <xsl:param name="body.font.size">10</xsl:param>
        <xsl:param name="monospace.font.family">Monaco</xsl:param>
        <xsl:param name="title.font.family">WenQuanYiZenHei</xsl:param>
        <xsl:param name="page.margin.inner">2cm</xsl:param>
        <xsl:param name="page.margin.outer">2cm</xsl:param>
        <xsl:param name="hyphenate">false</xsl:param>
        <xsl:param name="paper.type" select="'A4'" />
        <xsl:param name="draft.mode" select="'no'" />
        </xsl:stylesheet>
      • 注意上面加粗的行
      • 下面则是修改后的docbook源文件(含有中文),命名为 chinese.xml
      • <?xml version="1.0" encoding="UTF-8"?>
        <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
        "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
        <book>
        <bookinfo>
        <title>Python学习指南</title>
        <author>
        <firstname>朱</firstname>
        <surname>涛</surname>
        </author>
        <publisher>
        <publishername>清华大学出版社</publishername>
        </publisher>
        <isbn>ISBN#</isbn>
        <copyright>
        <year>2009</year>
        <holder>朱涛</holder>
        </copyright>
        </bookinfo>
        <chapter>
        <title>第一章</title>
        <sect1>
        <title>第一节</title>
        <para>正文内容.</para>
        </sect1>
        </chapter>
        </book>
      •  接着进行相应的编译即可
      • xmlto -x my.xls fo chinese.xml
      • -x 指定相应的xls
      • fop -c config.xml chinese.fo chinese.pdf
      • -c 载入特定的fop配置文件
      • 此时就应该可以看到含有中文的Pdf了
  3. 参考
    1. http://pdfhome.hope.com.cn/Article.aspx?CID=bf51a5b6-78a5-4fa3-9310-16e04aee8c78&AID=b01f4743-eee3-4a24-867b-9e71e8f5384d
    2. http://forum.ubuntu.org.cn/viewtopic.php?f=8&t=194109
    3. http://svn.apache.org/viewvc/xmlgraphics/fop/tags/fop-0_95/conf/fop.xconf?view=co

2009-05-08

关于cakephp安装的一些备忘

由于cakephp使用了apache的url rewrite所以必须首先配置apche的rewrite模块,下面主要基于ubuntu采用apt-get安装的apache.
  1. /etc/apache2/mod-enables/建立到/mod-availabe/rewrite.load的符号链接
  2. 修改/site-enable/下面的文件,可能为001default,配置合适的documentroot并配置指定目录的AllowOverride为All
  3. 这里cakephp就可以顺利运行了


2009-05-05

Thomas Reuters上机测试

今天没事去参加了这个上机测试,火箭对湖人的首场西部半决赛都没看成,呵呵, 到了人家公司还迟到了20来分钟,路上堵啊!
其实这个公司的环境挺nice的,不高的楼,看起来挺漂亮的。
一个MM领我进了测试机房,登录到了测试系统。
一气的多项选择题,主要考察下面几个方面的知识:
  1. C++语言的细节(什么拷贝构造函数是怎么回事呀)
  2. 数据库的知识(什么范式,sql语句)
  3. UML知识
  4. 网络安全方面的(如防火墙,病毒的一些常识)
  5. OO设计方面的
  6. 阅读程序
由于近一年都没怎么用过C++,一直都在学习和使用Python来完成日常的工作和学习,所以很多都是蒙的,其实也没打算怎么样,只是想看看题型,了解考查的知识点,以及对这个公司有些了解。