Category Archives: Uncategorized

The age-old question of Civ games: Roads and rivers in center of tiles, or edges?

Centers of tiles Edges of tiles
Screen Shot 2016-04-18 at 22.31.21

Screen Shot 2016-04-18 at 22.31.10

Pros and cons

  • Centers gives you STRAIGHT things (on a hex grid, it’s the only way to get straights!)
    • Roman Roads
    • Canals
    • Large rivers
  • Edges gives you meandering things (on a hex grid, centers only give wiggles at very large scale)
    • River valleys
    • Realistic medieval roads
    • Modern roads in mountains and hills (tend to wiggle crazily)
  • Movement is simplified with centers: If you’re on the tile, you’re on the road/river
  • Inhibition of movement is simplified with edges: Civilization games have traditionally given a move penalty AND a combat penalty to any tile-to-tile move that crosses an edge containing a river

My leanings…

One thing in particular that struck me from looking at the pictures:

Straight roads look so terrible that every single Civilization game since Civ1 has artifically wiggled them when rendering!

In particular, with 3D games (Civ4, Civ5 especially) this actively damages gameplay – it’s much too hard for the player to see at a glance which tiles are connected by roads, and to what extent. So much so that they cry-out for a “disable the wiggling effect on road-rendering” setting.

Also: I’m happpy to solve the “movement” problem by saying that if you’re in a tile that borders a road or a river, you are assumed to be “on” that road/river, with special-case handling under the hood that handles cases where two roads/rivers border the same tile. It increases the connectedness “for free” – but that’s how Civ games tend to do it anyway: encourage the player to put roads everywhere!

Thoughts on a postcard…

Making a night-vision shader for animals in #unity3d

In the FPS roguelike I’ve been working on, a core feature is that each ability modifies how you interact with the world – you see things differently, you move differently, etc.

Night Vision

I’m working on a tiny level demo to show some of my ideas together. I want one character that can see in the dark, something like the “InfraVision” of D&D.

Spec:

  • Character can see independent of the existence of lights in scene
  • Vision is imperfect, significantly weaker than daylight vision, in terms of details, colours, etc
  • Vision enables easy location + identification of other creatures

Screenshots

Here’s my orc (a test avatar I already had) sitting on top of a building:

Screen Shot 2016-01-19 at 03.23.56

Step 1: cancel the lighting

We use Unity’s “GetComponent.SetReplacementShader( Shader, “” )” to change the shader to a simple “Unlit” shader (Unity provides a built-in one).

	[ContextMenu("Enable dark vision")]
	public Shader shaderDarkVision;

	public void Start()
	{
		if( shaderDarkVision == null )
			shaderDarkVision = Shader.Find("Unlit/Texture");
	}
	public void EnableDarkVision()
	{
		GetComponent<Camera>().SetReplacementShader( shaderDarkVision, "" );
	}

Screen Shot 2016-01-19 at 03.23.45

Step2: Add a vignette to nerf it

I want the DarkVision to be significantly less perfect than daylight vision, so let’s add a simple vignette (Unity has downloadable examples of this shader in their docs, but I only found it after I’d got mine working!).

This took me a long time to get working, just to get accurate screen-positions of shader pixels – so much of Unity’s semi-proprietary Shader language is still undocumented, after many years. I knew all the maths, and had implemented the effect in OpenGL / GLSL in minutes, but it took an hour or so in Unity. And once it was working, I got sidetracked in tweaking the exact curve of darkness of vignette.

Screen Shot 2016-01-19 at 03.24.22

Step3: Convert to grayscale (infravision should be colourblind)

This was easy – simply average the r/g/b components of your Color, somethign like:

avg = (color.r + color.g + color.b ) / 3f;
color = float4( avg, avg, avg, color.a );

Screen Shot 2016-01-19 at 03.21.43

Step 4: several hours of experimenting with wild effects

I had some problems with this:

  1. It was too easy to see “everything”
  2. With no lighting-calcs, it was fugly
  3. With no lighting-calcs, it was VERY hard to do depth-perception. In a complex street, you got lost trying to tell which objects were near, far, blocking your way, or not.
  4. WAY too much detail on the textures is showing through: DarkVision should lose most detail, while keeping overall shapes clear

Here’s some of the things I tried and discarded. Note how the screenshots are from many positions – I ran around a lot, testing how effective the different shaders were for hunting a quarry (or fleeing an angry mob of AI’s).

Screen Shot 2016-01-19 at 02.57.08 Screen Shot 2016-01-19 at 01.34.27 Screen Shot 2016-01-19 at 02.26.02

Step5: FAILED: use depth-buffer shading

Unity staff: please write clear, correct, up-to-date documentation on depth-buffering as supported (or not) by your proprietary Shader Lab language, and with clear details on how this works in Unity5, not some hand-waving Unity4-maybe-Unity5-not-sure gumph.

I simply couldn’t get it to work. Using the proprietary built-in depth-buffer samplers either failed outright (0.5 across the sampler), or gave bizarre results.

Rumours suggest that we have to write 3 shaders: 2 for your proprietary system, and a third where we re-implement depth-buffer access by hand. This seems to me unlikely – I am sure Unity can handle that for you. This is the kind of feature that Unity’s ShaderLab does well (but no-one documents, and so it goes under-used by devs).

When you find or reverse-engineer instructions, ShaderLab is excellent. It’s such a pity that so often … you can’t.

Step6: Combine object-normals with plain greyscale

Ultimately, I fell back on “Fine, I’ll use the most basic bits of Shaders that even Unity can’t make confusing” – object normals. I faked shading Old Skool: each surface is darkened by dot-producting the forwards vector ( which by definition is (0,0,1) after the MVP multiplication stage) with the normal vector. That gives a float from 0 to 1, showing how much the surface is facing towards/away from the viewer.

Screen Shot 2016-01-19 at 03.26.07

I’m not delighted with this – it’s not quite the effect I was aiming for (I REALLY wanted to wipe more of the diffuse detail, but…). However, it does work quite nicely, and for now it’s more than good enough.

Benefits of final version

Here’s why I like it:

  1. Runs 100% independently of my main lighting – I never have to re-write it when changing lighting.
  2. Provides huge advantages at night time, or in low-light situations. More so the less lighting there is
  3. Provides depth-cues to the player, so that running quickly through streets (or tunnels) is still pretty easy to do
  4. Limits the over-powered nature by cutting down peripheral vision
  5. Runs very fast on GPU, despite crappy hand-written shader code (mostly because it doesn’t use any lighting calculations)

Journalling for #entitySystems: #unity3d corrupted my scene; I’ve built a debugger for Unity!

Experimenting with shorter Entity Systems articles

This post is an experiment: rather than write massive, heavily-edited articles, I’m writing “shallow” versions first, which takes me only an hour or so. Then I’m saving the in-depth, detailed versions of each topic for future subscribers to my own Unity3D Entity System. This way I can cover a lot more topics in the same amount of time, and I suspect most people will get all they need without the deep dives I used to do.

Let me know what you think – @t_machine_org

The Unity bug that deleted my game prototype

A few days ago, I fired up my Unity3d test project for the new Entity System. All the data was serialized into Unity’s scene, everything was fine. I was expecting to see all my “registered” components (that are saved directly into the scene) exactly as they were last time:

Screen Shot 2015-05-26 at 11.23.54

Instead … I got this. Why, Unity – WHY?

Screen Shot 2015-06-07 at 21.29.31

On further inspection, Unity’s serialization system had stabbed me in the back: it combined data from two different situations (which is blatantly wrong and should be impossible – although since Unity has failed to document it … who knows what contracts it promises to uphold internally?). I’d like to know why…but the Unity Editor won’t tell me (they don’t let us see this data).

But I don’t really know what happened. Even with extensive logging, Unity lacks a solid debugger – and most of Unity’s code here runs BEFORE your debugger starts or AFTER your debugger stops. Any Unity bugs here are happening inside the invisible, opaque, known-to-be-buggy, Unity startup/shutdown routines. ARGH!

Software … has BUGS! OMGWTFBBQ!

Unity has bugs. Lots of bugs. So does all software. So what?!

Some (many?) of Unity’s many bugs sit in mission-critical parts of the engine. Rumour suggests that’s not because the devs are unaware of them – quite the opposite! – but because they’re too hard to fix. Any mistake in the fix, and it might cause more harm than the original bug (because these systems are so core).

This in itself suggests Unity’s internal dev teams maybe lacked a culture of TDD in the early days. My impression was that they do significant TDD now (yes? no?) but if it only arrived recently, then much of their code might be weakly tested or even untestable. i.e.: I try not to be too hard on them here, even when I’m suffering and there’s no help to be had.

In particular with Serialization: Unity doesn’t allow anyone to see what the bugs are. The Serialization system (along with some other super-critical-data-corrupting-bastard-evil-features of Unity – like the Undo system) has no API to let people outside of Unity corp see WTF it’s doing.

And we know it has bugs. But we can only guess at them, and how to workaround them. Unless you have a million dollars spare and can afford to purchase source-code access…?

Incidentally, this is why it is standard in the games industry to demand source-code access to your game-engine. This is non-negotiable. It has always been a black mark against Unity in professional / experienced gamedev teams that they are so secretive about their source code. It would be fine if they had a high-quality, Automatically Tested, well-documented accurate API, etc – but they don’t.

I have an idea … a new feature for my Entity System

At this point, I’ve already accidentally built quite a lot of the pieces of a debugger for fixing Unity itself. I’m recording the exact data, I’m storing it in memory in raw bytes (which sidesteps all the bugs in Unity’s undocumented serialization layers), and I’m displaying live data-visualizations in human-readable pretty colours, etc.

Enter: the Entity Systems Journal.

What’s a Journal?

If you don’t know, and you care about programming that involves data or storage, read this:
http://en.wikipedia.org/wiki/Journaling_file_system.

In the event of a system crash or power failure, such file systems can be brought back online quicker with lower likelihood of becoming corrupted.

What’s an Entity System Journal?

As many people have noticed, while experimenting with Entity Systems for their games, an ES is very easy to integrate with Event-driven programming.

You’re changing raw data which has no side-effects; that makes it very easy to write generic code that automatically converts every “change” into an “Event object” that the rest of your app / game can programmatically inspect.

With an ES, we’re going to use a Journal to record exactly what happened to your entire game-state, at all times, and in all places.

Journals in AAA Gamedev

To be clear: in an abstract sense this is nothing new, games have been doing “journalling” (But not calling it that!) since the 1990’s, when it was discovered to be a very effective way of making multiplayer / internet games run reliably while sending minimal data over slow network connections. Read about the early RTS implementations (Anything from Patt Wyatt’s blog, or the old Ensemble Studios gamasutra piece about 10,000 archers IIRC).

What makes this a little different is that we’re going to be a lot more … explicit … about it. Our Entity Journal will come with its own cross-platform API that’s easy to write tools for.

Considerations

a.k.a. “lessons learned in software design and architecture over many years and from standing on the shoulders of giants”

  1. The API itself might be best expressed using one of the API’s we’re already using to access and/or manage data elsewhere
    • aka: the “don’t screw-up like XML version 1 screwed up” rule; XML (a data langage) invented a second language to describe its data. Until they woke up one day and said WAIT A MINUTE … WE ALREADY HAVE A DATA LANGUAGE!
  2. Whatever first-class objects exist in the API need to be few, simple, and generic
    • Journals are a bit like Entity Systems: the simpler the API, the more robust and easier to optimize performance – and re-use with all the world’s generic data
  3. The Journal is a lot like Quake3’s networking compression; however we build it, it OUGHT to be compatible with that when finished
    • i.e. once this is implemented, it ought to be re-usable “in server mode” with almost no code changes to provide a multi-host non-uniform distributed event log and playback system. “ought to”.
  4. From a tools perspective, we want to click on any Journal event and see the exact state of the entire Game at that point in time
    • Game Debugging … on steroids. BECAUSE WE CAN, THAT’S WHY
  5. …which’ll destroy C#’s crappy Garbage Collector.
    • So we’d better be aggressive about using weak references and/or converting “old” data into “summary” data, and dumping the data itself
  6. Just like an FS Journal, the ES Journal should allow us to reconstruct our entire game data at any point in time, so that we never, ever lose data, no matter how many bugs in Unity we encounter
    • Unity: your refusal to debug and TEST your own frickin’ “undo” implementation? Yeah. I’m looking at YOU!
    • Make a stupid mistake in your game-code and accidentally delete critical stuff while in Editor? Not done a git-commit recently? NO WORRIES! GO BACK IN TIME AND RELOAD IT! YEAH!
    • Find a bug in the Entity System itself? (shock! Horror! But also: guaranteed to happen) … well, we’ve got you covered ;)
    • …(which leads to the next point)
  7. This absolutely unfailingly guaranteeably … must not have any bugs in it.
    • Unit Tests FTW
    • This is our equivalent to Unity’s Serialization: everything will rely upon the assumption that “the Journal will take care of it”, making the Journal our weakest link / most critical code
    • KISS: the simpler we keep the implementation AND the API, the more confident we can be that it works at all times in all situations

Building it

Yeah, well … that’s going to be a much longer article (or three!)

Want more? Want to support this ES in future?

…Sign up here to be kept up-to-date on the project’s upcoming Kickstarter / Patreon / whatever-it-ends-up-beign (if you’re already signed up, it won’t add you again)

Epic saga of Unity3D deserialization of arbitrary Objects/Classes

(a summary writeup of the things I tried – based on this Unity blog post: blogs.unity3d.com/2014/06/24/serialization-in-unity/ – to get Unity 4.5 to correctly serialize/deserialize simple object graphs)

UPDATE: I belatedly discovered that EditorUtility.setDirty() is fundamental to Unity; if you have even one single call of this missing, Unity will corrupt data when you save the project. In some of the cases below, where everything was fine EXCEPT on fresh startup, I suspect that was the real problem: a missing setDirty(). I thought this method was cosmetic, but tragically: no.

This is not easy to read, it’s bullet points summarising approximately 2 weeks of testing and deciphering (plus a month or so spent learning-the-hard-way the things that are in the Unity blog post above. Note that the blog post only came out very recently! Until then, you had to discover this stuff by trial and error)

Serializable-thing:

– example on blog won’t work if e.g. your Class is an object graph.
– e.g. class Room { List doors; }. class Door { Door otherDoor; }
– …can’t be serialized. Can’t be stored as a struct, unless you have a GUID per “Door” instance. That’s no surprise, didn’t bother me: This is standard in most serialization systems.
– So we go on a quest to create a GUID…

GUID1:

– class Door : ISerializeCallback { Door otherDoor; public string guid = Guid.NewGuid().ToString(); /* use OnBefore / OnAfter callbacks to store the guid of the other door / find the door from guid */ }

Unity inspector lists:

– if you add an item to the list, 2 things corrupt your data:
1. all existing objects are NOT MOVED, but are CLONED into new list. This breaks our GUID.
2. the new item is a carbon-copy clone of the old – so it ends up with the SAME GUID (ouch)

GUID2:

– class Door { [SerializeField]private string _guid = Guid.NewGuid().ToString(); }
– now the inspector no longer clones the guid … BUT … instead it sets it to null.
– it seems to run the constructor, then use serialization to delete all values it finds

GUID3:

– class Door { private string _guid = Guid.NewGuid().ToString(); public string serializedGuid; /** use serialize callbacks to maintain serializedGuid */ }
– Disable the Editor’s list-renderer: it has at least two major bugs that corrupt data. Use the UnityEditorInternal.ReorderableList.
– NB: ReorderableList – with no customization – does not have either of the two bugs I saw with built-in Inspector’s lists.
– NB: as a bonus, with RL, we can avoid the “run constructor, delete all data, deserialize, reserialize” cycle, and directly create a new, blank instance with a safely generated – FRESH! – Guid.

Ctrl-D in Editor:

– breaks this, because we have no idea if a deserialize event comes from “ctrl-d” or from “read back from disk” (or from a prefab instantiating into the scene).

GUID4:

– class Door { public Room serializedRoom; private string _guid; /** use callbacks to peek into the serialized room, and use the guid as a “local ID within this room” */ }
– Because we’re now leaning on Room (which is a GameObject) to provide part of our GUID, in theory we don’t care about prefab/ctrl-d/etc — the code inside MonoBehaviour will automatically separate-out those cases for us.

Work with everything except prefabs, I think

– eventually gave up, removed the GUID completely, and changed game design to only allow ONE door to connect any pair of rooms. Yes, I was desperate!

THIS WORKS! Until you restart Unity:

– restarting unity causes this to deserialize on a different thread, and now you’re NOT ALLOWED to peek into the serialized room. You cannot use it as a substitute ID. You get crashes at load-time).
– …apart from that, this works fine. We have a solution that worked for ctrl-D, for prefabs.

GUID5:

– class Door { public Room serializedRoom; private bool _isUnityStillOnBackgroundThread; /** use the bool to say “deserialize happened but the data is NOT VALID, DONT RUN ANY METHODS” */ }
– …also use an AutoRun script with [InitializeOnLoad] and “EditorApplication.update += RunOnce;”
– …the autorun script waits for Unity to startup, then goes and Finds all objects, and finds all Rooms, all Doors — and does the fixup.

Fail, but can’t be debugged:

– I have no idea why this failed. It appeared perfect. Simply moving code that worked inside the deserialize (but crashed because it was run on “wrong” thread) out into the post-launc RunOnce method … silently fails. No errors, but no data.
– NB: this is impossible to debug, because we can’t even call ToString() on the deserialize method :(.

Conclusion

Give up. Make 10,000’s of Component instances instead. Waste memory, kill performance (especially at runtime: imagine how bad the AI’s going to be iterating over this!) but hey – IT WILL WORK. Because it leans on the built-in hacks that MonoBehaviour has had for years (which we’ve all been using millions of times a day without realising / appreciating ;)).

Off-peak tickets valid in 2013 on Southern trains

UK train companies have an expensive fare (“Peak”) for early morning commuters, and a normal fare for everyone else. Each company has unique rules on time/validity. Southern Rail’s section on fares on their website recognizes this, but refuses to say when their normal (“Off Peak”) fares are valid. (see below for official times as of August 2013)
Continue reading

SmartGit review: don’t use it.

Just don’t use it, whatever you do.

It’s hopelessly buggy, it is the worst possible git client you could use.

And … for the third time, it just corrupted a git repository. This time I know it wasn’t user-error, it was just SmartGit.

Totally unforgivable.

Natural Keyboards – don’t exist any more?

EDIT: no results on shopping sites, no results on Amazon … until someone told me to search for “keyboard 5000” or “keyboard 6000” – and suddenly appears this thing of awesome beauty: small, light, and Bluetooth!

I can’t find them. All I can find is a MONSTROUS thing from Microsoft that weighs a tonne. Nothing from the other manufacturers (!). And the MS one sadly is no use with a laptop :(.

A standard keyboard is very bad for your wrists. At the small end of the scale: discomfort, cramp, and bad posture. At the nasty end: RSI, long-term back/neck damage, tendonitis, etc.

So why is it that you can no longer buy the so called “natural” keyboards? They’re split down the centre, and/or curved, so that your wrists are at a normal angle that reduces strain and improves posture.

In Brighton, the shops I tried (from major high-street chains down to specialist independent computer shops) that sell 5-10 different keyboards each … claimed they had never even heard of / seen such a thing, and several salespeople suggested they’re a figment of my imagination! Yikes.

I’ve still got a couple of these keyboards, but I always bought PS2 ones, sometimes buying 2nd hand (when Microsoft stopped manufacturing them) so that I’d have an extra USB socket free.

Now I’ve got laptops with USB slots, but no PS2 … argh!

Walk gently upon this earth

Walk gently upon this earth
For we are but passing through
In our eyes the pains of life
And in our hearts true love

But all it is to be
Is covered in a signal phrase:
The meeting in ice and fire
Of what we are and what others request

Take this branch and run
Every breath one with haste
So that at the end you might say
“I have no regrets…”

Copyright greatly reduced European growth?

I’ve long felt this intuitively to be true, but the weight of opinion and accepted “evidence” has made the idea laughable: Copyright has no social benefit.

So this article in Spiegel Online is fascinating:

No Copyright Law – The Real Reason for Germany’s Industrial Expansion?

(I’ve been in hospital recently, just catching up now on old posts, but I see other outlets such as Wired have finally caught-on to this too – I haven’t read their take on this yet)

It appears to be mostly centered on a contrast between two similarly advanced nations, England and Germany, which had radically different copyright laws at the time.

“In Great Britain, people were dependent on the medieval method of hearsay for the dissemination of this useful, modern knowledge”, whereas “The prospect of a wide readership motivated scientists in particular to publish the results of their research”.

…and so we see a key part of modern research and academia, the concept of publishing your work: born from the *abscence* of Copyright.

Fixing Xcode’s Default Project templates (write iPhone apps more easily)

This post shows how to fix one of the biggest time-wasting aspects of Xcode: the default project. Every time you start writing a new app, you first typically waste 15-30 minutes “un-****ing” Apple’s defaults. The defaults are terrible.

e.g. they are effectively unusable with Apple’s own SVN integration (Apple clearly doesn’t use SVN internally), unless you are the only person working on your project (“no teams allowed”). But the good news is … most of this can be fixed!
Continue reading

if youre waiting for me right now…

…I’m really.Sorry, just very very busy right.now!

Welcoming some new people to Red.Glasses (my iPhone development / agency company), and lots of projects all happening at once.

Given how many people I see out of work, I’m delighted to.be bucking the trend, but until.our new people get.up.to.speed, its a bit too much, and I’m looking forward to things calming down a bit.

PS: typos due to the nexus one and its broken touch sensor and badly designed keyboard. Don’t have time to get to a PC to.post: )

Thunderbried 3.0.x: make it download ONLY the selected folders

(Third and final Thunderbird post (promise!))

I had an idea; maybe if I deleted TB, then restarted it, and forced it to go offline first, THEN configured folders, THEN allowed it to connect, it might. just. work.

Of course, doing so discovered some obvious bugs in TB. Sigh. I got it mostly working in the end, after some false starts. So, if this is something you want to try, here’s how to do it:

1. Start TB, and give it your account details.

You want it to look like this (see note above; if you don’t do this correctly, you’ll get different settings, with no SSL/TLS)

Picture 95

2. QUICKLY go to offline mode (next step) or … unplug your internet cable – this may be easier

Why on *earth* do you have to do this?

Well … there’s a major bug in TB. If you do NOT create an account *the first time the app launches*, then you can never create a Gmail account. The code that configures email accounts *will not run* after that first launch.

Really, I’m serious: try it. It will – if you’re lucky – try to configure your gmail account with all encryption turned off, thereby sharing your emails with everyone on the network. Nothing you can do will make it accept SSL/TLS. Even typing the port number manually, it fails to work.

BUT … if you allow it to configure the account on first-run, it will correctly setup everything as SSL/TLS

3. Go to offline mode

Picture 96

4. Go to Synchronization settings (from the same menu – File menu)

Picture 97

Click the ADVANCED button (it’s not advanced, it’s basic, but this is a hangover from the Mozilla Mail days, when the GUI for configuring the app was poorly arranged)

5. De-select the folders that Thunderbird should never have pre-selected in the first place

NB: this is language dependent! Google “kindly” names some of these folders depending on your regional language. Great idea, unfortunately it makes config / instructions a bit more tricky.

In the UK (this is different in USA!), the folders you must untick are:

  • Bin
  • Trash
  • [Google Mail]
  • [Google Mail]Bin

Like this:
Picture 98

and this:

6. Are you finished ? No, you aren’t; There’s some “magic” folders left…

On the left, under Inbox, there are a couple of magic folders that don’t appear in the synch list – but will synch automatically, and kill your disk space. One of them in particular: “All Mail” (that is: every single email that Gmail has for you, ever, anywhere. All unsorted)

You have to right-click, and go to the 3rd tab, and deselect the checkbox, to make this safe:

Picture 101

You MUST also do a difficult one – the Trash folder.

Thunderbird will *not allow you* to deselect this one, but you have to expand it, and inside find the “Bin” and “Trash” folders, and manually deselect them as with “All Mail”.

Picture 102

NB: in the attached screenshot, I hadn’t realised this was needed, so you can see it’s downloaded my whole Trash folder from the server. Ugh.

NB: yes, in theory you have *already* deselected those folders. But with Gmail you can easily end up with two copies of the folders, both with the same name, but in different subfolders. Depends which clients you’ve used with Gmail in the past (ironically, in my case, they exist because I ran an earlier version of Thunderbird, where the Gmail integration wasn’t so good).

(you may also want to do the same for Sent Mail and Spam – depending on personal preference / need)

Picture 100

7. Finally (finally!) you can de-enable Work Offline, from the File menu

Now what?

Well, nothing happens. Because Thunderbird is “magic!”.

If you wait long enough, and you’re lucky, it will magically start to synch.

If you don’t like waiting, staring at a computer, you can force it to download – go to the File menu, and from the Offline submenu, select Download now.

HOWEVER once again there are issues: this will work outside the normal Activity Window system, so your download will be in the foreground, and doesn’t even appear as an “Activity”. Sigh. So, you might want to try waiting for the “magic” to happen instead, and hope you get lucky.

(in theory, it should be a 10 minute wait at most, but earlier versions of TB 3 used to have severe problems with this, sometimes never synching at all)

Summary

This is still imperfect. Thunderbird insists on “indexing” all 5,000 of my Sent Mail contents – although at least it’s no longer trying to download them all locally. It also insists on “indexing” the contents of things like “All Mail”, which is completely incorrect.

But I can find no way to remove the annoying “All Mail” folder, and if you ever click on it accidentally, then BAM! the expensive processing starts. The best you can do is use the little buttons at the top left hand side to switch mode to ”

Oh – and you aren’t allowed to stop it. The Activity Manager is missing a feature (which is already in bug reports from last year – I remember seeing people ask for it) : a “click to cancel” button for each activity.

Hopefully, though, so long as you remember to avoid clicking on those magic folders, you can at least make TB work normally…

Ditto for all the folders we chose not to download locally … and, ditto, I can’t find a way to remove them from the list, so there’s no way to stop myself from accidentally clicking one.

There are a few other things you should do too, to make up for the incorrect GMail setup. For instance, you should go to Thunderbird settings, and DISABLE the “save copy of messages in Sent folder”, because GMail will automatically do that on the server side anyway.

PS: … ARRRRRRRRRRGGGGGHHHHH!!!!!

I was just about to press the post button, when I noticed something horrific.

TB just started downloading the 5,000 emails in a “Bin” folder … somewhere … despite my very clear instructions not to.

This is a buggy load of crap. Try the workarounds listed in this post – see if they work for you. But, ultimately “Don’t use it” is my advice.

Earth Eternal: Short Review

It’s a REALLY short review (but bear with me on this): they wouldn’t allow me to play.

That came as a major shock. I didn’t set out to write about EE, I just wanted to have a look for myself, but this changed my mind. I’m probably not the target audience anyway, so take this with salt, but IMHO it raises some interesting points.

Alpha is the new closed-beta; closed beta is the new beta; beta is the new launch

The game is officially in Beta, I believe. Is that an excuse for what follows?

IMHO and IME: No. Within the context of “MMO’s”, and especially in the context of the web (look at the various Google products that are technically still in beta), you can no longer hide behind that as you once could.

I did experience a few small parts of the EE experience along the way, so here they are:

  1. You are not allowed to play the game straight-off; you are required to provide personal info etc before even being shown a screenshot of the game, let alone running the game itself
  2. Copy/Paste is disabled in the registration form. It works for the “name” field, but not for the email and password fields.
  3. My main email address is on a domain name that “Email provider is not supported, try another email address.”

(in desperation, I tried bugmenot.com, but unfortunately Sparkplay has already deleted the only account on there)

For any mainstream PC MMO you’d call this a bizarre over-reaction on my part (most of them would already have taken my credit-card number, so few people will stop to quibble about email address issues). But this isn’t one of those games…

“Finally, a real MMO for your browser”

(that’s the Earth Eternal tagline)

O, RLY?

Let’s get this straight. 15 years after the web became popular, you’re telling me that “the browser-experience” is:

  1. It’s Windows-only (!!!) [BTW: despite *already knowing* that I’m running a Mac, they take your personal info *before* telling you this]
  2. I’m not allowed to try the product before I use it
  3. I’m not allowed to use an email address of my choice, I have to use one that the website-ownser “approves” of
  4. The website-owner specifically writes code to disable basic features of my web browser

In a world of Kongregate – where I can play several MMO’s *right now*, on any computer, some of them with no signup – you’ve got to be kidding me.

I’ve known Matt for years, and I’ve watched with interest the trajectory of Achaea / IRE / Sparkplay. It’s been an interesting journey, from the years of declaring that 3D graphics were great but unnecessary for commercial viability (with his own Achaea the poster-child), to today’s VC-funded 3D MMO.

There’s an irony there, especially if you dig out Matt’s frequent public statements on 3D games in the past – but in context it all makes sense. I mention it pre-emptively, so I can knock it down :). Yes, Matt said such things – but at the time he also actively proved that you could make a living off non-3D games. He showed that with controlled budgets, intelligent business models, and controlled scope … it worked. It was small revenues, small profits, but it was profitable. Many of the lessons that he shared have been picked up over the years and re-used by 3D games in the race to drive down their own costs, and adopt more competitive business models.

So … I don’t care about the change in stance (hey, the world has changed a lot in that time), but … I do care that someone who taught so many people how to avoid the high-barrier-to-entry business models manages to shut me out of playing his first graphical MMO.

Compare and contrast…

I’ve already mentioned Kongregate. The vast majority of games there require no login, including some small (but grind-tastic) MMOs. The most recent substantial MMO to appear on there *does* require that you already have a Kong account, sadly. (Although, incidentally, if you install the Kong Facebook app, it silently creates an invisible account + logs you in, so it’s possible you’d play that MMO without ever knowingly creating an account)

I suspect that Sherwood still doesn’t require reg – when I used to play, it certainly didn’t, and IIRC from conversations with Gene, this was something he actively chose to retain. Ironically, I couldn’t double-check this: Adobe’s current installer for Shockwave has a chunk of badly written code that attempts to shutdown “all web browsers” before it will run – even if I’m only installing in one of the browsers.

So … EE may be a great game … and it may be launchable from within a browser … but it’s still fighting the browser as much as complementing it.

Updated – Simple maths game

I was too busy to post at the time, but Apple recently approved an update to my first ever iPhone app [iTunes Store link].

I’m using this app as a personal experiment in designing educational and learning games. Unfortunately, this update took something like 4 months to get through submission (rejected twice, first time for a missing “cancel” button, second time for using private APIs) … so it’s been hugely delayed.

Last year, I spent a lot of time investigating a new idea for a startup that would make online games used solely for education. This is a clone of one of the demo games we made as part of the investor presentation.

Picture 11

Picture 12

summation front title

The “experimental” part is that I’ve been trying out different variations on the social and online aspects. Most of that is missing in the current version – to get it through submission, I ended up ripping out most of it.

But now that it’s been accepted, I’ll be updating it a lot more, gradually adding features back in (e.g. Facebook integration, which I originally had working a month before Facebook Connect went live).

By the way … For the record, although the app is a paid one, and I’ve made a bunch of apps since, I’ve never earned a penny from this first one – it’s never hit the minimum threshold of payments (approx $250) before Apple actually pays you.

Heavy Traffic: 750,000 hits in 3 days

If I seem a little distracted …

2 weeks ago, I started a small blog called App Rejections. Here’s the traffic graph for the first two weeks. The tallest peak over towards the right is 25,000 unique visitors hitting the site:

traffic graph ar 3 days

It could have been worse; being a die-hard pessimist when it comes to server management, I’d left the webserver “throttled” to a fraction of max connections. The jumps in traffic when I selectively removed that throttling suggest that overall perhaps 10% of visitors couldn’t get through (as high as 35% at peak times).
Continue reading

Google: “don’t be evil, be passive-aggressive”

This week, Google decided to once more actively break Gmail. It’s getting to the point where even Hotmail may provide a considerably better service (even bearing in mind the horrors of Microsoft Passport!).

EDIT: Within a few hours of writing this, my gmail has reverted to normal behaviour. I *was* getting the HTML reply for all emails, now I’m getting it for none. I had wondered whether it was context specific – but now I’m getting normal emails even when replying to HTML ones, so apparently not.

GOOGLE IS WATCHING YOU!

I’ve no idea why this is, but here’s a tongue-in-cheek suggestion: Google *really really wants* to be evil. But they’ve made so much news out of their company motto that they don’t believe they can get away with that.

So, instead, they just act passive-aggressive.
Continue reading

OS X: never let someone else use your computer

EDIT:
– unplugging everything, rebooting, then plugging back in seems to have re-instated the other users’ settings. Yay! Although … this seems very fragile / lucky / random, so I fear it might break again next time I reboot…

Even if you create an entirely separate user-account for them, with their own settings … if they happen to setup their keyboard differently, then:

  1. It permanently alters the keyboard settings, and there is no “reset”, nor “choose a different setup” button
  2. It also overwrites the keyboard settings for all other users of the computer, whether they want it or not
  3. It doesn’t even require admin privs – the user is just allowed to overwrite everyone else’s profile without question (including admin profiles)

Sigh. Yet again, a classic example: Apple has no idea how to make software. Someone at Apple *deliberately* broke this (they chose to remove the setup button after it was first setup), so that not only is the software buggy, but there’s nothing the user can do to fix it :(.

EDIT: googling suggests that the two ways to fix this are 1) mess with a lot of low-level config that will probably lock you out of your keyboard entirely, or 2) format your Mac and re-install from scratch. Hilarious. I’ll try the local Apple store, but from previous experience their “Genius” staff don’t seem to know much beyond the obvious, so I’m not hopeful. Sigh.

Venues with free wifi in Brighton & Hove

Info correct and checked: Summer 2009.

Scroll down for detailed reviews/explanations of each venue. If you know of others, feel free to add a comment at the bottom of this page. Please use the same format (One line with: name/type/secure/rating/sockets, then your own text review). I’ll try to visit them myself, and add my own reviews to the main article when I get time.

Venues

Note: each place is listed with 5 pieces of info:
– Name of venue
– Type of venue (restaurant, pub, cafe, etc)
– Is their Wifi encrypted? (see this article for why/how this matters)
– Rating (1 = terrible, 5 = perfect)
– Tables that have Electric sockets (either single or double), for recharging your laptop – how many in the venue?

  • The Florist – Pub – Secure 5/5 (E:3)
  • The Eddy – Pub – Secure 4/5 (E: 2)
  • Regency Tavern – Pub – Secure 4/5 (E: 1)
  • Earth and Stars – Pub – Insecure 4/5 (E: 2)
  • Hampton Arms – Pub – Insecure 3/5 (E:?)
  • Windmill – Pub – secure – 3/5 (E: some)
  • The Tin Drum – Restaurant/Pub – Insecure 3/5 (E: 2)
  • The Duke of Wellington – Pub – Secure 3/5 (E: 3)
  • Prince of Wales – Pub – Insecure 2/5 (E:?)
  • Cafe 37 – Internet Cafe – Secure 1/5 (E: 0)
  • Cafe Nero – Cafe – Secure 1/5 (E: ?)
  • Cafe Nia – Restaurant – Secure 1/5 (E: 1 – pay!)

And, the odd one out:

  • Taylor St Barista – Cafe – None 0/5 (E:0)

(read on for details + map links)
Continue reading