Context switching

It’s the start of a new year, and like everyone else I’m trying to get back into the swing of things.

For the past couple of weeks during my time off from work, I’ve been coding up a redesign of Hebcal.com based on the Bootstrap front-end framework. It’s great fun to learn something new and to do a little bit of coding, even it’s just HTML and JavaScript.

Hebcal been online since 1999, and the first major redesign was just 2 years ago. It’s rather amazing how much the web has changed just in the past 2 years — not just the advent of HTML5, but the increase in phones & tablets. 20% of the 2.7m visits to Hebcal.com in 2012 were from mobile + tablets! That’s up from about 6% of visits two years ago.

So now I’m back at work and I need to shift my attention away from coding and back to vision & strategy. I also need to make that transition from hanging out with my family (cooking, shopping, making handprints, playing soccer in the park or Gobblet on the carpet, reading) to being in the office.

UTF-8.com redesign

I’ve been maintaining a collection of UTF-8 resources at utf-8.com for the past 13 years. I registered the domain name back in 1999 when I began working on internationalization and character sets.

After years of looking like I hand-coded the page in Emacs html-mode (which I did), I finally decided to move to a more modern look based on the Bootstrap CSS toolkit.

Commercial Graph: A Map of Financial Relationships

I’m speaking today about Intuit’s Commercial Graph at the Strata + Hadoop World Conference. Slides: Commercial Graph: A Map of Financial Relationships (pptx format).

Abstract

Imagine the social graph where personal relationships are replaced by commercial relationships based on real financial data. Imagine the possibilities for small businesses to grow, connect, transact and prosper.

Intuit is uniquely qualified to achieve just this. We are entrusted with the collective data of 50 million consumers and small businesses. It is a unique pool of data that covers the financial spectrum – ranging from individual purchase history to business inventories.

At Intuit, we are building the Commercial Graph with the consumer and small business data from products like Mint.com, Quicken, and QuickBooks.

We take millions of user-entered, and hence unstructured, business descriptions and billions of transactions and apply Hadoop based deduplication algorithms for normalization, and machine learning for categorization. In order to better understand the graph, we compute metrics such as connected components, centrality, and commercial PageRank.

We will examine several applications of the commercial graph, including finding more customers like your best customers, optimizing your vendors, and relevant offers & recommendations to help our customers make and save money.

A deep-dive on technical architecture will discuss use of Giraph as a Hadoop based large scale graph processing platform and neo4j as a real-time graph datastore.

Annual tech refresh: move to WordPress

radwin.org got compromised recently due to some sort of server-side vulnerability. Was it a MovableType bug? Some stale version of phpBB or a vulnerability in the ancient copy of PHP4 itself? Who the heck knows. I did a slash and burn and removed all stale PHP/CGI stuff and upgraded to PHP5. Looks like I got rid of it.

As a side effect, I’m saying goodbye to MovableType and taking the leap to WordPress. Maybe that way that blog I actively authored from 2002-2006 will actually avoid bit-rotting. Certainly this version looks a helluva lot better on lots of different devices, thanks to the whole “responsive” web design movement.

There’s going to be a bunch of broken links. Oh well. It’s a good thing that we’ve got search technology for anyone who really cares to find some ancient content I wrote.

stubgen – a member function stub generator for C++

Introduction

stubgen is a C++ development tool that keeps code files in sync with their associated headers. When it finds a member function declaration in a header file that doesn’t have a corresponding implementation, it creates an empty skeleton with descriptive comment headers.

stubgen has several options, but this brief example should give you an idea of what it can do. Suppose you have the following header file Point.h:

class Point {
public:
    Point(int x, int y);
    void addTo(const Point& other);

    int xValue, yValue;
};

Running stubgen -s Point.h would produce the following file:

/***********************************************
 * AUTHOR: Michael J. Radwin
 *   FILE: Point.cpp
 *   DATE: Mon Apr 20 17:39:05 1998
 *  DESCR:
 ***********************************************/
#include "Point.h"

/*
 *  Method: Point::Point()
 *   Descr:
 */
Point::Point(int x, int y)
{
}

/*
 *  Method: Point::addTo()
 *   Descr:
 */
void
Point::addTo(const Point& other)
{
}

Documentation

README

building, installation instructions, and acknowledgements

Manual Page

detailed descriptions, examples

Change Log

a listing of changes made on various versions

BSD License

terms and conditions for copying, distribution and modification

Download Source and Win32 executable

http://www.radwin.org/michael/projects/stubgen/dist/

I’ve successfully built stubgen on the following platforms, using the GNU tools make, gcc, bison, and flex:

  • SPARC Solaris (2.5 and 2.6)
  • SunOS 4.1.3
  • SGI IRIX 5.3
  • RS6000 AIX 3.2
  • FreeBSD 2.2
  • MS Windows NT 4.0 (using GNU bison/flex and MSVC++ 5.0)
  • BeOS R5

Copyright

Copyright © 2011 Michael J. Radwin

Personality plug-in for Eudora

The Personality plug-in for Eudora adds 3 stereotypical “personalities” to your Message Plug-ins menu in Eudora 3.x and 4.x for Windows. It translates English messages into either mock Swedish (like the Swedish Chef on the Muppet Show), mock Jive (a black dialect of the 70s), or B1FF-speak (a fictitious person who is “new” on the ‘Net who spells poorly and uses all capital letters).

Warning: you may find these personalities offensive. They may use profanity and other offensive slang. Use at your own risk.

To use the Personality plug-in for Eudora, you’ll need:

  • Windows 95, 98, or NT (sorry, Windows 3.x not available)
  • Eudora Light 3 or Eudora Pro 3 or 4
  • WinZIP (or some other program that will extract .zip files)

Download persplugin.zip for Windows 95, 98 and NT (25 kbytes). To install:

  • extract person32.dll from persplugin.zip into your \Program Files\Eudora\Plugins folder
  • restart Eudora
  • with a message open, chose Edit – Message Plugins – and then Swedish ChefJive, or B1FF to add personality.

Here is an example of an original message without any personality:

Dear Kerri,

How are you?  This was an everyday boring email message
until I decided to apply the Personality plug-in for Eudora.
Now my email is cooler and more fun to read than ever.  You
can even convert incoming email as well!  Just imagine how
much fun you'll have when you apply the Jive, the Swedish
Chef, or B1FF personality to those boring memos you get in
your Inbox.

-Michael

… and the same message with the Jive personality:

Dear Kerri,

How you is?  Dis wuz an everyday bo'in' email message until
ah' decided t'apply de Personality plug-in fo' Eudo'a.
Sheeeiit.  Now mah' email be coola' and mo'e fun t'read dan
ever.  Ah be baaad...  You's kin even convert incomin' email
as sheeit.  Right On!  Just imagine how much fun ya''ll
gots' when ya' apply de Jive, de Swedish Chef, o' B1FF
sucka'ality t'dose bo'in' memos ya' git in yo' Inbox.

-Michael

… and the same message with the Swedish Chef personality:

Deer Kerree,

Hoo ere-a yuoo?  Thees ves un iferydey bureeng imeeel
messege-a unteel I deceeded tu epply zee Persuneleety
ploog-in fur Ioodura.  Noo my imeeel is cuuler und mure-a
foon tu reed thun ifer.  Yuoo cun ifee cunfert incumeeng
imeeel es vell!  Joost imegeene-a hoo mooch foon yuoo'll
hefe-a vhee yuoo epply zee Jeefe-a, zee Svedeesh Cheff, oor
B1FF persuneleety tu thuse-a bureeng memus yuoo get in yuoor
Inbux.

-Meecheel

… and the same message with the B1FF personality:

DEER KERR1,

H0W R U?!  THI5 WA5 AN EVERYDAY BOR1NG EMAIL ME55AG3 UNTIL I
DECIDED 2 APPLY THE PERS0NALITY PLUG-1N 4 EUDORA.  N0W MY
EMAIL 1S C00L!!!ER & MERE FUN 2 REED THAN EVER!!  Y0U
CAN EVEN C0NVERT 1NC0M1NG EMA1L A5 WELLL!1!  JUST 1MAG1NE
H0W MUCH FUN U"L HAVE WHEN U APPLY THE J1V3, TH3 SWEDI5H
CHEF, 0R B1FF PERS0NALITY 2 TH05E BER1NG MEM0S U GET 1N
YOU'RE 1NB0X.

-MICHAEL

The Personality plug-in for Eudora borrows heavily from some good old Unix standbys. Credit should be given to:

Jive
jive.l lexer – (unknown origin)
Swedish Chef
chef.x lexer – convert English on stdin to Mock Swedish on stdout. Apr 15, 1992; John Hagerman.
B1FF
b1ff.x lexer – by Matt Welsh (mdw@tc.cornell.edu) +1 607 253 2737 modified and improved by David Whitten. 92/11/03.

Further information about B1FF, courtesy of Matt Welsh:

For the information of some:

B1FF is a fictitious person who is "new" on the 'net.

You can recognize his posts by:

  He always SHOUTS as he types.

  He sometimes spells FONET1KLEE (phonetically) the rest of the time, he  
    just misspells words or punctuates them incorrectly.

  He shortens some words (presumably for ease in typing)
   like '4' for 'for' or 'four'
   like '2' for 'two' or 'to' or 'too'
   like '&' for 'and'
   like 'U' for 'you' or 'ewe'
   like 'R' for 'are'
   like 'C' for 'sea' or 'see'

He can't see the difference between certain letters
       like '1' and 'i'
    or like '0' and 'o'
    or like '5' and 's'
    or like '2' and 'z'

  His speech is peppered with profanity.

  He never uses only one '!' or '?' when '!!!!!!!!' or '????!!!!' will do.

  He never uses the apostrophe (') and always uses the double quote (")
     instead.

  I have some vague memory of B1FF being mentioned in the New Hackers
dictionary, but I can't verify the validity of this.

  I can't even validate that his full name is NELSON 0TB1FF , but it sounds
correct.

Developers: download source code perspluginsrc.zip for MS Visual C++ 5.0 (75 kbytes).

Everyone: find other Eudora plug-ins at The FEL-X Eudora PlugIns & Add-Ins Site.

You might also check out John B. Chambers’ Chef/Jive/ValSpeak/Pig-Latin CGI form.