Sunday 2 December 2007

Fix for error when opening web pages in Firefox on Windows

Many of you may have come across the "Windows cannot find <url or path to file>" error when opening Internet shortcuts/HTML pages using Firefox as your default browser. Windows will open the link/page fine for you, but will always display this annoying notification if you don't have any previous instances of Firefox running. The error is described here and Mozilla is well aware of it, but it still has not been fixed (as of version 2.0.0.11). Unfortunately, if you perform the fix as suggested on the linked page, you will remove the error temporarily but it will return when the next revision of Firefox gets installed. Until we all get an official fix, I've created a little Powershell script that might be handy to remove the error. Just run it once after each update of Firefox and the irritating message should go away. Administrator privileges should *not* be required since it only changes the registry for the current user.

(Warning: I've only tested the script on Vista, but I'm confident it should work equally well on XP.)

Monday 5 November 2007

Visual Studio Express

I finally can't resist a quick rant about VS Express...

I'm currently in the process of designing a fairly complicated website and as part of this it became necessary that I develop a custom ASP.NET Server Control as a component to be used by a couple pages within the site. Now, I read my way through a few tutorials about this (including some of the MSDN docs), and concluding it was simple enough I created a simple class inheriting from WebControl and specifying the ToolboxData attribute, but soon ran into problems. It seems that another annoying limitation of the Express editions of Visual Studio is that you can't develop a website and an associated library (a control library in this case) side by side, since Visual Web Developer locks the DLL file when running its web server. This of course means you can't build any referenced library while the web server is running. Okay, so this by itself is expected (albeit irritating) behaviour and there's probably little anyone could do about it - but then I thought that I would at least be able to build the referenced library once I'd stopped the web server. To my regret I found that Visual WD maintains the lock on the referenced DLL, forcing me to completely close off the IDE before I can rebuild the helper library (in VB.NET or VC# Express), and then reload the IDE and restart the webserver before I can continue testing! Well I think you see the point by now...

I've always been quite pleased since Microsoft made available their main programming languages to those of us (mainly students) who can't afford the paid editions or aren't inclined to get it over BitTorrent. However, I am surely starting to lament the absence of a .NET IDE that can handle multiple language/project types...

Monday 22 October 2007

Angel Messenger website launched

This is just a quick post to let you know that the website for Angel Messenger, my .NET graphical client for the Messenger.NET MSN messaging library, has been launched. The website currently does not contain much, but we are hoping to expand and provide online documentation and support forums. Long-term, I am also considereing making a Silverlight/AJAX interface, Angel Web Messenger, which will become part of the website. As part of this, I'm looking for someone to create some graphics for both the website and client, so if anyone is interested, please reply to this blog or via the SourceForge project. The team should be announcing the v0.2.1 and soon after the v0.3.0 releases, so please check the website for any news. In the meanwhile, I would be glad to hear your thoughts and suggestions on the latest release of the client!

Sunday 14 October 2007

Messenger.NET - version 0.2.0

The second releases of Messenger.NET, a .NET 2.0 library and client for accessing the MSN messaging services, are now available for download. We (the team) have added numerous new features to version 0.2.0, and a lot of important bug fixes. This version, though still in the alpha stages, can probably be considered desktop-usable (though I warn you it has a limited number of features still!). You can check out the release notes/change logs here (for the library) and here (for the client). We're hoping to make the v0.2.1 and v0.2.2 releases very soon, hopefully with the help of your feedback and bug reports.

I'm also now announcing that the client, previously named Messenger.NET (as is the library), will be renamed to Angel Messenger for the v0.3.0/v0.4.0 releases. A website for the client, www.angel-messenger.com, is also in development - we hope to include some basic online (and also local) documentation for the next releases of the client. In the meantime, feel free to use the forums on SourceForge.net.

Saturday 29 September 2007

WiX

It's been a long time since my last post, and if I've any excuse it's being busy with several of my projects (among other things), about which I hope to make some blog posts soon, but for the moment I have a bit of promoting to do for WiX. If you haven't come across it before, it stands for Windows Installer XML and is a toolset for creating Windows Installer packages (probably best known to you in the context of MSI setups) from XML source. It's an official Microsoft product but it's hosted on SourceForge, so it's open source and has dedicated developer base. In the past I've experimented with Inno Setup before and I know many developers use this tool or other popular ones like Nullsoft to create their setup packages. Despite their advantages of being well supported and simple to use programs to create installers, I've found WiX has a lot to offer. Here's a few of the reasons I've switched over:
  • WiX takes a declarative approach to installing packages on a system, rather than the traditional imperative approach taken by most installer systems on Windows. This basically means that instead of telling the system what to do in a step-by-step fashion, it tells it what state the system should end up in after installation: this includes files, shortcuts, registry entries, and all the other possible tasks you might want your installer to perform. The sorts of problems like unused files and shortcuts remaining on the user's system become virtually non-existent when taking this approach. As soon as you start learning WiX, you'll also soon see why XML is the perfect language for this. Admittedly, it is a slight downside that you have to write your installer source by hand, but a huge advantage is its powerful integrated build support. (I'm just using Powershell scripts to build the installer, but as a friend suggested you could take it the whole way and integrate it with the MSBuild XML files if you're using Visual Studio). Even so, the XML format is surprisingly simple and there are detailed schemas to help write the code accurately. If you still prefer to develop installers by GUI (although I'd probably recommend against it as it may limit you in some ways and hide the true versatility of WiX), there's a few GUI interfaces currently being developed.
  • Developers of the installer can independently write their own WXS source files, and then compile and link them without any moving around of XML code.
  • Great support for localisation/custom languages, as far as I can see - though I must admit I've only read sections about it and not actually tested it out yet.
  • I was amazed to read that the entire installer for MS Office 2007 was created using WiX - there really shouldn't be any reason to doubt its power!
  • If you need more convincing, try reading the tutorial (it assumes you're a complete beginner, and probably explains some of the points here better than me) or even glancing at the manual.

This is just a brief outline of what WiX can do. I strongly recommend you head over to the site, download the toolset (v2.0 is probably best for now, considering it's the most stable and the tutorial is written specifically for it). You can find the tutorial here, but also as a link on the page along with the official documentation. I'm still a total beginner at WiX myself - reading the tutorial, experimenting with a few of its more simple features, and looking at some interesting blog posts about it - but I can already undoubtedly say it's a good move away from the typical unreliable setup.exe installers that have plagued Windows users in the past.

Friday 24 August 2007

Messenger.NET - first releases!

Please head over here to download the first releases (v0.1.0 alpha) of both my client and library of Messenger.NET.

The library provides access to most of the standard features of the MSN messenger services in a simple interface. The client supports sign in (with multiple accounts through multiple instances of the program), manipulation of the contact list, and basic IM conversations. For full information on the features of the client and library, please view the release notes. I'm looking to improve both hugely in the near future, so look forward to more releases very soon! Also, I'm welcoming anyone with a good knowledge of network or GUI programming in VB.NET on to the team, so please reply to this post if you're interested.

Monday 6 August 2007

Visual Studio 2008

I have recently installed the beta 2 releases of both VB.NET & VC#.NET 2008, and hoping to experiment with some of the more interesting to features like WPF and LINQ syntax, I found that I there were no templates installed at all. In fact, because of this, I cannot even create a blank project. The best I can do is create blank files in Windows Explorer and edit them, or upgrade existing projects. Now, of course I'm considering this a problem with my personal installation, but considering that I have a nice working copy of Vista installed (ignoring all its many usual problems, but remembering that VS.NET 2008 ought to be built for Vista) and that the Visual Studio Express MSI installers ran cleanly, I havne't been to impressed so far. I will keep investigating and post any solution I find here for others who may be experiencing the same/similar problems. To conclude: is this yet another reason to ditch development on Windows and move to Linux, where it's becoming almost as easy to develop in C# anyway? Anyway, perhaps you can look forward to some of my .NET projects being ported to Linux some time soon, especially Messenger.NET, which I'll be looking to bind to telepathy (most likely with telepath-sharp).

Wednesday 25 July 2007

My Windows Shell

QuickShell is my first attempt at writing a shell for Windows (using the console API). Originally I was planning for it to replace the infamous cmd.exe (at least among many users of Unix shells), but since PowerShell has been released, I've been continuing it mainly because of my fondness for CLIs. In addition, perhaps it may turn out to be quite useful as a management console for one of several possible future projects (after a bit of adaptation, of course).

I've linked to my demo release at the bottom of the post, with a brief description of some of the features. No installer will be required to run it, since I want to keep the whole thing as lightweight as possible - just unzip and run the shortcut. At the moment, it has a rather short feature list, but I've already added a few handy things, primarily tab and double-tab completion, which I explain in my release notes. It generally has an interface more similar to PowerShell rather than cmd.exe (in fact I tried to make it look and feel as different from cmd.exe as possible). Still, the CD and DIR commands are built in, and also registry browsing alongside the usual filesystem browsing, a great little feature that I again copied from PowerShell. To sum it up: the framework and UI is there, alongside the start of a command system, but you'll have to wait a bit longer for the interesting parts.

Of course, since I'm writing it, the whole thing is in .NET. Apart from VB.NET & C# being the only real languages I know well, it does offer the great opportunity to add .NET-style scripting, something that could really enhance the power of the shell. Aside from that, I've had to dig into some MSDN documentation a bit to access some of the lower-level console functions (which can be used alongside the built-in Console class), but overall .NET really isn't throwing up any big protests.

Given a bit more solid progress on the shell, I am hoping to start up a small CodePlex project quite soon. For the moment, however, you'll have to make do with only binary releases.

Release v0.1.0
The first demo release is now available here for download.
Download, extract to any folder then place the included link somewhere convenient (or leave it in the same folder). Either way, you'll have to change the Target property of the link to point to wherever you unzipped the EXE - I recommend you don't run the EXE straight simply because the link has some configuration that makes the console look and feel a lot better. Thanks to Windows for not supporting relative links...

A few things to note before you use it:
  • Registry can be browsed by specifying an absolute or relative path with the CD command, such as HKLM:\Software. The DIR command is also available for browsing the registry, but tab completion is not yet implemented.
  • To run a program, just type it's name (with or without the EXE extension). The shell will search the path environment variable for any executables with the name, and if none are found it will try to run it from the current directory.
  • Up/down arrows allow you to scroll through command history.
  • Pressing the Tab key while typing an argument will complete the argument as far as it can. If there is still any ambiguity in the text of the argument then the console will beep. This is currently implemented only for the CD command, but the generic framework allows for application to any command.
  • If the console beeps after the first Tab to indicate that the text of the argument is still ambiguous, then you may press the Tab key again to print out below a list of all possible values for the argument. The current command line will be retained.
  • In addition, pressing Ctrl+R whilst typing an argument will cycle through all the possible values that match what you had typed
  • Other basic commands that have been implemented are: exit, clear.

Saturday 30 June 2007

Messenger.NET

I've recently been working on a MSN Messenger library & client for .NET. Despite the terrible lack of formal documentation on the protocol, I've managed to piece together a very functional high-level implementation of the MSNP 13 protocol. This will eventually be updated to MSNP 15 (perhaps using MSNP 14 as a stepping stone), which is the current version used my Windows Live messenger at the time of writing, so I believe. I will update this blog regularly with any important news on the project, but I'm also welcoming any new programmers to help at the moment. The project is hosted here, on SourceForge, so there's a handy SVN already in place, as well as all the other standard project features. Any applicants should reply to this blog post with contact information, or directly on SourceForge.net.

Wednesday 30 May 2007

Ubuntu on Windows

After all my attempts to install (K)Ubuntu side by side with Vista, I may have at last found a good solution if it does what it says. Dual-boot methods and virtual machines have so far either been bigger hassles then they seemed or simply failed to operate. Wubi 7.04 claims to install Ubuntu (*wonders whether there's an installer for the KDE/Kubuntu version too now, but will suffer with GNOME*) as a program in the start menu and will run off a virtual drive and virtual memory. Likely I will wait a short while until it's out of beta and then cautiously attempt to run after doing a complete back up, which is much overdue. The reviews on the CNET site were mixed, but I'll be adding my own here for anyone interested to read.

Thursday 24 May 2007

XNA inside Windows Forms

XNA was designed to be as simple as possible to set up and use - it's main purpose was to take the low-level graphics device/DirectX initialisation and handling away from the game developer. However, this came at the price of usability, and anyone who's tried to use XNA inside standard Windows Forms will have to go back to the old Managed DirectX way and re-write all the low level code again, not to mention the handling of game components and services typically provided by the XNA game class. Forunately, Nuclex has released their XNA UserControl component to allow developers to easily integrate XNA into their Windows Forms applications - an absolute necessity when designing a complex map editor, and useful in other situations too.

You can download it here, along with a demo game (Pong).

Saturday 12 May 2007

Desktop Tower Defence

As good of an online time waster as any: you can play Desktop Tower Defence here.
It seems rather like the sort of user-made maps many gamers play in big strategy games, so I doubt it's really an innovative game, but it is well made and pretty challenging, even on normal mode!

Thursday 26 April 2007

Professional XNA Game Programming - Source Code

Here's a very nice game demo that's just been released, from the Professional XNA Game Programming book. You can download the source code or installer (completely free), and read more about it from Ziggy's blog. It would be interested to see what sort of tricks the writer is using for making this in XNA - I am of course a total newbie to 3D development and perhaps I'll be taking a look at it in the future to extract some useful tips (maybe even buy the book if I stop being so lazy), but it looks like even just the source code could be pretty helpful here so I've posted it for anyone to actually see a nice polished game.

Sunday 8 April 2007

Google Group for MyRPG Engine

This is simply to let you know that the MyRPG Engine (the .NET/XNA game engine that I'm developing) now has a Google Group over here, free for use by anyone for discussion, and hopefully with an upcoming Wiki. Please visit it and post on the discussion board if you have any questions about my engine. Of course currently there's only one demo, but I'm hoping things will pick up with the development soon (in fact I'm just waiting for a few of the team members to finish their current business). In the meanwhile, feel free to post on discussion where I'll be checking recently, but don't expect anything big on there until the next demo release!

Saturday 24 March 2007

MS TechFest Demo

I just came across this video of a demo at a Microsoft Research TechFest booth, but it's probably better if I don't explain it in detail here. Simply put, it's a must-see for an XNA developer and non-developer alike - one of the coolest example of interfacing modern hardware together with some great DirectX gaming technology (a lot of which is XNA in fact!).

My engine/game/world editor - first public demo

At last, my first useful post. Nothing to be hugely excited about, but if you're an XNA/.NET game enthusiast you might like to take a look at a little tech-demo of my engine (entitled MyRPG) and world editor.

Download the 24-03-07 release here.

IMPORTANT: I've found a bug where no error is returned if you do not have the OGG Vorbis codecs for music installed. I will try to package them with my next release, but in the meanwhile please use this link to download and install the codecs (< 1MB).

Any comments are welcome, but remember it's only a little tech demo and has huge gaps. (I have hesitated calling it an alpha version even!) Anyway, have fun with that... I hope to make a following release with a lot more fun aspects (including a flashy particle engine) in the coming days.

Tuesday 20 March 2007

Letting you know I'm still here...

Ok, so this blog has just begun and I've struggled to make my second post in good time :P...
Anyway, I've had some interest in my XNA video/animation library from other developers, and a few possible improvements have come up through my own ideas and those of others. Expect an optional sound stream and even screenshot video capturing in the near future (no guarantee yet though!). My engine demo is slowly improvement and I'll be making a "playable" release (if we're lucky with some fancy particle effects too! - based on the Mercury Particle Engine). With remoting, that's on hold for a while, thanks to the complete lack of information to pass complex types, as I ranted about in my previous post. In, summary, apart from this little bit of XNA you can't expect much for certain, but I will do my best to guarantee that it will be a useful and extensible add-on to any XNA game!

Wednesday 7 March 2007

"Quick" Intro

Alright, so I've created this blog mainly to post about my little (or sometimes rather larger) projects and potential ideas that I'm working on, which means a lot of .NET related stuff. At the moment, this looks like it's going to be XNA (for Windows) and my attempts at a 2D game engine. Of course, I can't resist having a few smaller side projects which usually focus on one or two cool parts of the framework.

Also, I suspect many of the posts will just be links to articles or other blogs on things I randomly come across in my searches. I've already built up a pretty solid collection of links on all sorts of great topics. It's just a matter of filtering through them and passing them on to you now.

As with most blogs, I'm not yet sure where it will take me but in the short term, you can look forward to:
  • My library for playing animation/video in XNA... this seems like a much in demand missing feature of XNA. In addition, I've started on a Music class, which should hopefully mean no more down-sampling your huge WAV files until they get crackly and trying to fit them them into XAct without doubling the total size of your game.
  • Some snippets on how to set up a useful remoting app in .NET (really, an beautifally simple way of getting two programs, whether on the same machine or miles apart, to communicate) - something that many coders have tried to create or replace without even knowing it exists. It seems that even the networking devs like to stay away from this area, and certainly the many newbie articles you might find are fairly useless for doing much more than a "Hello World" across two processes. This is a new area to me, but I've been doing a good bit of experimenting and you might like to know that remoting isn't just slow SOAP/TCP channels but has an IPC method too - that's a Windows equivalent of pipes, for Linux/Unix fans.
  • Finally, an open-source obfuscator for any .NET executable. Ok, don't lose interest yet - I'll be explaining exactly how it works in a future post. In baisc terms, the primary purpose of the thing is to protect executables from being disassembled by mucking around with the MSIL (a friendly, text-based language at a similar level to VM byte code). .NET notoriously has the poorest security against reverse-engineering of any language out there. I suspect even Java, which also uses a VM, has at least *some* measures. And wait - before you criticise the irony of making OS sofware to encourage the development of closed-source, realise that some people really do need to protect their "intellectual property". That's why if this succeeds, it will be the only obfuscator for .NET that's both full-featured and free.
Ok, that's all I have to say. I don't want to defeat the whole purpose of a blog by condensing everything in an essay now, eh? Now hopefully I'll be able to make pretty regular posts here - and expect some good news if you're an XNA developer, as I'll be posting and explaining that library in a day or two.