The Case for a Git-Powered Project Gutenberg…

Project Gutenberg, for those of you that are not already familiar with it, is one of the single-most important community projects of the century: an attempt at creating a digital library of free books in a variety of formats, preserving classics and other works of literature from all ages. At the time of this post, the project boasts an impressive 38,000 works for which the copyrights have expired and have been released into the public domain.

Project Gutenberg (PG from here on out) not only indexes the text of these titles, but also original illustrations, metadata (author(s), publisher(s), date(s), illustration(s), etc., and most importantly, bookmarks/tables of contents). The process of “creating” a book comprises many steps and starts off with scanning the original books, using OCR to convert the scanned images to text, manually reviewing the scanned contents for OCR conversion errors, fixing formatting (footnotes, endnotes, spacing, etc.), marking bookmarks and jump locations, creating tables of contents, and finally, to use a software terminology, “building” the files into many different formats to cover the very much fragmented spectrum of eBook file types.

The reason for this primer on how PG works is to give a sense of how complex the entire endeavor is and all the steps and components involved in the process. There probably are more steps were not more immediately apparent and most of the steps listed above can probably be broken up into several more steps each. The point is, it’s an incredibly complicated and error prone process. And even when it’s done without errors or mistakes, there’s always room for improvement. And this is where the need for version control comes in.

Continue reading

Help EasyBCD Learn Your Language!

New EasyBCD LogoLadies and gentlemen, EasyBCD is working very hard trying to learn your language. If you speak a verbal (no sign language) and internationally recognized (no Klingon) that is not part of a conspiracy to collectively rob humanity of its intelligence (so no Newspeak and definitely no Valley Girl), then EasyBCD would really appreciate if you could take an hour or two to help it learn to communicate in your wonderful language.

We’ve been hard at work for the past couple of months developing a new and ridiculously easy to use translation toolkit (that we’ve decided to open source) which will power the upcoming EasyBCD 2.2 release, giving it the superior intellect required to speak dozens of languages fluently… with your help.

Continue reading

The New Windows 8 Metro Bootmenu/Bootloader

Windows 8 scribbleThis is a post that should probably have been made a little earlier, but we’ve been rather busy cranking out new EasyBCD versions and working on some exciting new developments. We’ve had a lot of questions regarding EasyBCD‘s compatibility with Windows 8, and what our findings are regarding the new Windows “touch-enabled” bootloader screen. In this post, we’ll cover the new bootloader and what works and doesn’t with EasyBCD.

The New Windows 8 Bootloader

Literally the very first thing you notice when installing and testing Windows 8 Developer Preview is the new boot screen. I personally find it to be very cluttered and unorganized, and generally aesthetically unappealing. However, compared to the decades of text-based boot selection menus that people are accustomed to, reviewers are seeing this as a dramatic improvement.

Continue reading

EasyBCD 2.1.2: Fedora 16 GRUB2 support and bugfixes

EasyBCD LogoHello everyone! We have a new EasyBCD build with relatively minor changes. In keeping with our promise to release more often, we’re releasing this small EasyBCD updated that brings brings exactly one update, one new feature, and one bugfix to the table.

EasyBCD 2.1.2 supports the recently-released Fedora 16, which is the first Fedora Linux version to feature the usage of GRUB2 (instead of the old Legacy GRUB). EasyBCD has supported GRUB2 for years now, but it required the addition of a new profile with the names and paths that Fedora 16 uses. EasyBCD also has a new homepage at http://neosmart.net/EasyBCD/ which is both prettier and easier to remember.

Continue reading

EasyBCD 2.1.1 and Digital Signatures for All!

Hello, everybody! EasyBCD 2.1.1 is here with the usual roundup of minor bugfixes, small improvements, and various enhancements that come with the regular point releases. The initial EasyBCD 2.1 release has proved to be a very solid and stable build, with no major issues and only a few minor quirks needing adjustment; but more on all that later. When we released EasyBCD 2.1 we also announced a new paid licensing scheme for commercial use – and today, you the community, our beloved users of EasyBCD get to reap that reward!

EasyBCD 2.1.1 is the first of our products to be digitally signed! This is fairly exciting news as it was one of the very last finishing touches that EasyBCD (and the rest of our products, for that matter) has lacked over the years. Today, all this changes as we have finally obtained a digital certificate with which we shall be signing all future releases. No more ugly orange warnings when trying to install a NeoSmart product or a nasty red bar when downloading our software with Internet Explorer 9, we can now prove what you’ve all known for years: our products are top-notch quality and absolutely safe and malware-free.

digitally signed!

Continue reading

WaitForMultipleObjects and WIN32 events for Linux/OS X/*nix and Read-Write Locks for Windows

As every programmer worth his salt knows, synchronization primitives form the very building blocks of multithreaded programming. Without them, the world as we know it would cease to exist and chaos would reign free and unchecked.

All joking aside, synchronization objects such as mutexes and semaphores are essential to safe multithreading and are found on just about any platform under the sun. Mutexes and semaphores alike have one purpose: to keep different threads from messing around with bits and bytes at the same time another thread is, keeping your code free of segfaults and memory access violations alike. But that’s about where the similarities between the synchronization primitives on different platforms end.

POSIX-compliant operating systems with pthreads offer additional really neat synchronization primitives not found on Windows, such as condition variables and read-write locks (the latter is now available on Windows Vista+). And Windows programmers have at their disposal automatic and manual reset events, which make designing certain types of multithreaded software incredibly easy, abstracting away much of the hard-core synchronization logic that lies beneath the hood.

Continue reading

My Thoughts on Sutter’s “C++ and Beyond 2011”

Around a month ago, Herb Sutter gave a talk on why C++ is once more gaining relevance in the world of programming, and how after a decade of neglect and abandonment, it is set to pave the way into the future. I downloaded it a while ago and finally had a chance to watch it last night; the talk itself is most-excellent and is around 40 minutes long, you can stream it online or download it in a higher-resolution format on Channel 9. Or click below to watch:

As someone that’s been using both C/C++ and .NET extensively over the past years, I found there was one very important point that Sutter glanced on, danced around, and did everything short of actually naming in his talk and it’s that if you’re doing anything remotely intricate or complicated, leaky abstractions in managed languages will bite you in the ass, and end up lowering your productivity, some times (and if what you’re working on is truly complicated, often times) to a point where you’d have been more productive using C or C++ in the first place.

The concept of leaky abstractions isn’t anything new and I’m hardly the first to point out how it can turn a knight in shining armor into a harbinger of doom and destruction. It’s the number one problem fundamentally present in almost any framework, but even more so in managed languages where the framework is all you have, and you’re not allowed to side-step it and build your own foundations to work with (p/invoke and interop aside). But lately it’s becoming more and more of a problem as the “push” for innovation that Sutter speaks of has become a fundamental requirement in just about all corners of the industry.

Continue reading

Google Chrome Form QuickSubmit

As a long time user of Google Chrome (since the very first day of its release, as a matter of fact), I’ve quickly grown accustomed to some of the Chrome way of doing things. Before Google Chrome, I used Opera and before that Firefox and Firebird – and only before those, Internet Explorer.

While each of these fine web browsers has its own way doing things, ranging from keyboard shortcuts to tab management and process handling, they all more or less pull these off a bit nicer than Internet Explorer ever code. But the one Internet Explorer feature I can honestly say I miss when using Google Chrome is the ability to submit the form being currently modified/filled-in with a keyboard shortcut, especially if it works even if there are multiple forms on the screen.

Searching about for a cross-platform solution to this problem, perhaps a previously unknown keyboard shortcut or else some method of assigning a keyboard shortcut that would let Google Chrome intelligently submit the current form via a keyboard shortcut on both Mac and Windows, it became clear that this feature just doesn’t exist for Chrome. Well, as of yesterday, at any rate…

Continue reading

Microsoft plays the blame game fast and loose with Internet Explorer 10 and Windows 8

Yesterday, Microsoft made available the first public beta of Windows 8. The developer preview can be downloaded on the Microsoft website, and has received plenty of media coverage and has been the subject of much scrutiny and review. However, in our testing of Windows 8 for compatibility with NeoSmart software and products, we came across a rather, shall we say, interesting approach that Internet Explorer 10 now takes to its crashes. With Windows 8, as with previous versions, when an application hangs or crashes, an error reporting dialog is displayed prompting the user to select an action to take with the crashed program.

What’s different with Windows 8 and Internet Explorer 10 is that Microsoft chooses to deflect the blame from itself, and pin it instead on the unfortunate owners of the website that the user had last visited. In the following screenshot, Internet Explorer 10 has crashed after being unable to handle some of the web scripting on our website. Except instead of the error dialog you would expect (something to the effect of “Internet Explorer has stopped responding,” an error caption which we are all familiar with and of which the web is full), the error dialog instead reads:

neosmart.net is not responding.

Continue reading