Code Releases and Symbian Packaging

Posted in Mobile Platform, Symbian Python on January 14th, 2006 at 10:08:59

I’m prepping my first actual .sis file release for the Symbian platform today. I’ve actually been doing it for the past couple days, but today is when I’m going to put in the brunt of the effort.

Most people don’t realize that for me, a release is a process, similar to the way any software company would do it. Prior to a release, I do many things, like checking in code to a revision control system, creating a webpage for the application, gathering screenshots, writing instructions and simple informational blurbs on a product, and so on.

It also leads up to me doing a markeitng blitz for the “product”, even if it’s free: doing my best to inform the persons who would be most interested in the newly released product that it is available. This includes posting in weblog, listing in IRC channels, etc.

Really, to create a full release, it takes me about a half day to get code from “Working on my phone” to the condition where I want to declare a release point, with ample documentation of what I’ve done, why I’ve done it, and why I think it might be useful.

This is going to be my first release using some new tools: specifically Py2SisNG, an *excellent* tool for creating .sis files out of Python applications. The documentation for the app is very good, and if you read the README in the distribution, it really does tell you step by step everything you need to do. I can’t thank the creators of this application enough. It has allowed me to turn my amatuerish Python script into an actual application, something I thought I’d never be able to do on a non-Windows platform.

Of course, there is still one limitation to what I can do: I can’t figure out how to create a .mbm image for the icon of the application. It seems like this little-used format is popular in the mobile world for storing multiple bitmaps in one file, but that there is little information on how to create these images under non-Windows platforms. I’m not sure if I’m going to delay the release until I have an icon for the application, but I’m considering it.

If anyone has any experience in creating .mbm images under non-Windows platforms, please let me know! I’d love to be able to put an icon onto my application to make it look just a little more complete.

OS X 10.4 Compile failures due to libtool

Posted in Redland RDF Application Framework, Subversion on January 11th, 2006 at 13:22:22

Many different projects (Redland, svn, and wxWindows included) have seen cases where users have attempted to compile, and seen the errors:

/usr/bin/libtool: for architecture: cputype (16777234) cpusubtype (0) file: -lSystem is not an object file (not allowed in a library)

or similar, posted to the mailing lists of these projects.

Only one place that I’ve been able to find so far (and not easily!) has the answer:

This is the typical error you get when you do an upgrade install of
Panther -> Tiger but you don’t install the Tiger Developer Tools
(Xcode 2.0). Don’t do that (Do upgrade your dev tools)

(From darwinports mailing list.)

Thank you ssen! Now, anyone else who has seen this will hopefully be able to read this post for now and into the future.

Ran into this attempting to compile gpsd.

My First Spatial Database

Posted in PostGIS, Spatial Databases on January 11th, 2006 at 11:13:48

Thanks to Schuyler and Rich Gibson, I now have a spatially aware postgres database.

Later today, thanks to Schuyler and zool, I’ll have a copy of Mapping Hacks, and a bluetooth GPS.

Last night, I learned how to use centroid(), astext(), and distance_spheroid(), and calculated the distance from my house to zool’s house, and from there to Darwin’s, where I ate lunch and used the wireless yesterday. I loaded some data, learned the frustration of having data in different projections, and learned a little bit about the various types of geometry. I loaded data from an ESRI shapefile. I found that “” in Postgres is equivilant to “ in mysql — that is, “GEOMETRY” means ‘the value from column Geometry’, not ‘GEOMETRY’, which is the literal. (If you ever get “Error: column “Foo” does not exist, that might be a good thing to check.)

Last night, I made my first foray into spatial databases.

Last night, I took control of space on my machine.

Tomorrow, I take control of space in the world!

But today, I need to work on things that I’m actually paid for at the moment. 😉

OpenGuides Map Changes

Posted in Javascript, OpenGuides, WebKit on January 9th, 2006 at 05:37:18

So, tonight I took it upon myself to redo the javascript behind the map for the Open Guide to Boston. The reason for this is relatively simple: when I first wrote the Google Maps interface, the guide had about 50 nodes. With that in mind, drawing them all was acceptable. As the guide got bigger, it got a bit more time consuming, but was still much easier than paging. However, the guide has recently doubled in size as I’ve increased the rate at which I pull data from Zami.com (specifically for the purpose of trying to build a free database of all the churches in the area with user interaction) — up to 2400 nodes (making it the single largest Open Guide to date by pure node size, as far as I can tell).

With this change, the map was no longer just difficult to use: it was impossible. Attempting to open the page crashed my web browser.

So, I took it upon myself to learn enough JavaScript to do paging… but then decided that rather than paging, I should attempt a bit more friendly solution to start. So I started hacking, and got into the Google Maps getBoundsLatLng() function, which allows me to determine the area of the map.

There are two basic options to go from here, depending on performance you expect in various situations, and the scalability you want to have.

* Load all data. Create Javascript variables to store it all. When the map moves, iterate over the data, adding markers for only points which are not already visible, and are in the new span.
* Load only the original data from the database. All additional data to be loaded via XMLHttpRequest.

The first is obviously something that can be done entirely client side, and in fact turned out to be the (much easier than I expected) path I chose. The largest reason for this is simply ease of integration. OpenGuides code is rather convoluted (to me), and modifying it is not something that I enjoy spending a lot of time doing. I’ll do it when I need to, but I prefer to avoid it. The other option would be to query the database directly via Perl or some other language, without using the OG framework. This would probably be slightly faster, but with the size of data I’m using, iterating over it is a minimal time compared to the time drawing the GMaps Markers. As a result, I chose the slower, less scalable, but quicker-to-implement and merge to other guides way of doing things. The biggest benefit here is that I can merge it back into the other quickly growing guides — Saint Paul is now growing leaps and bounds alongside Boston, due to help from pulling Zami.com’s database, and I plan to do similar things with other guides. For instance, in London, where online entertainment is a big draw, integrating features like those found on UK sports betting sites not on Gamstop could enhance the guide’s appeal for users seeking local leisure options beyond traditional mapping. This kind of code is essential for London’s guide, as it won’t fully leverage interactive features without such additions, so I went for the quickest thing that could possibly work.

There were a few gotchas that I had to end up avoiding:

* Removing Google Maps Markers takes *much* longer than adding them. Like, 3-4 times longer in extremely informal testing. With one or two, or even 20-30, this doesn’t matter, but with 100, this starts to be a significant barrier to user interaction.
* There are a number of words which are reserved in Javascript, but are not treated that way in Firefox. This leads to confusing error messages in Safari (although they are slightly improved in the latest webkit): If you see a ParseError, you should check the Firefox Reserved Words list — this is in one of their bugs. For example, the variable “long” is reserved, and can not be used to pass something like, say, longitude.

Discovering the ParseError, working out why it was there, and how to fix it, was greatly helped by the #webkit folks: I have never seen a more dedicated, hardworking, friendly, open and inviting group of Open Source Software developers in my history as a programmer, either in closed or open source products. Many thanks to them for helping me work through why the error was happening, and how to avoid it in the future.

Lastly (although this is not quite chronological, as I did this first), I had to modify the code to the guide to zoom in father to start, so it wouldn’t try to load so many nodes. I think a next step is to allow users to set a default lat/long for themselves, a la Google Local, from which they can start browsing, rather than always dropping them into the main map. But that’s a problem for a nother late night hack session.

Open Guide to Boston Updates

Posted in OpenGuides, Perl on January 6th, 2006 at 01:40:15

Over the past couple months, I’ve been importing a large chunk of data, largely from Zami, into the Open Guide to Boston. Tonight, the guide crossed the 1000 place mark, and I decided that showing everything on one map was no longer making much sense.

The result? Boston Mashup – pick the categories you want, and they’ll be dropped onto a map, with a different color for each type of marker (up to 7 – I don’t have that many colored markers yet).

I’ve still got more I want to do with it, but it works, and works pretty well: much better than I expected it to. Thanks to perigrin for helping me work around my Perl ineptitude and solve the problems I needed to.

Not really much to say about it other than that: try it out, let me know what you think. I’m happy with it, at least as a starting point, so I think that’s probably a good sign.

Internet Explorer

Posted in Web Publishing on December 12th, 2005 at 12:34:24

Internet Explorer is kind of like a spooked horse. You have to talk to it *very* slowly… And if you move too fast, it’ll run.

I can just imagine someone tossing some CSS3 selectors at IE and having it go run and cower in a corner…

Isn’t it a bit warm in here?

Posted in Web Hosting on December 11th, 2005 at 06:36:50

Recently, my hosted server – which runs this site, as well as a number of others – has been experiencing numerous mysterious restarts. I asked the hosting company why this was happening, and they did a diagnostic this morning, which is why you might have seen the site be down for about 3 hours.

The reply?

“Your server has been returned to service at this time. There was another heat issue with your server, frankly I’m not sure how it continued to operate (temps of 218 F or roughly 100 C. We have replaced both the cpu and heatsink and the server has been testing under load at a much more reasonable 42 C at this time. Please let us know if you continue to have any problems with this server.”

Yeah, I guess that might have an effect.

Graphical Headers

Posted in Web Publishing on December 10th, 2005 at 14:05:38

Given: The set of fonts which is available in the browser across all platforms is small.
Given: Having seen enough web pages, the fonts on all web pages tends to look the same.
Given: Navigation is often not noticed or ignored when first visiting a webpage.
Given: Different fonts draw attention to the page, changing the look, and attracing more attention in general to the area where these fonts are.

Conclusion: In order to create attractive, unique navigation systems for websites, in some cases, it may be useful to render the headers in graphics, rather than in text. Assuming that proper alternate text which matches the navigation system, there is no concern as far as disabilities limiting persons from having access to the text in the image. Assuming you generate the images with software rather than manually in photoshop or something, adjusting the navigation is simple if you change your mind later on, so there’s no maintenance concern.

As nice as the available fonts may be – Arial, Verdana, etc. – sometimes you need something a bit different. Graphical headers can draw the user’s eye, and with proper image generation, many of the concerns regarding using images for navigation can be avoided.

RDF?

Posted in RDF on December 10th, 2005 at 12:07:49

RDF: Resource Description Framework or Reality Distortion Field?

Interactive Worlds

Posted in Social on December 7th, 2005 at 09:17:22

Recently, as part of the attempt to expand the realm of the full Swhack Cultural Forum experience, we’ve been investigating the possibilities for creating a virtual world. Yesterday, on the advice of Yoz, I set up a LambdaMoo based on enCore.

enCore is a nifty extension to LambdaMOO which includes a complete web interface for interacting with the MOO. This allows for object creation without learning tons of specialized commands. It makes interactions with the moo a bit easier for beginners, while still allowing “old hands” to do what they would have done in the past, via the telnet interface.

However, part of the goal of the interactive fiction aspect of the task was to have automatic interactions – without anyone else. LambdaMOO provides the equivilant of IRC+World Building, but aside from scripted tasks, there isn’t any “Quest” or other similar aspects. This makes LambdaMOO unsuitable for the task at hand, although it provides an excellent platform for initial world building, which can be used to come up with the platform for our IF world before we actually have to implement it.

However, that leaves me wondering what *is* out there for something that’s more “adventure” based. I know that Rivers Of Mud (ROM) based MUDs have this kind of functionality, but I’m not sure if they’re easy to build on. I don’t know what other kind of MUDs are out there, how hard they are to work with, or anything else about them.

Does anyone here run a MUD? Anyone know which ones would be easy to set up and allow for interactive building, while still supporting a relatively wide range of pre-built stuff so that we don’t have to do everything ourselves? Monsters, Questing, and similar abilities would be nifty, as would some pre-built world areas so that the initial environment isn’t *totally* empty.

I’m completely inexperienced in the field, but would love to hear from other people.