Category Archives: Projects + Papers

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.

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.

Java Network File System

The Java Network File System was my Honors Thesis project at Brown University and second place winner for the 1997 ACM Quest for Java student programming contest.

README

See my contest README for an overview of the project and instructions for running the server and client.

Paper

We introduce and discuss the Java Network File System ( JNFS), a network file system for Network Computers (NCs). JNFS works on all NC-compliant NC devices, provides authentication and authorization support, works with other file systems such as NFS and NTFS, and offers reasonable performance. 16 pages.

Source code

  • jnfs_src.tar.gz – source code, test suites, sample client applet, etc. (49K)
  • jnfs.jar – signed java archive of classfiles.
  • jnfs.x509 – X509 certificate for jnfs entity.

API Documentation (generated with javadoc)

Related work

What I learned from this project

The greatest disservice one can do to Java is to perpetuate the belief that it is merely a programming language for the Web. Once we begin to think of Java as a general-purpose programming language, people will use it to build real applications and systems. Only then will we really see that object-orientation, garbage collection, and run-time safety make code easier to develop, debug, maintain, and understand.

– Michael J. Radwin, self-proclaimed Java evangelist