Picture

Name Marco von Ballmoos
Member since
Email [hidden]
Home page https://earthli.com/users/marco
Description

The (only) developer at earthli.com.

Contents

3752 Articles
113 Comments

12 years Ago

The Road to Quino 2.0: Maintaining architecture with NDepend (part I)

Published on in Programming

Full disclosure

A while back—this last spring, I believe—I downloaded NDepend to analyze code dependencies. The trial license is fourteen days; needless to say, I got only one afternoon in before I was distracted by other duties. That was enough, however, to convince me that it was worth the $375 to continue to clean up Quino with NDepend.

I decided to wait until I had more time before opening my wallet. In the meantime, however, Patrick Smacchia of NDepend approached me with a free... [More]

Optimizing compilation and execution for dynamic languages

Published on in Programming

The long and very technical article Introducing the WebKit FTL JIT by Filip Pizlo (Webkit Blog) provides a fascinating and in-depth look at how a modern execution engine optimizes code for a highly dynamic language like JavaScript.

To make a long story short: the compiler(s) and execution engine optimize by profiling and analyzing code and lowering it to runtimes of ever decreasing abstraction to run as the least dynamic version possible.

A brief history lesson

What does it mean to “lower” code? A programming language... [More]

Extemporizing with Greg Proops

Published on in Fun

I’ve recently started listening to the Gregg Proops podcast, called The Smartest Man in the World. He has a objectively terrible LA accent that really needs getting used to, but he’s a wonderfully extemporaneous, stream-of-consciousness, improvisational comedian whose claim to fame is “Whose Line is it Anyway?”.[1]

Let’s start off with a sample from the podcast called “Hearts”. Proops was discussing how the British newspapers were disparaging “pop royalty” Jay-Z and Beyoncé for not being... [More]

John Oliver on the power of state legislators

Published on in Public Policy & Politics

Congress may be at an ineffective standstill and the next two years are a legislative wasteland stretching before America and the world. The state legislatures, though, aren’t sitting still. Instead, they’re filled with the crème de la crème that America has to offer: from mildly racist to super-racist, from batshit crazy to crazier than a shithouse rat.

After introducing many of the lunatic creatures that will have an inordinate effect on ordinary citizens’ lives, Oliver notes that they are... [More]

Quino v1.13.0: Schema migration, remoting, services and web apps

Published on in Programming

The summary below describes major new features, items of note and breaking changes in Quino. The full list of issues is also available for those with access to the Encodo issue tracker.

Highlights

Data & Schema

Ukraine Update

Published on in Public Policy & Politics

The article The IMF’s New Cold War Loan to Ukraine by Michael Hudson (CounterPunch) provides some interesting insight into the IMF’s machinations on behalf of its masters in Europe and the U.S.

“[…] the IMF signed off on the first loan ever to a side engaged in a civil war, not to mention rife with insider capital flight and a collapsing balance of payments.”

The IMF has hard and fast rules for loaning money and is famous the world over for being an exceedingly unforgiving creditor…unless the creditor is the European... [More]

Schema migration in Quino 1.13

Published on in Programming

Quino is a metadata framework for .NET. It provides a means of defining an application-domain model in the form of metadata objects. Quino also provides many components and support libraries that work with that metadata to automate many services and functions. A few examples are an ORM, schema migration, automatically generated user interfaces and reporting tools.

The schema-migration tool

The component we’re going to discuss is the automated schema-migration for databases. A question that... [More]

EF Migrations troubleshooting

Published on in Programming

The version of EF Migrations discussed in this article is 5.0.20627. The version of Quino is less relevant: the features discussed have been supported for years. For those in a hurry, there is a tl;dr near the end of the article.

We use Microsoft Entity Framework (EF) Migrations in one of our projects where we are unable to use Quino. We were initially happy to be able to automate database-schema changes. After using it for a while, we have decidedly mixed feelings.

As developers of our own... [More]

When you really start learning

Published on in Quotes

“The paradox of education is precisely this—that as one begins to become conscious, one begins to examine the society in which he is being educated.”

iTunes: another tale of woe in UX

Published on in Technology & Engineering

I know that pointing out errors in iTunes is a bit passé but Apple keeps releasing new versions of this thing without addressing the fundamental problems that it has as a synchronization client.

The software has to synchronize with hardware from only one manufacturer—the same one that makes iTunes. I’ll leave off complaints about the horrific, very old and utterly non-scaling UI and just regale you with a tale of a recent interaction in which I restored my phone from a backup. In that... [More]

An introduction to PowerShell

Published on in Programming

On Wednesday, August 27th, Tymon gave the rest of Encodo[1] a great introduction to PowerShell. I’ve attached the presentation but a lot of the content was in demonstrations on the command-line.

  1. Download the presentation
  2. Unzip to a local folder
  3. Open index.html in a modern web browser (Chrome/Opera/Firefox work the best; IE has some rendering issues)

We learned a few very interesting things:

  • PowerShell is pre-installed on every modern Windows computer
  • You can PowerShell to other machines... [More]

Is Encodo a .NET/C# company?

Published on in Miscellaneous

Encodo has never been about maintaining or establishing a monoculture in either operating system, programming language or IDE. Pragmatism drives our technology and environment choices.[1]

Choosing technology

Each project we work on has different requirements and we choose the tools and technologies that fit best. A good fit involves considering:

  • What exists in the project already?
  • How much work needs to be done?
  • What future directions could the project take?
  • How maintainable is the... [More]

John Oliver on the estate tax

Published on in Finance & Economy

John Oliver’s new show on HBO is what some of us have always wanted the Daily Show to be. Oliver doesn’t self-censor, he doesn’t do pandering interviews and he does really, really in-depth segments. He did one recently on inequality.

“The federal estate tax does not apply to 99.4% of all farm estates. It also doesn’t apply to 99.86% of anyone’s estate. Basically, if you are not comfortable calling your pile of shit an “estate”, the estate tax probably doesn’t fucking apply to you.”

Watch the... [More]

Should you return null or an empty list?

Published on in Programming

I’ve seen a bunch of articles addressing this topic of late, so I’ve decided to weigh in.

The reason we frown on returning null from a method that returns a list or sequence is that we want to be able to freely use these sequences or lists with in a functional manner.

It seems to me that the proponents of “no nulls” are generally those who have a functional language at their disposal and the antagonists do not. In functional languages, we almost always return sequences instead of lists or... [More]

Optimizing data access for high-latency networks: part IV

Published on in Programming

 In the previous two articles, we managed to reduce the number of queries executed when opening the calendar of Encodo’s time-tracking product Punchclock from one very slow query per person to a single very fast query.

Because we’re talking about latency in these articles, we’d also like to clear away a few other queries that aren’t related to time entries but are still wasting time.

Lazy-loading unneeded values

In particular, the queries that “Load values” for person objects look quite... [More]

The BBC presents: The future of news

Published on in Design

 Screen-shot of articleThe article Man sectioned over Manchester Airport plane bomb hoax (BBC) was forwarded to me purportedly for its content.

That content? They closed an entire airport for a bomb hoax.

But something else caught my eye: the sheer impenetrability of the presentation. I took a screenshot of the whole article, shown to the right. Can you tell where the article is hiding?

I’m going to ignore the British news-authoring penchant for crash blossoms.[1] Also, I’m going to assume that using “section” as a verb... [More]

World Cup 2014 Finals finally over

Published on in Sports

Ah, now I can have my life back.[1]

Why are you[2] watching?

I honestly don’t know what comes over me when the Soccer World Cup or the European Championship is on. I never watch club football. I know some of the teams and know where some of the players play, but that’s it. I know many names, but don’t follow assiduously enough to even halfway qualify as a fan.

I am strongly critical of FIFA and their politics, corruption and influence. It’s probably a giant waste of money. At least some of the... [More]

Doing something worthwhile vs. working for a living

Published on in Quotes

“We must do away with the absolutely specious notion that everybody has to earn a living. It is a fact today that one in ten thousand of us can make a technological breakthrough capable of supporting all the rest. The youth of today are absolutely right in recognizing this nonsense of earning a living. We keep inventing jobs because of this false idea that everybody has to be employed at some kind of drudgery because, according to Malthusian-Darwinian theory, he must justify his right to exist.... [More]”
Buckminster Fuller on March 30th, 1970 (The New York Magazine)

Optimizing data access for high-latency networks: part III

Published on in Programming

 In the previous article, we partially addressed a performance problem in the calendar of Encodo’s time-tracking product, Punchclock. While we managed to drastically reduce the amount of time taken by each query (>95% time saved), we were still executing more queries than strictly necessary.

The query that we’re trying to optimized further is shown below.

var people =
  Session.GetList<Person>().
  Where(p => Session.GetCount(p.TimeEntries.Query) > 0).
  ToList();

This query executes one... [More]

World Cup 2014 group phase

Published on in Sports

Brazil vs. Croatia (3–1)
Brazil took a little while to get going but showed flashes of brilliance. They got lucky that the momentum didn’t go the other way before getting some fortuitous calls. Brazil almost always gets the benefit of calls. I’m on fence as to whether it’s an in-built, explicit prejudice, an unconscious tendency on the part of referees in awe of their reputation or just a natural outgrowth of their playing so well.
Mexico vs. Cameroon (1–0)
Can’t remember. I think Mexico... [More]

Optimizing data access for high-latency networks II

Published on in Programming

 In the previous article, we discussed a performance problem in the calendar of Encodo’s time-tracking product, Punchclock.

Instead of guessing at the problem, we profiled the application using the database-statistics window available to all Quino applications.[1] We quickly discovered that most of the slowdown stems from the relatively innocuous line of code shown below.

var people = 
  Session.GetList<Person>().
  Where(p => p.TimeEntries.Any()).
  ToList();

First things first: what does... [More]

Optimizing data access for high-latency networks: part I

Published on in Programming

 Punchclock is Encodo’s time-tracking and invoicing tool. It includes a calendar to show time entries (shown to the left). Since the very first versions, it hasn’t opened very quickly. It was fast enough for most users, but those who worked with Punchclock over the WAN through our VPN have reported that it often takes many seconds to open the calendar. So we have a very useful tool that is not often used because of how slowly it opens.

That the calendar opens slowly in a local network and even... [More]

Questions to consider when designing APIs: Part II

Published on in Programming

In the previous article, we listed a lot of questions that you should continuously ask yourself when you’re writing code. Even when you think you’re not designing anything, you’re actually making decisions that will affect either other team members or future versions of you.

In particular, we’d like to think about how we can reconcile a development process that involves asking so many questions and taking so many facets into consideration with YAGNI.

Designing != Implementing

The implication... [More]

Riding the wave

Published on in Finance & Economy

When we talk about getting real about the Internet economy, we talk about acknowledging that there is real value there. And when we talk about valuation, we think we are talking about some measure of that—real value. The word “value” is built right into the word, so that must be what it means, right?

But what do we mean when we say “real value”? What kind of value or values? And, more importantly, value to whom? Is there only positive value? Or is there a negative component? Which part is... [More]

On encouraging a prescriptivist to use more hyphens

Published on in Miscellaneous

The title sounds like a self-post on Writing Prompts, but it describes quite accurately what I attempted to do when formulating a response to the essay Nobody. Understands. Punctuation. by Peter Welch (Still Drinking).

Below is the text of my mail to him.

I’ve read a few of your essays since you made such a splash with what you are probably aware is your making-it-to-the-big-time essay Programming Sucks by Peter Welch (Still Drinking) and I enjoyed the last one propounding descriptivism over prescriptivism.

A descriptivist is ordinarily well-shielded... [More]

Questions to consider when designing APIs: Part I

Published on in Programming

A big part of an agile programmer’s job is API design. In an agile project, the architecture is defined from on high only in broad strokes, leaving the fine details of component design up to the implementer. Even in projects that are specified in much more detail, implementers will still find themselves in situations where they have to design something.

This means that programmers in an agile team have to be capable of weighing the pros and cons of various approaches in order to avoid causing... [More]

Dealing with improper disposal in WCF clients

Published on in Programming

There’s an old problem in generated WCF clients in which the Dispose() method calls Close() on the client irrespective of whether there was a fault. If there was a fault, then the method should call Abort() instead. Failure to do so causes another exception, which masks the original exception. Client code will see the subsequent fault rather than the original one. A developer running the code in debug mode will have be misled as to what really happened.

You can see WCF Clients and the “Broken”... [More] by David Barrett

REST API Status codes (400 vs. 500)

Published on in Programming

In a project that we’re working on, we’re consuming REST APIs delivered by services built by another team working for the same customer. We had a discussion about what were appropriate error codes to return for various situations. The discussion boiled down to: should a service return a 500 error code or a 400 error code when a request cannot be processed?

I took a quick look at the documentation for a couple of the larger REST API providers and they are using the 500 code only for... [More]

Movie recommendations #1

Published on in Movies

I’ve been asked for movie recommendations often enough of late that I thought I’d put together a bit of a summary of the mini-reviews I’ve made over the years.

The following list is not comprehensive nor does it necessarily comprise my favorite movies, though many favorites are here. I made the list with a particular couple of friends in mind and tailored it to include the movies I thought they might find interesting but had most likely not heard of or hadn’t yet seen. I also only chose movies... [More]