Blog

War Zone, Lost Lives

In retrospect, it’s easy to say that a passager plane shouldn’t have flown over a war zone, but it was allowed and a tragedy ensued. Flight MH17 was downed with about 250 people on board in eastern Ukraine. I’m upset that such things can still happen, but how it happened isn’t clear to me.

We all wish we could know what happened, but I don’t expect we’ll know for some time. Because another victim of wars is often the truth.

When I listen to the media these days, I feel like the war propaganda machine is raging on. Endless blabing going on for months about how Russia is an oppressive regime and is arming groups to destabilize nearby countries would make you think the country is worse than Saudi Arabia. Some critical thinking however would show that even the United States are not above such tendencies. Politicians claiming to have solid evidences of Russian involvement in this event reminds me of claims of weapons of mass destruction in Irak. Perhaps those proofs are not fabricated this time, but I know better than to trust a politician brandishing “proofs” when attempting to rally support for a military intervention in a foreign country.

Let’s not forget that in the lands below those skies ordinary people are dying too. When an artillery shells falls at the wrong place, a city can lose drinking water. Or a building can burst in flames with people inside. Western media tend to not say much about these now countless tragedies on the ground, but I do sympathise with whoever is still living there too, as well as with all those who had to flee the region.

Demonizing your enemies, calling them terrorists, ruthless dictators, or maniactical expansionists only serves one purpose: making peace look foolish. It makes people believe the enemy is some sort of sub-human, that there’s no hope of dialogue or peaceful resolution, no hope of satisfactory compromise. This is the language of those who seek war.

War is the disease we should be fighting against. My wish is that this tragedy becomes an occasion for peace talks instead of a justification for killing more people in an even bigger war. The war in eastern Ukraine started with a political problem within Ukraine; it’ll end either with a political solution or it will not end well for anyone.


Now is a good time to stop exposing my visitor’s browsing history

Reading Ars tests Internet surveillance—by spying on an NPR reporter makes me realize that there isn’t much difference between a website that reports everything you visit to the NSA and a website you browse with an unencrypted connection. If spy agencies around the world indeed have access to the content of all our communications, hosting a website on plain unencrypted HTTP is like handing them visitor’s detailed browsing history. This history once combined with the history of other website can reveal many details.

So today I’m updating this website to make everything served over a secure encrypted HTTPS connection. It’s not a complete solution to privacy: a spy on the network will still be able to know you’re browsing my website. But they won’t know which pages, which is one less data point revealing what you’re doing.

If you host a website, you should do the same as a service to your visitors.


App Store Bundles as an Upgrade Path

Apple never really allowed developers to offer upgrade pricing when releasing a major update to an existing application on the App Store. But now they’ve announced that bundles are comming to the App Store. So what happens if you put GreatApp 1.0 and GreatApp 2.0 in the same bundle?

Bundles are a way to put two or more apps in a group to give the user a discount if he purchases multiple apps from the same developer. On stage at WWDC it was said that users who already have purchased an app in the bundle can still get the bundle but with a discount. So let’s say you make this available on the store:

App Price
GreatApp 1.0 $5.99
GreatApp 2.0 $10.99
GreatApp 1.0 & 2.0 Bundle $12.99

Now let’s suggest to a user who already purchased GreatApp 1.0 to purchase the bundle instead the 2.0 app. He will get a discount since he already owns version 1.0. You can thus calculate the upgrade price based on that discount. Let’s assume the discount is calculated to be the full price of the 1.0 app, like this:

GreatApp 1.0 & 2.0 Bundle      $12.99
GreatApp 1.0 Discount         - $5.99
                           -----------
Total:                          $7.00

And now you get this nice $7 upgrade price.

It’s possible that Apple will calculate the discount differently, in which case you’ll have to set the bundle price differently to get the same upgrade price.


Counterparts Lite and XLIFF

XLIFF is a standard document format for exchanging localized strings between app developers and translators. It’s been supported for some time by Interface Builder’s command line tool, and some developers have built their translation workflows using XLIFF.

The first release of Counterparts Lite last month only supported Cocoa string table files, those with the “.strings” extension. Today I’m releasing a new version capable of opening XLIFF files and editing translations within them.

Editing XLIFF files is the same experience as editing a Cocoa string table with a reference file attached. The XLIFF file contains the key and both the source string and the translated string for each entry. It’s much more convenient for transators who don’t have to open two files side by side. XLIFF can also include comments from the developer for those entries.

There’s been some news sourounding XLIFF at WWDC this week. With better integration for XLIFF in Xcode comming up, a tool like Counterparts Lite will become more useful than ever. XLIFF is a versatile format, and it can include all the strings to translate for all the resources in an application. And Counterparts Lite makes those strings searchable and convenient to edit, which becomes necessary with huge files.

License Leases

With 1.1, I’m also adding a lending option for Counterparts Lite licenses. If you purchase a multi-user license, you can now lend licenses to collaborators (your translators) so they can use the app too. Collaborator license codes will be emitted in their name. More details in the FAQ.



  • © 2003–2024 Michel Fortin.