This is a project idea I came up with for a system to watch over my plants and report back whenever necessary.
This came about after having attended the awesome Codebits conference/contest/mega-geek-fest and having been exposed to all of those neat Arduino thingies. It was supposed to inspire people. And it certainly did.
This idea may not be the coolest/sexiest one to emerge from a geek mind, but it addresses a real need I have, being a (rather amateurish) urban-gardener: knowing when the plants actually need to be watered and—most importantly by far—being reminded of it! Of course thinking about all of the data I would be able to collect from this system and all of the analysis I could do on it doesn’t hurt one bit either. :-)
So here is the first mind dump regarding the Urban Gardener’s Virtual Little Helper project.
Create a system that monitors things like amount of moisture in the earth and report back whenever it falls below a certain level.
Other interesting things to monitor would be amount of light received and temperature.
The system must be relatively weather-resistant and be able to send it’s data wirelessly.
That data would then be collected by a server at home and acted upon. This is the part of the system that is responsible for analysing the levels of moisture, temperature and so on and send the notifications.
I will not delve into this part right now, as it would be trivial to implement compared to the sensors bit.
This part deals mostly with the sensors and less with the data munging that would need to be done with the data those sensors would collect. I’ll get to that part once I have actual data to work with.
At first I considered using an off-the-shelf weather station to do the sensing part.
Many weather stations already have WiFi connectivity embedded in them, so I wouldn’t need to worry about that part.
It would be able to measure temperature, light(?) and even wind speed (although this one is hardly relevant), but what about level of moisture in the earth? I don’t think this is something your typical weather station has sensors for and that is the crucial part of the system.
Also, they are really expensive (the wireless versions, at least) so for now this option is out.
Arduinos come to mind almost instantly whenever sensors and stuff are discussed and so this is looking like a rather attractive option right now.
The light and temperature sensors are easy enough to implement, but what about moisture/humidity sensors that must be buried a few centimetres bellow the surface of the earth? Is there a way to do it? Should I go for conductivity sensors instead and infer level of moisture from the current flowing between them? Is there a better way to do this?
As it turns out, after having had a few words with my nearest Arduino guru, some work has been done on these sensors (they went the conductivity way) and he feels like we could do better, so it looks like the project may have some feet to stand on.
What kind of wireless connectivity would work best? AFAIK there is no WiFi shield for the Arduino, but there are at least two options that I’m aware of: Bluetooth and ZigBee.
Given that I know next to zero about ZigBee and I need to have this system talking to both a Mac box—production—and a Linux box—development—, I’m not sure if this would be such a good idea. On the other hand the Bluetooth option might limit the distance from the sensor to the server.
This week in music was dominated by a couple of new discoveries: Frank Zappa and Wim Mertens. Also, I listened to a few more songs/artists a bit more intently and so they’re present in the playlist as well.
This week’s music is available as an 8tracks playlist.
Zappa is a well known musician (composer, guitarist, record producer and lots more) which is largely unknown to me. My music teacher, being a fan of the man and his work, often mentions Zappa songs when looking for examples of many issues in music theory. This week he directed me to a few specific songs for me to listen to and analyze.
And so it is that I am now starting to discover Zappa’s music, years after he passed away. I’m starting out with just a few songs, looking for specific elements in them, such as “The Black Page Drum Solo”, or “Let’s Move To Cleveland”. I’m looking at elements of rhythm in the drums, just in case you’re curious. :-)
One thing I’ve always been partial to is live performances and there is ample material from Zappa for me to sink my teeth into as I go on (“Zappa in New York” is sounding really good).
Wim Mertens is another recent discovery. I went to a live show here in Lisbon, this very week, and I was hooked. My friend João is a long-time fan and he’d told me about Wim already, but I’d just never got around to actually listening to anything of his until the show.
I must say his singing is somewhat unusual and, as far as I can tell, this concert was very different from the usual ones in that the piano took somewhat of a second stage to the violin. Nevertheless I loved the concert and I’m loving the album that João lent me afterwards —”Epic That Never Was”, a live album recorded in a concert in Lisbon. It is way much more piano solo-oriented than the concert was and so far I’m loving it.
For a taste of what the show was like you can watch this video of Wim Mertens and Tatiana Samouil playing “The Belly Of An Architect”.
The rest of the playlist comprises a bunch of unrelated songs:
There’s a couple of songs I am working on right now by the Dave Matthews Band; Then there’s an artist I recently started listening to more intently, due to this post by Célia Ventura—Galt MacDermot—; and finally, to round things off (and to make the minimum 8 tracks for the playlist), an old favourite of mine that came up on a shuffle sequence and I really liked to listen to again—Billy Joel’s “Got To Begin Again”.
The two concerts I attended most recently were A Silent Film at the Aula Magna and Grizzly Bear at the Coliseu.
I enjoyed both shows very much and there were a few pleasant similarities between them (for me, at least): I didn’t know the bands all that well, but having come across their songs I decided that it would be good to check them out live and so I bought the tickets without exactly being a huge fan of either; I really liked both bands live on stage (and this is by far my favourite way of getting to know new bands and new music) even though they are quite different from each other; the music they both make is, as I’d hoped, quite good and, at the very least, quite promising; both bands’ vibe was excellent and they put on a terrific show, made the concert-goers feel really good and made everyone really get into it.
But there’s one thing that was very much different between them. One thing that is a major aspect of any concert and that, unfortunately, goes wrong on the majority of shows I attend (on a trend that is getting steadily worse from year to year): sound quality and especially sound volume.
On the A Silent Film show the volume was so loud that nobody there could possibly enjoy all the nuances of the music they were playing. It was physically impossible to really get into the music. I left with a ringing in my ears and the feeling that had I seen them in their rehearsal room I would have enjoyed their music a whole lot more (and not because I’d be closer to the band, but simply due to the fact that the sound would have been much better than what we got at the Aula Magna).
This is a real shame, as the band (once again) is really good on stage and they do put on a very good show, not to mention the fact that Robert Stevenson has some pretty impressive vocal stunts, which I could not, for the life of me, appreciate in the middle of that wall of —not sound, but noise.
I think it’s a shame that the sound engineers seem to conspire to sabotage them (and almost everyone else, for that matter) by squeezing every possible decibel out of the speakers. But guess what: raw power is not what it’s all about and too much loudness is actually detrimental to our ability to enjoy the music!
Now the Grizzly Bear show was another matter altogether.
The band was just as good on stage (in their own, very different style, of course), they were into it and into the crowd, just like A Silent Film were, but they had surprisingly good sound. And I say “surprisingly” because I’ve been to my fair share of shows on that venue and the sound quality usually sucks in a huge way. But not so this time.
The sound was not so loud as to give us pain in the ears, so we actually got to listen to and really enjoy the music. Granted, there could have been some adjustments made to the sound setup of the softer, wind instruments (flute, sax, clarinet,) but then I think that room is not all that great in terms of acoustics and the fact is that other than that small detail, everything else was very well set up. I could hear all the subtle vocal harmonies really clearly, I could hear the lute as clear as is if was being played right there before me on an empty and silent room, but I could still listen to and feel the powerful guitar, bass and drum sounds.
This is not consensual, as some of the people that were with me complained that the vibration they felt coming from the drums and the bass notes on the keyboards were too much for them, but for me, it was an almost perfect sound setup. Something I don’t experience all that often any more.
I left the venue with my ears clean, without any ringing in them and totally won over to the band’s music. But also very pleased with the overall show. I definitely had a good time. And I feel really sorry that the ringing in my ears didn’t allow me to get away from the A Silent Film show with such satisfaction. They surely deserved it.
I’ve posted about the lifestream concept before and I’ve even implemented such a stream for myself.
My lifestream feed was supported by Storytlr.com and it worked rather well, actually, but Storytlr decided, a while ago, to call it quits and yesterday they shut down their servers.
As such I went through all of the links on the site that referenced that stream and deleted them.
Now, to my utter surprise, I find out that some people were actually following that stream. They’ve asked me about it and why it started giving them an error page.
Amazed I am, yes… :-)
I currently have nothing that can substitute the Storytlr feed. Yes, they did put up their code for other people to use if they wish, and there are other alternatives out there, but what I would like was for something that would be at least as flexible and as “hands-off” as the Storytlr service was, and that I haven’t been able to find out (maybe due to lack of trying hard enough).
So for now I’ll redirect the lifestream.nunonunes.org domain back to the nunonunes.org site and if and when I find an alternative I’ll point it back there.
But the question lingers in my mind, what exactly did you like so much about the lifestream that made you follow it instead of any other feed I have (say my Friendfeed or Google Buzz feed)? I’d really like to know so that I can look for a suitable alternative.
Anyway, thank you all for following.
I have one Google apps account for my domain (nunonunes.org) and in it I have my canonical email account. Associated with this account I have the XMPP (google talk) address, the Google Docs stuff (where I keep the pdfs, spreadsheets and whatnot) and my Calendar and “official” Contacts list.
Then I have another totally separate Google account (a plain one, not on my own domain) where I have my Google Reader, Latitude and a few other bits and pieces such as Blogger, Google Wave and so on. Also, because of the social nature of some of these services, I must maintain a separate Contacts list on this account. This Contacts info is not synced to the main Contacts list because, well, there simply is no (sane/safe) way to do it.
Do you see a problem here? Do you?
Also, can you see how the new Google Buzz exacerbates this problem?
Just yesterday a friend was telling me how he wished Google had a tool to merge all the multiple accounts he has on it due to the services they’ve been acquiring over the years.
Me, I’d like to have a single account for all of the Google stuff on my own domain.
Come on Google, it is high time you let me merge my accounts or, at the very least, allow me to have something as obvious as a reader feature on my apps account!
Buying companies left and right, launching new products and disrupting the markets is all very well and lots of fun, sure, but how about a little love for those who want, who really want to use your stuff in a productive and sane way?
This schizophrenia you are inducing in my on-line presence is really becoming a major nuisance. People don’t know whether to look up my own address or the address of the “fake” account and are sometimes not even sure how to get in touch with me on the web (on your services).
This is just shoddy on your part Google. I know it must take a bit of effort to get this particular bit together, but if anyone has the talent and resources to do this in a heartbeat, folded and with both arms tied behind your backs, you are it!
End rant.
Reading is something I’ve enjoyed doing since I was a boy. It is not something that I’ve done consistently along my life, but those periods when I read the least were (usually) not particularly good ones and I didn’t read mostly because I just couldn’t find the time to do it.
Sure, I’ve always had a pile of books on my nightstand from which I would, on those occasions, pick one and start to have a go at it, until I fell asleep within a couple of minutes. At most.
Reading in bed, whenever I’m overly tired, just doesn’t work.
These last few years have been one of those spells when I hardly picked up a book. I didn’t stop buying them, though, I just stopped reading them, which had the effect of turning the to-read pile into a to-read shelve and then two to-read shelves.
In all honesty, I must say that I didn’t completely stop reading, I just stopped reading anything that was not technical and directly related to work. (One of the biggest advantages of being an engineer is that you never really stop reading and learning.)
This state of affairs lasted until a few months ago, when I decided to effect a few changes in my life which indirectly contributed to me having time to read again. Specifically, I started taking the train to work. Which turned a two to three hour daily drive into a 2 and a half daily commute.
So now I find myself reading again and, as I was discussing with a friend a few days ago, it feels like I got re-acquainted with a long-lost, but dear friend of mine. One which I’d missed so much!
The pile of books I have on the shelves is rather diversified and so far I’ve delved with much gusto into such topics as finance, historical fiction, randomicity ad uncertainty, pop anthropology, neuroscience, ancient treatises on the Bushido and Zen, science fiction, architecture and design…
I dourly missed my story telling friends and, thankfully, the pile of new stuff is still pretty big (and I still want to re-read lots of stuff,) so even if I were to stop buying new books now, I’d still be settled for a long time to come.
This is a plugin that I concocted for enabling the usage of the Disqus on a Blosxom site.
It is perfectly possible to add this functionality just by tweaking the flavour templates, of course, but this makes it easier to use and also makes it possible to port existing sites to Blosxom and easily maintain the comments that may already exist.
It also allows for the individual turning on or off of feedback on a per-story basis.
I’ll probably add a zipped file with the plugin somewhere on the site, but for now the code is displayed right here on this page.
# Blosxom Plugin: disqus
# Author: Nuno Nunes <http://nunonunes.org/>
# Version: v0.01 2010-01-05
# Documentation: See the relevant sections of this file or type: perldoc disqus
package disqus;
# --- Configurable variables -------------------
#
# What is your username on Disqus (the one that should appear
# on the javascript section of the HTML pages)?
$disqus_username = 'nunonunes' unless defined $disqus_username;
#
# Message to display if feedback (comments and trackbacks) is not allowed
# on a story.
$feedback_not_allowed_message = 'Feedback has been disabled for this page'
unless defined $feedback_not_allowed_message;
#
# ---------------------------------------------
# Use $disqus::comments and $disqus::comment_count in your story template.
# Use $disqus::footer in your footer template.
use vars qw{ $footer $comments $comment_count };
sub start {
1;
}
sub story {
my ($pkg, $path, $filename, $story_ref, $title_ref, $body_ref) = @_;
my $feedback_allowed = 1;
$feedback_allowed = 0
if (defined $meta::allowfeedback && $meta::allowfeedback =~ /^n/i);
if ($pagetype::pagetype eq 'story') {
$comment_count ="";
if ($feedback_allowed) {
$comments = <<COMMENTS_THREAD;
<div id="disqus_thread"></div>
<script type="text/javascript" src="http://disqus.com/forums/$disqus_username/embed.js"></script>
<noscript><a href="http://disqus.com/forums/$disqus_username/?url=ref">View the discussion thread.</a></noscript>
COMMENTS_THREAD
}
else {
$comments = $feedback_not_allowed_message;
}
}
else {
$comments = "";
$comment_count = "";
if ($feedback_allowed) {
$comment_count = "$permalink::story#disqus_thread";
}
};
1;
}
sub foot {
my ($pkg, $dir, $head_ref) = @_;
$footer = <<FOOTER_END;
<script type="text/javascript">
//<![CDATA[
(function() {
var links = document.getElementsByTagName('a');
var query = '?';
for(var i = 0; i < links.length; i++) {
if(links[i].href.indexOf('#disqus_thread') >= 0) {
query += 'url' + i + '=' + encodeURIComponent(links[i].href) + '&';
}
}
document.write('<script charset="utf-8" type="text/javascript" src="http://disqus.com/forums/$disqus_username/get_num_replies.js' + query + '"></' + 'script>');
})();
//]]>
</script>
FOOTER_END
if ($pagetype::pagetype eq 'story') {
$footer = "";
}
1;
}
1;
=head1 NAME
Blosxom Plug-in: disqus
=head1 SYNOPSIS
Integrates the comment and trackback service provided by Disqus
(http://disqus.com/) into blosxom.
Requires the permalink and pagetype plugins and knows how to work with the meta
plugin if it is installed.
=head1 INSTALLATION
Fill in the configurable variables according to the instructions and
put the file in your plugin directory (just like any other plugin).
If you whish to use the meta plugin together with this one make sure
that the it is run before this one (renaming meta to 00meta and this
one to 99disqus does the trick --read the bloxsom plugin documentation
if you require further assistance).
You need to have the permalink plugin installed for this one to work and it must
run before this one does. You can use the same scheme as defined for the meta
plugin to that effect.
You also need to have the pagetype plugin installed and have it run before
this one, just like the permalink plugin above.
=head1 CONFIGURATION
Fill in the variables in the Configurable varables section of this file
according with the descriptions (which should hopefully be self-explanatory)
and if you have any doubts check out the usage section bellow.
=head1 USAGE
After having set up an account on Disqus and filled in all the variables to
be configured at the top of this plugin, just put the $disqus::footer in your
foot flavour template, near the end.
Then, on your story flavour template, drop the $disqus::comment_count and
$disqus::comments variables wherever you want them to appear and that's it!
Feedback (both comments and trackbacks) is enabled by default for all stories.
Should you wish to control this behaviour, you can do so on a story-by-story
basis using the meta plugin and assigning the meta-variable
meta-allowfeedback as exemplified below:
----------
My great story's name
meta-allowfeedback: no
This is a really interesting story...
----------
Any value you assign to this variable starting with the letter n turns it off
and anything else (including not setting the variable at all) turns it on.
=head1 BUGS
Bug reports and comments may be sent to nuno@nunonunes.org.
=head1 CHANGELOG
2011-03-21 - Fixed some typos and bugs that were helpfully pointed out by
Christian G. Warden.
2010-01-05 - First implementation.
=head1 AUTHOR
Nuno Nunes <http://nunonunes.org/>
=head1 LICENSE
This Disqus Plug-in
Copyright 2010, Nuno Nunes
Permission is hereby granted, free of charge, to any person obtaining a
copy of this software and associated documentation files (the "Software"),
to deal in the Software without restriction, including without limitation
the rights to use, copy, modify, merge, publish, distribute, sublicense,
and/or sell copies of the Software, and to permit persons to whom the
Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included
in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.
This post is just a quick heads-up (and a test actually) for the fact that I’ve switched the comment-handling system on this site again.
This time not because of spam, but because my previous “provider” —Haloscan— is going for a paid service and I’ve always used it for free and I can’t even remotely begin to justify paying for this functionality on this site. There are other reasons for switching, but this was the one that made me jump to attention and just do it.
Therefore, as you may notice, this site’s comments are now handled by the Disqus system.
Due to the nature of the writing here (more of a record of my findings, thoughts, etc,) I’m not overly concerned with losing the old comments with this transition (after all I have gone down this road before and I could never bring the previous comments along on the two or three migrations that this site has undergone anyway), but I will in time look into the possibility of importing the old comments into the new system.
That is all, the irregular programming will now continue as scheduled.