Why I’ve Joined Xamarin

Today is my first day at my new employer, Xamarin, sponsors of the Mono project and developers of MonoTouch and Mono for Android. Mobile cross-platform C#: long-term readers will probably see why this is the perfect job for me. (Well… short of a gig doing AI on a robot submarine with an indoor Ultimate Frisbee field, but Larry Ellison tells me that will have to wait until he builds enough infrastructure in Lanai to support both his lair and a submarine pen.)

Tears in the Rain

Mobile is huge: Duh. But I’ve seen things: CDC Cybers eating punch cards on Route 128 in 1982; B-trees rendering South of Market in 1995; Attack ships on fire off the shoulder of Orion.

Our industry has the wonderful characteristic of restructuring itself regularly. This is married with the not-as-wonderful characteristic of pitiless obsolescence of skills and strategies. The publishing company I worked for in the early 90s was more than 100 years old, had 90% of the market in software development ads, and was utterly incapable of adapting to the Web: they’re gone (but not Game Developer! ). I’ve known developers whose livelihoods were tied to Visual Basic, or dBase, or COBOL and who sat out a restructuring because their companies or clients “could never afford to rewrite” their codebases to accommodate the new market. Let me tell you one of the few things about the software business I’ve learned: the market wants software that runs on their new hardware and has the native user experience. And if your company doesn’t provide that, either your competitor or some startup will.

Some Tools I’ve Known

My first multi-month programming job tracked article submissions through the peer-review process of a journal of Marine Biology. I programmed it in a database language called Paradox, which was from a company called Ansa. At the time, most people doing that kind of development were using Ashton-Tate’s dBase, but Paradox was a better tool: it had a GUI drawn with ANSI characters that allowed you to look at your data and application in different ways and it had something called Query By Example that was just awesome. The tool was key to the win. (Ansa was eventually bought by Borland, which also ended up buying Ashton-Tate, but that’s a whole other story.)

A little later, when I was 25, I was hired as Product Review Editor for Computer Language and AI Expert magazines. This solidified my belief that tools matter. I knew that “object-oriented programming” was The Next Big Thing. So I broke the shrink-wrap on a copy of Digitalk’s Smalltalk/V 286 (as in 80286, because I had the fastest damn computer in Miller Freeman). It took me a little while (and exposure to C++) to “get” OOP, but holy crap was Smalltalk a tool that clearly was vastly more powerful than any IDE that I’d seen before (it took until the 2000s until mainstream IDEs had comparable navigation and even now, I miss the scratchpad-like capabilities).

Again and again I’ve seen it played out: moving from translator-based C++ to native-compilation gave Zortech and Borland developers an advantage, IntelliJ’s IDEA IDE gave Java developers an advantage, Raima had high-performance NoSQL before the term was coined, etc. Tools matter.

A few years ago, when I programmed my first commercial iPhone App, I chose to use MonoTouch. Why? First, to be honest, simple familiarity: I know C#. But the reason why I know C# as well as I do is due to its merits: I think it’s the best-designed of the mainstream languages. I don’t think it’s ever been correct to call C# a “clone” of Java but it’s certainly not correct now. While the evolution of Java languished, C# not only evolved, it advanced in a directed and strategic manner: lambdas, LINQ, type inference, and the new async semantics are tools that work together powerfully: they aren’t random features but instead are pragmatic implementations of the sometimes-obscure functional programming world.

It turned out that C# and MonoTouch were great tools for programming iOS. Although MonoTouch binds Objective-C APIs so they “look right” to C# developers (object.Method(arg, arg) not object method: arg:) you still use the native APIs. So existing Obj-C and iOS documentation and examples make perfect sense: you can still rely on excellent resources like Erica Sadun’s excellent “iPhone Developer’s Cookbook” with hardly a pause.

And the resulting application runs at native speed and looks like a native application because it is a native application.

It Takes A Village

I didn’t make a fortune on my Kailua Kona tour-guide application. I did have very predictable sales: 1 per day at $2. The good thing about my sales is that they were so pitiful that it was clear that there was no business model: a tour-guide framework targeting cruise ship shoregoers is no Angry Birds.

But other people have had better fortune and a thing you quickly learn about the MonoTouch community is how friendly they are: the #monotouch room at irc.gnome.org is incredibly helpful and there are always very experienced developers hanging out there.

Even more importantly, I think that the Mono community has a special feel and it’s this, more than anything else, that makes me so incredibly excited about joining. Although Mono is an implementation of a Microsoft-controlled technology stack, the Mono community is different than the Microsoft community. Microsoft has great people and some of the best minds in software, but I think that the Mono community benefits from being smaller: it’s nimbler and more personal. I think it’s more excited and more exciting. I think its technology is great and I think its strategy is great. A shorthand that some of you will get is that I imagine that this is what it must have felt to be at Borland in the mid-80s.

More Words tk

I will be working on the documentation team, particularly API docs for iOS. In other words, drinking the ocean. We want to make the MonoTouch programming experience as clear and straightforward as possible and that means not only thorough and accurate documentation, but clear and, dare I say it?, enjoyable. My inspiration is, again, the Borland documentation of the 1980s, when there was the sense that everyone — the company, the users, and the “gurus” — was exploring the brave new world together.

Hopefully my job will spin off more blogposts on this site — probably things that aren’t directly related or that are too opinionated for official docs. I’ve also talked to my Editors at SD Times and Dr. Dobb’s and it looks like I’ll continue my “Codewatch” column and be able to continue as a Jolt Award judge in certain categories.

I’ll continue to post inane babble on Twitter at @lobrien and possibly-helpful answers on Stack Overflow. Otherwise, you can always contact me at lobrien@knowing.net or… larry.obrien@xamarin.com

Aloha Gemini

Today, after 2 years, I am moving on from Gemini Observatory, where I worked as a Senior Software Engineer. Unlike most departures, this one comes with very little drama; it’s more a case of wistful “well, that didn’t work out.” This is the second time in my life that I have worked for a few years in a scientific operation and the second time that I’ve walked away.

Scientific organizations, I’ve come to learn, tend to be very conservative in their organizations and processes, as their funding is, at best, fixed and, more commonly, forever under a cloud of looming budget cuts. Also, they have byzantine governance structures and audits and restrictions: at Gemini there was a foo-faraw because they bought a few automated coffee machines with government funds and we had to switch to a $5-per-month coffee club to pay for the same. Yeah, that’s where the waste in government is: astronomers drinking coffee. (I’m sure the cost of the bureaucrats reviewing, chastising, and correcting this egregious waste was many multiples of the yearly coffee costs of the entire observatory.)

It’s not that the structure is egregiously wrong or stupid: it’s perfectly logical. But after spending most of my career in the world of startups and entrepreneurs, it’s an irritant to see an organization that spends effort perpetuating the status quo. And it’s a shame when an organization full of brilliant people spends their intellectual capital on incremental improvements and not on higher-risk, high-payoff ventures. The Big Island of Hawaii is home to 13 observatories and the amount of code shared between them is virtually zero: there’s no Open Source initiative between the observatories. On “astronomy row” in Hilo, I imagine that I had three or four colleagues working on the exact same problems that I was solving. Oh well.

I loved the people here: my team-mates were smart and engaged and it seemed like the right group to pull off a transformation, but it didn’t pan out. Meanwhile, I learned that astronomers, as a rule, like to stay up late: an after-hours bar in Hilo would probably do great business. Also, more people on the island play board games than I dreamt possible and if there’s one thing I’ll miss, it’ll be Tuesday night Battlestar Galactica / Civilization / Pandemic, etc.

So now I’m returning to the West Side of the island, Kona, and sunnier and dryer days. My relationship to astronomy will return to its old mode: hauling my 4″ refractor up to 9000′ on Mauna Kea on dark Saturday nights and staring at the rings of Saturn. But I’ll be looking wistfully at the Adaptive Optics lasers piercing the sky at the summit and wondering what they’re seeing next.

I’m insanely excited about my next position (details to come) but for the next 2 weeks I’ll be traveling to the mainland to visit relatives and relax.

 

Astak Security DVR on Mac How-To

I have a security DVR purchased from Astak. It’s software is Windows-only, using some proprietary plug-in, and although the DVR can FTP the .AVI files up to a server, they don’t display on the Mac.

So, long-story short, this line will convert the format into an Apple-friendly .MP4:

/opt/local/bin/ffmpeg -i "$1" -acodec libfaac -vcodec mpeg4 -flags +aic+mv4 "$1".mp4

I set the DVR to FTP to my always-on Mac server. On that server, I set up Hazel to watch that folder and run the previous conversion shell script on the incoming .AVIs. I toss the .AVIs in the trash and move the .MP4 files into Dropbox, where they will synch up with me wherever I am (and, helpfully, provide me local notifications when the movies are created).

Because The Programming Language News Cycle Is 24-Hours

Lede with MSFT’s unveiling of TypeScript today. Reiterate that it targets the Web and is a superset of JavaScript. Most importantly, mention Hejlsberg early, as he and Gosling are the only programming language designers that people have actually heard of. Refer to Dart, but don’t bother to mention Bak or Bracha (no one’s heard of them).

Well, duh, write a sentence about explicit typing. Throw in a brief digression on misapprehensions about strong vs. loose typing to establish your PLT bona fides. Don’t go too deep, though, lest you run afoul of LtU. What the hell, mention Dart again. And, what the hell, mention Bak and V8.

But more importantly, tooling. Explain IntelliSense. To be sure, dynamic languages have promised the same. Regretfully point out lack of shipped IDEs.

Segue into Windows 8. Profoundly state that this is all about that. Get a paragraph out of the past year and the whole JavaScript vs .NET languages vs C++ thing.

Which segues perfectly back to Anders. Praise for several sentences, boldly say “shoe-in for Turing Award.” Reiterate C#’s evolution and focus on mainstream programming, but really this is all just a setup to get to…

“Embrace and extend.” History lesson. Java. Consent decrees. Everyone will skip this part.

Bring things up with a round turn, stating that “what’s old is new again.” Insightfully say that MSFT no longer has the influence that it used to. But hedge your bets by praising the intelligence and experience of their language division, just in case.

End with the admonition that time will tell. Leave with a call to action: tell the readers to try it themselves.

Whispersync Works

Every week I drive across the Big Island, a distance of 86 miles each way. Audiobooks, which I’d never bothered with much before, turn out to be a very enjoyable way of dealing with the ride. There are two major disadvantages: “listening while driving” is not suited for deep attention and “listening while sitting on the couch staring blankly” is not appealing in the evening.

Amazon/Audible’s new “Whispersync” feature goes a long way towards addressing these. It’s an “it just works” feature that means that after listening to the audiobook (perhaps only with the Audible app) in your car, when you open the book with your Kindle (I’ve tested it with my Kindle hardware, with Kindle for Mac, and with Kindle for iPad) you get a message saying, e.g., “The furthest read page was 92 from iPhone 4S at 9:51. Go to that location?” And vice versa: when you open the Audible app post-Kindle you have the opportunity to move forward.

It seems to take no more than a few minutes for the updates to move through the cloud and you don’t have to buy the book and the audiobook at the same time. (I mention that because I happen to have one book that I started with the audiobook, decided that I was too interested in getting through it to take it in 1.5 hour stretches in the car, and started reading it on the Kindle, and all of a sudden, it’s Whispersynching.)

The downside is cost: You have to buy both the Kindle book and the Audible audiobook. Audible books are ridiculously expensive if you buy them one-off: $20+. Subscription prices can drive that down to $10 per book, but only if you commit to two books per month, which is a lot of listening. But not, for me, a lot of reading.

At the moment, Amazon is offering Whispersync-enabled audiobooks for $3.95 or less, which is a great deal and just about the perfect amount to entice me into “Oh sure, maybe I’ll listen to that in the car.” on all my fiction purchases. On the other hand, it destroys the value proposition of an Audible subscription, and I’m under the impression Audible is successful enough that Amazon is unlikely to want to gut it (yet). So my guess is that the low price of audiobooks is to introduce the feature. So snap them up while you can.

Thoughts on Atlantic article on Google Mapping

Good article: How Google Builds Its Maps—and What It Means for the Future of Everything – Alexis C. Madrigal – The Atlantic.

Perhaps the most impressive thing is not that Google allocates human effort to the mapping project but that they combine very advanced algorithmics with that human effort and, perhaps, they know how to slide that along as technology advances.

I think a decent part of Microsoft’s “Lost Decade” is that even though they have amazing talents at MSR, they were staffed for the 90s and the Web explosion and, with all that PC-focused staff, there were blind to or unable to shift towards the rapid emergence of a post-PC landscape.

If you look at things like handwriting and speech recognition, Microsoft *had* huge advantages in the early 00s (especially handwriting recognition: Dragon/Nuance has always seemed to lead in speech, but MS’ handwriting recognition was (is?) miles ahead). Had MS invested in combining their technological lead with human-intensive fine-tuning in the same way that Google invests in map-making, Microsoft could be reaping the benefits today, instead of being roughly at parity.

Please take my 10-question survey on developer productivity

Please take & RT my 10-question survey about opinions of developer productivity http://www.surveymonkey.com/s/39ZSHLD

Force Multipliers & Boilerplate Modules

Ravi Mohan (@ravi_mohan) 8/26/12 10:46 PM Advanced languages (among other things ) are force multipliers. But if you are writing the n-th CRUD app you are multiplying by zero

This very much fits into some of my opinions that have been firming up over the past couple months. A year of quite-deep immersion into real-world functional programming (Gemini Observatory made a strategic commitment to Scala last Summer for “high-level” software) has, as always, left me somewhat dissatisfied. As Ravi says, on the one hand I’m quite happy to assert that when facing an interesting algorithmic problem there is a “force multiplier” effect of having a good type system, easy-to-use higher-ordered functions, libraries, etc.

But, even at an observatory, “interesting algorithmic problem”s are not the core of the software developer’s workweek. Instead, what we spend most of our time developing are aspects that relate to the database, UI, infrastructure, devops, and administration. Here, the “force multiplier” of a powerful language is, as Ravi says, multiplied by zero: this semi-boilerplate work is so well-understood that “tools that help you reason” give you no advantage and the burden they impose (importantly: edit-compile-confirm times of minutes) is significant.

Meanwhile, it’s painful to pay software engineering rates (especially “software engineers who can solve interesting algorithmic problems” rates) for semi-boilerplate work. I’ve been wondering if the answer is a shift towards API/Library production (using statically-typed “advanced” languages) as the primary software engineering deliverable and UX (using dynamically-typed “high productivity” languages) as a task for a separate … but it isn’t. The idea of stratifying development, fiefdoms, etc., surely that’s a bad idea…

Italy 20th Anniversary Trip Notes and <100 Photos

New York

IMG_0181

Going in to New York is slow. Even at 5PM all the traffic is in-bound. Seems thermodynamically impossible…Flipping the bird at Yankees advertisements…Dark And Stormies at a hipster bar where a dude in a bowler and arm gaiters played ragtime on an upright…Horseradish-infused vodka:

IMG_0296

This was not necessarily my favorite drink in the whole world. It was made more harsh and bitter by the scorn heaped upon me by the sure-out-of-my-league-even-when-I-was-young-but-c’mon-do-you-have-to-still-be-mean? bartendress.

Wandering Midtown East…flipping birds at Trump advertisements… laughably pretentious Chinese bistro: 11 on a Tuesday, techno blaring, everyone ostentatiously checking their text messages in the bar, a serving area so dark that I could have totally broken out my Foster Grant lighted reading glasses…Seriously, I have had better dumplings… Art Deco 30 Rock … a rather strange amount of excitement at seeing the Today Show set through the windows…


And as we shopped, the treadle wheel spun, the only sound in the hushed shrine of textile… Stainless steel thread …

IMG_0202

The High Line

IMG_0212

Mediocre pizza…Colorful cab driver “Gotta’ let the road rage go.” …

Brooklyn Bridge

IMG_0233

TIL the Brooklyn Bridge is held together with duct tape

IMG_0227

IMG_0235

Glimpses of new World Trade …

IMG_0234


O’Brien’s & Arnolds

DSC_8252 - Version 2

Croquet was once an Olympic sport

DSC_8261

DSC_8265

DSC_8280

DSC_8267

Teens are excellent at looking dubious when the camera is upon them…

DSC_8268

DSC_8257

DSC_8306

DSC_8323

Oh, Daisy!

DSC_8328


No wires

DSC_8298

Bye Jake!

DSC_8297

Rome

I expected it to be hilly, but it’s really quite flat. Our first glimpse of Roman building the colossal brick walls of Hadrian’s Baths.

Hotel in Rome just down the via from the Colosseum

IMG_0329

IMG_0335

Vatican

Absolutely brutal on the feet. Feet tingling. Massive walls.

The line to get in ran around the country.

IMG_0346

Crowds, especially in the halls leading towards the Sistine Chapel (including a fantastic map room). Gilded ceilings.

DSC_8427

Sistine Chapel: packed. Guards shouting out “Quiet!” The ceiling was fine, but The Last Judgment was awesome. A few patches on the unrestored/cleaned ceiling showed how dim and subdued it all was until recently.

St. Peter’s is the most impressive building I’ve ever been in. 30′ sculptures that seem absolutely fine in proportion to the pillars that are inlaid with every form of marble.

IMG_0440

IMG_0408

St. Peter’s Piazza not as impressive as I thought, perhaps because it was so large and the crowds so big.

DSC_8475


4/26

Colosseum: much bigger than expected. Gladiators shilling for tourists and working their digital cameras .

DSC_8515

People bring their nice cameras to the C. Worthless guided tour at C.

DSC_8514

Hard to get past the “Oh yeah, it looks just like the pizza box” aspect. (Not as bad as Leaning Tower…)


Forum more compact than expected, barely a neighborhood.

IMG_0521

IMG_0531

The Vestal Virgins had a lovely temple.

Saw a falcon at forum

Scale of building is definitely comparable to industrial age

IMG_0511


The Sabines were just on the next set of hills down the road. So the whole “Rape of the Sabines” wasn’t exactly the Trojan war, it was more like a really nasty Hatfields and McCoy thing.


Street vendors sweeping up their goods 20 yards in front of police. They rush away, cutting down staircases and into alleys, and then, three minutes later, creep back out. First one bold one and then all the others quickly. Kind of like fiddler crabs on the beach.


Tina liked her crispy piglet. I liked my peepee cachi pehpey.

IMG_0575


Rougher walking than Inca Trail.

IMG_0723

DSC_8544


Sculptures are gorgeous — 500BC wounded amazon

IMG_0567

IMG_0546


Revealing exhibition on centrality of Vatican: document after document showing role in events: trial of Templars , excomm of Martin Luther , divvying up world for Isabella, petition to allow Henry divorce. Seals attached to letters. Birchbark letter from Algonquin. Safe passage from Khan.


Throngs of tourists at major piazzas and fountains. But nightlife at our local piazza. Thursday 11pm, 100 people cocktail party.

DSC_8532

IMG_0722


Everyplace feels safe. [But eventually we were targeted by pickpockets in Florence…]


The disparity of time: is that door 20, 200, 1000 years old?


So many architectural references — all copied elsewhere .


4/27

Sirens sound cool. Wish US sirens sounded like this.


Borghese villa — Bernini great, house itself, Titian. Parrots in the park


Swifts through oculus and in square.

IMG_0725


Pagliacci at Pantheon with Mars overhead. And a mime.

IMG_0715

St. Peter’s more “awesome” but Pantheon my favorite building. Geometrical. Apparently the dome at St. Peter’s is bigger, but proximity helps at Pantheon.


Few chain stores


4/28

You think things like “ah, a lugubrious totem of death.”

IMG_1568


Rome is a midden of western civilization, the heap visible in the foundations of more modern buildings. Everywhere you see a hill, you see arches dating to some era of brick. Certainty beyond that is not available to the lay. Every architectural cliche seems to have been born here, from the facade flanked by columns to the carved coat of arms above the entrance. So when you see a bronze door flanked by columns, it could be 20 years old or 200 or even, at least in the forum, 2000.


Perhaps because the Colosseum is so well preserved, it was the least interesting. Every sports stadium shares it’s design and even many of its details. Yes, this is what the outer galleries are like, this is where they sold t-shirts, this was where the crowd queued on the way in, catching their first glimpse of the action below. The main difference seems to be that their stairs were steeper, their benches wider, and their seeming lack of regard for handrails.


The great buildings — the Colosseum, the Pantheon, the mall in the forum — are as colossal as industrial-age


Rome brutal on the eyes and soft tissues — had to pull my contacts.

IMG_0573


The primacy of the Church is everywhere.

IMG_0672

IMG_0747

For whatever reason, the Baroque stuff is not as off-putting as it is in other places. Doesn’t seem vulgar. Maybe that’s more the Rococo-era?

IMG_0750

IMG_0810

IMG_0811

IMG_0814


Assisi

DSC_8595

At least in Rome the crowds are fitting to the theme. At Assisi, the crowds are more oppressive. But the souvenir quality is appreciably higher.

IMG_0908


You can buy morningstars here. Real, honest-to-goodness helm-piercing spiked-steel-ball flails. Not sure if TSA approved.


Assisi on a Sunday night is weirdly raucous. Kids screaming and shouting and playing soccer. Camping trip? On a Sunday?

IMG_0923


5/1

There is a turtle (tortoise I suppose) wandering between tracks 6 & 7. The tracks are taller than he is. Has he lived his whole life in this narrow track?


Surprising (amazing ) lack of suburban sprawl. Heart of Europe yet big stretches of, say, 50 acre farms, woods, and hills with small castles on them. The castles are so iconic that when I first saw them, I thought they were recreations.


Siena: not terribly well preserved, but the street plan is charmingly complex, circular and divided into the commune’s neighborhoods (goose, owl, etc). The piazza where they run the palio is quite bowl-shaped, which perhaps helps the horses. The photos from the race show horses banked like fighter planes.

DSC_8729

DSC_8745

The cathedral is white-and-black striped and that thrilled T, but I liked most the marble inlaid floor panels, which had a great effect, like a vast etching. The chapel had a great mosaic and there was a room of illuminated manuscripts that, later, I found out to be the basis of many calendars.

IMG_0940

IMG_0970

A fine meal of rabbit with truffle pasta. Eventually, I had all types of truffle; I decided that it’s a little too rich for me. It’s great and then you’re like “Oh my god, if I have another mouthful of this I’m going to hurl.” (I suppose most people don’t think that.)

IMG_0998

Florence

For all their greatness, English pubs have those damn regulators on their alcohol bottles. You go to Italy and go into an Irish pub and order a mixed drink and you get a drink of stunning strength. In other words, I recommend going into an Irish pub in Italy.


Throw a dead body in here and it will rot all the way to Pisa.

IMG_1021

Just dandy.

IMG_1035 - Version 4


Empirical perspective Giotto — early. Compare to mathematical basis of computation.


Tina loved walking up Brunelleschi’s dome. I did not. Big time vertigo; it’s like you think you’re suddenly going to pitch over.

IMG_1157

IMG_1123

IMG_1140

IMG_1159

IMG_1162

I think this was one of the highlights of the trip for T. I had to glance sideways at everything, my shoulders up around my ears. Oh well.

IMG_1181


Uffizi shakes like earthquake.


Tina should do a painting called “The adoration of the adoration of the Magi.” It would depict a tour group gathered in total sheeplike hypnosis in front of some piece of art. There would be a guide with a headset and all would be listening in their headphones. Detached figures would circulate listening to handset audio tours. In the corner would be a guard on a chair, texting.


Occasionally, stylish women ride by on rickety bicycles.


Florence — red tiled buildings, a low city, Brunelleachi’s great dome, the spear-like Palazzo Vechio tower, and construction cranes redoing the Uffizi arcade. Proportions seem wrong compared to other places — piazzas are not intimate, not as many surprising glances revealing details.

IMG_1153


Uffizi is tiring — perhaps not Vatican-tiring, but close. Several rooms of Gothic and then it seems like every decade of the renaissance. For all that, perhaps due to the crowds, not many jaw-dropping delights. Medusa’s head, on a shield, by tk, perhaps, after the worst of the crowds cattle-cared their way back to the cruise ships. And then, you get to the “foreign painters rooms” — a seeming afterthought, and it’s just glorious painting after glorious painting from Northern Europe. Of course the R was the revolution, but they seem to just be piled room-after-oppressing-room.


The doors of Ghiberti included a pyramid in perspective. Now wee teach the basic concepts in middle school. In yet-another museum, we saw the contest panels of Ghiberti vs Brunelleschi — B lost but built the dome.


Brothers Cryptkeeper, Lazarus, and Paul Giammatti. The weak “amens” in response to Brother Giammatti’s chants, the sound of another brother upstairs, stationed there to provide the sound of choirs of Angels? They have been saying mass there for 800 years…


Boobs with a view …

IMG_1324


Poppies. Mustard.


Pollen blowing from the viewpoint above Florence

IMG_1266

Pisa underwhelming in all ways. You cannot see past the associative memories even though you can see that the architecture of the tower, cathedral, and baptistry is beautiful.

IMG_1331

IMG_1336

IMG_1515

Cinque Terre

IMG_1394

5/05

Whole train gasps when train exits tunnel


Clay colored water . Looks cold. Not Chile-cold. Drunk Americans at 330. Seagulls hawing at 7am. The ocean occasionally makes thundering noise like rearranging chairs on a slate floor.

DSC_8925


Cat-in-heat moans of the seagulls outside our window.

DSC_9000


IMG_1398

IMG_1399

DSC_9039

IMG_1512

DSC_9115

If I was rich and could spend half a year shut away writing a novel, this would be where I’d like to do it.

IMG_1421

IMG_1423


4 o’clock is Gelato-clock. After that it’s time for Americanos and appetizers. Dinner around 9.

DSC_9037

IMG_1470

IMG_1408


Obligatory romantic walk is romantic.

DSC_9076

DSC_8979

DSC_8985

DSC_9074


Dante’s hell updated for manufacturers of automatic cappuccino makers: Lights blink but don’t effectively warn when they will be scalded with steam. And once every 34 years, they will be given a mediocre small cappuccino.


The shipping channel to… Africa ? Sardinia? Ah, the rock bound Ligurian sea.


DSC_8956


DSC_9016

DSC_9038

DSC_9088

IMG_1478

IMG_1487

DSC_9157

IMG_1548


Germans listening to portable speakers as they hiked.

DSC_9283

DSC_9310

DSC_9325

DSC_9327

DSC_9328

DSC_9344

DSC_9348


They rake the beach and, after high tide, shovel the gravel off the wrack line. M is my least-favorite place so far — a Riviera beach town. It’s supposed to be high season, but many stores and hotels are still closed. Loud Americans getting drunk (staying). More French.

DSC_9362

DSC_9261

IMG_1559

DSC_9271


IMG_1588


DSC_9370


This is Tina’s “over it” look DSC_9391


Service cart in train preceded by its jingling bell


Carrara mountains look like they are covered in snow but it’s just the marble.


It’s spring, but the sun sets at 7:30 or so and there is a significantly long twilight. Makes the “eat at 9″ routine easier.

Venice

DSC_9430

Once you start humming “It’s a small world after all,” it’s difficult to stop.

DSC_9593

DSC_9441


Tina asked “what are you exclaiming about?” “Simply the fact and contingencies of my own existence.”

DSC_9547 - Version 2


Musashii, Larry Ellison’s soul-less yacht.

DSC_9445


Venice — air pollution.


Every doge has painting of Mary and baby Jesus blessing the doge. Far more secular power than Rome. A swift flying through the cavernous room depicting the triumphant Siege of Constantinople.

IMG_1864


So much Byzantine and Moslem influence in architecture and decoration.

IMG_1875


Many Wiener dogs.


Street artists working on a piece. I keep remembering my HS friend who would carefully lay out his traced-from-Boris-Vallejo drawings and spend the study hall shading some small portion of one. Effective way to attract the girls, as it turned out.


Obligatory Venice shots

DSC_9487

IMG_1796

IMG_1866

IMG_1867

IMG_1887


Pisa my ass: every building over 3 stories has a noticeable lean. The floor of St. Marks rolls like the ocean.

IMG_1771

IMG_1773


Important street vendor items: purses, sunglasses, gooey ball that splats and then reforms, purple LED things that shoot into the air and helicopter down.

IMG_1829


“Bar Tour”

IMG_1897

These people hated us.

IMG_1892

IMG_1894


IMG_1929

Hey! It’s Rick Steves. Or, as I called him after 4 drinks, Rick James. Damn, I wish it had been Rick James.

IMG_1943


IMG_1945

IMG_1954

Last Americanos, last day.

IMG_1971\

I love Tina with all my heart. 20 years.

IMG_1972

Escaping Venice in a torrential thunderstorm at 3AM. Last photo of trip.

IMG_1976

Coding standards and type inference

With type inference you avoid “finger-typing” on both sides of an assignment:

Foo myFoo = new Foo()
var myFoo = new Foo() //Type-inference (no "win" here, but with parameterized types...)

Type inference also works with functions, allowing you to write:

def bar() : Foo = { ...etc... }
def bat(foo : Foo) = { ...etc... }

var myFoo = bar(); //Type-inference works fine
bat(myFoo);

But I’m wondering if a coding standard that specified a type on the LHS of such assignments would be clearer:

Foo myFoo = bar();
bat(myFoo);

Pro arguments:

  1. If you think type signatures are important for reasoning (which you presumably do if you’re using a type-inferred language), it follows that the explicitness is helpful; and
  2. If you change bar()s signature, the compiler’s going to complain about the call to bat (“Foo expected, found SomeNewType”) and that’s a little misleading.

Con arguments:

  1. Complaining about what’s passed to bat() is only “misleading” in the sense that people aren’t used to it; and
  2. Putting types on the LHS is an insult to referential transparency, since it is making explicit a difference in assignment use-cases

I am tending towards the “Con” arguments, but I think there’s merit to the “Pro” arguments. Anyone care to make the case that the “Pro” coding standard is superior?

div>