﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-金庆的专栏</title><link>http://www.cppblog.com/jinq0123/</link><description /><language>zh-cn</language><lastBuildDate>Sun, 05 Jul 2009 22:01:24 GMT</lastBuildDate><pubDate>Sun, 05 Jul 2009 22:01:24 GMT</pubDate><ttl>60</ttl><item><title>(Python编程)Pickle对象</title><link>http://www.cppblog.com/jinq0123/archive/2009/07/03/89167.html</link><dc:creator>金庆</dc:creator><author>金庆</author><pubDate>Fri, 03 Jul 2009 08:37:00 GMT</pubDate><guid>http://www.cppblog.com/jinq0123/archive/2009/07/03/89167.html</guid><wfw:comment>http://www.cppblog.com/jinq0123/comments/89167.html</wfw:comment><comments>http://www.cppblog.com/jinq0123/archive/2009/07/03/89167.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/jinq0123/comments/commentRss/89167.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/jinq0123/services/trackbacks/89167.html</trackback:ping><description><![CDATA[<p>Programming Python, 3rd Edition 翻译<br>最新版本见：<a href="http://wiki.woodpecker.org.cn/moin/PP3eD">http://wiki.woodpecker.org.cn/moin/PP3eD</a>
<br></p>
<p><br></p>
<p>19.4. Pickled Objects <br>
<br>
19.4. Pickle对象 <br>
<br>
</p>
<p>Probably
the biggest limitation of DBM keyed files is in what they can store:
data stored under a key must be a simple text string. If you want to
store Python objects in a DBM file, you can sometimes manually convert
them to and from strings on writes and reads (e.g., with str and eval
calls), but this takes you only so far. For arbitrarily complex Python
objects such as class instances and nested data structures, you need
something more. Class instance objects, for example, cannot be later
re-created from their standard string representations. Custom to-string
conversions are error prone and not general. <br>
<br>
</p>
<p>DBM
键控文件（DBM keyed
file）最大的限制也许在于他们可以存储的东西：一个键值下存储的数据必须是个简单文本字符串。如果您想要在DBM文件中储存Python对象，有时您
可以在读写的时候，手动进行与字符串的转换（例如，用str和eval调用），但只能做到这样。对任意复杂的Python对象，如类实例和嵌套的数据结
构，您需要更多的东西。例如，类实例对象以后无法从其标准字符串表达（string
representation）重建。自定义的到字符串的转换容易出错，并且不通用。 <br>
<br>
</p>
<p>The
Python pickle module, a standard part of the Python system, provides
the conversion step needed. It converts nearly arbitrary Python
in-memory objects to and from a single linear string format, suitable
for storing in flat files, shipping across network sockets between
trusted sources, and so on. This conversion from object to string is
often called serializationarbitrary data structures in memory are
mapped to a serial string form. <br>
<br>
</p>
<p>Python
系统的标准部件，pickle模块，提供了所需的转换步骤。它可以将几乎任意的Python内存对象，转换为单一线性的字符串格式，使之适于无格式文件存
储，或在可靠来源之间跨越网络套接口传输等等，并可反向转换。这种从对象到字符串的转换通常被称为序列化（serialization）：将内存中的任意
数据结构映射为串行字符串形式。 <br>
<br>
</p>
<p>The
string representation used for objects is also sometimes referred to as
a byte stream, due to its linear format. It retains all the content and
references structure of the original in-memory object. When the object
is later re-created from its byte string, it will be a new in-memory
object identical in structure and value to the original, though located
at a different memory address. The re-created object is effectively a
copy of the original. <br>
<br>
</p>
<p>对象的字符串表达由于其线性的格式，有时也被称为字节流。它包含了原始内存中对象的所有内容和引用结构。当对象后来从其字节串重建时，内存中新建的对象与原对象具有相同的结构和值，但位于不同的内存地址。该重建对象实际上是原对象的复制。 <br>
<br>
</p>
<p>Pickling
works on almost any Python datatypenumbers, lists, dictionaries, class
instances, nested structures, and moreand so is a general way to store
data. Because pickles contain native Python objects, there is almost no
database API to be found; the objects stored are processed with normal
Python syntax when they are later retrieved. <br>
<br>
</p>
<p>Pickle可用于几乎所有的Python数据类型：数字、列表、字典、类实例、嵌套结构，等等，因此它是存储数据的通用方法。因为pickle包含的是Python本地对象，所以几乎没有数据库的API；对象存储与处理及后来的提取用的都是通常的Python语法。 <br>
<br>
</p>
<p>19.4.1. Using Object Pickling <br>
<br>
</p>
<p>19.4.1. 使用对象pickle <br>
<br>
</p>
<p>Pickling
may sound complicated the first time you encounter it, but the good
news is that Python hides all the complexity of object-to-string
conversion. In fact, the pickle module 's interfaces are incredibly
simple to use. For example, to pickle an object into a serialized
string, we can either make a pickler and call its methods or use
convenience functions in the module to achieve the same effect: <br>
<br>
</p>
<p>第
一次听到pickle，可能觉得有点复杂，但好消息是，Python隐藏了所有从对象到字符串转换的复杂性。事实上，pickle模块的接口简单易用，简
直令人难以置信。例如，要pickle对象到一个序列化字符串，我们可以生成一个pickler，并调用其方法，或使用模块中的便捷函数来达到相同的效
果： <br>
<br>
</p>
<p>&#160;</p>
<pre>P = pickle.Pickler( file) <br></pre>
<p>Make a new pickler for pickling to an open output file object file. <br>
生成一个新的pickler，用来pickle到一个打开的输出文件对象file。 <br>
<br>
</p>
<p>&#160;</p>
<pre>P.dump( object) <br></pre>
<p>Write an object onto the pickler's file/stream. <br>
写一个对象到pickler的文件/流。 <br>
<br>
</p>
<p>&#160;</p>
<pre>pickle.dump( object, file) <br></pre>
<p>Same as the last two calls combined: pickle an object onto an open file. <br>
等同于上两个调用的组合：pickle对象到一个打开的文件。 <br>
<br>
</p>
<p>&#160;</p>
<pre>string = pickle.dumps( object) <br></pre>
<p>Return the pickled representation of object as a character string. <br>
返回一个字符串作为已pickle对象的表达。 <br>
<br>
</p>
<p>Unpickling
from a serialized string back to the original object is similarboth
object and convenience function interfaces are available: <br>
<br>
</p>
<p>从一个序列化字符串unpickle回原始对象是类似的，可以用对象也可以用便捷函数接口： <br>
<br>
</p>
<p>&#160;</p>
<pre>U = pickle.Unpickler( file) <br></pre>
<p>Make an unpickler for unpickling from an open input file object file. <br>
生成一个unpickler，用来从一个打开的文件对象file unpickle。 <br>
<br>
</p>
<p>&#160;</p>
<pre>object = U.load( )<br></pre>
<p>Read an object from the unpickler's file/stream. <br>
从unpickler的文件/流读取一个对象。 <br>
<br>
</p>
<p>&#160;</p>
<pre>object = pickle.load( file) <br></pre>
<p>Same as the last two calls combined: unpickle an object from an open file. <br>
等同于上两个调用的组合：从一个打开的文件unpickle一个对象。 <br>
<br>
</p>
<p>&#160;</p>
<pre>object = pickle.loads( string) <br></pre>
<p>Read an object from a character string rather than a file. <br>
从字符串读取一个对象，而不是从文件。 <br>
<br>
</p>
<p>Pickler
and Unpickler are exported classes. In all of the preceding cases, file
is either an open file object or any object that implements the same
attributes as file objects: <br>
<br>
</p>
<p>Pickler和Unpickler是导出类。在上述所有情况下，file是个已打开的文件对象，或者是实现了以下文件对象属性的任何对象： <br>
<br>
</p>
<p>Pickler calls the file's write method with a string argument. <br>
<br>
</p>
<p>Pickler会调用文件的write方法，参数是个字符串。 <br>
<br>
</p>
<p>Unpickler calls the file's read method with a byte count, and readline without arguments. <br>
<br>
</p>
<p>Unpickler会调用文件的read方法，参数是字节数，以及readline，无参数。 <br>
<br>
</p>
<p>Any
object that provides these attributes can be passed in to the file
parameters. In particular, file can be an instance of a Python class
that provides the read/write methods (i.e., the expected file-like
interface). This lets you map pickled streams to in-memory objects with
classes, for arbitrary use. For instance, the StringIO standard library
module discussed in Chapter 3 provides classes that map file calls to
and from in-memory strings. <br>
<br>
</p>
<p>任
何提供这些属性的对象都可以作为file参数传入。特别是，file可以是一个提供了读/写方法的Python类实例（即预期的类似文件的接口）。这让您
可以用类映射pickle流到内存对象，并可任意使用。例如，第3章讨论的标准库模块StringIO提供的类，它们可映射文件调用到内存字符串或反之。
<br>
<br>
</p>
<p>This
hook also lets you ship Python objects across a network, by providing
sockets wrapped to look like files in pickle calls at the sender, and
unpickle calls at the receiver (see the sidebar "Making Sockets Look
Like Files," in Chapter 13, for more details). In fact, for some,
pickling Python objects across a trusted network serves as a simpler
alternative to network transport protocols such as SOAP and XML-RPC;
provided that Python is on both ends of the communication (pickled
objects are represented with a Python-specific format, not with XML
text). <br>
<br>
</p>
<p>该
挂钩也可以让您通过网络传输Python对象，只要封装套接口，使之看上去像发送端pickle调用中的文件，以及像接收端unpickle调用中的文件
（详见第13章侧栏&#8220;使套接口看上去像文件&#8221;）。事实上，对一些人来说，pickle
Python对象并在一个值得信赖的网络上传输，是替代如SOAP和XML-RPC之类网络传输协议的一个简单方法；只要通信的两端都有Python（被
pickle的对象是用Python专有的格式表达的，而不是用XML文本）。 <br>
<br>
</p>
<p>19.4.2. Picking in Action <br>
<br>
</p>
<p>19.4.2. Pickle实战 <br>
<br>
</p>
<p>In more typical use, to pickle an object to a flat file, we just open the file in write mode and call the dump function: <br>
<br>
</p>
<p>典型的使用情况是，pickle对象到无格式文件，我们只需以写模式打开文件，并调用dump函数： <br>
<br>
</p>
<p>&#160;</p>
<pre>% python<br>&gt;&gt;&gt; table = {'a': [1, 2, 3],<br>             'b': ['spam', 'eggs'],<br>             'c': {'name':'bob'}}<br>&gt;&gt;&gt;<br>&gt;&gt;&gt; import pickle<br>&gt;&gt;&gt; mydb  = open('dbase', 'w')<br>&gt;&gt;&gt; pickle.dump(table, mydb)<br></pre>
<p><br>
<br>
</p>
<p>Notice
the nesting in the object pickled herethe pickler handles arbitrary
structures. To unpickle later in another session or program run, simply
reopen the file and call load: <br>
<br>
</p>
<p>注意这个被pickle对象中的嵌套：pickler可以处理任意结构。然后，在另一个会话或程序中unpickle，只要重新打开该文件，并调用load： <br>
<br>
</p>
<p>&#160;</p>
<pre>% python<br>&gt;&gt;&gt; import pickle<br>&gt;&gt;&gt; mydb  = open('dbase', 'r')<br>&gt;&gt;&gt; table = pickle.load(mydb)<br>&gt;&gt;&gt; table<br>{'b': ['spam', 'eggs'], 'a': [1, 2, 3], 'c': {'name': 'bob'}}<br></pre>
<p><br>
<br>
</p>
<p>The
object you get back from unpickling has the same value and reference
structure as the original, but it is located at a different address in
memory. This is true whether the object is unpickled in the same or a
future process. In Python-speak, the unpickled object is == but is not
is: <br>
<br>
</p>
<p>unpickle所得的对象具有与原对象相同的值和引用结构，但它位于不同的内存地址。无论在同一进程或另一进程unpickle，都是这样。用Python的话来说，unpickle后的对象是&#8220;==&#8221;关系，但不是&#8220;is&#8221;关系： <br>
<br>
</p>
<p>&#160;</p>
<pre>% python<br>&gt;&gt;&gt; import pickle<br>&gt;&gt;&gt; f = open('temp', 'w')<br>&gt;&gt;&gt; x = ['Hello', ('pickle', 'world')]           # list with nested tuple<br>&gt;&gt;&gt; pickle.dump(x, f)<br>&gt;&gt;&gt; f.close( )                                   # close to flush changes<br>&gt;&gt;&gt;<br>&gt;&gt;&gt; f = open('temp', 'r')<br>&gt;&gt;&gt; y = pickle.load(f)<br>&gt;&gt;&gt; y<br>['Hello', ('pickle', 'world')]<br>&gt;&gt;&gt;<br>&gt;&gt;&gt; x == y, x is y<br>(True, False)<br></pre>
<p><br>
<br>
</p>
<p>To
make this process simpler still, the module in Example 19-1 wraps
pickling and unpickling calls in functions that also open the files
where the serialized form of the object is stored. <br>
<br>
</p>
<p>为了让这一过程更简单，例19-1中的模块把pickle和unpickle调用封装在函数中，在函数中同时还打开文件，并将对象的序列化存储在该文件中。 <br>
<br>
</p>
<p>Example 19-1. PP3E\Dbase\filepickle.py </p>
<div class="codearea" dir="ltr" lang="en">
<script type="text/javascript">
function isnumbered(obj) {
  return obj.childNodes.length && obj.firstChild.childNodes.length && obj.firstChild.firstChild.className == 'LineNumber';
}
function nformat(num,chrs,add) {
  var nlen = Math.max(0,chrs-(''+num).length), res = '';
  while (nlen>0) { res += ' '; nlen-- }
  return res+num+add;
}
function addnumber(did, nstart, nstep) {
  var c = document.getElementById(did), l = c.firstChild, n = 1;
  if (!isnumbered(c))
    if (typeof nstart == 'undefined') nstart = 1;
    if (typeof nstep  == 'undefined') nstep = 1;
    n = nstart;
    while (l != null) {
      if (l.tagName == 'SPAN') {
        var s = document.createElement('SPAN');
        s.className = 'LineNumber'
        s.appendChild(document.createTextNode(nformat(n,4,' ')));
        n += nstep;
        if (l.childNodes.length)
          l.insertBefore(s, l.firstChild)
        else
          l.appendChild(s)
      }
      l = l.nextSibling;
    }
  return false;
}
function remnumber(did) {
  var c = document.getElementById(did), l = c.firstChild;
  if (isnumbered(c))
    while (l != null) {
      if (l.tagName == 'SPAN' && l.firstChild.className == 'LineNumber') l.removeChild(l.firstChild);
      l = l.nextSibling;
    }
  return false;
}
function togglenumber(did, nstart, nstep) {
  var c = document.getElementById(did);
  if (isnumbered(c)) {
    remnumber(did);
  } else {
    addnumber(did,nstart,nstep);
  }
  return false;
}
</script>
<script type="text/javascript">
document.write('<a href="#" href_cetemp="#" onclick="return togglenumber(\'ca-fb42528cb4c20d066e06b836307a75fa8e016e1b_000\', 1, 1);" \
                class="codenumbers">切换行号显示<\/a>');
</script>
<pre dir="ltr" id="CA-fb42528cb4c20d066e06b836307a75fa8e016e1b_000" lang="en">   1 import pickle<br>   2 <br>   3 def saveDbase(filename, object):<br>   4     file = open(filename, 'w')<br>   5     pickle.dump(object, file)          # pickle to file<br>   6     file.close( )                     # any file-like object will do<br>   7 <br>   8 def loadDbase(filename):<br>   9     file = open(filename, 'r')<br>  10     object = pickle.load(file)         # unpickle from file<br>  11     file.close( )                     # re-creates object in memory<br>  12     return object<br></pre>
</div>
<p><br>
<br>
</p>
<p>To
store and fetch now, simply call these module functions; here they are
in action managing a fairly complex structure with multiple references
to the same nested objectthe nested list called L at first is stored
only once in the file: <br>
<br>
</p>
<p>现在，存储和提取时只需调用这些模块函数；以下实例是个相当复杂的结构，具有对同一嵌套对象的多重引用，该嵌套列表，即第1个L，在文件中只会保存一次： <br>
<br>
</p>
<p>&#160;</p>
<pre>C:\...\PP3E\Dbase&gt;python<br>&gt;&gt;&gt; from filepickle import *<br>&gt;&gt;&gt; L = [0]<br>&gt;&gt;&gt; D = {'x':0, 'y':L}<br>&gt;&gt;&gt; table = {'A':L, 'B':D}              # L appears twice<br>&gt;&gt;&gt; saveDbase('myfile', table)          # serialize to file<br><br>C:\...\PP3E\Dbase&gt;python<br>&gt;&gt;&gt; from filepickle import *<br>&gt;&gt;&gt; table = loadDbase('myfile')         # reload/unpickle<br>&gt;&gt;&gt; table<br>{'B': {'x': 0, 'y': [0]}, 'A': [0]}<br>&gt;&gt;&gt; table['A'][0] = 1                   # change shared object<br>&gt;&gt;&gt; saveDbase('myfile', table)          # rewrite to the file<br><br>C:\...\PP3E\Dbase&gt;python<br>&gt;&gt;&gt; from filepickle import *<br>&gt;&gt;&gt; print loadDbase('myfile')           # both L's updated as expected<br>{'B': {'x': 0, 'y': [1]}, 'A': [1]}<br></pre>
<p><br>
<br>
</p>
<p>Besides
built-in types like the lists, tuples, and dictionaries of the examples
so far, class instances may also be pickled to file-like objects. This
provides a natural way to associate behavior with stored data (class
methods process instance attributes) and provides a simple migration
path (class changes made in module files are automatically picked up by
stored instances). Here's a brief interactive demonstration: <br>
<br>
</p>
<p>除
了内置的类型，如以上例子中的列表，元组和字典，类实例也可被pickle到类似文件的对象中。这提供了一个自然的方式来关联行为与存储的数据（类方法处
理实例的属性），并提供了一条简单的迁移路径（被存储的实例将自动获得模块文件中对类的更改）。以下是个简短的交互演示： <br>
<br>
</p>
<p>&#160;</p>
<pre>&gt;&gt;&gt; class Rec:<br>        def _ _init_ _(self, hours):<br>            self.hours = hours<br>        def pay(self, rate=50):<br>            return self.hours * rate<br><br>&gt;&gt;&gt; bob = Rec(40)<br>&gt;&gt;&gt; import pickle<br>&gt;&gt;&gt; pickle.dump(bob, open('bobrec', 'w'))<br>&gt;&gt;&gt;<br>&gt;&gt;&gt; rec = pickle.load(open('bobrec'))<br>&gt;&gt;&gt; rec.hours<br>40<br>&gt;&gt;&gt; rec.pay( )<br>2000<br></pre>
<p><br>
<br>
</p>
<p>We'll
explore how this works in more detail in conjunction with shelves later
in this chapteras we'll see, although the pickle module can be used
directly, it is also the underlying translation engine in both shelves
and ZODB databases. <br>
<br>
</p>
<p>我们将与本章下面的shelve一起详细探讨这是如此工作的。我们将会看到，虽然pickle模块可直接使用，但它也是shelve和ZODB数据库的底层翻译引擎。 <br>
<br>
</p>
<p>In fact, Python can pickle just about anything, except for: <br>
<br>
</p>
<p>事实上，Python可以pickle任何东西，除了： <br>
<br>
</p>
<p>Compiled
code objects; functions and classes record just their names in pickles,
to allow for later reimport and automatic acquisition of changes made
in module files. <br>
<br>
</p>
<p>编译的代码对象；函数和类在pickle中只是记录了它们的名字，以便后来重新导入和自动获取模块文件中的更改。 <br>
<br>
</p>
<p>Instances
of classes that do not follow class importability rules (more on this
at the end of the section "Shelve Files," later in this chapter). <br>
<br>
</p>
<p>不遵守类可导入规则（class importability rule）的类实例（本章后面&#8220;Shelve文件&#8221;一节的尾部有更多相关内容）。 <br>
<br>
</p>
<p>Instances
of some built-in and user-defined types that are coded in C or depend
upon transient operating system states (e.g., open file objects cannot
be pickled). <br>
<br>
</p>
<p>用C编码的或依赖于操作系统瞬态的一些内置的和用户定义类型的实例（例如，打开的文件对象无法pickle）。 <br>
<br>
</p>
<p>A <a class="nonexistent" href="http://wiki.woodpecker.org.cn/moin/PicklingError">PicklingError</a> is raised if an object cannot be pickled. <br>
<br>
</p>
<p>如果对象不能pickle，会引发<a class="nonexistent" href="http://wiki.woodpecker.org.cn/moin/PickleError">PickleError</a>。 <br>
<br>
</p>
<p>19.4.3. Pickler Protocols and cPickle <br>
<br>
</p>
<p>19.4.3. Pickler协议和cPickle <br>
<br>
</p>
<p>In
recent Python releases, the pickler introduced the notion of
protocolsstorage formats for pickled data. Specify the desired protocol
by passing an extra parameter to the pickling calls (but not to
unpickling calls: the protocol is automatically determined from the
pickled data): <br>
<br>
</p>
<p>在最近的Python版本中，pickler推出了协议的概念：pickle数据的保存格式。通过pickle调用时传入一个额外的参数，可指定所需的协议（但unpickle调用不需要：协议是自动从已pickle的数据确定的）： <br>
<br>
</p>
<p>&#160;</p>
<pre>pickle.dump(object, file, protocol)<br></pre>
<p><br>
<br>
</p>
<p>Pickled
data may be created in either text or binary protocols. By default, the
storage protocol is text (also known as protocol 0). In text mode, the
files used to store pickled objects may be opened in text mode as in
the earlier examples, and the pickled data is printable ASCII text,
which can be read (it's essentially instructions for a stack machine). <br>
<br>
</p>
<p>Pickle
数据可以按文本协议或二进制协议产生。默认情况下，存储协议是文本协议（也称为0号协议）。在文本模式下，用来存储pickle对象的文件可以用文本模式
打开，如上述的例子，并且pickle的数据是可打印的ASCII文本，并且是可读的（这基本上是对堆栈机实现的指示）。 <br>
<br>
</p>
<p>The
alternative protocols (protocols 1 and 2) store the pickled data in
binary format and require that files be opened in binary mode (e.g.,
rb, wb). Protocol 1 is the original binary format; protocol 2, added in
Python 2.3, has improved support for pickling of new-style classes.
Binary format is slightly more efficient, but it cannot be inspected.
An older option to pickling calls, the bin argument, has been subsumed
by using a pickling protocol higher than 0. The pickle module also
provides a HIGHEST_PROTOCOL variable that can be passed in to
automatically select the maximum value. <br>
<br>
</p>
<p>其
他协议（1号和2号协议
）以二进制格式存储pickle数据，并要求文件以二进制模式打开（例如：rb、wb）。1号协议是原始二进制格式；2号协议是Python
2.3增加的，它改善了对新型类pickle的支持。二进制格式效率更高一点，但它无法进行查看。旧的pickle调用有一个选项，即bin参数，现已被
归入使用大于0的协议。pickle模块还提供了一个HIGHEST_PROTOCOL变量，传入它可以自动选择最大的协议值。 <br>
<br>
</p>
<p>One
note: if you use the default text protocol, make sure you open pickle
files in text mode later. On some platforms, opening text data in
binary mode may cause unpickling errors due to line-end formats on
Windows: <br>
<br>
</p>
<p>注意：如果您使用默认的文本协议，以后请务必以文本模式打开pickle文件。在一些平台上，因为Windows的行尾格式不同，以二进制模式打开文本数据可能会导致unpickle错误: <br>
<br>
</p>
<p>&#160;</p>
<pre>&gt;&gt;&gt; f = open('temp', 'w')                  # text mode file on Windows<br>&gt;&gt;&gt; pickle.dump(('ex', 'parrot'), f)       # use default text protocol<br>&gt;&gt;&gt; f.close( ) <br>&gt;&gt;&gt;<br>&gt;&gt;&gt; pickle.load(open('temp', 'r'))         # OK in text mode<br>('ex', 'parrot')<br>&gt;&gt;&gt; pickle.load(open('temp', 'rb'))        # fails in binary<br>Traceback (most recent call last):<br>  File "&lt;pyshell#337&gt;", line 1, in -toplevel-<br>    pickle.load(open('temp', 'rb'))<br> ...lines deleted...<br>ValueError: insecure string pickle<br></pre>
<p><br>
<br>
</p>
<p>One
way to sidestep this potential issue is to always use binary mode for
your files, even for the text pickle protocol. Since you must open
files in binary mode for the binary pickler protocols anyhow (higher
than the default 0), this isn't a bad habit to get into: <br>
<br>
</p>
<p>回避这个潜在问题的方法之一是，总是使用二进制模式的文件，即使是用文本pickle协议。至少对于二进制pickler协议（高于默认0），您必须以二进制模式打开文件，所以这不是一个坏习惯： <br>
<br>
</p>
<p>&#160;</p>
<pre>&gt;&gt;&gt; f = open('temp', 'wb')                 # create in binary mode<br>&gt;&gt;&gt; pickle.dump(('ex', 'parrot'), f)       # use text protocol<br>&gt;&gt;&gt; f.close( )<br>&gt;&gt;&gt;<br>&gt;&gt;&gt; pickle.load(open('temp', 'rb'))<br>('ex', 'parrot')<br>&gt;&gt;&gt; pickle.load(open('temp', 'r'))<br>('ex', 'parrot')<br></pre>
<p><br>
<br>
</p>
<p>Refer
to Python's library manual for more information on the pickler. Also
check out marshal, a module that serializes an object too, but can
handle only simple object types. pickle is more general than marshal
and is normally preferred. <br>
<br>
</p>
<p>请参考Python库手册，以了解更多pickler的信息。另外，请查阅marshal，它也是一个序列化对象的模块，但只能处理简单对象类型。pickle比marshal更通用，并通常是首选。 <br>
<br>
</p>
<p>And
while you are flipping (or clicking) through that manual, be sure to
also see the entries for the cPickle modulea reimplementation of pickle
coded in C for faster performance. You can explicitly import cPickle
for a substantial speed boost; its chief limitation is that you cannot
subclass its versions of Pickle and Unpickle because they are
functions, not classes (this is not required by most programs). The
pickle and cPickle modules use compatible data formats, so they may be
used interchangeably. <br>
<br>
</p>
<p>而
当你翻看（或点击）Python手册时，请一定也要看看cPickle模块的条目，它是pickle的C语言实现，性能上更快。您可以显式导入
cPickle替代pickle，以大幅提升速度；其主要的限制是，你不能继承该版本的Pickle和Unpickle，因为它们是函数，而不是类（多数
程序并不要求它们是类）。pickle和cPickle模块使用兼容的数据格式，所以它们可以互换使用。 <br>
<br>
</p>
<p>If
it is available in your Python, the shelve module automatically chooses
the cPickle module for faster serialization, instead of pickle. I
haven't explained shelve yet, but I will now. <br>
<br>
</p>
如果您的Python中有shelve模块，它会自动选用cPickle模块，而不是pickle，以达到更快的序列化。我还没有解释过shelve，但我马上就会讲到它。 <br>
<br><img src ="http://www.cppblog.com/jinq0123/aggbug/89167.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/jinq0123/" target="_blank">金庆</a> 2009-07-03 16:37 <a href="http://www.cppblog.com/jinq0123/archive/2009/07/03/89167.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SVN中邪恶的replace</title><link>http://www.cppblog.com/jinq0123/archive/2009/06/18/87977.html</link><dc:creator>金庆</dc:creator><author>金庆</author><pubDate>Thu, 18 Jun 2009 06:53:00 GMT</pubDate><guid>http://www.cppblog.com/jinq0123/archive/2009/06/18/87977.html</guid><wfw:comment>http://www.cppblog.com/jinq0123/comments/87977.html</wfw:comment><comments>http://www.cppblog.com/jinq0123/archive/2009/06/18/87977.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/jinq0123/comments/commentRss/87977.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/jinq0123/services/trackbacks/87977.html</trackback:ping><description><![CDATA[SVN中邪恶的replace<br><br>（转载请注明来源于金庆的专栏）<br><br>用TSVN客户端删除一个文件, 然后再新建一个同名文件, <br>可以看到该文件上的图标被打上了TSVN的小红叉.<br>然后Add, Commit, 就会出现一条replace记录.<br>replace的操作会有个提示, 就是Add(as replacement)...命令项与普通的Add不同．<br><br>意思应该是该文件被替换了.<br><br>邪恶之处是以前的更改日志显示不出来了.<br>用revision graph可以看到所有历史, 只是在replace处是断裂的.<br>也就是说替换的效果是重新开启一个文件的更改记录, 隐藏之前的记录.<br>我想不出什么情况下需要这种功能.<br><br>更邪恶的是, revert changes from this revision会失败(TSVN 1.4.3).<br>错误原因是该文件的上个版本不存在.<br>好像所的Add操作都是无法revert, 应该算是个缺陷吧?<br><br>为了还原该替换，须删除该文件, 然后revert changes from this revision.<br><br>
<br><img src ="http://www.cppblog.com/jinq0123/aggbug/87977.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/jinq0123/" target="_blank">金庆</a> 2009-06-18 14:53 <a href="http://www.cppblog.com/jinq0123/archive/2009/06/18/87977.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>当心虚函数重载(overloaded-virtual)</title><link>http://www.cppblog.com/jinq0123/archive/2009/05/22/85378.html</link><dc:creator>金庆</dc:creator><author>金庆</author><pubDate>Fri, 22 May 2009 05:59:00 GMT</pubDate><guid>http://www.cppblog.com/jinq0123/archive/2009/05/22/85378.html</guid><wfw:comment>http://www.cppblog.com/jinq0123/comments/85378.html</wfw:comment><comments>http://www.cppblog.com/jinq0123/archive/2009/05/22/85378.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.cppblog.com/jinq0123/comments/commentRss/85378.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/jinq0123/services/trackbacks/85378.html</trackback:ping><description><![CDATA[当心虚函数重载(overloaded-virtual)<br><br>（转载请注明来源于金庆的专栏）<br><br>为网游万王之王3(KOK3)服务器添加新功能的时候, <br>发现某个类成员函数应该是const函数, 因为我的const函数要调用该函数, <br>顺手就加上了const.<br><br>再顺便看到该类有好多个明显是getter函数, 所以都加上了const.<br>编译没错就提交了.<br><br>结果没多久测试就发现了新版本的一个错误, 表现在其他功能上, <br>但由同事纠错后发现是我添加const的后果.<br><br>原来添加const的成员函数中, 有一个是virtual函数, 加了const后与子类的函数原型就不符了.<br>子类的函数成为父类虚函数的一个重载, 使virtual失效, 多态性无法表现出来.<br>解决方法就是子类的相应虚函数中也添加const.<br><br>教训: 更改虚函数原型时, 必须同时更改父类和子类.<br><br>gcc中有个-Woverloaded-virtual警告选项, 会报告这种虚函数重载.<br><br>我在Makefile中打开了-Woverloaded-virtual, 再次编译时就产生了许多警告.<br>大多数警告是正确的函数重载, 但还是发现了一个与我相同的错误, <br>这次是函数参数const有区别, 我发给相关人员处理了.<br><br>因为开了-Werror, 所有警告都会造成编译失败, <br>所以我们不能在Makefile中加入-Woverloaded-virtual警告选项.<br><br>代码示例:<br><br><span style="font-family: courier new; color: #600000;">class A</span><br style="font-family: courier new; color: #600000;"><span style="font-family: courier new; color: #600000;">{</span><br style="font-family: courier new; color: #600000;"><span style="font-family: courier new; color: #600000;">&nbsp;&nbsp; &nbsp;virtual void f() {};</span><br style="font-family: courier new; color: #600000;"><span style="font-family: courier new; color: #600000;">};</span><br style="font-family: courier new; color: #600000;"><br style="font-family: courier new; color: #600000;"><span style="font-family: courier new; color: #600000;">class B : public A</span><br style="font-family: courier new; color: #600000;"><span style="font-family: courier new; color: #600000;">{</span><br style="font-family: courier new; color: #600000;"><span style="font-family: courier new; color: #600000;">&nbsp;&nbsp; &nbsp;virtual void f() const {};</span><br style="font-family: courier new; color: #600000;"><span style="font-family: courier new; color: #600000;">};</span><br style="font-family: courier new; color: #600000;"><br style="font-family: courier new; color: #600000;"><span style="font-family: courier new; color: #600000;">int main()</span><br style="font-family: courier new; color: #600000;"><span style="font-family: courier new; color: #600000;">{</span><br style="font-family: courier new; color: #600000;"><span style="font-family: courier new; color: #600000;">&nbsp;&nbsp; &nbsp;return 0;</span><br style="font-family: courier new; color: #600000;"><span style="font-family: courier new; color: #600000;">}</span><br><br><span style="font-family: courier new; color: #0010ff;">$ g++ main.cpp -Woverloaded-virtual</span><br style="font-family: courier new; color: #0010ff;"><span style="font-family: courier new; color: #0010ff;">main.cpp:3: warning: `virtual void A::f()' was hidden</span><br style="font-family: courier new; color: #0010ff;"><span style="font-family: courier new; color: #0010ff;">main.cpp:8: warning:&nbsp;&nbsp; by `virtual void B::f() const'</span><br><br>Google的代码规范中要求所有子类的虚函数中都加上virtual, 是很有道理的.<br>虽然只要与父类虚函数签名相同, 加不加virtual都是虚函数,<br>但是以后更改函数签名时, 看到virtual很容易知道它是虚函数, 需要父类子类同时更改.<br><br>
<br><img src ="http://www.cppblog.com/jinq0123/aggbug/85378.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/jinq0123/" target="_blank">金庆</a> 2009-05-22 13:59 <a href="http://www.cppblog.com/jinq0123/archive/2009/05/22/85378.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>测试替身(Test Double)的定义</title><link>http://www.cppblog.com/jinq0123/archive/2009/05/18/83306.html</link><dc:creator>金庆</dc:creator><author>金庆</author><pubDate>Mon, 18 May 2009 10:52:00 GMT</pubDate><guid>http://www.cppblog.com/jinq0123/archive/2009/05/18/83306.html</guid><wfw:comment>http://www.cppblog.com/jinq0123/comments/83306.html</wfw:comment><comments>http://www.cppblog.com/jinq0123/archive/2009/05/18/83306.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/jinq0123/comments/commentRss/83306.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/jinq0123/services/trackbacks/83306.html</trackback:ping><description><![CDATA[摘自：http://blog.vsharing.com/wooley/A801453.html<br><br>
<p>&nbsp;&nbsp;<strong>测试替身</strong>(Test Double)<strong>的定义</strong>  </p>
<p>&nbsp;</p>
<table class="MsoNormalTable" style="border: medium none ; width: 100%; border-collapse: collapse;" width="100%" border="1" cellpadding="0" cellspacing="0">
    <tbody>
        <tr>
            <td style="border: 1pt dotted lightgrey; padding: 0.35pt;">
            <p><strong>测试替身型别</strong><strong></strong></p>
            </td>
            <td style="border-style: dotted dotted dotted none; border-color: lightgrey lightgrey lightgrey -moz-use-text-color; border-width: 1pt 1pt 1pt medium; padding: 0.35pt;">
            <p><strong>描述</strong><strong></strong></p>
            </td>
        </tr>
        <tr>
            <td style="border-style: none dotted dotted; border-color: -moz-use-text-color lightgrey lightgrey; border-width: medium 1pt 1pt; padding: 0.35pt;" valign="top">
            <p>Dummy</p>
            </td>
            <td style="border-style: none dotted dotted none; border-color: -moz-use-text-color lightgrey lightgrey -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0.35pt;" valign="top">
            <p>最简单、最原始的测试替身型别。Dummy 没有实作，最常用于需要参数值但不使用它的情况。Null 可视为是 Dummy，但真的 Dummy 是接口或基类的衍生，且完全不包含实作。</p>
            </td>
        </tr>
        <tr>
            <td style="border-style: none dotted dotted; border-color: -moz-use-text-color lightgrey lightgrey; border-width: medium 1pt 1pt; padding: 0.35pt;" valign="top">
            <p>Stub</p>
            </td>
            <td style="border-style: none dotted dotted none; border-color: -moz-use-text-color lightgrey lightgrey -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0.35pt;" valign="top">
            <p>Dummy 的上一级，Stub 是接口或基类的最低限度实作。会传回 Void 的方法通常完全不包含实作，而会传回值的方法通常会传回硬式编码的值。</p>
            </td>
        </tr>
        <tr>
            <td style="border-style: none dotted dotted; border-color: -moz-use-text-color lightgrey lightgrey; border-width: medium 1pt 1pt; padding: 0.35pt;" valign="top">
            <p>Spy</p>
            </td>
            <td style="border-style: none dotted dotted none; border-color: -moz-use-text-color lightgrey lightgrey -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0.35pt;" valign="top">
            <p>测试 Spy 类似 Stub，但除了提供客户端可叫用成员的实例，Spy 还会记录叫用了哪些成员，好让单元测试验证所叫用的成员是否符合预期。</p>
            </td>
        </tr>
        <tr>
            <td style="border-style: none dotted dotted; border-color: -moz-use-text-color lightgrey lightgrey; border-width: medium 1pt 1pt; padding: 0.35pt;" valign="top">
            <p>Fake</p>
            </td>
            <td style="border-style: none dotted dotted none; border-color: -moz-use-text-color lightgrey lightgrey -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0.35pt;" valign="top">
            <p>Fake 包含更复杂的实作，通常涉及所继承型别之不同成员之间的互动。虽然不是完整的生产实作，但 Fake 与生产实作很相似，尽管它会采取一些快捷方式。</p>
            </td>
        </tr>
        <tr>
            <td style="border-style: none dotted dotted; border-color: -moz-use-text-color lightgrey lightgrey; border-width: medium 1pt 1pt; padding: 0.35pt;" valign="top">
            <p>Mock</p>
            </td>
            <td style="border-style: none dotted dotted none; border-color: -moz-use-text-color lightgrey lightgrey -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0.35pt;" valign="top">
            <p>Mock 是由 Mock 链接库动态建立 (其他通常是由测试开发人员使用程序代码来产生)。测试开发人员永远看不到实作接口或基类的实际程序代码，但是可以设定 Mock 以提供传回值、预期要叫用的特定成员...等等。视其中的设定而定，Mock 的行为可能会像 Dummy、Stub 或 Spy。</p>
            </td>
        </tr>
    </tbody>
</table>
&nbsp;
<br><br><img src ="http://www.cppblog.com/jinq0123/aggbug/83306.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/jinq0123/" target="_blank">金庆</a> 2009-05-18 18:52 <a href="http://www.cppblog.com/jinq0123/archive/2009/05/18/83306.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Boost求数组的大小</title><link>http://www.cppblog.com/jinq0123/archive/2009/05/07/82145.html</link><dc:creator>金庆</dc:creator><author>金庆</author><pubDate>Thu, 07 May 2009 05:24:00 GMT</pubDate><guid>http://www.cppblog.com/jinq0123/archive/2009/05/07/82145.html</guid><wfw:comment>http://www.cppblog.com/jinq0123/comments/82145.html</wfw:comment><comments>http://www.cppblog.com/jinq0123/archive/2009/05/07/82145.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/jinq0123/comments/commentRss/82145.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/jinq0123/services/trackbacks/82145.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 求数组的大小，感觉boost库中应该有这个功能, 找了好长时间, 终于找到了.<br>原来是boost::extent, 属于boost::type_traits.&nbsp;&nbsp;<a href='http://www.cppblog.com/jinq0123/archive/2009/05/07/82145.html'>阅读全文</a><img src ="http://www.cppblog.com/jinq0123/aggbug/82145.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/jinq0123/" target="_blank">金庆</a> 2009-05-07 13:24 <a href="http://www.cppblog.com/jinq0123/archive/2009/05/07/82145.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>9C失去Wow代理权将促进中国Mangos的繁荣</title><link>http://www.cppblog.com/jinq0123/archive/2009/04/15/80040.html</link><dc:creator>金庆</dc:creator><author>金庆</author><pubDate>Wed, 15 Apr 2009 10:37:00 GMT</pubDate><guid>http://www.cppblog.com/jinq0123/archive/2009/04/15/80040.html</guid><wfw:comment>http://www.cppblog.com/jinq0123/comments/80040.html</wfw:comment><comments>http://www.cppblog.com/jinq0123/archive/2009/04/15/80040.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/jinq0123/comments/commentRss/80040.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/jinq0123/services/trackbacks/80040.html</trackback:ping><description><![CDATA[<p>9C失去Wow代理权将促进中国Mangos的繁荣</p>
<p>九城发布告全体员工书 确认续约魔兽无望, <br>详见: <a href="http://www.cnbeta.com/articles/81930.htm">http://www.cnbeta.com/articles/81930.htm</a></p>
<p>但是9C掌握了Wow的内幕技术, 这一优势如果投入到Mangos的开发中去, 那将是振奋人心的事情.<br></p>
<img src ="http://www.cppblog.com/jinq0123/aggbug/80040.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/jinq0123/" target="_blank">金庆</a> 2009-04-15 18:37 <a href="http://www.cppblog.com/jinq0123/archive/2009/04/15/80040.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Mangos的指令处理函数</title><link>http://www.cppblog.com/jinq0123/archive/2009/04/15/80037.html</link><dc:creator>金庆</dc:creator><author>金庆</author><pubDate>Wed, 15 Apr 2009 10:07:00 GMT</pubDate><guid>http://www.cppblog.com/jinq0123/archive/2009/04/15/80037.html</guid><wfw:comment>http://www.cppblog.com/jinq0123/comments/80037.html</wfw:comment><comments>http://www.cppblog.com/jinq0123/archive/2009/04/15/80037.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/jinq0123/comments/commentRss/80037.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/jinq0123/services/trackbacks/80037.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: WorldSession中总共有300多个指令包处理函数, 以Handle开头, 无返回值, 参数为WorldPacket&. 例如: void HandleCharEnumOpcode(WorldPacket& recvPacket); 处理函数按功能分散在多个XXXHandler.cpp中实现. 例如: ArenaTeamHandler.cpp, AuctionHouseHandler.cpp. &nbsp;&nbsp;<a href='http://www.cppblog.com/jinq0123/archive/2009/04/15/80037.html'>阅读全文</a><img src ="http://www.cppblog.com/jinq0123/aggbug/80037.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/jinq0123/" target="_blank">金庆</a> 2009-04-15 18:07 <a href="http://www.cppblog.com/jinq0123/archive/2009/04/15/80037.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Wow, Mangos登录时的SRP6认证</title><link>http://www.cppblog.com/jinq0123/archive/2009/04/10/79490.html</link><dc:creator>金庆</dc:creator><author>金庆</author><pubDate>Fri, 10 Apr 2009 05:06:00 GMT</pubDate><guid>http://www.cppblog.com/jinq0123/archive/2009/04/10/79490.html</guid><wfw:comment>http://www.cppblog.com/jinq0123/comments/79490.html</wfw:comment><comments>http://www.cppblog.com/jinq0123/archive/2009/04/10/79490.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/jinq0123/comments/commentRss/79490.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/jinq0123/services/trackbacks/79490.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 以Mangos代码为参考, 解析SRP6的原理和实现. SRP全称Secure Remote Password（安全远程密码），是一个开源认证协议。&nbsp;&nbsp;<a href='http://www.cppblog.com/jinq0123/archive/2009/04/10/79490.html'>阅读全文</a><img src ="http://www.cppblog.com/jinq0123/aggbug/79490.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/jinq0123/" target="_blank">金庆</a> 2009-04-10 13:06 <a href="http://www.cppblog.com/jinq0123/archive/2009/04/10/79490.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Mingw下bjam编译Luabind</title><link>http://www.cppblog.com/jinq0123/archive/2009/04/03/78770.html</link><dc:creator>金庆</dc:creator><author>金庆</author><pubDate>Fri, 03 Apr 2009 01:36:00 GMT</pubDate><guid>http://www.cppblog.com/jinq0123/archive/2009/04/03/78770.html</guid><wfw:comment>http://www.cppblog.com/jinq0123/comments/78770.html</wfw:comment><comments>http://www.cppblog.com/jinq0123/archive/2009/04/03/78770.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/jinq0123/comments/commentRss/78770.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/jinq0123/services/trackbacks/78770.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: luabind-0.8只提供了bjam编译方式.<br>按手册上的要求,设置好BOOST_ROOT和LUA_PATH后, 运行bjam, 报错:&nbsp;&nbsp;<a href='http://www.cppblog.com/jinq0123/archive/2009/04/03/78770.html'>阅读全文</a><img src ="http://www.cppblog.com/jinq0123/aggbug/78770.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/jinq0123/" target="_blank">金庆</a> 2009-04-03 09:36 <a href="http://www.cppblog.com/jinq0123/archive/2009/04/03/78770.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用boost::spirit实现的表达式求值</title><link>http://www.cppblog.com/jinq0123/archive/2009/03/27/78047.html</link><dc:creator>金庆</dc:creator><author>金庆</author><pubDate>Fri, 27 Mar 2009 08:24:00 GMT</pubDate><guid>http://www.cppblog.com/jinq0123/archive/2009/03/27/78047.html</guid><wfw:comment>http://www.cppblog.com/jinq0123/comments/78047.html</wfw:comment><comments>http://www.cppblog.com/jinq0123/archive/2009/03/27/78047.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.cppblog.com/jinq0123/comments/commentRss/78047.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/jinq0123/services/trackbacks/78047.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 用boost::spirit实现一个表达式求值看上去比较简单。我这个还有点问题，有空格时会解析失败，请大家看看是什么原因？&nbsp;&nbsp;<a href='http://www.cppblog.com/jinq0123/archive/2009/03/27/78047.html'>阅读全文</a><img src ="http://www.cppblog.com/jinq0123/aggbug/78047.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/jinq0123/" target="_blank">金庆</a> 2009-03-27 16:24 <a href="http://www.cppblog.com/jinq0123/archive/2009/03/27/78047.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>内部推荐的职位</title><link>http://www.cppblog.com/jinq0123/archive/2009/03/17/76859.html</link><dc:creator>金庆</dc:creator><author>金庆</author><pubDate>Tue, 17 Mar 2009 05:48:00 GMT</pubDate><guid>http://www.cppblog.com/jinq0123/archive/2009/03/17/76859.html</guid><wfw:comment>http://www.cppblog.com/jinq0123/comments/76859.html</wfw:comment><comments>http://www.cppblog.com/jinq0123/archive/2009/03/17/76859.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/jinq0123/comments/commentRss/76859.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/jinq0123/services/trackbacks/76859.html</trackback:ping><description><![CDATA[<style>
st1\:*{behavior:url(#default#ieooui) }
</style><style>
<!--
/* Font Definitions */
@font-face
{font-family:System;
panose-1:0 0 0 0 0 0 0 0 0 0;}
@font-face
{font-family:宋体;
panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
{font-family:"\@宋体";
panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
{font-family:"\@System";
panose-1:0 0 0 0 0 0 0 0 0 0;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{margin:0cm;
margin-bottom:.0001pt;
text-align:justify;
text-justify:inter-ideograph;
font-size:10.5pt;
font-family:"Times New Roman";}
a:link, span.MsoHyperlink
{color:blue;
text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
{color:purple;
text-decoration:underline;}
span.EmailStyle17
{mso-style-type:personal;
font-family:Arial;
color:windowtext;}
span.EmailStyle18
{mso-style-type:personal;
font-family:Arial;
color:navy;}
span.EmailStyle19
{mso-style-type:personal;
font-family:Arial;
color:navy;}
span.EmailStyle20
{mso-style-type:personal;
font-family:Arial;
color:navy;}
span.EmailStyle21
{mso-style-type:personal-reply;
font-family:Arial;
color:navy;}
@page Section1
{size:595.3pt 841.9pt;
margin:72.0pt 90.0pt 72.0pt 90.0pt;
layout-grid:15.6pt;}
div.Section1
{page:Section1;}
/* List Definitions */
@list l0
{mso-list-id:1353914316;
mso-list-type:hybrid;
mso-list-template-ids:330341086 1178243674 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}
@list l0:level1
{mso-level-number-format:japanese-counting;
mso-level-text:%1、;
mso-level-tab-stop:21.0pt;
mso-level-number-position:left;
margin-left:21.0pt;
text-indent:-21.0pt;}
@list l0:level2
{mso-level-tab-stop:72.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;}
@list l0:level3
{mso-level-tab-stop:108.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;}
@list l0:level4
{mso-level-tab-stop:144.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;}
@list l0:level5
{mso-level-tab-stop:180.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;}
@list l0:level6
{mso-level-tab-stop:216.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;}
@list l0:level7
{mso-level-tab-stop:252.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;}
@list l0:level8
{mso-level-tab-stop:288.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;}
@list l0:level9
{mso-level-tab-stop:324.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;}
ol
{margin-bottom:0cm;}
ul
{margin-bottom:0cm;}
-->
</style>
<div class="Section1">
<p><font size="1" face="Arial">
<p><font>本次接受内部推荐的职位如下：</font></p>
<p><font>请将简历发送至邮箱jinq0123AT163.com。并在主题中标明：&#8220;内部推荐&#8221;以及所职位名称。</font></p>
<font>	</font></font></p>
<p><font size="2" face="Times New Roman">&nbsp;</font></p>
<p><font size="3" face="宋体">一、<font size="1" face="Times New Roman">&nbsp;&nbsp; </font></font><font size="3" face="宋体">产品专员（活动策划）</font><font size="3" face="宋体">&nbsp;</font><font size="3" face="System">
</font><font size="3" face="宋体">招聘人数：1人</font></p>
<p><font size="3" face="宋体">职位要求：<br>1、两年以上网络游戏运营活动策划工作经验<br>2、熟悉网络游戏产品及市场发展，热爱游戏事业，理解用户需求<br>3、出色的中文书面表达能力，要有一定的计划能力<br>4、具备激情、敏锐的观察力、分析能力和创意能力，思维严谨<br>5、出色的工作责任心、团队沟通能力和吃苦耐劳精神，能够适应加班<br>职位描述：<br>1、游戏线上、线下活动策划及方案拟定<br>2、与各相关部门有效的沟通，组织、协调和监督活动的执行情况<br>3、竞争对手相关活动收集与分析<br>4、配合市场人员完成的各种促销活动企划<br>5、竞争对手产品内容收集与分析</font></p>
<p><font size="3" face="宋体">&nbsp;</font></p>
<p><font size="3" face="宋体">&nbsp;</font></p>
<p><font size="3" face="宋体">二</font><font size="3" face="宋体">&nbsp;</font><font size="3" face="System">
</font><font size="3" face="宋体">产品专员（新闻写作方向）</font><font size="3" face="宋体">&nbsp;&nbsp;&nbsp;&nbsp;</font><font size="3" face="宋体"> </font><font size="3" face="宋体">招聘人数：<font color="navy">1</font>人</font></p>
<p><font size="3" face="宋体">职位要求：<br>1、出众的文字功底、丰富想象力、缜密的逻辑思维能力<br>2、具备较强的传播价值分析能力和创意能力，有大局观以及对细节的把控能力<br>3、曾经在大型媒体上发表过作品者优先<br>4、具备互联网、媒体或游戏行业的从业背景，文科类优先<br>5、接触过多款网络游戏，并对专业游戏媒体有一定了解<br>6、性格开朗，良好的沟通能力、组织协调能力、团队合作精神，工作热情、主动，能承受较强的工作压力<font color="navy"></font></font></p>
<p><font size="3" face="宋体">7</font><font size="3" face="宋体">、英文良好</font></p>
<p><font size="3" face="宋体">职位描述：<br>1、参与新闻宣传计划的拟定工作<br>2、依照新闻宣传计划，与各相关部门有效的沟通，进行新闻策划及撰写<br>3、新闻稿件及各种软文稿件的撰写及组织</font></p>
<p><font size="3" face="宋体">&nbsp;</font></p>
<p><font size="3" face="宋体">三、高级UI设计师</font></p>
<p><font size="3" face="宋体">招聘人数：2人</font></p>
<p><font size="3" face="宋体">岗位职责：<br><font color="#333333">1.</font><font color="#333333">参与FLASH社区和3D社区整体风格的设计。<br>2.完成社区界面风格的创意设计。</font></font></p>
<p><font size="3" face="宋体">岗位要求：<br>1.设计，美术相关专业毕业，两年以上UI设计或网页设计经验。<br>2.对用户体验有深入理解，并具有很好的沟通能力；<br>3.热爱游戏，思维活跃，富有团队精神，吃苦耐劳。<br>4.熟练使用Photoshop，
illustrator及Flash等绘图及制作软件；<br>5.有游戏UI设计经验者优先。</font></p>
<p><font size="3" face="宋体">&nbsp;</font></p>
<p><font size="3" face="宋体">四</font><font size="3" face="宋体">&nbsp;&nbsp;</font><font size="3" face="System">
</font><font size="3" face="宋体">游戏3D组长</font></p>
<p><font size="3" face="宋体">工作职责：</font></p>
<p><font size="3" face="宋体">1</font><font size="3" face="宋体">、建设并领导美术团队开发高质量的网络游戏产品</font></p>
<p><font size="3" face="宋体">2</font><font size="3" face="宋体">、设定美术风格，保障游戏美术品质</font></p>
<p><font size="3" face="宋体">3</font><font size="3" face="宋体">、带领团队并参与制作，为成员提供艺术、技术上的指导</font></p>
<p><font size="3" face="宋体">4</font><font size="3" face="宋体">、建立高效的游戏美术开发流程，掌握管理开发进度</font></p>
<p><font size="3" face="宋体">5</font><font size="3" face="宋体">、认真审核部门内部员工的业绩、态度和潜力，并给予评定原由与报告</font></p>
<p><font size="3" face="宋体">任职要求：</font></p>
<p><font size="3" face="宋体">1</font><font size="3" face="宋体">、沟通能力强，善于发现和解决问题，积极主动，敢于担当责任。</font></p>
<p><font size="3" face="宋体">2</font><font size="3" face="宋体">、本科以上学历</font></p>
<p><font size="3" face="宋体">3</font><font size="3" face="宋体">、4年以上网络游戏开发经历</font></p>
<p><font size="3" face="宋体">4</font><font size="3" face="宋体">、完整指导至少2款网络游戏产品美术开发经历，并曾担任美术主管</font></p>
<p><font size="3" face="宋体">5</font><font size="3" face="宋体">、2年以上专业制作（原画，3d，2d，特效）经验</font></p>
<p><font size="3" face="宋体">6</font><font size="3" face="宋体">、了解并热爱网络游戏，热衷于游戏开发</font></p>
<p><font size="3" face="宋体">7</font><font size="3" face="宋体">、有次世代游戏开发管理和制作经验者优先</font></p>
<p><font size="3" face="宋体">&nbsp;</font></p>
<p><font size="3" face="宋体">五</font><font size="3" face="宋体">&nbsp;</font><font size="3" face="System">
3D</font><font size="3" face="宋体">游戏地图编辑师</font></p>
<p><font size="3" face="宋体">工作职责：</font></p>
<p><font size="3" face="宋体">游戏场景地图编辑，制作地图，摆放物件等．</font></p>
<p><font size="3" face="宋体">任职要求：</font></p>
<p><font size="3" face="宋体">1</font><font size="3" face="宋体">、有着扎实的美术功底和悟性，有良好的三维空间思维和场景大局观</font></p>
<p><font size="3" face="宋体">2</font><font size="3" face="宋体">、热爱游戏，有很好的团队合作精神和交流协调能力</font></p>
<p><font size="3" face="宋体">3</font><font size="3" face="宋体">、能吃苦耐劳，工作态度严谨务实</font></p>
<p><font size="3" face="宋体">4</font><font size="3" face="宋体">、自学能力强，能快速掌握新的软件和应用</font></p>
<p><font size="3" face="宋体">5</font><font size="3" face="宋体">、有游戏3D场景人物制作经验者优先</font></p>
<p><font size="3" face="宋体">6</font><font size="3" face="宋体">、有1年以上3D游戏地图编辑经验者优先</font></p>
<p><font size="3" face="宋体">&nbsp;</font></p>
<p><font size="3" face="宋体">六</font><font size="3" face="宋体">&nbsp;</font><font size="3" face="System">
</font><font size="3" face="宋体">角色原画、场景原画</font></p>
<p><font size="3" face="宋体">任职要求：</font></p>
<p><font size="3" face="宋体">1</font><font size="3" face="宋体">、两年以上游戏原画经验，独立设计能力突出。造型色彩基础扎实</font></p>
<p><font size="3" face="宋体">2</font><font size="3" face="宋体">、手绘和相应的软件应用要熟练</font></p>
<p><font size="3" face="宋体">3</font><font size="3" face="宋体">、有相应的工作上的作品可供参考</font></p>
<p><font size="3" face="宋体">&nbsp;</font></p>
<p><font size="3" face="宋体">七</font><font size="3" face="宋体">&nbsp;</font><font size="3" face="System">
</font><font size="3" face="宋体">资深游戏策划</font></p>
<p><font size="3" face="宋体">岗位要求：</font><font size="3" face="宋体">&nbsp;</font><font size="3" face="System">
</font><font size="3" face="宋体"></font></p>
<p><font size="3" face="宋体">1</font><font size="3" face="宋体">、大专以上学历，熟练运用office系列软件；</font></p>
<p><font size="3" face="宋体">2</font><font size="3" face="宋体">、两年以上大型mmorpg策划经验，至少有一款参与制作的mmorpg上市运营；</font></p>
<p><font size="3" face="宋体">3</font><font size="3" face="宋体">、曾负责过大型mmorpg中社会关系设计并能提出完备的设计方案，对玩家交流需求有深入研究，善于设计玩家互动、社区建设；</font></p>
<p><font size="3" face="宋体">4</font><font size="3" face="宋体">、逻辑思维能力强，有创意；</font></p>
<p><font size="3" face="宋体">5</font><font size="3" face="宋体">、良好的沟通协调能力，团队意识强，能承受高强度工作压力。</font></p>
<p><font size="3" face="宋体">&nbsp;</font></p>
<p><font size="3" face="宋体">八</font><font size="3" face="宋体">&nbsp;&nbsp;</font><font size="3" face="System"> Flash
</font><font size="3" face="宋体">开发工程师</font></p>
<p><font size="3" face="宋体">岗位要求：</font></p>
<p><font size="3" face="宋体">1</font><font size="3" face="宋体">、熟练使用flash或flex，精通AS3开发；</font></p>
<p><font size="3" face="宋体">2</font><font size="3" face="宋体">、精通oop，有良好的程序构架设计以及编程习惯；</font></p>
<p><font size="3" face="宋体">3</font><font size="3" face="宋体">、熟悉flash和后台数据通讯机制，了解flash与socket通信；</font></p>
<p><font size="3" face="宋体">4</font><font size="3" face="宋体">、工作认真负责，具有沟通及良好的团队合作精神；</font></p>
<p><font size="3" face="宋体">5</font><font size="3" face="宋体">、大专以上学历，有开发基于flash技术的大型2D社区的工作经历者优先考虑。</font></p>
<p><font size="3" face="宋体">&nbsp;</font></p>
<p><font size="3" face="宋体">九</font><font size="3" face="宋体">&nbsp;&nbsp;</font><font size="3" face="System">
Flash/3D</font><font size="3" face="宋体">社区策划</font></p>
<p><font size="3" face="宋体">岗位要求：</font></p>
<p><font size="3" face="宋体">1</font><font size="3" face="宋体">、有两年以上的游戏或社区策划经验；</font></p>
<p><font size="3" face="宋体">2</font><font size="3" face="宋体">、对社区的研究和开发充满激情，对用户体验和产品细节方面有独特见解；</font></p>
<p><font size="3" face="宋体">3</font><font size="3" face="宋体">、曾负责过大型mmorpg中社会关系设计并能提出完备的设计方案，对玩家交流需求有深入研究者优先；</font></p>
<p><font size="3" face="宋体">4</font><font size="3" face="宋体">、逻辑思维能力强，创意丰富；</font></p>
<p><font size="3" face="宋体">5</font><font size="3" face="宋体">、语言表达及书面表达能力强；</font></p>
<p><font size="3" face="宋体">6</font><font size="3" face="宋体">、沟通协调能力强，富有团队精神，有敬业精神。</font></p>
<p><font size="3" face="宋体">&nbsp;</font></p>
<p><font color="black" size="2" face="宋体">巨人网络集团有限公司<br></font><font color="black" size="2" face="Arial">Giant
Interactive Group, Inc.</font><font color="black" size="2" face="宋体"><br></font><font color="black" size="2" face="宋体">中国上海市桂林路396号29号楼2楼 <br></font> 29th Building, 396
Guilin Road XuHui District, Shanghai, PRC 200233<font color="black" size="2" face="宋体"><br></font><font color="#333333" size="3" face="宋体"><br>&nbsp;</font></p>
<p><font size="1" face="Arial">&nbsp;</font></p>
</div>
<br>  <img src ="http://www.cppblog.com/jinq0123/aggbug/76859.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/jinq0123/" target="_blank">金庆</a> 2009-03-17 13:48 <a href="http://www.cppblog.com/jinq0123/archive/2009/03/17/76859.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>内部推荐的职位</title><link>http://www.cppblog.com/jinq0123/archive/2009/02/28/75148.html</link><dc:creator>金庆</dc:creator><author>金庆</author><pubDate>Sat, 28 Feb 2009 05:34:00 GMT</pubDate><guid>http://www.cppblog.com/jinq0123/archive/2009/02/28/75148.html</guid><wfw:comment>http://www.cppblog.com/jinq0123/comments/75148.html</wfw:comment><comments>http://www.cppblog.com/jinq0123/archive/2009/02/28/75148.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/jinq0123/comments/commentRss/75148.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/jinq0123/services/trackbacks/75148.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 请将简历发送至邮箱。并在主题中标明：“内部推荐”以及所职位名称。&nbsp;&nbsp;<a href='http://www.cppblog.com/jinq0123/archive/2009/02/28/75148.html'>阅读全文</a><img src ="http://www.cppblog.com/jinq0123/aggbug/75148.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/jinq0123/" target="_blank">金庆</a> 2009-02-28 13:34 <a href="http://www.cppblog.com/jinq0123/archive/2009/02/28/75148.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C调用lua脚本的效率测试</title><link>http://www.cppblog.com/jinq0123/archive/2009/02/17/73998.html</link><dc:creator>金庆</dc:creator><author>金庆</author><pubDate>Tue, 17 Feb 2009 01:32:00 GMT</pubDate><guid>http://www.cppblog.com/jinq0123/archive/2009/02/17/73998.html</guid><wfw:comment>http://www.cppblog.com/jinq0123/comments/73998.html</wfw:comment><comments>http://www.cppblog.com/jinq0123/archive/2009/02/17/73998.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/jinq0123/comments/commentRss/73998.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/jinq0123/services/trackbacks/73998.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 以下代码以C语言为基准，测试了C调用Lua循环和循环调用Lua的效率。结论是不要频繁地穿越C/Lua边界. &nbsp;&nbsp;<a href='http://www.cppblog.com/jinq0123/archive/2009/02/17/73998.html'>阅读全文</a><img src ="http://www.cppblog.com/jinq0123/aggbug/73998.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/jinq0123/" target="_blank">金庆</a> 2009-02-17 09:32 <a href="http://www.cppblog.com/jinq0123/archive/2009/02/17/73998.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>log4cxx调试日志选择性输出的配置方法</title><link>http://www.cppblog.com/jinq0123/archive/2009/02/16/73934.html</link><dc:creator>金庆</dc:creator><author>金庆</author><pubDate>Mon, 16 Feb 2009 06:48:00 GMT</pubDate><guid>http://www.cppblog.com/jinq0123/archive/2009/02/16/73934.html</guid><wfw:comment>http://www.cppblog.com/jinq0123/comments/73934.html</wfw:comment><comments>http://www.cppblog.com/jinq0123/archive/2009/02/16/73934.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.cppblog.com/jinq0123/comments/commentRss/73934.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/jinq0123/services/trackbacks/73934.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 默认所有日志等级为WARN, 不会输出DEBUG日志,<br>只需显式设定某一类日志的级别, 就可以选择性地输出该类日志.<br>如调试A类时, 取消配置文件中的注释就行了.&nbsp;&nbsp;<a href='http://www.cppblog.com/jinq0123/archive/2009/02/16/73934.html'>阅读全文</a><img src ="http://www.cppblog.com/jinq0123/aggbug/73934.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/jinq0123/" target="_blank">金庆</a> 2009-02-16 14:48 <a href="http://www.cppblog.com/jinq0123/archive/2009/02/16/73934.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>解决TSVN的diff显示中文件不全的问题</title><link>http://www.cppblog.com/jinq0123/archive/2009/02/14/73780.html</link><dc:creator>金庆</dc:creator><author>金庆</author><pubDate>Sat, 14 Feb 2009 05:30:00 GMT</pubDate><guid>http://www.cppblog.com/jinq0123/archive/2009/02/14/73780.html</guid><wfw:comment>http://www.cppblog.com/jinq0123/comments/73780.html</wfw:comment><comments>http://www.cppblog.com/jinq0123/archive/2009/02/14/73780.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.cppblog.com/jinq0123/comments/commentRss/73780.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/jinq0123/services/trackbacks/73780.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: TortoiseSVN的diff显示中文有些问题, 多数不能完整显示出来. 好像是整个TortoiseSVN对中文字符都有问题, 如blame会崩溃,但是选中"Use test viewer..."用Notepad显示就会正常.&nbsp;&nbsp;<a href='http://www.cppblog.com/jinq0123/archive/2009/02/14/73780.html'>阅读全文</a><img src ="http://www.cppblog.com/jinq0123/aggbug/73780.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/jinq0123/" target="_blank">金庆</a> 2009-02-14 13:30 <a href="http://www.cppblog.com/jinq0123/archive/2009/02/14/73780.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>巨人网络内部推荐的职位</title><link>http://www.cppblog.com/jinq0123/archive/2009/02/10/73394.html</link><dc:creator>金庆</dc:creator><author>金庆</author><pubDate>Tue, 10 Feb 2009 08:52:00 GMT</pubDate><guid>http://www.cppblog.com/jinq0123/archive/2009/02/10/73394.html</guid><wfw:comment>http://www.cppblog.com/jinq0123/comments/73394.html</wfw:comment><comments>http://www.cppblog.com/jinq0123/archive/2009/02/10/73394.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/jinq0123/comments/commentRss/73394.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/jinq0123/services/trackbacks/73394.html</trackback:ping><description><![CDATA[<pre>巨人网络内部推荐的职位<br><br>直接发电子简历给我就行了！(jinq0123AT163.com)<br><br></pre>
<p><strong> 一、&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</strong> <strong> 资深游戏策划</strong> </p>
<p><strong> 岗位要求</strong> ：&nbsp;
</p>
<p>1、大专以上学历，熟练运用office系列软件；</p>
<p>2、两年以上大型mmorpg策划经验，至少有一款参与制作的mmorpg上市运营；</p>
<p>3、曾负责过大型mmorpg中社会关系设计并能提出完备的设计方案，对玩家交流需求有深入研究，善于设计玩家互动、社区建设；</p>
<p>4、逻辑思维能力强，有创意；</p>
<p>5、良好的沟通协调能力，团队意识强，能承受高强度工作压力。</p>
<p>&nbsp;</p>
<p><strong> 二、&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</strong> <strong> 测试部经理</strong> </p>
<p><strong> 岗位要求：</strong> </p>
<p>1、3年以上软件测试或开发经验，大专及以上学历； </p>
<p>2、熟悉软件开发过程，及相关规范；</p>
<p>3、有团队管理经验，能制定合理的团队工作流程和工作计划；</p>
<p>4、具有游戏相关经验者优先。</p>
<p>&nbsp;</p>
<p><strong> 三、&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</strong> <strong> 高级java</strong> <strong> 软件工程师</strong> </p>
<p><strong> 岗位要求：</strong> </p>
<p>1、 本科以上学历，计算机相关专业，6年以上相关Java工作经验3年以上架构设计开发经验；</p>
<p>2、 擅长系统分析与设计，有大型项目基础及应用架构设计；</p>
<p>3、 精通开发框架：Struts2、Hibernate、Spring等，并深刻理解其工作机制，并有能力修改原代码程序；</p>
<p>4、 精通Tomcat，熟悉GlassFish、JBoss等应用服务器；</p>
<p>5、 熟悉oracle、mysql；对分布式数据处理有一定了解；</p>
<p>6、 精通设计模式；</p>
<p>7、 细致认真、善于沟通、能够承担较大压力、责任心强。</p>
<p>&nbsp;</p>
<p><strong> 四、&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</strong> <strong> Flash </strong> <strong> 开发工程师</strong> </p>
<p><strong> 岗位要求：</strong> </p>
<p>1、熟练使用flash或flex，精通AS3开发；</p>
<p>2、精通oop，有良好的程序构架设计以及编程习惯；</p>
<p>3、熟悉flash和后台数据通讯机制，了解flash与socket通信；</p>
<p>4、工作认真负责，具有沟通及良好的团队合作精神；</p>
<p>5、大专以上学历，有开发基于flash技术的大型2D社区的工作经历者优先考虑。</p>
<p>&nbsp;</p>
<p><strong> 五、&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</strong> <strong> Flash/3D</strong> <strong> 社区策划</strong> </p>
<p><strong> 岗位要求：</strong> </p>
<p>1、有两年以上的游戏或社区策划经验；</p>
<p>2、对社区的研究和开发充满激情，对用户体验和产品细节方面有独特见解；</p>
<p>3、曾负责过大型mmorpg中社会关系设计并能提出完备的设计方案，对玩家交流需求有深入研究者优先；</p>
<p>4、逻辑思维能力强，创意丰富；</p>
<p>5、语言表达及书面表达能力强；</p>
<p>6、沟通协调能力强，富有团队精神，有敬业精神。</p>
<p>&nbsp;</p>
<p><strong> 六、&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</strong> <strong> 高级UI</strong> <strong> 设计师</strong> </p>
<p>招聘人数：</p>
<p>2人</p>
<p><strong> 岗位职责：</strong> <br>1.参与FLASH社区和3D社区整体风格的设计。<br>2.完成社区界面风格的创意设计。</p>
<p><strong> 岗位要求：</strong> <br>1.设计，美术相关专业毕业，两年以上UI设计或网页设计经验。<br>2.对用户体验有深入理解，并具有很好的沟通能力；<br>3.热爱游戏，思维活跃，富有团队精神，吃苦耐劳。<br>4.熟练使用Photoshop，
illustrator及Flash等绘图及制作软件；<br>5.有游戏UI设计经验者优先。</p>
<p>&nbsp;</p>
<p><strong> 七、&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</strong> <strong> 邮件开发工程师（中级以上）</strong> </p>
<p>所属部门：研究院软件安全实验室邮件项目组</p>
<p><strong> 岗位职责：</strong> </p>
<p>1、电子邮件系统MTA开发；</p>
<p>2、反垃圾邮件模块开发；</p>
<p>3、邮件系统控制台开发。</p>
<p><strong> 任职资格：</strong> </p>
<p>1、精通linux平台下开发；</p>
<p>2、精通C/C++语言，了解web开发；</p>
<p>3、计算机、数学或相关专业本科及以上学历，2年以上工作经验；</p>
<p>4、有邮件系统开发经验者优先，有服务器系统开发经验者优先。</p>
<p><strong> &nbsp;</strong> </p>
<p><strong> 八、&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</strong> <strong> 客户端端软件工程师（中级以上）</strong> </p>
<p><strong> 所属部门：研究院即时通讯部</strong> </p>
<p>岗位职责：</p>
<p>负责IM客户端相关功能的开发</p>
<p><strong> 任职资格：</strong> </p>
<p>1、精通windows平台下开发；</p>
<p>2、精通C/C++语言；</p>
<p>3、熟悉Visual C++、</p>
<p>4、计算机、数学或相关专业本科及以上学历；</p>
<p>5、2年以上工作经验，有相关经验者优先。</p>
<p>&nbsp;</p>
<p><strong> 九、&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</strong> <strong> 服务器端软件工程师（中级以上）</strong> </p>
<p>所属部门：研究院即时通讯部</p>
<p><strong> 岗位职责：</strong> </p>
<p>负责IM服务器端相关功能的开发</p>
<p><strong> 任职资格：</strong> </p>
<p>1、精通linux平台下开发，精通C/C++语言；</p>
<p>2、良好的语言表法能力，有一定写作能力，良好的工作精神，本科或以上学历；</p>
<p>3、具有良好的团队协作精神和沟通能力，具有较高的自我学习能力；</p>
<p>4、2年以上工作经验，有相关经验者优先。</p>
<p>&nbsp;</p>
<p><strong> 十、&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</strong> <strong> 软件工程师</strong> </p>
<p>所属部门：平台中心技术部工具开发组</p>
<p><strong> 岗位职责：</strong> </p>
<p>1、参与或负责公司内部客户端软件/工具（非游戏）的设计与开发；</p>
<p>2、参与中小型内部应用系统的设计与开发，配合开发java/PHP等程序实现数据库系统；</p>
<p>3、参与内部应用系统ActiveX控件的开发；</p>
<p>4、完成部门经理或项目经理交付的其他设计开发任务。</p>
<p><strong> 任职资格：</strong> </p>
<p>1、具备2年以上基于C/C++的客户端程序开发经验；</p>
<p>2、具备丰富的UI经验、软件架构设计能力；</p>
<p>3、熟悉COM、ActiveX、MySQL、Web Servrice等技术；</p>
<p>4、熟悉bosst、stl者优先；</p>
<p>5、具备较好的沟通协调能力、理解表达能力、团队合作能力、学习教育能力。</p>
<p>&nbsp;</p>
<p>巨人网络集团有限公司<br>Giant
Interactive Group, Inc.<br>中国上海市桂林路396号29号楼2楼 <br>2F 29th Building, 396
Guilin Road XuHui District, Shanghai, PRC 200233<br><br></p>
<p>&nbsp;</p>
<br> <img src ="http://www.cppblog.com/jinq0123/aggbug/73394.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/jinq0123/" target="_blank">金庆</a> 2009-02-10 16:52 <a href="http://www.cppblog.com/jinq0123/archive/2009/02/10/73394.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C字符串长度定义规范</title><link>http://www.cppblog.com/jinq0123/archive/2009/01/07/71430.html</link><dc:creator>金庆</dc:creator><author>金庆</author><pubDate>Wed, 07 Jan 2009 11:31:00 GMT</pubDate><guid>http://www.cppblog.com/jinq0123/archive/2009/01/07/71430.html</guid><wfw:comment>http://www.cppblog.com/jinq0123/comments/71430.html</wfw:comment><comments>http://www.cppblog.com/jinq0123/archive/2009/01/07/71430.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/jinq0123/comments/commentRss/71430.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/jinq0123/services/trackbacks/71430.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 定义字符串长度有两种方式, 一种是用字符串的大小, 一种是字符串的长度.<br>字符串的大小即内存空间的大小, 而串长度加1才是所需空间.&nbsp;&nbsp;<a href='http://www.cppblog.com/jinq0123/archive/2009/01/07/71430.html'>阅读全文</a><img src ="http://www.cppblog.com/jinq0123/aggbug/71430.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/jinq0123/" target="_blank">金庆</a> 2009-01-07 19:31 <a href="http://www.cppblog.com/jinq0123/archive/2009/01/07/71430.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>按照旧系统做准没错，年底的奖金肯定多</title><link>http://www.cppblog.com/jinq0123/archive/2008/12/27/70502.html</link><dc:creator>金庆</dc:creator><author>金庆</author><pubDate>Sat, 27 Dec 2008 05:34:00 GMT</pubDate><guid>http://www.cppblog.com/jinq0123/archive/2008/12/27/70502.html</guid><wfw:comment>http://www.cppblog.com/jinq0123/comments/70502.html</wfw:comment><comments>http://www.cppblog.com/jinq0123/archive/2008/12/27/70502.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/jinq0123/comments/commentRss/70502.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/jinq0123/services/trackbacks/70502.html</trackback:ping><description><![CDATA[摘自：<a href="http://tech.sina.com.cn/s/2008-12-25/1008933342.shtml">软件开发经验总结</a><br><br>在一些软件公司中,总存在着一些&#8220;高人&#8221;，他们写代码从来不写文档，不做设计，代码不写注释，跟用户瞎扯几句之后就开始动手写代码了，他们的代码一
般人都看不懂，经过无数次改BUG之后，他们做开发的系统居然也上线了，再经过用户无数次的蹂躏，系统也越跑越稳定。该系统成为了该公司至高无上的产品，
普通人如果想看懂该系统，必须在它的代码上摸索个10年8年的，什么&#8220;设计模式、分层结构&#8221;的思想，在这些公司里都是瞎扯，只要能把用户搞定，一切就搞定
了。
<p>　　每次新项目开始的时候，老板总是苦口婆心地对项目组说&#8220;咱们的那套系统，那可是金宝山，花了公司那么多的资源，经过用户多层的考
验，都是精华，你们项目中如果什么模块跟它相似的，就直接拿来用好了。&#8221;
程序员B不听老板的话，设计了一套很牛的算法解决了业务的问题，最后，由于系统中存在了一个小BUG，被老板骂了一顿，闹到不得不离职，辛苦工作了一年，
年终奖都没有了。程序员A听从了老板的话，一切按照那套旧系统的模式做，即使用户不满意，也由老板通过一些其他的手段去解决，最后，程序员A当上了项目经
理，在公司里当起了&#8220;九千岁&#8221;，每次遇人就说，那套旧系统真是好东西啊！从此之后，大家都学乖了，什么算法和机构，都按照旧系统的方法做，即使是错了，也
不是自己的责任，大家都不再思考了，反正按照旧系统做准没错，年底的奖金肯定多。</p>
<br><img src ="http://www.cppblog.com/jinq0123/aggbug/70502.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/jinq0123/" target="_blank">金庆</a> 2008-12-27 13:34 <a href="http://www.cppblog.com/jinq0123/archive/2008/12/27/70502.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>文化部要求巨人网络整改《巨人》游戏</title><link>http://www.cppblog.com/jinq0123/archive/2008/12/25/GiantGame.html</link><dc:creator>金庆</dc:creator><author>金庆</author><pubDate>Thu, 25 Dec 2008 01:01:00 GMT</pubDate><guid>http://www.cppblog.com/jinq0123/archive/2008/12/25/GiantGame.html</guid><wfw:comment>http://www.cppblog.com/jinq0123/comments/70298.html</wfw:comment><comments>http://www.cppblog.com/jinq0123/archive/2008/12/25/GiantGame.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/jinq0123/comments/commentRss/70298.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/jinq0123/services/trackbacks/70298.html</trackback:ping><description><![CDATA["<font style="font-style: italic;"><font class="show_c" id="zoom">人民网讯　媒体报道上海巨人网络科技有限公司运营的《巨人》游戏中出现&#8220;洗浴中心&#8221;、&#8220;异性按摩&#8221;等功能，在社会上引发了较大反响</font></font><span style="font-style: italic;"></span>"<br><br>-- 人民网 <a href="http://game.people.com.cn/GB/48644/48662/8561490.html">文化部要求巨人网络整改《巨人》游戏
</a><br><br>大街上到处是&#8220;洗浴中心&#8221;，倒没听到什么较大反响。<br>要是这个社会可以像开发人员整改游戏一样方便地整改，那该多好啊。<br><br><br><br> <img src ="http://www.cppblog.com/jinq0123/aggbug/70298.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/jinq0123/" target="_blank">金庆</a> 2008-12-25 09:01 <a href="http://www.cppblog.com/jinq0123/archive/2008/12/25/GiantGame.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Boost中文文档地址</title><link>http://www.cppblog.com/jinq0123/archive/2008/12/22/BoostDocCh.html</link><dc:creator>金庆</dc:creator><author>金庆</author><pubDate>Mon, 22 Dec 2008 01:33:00 GMT</pubDate><guid>http://www.cppblog.com/jinq0123/archive/2008/12/22/BoostDocCh.html</guid><wfw:comment>http://www.cppblog.com/jinq0123/comments/70029.html</wfw:comment><comments>http://www.cppblog.com/jinq0123/archive/2008/12/22/BoostDocCh.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/jinq0123/comments/commentRss/70029.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/jinq0123/services/trackbacks/70029.html</trackback:ping><description><![CDATA[感谢STLChina提供空间，Boost中文文档:<br><br><a href="http://www.stlchina.org/boost/index.html">http://www.stlchina.org/boost/index.html</a><br><br><br>
<br><img src ="http://www.cppblog.com/jinq0123/aggbug/70029.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/jinq0123/" target="_blank">金庆</a> 2008-12-22 09:33 <a href="http://www.cppblog.com/jinq0123/archive/2008/12/22/BoostDocCh.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>《万王之王3》主题歌歌词有奖大征集</title><link>http://www.cppblog.com/jinq0123/archive/2008/12/16/kok3sing.html</link><dc:creator>金庆</dc:creator><author>金庆</author><pubDate>Tue, 16 Dec 2008 05:09:00 GMT</pubDate><guid>http://www.cppblog.com/jinq0123/archive/2008/12/16/kok3sing.html</guid><wfw:comment>http://www.cppblog.com/jinq0123/comments/69562.html</wfw:comment><comments>http://www.cppblog.com/jinq0123/archive/2008/12/16/kok3sing.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/jinq0123/comments/commentRss/69562.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/jinq0123/services/trackbacks/69562.html</trackback:ping><description><![CDATA[<pre id="line1">《万王之王3》主题歌歌词有奖大征集</pre>
<br><a href="http://ztg.kok3.ztgame.com/"><img alt="" src="http://www.cppblog.com/images/cppblog_com/jinq0123/kok3sing.JPG"></a><br><br>http://ztg.kok3.ztgame.com/
<br><br> <img src ="http://www.cppblog.com/jinq0123/aggbug/69562.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/jinq0123/" target="_blank">金庆</a> 2008-12-16 13:09 <a href="http://www.cppblog.com/jinq0123/archive/2008/12/16/kok3sing.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用const_reverse_iterator迭代的问题</title><link>http://www.cppblog.com/jinq0123/archive/2008/12/16/UsingConstReverseIterator.html</link><dc:creator>金庆</dc:creator><author>金庆</author><pubDate>Tue, 16 Dec 2008 04:59:00 GMT</pubDate><guid>http://www.cppblog.com/jinq0123/archive/2008/12/16/UsingConstReverseIterator.html</guid><wfw:comment>http://www.cppblog.com/jinq0123/comments/69561.html</wfw:comment><comments>http://www.cppblog.com/jinq0123/archive/2008/12/16/UsingConstReverseIterator.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/jinq0123/comments/commentRss/69561.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/jinq0123/services/trackbacks/69561.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: STL迭代的代码写过许多, 突然出现这种错误有点不敢相信. 仔细看了一遍没有拼写错误, 又判断不出是什么错.&nbsp;&nbsp;<a href='http://www.cppblog.com/jinq0123/archive/2008/12/16/UsingConstReverseIterator.html'>阅读全文</a><img src ="http://www.cppblog.com/jinq0123/aggbug/69561.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/jinq0123/" target="_blank">金庆</a> 2008-12-16 12:59 <a href="http://www.cppblog.com/jinq0123/archive/2008/12/16/UsingConstReverseIterator.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>TortoiseSVN也可以用来比较两个文件</title><link>http://www.cppblog.com/jinq0123/archive/2008/12/10/TSVNDiffFiles.html</link><dc:creator>金庆</dc:creator><author>金庆</author><pubDate>Wed, 10 Dec 2008 05:07:00 GMT</pubDate><guid>http://www.cppblog.com/jinq0123/archive/2008/12/10/TSVNDiffFiles.html</guid><wfw:comment>http://www.cppblog.com/jinq0123/comments/69053.html</wfw:comment><comments>http://www.cppblog.com/jinq0123/archive/2008/12/10/TSVNDiffFiles.html#Feedback</comments><slash:comments>8</slash:comments><wfw:commentRss>http://www.cppblog.com/jinq0123/comments/commentRss/69053.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/jinq0123/services/trackbacks/69053.html</trackback:ping><description><![CDATA[TortoiseSVN也可以用来比较两个文件<br><br>（转载请注明来源于金庆的专栏）<br><br>TortoiseSVN的Diff菜单一般用来比较当前文件作了哪些更改.<br><br>无意中发现TSVN的Diff也可以比较两个文件.<br>只要选中两个文件, 然后右键Diff就会比较这两个文件了.<br><br>
<br><img src ="http://www.cppblog.com/jinq0123/aggbug/69053.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/jinq0123/" target="_blank">金庆</a> 2008-12-10 13:07 <a href="http://www.cppblog.com/jinq0123/archive/2008/12/10/TSVNDiffFiles.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>log4cxx的PropertyWatchdog</title><link>http://www.cppblog.com/jinq0123/archive/2008/12/02/log4cxxPropertyWatchdog.html</link><dc:creator>金庆</dc:creator><author>金庆</author><pubDate>Tue, 02 Dec 2008 01:50:00 GMT</pubDate><guid>http://www.cppblog.com/jinq0123/archive/2008/12/02/log4cxxPropertyWatchdog.html</guid><wfw:comment>http://www.cppblog.com/jinq0123/comments/68345.html</wfw:comment><comments>http://www.cppblog.com/jinq0123/archive/2008/12/02/log4cxxPropertyWatchdog.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/jinq0123/comments/commentRss/68345.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/jinq0123/services/trackbacks/68345.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 查看log4cxx代码的时候, 看到了一个PropertyWatchdog类, class PropertyWatchdog  : public FileWatchdog 是定时检测log4j.properities配置文件的. 这正是我一直想要的功能, 更改配置无需重启就生效.<br>&nbsp;&nbsp;<a href='http://www.cppblog.com/jinq0123/archive/2008/12/02/log4cxxPropertyWatchdog.html'>阅读全文</a><img src ="http://www.cppblog.com/jinq0123/aggbug/68345.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/jinq0123/" target="_blank">金庆</a> 2008-12-02 09:50 <a href="http://www.cppblog.com/jinq0123/archive/2008/12/02/log4cxxPropertyWatchdog.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>万王之王3即将推出</title><link>http://www.cppblog.com/jinq0123/archive/2008/11/22/KOK3Upcoming.html</link><dc:creator>金庆</dc:creator><author>金庆</author><pubDate>Sat, 22 Nov 2008 05:56:00 GMT</pubDate><guid>http://www.cppblog.com/jinq0123/archive/2008/11/22/KOK3Upcoming.html</guid><wfw:comment>http://www.cppblog.com/jinq0123/comments/67580.html</wfw:comment><comments>http://www.cppblog.com/jinq0123/archive/2008/11/22/KOK3Upcoming.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/jinq0123/comments/commentRss/67580.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/jinq0123/services/trackbacks/67580.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 说到早期游戏的经典之作，不能不提《万王之王》，每每谈起这款游戏玩家们只谈论一代，似乎《万王之王2》从来没有诞生过一样，悲剧啊！不知道《万王之王3》能不能扭转前作失败的局面呢？&nbsp;&nbsp;<a href='http://www.cppblog.com/jinq0123/archive/2008/11/22/KOK3Upcoming.html'>阅读全文</a><img src ="http://www.cppblog.com/jinq0123/aggbug/67580.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/jinq0123/" target="_blank">金庆</a> 2008-11-22 13:56 <a href="http://www.cppblog.com/jinq0123/archive/2008/11/22/KOK3Upcoming.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>log4cxx配合boost::format</title><link>http://www.cppblog.com/jinq0123/archive/2008/11/20/log4cxx_with_boost_format.html</link><dc:creator>金庆</dc:creator><author>金庆</author><pubDate>Thu, 20 Nov 2008 11:46:00 GMT</pubDate><guid>http://www.cppblog.com/jinq0123/archive/2008/11/20/log4cxx_with_boost_format.html</guid><wfw:comment>http://www.cppblog.com/jinq0123/comments/67404.html</wfw:comment><comments>http://www.cppblog.com/jinq0123/archive/2008/11/20/log4cxx_with_boost_format.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/jinq0123/comments/commentRss/67404.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/jinq0123/services/trackbacks/67404.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 但是有大半的使用情况下, 流方式输出会显得冗长, 格式控制也没有printf简洁. 只有简单的输出才会使用流. 幸好有boost::format. 它就是类型安全的printf. log4cxx配合boost::format真是绝配. 例如:&nbsp;&nbsp;<a href='http://www.cppblog.com/jinq0123/archive/2008/11/20/log4cxx_with_boost_format.html'>阅读全文</a><img src ="http://www.cppblog.com/jinq0123/aggbug/67404.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/jinq0123/" target="_blank">金庆</a> 2008-11-20 19:46 <a href="http://www.cppblog.com/jinq0123/archive/2008/11/20/log4cxx_with_boost_format.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>pthread_rwlock使用错误</title><link>http://www.cppblog.com/jinq0123/archive/2008/11/14/pthread_rwlock_abuse.html</link><dc:creator>金庆</dc:creator><author>金庆</author><pubDate>Fri, 14 Nov 2008 02:47:00 GMT</pubDate><guid>http://www.cppblog.com/jinq0123/archive/2008/11/14/pthread_rwlock_abuse.html</guid><wfw:comment>http://www.cppblog.com/jinq0123/comments/66884.html</wfw:comment><comments>http://www.cppblog.com/jinq0123/archive/2008/11/14/pthread_rwlock_abuse.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/jinq0123/comments/commentRss/66884.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/jinq0123/services/trackbacks/66884.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 写锁之后读锁竟然没有阻塞, 顺利运行下去了.据常理,写锁之后,试图读加锁时会阻塞.代码如:<br>&nbsp;&nbsp;<a href='http://www.cppblog.com/jinq0123/archive/2008/11/14/pthread_rwlock_abuse.html'>阅读全文</a><img src ="http://www.cppblog.com/jinq0123/aggbug/66884.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/jinq0123/" target="_blank">金庆</a> 2008-11-14 10:47 <a href="http://www.cppblog.com/jinq0123/archive/2008/11/14/pthread_rwlock_abuse.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>STL容器的赋值运算符可以更灵活吗?</title><link>http://www.cppblog.com/jinq0123/archive/2008/11/12/MoreFlexibilityInSTL.html</link><dc:creator>金庆</dc:creator><author>金庆</author><pubDate>Wed, 12 Nov 2008 04:17:00 GMT</pubDate><guid>http://www.cppblog.com/jinq0123/archive/2008/11/12/MoreFlexibilityInSTL.html</guid><wfw:comment>http://www.cppblog.com/jinq0123/comments/66700.html</wfw:comment><comments>http://www.cppblog.com/jinq0123/archive/2008/11/12/MoreFlexibilityInSTL.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.cppblog.com/jinq0123/comments/commentRss/66700.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/jinq0123/services/trackbacks/66700.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: STL容器如果元素类型不同是不能相互赋值的,即使元素类型是兼容的.如两个list, 一个存放基类B指针, 一个存放派生类D指针:&nbsp;&nbsp;<a href='http://www.cppblog.com/jinq0123/archive/2008/11/12/MoreFlexibilityInSTL.html'>阅读全文</a><img src ="http://www.cppblog.com/jinq0123/aggbug/66700.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/jinq0123/" target="_blank">金庆</a> 2008-11-12 12:17 <a href="http://www.cppblog.com/jinq0123/archive/2008/11/12/MoreFlexibilityInSTL.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Commons SCXML 中模型的类结构</title><link>http://www.cppblog.com/jinq0123/archive/2008/10/21/CommonsScxmlModelClasses.html</link><dc:creator>金庆</dc:creator><author>金庆</author><pubDate>Tue, 21 Oct 2008 00:37:00 GMT</pubDate><guid>http://www.cppblog.com/jinq0123/archive/2008/10/21/CommonsScxmlModelClasses.html</guid><wfw:comment>http://www.cppblog.com/jinq0123/comments/64567.html</wfw:comment><comments>http://www.cppblog.com/jinq0123/archive/2008/10/21/CommonsScxmlModelClasses.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/jinq0123/comments/commentRss/64567.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/jinq0123/services/trackbacks/64567.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: State Chart XML (SCXML) is currently a Working Draft published by the World Wide Web Consortium (W3C). SCXML provides a generic state-machine based execution environment based on Harel State Tables. SCXML is a candidate for the control language within multiple markup languages coming out of the W3C (see Working Draft for details). Commons SCXML is an implementation aimed at creating and maintaining a Java SCXML engine capable of executing a state machine defined using a SCXML document, while abs&nbsp;&nbsp;<a href='http://www.cppblog.com/jinq0123/archive/2008/10/21/CommonsScxmlModelClasses.html'>阅读全文</a><img src ="http://www.cppblog.com/jinq0123/aggbug/64567.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/jinq0123/" target="_blank">金庆</a> 2008-10-21 08:37 <a href="http://www.cppblog.com/jinq0123/archive/2008/10/21/CommonsScxmlModelClasses.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>从《征途》风波谈游戏设计规范</title><link>http://www.cppblog.com/jinq0123/archive/2008/09/27/ztAndGameDesign.html</link><dc:creator>金庆</dc:creator><author>金庆</author><pubDate>Sat, 27 Sep 2008 04:32:00 GMT</pubDate><guid>http://www.cppblog.com/jinq0123/archive/2008/09/27/ztAndGameDesign.html</guid><wfw:comment>http://www.cppblog.com/jinq0123/comments/62886.html</wfw:comment><comments>http://www.cppblog.com/jinq0123/archive/2008/09/27/ztAndGameDesign.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/jinq0123/comments/commentRss/62886.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/jinq0123/services/trackbacks/62886.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 由于包括征途等所有游戏运营商停止运营网游三天，众多玩家在这三天内都无法正常游戏，为减少这三天征途玩家的损失，在5月21日服务区开启后，特开放以下活动：1、给予玩家6倍离线经验， 玩家在5月22日上线时将获得6倍离线经验奖励；&nbsp;&nbsp;<a href='http://www.cppblog.com/jinq0123/archive/2008/09/27/ztAndGameDesign.html'>阅读全文</a><img src ="http://www.cppblog.com/jinq0123/aggbug/62886.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/jinq0123/" target="_blank">金庆</a> 2008-09-27 12:32 <a href="http://www.cppblog.com/jinq0123/archive/2008/09/27/ztAndGameDesign.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>最实用的管理小技巧，一次只说一件事</title><link>http://www.cppblog.com/jinq0123/archive/2008/09/26/OneByOne.html</link><dc:creator>金庆</dc:creator><author>金庆</author><pubDate>Fri, 26 Sep 2008 11:32:00 GMT</pubDate><guid>http://www.cppblog.com/jinq0123/archive/2008/09/26/OneByOne.html</guid><wfw:comment>http://www.cppblog.com/jinq0123/comments/62838.html</wfw:comment><comments>http://www.cppblog.com/jinq0123/archive/2008/09/26/OneByOne.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/jinq0123/comments/commentRss/62838.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/jinq0123/services/trackbacks/62838.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 有很长一段时间，我常为团队的「笨」感到困扰，我交代的事，常常不能如期完成；许多的事，我经常一讲再讲，但还是有人会犯同样的错，到最后我不得不抓着他们的手，一步一步的追踪，才能勉强完成，我甚至自怨自艾，怎么会找到一群「笨」人呢？直到有一次，我遇到一个知名企业的高级主管&nbsp;&nbsp;<a href='http://www.cppblog.com/jinq0123/archive/2008/09/26/OneByOne.html'>阅读全文</a><img src ="http://www.cppblog.com/jinq0123/aggbug/62838.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/jinq0123/" target="_blank">金庆</a> 2008-09-26 19:32 <a href="http://www.cppblog.com/jinq0123/archive/2008/09/26/OneByOne.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用bind来解耦</title><link>http://www.cppblog.com/jinq0123/archive/2008/09/12/UsingBindToDecouple.html</link><dc:creator>金庆</dc:creator><author>金庆</author><pubDate>Fri, 12 Sep 2008 08:52:00 GMT</pubDate><guid>http://www.cppblog.com/jinq0123/archive/2008/09/12/UsingBindToDecouple.html</guid><wfw:comment>http://www.cppblog.com/jinq0123/comments/61693.html</wfw:comment><comments>http://www.cppblog.com/jinq0123/archive/2008/09/12/UsingBindToDecouple.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/jinq0123/comments/commentRss/61693.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/jinq0123/services/trackbacks/61693.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 转自：用bind来解耦 应用了boost::bind, boost::function, boost::test 代码稍有修改。<br><br>&nbsp;&nbsp;<a href='http://www.cppblog.com/jinq0123/archive/2008/09/12/UsingBindToDecouple.html'>阅读全文</a><img src ="http://www.cppblog.com/jinq0123/aggbug/61693.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/jinq0123/" target="_blank">金庆</a> 2008-09-12 16:52 <a href="http://www.cppblog.com/jinq0123/archive/2008/09/12/UsingBindToDecouple.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用const方法更改非mutable成员</title><link>http://www.cppblog.com/jinq0123/archive/2008/08/27/ConstMethodMutable.html</link><dc:creator>金庆</dc:creator><author>金庆</author><pubDate>Wed, 27 Aug 2008 11:10:00 GMT</pubDate><guid>http://www.cppblog.com/jinq0123/archive/2008/08/27/ConstMethodMutable.html</guid><wfw:comment>http://www.cppblog.com/jinq0123/comments/60186.html</wfw:comment><comments>http://www.cppblog.com/jinq0123/archive/2008/08/27/ConstMethodMutable.html#Feedback</comments><slash:comments>10</slash:comments><wfw:commentRss>http://www.cppblog.com/jinq0123/comments/commentRss/60186.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/jinq0123/services/trackbacks/60186.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 以下代码中，SetValConst()是const类A的const方法，却能更改A的非mutable成员。涉及的C++概念：bitwise constness<br>&nbsp;&nbsp;<a href='http://www.cppblog.com/jinq0123/archive/2008/08/27/ConstMethodMutable.html'>阅读全文</a><img src ="http://www.cppblog.com/jinq0123/aggbug/60186.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/jinq0123/" target="_blank">金庆</a> 2008-08-27 19:10 <a href="http://www.cppblog.com/jinq0123/archive/2008/08/27/ConstMethodMutable.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>"multiple definition of" 错误</title><link>http://www.cppblog.com/jinq0123/archive/2008/08/26/MultipleDefinitionError.html</link><dc:creator>金庆</dc:creator><author>金庆</author><pubDate>Tue, 26 Aug 2008 12:12:00 GMT</pubDate><guid>http://www.cppblog.com/jinq0123/archive/2008/08/26/MultipleDefinitionError.html</guid><wfw:comment>http://www.cppblog.com/jinq0123/comments/60066.html</wfw:comment><comments>http://www.cppblog.com/jinq0123/archive/2008/08/26/MultipleDefinitionError.html#Feedback</comments><slash:comments>18</slash:comments><wfw:commentRss>http://www.cppblog.com/jinq0123/comments/commentRss/60066.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/jinq0123/services/trackbacks/60066.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: "multiple definition of" 错误 在global.h定义了一个常量字符串，在多个cpp中包含该global.h.&nbsp;&nbsp;<a href='http://www.cppblog.com/jinq0123/archive/2008/08/26/MultipleDefinitionError.html'>阅读全文</a><img src ="http://www.cppblog.com/jinq0123/aggbug/60066.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/jinq0123/" target="_blank">金庆</a> 2008-08-26 20:12 <a href="http://www.cppblog.com/jinq0123/archive/2008/08/26/MultipleDefinitionError.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>经典的开源免费网络游戏：planeshift</title><link>http://www.cppblog.com/jinq0123/archive/2008/08/19/ClassicOpenOnlineGame.html</link><dc:creator>金庆</dc:creator><author>金庆</author><pubDate>Tue, 19 Aug 2008 04:49:00 GMT</pubDate><guid>http://www.cppblog.com/jinq0123/archive/2008/08/19/ClassicOpenOnlineGame.html</guid><wfw:comment>http://www.cppblog.com/jinq0123/comments/59332.html</wfw:comment><comments>http://www.cppblog.com/jinq0123/archive/2008/08/19/ClassicOpenOnlineGame.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/jinq0123/comments/commentRss/59332.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/jinq0123/services/trackbacks/59332.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 在遥远遥远的宇宙深处，有一个巨大的固态行星。它沉浸在无尽的黑夜与白昼的轮回中，不知度过了多少时间。但是，它的命运却被一些不知从何而来的彗星彻底改变，那是一次大碰撞，比起宇宙中其他的交通事故，这也许算是很小的一个，一颗占了行星体积六百分之一的彗星永远的留在了行星的体内，在它身后形成是一个巨大的洞穴，planeshift。&nbsp;&nbsp;<a href='http://www.cppblog.com/jinq0123/archive/2008/08/19/ClassicOpenOnlineGame.html'>阅读全文</a><img src ="http://www.cppblog.com/jinq0123/aggbug/59332.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/jinq0123/" target="_blank">金庆</a> 2008-08-19 12:49 <a href="http://www.cppblog.com/jinq0123/archive/2008/08/19/ClassicOpenOnlineGame.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>TortoiseSVN 上的keywords设置</title><link>http://www.cppblog.com/jinq0123/archive/2008/08/07/TortoiseSVNKeywords.html</link><dc:creator>金庆</dc:creator><author>金庆</author><pubDate>Thu, 07 Aug 2008 00:56:00 GMT</pubDate><guid>http://www.cppblog.com/jinq0123/archive/2008/08/07/TortoiseSVNKeywords.html</guid><wfw:comment>http://www.cppblog.com/jinq0123/comments/58213.html</wfw:comment><comments>http://www.cppblog.com/jinq0123/archive/2008/08/07/TortoiseSVNKeywords.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/jinq0123/comments/commentRss/58213.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/jinq0123/services/trackbacks/58213.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: VN可以对代码文件中的一些关键词进行自动扩展,最常用的是$Id$关键词，它扩展为文件名，版本号，日期，提交用户，如&nbsp;&nbsp;<a href='http://www.cppblog.com/jinq0123/archive/2008/08/07/TortoiseSVNKeywords.html'>阅读全文</a><img src ="http://www.cppblog.com/jinq0123/aggbug/58213.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/jinq0123/" target="_blank">金庆</a> 2008-08-07 08:56 <a href="http://www.cppblog.com/jinq0123/archive/2008/08/07/TortoiseSVNKeywords.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>UNIX 技巧</title><link>http://www.cppblog.com/jinq0123/archive/2008/07/30/UnixTricks.html</link><dc:creator>金庆</dc:creator><author>金庆</author><pubDate>Wed, 30 Jul 2008 01:00:00 GMT</pubDate><guid>http://www.cppblog.com/jinq0123/archive/2008/07/30/UnixTricks.html</guid><wfw:comment>http://www.cppblog.com/jinq0123/comments/57488.html</wfw:comment><comments>http://www.cppblog.com/jinq0123/archive/2008/07/30/UnixTricks.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/jinq0123/comments/commentRss/57488.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/jinq0123/services/trackbacks/57488.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: <br>* 利用位置变量 $0 显示Shell名<br>* bash中输入一半文件名，用TAB键自动补全<br>* ! 历史扩展<br>* 用 pushd 和 popd 在目录树中导航<br>* 查找大于 10MB 的所有文件<br>&nbsp;&nbsp;<a href='http://www.cppblog.com/jinq0123/archive/2008/07/30/UnixTricks.html'>阅读全文</a><img src ="http://www.cppblog.com/jinq0123/aggbug/57488.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/jinq0123/" target="_blank">金庆</a> 2008-07-30 09:00 <a href="http://www.cppblog.com/jinq0123/archive/2008/07/30/UnixTricks.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用SourceNavigator看代码</title><link>http://www.cppblog.com/jinq0123/archive/2008/07/29/UsingSourceNavigator.html</link><dc:creator>金庆</dc:creator><author>金庆</author><pubDate>Tue, 29 Jul 2008 00:35:00 GMT</pubDate><guid>http://www.cppblog.com/jinq0123/archive/2008/07/29/UsingSourceNavigator.html</guid><wfw:comment>http://www.cppblog.com/jinq0123/comments/57390.html</wfw:comment><comments>http://www.cppblog.com/jinq0123/archive/2008/07/29/UsingSourceNavigator.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/jinq0123/comments/commentRss/57390.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/jinq0123/services/trackbacks/57390.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Source-Navigator是代码阅读工具，功能与Source Insight相同，但它是开源的。&nbsp;&nbsp;<a href='http://www.cppblog.com/jinq0123/archive/2008/07/29/UsingSourceNavigator.html'>阅读全文</a><img src ="http://www.cppblog.com/jinq0123/aggbug/57390.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/jinq0123/" target="_blank">金庆</a> 2008-07-29 08:35 <a href="http://www.cppblog.com/jinq0123/archive/2008/07/29/UsingSourceNavigator.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>VS2005编译libevent</title><link>http://www.cppblog.com/jinq0123/archive/2008/07/07/libeventForVS2005.html</link><dc:creator>金庆</dc:creator><author>金庆</author><pubDate>Mon, 07 Jul 2008 01:22:00 GMT</pubDate><guid>http://www.cppblog.com/jinq0123/archive/2008/07/07/libeventForVS2005.html</guid><wfw:comment>http://www.cppblog.com/jinq0123/comments/55505.html</wfw:comment><comments>http://www.cppblog.com/jinq0123/archive/2008/07/07/libeventForVS2005.html#Feedback</comments><slash:comments>11</slash:comments><wfw:commentRss>http://www.cppblog.com/jinq0123/comments/commentRss/55505.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/jinq0123/services/trackbacks/55505.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: libevent版本为libevent-1.4.5-stable。WIN32-Prj目录下有VC项目文件。libevent.sln不能用，因为只有regress有vcproj文件，其他子项目都是dsp文件。而libevent.dsw不包括regress。删除sln文件，直接打开dsw文件，自动转换除regress之外的4个工程为vcproj。fatal error C1083: 无法打开包括文件:“sys/time.h”<br>&nbsp;&nbsp;<a href='http://www.cppblog.com/jinq0123/archive/2008/07/07/libeventForVS2005.html'>阅读全文</a><img src ="http://www.cppblog.com/jinq0123/aggbug/55505.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/jinq0123/" target="_blank">金庆</a> 2008-07-07 09:22 <a href="http://www.cppblog.com/jinq0123/archive/2008/07/07/libeventForVS2005.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Boost.Singals 教程</title><link>http://www.cppblog.com/jinq0123/archive/2008/06/30/BoostSignalsTutorial.html</link><dc:creator>金庆</dc:creator><author>金庆</author><pubDate>Mon, 30 Jun 2008 06:55:00 GMT</pubDate><guid>http://www.cppblog.com/jinq0123/archive/2008/06/30/BoostSignalsTutorial.html</guid><wfw:comment>http://www.cppblog.com/jinq0123/comments/54959.html</wfw:comment><comments>http://www.cppblog.com/jinq0123/archive/2008/06/30/BoostSignalsTutorial.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/jinq0123/comments/commentRss/54959.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/jinq0123/services/trackbacks/54959.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 本教程不是用来线性阅读的。 其顶层结构大致按库中不同的概念划分，（如处理调用多个插槽、传值到插槽及回传），并且在每一个这些概念中，首先介绍其基本思想，然后说明库较复杂的使用。 每个部分都标注了初级、 中级，或高级，以帮助指导读者。 初级部分包括库的所有使用者都该了解的信息；只要阅读了初级部分，就可以很好地使用信号库。 中级部分建立在初级 部分之上，是库的稍复杂的使用。 最后，高级部分详述了信号库很高级的应用，这往往需要对初级和中级内容扎实的实践经验；大多数用户无需阅读高级部分<br><br>&nbsp;&nbsp;<a href='http://www.cppblog.com/jinq0123/archive/2008/06/30/BoostSignalsTutorial.html'>阅读全文</a><img src ="http://www.cppblog.com/jinq0123/aggbug/54959.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/jinq0123/" target="_blank">金庆</a> 2008-06-30 14:55 <a href="http://www.cppblog.com/jinq0123/archive/2008/06/30/BoostSignalsTutorial.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>