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.

Full-sized Flickr image download and RSS tools

Came across a couple of good tools today that replace the cool Photocastr app to give you batch/bulk access to your Flickr images in various sizes/resolutions:

Flickr Feed Image Re-sizer from Yahoo! Pipes. I’m using this to subscribe feeds in iPhoto and also for a Mac OS X screensaver. Default RSS feeds from Flickr only come in a Small size, which isn’t good enough for anything. Some simple regexes (hosted by Y! Pipies) can easily convert from small to Medium, Large, or Original size. Nice. This tool is free.

Bulkr, an Adobe AIR app that lets you download in bulk/batch your Flickr images. I plan to use this to fill up an SDHC card and still into the digital picture frame I recently purchased. There’s a free version and a $29.95 Bulkr PRO version with more features.

A letter to Sivan Hallel Radwin on the day of her Simchat Bat

Our dear sweet girl,

We are so blessed to have you here today, to introduce you to our community and to share with you the blessings of the covenant of the Jewish people. You are the newest member of the Radwin and Schlesinger families.

We have been waiting for you! Since Pesach we have been counting each day and anticipating your arrival. We’re so excited to finally meet you. And, after getting to know you a little bit this week, studying you, watching you breathe and sleep, we have chosen for you the name Sivan Hallel.

Your first name, Sivan, is chosen to remember two very special women in your family tree, both named Sylvia. Sylvia Weinstein was the dear younger sister of your mother’s grandfather Julius. Sylvia Weinstein was born in 1915 and died just weeks before your parents’ wedding. She had many extraordinary traits, but maybe one of the most special was that, in her eyes — everything and everyone was wonderful. Especially family. She would have thought that you, Sivan, were wonderful, and she would have been so thrilled to meet you and welcome you into the family. We miss her today even as we remember her and name you for her.

You are also named for your father’s grandmother, Sylvia Burns Radwin. Sylvia was a high school biology teacher, a counselor, and an artist. Sylvia was always singing, or humming melodies or songs. Any word you spoke that reminded her of a song lyric would inspire her to sing. She was a bird-watcher, a tennis-player, and a swimmer. She tried unsuccessfully to instill a love of all three of these things in your father. But perhaps these loves skip a generation or two or three, and you will be the one to carry on these passions. Sylvia was a phenomenal story-teller, and we hope to share some of her stories with you. Remind your father some day to tell you the story about the watermelon at summer camp.

Your middle name, Hallel, comes from your great-grandfather, Arthur Radwin. Although his proper American name was Arthur, his Hebrew name and his name in his early years was Haskel, a Yiddish version of the name for “Ezekiel.” Arthur was a lifelong high school educator who taught biology and later became a principal. He had a delightful wry sense of humor, and an unusual culinary aesthetic. Arthur ate leftover cold oatmeal with grated parmesan cheese on more than one occasion. Arthur shared Sylvia’s love of tennis and bird-watching, and taught your father and Uncle David to play soccer.

Your name also comes from the season in which you were born. You made your entrance into this world just 10 days ago on Erev Rosh Chodesh Sivan, the eve of the new Hebrew month of Sivan.

Sivan is the third month of the Hebrew calendar year, which, according to the Torah, begins in the spring with the month of Nissan. Sivan, you have both the privilege and the challenge of being born as the third child in our family. You enter a family that not only welcomes you, but that already has a sense of itself — rhythms, habits, stories, and personalities. Some very big personalities. You have a brother and sister who have already demonstrated how deeply they love you and welcome you, and who also have years of practice of sibling interaction. You will both insert (and assert) yourself and learn from those who have come before you. We welcome you into our family, and eagerly await how you will change it.

We also want to reflect a little bit on a second meaning of your middle name, Hallel. Hallel, is not only like your great-grandfather Haskel, but also means “praise.” And, at the beginning of any new Hebrew month is a holiday called Rosh Chodesh, literally the “head of the month” when we include additional prayers. One of the extra prayers for Rosh Chodesh is Hallel, in which we sing Psalms 113-118 as praises to God, often with joyous melodies. Hallel is not only an expression of gratitude for all that is good in the world, but an opportunity to recognize the magnitude of our Creator.

When we think of what it means to “praise,” it seems easy to confuse that with thanksgiving or gratitude. Those are important too, and we take for granted that, growing up in our family, you will develop a deep appreciation and disposition of gratitude for all that will be yours in the world. But to praise is actually a step deeper, because it isn’t personal. It is a choice to see what is good in a world that doesn’t always seem praiseworthy. We live in a world which we wish were kinder, more peaceful, and more just. And yet, “Anachnu nevarech Yah me’atah ve’ad olam”– we shall praise God now and forever. Halleluyah!”

To us, this means to never give up on seeing all that is good, mighty, and powerful. To never lose sight of the miracle of creation– the incredible miracle of the sun rising every morning, setting every evening, the stars and planets suspended forever, the earth spinning, the trees and plants growing, and we humans partnered with God to perfect the world. To praise God is to choose to see the beauty… not just to thank God for what is ours to enjoy, but to recognize all that isn’t.

We ask you to take this as a charge for who you may become: your task in this life will be to find your own calling, your own uniqueness, the way that you can add your voice to the chorus of voices in this humongous world, the harmony that you can bring that nobody else can bring. There are praises of God that you can sing that nobody else will be able to sing, particular gifts that are yours alone, and we as your parents ask you to sing them well.

Sivan Hallel, may you lead a life of Torah and ma’asim tovim, and may you someday be blessed to stand under the chuppah.

Welcome to the world, Brucha ha-ba-ah, our little Sivan Hallel.

Love,

Ema and Abba

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

School soup

Chop (dice) and sauté in olive oil:

  • 1 bunch of celery
  • 4 leeks
  • 18 carrots

After the vegetables are soft, add

  • 8 sweet potatoes, chopped up
  • 2 cups red lentils
  • 16 cubes “Organic Gourmet” vegetable bouillon cubes(with salt)
  • 32 cups of water

Cook for about an hour until all vegetables are soft

Then add, chopped up,

  • 2-3 bunches of Broccoli, cut as you prefer
  • 4-6 carrots, if you want more – cut as you prefer
  • 1 Cabbage, cut up or torn up by the children
  • 1 bunch of Kale leaves without the stems, cut or torn by the children
  • 2 cups of Quinoa

Cook for ½ hour or so.