采访:Michael Tsai

Michael Tsai是一位Macintosh软件开发人员,他撰写了几个有用的实用程序,包括DropDMGBBAutoComplete迈克尔也是每月Mac电子杂志的编辑和出版商关于这个特殊的Macintosh,他写了一个面向Mac的博客

他的最新软件版本是SpamSieve 2,他的25美元垃圾邮件过滤工具的重大更新SpamSieve包括几种类型的过滤策略,尤其是贝叶斯统计过滤器I’ve been using SpamSieve 2 for over a month (including beta releases), and its efficacy has bordered on the incredible: flagging all but 10 of 1981 spamsSpamSieve易于设置,运行速度快,适用于除Apple Mail之外的所有主要Mac OS X电子邮件客户端(甚至可与Claris Emailer配合使用)不用说,我强烈推荐SpamSieve。

我通过电子邮件采访了迈克尔。


(Safari用户:使用“重新加载页面”命令强制Safari更新其此站点的缓存版本CSSstyle sheet; trust me, the interview will look much better.)


格鲁伯:When did you get the idea to write SpamSieve? Was it something you were thinking about before Paul Graham published “垃圾邮件计划“?

蔡英文:I was thinking about spam a lot before Graham published his paper, because I was getting more than a thousand spams a day.

格鲁伯:哇这是一堆垃圾邮件你现在有多少垃圾邮件?

蔡英文:差不多It rose much higher (5000/day) in the interim, and so I had to make the ATPM mail server bounce all messages that weren’t sent to known addresses(I used to look through all those so that we didn’t lose mail when people mistyped addresses.)

I had made a huge filter in Mailsmith, but I had to keep modifying it, and it started to become unmaintainableSo I had been thinking about what to do about my personal spam problemApple had demonstrated Jaguar’s Mail, and that convinced me that it was possible to do better than my Mailsmith filter and the other solutions that were available at the timeBut I hadn’t actually started writing a new spam filter because I was busy with other 万博提款要多久 at the time.

Paul Graham的论文是让我写SpamSieve的原因First, it said that it was absolutely possible to write a better spam filter. Second, it demonstrated that doing so was actually pretty easyThe core of Graham’s algorithm is only about ten lines of Lisp code.

When I read “A Plan for Spam” around August 20, 2002, I thought every e-mail client would add a Graham-style filter in its next updatePretty soon I wouldn’t have to worry about spam anymore. About a week later I got impatient, and it occurred to me that it would be possible to hook an external filter up to Mailsmith via AppleScript(Previously, I didn’t really like the idea of an external filter, but AppleScript could make it work together with the e-mail client nicely.) I’d already written some Cocoa-AppleScript code for BBAutoComplete and DropDMG, and Graham had shown how to do the spam filter partSuddenly this looked like a problem I could solve quickly, and so I took a few hours one evening and wrote a prototypeI say that not to brag that I’m such a fast programmer, but rather to illustrate how important it is to have a good framework like CocoaIt really lowers the activation energy for starting a project, and that can make a lot of interesting things happen.

格鲁伯:In other words, you could get started writing code to filter spam — which is the code you wanted to write — rather than first needing to write a lot of code just to set up an application environment in which to execute the spam filtering code.

蔡英文:对And, also, the framework has good general purpose tools—like arrays, hashes, and string routines—that are useful in writing the spam filtering code itself.

格鲁伯:Graham在SpamSieve方面的影响力如何?

蔡英文:SpamSieve 1.0的方法几乎就是格雷厄姆的方法I think the only difference was that I tokenized words a little differently. In 2.0, there’s little that came directly from Graham, although of course he’s indirectly responsible for much of what’s in SpamSieve, having popularized the general approach.

格鲁伯:在战术上你从哪里吸取了什么?

蔡英文:SpamSieve的新数学应归功于Gary RobinsonIt was refined by Tim Peters, and later by me.John Graham-Cumming wrote an influential documentthat describes a lot of tricks that spammers use to obscure their messagesThe SpamBayes and POPFile 万博提款要多久 have generated a lot of ideas about how to tokenize messages, and some of them show up in SpamSieveWhitelists and blocklists are an old idea, of course, but I don’t know of any filters that automatically train them the way SpamSieve does.

格鲁伯:Part of what makes Bayesian spam filtering so interesting is that the concept is so simpleHow would you describe it, for the non-programmer/non-mathematician?

蔡英文:It looks at examples of your spam messages and good messages and figures out how often each word occurs in each type of messageWhen you get a new message, it looks at where the words in that message previously occurredIn other words, does the new message look more like your spam or more like your regular mail?

格鲁伯:Part of what makes SpamSieve — or at least version 2.0 — so effective is that it also looks at哪里这些话出现了E.g., the word “money” in the Subject is counted separately from “money” in the message bodyAnd also that these “words” aren’t just words in the English language sense, but rather any of the distinct tokens of an email message.

For example, according to my SpamSieve corpus, the token “U:remove” has occurred 1009 times in spam messages, but not once in a good message我认为这意味着URL中的“删除”?

蔡英文:是Spam messages tend to include links to CGIs and tracking images, so that’s where a lot of the really spammy tokens come from.

格鲁伯:Given those stats, that’s obviously a strong indication that a message containing a URL with the word “remove” is spamCompare and contrast with the word “remove” in the body of a message (and not in a URL), which has occurred 927 times in my spam, but also 75 times in my good messages可能是垃圾邮件,但远不是告密者。

透过语料库看起来很有趣,不是吗?

蔡英文:我认同:-) The corpus window was originally intended to be just for my own use in testing and debugging the program, but it turned out that a lot of users liked it.

格鲁伯:SpamSieve的白名单和阻止列表工作得非常好How do you defend against spammers who use forged headers to spoof the From: address such that spam appears to come from someone you know?

蔡英文:Well, first of all you can decide whether you want to use the whitelist and blocklistIf you get a lot of forged spams “from” your friends, maybe you don’t want toBut otherwise, the whitelist works in an optimistic fashionIt trusts an address on the whitelist until you get a spoofed spam from that address, and then the address is disabled and it falls back on using the Bayesian classifier for messages from that addressI have about 400 addresses on my whitelist right now, and about 25 of them are disabled for that reason; the others are trusted until proven otherwise所以垃圾邮件发送者每个地址最多可以欺骗一次。

格鲁伯:Version 2.0 is a significant improvement over SpamSieve 1.xWhat kind of accuracy were you getting with SpamSieve 1.3.1, and what are you getting with 2.0?

蔡英文:我用1.3.1得到了97%到98%That’s probably a few percent higher than most users were seeingWith 2.0 I’m getting 99.5% and upNearly all the false negatives are virus e-mails with senders that are in my address bookSo, because of the way I’ve set the preferences, those will always get through.

The accuracy matches what I’ve been hearing from the beta testers, so I think 2.0 will be a big improvement for the general user base. Perhaps more important than the peak accuracy is that 2.0 learns much fasterIn testing, I’ve gotten up to the 1.3.1 accuracy range with a corpus of only 300 or so messages, whereas before it took around 2000.

格鲁伯:So far in September, SpamSieve has been 99.7 percent accurate for me共有大约3300封邮件,其中2000封是垃圾邮件I’ve had 10 false negatives, and zero false positivesIn fact, I haven’t had a single false positive, ever, with any of the SpamSieve 2.0 betas.

这与SpamAssassin相比非常有利Over the same period, SpamAssassin had over 90 false negatives — all of which SpamSieve caughtAnd conversely, SpamAssassin flagged 9 of the spams that SpamSieve missedSo, combining the two, I’ve had one spam, out of about 2000 total, slip through in September

Frankly, I’m surprised SpamAssassin still works as well as it does. Why任何spammer doesn’t run their messages through it first, and edit them until they get through, is beyond me.

蔡英文:这是一个谜。

格鲁伯:In theory, the appeal of server-side spam filtering is obvious — if it works reliably, you can avoid downloading spam in the first place但贝叶斯过滤的关键在于它的基础您的personal email, which is harder to implement on the server than on the client.

您是否考虑过SpamSieve的服务器端版本?

蔡英文:Yeah, that’s something I’m going to look at more closely now that 2.0 is outIf anyone’s interested in such a product, please e-mail me and tell me what you want.

格鲁伯:Are there any particular types of spam messages that SpamSieve has trouble identifying?

蔡英文:In the past, it had a lot of trouble with really short HTML messages containing, say, just an image and a linkWith 2.0, those don’t seem to be much of a problem once it’s well trainedSo far I haven’t really seen a pattern to the ones that 2.0 is missing, except that the language is more subdued.

格鲁伯:上个月,保罗格雷厄姆发表“反击的过滤器”, wherein he advocates that when spam filters identify suspected spam, they should spider any URLs contained in the messageThe idea is that even spammers have to pay for bandwidth, and so collectively, if we follow Graham’s advice, we can actually punish spammers.

格雷厄姆的提议的吸引力是不可否认的It would only take a few thousand users of such “fight back” spam filters to produce a noticeable and costly spike in the spammers’ web hosting bandwidth costs你有没有想过这个?

蔡英文:如果有足够的人这样做,它可能会奏效我不知道But I’m kind of skeptical about fighting back in a way that uses more bandwidthHe’s essentially proposing a distributed DoS attack, and I don’t know what the unintended consequences of that would be.

格鲁伯:I’d be concerned about false positivesSpamSieve, at least in my experience, produces extraordinarily few false positives (as stated earlier,没有for me thus far)But other spam filters aren’t so accurate, and I’d hate to see the publisher of a legitimate email newsletter get their web server pounded by the users of an inaccurate spam filter. There’s no denying that Graham’s proposal is the digital equivalent of vigilante justice.

蔡英文:Right, that’s a good example of an unintended consequence, but I wouldn’t be surprised if there were others that are worseFor example, if a digital terrorist knew that such filters were widely deployed, he could send out a spammy message including links to a target site he wanted to take downIn fairness, Graham wants to only apply this technique to sites that are already on a human-inspected blacklist, and I guess that would address these two scenarios.

格鲁伯:You mentioned that after reading Graham’s “A Plan for Spam”, you expected to see built-in Bayesian filtering in most email clients. Eudora 6 recently shipped with Bayesian-style filtering via its new SpamWatch plug-in你有没有把它与SpamSieve进行比较?

蔡英文:It’s kind of hard to do a direct comparison because Eudora doesn’t have a way of forcing its filter to look at particular messagesIt simply runs the filter on all incoming messages, and since headers are important I can’t test it by sending myself mail.

I’ve looked at the corpus that Eudora uses, and it appears that SpamSieve extracts more information from the messages, hopefully leading to better accuracySpamSieve has some non-Bayesian filters seen in its preferences, and it’s more configurable, so I expect that it will interest a lot of Eudora usersIt’s also half the price of the paid Eudora mode that’s required for using SpamWatch.

格鲁伯:Apple added “adaptive latent semantic analysis” to Mail in Jaguar, which sounds like a very fancy way of saying “Bayesian-style filtering”.

蔡英文:Apple’s filter predated Graham’s paper; it was announced at WWDC in May, as I recallAs I understand it, Latent Semantic Analysis is actually quite different (and more ambitious) than Graham-inspired Bayesian filtersSomeone (maybe Geoff Duncan) told me that Apple’s filter is “Bayesian,” but that doesn’t necessarily mean it’s similar to other Bayesian filtersBayes was a huge figure in the field of statistics, and his work is widely applicable.

格鲁伯:您是否将SpamSieve的准确性与Apple Mail进行了比较?

蔡英文:I did last fall, and found Mail’s accuracy to be good, but not as good as SpamSieve’sMacworld也发现了Since then I’ve heard conflicting reports from Mail usersSome find that its filter is nearly perfectOthers find it almost worthless and have switched to other e-mail clients so that they can use SpamSieveI get a steady stream of requests to make SpamSieve work with Mail.

格鲁伯:And so why doesn’t it work with Mail? Because Mail’s meager AppleScript support is insufficient?

蔡英文:是的,至少对于POP帐户而言I’m investigating whether it will work for IMAP.

脚本

格鲁伯:And so the least scriptable of the major Mac email clients is the one made by the company that invented AppleScriptWhat’s sad is that it isn’t surprising — very few of Apple’s recent applications offer decent scriptability.

SpamSieve is a perfect example of why good AppleScript support is a winning proposition for developersAdding good scripting support certainly isn’t easy or quick, but once an app supports a rich scripting interface, it creates the potential for all sorts of unforeseen future benefits.

BBAutoCompleteis another great example — it’s a free utility that works with any Mac OS X program that fully supports the standard text suite of Apple eventsSo in the same way that SpamSieve works with any scriptable email client, BBAutoComplete works with any text editing application that supports the standard text suite of Apple events.

Which of Apple’s current applications do you think would most benefit from better AppleScript support? (My vote would go for Safari.)

蔡英文:可能是Mail或iChat。

格鲁伯:不可否认,大多数Mac用户不会自己编写AppleScriptNo matter how easy a language it is, it’s still programming, and most people have no interest in learning to programBut what I think many people overlook is that you don’t have to write AppleScripts to benefit from scriptable applicationsE.g., PowerMail users don’t have to write their own scripts to connect SpamSieve to PowerMail — you’ve already written the scripts for themBut if PowerMail didn’t offer decent scripting support, they’d be missing out on a terrific spam filtering utility.

蔡英文:我认为这些都是好点AppleScript is very popular among a small subset of Mac users, and it’s too bad it isn’t more widely usedMore people using AppleScript would put more pressure on developers to support it betterI’ve come to think that the root problem may be AppleScript itselfPeople joke that Perl is a write-only language, but AppleScript often seems like a只读语言It’s extremely readable, but a lot of people—even programmers—get stuck when they try to write itIt looks enough like English that it can be hard to see what the rules behind the language areI think there may be more Mac users now who are comfortable with PHP or Perl or Python or JavaScript, than with AppleScript, even though these are ostensibly harder languagesThe very aspect of AppleScript that was meant to make it accessible, may have held it backPython and AppleScript are almost exactly the same age, incidentally.

格鲁伯:I agree about AppleScript’s easy-to-read, hard-to-write nature. Brent Simmons and I talked about this in my interview with him; I called AppleScript “the most successful unpopular language ever”. Brent wrote:

The biggest problem for me is that it seems like English, but it isn’tThere’s a dissonance there — like playing a C and D note together on the pianoI prefer my programming languages to be at least a minor third away from English: a fourth or fifth is even better(我认为UserTalk,C,PHP等are fifths.)

蔡英文:是的,我喜欢阅读那次采访。

格鲁伯:I think it’s been a grand and rather successful experiment in creating an English-like programming language, but I think the result of the experiment shows that it isn’t a good ideaSomehow there’s this misconception that the goal of AppleScript is to be so “easy” that all Mac users could be out there writing scripts. That’s absurdIt’s definitely an easy language to get started with, but it’s still programmingMost people either don’t want to program, or have no aptitude for it, and so it doesn’t matter how easy any particular language might be.

蔡英文:对But why do you think that’s a misconception? Why make AppleScript the way it is, if that wasn’t the goal?

格鲁伯:你是对的 - “误解”不是一个正确的词I think that it probablyApple’s original intention to make AppleScript so easy that nearly anyone could write itBut now, 10 years later, I think we can safely say that making a programming language “English-like” doesn’t mean everyone can write their own scripts.

蔡英文:同意I know English pretty well, but I could never write a screenplay.

格鲁伯:I think it would be really hard to argue that AppleScript is an easier language to learn than, say, PythonThat said, of course, I personally happen to like AppleScript.

What’s intriguing is that scriptable apps don’t support AppleScript directly — they support the Open Scripting Architecture (OSA)It just so happens that AppleScript is the only widely-used OSA scripting languageBut there could be others, and they should “just work” with existing apps.深夜软件的免费软件JavaScript OSAis one example, and I’m surprised it isn’t more popular.

蔡英文:JavaScript OSA is a really neat idea that I confess I haven’t gotten around to tryingI’d be interested to know how it works in practiceDo you have to write glue tables like with Frontier? Does it work with AppleScript Studio?

格鲁伯:It doesn’t work with Studio, which is hard-wired only to work with AppleScriptBut for regular scripting with JavaScript OSA, there’s no need to write Frontier-style glue tables; it “just works” as an alternate scripting syntaxThere are oddities and deficiencies, however, which I think are mostly the result of JavaScript not being designed specifically as an OSA language值得注意的是,谁的clauses don’t work in JavaScript.

蔡英文:That would seem to be a major problem, efficiency-wise, but I imagine there are also many advantages (aside from syntax) that come from it going beyond OSA.

格鲁伯:对Like the fact that JavaScript has built-in support for regular expressionsIt’s a much better language for string manipulation than AppleScript.

Another syntactical oddity is that AppleScript allows for tokens that contain spacesFor example, “display dialog” is a single command in AppleScriptIn JavaScript, in-token spaces are translated to underscores, e.g“display_dialog”。

这是我前一段时间写的一个简短例子BBEdit has a hidden preference to show a smiley face when its HTML syntax checker doesn’t find any errors in a documentYou can toggle this setting with this AppleScript:

tell application "BBEdit"
   set p to get html preferences
   set smiley face enabled of p to not (smiley face enabled of p)
   set html preferences to p
end tell

JavaScript OSA中的等价物:

var bbedit = MacOS.appBySignature("R*ch");
var p = bbedit.get_html_preferences();
p.smiley_face_enabled = !(p.smiley_face_enabled);
bbedit.set_html_preferences_to(p);

ATPM

格鲁伯:In addition to writing and publishing Mac OS X software, you’re also the publisher and editor of ATPMHow long have you been involved with ATPM, and how did you get started?

蔡英文:我于1996年3月加入ATPM担任评论编辑My job was to write reviews and try to get others to write them tooMy first article was about Netscape and IE 2.0That was issue 2.04, and we just finished 9.09.

格鲁伯:That’s a long timeHow old were you in 1996? When did you take over as publisher and editor?

蔡英文:那时我才16岁Robert Paul Leitao and I took over as co-publishers in June of 1996I became the editor, and he became the managing editorUnfortunately, Rob later had to scale back his involvement, but he still writes the Welcome column at the beginning of each issue.

格鲁伯:I’m not sure what impresses me more — that you’ve been editing ATPM for seven years, or that you were only 16 at the time.

Where do you see ATPM compared to other Mac publications?

蔡英文:The biggest difference in the content, I think, is that we don’t cover newsWe try to write more in-depth articles that will be interesting to people a year or two after they’re writtenAnd we do multiple editing passes and accuracy checks, which hopefully set us apart from the average Web site in terms of quality.

In reviews, we tend to write about products that we use every day. That’s the only way to really go beyond the spec sheet and press kit, and get at what it’s like to actually use the productIn general, we write about what interests us and the topics where we have something to add, rather than feeling an obligation to completenessFor example, Eudora is an important product, but we haven’t reviewed it since 1997 because I don’t think anyone on staff normally uses it.

When I was an ATPM reader, I liked the down-to-earth, personal writing style, and I hope some of that still remainsCompared to other Mac publications, I’d like to think that ATPM is most like花絮— only with graphics.

格鲁伯:The reviews have always been my favorite segment in ATPM — it really shows that they’re written by people who actually use the software, which is very much in contrast to the reviews in most web publications.

One thing that I find distinctive about ATPM isn’t contextual, but structural — ATPM publishes monthly issues, more like a print magazine than a web siteIn fact, when ATPM was established, it didn’t have an HTML version, just DOCMaker, right?

蔡英文:对ATPM was DOCMaker-only for about the first year, and then we added a Web versionPDF and various other offline editions came later.

I like the idea of a monthly mix of articles that’s delivered to your mailbox, and that you can print out and read like a magazine. At one time there were several monthly e-zines like ATPM, but the Web is a more timely medium and much better for advertisingFrom time to time it’s suggested that we should update the Web site more often and “sync” with the offline editions at the beginning of each month, but as a practical matter one deadline a month is plenty.

格鲁伯:How did you get started using the Mac? You must have been quite young if you were editing ATPM by the time you were 16.

蔡英文:We had an Apple II, but some friends had Macs that I used around 1987 or 1988, mostly for gamesI didn’t switch to the Mac until System 7 came out in 1991我读过Bob LeVitus的博士苹果Stupid Mac Tricks并被迷住了。

格鲁伯:你什么时候开始编程的?

蔡英文:I did a bit of Logo in second grade, although it was really typing commands interactively rather than combining them into programs. After fourth grade, I did a summer program where we learned BASIC. That’s when I really started, I guessI wrote some simple games and figured out how to alphabetize lists of words.

Mac开发

格鲁伯:你是什​​么时候开始编写Mac软件的?

蔡英文:I learned Pascal and started playing around with the Mac toolbox in 1991, but that didn’t really go anywhereI took another stab at it about three years later in C, and made it through several tutorial/exercise books, but I didn’t have any ideas for my own 万博提款要多久Over the next few years, I did several 万博提款要多久 with PowerPlant, but none of them were intended for distributionMost of the programming I was doing wasn’t Mac softwareI didn’t actually ship a Mac application until DropDMG in 2002.

格鲁伯:Where did you attend college? Did you study computer science?

蔡英文:I went to MIT where I majored in computer science and minored in linguistics.

格鲁伯:Larry Wall, who designed and created Perl, is a linguist by training, and according to him, many of the decisions he made regarding Perl’s syntax stem more from linguistics than computer scienceI assume that you see quite a bit of overlap between the two fields, as well?

蔡英文:是啊Denotational semantics for programming languages is similar to the ways people are doing semantics of natural languages, and there are similarities in syntactic formalisms, as wellBoth fields like to draw upside-down trees:-) Looking at it from a higher level, the holy grail of AI—the Turing test—is really about figuring out how natural language works.

Perl is an amazing experiment in how a programming language should work, and it’s interesting to see where the ideas are coming from. Another language that relates to what we’ve been talking about is Smalltalk (a progenitor of Objective-C)Smalltalk was designed to be accessible to children, and Alan Kay has said that its messaging system drew on his experience from cellular biology.

格鲁伯:Objective-C is clearly the premier language for Cocoa programming, but there are other options, including Java and AppleScript Studio. There are also efforts to bind scripting languages like Ruby, Perl, and Python to CocoaAre you particularly intrigued by any of these other languages for Cocoa?

蔡英文:Java is kind of a sidestep from Objective-C, and so I don’t see a lot of reason to use it as the primary language in writing a Cocoa applicationHowever, Java has a ton of libraries, and the Java bridge lets Objective-C programmers take advantage of them.

AppleScript Studio doesn’t really interest me because it’s kind of a heavyweight solutionIf I’m writing a script, I want something like 24U’s Appearance OSAX—“display dialog” on steroidsAnd if I’m writing a larger application, I wouldn’t choose to do it in AppleScript但那只是我It’s certainly an interesting technology.

Perl, Python, and Ruby really intrigue me because they let you be so much more productive than with Objective-C (or Java)No matter how much you hear about how Cocoa’s memory management is good (it is) and easy to learn (it is), the fact of the matter is that Objective-C applications still leak memory and crashThese are less of a concern with the scripting languages.

The scripting languages are much more expressive, so you can translate your ideas into code more succinctlyThat probably means less time coding and fewer bugsThey let you develop interactively, which is great for experimenting and testingAnd they also have lots of libraries, especially for Internet stuff.

Python intrigues me the most, because I really like readability of the language, and because it seems to have the best Cocoa bridge.

格鲁伯:我同意While my favorite language, by far, is Perl, I must admit that the Python bridge to Cocoa seems the most robust of the various scripting languages.

Assuming Mac OS X has a long life ahead, do you think Objective-C does too?

蔡英文:我不认为Objective-C会消失There will always be a need for a lower-level language, particularly for people working on the OSIt looks like Apple is starting to get serious about enhancing it, which of course I’m very happy about.

格鲁伯:But would you agree with me that at some point in the not-too-distant future, we’ll start seeing more Cocoa applications written in scripting languages than in Objective-C?

蔡英文:I think the scripting languages will become very popular among a growing subset of Cocoa developersPeople will realize their advantages, and new Mac developers will already know these languages and perhaps not want to use Objective-CBut I don’t see them overtaking Objective-C他们是非标准的(w.r.tCocoa) and not blessed by Apple; a lot of people like to stay on the beaten path. Also, developers may not want to expose their source code and algorithms.

格鲁伯:我认为最有趣的是Appleto bless Cocoa scripting bridges from these languagesI think Cocoa programming with Python could end up being much more popular than AppleScript-Studio.

蔡英文:是啊。

格鲁伯:It’s also the case that you can, in theory, mix and match the languages used to write components of a Cocoa applicationYou could thus write most of an app in your favorite scripting languageBut you could use Objective-C to write the parts that are performance-sensitive (as well as any other parts for which you don’t want to make the source code visible, like, say, the licensing and registration routines).

蔡英文:Right, in practice I think most of these applications will be hybrids. By the way, two other potential drawbacks I thought of are difficulty in debugging and threadingThose get more complicated when you combine two different systemsAlso, threading performance would not be as goodRuby doesn’t have native threads, so it can’t take advantage of multiple processorsPython supports native threads, but the interpreter can only run in one thread at a time (I/O can happen in the background).

SpamSieve is supported on Mac OS X 10.1.5 or later (although 10.2.6 is recommended)How much work is it for you to stay compatible with 10.1.5? Do you really think it’s worthwhile?

蔡英文:There are a few things built into Jaguar that I re-implemented last year so that SpamSieve could run on PumaThose workarounds continue to workThe only feature that absolutely requires Jaguar is the Address Book integration, which I shipped in February, and it was only a little extra work to add that while maintaining Puma compatibilityAt the time, some people hadn’t upgraded to Jaguar yetFor future versions, I’m not going to purposely remove support for Puma, but I’ll drop it if doing so is a win for Jaguar and Panther users.

格鲁伯:当SpamSieve 1.0去年发货时,它只需10美元Since then, the price has crept upward a bit — when I purchased my license a few weeks ago, it was $20, and SpamSieve 2.0 now costs $25I’m not complaining — in fact, quite the contrary, I think $25 is a perfect price for SpamSieveA good value for users, and good money for you.

蔡英文:不幸的是,我倾向于将价格定得太低And that’s a problem in terms of perception, as well as moneyAs you say, I think the new price is fair all around我认为这是最终的。

格鲁伯:Do you view your Mac software development as a career or a hobby? Or somewhere in-between?

蔡英文:职业生涯。

格鲁伯:听起来还不错I think you’re off to a great start — SpamSieve is useful, accurate, easy, and most importantly, best-of-breedThat it works with so many different mail clients gives you a large potential audience.

The Internet has profoundly changed the market for small software developersIn the old days, you really needed a box and installation disks to get software into your customers’ handsThat meant a lot of distribution infrastructure, because boxed software was sold through catalogs (MacConnection, MacWarehouse, etc.) or through retail stores.

Today, small- and mid-sized developers sell directly to their customersSelling software as a direct download isn’t just cheaper for developers, but it’s also faster and more convenient for customers.

蔡英文:是的,这一切都很棒。

格鲁伯:It’s a more direct, personal relationship between developer and customerBut it’s also more likely to be a complete do-it-yourself effortYou don’t just design and develop your software — you also write the documentation and answer the tech support emailDo you enjoy this, or would prefer to be able to concentrate on software development?

蔡英文:I enjoy playing those different roles, and I think being in contact with the customers helps me make a better productThat said, it would be frustrating if I were spending a large percentage of my time doing technical supportSoftware development should be the main focus.

格鲁伯:您认为小型Mac开发人员的市场有多强大?

蔡英文:I suppose it depends on the product, but in general I think this is a great time for small Mac developersAs you mentioned, there’s now a good infrastructure for selling directly to customersWe have better developers tools, which lower the barriers to entryAnd it’s much easier to get noticed than in the Windows market.

格鲁伯:你花了多少时间处理技术支持?

蔡英文:这取决于Last week, when SpamSieve 2.0 was released, I did nothing but e-mail for several days straightIt’s still pouring in. In general, it’s probably around half an hour a dayAlthough I think it’s getting better, SpamSieve is relatively difficult for people to install and set upA lot of people have questions about how to make it work best in their situation, and how to customize itThere’s also an unpredictability to it because each user has a different corpus and gets different e-mailsAfter adjusting for the different numbers of users, it probably still generates ten times as many e-mails as DropDMG.

One of the interesting things is that I’ve gotten to see Moore’s chasm in actionIn the beginning, I got a few tech support questions, but most of the e-mails were feature requests and suggestionsPeople would show me how they’d customized the AppleScripts and make sure I was aware of various spammer tricks.

After SpamSieve was reviewed in Macworld, I suddenly got a lot of feedback that the documentation wasn’t clearPeople didn’t know what AppleScripts were, or what the Scripts menu was (there’s no menu called “Scripts”), or how the SpamSieve rule in their e-mail program would interact with the other rules, or the difference between Entourage’s address book and Apple’s, or whether the messages would still be in SpamSieve’s corpus if they were deleted from the e-mail programThese people weren’t tinkerers like us; they wanted to double-click the icon and forget about itOf course, I had tried to make the program as easy to use as possible, and I had spent a lot of time on the documentation, but I just wasn’t prepared for the kinds of questions people would have.

My favorite example is that one version of the documentation said something like “To tell SpamSieve that a message is spam, select the message and run the ‘SpamSieve - Add Spam’ AppleScript.” In retrospect that was a stupid way to phrase it, because it’s not clear what an AppleScript is or how you run oneAnd you shouldn’t have to knowNaturally, people looked for where in Entourage’s user interface it said “Run AppleScript.” There’s such a checkbox in the dialog for Microsoft’s Junk Mail Filter, and so people would enable that and then set it to run the SpamSieve AppleScript, thinking that that would mark the selected messages as spamNow the documentation says to choose the “SpamSieve - Add Spam” item from the Scripts menu, and it shows a picture of the menu so there’s no misunderstanding.