Archive for May, 2010

总算知道为什么beagle不索引这样的单词了

May 18, 2010

比如,长度超过30个字符的单词。

比如,以0x开头,中间带有a-f的十六进制数

比如,一个长度超过20个数字的数。


以上这些全都是NoiseFilter.cs里决定的!只要改这个文件就可以把这些限制全部解开。

用weblogger.el在Emacs下写myspace的博客

May 14, 2010

呵呵,myspace也是支持metaweblog接口的,但是要让weblogger.el支持它,需要做一点点的hacking。

长话短说,你可以直接使用我的weblogger.el和xml-rpc.el,放在我的svn下。

这是我发给weblogger作者的补丁及说明:

Hi, mah

First thanks for the great weblogger-el!

I made some changes to weblogger.el and xml-rpc.el to make it support Windows
Live blog, which is basically based on metaWeblog. Hope you find it
useful.

The 2 patches is attached, in case you want to apply them. But also, I
inline them to make a line-by-line explanation to you.

=== modified file 'weblogger.el'
--- weblogger.el        2010-03-11 06:51:51 +0000
+++ weblogger.el        2010-04-06 14:55:03 +0000
@@ -378,11 +378,11 @@
                                      ("blogger.newPost" . nil)
                                      ("blogger.editPost" . nil)
                                      ("blogger.deletePost" . nil)
-                                      ("metaWeblog.newPost" . nil)
-                                      ("metaWeblog.editPost" . nil)
-                                      ("metaWeblog.getPost" . nil)
-                                      ("metaWeblog.getRecentPosts" . nil)
-                                      ("metaWeblog.getCategories" . nil)
+                                      ("metaWeblog.newPost" . t)
+                                      ("metaWeblog.editPost" . t)
+                                      ("metaWeblog.getPost" . t)
+                                      ("metaWeblog.getRecentPosts" . t)
+                                      ("metaWeblog.getCategories" . t)

>> without these changes, the wrong APIs will be called, blogger.*
>> instead of metaWeblog.*

>> This patch is dirty, I think it will break blogger for
>> metaWeblog. How can I make a better solution?

                                      ("metaWeblog.newMediaObject" . nil)
                                      ("metaWeblog.deletePost" . nil)
                                      ("metaWeblog.getTemplate" . nil)
@@ -1346,8 +1346,6 @@
                       (cons "url"          url))
                     (when dateCreated
                       (cons "dateCreated"  dateCreated))
-                     (when mt_keywords
-                       (cons "mt_keywords"   mt_keywords))
>> This doesn't make sense, mt_keywords as a symbol is defined nowhere,
>> and Elisp report error

                     (when categories
                       (cons "categories"   categories))
                     (when textType
@@ -1456,9 +1454,9 @@
          (cons "url"           (message-fetch-field "X-Url"))
          (cons "title"     (or (message-fetch-field "Subject")
                                weblogger-default-title))
-           (cons "categories" (vconcat (or (message-tokenize-header
+           (cons "categories" (car (list (or (message-tokenize-header
                                            (message-fetch-field "Keywords") ", ")
-                                           weblogger-default-categories)))
+                                           weblogger-default-categories))))

>> From your latest xml-rpc, I guess you are trying to make xml-rpc
>> array a real elisp vector here, right? but it's not working yet, so I
>> made the above changes.

>> "categories" parameter need to be an array of strings, and from
>> xml-rpc comments, an array in xml-rpc is a list, not a vector in Elisp.

          (cons "mt_keywords" (message-fetch-field "Summary"))

          (when (message-fetch-field "In-Reply-To")

C#里的object

May 7, 2010

它是一个关键字,但是同时是System.Object的别名。object=System.Object。

beagle-grep.sh功能又变强大了

May 6, 2010

主要是碰到一个问题,在android代码里搜primary_text_dark,死活也搜不到这个东西是在哪个文件里定义的,所有出现这个字段的文件都是在使用这个字段,而不是定义它。

最后发现,这个字段的定义,是由primary_text_dark.xml这个文件完成的。文件名里包含了这个字段,但是文件内容里是不包含的!我快吐血了。

针对这种情况,对beagle-grep.sh做了一些修改,让它能够处理文件名里包含目标字段的情况了。

Android雾里看花

May 6, 2010

一个Android应用是由一个或多个Activity组成的(也有可能没有Activity,而是Service等)

    <activity android:name=".app.DialogActivity"
            android:label="@string/activity_dialog"
            android:theme="@android:style/Theme.Dialog">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.SAMPLE_CODE" />
        </intent-filter>
    </activity>

一个activity,可以用theme来装饰。

XX.class

May 6, 2010

这个术语上叫做class literal,它的type是Class<XX>,参见jls-3.0(Java Language
Specification 3.0,官网上都有得下的,我亏了,花银子买的)。

雾里看花2

May 6, 2010

Android里有很多 property,包括系统版本等,都是property。这个有点儿像环境变量。不同的是,环境变量不是全局的,比如,父进程的环境变量可以被子进程继承。但是一旦子进程创建之后,父子进程之间的环境变量就是独立的了。父进程对自己的环境变量的修改不会影响到子进程,反之亦然。

Android里的property却不是这样,它是全局的。系统中任意一个进程对property进行修改,都会被其他进程看到。系统的第一个进程,也就是init进程被创建的时候,就会打开/dev/ashmem,并对它映射到内存中,然后把其fd(file descriptor,文件描述符)以及ashmem的大小放到环境变量里。以后运行的每个程序,只要它是链接了bionic库(Andriod的C 库),在这个库初始化的时候,就会自动针对这个环境变量作property的初始化。

这无疑是一种很特别的IPC(Inter Process Communication,进程间通信)机制。

IPC有很多种,详情可以看已故的Richard Stevens写的UNIX Network Programming,Volume 2,这本书是专门讲IPC的。