I just came across Google Charts API. This is basically a chart rendering engine that lives at Google, that you can use to render any piece of arbitrary data and display it. Very cool, and a quick and easy way to make nice looking charts, without having to install/buy a charting library.
Jeff Atwood made a post today talking about the benefits of coding using Javascript frameworks. It totally echos my own thoughts and experiences on it, namely that I used to hate writing client-side code because javascript was so terrible. After discovering first Prototype + Script.aculo.us, and then completely moving to jQuery, my outlook has completely changed. I really do enjoy writing client-side code now. It’s easy, and the results are among the most immediate real programming results you can get, because it runs right there in your browser.
Several times, I’ve come across the need for inheriting constructors in .NET, and I am constantly annoyed that it does not work. I’m writing a business objects layer, and what I’m trying to do is create some constructors in the base class that can initialize the objects in many different ways, eg:
<br /> Public Sub New() ' Create new object using default storage<br /> Public Sub New(ByVal storage as Storage) ' Create new object using specified storage<br /> Public Sub New(ByVal conditions as String, ByVal parameters() as Object) ' Load an object by the specified query, using default storage<br /> Public Sub New(ByVal storage as Storage, ByVal conditions as String, ByVal parameters() as Object) ' Load an object by the specified query<br /> Public Sub New(ByVal id as Object) ' Load an object by the specified primary key, using default storage<br />
I just created a Google Code project for a quick and dirty little app I built, SvnMergeGui. As you may suspect, it’s a GUI to SvnMerge.
It uses ClickOnce for the installation (because it was really easy to do from VisualStudio), and is pointed at the svn repository for updates – so although I’ve never tried it, the theory is that it will have automatic updates built-in. You can download the install files from the project page linked above.
Often when I am writing software I design the user interface first, or at least separately, from the rest of the code. Jeff Atwood describes UI First software development on his blog:
Of course, UI is hard, far harder than coding for developers. It’s tempting to skip the tough part and do what comes naturally — start banging away in a code window with no real thought given to how the user will interact with the features you’re building.
I’ve posted my php sendmail wrapper before, but I just noticed that Ilia Alshanetsky has written a php mail logging patch that essentially does the same thing, but from within PHP itself. This is nice because it can log the full path of the file and line where mail() was called, whereas my script can only log as much info as PHP passes to sendmail (which isn’t very much) and what it can get from the environment.
I have been using MythTV in my living room for the last couple of months, and it’s quite a nice setup. Originally, I got it as a media player after the DSM-320 didn’t live up to my expectations (it’s still usable, but it’s been relegated to the 13″ TV in the bedroom).
We don’t actually subscribe to cable, and only get a few network channels that ‘leak’ through from the cable internet, so I never really intended it to act as a PVR.
I’ve been playing with a sweet PHP framework called CodeIgniter, and I have to say: I love it. It uses the MVC pattern, which I’ve never much cared for, but does it in a nice way: by staying out of the way. The models are incredibly basic, and really, you don’t even need them. The views are PHP templates done the way PHP templates should be done; with PHP.
Something many frameworks miss: the documentation is amazing.
We had some spam problems last week, one of them caused by a form that wasn’t properly escaped. While that problem was fixed, the real problem was that it was hard to figure out what script had the issue.
To solve this, I wrote a sendmail wrapper for use by PHP (though really it could be used by anything) that logs the message along with the date, a message id (also inserted in th e headers) and the current directory (which gives the location of the original script).