September 30, 2003

Too Much Sex

My group got a bug report today from one of our customers. If you did a search on their site for "sex sex sex sex sex sex sex sex sex sex sex sex sex sex sex sex", then it would take down the site. You had to have at least 16 occurences of the word "sex" in order to trigger the problem.

The problem was due to a 32-bit numeric overflow in the cost estimation of a spelling correction feature. Normally the cost would have been estimated as too expensive, and so we would have ignored the query. But because it overflowed to zero, the code happily skipped into a bottomless abyss of wasted effort.

The ironic part is that the only reason the spelling correction feature was triggered in the first place is because the site actually has no pages that contain the word "sex".

The weird part is that the site sells toys for kids. You have to wonder who would go to a children's toy site and search for "sex" to the sixteenth power. The consensus in the group is that it was probably some kind of crawler or aggregator site that was merely passing along queries that it got from some other source.

Posted by kimbly at 03:23 PM | Comments (0) | TrackBack

September 29, 2003

Why Faceted Navigation is Hard

I was thinking about the relational model today, and I realized that a lot of people probably don't realize that faceted navigation is an example of an application that simply doesn't fit comfortably in the relational model. It also occurs to me that most of you don't care. But I'm going to tell you why anyway.

Faceted navigation is built on faceted classification, which is conceptually very simple. You've got two things: records and categories, and those two things have a many-to-many relationship.

I like to work with concrete examples, so let's take the US states as our dataset. We've got one record for each state. For our categories, let's use adjacent states. That means Massachusetts has the following categories: adjoins-NH, adjoins-VT, adjoins-CT, adjoins-RI, and adjoins-NY. Obviously there are a lot of states that belong to the adjoins-NY category: Pennsylvania, New Jersey, Connecticut, Massachusetts, and Vermont. So clearly this is many-to-many. That's faceted classification.

You can think of each category as a predicate that defines a subset of records -- all the records that have that category. Faceted navigation is based on taking as input a given set of categories, and producing as output all the categories that, if you added them to the input set, would define a smaller, yet non-empty, record set. For example, if I start with the set of states that adjoin Massachusetts, then I could narrow down to states that also adjoin Rhode Island, or states that also adjoin Vermont. But I couldn't narrow down to states that also adjoin California, since that would create an empty record set.

In math terms, if S is the input set of selected categories, then what you want is the set of categories c such that c is not in s, and such that there exists at least one record r such that r has c and r also has every category in S. Or, more tersely:

    {c : (∃r : c(r) ∧ (∀s in S : s(r)))} - S

If you map this to a straightforward relational structure, and then try to use SQL to compute the set described above, you will find that you basically end up thrashing the database to the point that you'd do better to suck out the entire database into memory and forget SQL entirely.

The problem is that SQL isn't really capable of expressing set intersections. Suppose we merely want to get the set of records that have our input set of selected categories. We'd have to do something like this:

  SELECT DISTINCT record_id FROM Facets WHERE 
          record_id in (SELECT record_id FROM Facets WHERE category_id=1) 
      AND record_id in (SELECT record_id FROM Facets WHERE category_id=2)    
      AND ...

No database that I know of will implement the above query efficiently, even though they could -- all they would need to do is intersect the index for category ids 1 and 2. But even if the above query were done efficiently, we're still not done. What we actually want is not a list of records, but a list of categories that would provide further refinements:

  SELECT DISTINCT category_id FROM Facets WHERE
      record_id in (
          SELECT record_id FROM Facets WHERE
                   record_id in (SELECT record_id FROM Facets WHERE category_id=1)
               AND record_id in (SELECT record_id FROM Facets WHERE category_id=2)
               AND ...)

And we're still not done, because we want to remove categories that, if we added them to the input category set, wouldn't reduce the size of our record set. That is, we want to remove "redundant" categories. I'm not even going to bother working that into the above SQL query, because it's more likely you'd implement it as a second pass, in order to keep from increasing the exponent on the query processor's big-O processing time.

It's interesting to note that every text search engine is optimized for handling the first SQL query -- text search is all about intersecting sets of documents, where those sets are defined as all the documents that contain a given word. There's a reason that relational databases aren't usually used to implement text search. For example, SQL Server requires you to explicitly state which fields you want indexed for full-text search.

Hmmm... It might be interesting to see if I could abuse SQL Server's full-text search support to get it to support faceted navigation...

Posted by kimbly at 08:31 PM | Comments (3) | TrackBack

Legalize & Tax Marijuana

As I was driving home yesterday, I saw a billboard about a block from where I work, with the words "Legalize and Tax Marijuana" in six-foot-high big block letters. I am so happy to be in the People's Republic of Cambridge.

The site that the billboard promotes is overly conservative for my taste, but I suppose you have to give a little to get a little.

Posted by kimbly at 06:20 PM | Comments (3) | TrackBack

September 26, 2003

Advanced Functional Programming

A coworker pointed out that the Advanced Functional Programming class at Harvard has a public Wiki. The semester has only just started, but there's already some interesting comments coming from the daily discussions. For example, on the first day, they had a puzzle of trying to figure out a way of writing postscript in haskell. They came up with something that could handle expressions like "psbegin push 2 push 3 add psend". I'm currently trying to one-up them by making something like "rpn [2, 3, add]" work.

On the second day, they read Why Functional Programming Matters, and then everybody in the class had to post a question. Reading a paper all by itself has a much different feel than reading the paper and then a bunch of comments by other people. For example, some people pointed out that the paper ignores issues like space leaks and over abstraction. Responding to the space leak question, the teacher posted a reference to this paper which describes a profiler for haskell that measures both time as well as space. I'm glad to have found this because space leaks have been a source of serious unease for me when trying to use haskell.

I've added their Wiki's RecentChanges to my list of links to check periodically. If you're interested in this kind of thing you might want to check it out as well.

Posted by kimbly at 05:28 PM | Comments (9) | TrackBack

LL 2003

Oh boy, I'm excited already. The Lightweight Languages 2003 forum will be happening on the weekend right after I move into my new house. So I have a decision to make: shall I stay home and help unpack all the boxes, or shall I waste a whole day of pure hedonistic indulgence at the conference?

Boxes can wait! I'm going to replenish my soul.

Posted by kimbly at 01:38 PM | Comments (0) | TrackBack

September 25, 2003

Jatha 1.1

I just released a new version of Jatha, the lisp-like macro preprocessor for Java that I wrote a couple years ago. The new version has Ant support, plus a few new macros:

  • The EXCEPTION_CLASS macro creates simple exception classes.
  • The MCATCH macro lets you have a single exception handler for multiple exception types.
  • The COLLECTION macro generates several methods for working with collections that belong to a class (e.g. a Person class might have a collection of other Persons, with methods like addChild(), removeChild(), getChildIterator(), etc).

All of these changes were contributed by Eric Anderson.

Posted by kimbly at 08:26 PM | Comments (0) | TrackBack

September 24, 2003

Perl Supports #line

I didn't see this anywhere in the Perl documentation, but it's a useful piece of information to know, if you ever find yourself generating Perl code. Perl supports C preprocessor-style #line directives. For example:

    #line 135 script.ci
    die;

The above script will print "Died at script.ci line 135". If you have a syntax error, then the Perl interpreter will claim that the error is at "script.ci line 135". And so on. This is extremely useful for embedding perl snippets inside other files, because you can cause the Perl interpreter to report all errors as if they were in the original file.

What I like most about this bit of hackery is that # is the comment character for Perl, so normally the entire line directive would have been ignored as a comment -- obviously Perl has a special-case hack for supporting this. I think that Perl's handling of #line directives reveals a tiny window through which you can see the entire design philosophy of Perl: in any battle of consistency versus usefulness, usefulness wins.

Posted by kimbly at 01:47 PM | Comments (0) | TrackBack

September 18, 2003

Wikipedia Rocks

While searching to find out the Unicode characters for Chinese/Japanese quotation marks, I came across the Wikipedia page on Quotation Marks. It has detailed usage guidelines for british, american, german, french, russian, chinese, and japanese, as well as the Unicode code points for all the characters, and detailed instructions on proper usage (e.g. should terminating punctuation go inside or outside the quotes)? It even told how to write (and pronounce) "quotation mark" in Chinese and Japanese. Very impressive.

Posted by kimbly at 03:31 PM | Comments (0) | TrackBack

Endeca Still Hiring

I just got a list of several positions we have open.

  • Release Engineer/Toolsmith
  • Software Quality Assurance Engineer
  • Sr. Technical Support Engineer
  • Sr. Technical Writer
  • Software Engineer
  • Technical Product Manager
  • Industry Marketing Manager
  • Federal Pre-Sales Application Engineer
  • Pre-Sales Application Engineer - Europe
  • Sales Representative - Washington
  • Federal - Sales Representative - Washington
  • Sales Representative - St Louis/Cleveland/Indianapolis
  • Sales Manager - California
  • Inside Sales Representative - Cambridge, Boston
  • Telesales Representative - Central London, UK

Read on for a longer description of each opening.

As before, there's a $250 kickback for any referrals that go through me. Contact me at: kimbly [at] cybercom [dot] net.


Endeca

Endeca is a fast-growing, well-financed software company with a seasoned management team. Endeca has an aggressive track record of success with prestigious, leading brand companies including Barnes and Noble.com, Putnam Investments, Arrow Electronics and 1-800-FLOWERS.com. Our mission is helping companies solve the business problems associated with information overload. Our unique, Web-based advanced search solutions feature Guided NavigationSM, a new, patent-pending innovation that has received strong market acceptance and enables users to access and explore large data sources much faster and more precisely than they ever could before.

We are growing and seek highly motivated individuals to join our world-class team. Endeca offers competitive salary, stock options and a complete benefits package, plus a fun work environment.


Release Engineer / Toolsmith

Endeca's Software Development group is seeking an experienced Software Release Engineer & Toolsmith. This position will be responsible for formalizing our build and release procedures, maintaining our configuration management system, and building / packaging the Endeca software for release on multiple platforms. In addition, this position will maintain and enhance Endeca’s automated build and test system as well as design and build further tools as necessary to assist the development and QA processes.

Requirements:


  • BSCS or related field / experience.
  • 3-5 yrs Release / Configuration Engineering experience in the LINUX, Solaris & Windows environments
  • Strong knowledge of configuration management, and release engineering process and methodology
  • Demonstrated ability to take ownership of key product delivery processes.
  • Experience with the CVS source-code control system
  • Experience with development / build tools in the LINUX, Solaris & Windows environments
  • Perl & Shell scripting experience
  • Experience developing automated software build systems
  • Experience developing automated test systems
  • InstallShield Developer v8 experience a plus
  • Strong troubleshooting and analytical skills
  • Highly motivated, quick learning.
  • Desire and ability to work in a highly collaborative, team-oriented environment. Flexibility and the readiness to be a "utility infielder" when necessary are essential.


Software Quality Assurance Engineer

Endeca's Software Development group is seeking a Software Quality Assurance Engineer. The successful candidate will work closely with software developers and with product management in order to enhance and assure the quality of Endeca’s software. This position will be involved throughout the development process. They will be responsible for designing and implementing QA processes, detailed manual and automated test plans / test cases, tracking software defects, verifying software fixes, and assessing risk. This successful candidate will also exhibit a high level of self-motivation and independence while working in a team environment.

Requirements:


  • BSCS or related field / experience.
  • 3-5 yrs SQA experience in the LINUX, Solaris & Windows environments
  • Strong knowledge of Development Process & SQA Methodology
  • Experience with both white box and black box testing
  • Experience with test automation
  • Experience testing enterprise systems as well as web applications
  • Experience with XML
  • Experience with API level testing (Java, Perl, .Net, COM APIs)
  • Demonstrated ability to take ownership of QA projects
  • Strong troubleshooting and analytical skills
  • Highly motivated, quick learning.
  • Desire and ability to work in a highly collaborative, team-oriented environment. Flexibility and the readiness to be a "utility infielder" when necessary are essential.


Senior Technical Support Engineer

Endeca's Software Development group is seeking a Sr. Technical Support Engineer. This position will assist Endeca's customers as they implement Endeca's software by answering questions about the software, and troubleshooting issues with the software. You will be supporting skilled individuals such as web developers, application developers and system administrators. In addition to technically answering customer questions, you will also be responsible for logging and tracking issues and following them through the internal channels to completion and resolution. Above all, you are an advocate for the customer and must possess excellent communication skills in order to keep the customer happy. This position is ideal for a versatile, sharp, analytical, detail oriented and customer service oriented individual.

Requirements:


  • BSCS or related field / experience.
  • 2 years technical support experience supporting web applications and their development. Or support of database and client / server applications is also a plus.
  • Experience in web application development technologies such as HTML, Java / JSP, COM / ASP, .NET / C#, Perl, XML, or Apache in both Unix and Windows environments
  • Experience in both Unix and Windows environments
  • Strong troubleshooting and analytical skills
  • Experience with information rich applications, such as information retrieval or OLAP-style analytics engines, is a plus.
  • Exposure to client-server systems is a plus.
  • Desire and ability to work in a highly collaborative, team-oriented environment. Flexibility and the readiness to be a "utility infielder" when necessary are essential.


Senior Technical Writer

6-9 month contract with the possibility of going permanent.

Responsible for writing developer and system administrator-level documentation for an innovative development environment for complex web applications. Deliverables will include developer's guides, API references, web site deployment guides, and other related materials.

Requirements:


  • 3-5 years experience
  • Excellent writing and communication skills.
  • A demonstrated ability to write for developer and administrator-level audiences (this position does not include any end user documentation).
  • Experience documenting the internal structure and workings of complex web applications OR experience documenting developer tools or toolkits.
  • An understanding of basic programming concepts.
  • Experience documenting the deployment of large web applications in a production environment is a definite plus.
  • The ability to learn quickly, work independently, and manage multiple projects simultaneously.
  • 5+ years of technical writing experience in the software industry.
  • BA/BS in Communications or a related field.
  • Proficiency with Adobe FrameMaker and some flavor of web-help authoring tools (ideally, RoboHelp).
  • Familiarity with NT Server environments (familiarity with Solaris is a plus).
  • Experience working in a fast-paced start-up environment.
  • Flexibility and a sense of humor.

Software Engineer / Senior Software Engineer

Join a small, highly focused group that develops Endeca's core navigation and search technology. Responsibilities will include working with the team to implement new capabilities and components and to help redesign existing software. In addition to hands-on coding, candidates with appropriate experience can expect responsibilities of architecture and design, as well as working with the engineering team and product managers to shape Endeca's technology strategy. Position and salary will be commensurate with experience.

Requirements:


  • Outstanding programming skills in C/C++ on Unix and Win32. Must love writing code, inventing and tweaking algorithms and data structures, and using systems knowledge to maximize performance.
  • Demonstrated experience working on intellectually exciting projects with strong engineering challenges.
  • Undergraduate or graduate degree in computer science, or equivalent depth of study in CS.
  • Ability to work in a highly collaborative, team-oriented environment.
  • Experience developing core search/information retrieval software or OLAP-style analytics engines is a plus.

Technical Product Manager

The Technical Product Manager brings critical hands-on technical expertise and skills to the product management organization, helping drive in-bound product definition with engineering, as well as the creation of critical technical sales tools.

In particular, the technical product manager will focus on the following key areas:


  • In-bound product management -- as an integral part of the product management organization, this person would bring hands-on product expertise to product direction and design discussions with engineering.
  • Technology evaluation -- in concert with product management and development resources, the technical product manager would lead the technical evaluation of third party products under consideration for embedding / OEMing within the Endeca product suite.
  • Product demonstrations -- the technical product manager would drive the creation and maintenance of product demonstrations combining their own demonstration development skills with any resources available in the services and field organizations.
  • Competitive analysis -- in concert with product management / marketing, this person would drive detailed technical evaluations and comparisons of key competitors to both drive product development and enable more effective competitive selling.
    Requirements:
  • Technology passion: candidate must enjoy "playing" with technology and have an aptitude for quickly learning and pushing the capabilities of a wide variety of technologies and products.
  • Communication skills: candidate must be able to easily communicate technical capabilities with both very technical and non-technical people through oral and written vehicles.
  • Team-oriented: candidate must enjoy collaborating with a team and be able to both lead and participate in projects.
  • Undergraduate or graduate technical degree or equivalent in-depth study of technology.
  • Experience working in a technical sales or technical marketing / product management position.
  • Experience with information retrieval technology (search, business intelligence) and/or information management technology (document / content management, RDBMS, etc.).
  • 2- 4 years experience


Industry Marketing Manager

Reports to: Director, Product Management

Job Description:
The Industry Marketing Manager is responsible for driving Endeca ProFind into select verticals, from industry research and analysis through to sales training and execution. In particular, the Industry Marketing Manager will focus on the following key areas in concert with the rest of the product management / marketing organization:


  • Research and analysis of the enterprise search and knowledge management marketplace to identify key verticals as well as key messaging and product requirements for those verticals.
  • Creation / modification of messaging & positioning for Endeca and Endeca ProFind in these key verticals, including marketing collateral, sales tools, web site text, etc.
  • Identification and definition of key product enhancements to address industry-specific product functionality.
  • Sales force education through training sessions, creation of sales materials, and one-on-one training with sales representatives in live accounts.
  • Direct sales execution, in concert with sales representatives, at early accounts in the key verticals.

Requirements:


  • Strong communications skills: the candidate must have very strong written and verbal communications skills, from writing collateral and presentations through delivering these materials to small and large audiences – both non-technical and moderately technical.
  • Research: the candidate must be able to perform primary market research and synthesize the results of that research into actionable plans for Endeca.
  • Technology passion: the candidate must have a passion for enterprise software and a desire to uncover opportunities to best exploit the Endeca information retrieval platform.
  • Team-oriented: candidate must enjoy collaborating with a team and be able to both lead and participate in projects.
  • Experience in the knowledge management / information retrieval (search, business intelligence) and/or information management industries (document / content management, RDBMS, etc.) is a plus.


SALES

Federal Pre-Sales Application Engineer

Partnering with the field sales representatives, individual will participate in pre-sales qualification calls, develop Proof of Concepts (POC’s) and conduct technical presentations and demonstrations to end user prospects, customers and business development partners through the sales process. Create and maintain evaluation test procedures for customers to use during technical evaluations/qualifications. Work closely with corporate marketing, product management and engineering groups to enhance functionality of products based upon customer feedback and input. May also participate in trade shows and conduct occasional product training.

Requirements:


  • A must is 7 years experience in Federal Government market with Top Secret (or higher) clearance from the Dept of Defense or Intelligence Community.
  • Minimum of 3-5 years sales support experience preferably supporting business applications software.
  • BA/BS in Computer Science, Business, Marketing (or equivalent).
  • High-energy individual with strong technical communication and presentation skills.
    Must have ability to operate effectively in fast paced, multi-contact sales campaigns

Pre-Sales Application Engineer -EUROPE

Partnering with the field sales representatives, individual will participate in pre-sales qualification calls, develop Proof of Concepts (POC’s) and conduct technical presentations and demonstrations to end user prospects, customers and business development partners through the sales process. Create and maintain evaluation test procedures for customers to use during technical evaluations/qualifications. Work closely with corporate marketing, product management and engineering groups to enhance functionality of products based upon customer feedback and input. May also participate in trade shows and conduct occasional product training.

Requirements:


  • Minimum of 3-5 years sales support experience preferably supporting business applications software.
  • BA/BS in Computer Science, Business, Marketing (or equivalent).
  • High-energy individual with strong technical communication and presentation skills.
  • Must have ability to operate effectively in fast paced, multi-contact sales campaigns.


Sales Representative – Washington DC

Responsible for selling Endeca's innovative data navigation solutions to industry leading companies. Individual will manage accounts through the sales process, develop account plans, manage account forecasts and coordinate required resources for execution during the sales cycle within an assigned geographical territory.

Requirements:


  • Minimum of 5 years software sales experience selling business application software
  • Successful background selling enterprise software a must; successful background in Search/Content Management highly desired
  • Proven track record successfully closing large deals
  • Candidate should be able to demonstrate proven record exceeding quotas and developing new business
  • BA/BS in Business, Marketing, Computer Science, Economics (or equivalent)


Federal Sales Representative – Washington DC

Responsible for selling Endeca's innovative data navigation solutions to industry leading companies. Individual will manage accounts through the sales process, develop account plans, manage account forecasts and coordinate required resources for execution during the sales cycle within an assigned geographical territory.

Requirements:


  • Minimum of 5 years software sales experience selling business application software
  • Successful background selling enterprise software in federal space a must
    Successful background in Search/ Content Management highly desired
  • Proven track record successfully closing large deals
  • Candidate should be able to demonstrate proven record exceeding quotas and developing new business
  • BA/BS in Business, Marketing, Computer Science, Economics (or equivalent)


Sales Representative – Based in either St Louis/Detroit/Cleveland/ Indianapolis

Responsible for selling Endeca's innovative data navigation solutions to industry leading companies. Individual will manage accounts through the sales process, develop account plans, manage account forecasts and coordinate required resources for execution during the sales cycle within an assigned geographical territory.

Requirements:


  • Minimum of 5 years software sales experience selling business application software
  • Successful background selling enterprise software a must; successful background in Search/Content Management highly desired
  • Proven track record successfully closing large deals
  • Candidate should be able to demonstrate proven record exceeding quotas and developing new business
  • BA/BS in Business, Marketing, Computer Science, Economics (or equivalent)


Sales Manager -CA

Responsible for selling Endeca's innovative data navigation solutions to industry leading companies. Individual will manage accounts through the sales process, develop account plans, manage account forecasts and coordinate required resources for execution during the sales cycle within an assigned geographical territory.

Requirements:


  • Minimum of 8 years software sales experience selling business application software with at least two or more years of related supervisory experience
    Successful background selling enterprise software a must
  • successful background in Enterprise Search, Content Management highly desired
  • Proven track record successfully closing large deals
  • Candidate should be able to demonstrate proven record exceeding quotas and developing new business
  • BA/BS in Business, Marketing, Computer Science, Economics (or equivalent)


Inside Sales Representative- Cambridge, Boston

Endeca is looking for an aggressive, motivated, ambitious inside sales representative with strong interpersonal skills and the ability to consistently produce beyond expectation. Candidate must be self-motivated and proactive - to include the ability to independently challenge themselves to get things done with out specific instructions and comfortable working in a quick changing environment.

Initiate cold calls, generate leads, and prospect new business. Identify potential customers on a regional basis and discuss the high-level value proposition of Endeca's products in the customer’s business environment. Qualify sales leads, and refer qualified leads to the field sales organization.

Requirements:


  • 2-4 years Inside Sales experience ideally in enterprise software
  • Superb customer service and listening skills.
  • Excellent written and verbal communication skills
  • Ability to communicate complex technology and value propositions
  • Bachelor’s degree

Telesales Representative —Central London, UK

We are growing in our Telesales Team and seek highly motivated individuals to join our world-class sales team. Endeca offers competitive salary, stock options and a complete benefits package, plus a fun work environment.

Endeca is looking for an aggressive, motivated, ambitious inside sales representative with strong interpersonal skills and the ability to consistently produce beyond expectation. Candidate must be self-motivated and proactive - to include the ability to independently challenge themselves to get things done with out specific instructions and comfortable working in a quick changing environment.

Job Responsibilities:
Initiate cold calls, generate leads, and prospect new business. Identify potential customers on a regional basis and discuss the high-level value proposition of Endeca's products in the customer’s business environment. Qualify sales leads, and refer qualified leads to the field sales organization.

Requirements:


  • 2-4 years Inside Sales experience ideally in enterprise software Superb customer service and listening skills.
  • Excellent written and verbal communication skills
  • Ability to communicate complex technology and value propositions
  • Fluent in German and English
  • Bachelor’s degree.

Posted by kimbly at 10:24 AM | Comments (1) | TrackBack

September 17, 2003

Kim Burchett

I did a Google search for "Kim Burchett", and I was shocked to discover that not only are there several other people with my name, but Google ranks someone else as the top hit. Therefore, this post is partly an attempt to guarantee myself top billing, partly self-absorbed navel gazing (or voyeurism?), and partly a bid to ensure that people don't confuse me with these other people. Follow along if you like. I expect I'll freak out at least one of my same-named brethren by virtue of the fact that I'm a complete stranger who's talking about them on the internet.

Kim Burchett #1 lived in Tampa, Florida in 1996. She's currently a realtor in Tampa, and owns the kimburchett.com domain name. She might also be the same Kim Burchett who belongs to the Central Baptist Church in Deltona, Florida.

Kim Burchett #2 has a kid named Kevin in Visalia, California.

Another Kim Burchett had a baby named Makayla just one month ago (that link is definitely going to rot soon). I assume she's not also the mother of Kevin because Makayla's father is Scott while Kevin's father is Mike. She might be the same Kim as the one in Florida, but the nursery is in Harlan, Iowa so probably not. Because of this email message I bet she's related to Edward, Marshall, Keith, Garrett, Andrew, and Allen Burchett. The reason I know that these two pages are talking about the same person is because her email address is with fmctc.com, which is a telephone company located in Harlan, Iowa (same place as the nursery). The email also suggests that her husband's last name is Schwery.

Yet another Kim Burchett had a father named Virgil Ray Cavins who died in 1996 in Paintsville, Kentucky. Judging by the Kentucky connection, I bet she's also the Treasurer for the Business and Professional Women's Club and the Chairperson for the Year 2000 5k Run in Glasgow, Kentucky.

There's a Kim Burchett who threw a baby shower for someone named Shannon in December 2002. Pictures available.

There's a Kimberly Burchett who was laid off from AT&T in 1991, in Fairlawn Virginia. She was interviewed about it on WDBJ-7, and recommended that people in her situation go back to school.

And finally, in March 2002, there was a Kim Burchett who served as the Park & Recreation Representative for the Fairfield Community Forest Commission in Fairfield, Ohio.

If you're one of the Kim Burchetts that I've mentioned above, and you're reading this with a sense of dread and horror, just let me know and I'll remove what I've written about you.

Posted by kimbly at 07:09 PM | Comments (3) | TrackBack

tcpreen

If you have to debug a network communication problem, tcpreen is a great tool. It lets you see exactly what information is getting sent between the client and the server. It's a lot quicker to whip out a tool like this than to start inserting print statements.

Posted by kimbly at 10:32 AM | Comments (0) | TrackBack

September 16, 2003

Blog Survey

Via Gnomon, I found Scott Nowson's PhD Thesis on using blogs to correlate writing style with personality type. If you have a blog that was active during May 2003, you might want to contribute to the study. Appropriately, he's also writing a blog about the project.

Posted by kimbly at 08:27 PM

Christopher Lydon

Je' tipped me off to the fact that Christopher Lydon has a weblog. I remember when he was the host for the Connection here in Boston, and although I thought he spent a bit too much time on how the internet was changing the world, he was still twenty times better than the two hosts that immediately followed him (I don't even remember their names). He was so good that I considered volunteering to transcribe his interviews so that they could be published on the web.

The current host for the connection is Dick Gordon, and he's very good. But now that I know Christopher Lydon has his own weblog, it's like getting bonus episodes! The fact that he still gets interviews with important people even though he's not on the radio anymore is very impressive, and a real testament to Mr Lydon.

Unfortunately even though his interviews are now on the web, they're still audio-only. I prefer text because I can read much more quickly than I can listen.

Posted by kimbly at 06:10 PM | Comments (0) | TrackBack

School's Back

My website traffic is telling me that the school year has begun again. I haven't been posting very much recently, and over the summer that would have meant I would get about 70 unique visitors a day. But now I'm getting 120 or more a day, even on the weekends (over the summer, I only got about 50 a day on the weekends).

So welcome back, all you bastards that had a 3-month vacation!

Posted by kimbly at 09:50 AM | Comments (0) | TrackBack

September 12, 2003

Diamond Wiki 0.2

I added a few features to the Diamond Wiki. If you haven't looked at it since the initial release, you might want to check it out again. For one, it's a lot prettier than it used to be. Plus you can now see the metadata for pages without having to edit them.

Posted by kimbly at 09:44 PM | Comments (0) | TrackBack

September 11, 2003

Spamming Google

Apparently Amerisave spams google. I've never seen Google spam before. Check out the top search results for "amerisave". A whole lot of the hits have urls that end with "amerisave_mortgage_rates.htm". Nearly all of these pages have "Amerisave Mortgage Rates" randomly interspersed in the text. My favorite one reads:

This site provides independant reviews on mortgage organizations and subjects such as Amerisave Mortgage Rates. We have no relationship to Amerisave Mortgage Rates , and merely attempt to provide unbiased info to the public.

Yeah right, unbiased info. I think I'll report it to Google. Note that I haven't linked to any of the spam pages. I don't want to up their PageRank.

Posted by kimbly at 07:08 PM | Comments (2) | TrackBack

Buying a House

My partner and I are buying a house. We went to the open house on sunday, made an offer on tuesday morning, and it was accepted five hours later. I think we're both still reeling a bit from how quickly we got ourselves into massive debt.

It's a small but beautiful 2nd floor condo on a quiet one-way road, right across the street from a park that has a little river through it.

Therefore, don't expect many posts for a few days. I'm busy dealing with crunch time at work (we're about two weeks before a release and the bugs are thick -- we're working all weekend), plus getting everything lined up for the house (inspection, attorney, mortgage, and tons of supporting documentation).

Posted by kimbly at 03:15 PM | Comments (0) | TrackBack

September 09, 2003

Endeca is Hiring

The company I work for, Endeca, is currently hiring programmers. Since the job market sucks so much right now, I feel it is my duty to share this information with you. There's also a reward involved: if you send me a resume, and if I think it's good enough to pass on, and if the person gets hired, then I'll kick back $250 to you.

The tech position that we're currently looking to fill is in our "tools" group. We're looking for someone who's comfortable working with with several mainstream languages (Java, C++, Perl), and who likes working on user-interface stuff (MFC, HTML, javascript). Attitude and interest level counts, too. Minimum of a CS degree or a couple years of work experience. Must work on-site in Cambridge, MA.

We're generally only interested in people that are in the upper percentile range for their level of experience. This means you should be in the top of the class if you're straight out of college, and the bar moves higher if you have more experience. This is not necessarily a junior position -- we will hire good senior candidates as well, with higher salary as appropriate.

Posted by kimbly at 05:43 PM | Comments (0) | TrackBack

Reversible Computing

There's an interesting article about reversible computing over on kuro5hin. It surveys time-warp debuggers, zero-energy computers, quantum computing, dynamical systems optimization, and haskell.

Posted by kimbly at 04:51 PM | Comments (0) | TrackBack

September 07, 2003

Ecstasy Paper Retracted

I remember when this paper came out in Science, claiming that a "typical night's dose" of ecstasy could cause brain damage. I didn't give it much credence because the study managed to kill 20% of the monkeys they tested on, and two others weren't even given the full dose because they showed signs of severe distress. I simply assumed that this meant that monkeys weren't a good model for human response to ecstasy.

Turns out, the authors of the paper have now retracted it, because the monkeys weren't actually given ecstasy at all. They were given speed.

You would think that a scientist publishing this kind of paper would realize that something just wasn't quite right about their results. You would think that even if the scientist didn't realize something was up, at least the reviewers or editors of the journal would. But the fact is that it's quite common for the large science journals to be less rigorous than you'd expect. They're big because they're popular, and they're popular because they're controversial, not because they're authoritative. The ecstasy paper was published mainly because it was shocking.

Posted by kimbly at 05:44 PM | Comments (0) | TrackBack

September 05, 2003

Diamond Wiki 0.1

After about eight hours of late-night hacking, I've got an initial version of the Diamond Wiki project. It doesn't do all that much yet, and there's hardly any content, but feel free to play with it. I've backed it all up, so don't worry about erasing things. You can start with the FrontPage, or you can BrowseFacets.

The next feature I want to implement is to put page counts on the refinements, so that you have a better sense for the size of each category. I also want to add negative refinements (e.g. "all pages that are NOT about Wiki"). Then maybe I'll work on integrating faceted browsing with text search.

Posted by kimbly at 07:51 PM | Comments (8) | TrackBack

Public Education

Here's an interesting article on possible ulterior motives for the creation of the American public education system. The claim is that public schools throughout western history have actually been created by the state for the purpose of training the people to be "good citizens". From one point of view, this is admirable and exactly what a good education should strive to provide. From another point of view, it amounts to brainwashing.

I've long believed that in many cases, it's better to believe in something that isn't true, or to be ignorant of the truth. Maybe this is one of those cases. Maybe brainwashing young people into trusting authority is a good thing, because it allows us to create a unified populace without too much social friction. Most importantly, education is perhaps the most humane possible way of creating such a unified populace -- I much prefer propaganda to ethnic cleansing.

On the other hand, there is a useful, actionable, way of reading this article: If the public school system is designed to ensure that you only think thoughts that are good for the state, then you must compensate for that if you want to be able to think thoughts that are not necessarily good for the state.

But why bother? Why not just be productive, write some code, and enjoy the comfortable feeling of fitting in? It's hard to live outside of the cultural norm, even if it's no longer as dangerous as it used to be.

Posted by kimbly at 05:41 PM | Comments (2) | TrackBack

Windows NT Uses Prolog

Apparently Windows NT has an embedded Prolog interpreter, for network configuration. (Via LtU).

Posted by kimbly at 11:24 AM | Comments (3)

September 04, 2003

Faceted Movable Type

Via pixelcharmer, I noticed that a couple faceted navigation plugins have been created recently for Movable Type. I'm thinking of trying out the CategoryFaceted plugin. It'll probably be an improvement, but I doubt it'll do everything I want.

Meanwhile, I'm continuing to hack on the Wiki Diamond project. Last night, I started making modifications to PikiPiki just to get a prototype going. Following the WikiWay, I'm keeping it simple. My current metadata format is based on flat files that have their metadata recorded as headers, a lot like an email message, but using -*-*-*- instead of a blank line to separate the headers from the body. For example:

    Subject: Faceted Navigation
    Author: Kim
    -*-*-*-
    The body of the document goes here.

It has a simple URL syntax for browsing: browse?Author=Kim&Subject= Faceted%20Navigation, for example. Once I get refinements working, I'll make the wiki public and you can all start playing with it.

Posted by kimbly at 05:43 PM | Comments (0) | TrackBack

September 03, 2003

Quantity Has To Matter

When coding at work, I periodically remind myself to take some pride on the sheer quantity of code that I manipulate. If I don't, I become depressed. If I stop to realize that I just modified 40 lines of code simply to add a member variable to a COM wrapper around a C++ object, I'm likely to die a little inside, and then go "waste time" by reading about monads or category theory or abstract interpretation.

Posted by kimbly at 12:33 PM | Comments (5) | TrackBack

September 02, 2003

The PLT Web Server isn't a Library

I decided to hack a bit on the Wiki Diamond project tonight. First decision: choose a language. Because of my recent ramblings about flexible syntax and semantics, and because I already have it installed on my home machine, I chose PLT Scheme.

I decided to start by creating a simple hello-world web page, using the PLT web-server framework. If only it were that easy...

If you do a search for "web server" in the PLT help desk, you will find:

The _Web_ _server_ collection provides two launchers. The "web-server" launcher starts the Web server. The "web-server-monitor" launcher monitors a Webserver by periodically sending it requests. Both launchers support the-h or --help flags which describe other available options.

Consternation. This is a program, not an API. I'm a programmer, damnit, not a user. Ah, but if you scroll down some, you will find:

Requiring the library _web-server.ss_, via (require (lib "web-server.ss" "web-server"))
provides the serve function, which starts the server with more configuration options.

That's what I'm talkin' about! Now, said serve function takes a single "configuration" argument. What's a configuration you ask? That's a good question, and one that they don't feel like answering. The only documented way to create a configuration is to load it from a file. I hate file clutter, and besides the file format isn't documented either. So I dig into the sources.

It turns out there's a make-configuration function that you can use. It's actually quite difficult to find the definition of this function, because they use a provide-define-struct macro to create it -- and so the name of the function isn't actually mentioned anywhere in the definition. This wouldn't be a problem if the "jump to definition" feature worked across files and understood macros, but it does neither. You lose.

Anyway, now I have some code:

(require (lib "web-server.ss" "web-server"))
(require (lib "configuration-structures.ss" "web-server"))
(define config
  (make-configuration 
   8080   ; port
   60     ; wait timeout
   60     ; connect timeout
   null   ; virtual hosts
   ))
(define server (serve config))

I ran my server, and it worked, but then I realized that (duh!) it didn't do anything. If you try to retrieve the front page, you get nothing -- not even whitespace. It just disconnects you immediately.

So I figure that maybe I need to make a virtual host. But look at the parameters to the make-host function:

(listof str) (str str -> (U #f str)) (str str sym url str -> str) passwords responders timeouts paths (U oport #f)

Upon sight of this monstrosity, my determination falters. I decide that the PLT web-server was simply not meant to be used as a library, and I've been heading down a dead end.

Tune in tomorrow for the next (not so) exciting episode.

Posted by kimbly at 08:00 PM | Comments (0) | TrackBack

Multi Lingual Development

For the last couple days at work, I was updating our APIs to reflect a relatively small change I made. The change was small, however updating our APIs is very time consuming, because we support five different languages: Perl, C++, Java, COM, and .NET. Making a change to the API means making a nearly identical change in five different languages, using four different compilers, four different development environments, five different test drivers, and two different platforms (unix and windows).

This drove me crazy. If I ever have to do more work on our APIs, I will try to convince someone to reorganize them. Currently, each API has its own directory, so you have nearly identical code scattered in several different directories. If I had my druthers, I'd colocate corresponding methods, so that I could change them consistently, without losing my train of thought. I'm imagining a very simple preprocessor that takes a single file containing six different languages, and generates six different output files, with one language in each. Even the C preprocessor would probably work -- just use a #define for each language, and run it six times. With a judicous use of macros, you might even be able to get away with only one or two versions for some of the simpler methods (e.g. getters and setters). A more sophisticated preprocessor (like, say, scheme) would probably be even better.

I doubt we'll ever do this at work though. Which is why I had to make a post about it, to get my frustration out.

Posted by kimbly at 03:12 PM | Comments (0) | TrackBack

Stereoscopic Images

These stereoscopic images using animated GIFs are pretty cool. I'm surprised that they work as well as they do.


Posted by kimbly at 01:50 PM | Comments (3) | TrackBack