In this post I will to demonstrate how you can contribute to an Open Source project hosted on GitHub. I previously blogged about how you can make and apply patches, which is certainly one way. But on GitHub there is an even cooler method, one that is also less work on the project maintainer.
A month ago I was contacted by PacktPub with a “Review Request” and was provided with a ePub copy of the book for this exact purpose. PacktPub – which I had never heard of before – apparently is trying to get traction on the iOS developer market with a dozen books on the subject matter. But this pales in comparison to the hundreds of books they published for non-iOS ecosystems (Microsoft, Web, Java, etc.)
Is it just me or does it seem like more and more iOS developer are hoping to supplement their living from getting book royalties?
At the end of my procrastination I sat down and forced myself to read the first half of the book, taking notes to give this book a fair and balanced review. A word of caution: this will be a tragic comedy of epic proportions.
In Austria we have a saying: “Nothing is useless, it can always serve as a bad example”. It is my hope that this bad example serves to improve the overall quality of literature on our favorite subject matter.
I chose this article’s title to try and grab your attention. Well, the product is still the same and does the same. The only difference is one that is under the hood. And as such it is your job – should you choose to accept it – to marvel at the benefits that the new old parsing engine brings us.
The parsing of HTML necessary for my DTCoreText open source project is done entirely with the sophisticated use of NSScanner. But it has been long on my list to rewrite all of this parsing with a the industry standard libxml2 which comes preinstalled on all iOS devices. Not only is this potentially much faster in dealing with large chunks of HTML. It probably is also more intelligent in correcting structural errors of the HTML code you throw at it.
In part 1 of this series I showed you how to add the libxml2 library to your project and explained the basic concepts of using libxml2 for parsing any odd HTML snippet into a DOM. In this here part 2 we will create an Objective-C based wrapper around libml2 so that we can use it just like NSXMLParser, only for HTML.
In my previous article about Sub-Projects in Xcode I showed you how you can have an Xcode project as a dependency. The advantage of this is that you can update your library from within the same project and debug into the sub-project’s code.
One thing that was not immediately obvious was how you deal with the problem that Xcode cannot find your sub-project’s library headers. Hence this writeup.
Besides fixing several bugs reported by users this release focusses on implementing a new custom-built super-charged strings scanner.
- FIXED: missing strings file no longer aborts import
- FIXED: added – Button for deleting tokens
- FIXED: deletion of wrong row
- FIXED: over-escaping of \ on writing strings files
- FIXED: wrong token name updated on enter key
- FIXED: search filter not reset on adding a new token
- FIXED: Previous/Next buttons in wizard cease to function
- NEW: replaced genstrings with high-speed custom implementation (>20x speed improvement)
- NEW: support custom localization macro prefix
This new version does no longer support 32-bit because the new strings scanner was implemented using ARC. We hope that this does not inconvenience any of our existing uses. But then again, serious developers are on a 64 bit machine anyway since Snow Leopard…
The new version has been submitted to Apple today.
Over the past week I’ve been working on DTLocalizableStringScanner or in short genstrings2. The original genstrings dates back to the NeXtStep days. You know how it is “never change a winning team” BUT “the good is the enemy of the great”, because if something kind of works, why change it?
Besides of the other problems I’ve alluded to in my previous article genstrings is very slow. Internally it is written in Objective-C as you can tell from the occasional stack trace when it crashes again. But it was created in a time when Macs did only have single CPU cores and when we did not have the awesome LLVM with ARC, GCD and multi-threading.
LEGO’s Life of George game brings together 5 worlds like nothing else before:
- 8-Bit Design
- LEGO bricks
- manual interaction, a “touch interface” if you will
- computer vision for gamification
Let’s have a quick look at this fun pastime that is all the rage.
Actually I am on vacation, but I couldn’t help myself using the breather to work on a little hobby project. This I shall reveal to you today!
If you localize your apps (iOS or Mac regardless) you are probably used to working with genstrings. Probably painfully working, which is why we built the Mac app Linguan which remote-controls genstrings and merges the results with your previously existing tokens.
But genstrings has several big problems.