Sunday, December 9, 2012

Pac-Man Coffee

During prototyping, some project tools are more important than others.  Coffee:



And visual thinking:


Thursday, December 6, 2012

The Project Revealed

The more things change, the more they stay the same

So far, I've written about mountains and ports, about programming and about popular games on phones.  There were pictures from Himalaya and some screenshots of ancient computers.  There were also pictures of colored text and colored windows.  Even a page with samples of running code.  But it's all bits and pieces.  It's time to connect the dots.

Can you guess the image?

The basic idea is to make wxWidgets available on Amiga.  Making a new software available on a new computer is referred to as porting.  Porting wxWidgets means making it available on a new computer.  It's just that simple.

What is wxWidgets?

It's a toolkit for programmers.  Some of the fun things programmers want to do with computers can be a bit hard.  Things like playing video clips and music, making nice user interfaces, network stuff, graphics and 3D, web, database connections, etc. can take quite a bit of code even to achieve very simple things.  Even just making the software work nicely in both Россия and 日本 can present some fairly hairy challenges.  If you've ever faced code pages in Windows, or EURO (€) symbols that won't print, then perhaps you know what I mean.  Some people think of wxWidgets as a GUI toolkit, but it's really a toolkit that simplifies all of the above (and more).  And what's more, it makes it easy to make the same app available on both PC and Mac.  And Linux.  And phones.  And Amiga.

Using another toolkit like MFC, .NET or Cocoa (Mac) or even GTK (Linux) makes apps just as easy to write, but mostly just makes them available on one computer type (e.g. Mac or PC).  With wxWidgets, the app is more or less automatically available on just about any computer type, and tablets and phones.

Is that the Amiga from my childhood?

A different kind of small talk
Yeah ;-)  It changed a bit after Commodore failed, but it's essentially the same thing.  What most people don't know is that Amiga has a pretty nice, simple and mostly complete operating system.  The initial designers took inspiration from some of the best available technology, and simplified it to work in an inexpensive home/game computer.  This means it has many features from bigger systems (read: Unix), but without the complexity that makes them slow and big.  User interface systems were inspired by research at Xerox PARC, same as most other user interface systems.  GUI and widgets systems were inspired by Smalltalk, and the MVC model.  The disk operating system and kernel originated mostly from a research project at the University of Cambridge.

The modern Amiga is a 64-bit multi core PowerPC machine, with gigabytes of RAM, Radeon 3D graphics, gigabit ethernet, SATA/USB/PCI ports, 7.1 channel audio, and whatever else can be expected from a current computer.  The OS supports Cairo and OpenGL graphics, 64 bit journalling file systems, BSD sockets, music and video playback, transparent desktop windows, internationalization, threads, dynamic loading, and many other things expected from a modern OS -- with some nice additions not found anywhere else.

The key thing is that all of AmigaOS is based on solid research principles that were simplified and put into an efficient package.  This makes it similar enough to other systems to make it easy to understand, but different enough to make it interesting.  Now, how the original engineers were able to get venture capital to build a game console, but managed to produce this neat little piece of operating system, that can probably only be answered by themselves!

Either way, wxWidgets is a perfect match for the Amiga, and the port is long overdue.

So what's the project?

Making wxWidgets available on Amiga.  I'd like to think that this adds value both to Amiga and to wxWidgets.  How much value can certainly be debated, but I'm not asking to get paid.  I'm doing it mostly because I enjoy it.  And because it's something wildly different from what I've been doing recently.

The main effect would be to enable a large number of new apps on Amiga, but it also means that some Amiga apps could be rewritten for wxWidgets and made available on other platforms.

What's with the mountains?

They're just there as a metaphor for challenges that sometimes come in our way.  This project is a significant challenge for me.  I don't know much about mountains really, but I know quite a lot about taking on challenges that appear almost overwhelming.  Depending on your own experience with wxWidgets, Amiga, programming and software projects, you may or may not see the same challenge in this project.  That's fine though.  I will explain as I go along why this project, right now in my life, is stretching my limits.

Triangles?

Used for 3D graphics.  I like moving, spinning things in full color.  What can I say?  Here's an example of what is possible when triangles meet wxWidgets:



Nothing But Nets

One of the nice things about open source development is that it's mostly free (as in beer) and unbound in time.  In reality though, there are still both money and time constraints although maybe not as clear cut as in commercial projects.  I've decided to commit the time and money to complete this project, and make the end product available for free.  If you like this project and enjoy reading the blog, do consider donating to Nothing But Nets.  It is a United Nations Foundation initiative to fight malaria, clearly on a whole different level of importance than anything wxWidgets or Amiga can do.  I don't mind some limited compensation for the time and money I invested, but it's not critical.  If there is interest, I may open up options to donate to this project specifically, but Nothing But Nets will always be the preferred choice.

That's all for now.  Comments are open for this post, go ahead and try it!


“Grown-ups never understand anything by themselves, and it is
tiresome for children to be always and forever explaining things to them”
― Antoine de Saint-Exupéry



Sunday, December 2, 2012

Sunday Treat

It might take up to three bankruptcies to learn how to run a decent business.

The top menu now has a Status page where I elaborate a bit on project progress as I go.  The past few days my brain has been all over the place, and it's been hard to make any solid progress.  But as a Sunday treat, I thought I'd just show a couple of examples of working code in full color  ;-)

Starting to let some of the blue smoke out...

Ok, so that's just about as exciting as it is right now.  I have been testing against a wxWidgets tutorial at zetcode.com.  At this early stage it's as good for testing as any other code, and using something already available saves me some typing while testing.  In parallel, I'm also working with the wxWidgets test suite for a bit more formal testing.  But in my humble opinion, testing with "real" content is probably more interesting to most of us.  As of right now, everything on the Helper Classes page builds and runs nicely.  And that's still without really adding any significant code content -- I'm still in the design phase (see the Status page for more).

Q & A


I've had a few questions over the past few weeks.  Quite appropriately, since I'm new to most people in both the wxWidgets and the Amiga communities.  Keep up the questions, I'm happy that there is so much interest in this project already!  Here are some answers:

Which version of wxWidgets are you porting?

The latest.  Looks like 2.9.5 will be out any day now, but realistically it will be 3.0 before the Amiga port is finished.

How long will it take?

Yeah.  Would be nice to know.  I'm looking for the quickest way to put something reasonably useful out there.  Some other ports have taken a couple of months to reach a useful stage, and I don't know any reason right now why the Amiga should be significantly different.  So far it's going quite well.

Are you porting to AmigaOS 4 and native widgets?

Yes.  And that means using Reaction etc. and/or whatever else ends up providing the best implementation for Amiga.  That said, for practical reasons I'm doing a lot of initial testing on OS3 in UAE (an Amiga virtual machine).  It's likely that the wxWidgets port will also run decently on OS3 with reduced functionality.  At least under Amiga Forever -- testing on a wide range of actual hardware from ~1990 may be a bit too challenging.

I heard you didn't even have an AmigaOS 4 box?

That's no longer the case  ;-)

Wasn't someone else porting wx before? Is this again a case of double work?

No double work so far, and unlikely to happen in the future.  There were some previous attempts, and I've been granted a copy of their latest source tree.  Having the advantage of their experiences, I am able to take a slightly different approach that should hopefully prove quicker and easier.  The available code is perfectly fine though, and I understand I may be permitted to use it as applicable.

Can I be a beta tester?

At the moment I don't know if and when there will be a beta stage at all, though there will probably come a time when concentrated testing will be required.  If you're maintaining a wxWidgets app that uses only base/core, then I'm certainly interested.  If you have experience in CPPunit test writing then that will also be useful.  If you're super sharp with the intricate details of C++ and class documentation, you should certainly let me know.  If you have no experience with either wxWidgets, cppunit or C++, then please be patient for a little while.  Even if wx is massive it's still just a toolkit, and getting actual apps to run is some way off yet.

What nice software uses wx?

A fair bit actually, though you might not know it.  It tends to blend in so well with the regular look & feel that end users never know.  A couple of open source examples are Audacity, Kicad, Code::blocks and Amaya.  The list of commercial software is probably even longer, and some of them even originated on the Amiga!

How much experience do you have with AmigaOS programming?

A fair question.  I didn't really release much of anything for the Amiga before, and I've been away from the community for a while.  Whatever commercial programming I did was for Windows and Unix, and even that work you're quite unlikely to have seen.  That said, I grew up on the Amiga.  I was coding on it when OS version 1.2 was considered "new".  I found the gems pictured below in my library, and if you recognize them you know I've been around for a good while.  In all honesty though, the AmigaOS API is pretty small and simple and I'm not worried -- it's not even on my top 10 list of possible challenges in this project  ;-)

LISP is your friend.


Ok, that's all for now.  Be good.  //A.


“Everything should be made as simple as possible, but no simpler.”
A. Einstein (possibly paraphrased)