All-day untimed events in RFC 2445 iCalendar

Timely‘s WordPress Calendar plugin doesn’t interoperate well with RFC 2445 iCalendar feeds that contain all-day untimed events specified by both DTSTART and a DURATION:P1D. Instead of interpreting them as a one-day all-day event, it seems to interpret them as a two-day event.

I examined a half-dozen calendar apps to see how they generate these kinds of events and here’s what I found:

Apple Calendar.app (Mac OS X 10.9.2)

BEGIN:VEVENT
DTSTART;VALUE=DATE:20140312
DTEND;VALUE=DATE:20140313
SUMMARY:New Event
END:VEVENT

Google Calendar

BEGIN:VEVENT
DTSTART;VALUE=DATE:20140312
DTEND;VALUE=DATE:20140313
SUMMARY:Untitled event
END:VEVENT

Microsoft Outlook Mac 2011 (version 14.3.9)

BEGIN:VEVENT
DTSTART;TZID="Coordinated Universal Time":20140312T000000
DTEND;TZID="Coordinated Universal Time":20140313T000000
SUMMARY:New Appointment
END:VEVENT

Windows Live Calendar (Outlook.com)

BEGIN:VEVENT
DTSTART;VALUE=DATE:20140312
DTEND;VALUE=DATE:20140313
SUMMARY:Example
END:VEVENT

Yahoo! Calendar

BEGIN:VEVENT
SUMMARY:Example
DTSTART;VALUE=DATE:20140312
DTEND;VALUE=DATE:20140312
END:VEVENT

Hebcal.com

BEGIN:VEVENT
SUMMARY:Purim
DTSTART;VALUE=DATE:20140316
DURATION:P1D
END:VEVENT

AddThisEvent.com

BEGIN:VEVENT
DTSTART:20140312
DTEND:20140313
SUMMARY:Example
END:VEVENT

Since the overwhelming majority seem to use both DTSTART + DTEND, I may change Hebcal’s feeds to follow suit. I’ll need to do some interop testing with older versions of Microsoft Outlook for Windows first.

Farewell, htdig

htdig has been retired from radwin.org.

Screen Shot 2013-08-11 at 9.07.05 PM

Many years ago I set up a site search on radwin.org using a tool called ht://Dig. It was a C/C++ app that would spider/crawl a website and also serve out search results in an HTML-friendly fashion through a CGI.

The rest of the world moved onto Lucene/Solr, but I never bothered to make the move – in large part because htdig was good enough, and in part because DreamHost doesn’t  support Tomcat/J2EE in their shared hosting environment (I don’t blame them).

The last time I successfully compiled htdig was on October 31, 2005. DreamHost has upgraded hardware several times, and the old 32-bit binaries have continued to run. Recently they did another server migration/upgrade, and finally everything broke. I tried recompiling both the stable 3.1.6 (released February 2002) and the most recent release (3.2.0b6, released June 2004) but neither compiles cleanly with gcc 4.4.

And it’s not worth fixing.

 

Paternity leave coding update

Three and a half weeks into my sabbatical, and I’ve actually found some time to code on Hebcal!

Some Hebcal accomplishments in July:

  1. Moved Hebcal for Unix code from SourceForge to GitHub.
  2. Added two new user-requested features and released hebcal-3.13
  3. Added Printable PDF support for Hebcal.com
  4. Forked a copy of Hebcal for Unix especially for hebcal.com
    • Replaced sunset calculation engine with PHP’s datelib
    • Replaced timezone/daylight saving time with PHP’s datelib
    • Updated world city database from geonames.org to include 300+ new cities
  5. Updated the USA ZIP code database

Ariella has been incredibly supportive. I’ve done about half of the work at home, and half of it at Hacker Dojo.

On paternity leave, hope to write some code

I’m taking 3 months off to hang out with the family! Baby Emma is doing great, and the big kids are, well, big. It’s been about 7 years since I’ve had a sabbatical from work, so this seems like a great time to do it.

One of my first projects was to move hebcal for Unix from SourceForge to GitHub.

Hebcal for Unix has been around for 20+ years. Danny Sadinoff wrote 98% of the code, and Michael has been fixing bugs and adding features here and there.

SourceForge had been providing hosting for the GPL code for 14+ years. We even converted from CVS to Mercurial about 3 years ago. However, with the recent changes to SourceForge code hosting, Hebcal got stuck in some sort of limbo-land. Lots of 500 Internal Server Errors.

So… we’ve decided to join the cool kids and make the transition from hg to git. And while making that transition we’ve also moved to GitHub, which is where all of the open source developers are hanging out these days.

Over the coming month we’ll be cleaning up the code and the hebcal.com website, removing references to the old sourceforge.net URL.

And then we’ll get back to fixing bugs and adding new features.

A letter to Emma Margalit on the day of her Simchat Bat

Dearest New Little One,

We are so very happy to greet you, meet you, and welcome you into our immediate family, our big family of friends and neighbors and loved ones, our community, and our big world.

We have chosen for you the name Emma Margalit, named after two phenomenal women in your family tree. Your great-grandmother Emma passed away 7 months ago, on the night of Kol Nidrei. She never knew you, or even about you, but she would have loved you. Your great-uncle Lewis will tell you a bit more about her in just a minute, and we have much more to tell you about her through your whole life but there are just a few things we would like to tell you right now.

Emma was a devoted mother who raised three sons, and took responsibility for teaching her children and grandchildren proper manners, grammar, nutrition, and posture. She was an amazing cook who could turn vegetable scraps into coveted soup, and was a gracious hostess as she served it. She was a great believer in hand-written thank-you notes and letters, and her slashy handwritten correspondance earned her great admiration in certain small corners.

She made sure that we all took care with our “who”s and our “whom”s and thought that an elevated vocabulary was a sign of a well-educated person. On daily walks, she took care to pick up coins from the ground that others had dropped, over a period of years eventually assembling a kitty of over a hundred dollars. That single habit says volumes about her dedication, sense of propriety, humility, and patience. We hope that you can emulate some of those great qualities.

She lived for 91 years and is greatly missed. Her, and your Hebrew name is Nechama, which means comfort, and it is the words used to describe the way we comfort mourners after a death. We hope that you will be some comfort after her death for those who loved her. More importantly, by naming you for Great-Grandma Emma, we hope you carry on some of her graciousness, her intelligence, her beauty, and her modesty.

Your middle name, Margalit, means “pearl” in Hebrew. We have chosen the name for several reasons, but one of them is that the name Margalit reminds us of Grandma Emma’s dear cousin Martha Benenson, who was like a big sister to Emma. As children, they grew up together after Emma’s parents took in Martha and her brothers. As an adult, Martha lived on her own in Washington, D.C. She lived quietly and modestly, never moving out to California despite Emma’s requests. Your mother remembers her annual visits to Studio City, sitting in the winter sun at the breakfast table and doing crosswords puzzles.

By naming you for both Emma and Martha, we not only remember two extraordinary women, but we also pay tribute to the loyalty and devotion of friendship and family. Their relationship was special in both of their lives, and we wish for you the same quality of intimacy and loyalty throughout your life.

The name Margalit, while literally meaning a pearl, can also be used to talk about the Torah, and Torah learning more generally. Great words of wisdom and learning can be called a Margalit, and we wish you a life filled with Torah learning. Pearls are a jewel of great beauty, and your date of birth is on the day of the Omer corresponding to Yesod shebe’Tiferet, the foundation of beauty. It is a miracle in the world that the foundation of beauty of a pearl is the oyster, not typically thought of as a paragon of beauty. We wish for you a life that recognizes that beauty can be found in all places, from all people, and from all walks of life.

On the Gregorian calendar, were born on April 15, which happens to be World Art Day in memory of Leonardo da Vinci’s birthday. Most Americans remember April 15 as Tax Day. Since your father now works at Intuit, he has joked for several months about naming you TurboTax Radwin if you happened to be born on the 15th. Luckily, you have a mother, and you’re welcome. You also share a birthday with the State of Israel; you were born on the 5th day of the Hebrew month of Iyyar — Yom Ha’Atmaut, Israel Independence Day.

But also, sadly, the day you were born will likely be remembered for acts of violence that happened during the Boston Marathon. You are not born into the same world as your great-grandmother Emma. Things feel more fragile, scary, and violent. It’s not to say that it’s a worse world, but the pressures of trying to make it better more urgently fall upon all of us, and upon you. We wish you a better world, and we will work with you as your parents to help you make it better in your own way.

Which brings us to our first charge. There is a line in the prayer for peace that we say on Shabbat: “We have not come into being to hate or to destroy. We have come into being to praise, to labor, and to love.” Little Emma, regardless of the hatred or violence in world at large, you must find a way to fill your life with praise, labor, and love. May you find opportunities to praise God in everyday things like washing your hands or eating foods, and recount the oneness of God in the recitation of the Sh’ma every night before you go to bed. Find fulfillment in your labor – work using your hands, your heart, and your head. And be sure to love. Love your family, your friends. Love deeply and passionately, even if it means your heart may be broken. It will heal. You have not come into being to hate or to destroy. You have come into being to praise, to labor, and to love.

You come into our family as the fourth of four very extraordinary children, each unique in their own many ways, each strong and determined already. Unlike the way that your older siblings may have molded the family around them, you more than they, inherit a family that is already somewhat set in its ways, a family that has already long ago given up on having children sit down while they eat dinner, but that has not yet given up on catching a Leprechaun. You will of course have the chance to make your own mark on our family and our rhythms. There are more conversations to enter and there are more conversationalists with whom to share the microphone. We welcome you to the big party.

Our final charge for you comes from the the naming ceremony. We recite “K’Shem she-nichnasah la-brit, Ken tikanes le-Torah, u-le-chuppah, u-le-ma’asim tovim”. This is usually translated as the congregation expressing its wishes that the newborn child will grow up to study Torah, be married under the chuppah (wedding canopy), and perform good deeds. Our good friend and teacher Dr. Rabbi Aryeh Cohen translates these a little differently: a life filled with Torah study, meaningful relationships, and and acts of justice and kindness. Regardless of whether you choose to study the sciences or humanities or Torah, we tell you today that learning is something you do not just when you’re in school, but something you do during your whole lifetime. And when it comes to “good deeds” – doing the mitzvot is just the beginning. To truly be a mensch, you’ll need to pursue justice and kindness, especially for those less fortunate than you.

We have so much more we want to tell you and teach you. But you’re not yet even one week old, so perhaps this is enough for now.

Our hearts are filled with joy and gratitude. Brucha habah’ah, welcome to the world, little Emma Margalit.
Love, Ema and Abba

Chametz Contract/Bill of Sale for Pesach

BILL OF SALE

We, Ariella and Michael Radwin (“SELLER”), in consideration of $1,500 (one thousand five hundred US Dollars), do hereby sell, transfer and convey to John Doe (“BUYER”), our not-Kosher-for-Passover food (“CHAMETZ”) and Sascha the cat (“CAT”).

Chametz are leavened foods that are forbidden on the Jewish holiday of Passover. According to Jewish law, Jews may not own, eat or benefit from chametz during Passover.

For the purposes of this contract, CHAMETZ consists of the following:

(1) All boxes of canned and dried foods on shelves in the garage, and in the pantry to the right of the refrigerator in the kitchen

(2) Any refrigerated/frozen food items placed in the “Chametz” brown paper bag in the refrigerator in the garage

(3) Several bottles of wine, beer and liquor in the liquor cabinet above the fridge

(4) The CAT’s food, which is kept in the bathroom adjacent to the guest bedroom

(5) Any other Chametz possessed by SELLER, knowingly or unknowingly as defined by the Torah and Rabbinic Law

CAT is a domestic short-hair, commonly known as Sascha. CAT is about 12 1/2 (twelve and one half) years old. Here is a digital photo of said CAT:

http://www.radwin.org/michael/blog/archives/sascha-the-cat.jpg

I, the undersigned BUYER, acknowledge receipt of this Bill of Sale. BUYER does hereby provide SELLER a down payment of $1 (one US Dollar) in the form of PayPal, cash, check, or money order. If BUYER does not provide the remaining $1,499 by Saturday April 2, 2013 at 8:20pm, this Bill of Sale is cancelled and SELLER will refund whatever payment(s) BUYER has made.

BUYER will also lease all places wherein the CHAMETZ owned by SELLER may be found, particularly at the address/es listed below, and elsewhere.

Per BUYER’s instructions, SELLER (or SELLER’s agent) will agree to feed said CAT one half-cup of cat food daily. SELLER also change CAT’s litter box and play with her.

All said above is well and good and is binding and is in conformity with all Torah, Rabbinic and Civil laws.

Dated this 24th day of March, 2013.

 

SELLER’s name: Ariella & Michael Radwin

SELLER’s address: …, Palo Alto, CA

SELLER’s signature:

 

BUYER’s name: John Doe

BUYER’s signature:

gzip encoding (mod_deflate) on DreamHost

It took me all of 10 minutes, and I just sped up Hebcal.com by enabling Apache mod_deflate on DreamHost.

I used the Google PageSpeed Insights tool to measure the performance of Hebcal, and it complained that we weren’t gzip-compressing HTML, CSS, or JavaScript.

Turns out this is not enabled on DreamHost sites by default. What a surprise!

So here’s what I ended up adding to the .htaccess file:

<IfModule mod_deflate.c>
 AddOutputFilterByType DEFLATE text/html text/css text/javascript
</IfModule>

That’s it!

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.