Let's get the preliminaries out of the way: Hello, long time no see, how have you been? Etc...
So, whilst writing up my PhD (experiments finally finished!) and working three days a week (going fully full time at the end of September!) I have a fair bit on my plate at the moment. So obviously I've also started cooking up a side project...
I don't want to talk too much about what it actually is (mostly because I don't know how "open" I want it to be yet), but it's definitely going to require a web service. It might also require a fully fledged website (lets call this the spotify model), or it might just use a desktop application which connects to the service when it needs to (lets call this the iTunes model). Then again it might have both, with the desktop application providing some extra functionality which is hard to do over the web or in the browser. I think there's also scope for a mobile application, so lets throw iPhone and (what the hell) Android into the pot as well.
I had a bit of a poke around with some web development frameworks first, since this is probably the bit I know least about.
One of the first solutions I came across was Django, which is based on the python language. It looks good, through I have some issues with its handling of "one to many" relationships. Python is a language I have limited experience with, but it gets a lot of love, and people are putting a lot of work into into making it better. It also has good integration with native libraries. So that's nice. It's also named after Monty Python, which only raises my opinion of it.
I'll essentially skip over TurboGears and Web2Py, two other python based frameworks I did some reading about. Django seems like the best choice out the python based frameworks I've looked at.
Soon afterwards I discovered Grails which is based on the very cool groovy dynamic language. Groovy, as well as being fun to say, is implemented directly on top of Java, by far the language I'm most comfortable with. The are a lot of existing Java libraries, and groovy has perfect integration with them. Groovy and grails have some serious weight behind them, also.
One framework I hadn't really considered was Ruby on Rails, which is in many ways the daddy here. This is mostly because I dismissed Ruby as a language out of hand. It looks mental. For reasons I'll come to in a minute, I've re-evaluated this desision, and will be having a good long look at it. On the one hand it's been around a good long while, so has had the oportunity to become more refined. On the other hand, it was the first of its kind, which means it might also be stuck with some bad early design desicions. It's the original, this might not make it the best. I don't know yet.
In order to build this... thing, I'll need data representation, I'll need algorithms for processing this data, and I'll need ways of displaying it. I'd rather not have to deal with multiple implementations in different languages, particularly with the algorithms.
Problem.
If I want to make desktop applications, python is a possibility. It has good bindings to GTK and QT for linux, and Cocoa for OSX (there's probably also something which will work on windows, and at some point I'll probably have to care about this). Java will work anywhere, but it's quite difficult to make a desktop application with Java which won't look like crap. My priority in this area is going to be OSX, and Java does not measure up here. I had not considered Ruby, until I came across MacRuby, which is a very interesting idea. It's not a bridge or a set of bindings, you see, it sits right on top of the objective-c runtime. All of a sudden, Ruby and Rails are a contender.
In the mobile space, things get shitty. iPhone requires objective-c, Android requires Java. Bugger.
So here's where I am: I think groovy is a better language than python (and probably ruby), and I think grails is a better framework than django (I'll get back to you regarding rails)... but I'm not sure I want Java hanging around my neck when it comes to building a desktop application. I might also need some serious grunt in the algorithm stakes, and I'm not sure I want to do that in a scripting language. Yes, I need to be able to implement it quickly, but I also need it to run quickly. I'm not sure I want to do that in either C or C++. Java would be good for this (and yes, it's plenty fast). Objective-c is an option I haven't discounted.
The search continues... any thoughts?
Tuesday, September 1, 2009
Wednesday, March 18, 2009
I'll *just too good to* be back...
Generally speaking, I tend to find that if something look too good to be true, it probably isn't. The "lemon meringue pie" served in the university cafateria today, for instance. Another potential for instance can be found here:
http://www.apple.com/trailers/wb/terminatorsalvation/
Because the trailer for Terminator Salvation look far, far too good to be true. In fact, it looks pretty spectacular, in my opinion. It looks like some of the best, most intelligent, elements of Battlestar Galactica*, and that epic future war James Cameron mercilessly teased us with... starring Christian Bale. Who, silly voice aside, makes a damn near perfect Batman.
I ask you (yes, you): is this possible?
* Yes, that would be the new Battlestar, not the old one.
http://www.apple.com/trailers/wb/terminatorsalvation/
Because the trailer for Terminator Salvation look far, far too good to be true. In fact, it looks pretty spectacular, in my opinion. It looks like some of the best, most intelligent, elements of Battlestar Galactica*, and that epic future war James Cameron mercilessly teased us with... starring Christian Bale. Who, silly voice aside, makes a damn near perfect Batman.
I ask you (yes, you): is this possible?
* Yes, that would be the new Battlestar, not the old one.
Wednesday, March 11, 2009
A Wind Blows Through...
I need a tape measure.
It isn't the first time I've thought this in the past couple of days, and I expect to think it at least a thousand times more in the foreseeable future. The problem in this instance is that I can't tell by eye if the bed and the two cabinets will fit to the left of the bedroom window.
Crap. I've gotten ahead of myself.
A week or two ago, my flatmate Bruce told me that he and his girlfriend, my other flatmate, Sabrina were moving on a pastures anew. They wanted their own place, and so March would be their last month month in our current flat.
Shit.
But no, after speaking to my very friendly landlord, I found out that I will not be tossed out on my proverbial arse, I will in fact be able to stay on for three further months, essentially at my current rent, and with the whole flat to myself.
Pretty cool.
So, of course, my thoughts naturally turn to important matters:
Where will I move all the furniture to?
Because, of course, you have to move the furniture around. That's just what you do.
How will I implement the ideal centralised media and file distribution system?
This, too, is just something you have to do. If you're a bit of a nerd, that is.
But what happens at the end of the three months I previously mentioned? Well... in a slightly terrifying display of domesticity, on my good lady's return from working on her dissertation project down south, we pick up the lease of the flat.
It's okay. She's a bit of a nerd, too.
It isn't the first time I've thought this in the past couple of days, and I expect to think it at least a thousand times more in the foreseeable future. The problem in this instance is that I can't tell by eye if the bed and the two cabinets will fit to the left of the bedroom window.
Crap. I've gotten ahead of myself.
A week or two ago, my flatmate Bruce told me that he and his girlfriend, my other flatmate, Sabrina were moving on a pastures anew. They wanted their own place, and so March would be their last month month in our current flat.
Shit.
But no, after speaking to my very friendly landlord, I found out that I will not be tossed out on my proverbial arse, I will in fact be able to stay on for three further months, essentially at my current rent, and with the whole flat to myself.
Pretty cool.
So, of course, my thoughts naturally turn to important matters:
Where will I move all the furniture to?
Because, of course, you have to move the furniture around. That's just what you do.
How will I implement the ideal centralised media and file distribution system?
This, too, is just something you have to do. If you're a bit of a nerd, that is.
But what happens at the end of the three months I previously mentioned? Well... in a slightly terrifying display of domesticity, on my good lady's return from working on her dissertation project down south, we pick up the lease of the flat.
It's okay. She's a bit of a nerd, too.
Thursday, February 26, 2009
Spending to make...
While it's a fairly common and reasonably accurate maxim that you have to spend money to make money, I find myself wondering if the same is true of energy. To reword and disentangle the metaphor: Can you save energy by using energy?
Here's a my train of thought: You have curtains in your house. It's possible to fit a motorised unit and automate the opening and closing of the same. This would same ostentatious, lazy and wasteful. To have a computer, sitting, always on, in your house, which decides when this should happen would seem to increase these negative factors.
But...
During winter, you try to close the curtains to keep heat in. Doing this early means you miss out on daylight and, furthermore, you have to turn on artificial lights. Doing this too late means that you loose heat through the windows. There's is probably a converse example in hotter climates than this, in which your house gets too hot in the middle of the day if you don't close the binds, meaning you have to turn on the air conditioning.
So then, at what point does the energy used to run the computer become a good investment? What if it has sensors inside and outside in order to measure the temperature gradient, and so it can choose the best time to close the curtains? What if it also manages your heating? What if it intelligently turns out the lights in rooms you're not in? Reminds you that you turned the oven on but haven't actually put anything in it... Makes damn sure that you get out of bed in the morning... and so on...
Here's a my train of thought: You have curtains in your house. It's possible to fit a motorised unit and automate the opening and closing of the same. This would same ostentatious, lazy and wasteful. To have a computer, sitting, always on, in your house, which decides when this should happen would seem to increase these negative factors.
But...
During winter, you try to close the curtains to keep heat in. Doing this early means you miss out on daylight and, furthermore, you have to turn on artificial lights. Doing this too late means that you loose heat through the windows. There's is probably a converse example in hotter climates than this, in which your house gets too hot in the middle of the day if you don't close the binds, meaning you have to turn on the air conditioning.
So then, at what point does the energy used to run the computer become a good investment? What if it has sensors inside and outside in order to measure the temperature gradient, and so it can choose the best time to close the curtains? What if it also manages your heating? What if it intelligently turns out the lights in rooms you're not in? Reminds you that you turned the oven on but haven't actually put anything in it... Makes damn sure that you get out of bed in the morning... and so on...
Tuesday, February 24, 2009
Call by the what now?
Some not work related computery bits and pieces have been percolating around my head for some time now. I think we should talk about them for a while. That is: I'll talk. You listen.
I'm probably going to write a couple of more techy blogs, all loosely interrelated. I am going somewhere with them, but I'm not entirely certain as to how much of this journey I will share with you.
First of all, I'm going to talk about the fairly simple computer related concept of "Call by reference" versus "Call by value". This is fairly basic computer science (though I wish they'd taught it properly earlier on in my course). It's possible (probable, even) that this example (or variations of it) has been used a thousand times before. I'm not going to go look for one (or the absence of one), I'm just going to write down my own particular take on it. I assure you that any plagiarism I'm about to commit is in no way deliberate. So, without further ado...
Let's say you want to send a specific piece of information to someone via email. Let's say it's part of today's featured article on Wikipedia (William I of Orange, at the time of writing). In today's connected digital world, you have too main options. First of all, you could send them the information itself, like so:
There are several things your recipient can do with this. They can read it. They can edit it, but this will only edit their local copy. The original remains unchanged. If they want to request that a change be made, they can, however, edit it and send it back to you. This is "calling by value."
Your second option is to send them a link to the information:
This, again, allows them to read it. They have to follow the link to the information it points to first, though. This time, if they make an edit (this being wikipedia) they actually are changing the original copy. They can also see what other information is around it, and if they feel so inclined they can change that is well. You might consider this to be an undesirable consequence. This method has the aditional advantage, however, that you did not have to take the time and effort to make a copy, and the amount of information you had to actually send is significantly smaller. This is "calling by reference."
If you deal with this sort of thing on a day to day basis, you may well be aware that when you do this sort of thing in a computer program you have another option. You can send a constant reference, which would be analagious to sending a link to a website the recipient has no write access to. For example:
I'm probably going to write a couple of more techy blogs, all loosely interrelated. I am going somewhere with them, but I'm not entirely certain as to how much of this journey I will share with you.
First of all, I'm going to talk about the fairly simple computer related concept of "Call by reference" versus "Call by value". This is fairly basic computer science (though I wish they'd taught it properly earlier on in my course). It's possible (probable, even) that this example (or variations of it) has been used a thousand times before. I'm not going to go look for one (or the absence of one), I'm just going to write down my own particular take on it. I assure you that any plagiarism I'm about to commit is in no way deliberate. So, without further ado...
Let's say you want to send a specific piece of information to someone via email. Let's say it's part of today's featured article on Wikipedia (William I of Orange, at the time of writing). In today's connected digital world, you have too main options. First of all, you could send them the information itself, like so:
William was born in the castle of Dillenburg in Nassau, present-day Germany. He was the eldest son of William, Count of Nassau and Juliana of Stolberg-Werningerode, and was raised a Lutheran. He had four younger brothers and seven younger sisters: John, Hermanna, Louis, Mary, Anna, Elisabeth, Katharine, Juliane, Magdalene, Adolf and Henry.
There are several things your recipient can do with this. They can read it. They can edit it, but this will only edit their local copy. The original remains unchanged. If they want to request that a change be made, they can, however, edit it and send it back to you. This is "calling by value."
Your second option is to send them a link to the information:
http://en.wikipedia.org/wiki/William_I_of_Orange#Early_life
This, again, allows them to read it. They have to follow the link to the information it points to first, though. This time, if they make an edit (this being wikipedia) they actually are changing the original copy. They can also see what other information is around it, and if they feel so inclined they can change that is well. You might consider this to be an undesirable consequence. This method has the aditional advantage, however, that you did not have to take the time and effort to make a copy, and the amount of information you had to actually send is significantly smaller. This is "calling by reference."
If you deal with this sort of thing on a day to day basis, you may well be aware that when you do this sort of thing in a computer program you have another option. You can send a constant reference, which would be analagious to sending a link to a website the recipient has no write access to. For example:
http://www.britannica.com/EBchecked/topic/644041/William-I
My Bloody Valentine 3D <= 15 Words
Prepare to be confused, scared, and impressed by this surprisingly well made remake.
Subscribe to:
Posts (Atom)