A friend of mine asked me which newsletter system to use for sending abt 2k emails abt once a week. I couldn’t immediately respond, so I gave it a small evaluation of current products. As prerequisite, the system should be in active development, run on a (web)server, easy to use (usability over features) and it would be nice to use it at lowcost or for free. This limited the selection a lot and I just want to present my final opinion:
My favorite and ‘winner’ is the NotOneBit.com Simple Mailing List. It’s written in PHP, simple, clean and really easy to use. Perfect for a small use-case like this. Check it out: http://www.notonebit.com/projects/mailing-list/
Actually I thought PHPlistis first choice, but I didn’t liked it usability at all - I wonder why it’s so popular?
OpenEMM has a nice website and pretends to be opensource, but somehow I wasn’t able to get a proper version to run and test. Looks more like fake to me… Update: see comments, apparently there’s lot’s of work going on and you can download it from sourceforge easily..
MailMan is quite popular, known as stable and high performant, but still I don’t like the backend. The whole software looks a bit outdated to me… c’mon it’s 2009!!!
Other systems may worth a look as not for free, so I didn’t test them:
http://www.mailingwork.de/
http://www.supermailer.de/
http://www.campaignmonitor.com/
Nice sources to check:
http://www.inmedias.de/download/Newsletter-Software.pdf
http://www.vwsoft.de/?sectionid=pgminfo&pgmid=3
http://en.wikipedia.org/wiki/Email_marketing_software
Event to be: Art vs. Technology Workshop Berlin
Just found this nice event, taking place from 20-21. June in Berlin, organized by the Tinkersoup people:
http://www.tinkersoup.de/workshop/
Unfortunately I may not be able to take part. Damn! ;-(
My first GitHub fork: bounce-email
Hurray! I finally forked a github project. Yesterday I ran into the bounce-email gem by Agris Ameriks on Rubyforge. It’s basically a 1:1 port of the PHP Bounce Handler classby Chris Fortune and not very rubyified. Thanks to David Reese, bounce-email is forked on github and I could easily extend it.
I rubyfied the class, did some code cleanup, added (yet a very simple) way to get the original message, and gained some performance by paring message only on demand. A testcase was broken as well the Rakefile, both are fixed. See the update here:
http://github.com/rngtng/bounce-email/tree/master
This is a nice experiment I did to fade and pulse a LED by just using a digital port. Digital? On/Off, 1/0 - how can this work? Well it does, check this out:
http://www.youtube.com/watch?v=kB62BrQBjTg
The key is, I’m switching the LED on & off very fast which appears the human eye as it’s on all the time (similar to a LED Matrix). Now, I change the time period between switching the LED on and off. Is the off period time longer, the LED lights low, is the off period time short, the LED lights high. Fading the period time, makes the LED pulse… nice!
Check this (still quite ugly) code:
[c]
int ledPin = 13; // LED connected to digital pin 13
int value = LOW; // previous value of the LED
long cnt = 0; // will store last time LED was updated
long low = 0; // interval at which to blink (milliseconds)
long high = 1000; // interval at which to blink (milliseconds)
int op = 3;
long a = 0;
void setup()
{
pinMode(ledPin, OUTPUT); // sets the digital pin as output
}
void loop()
{
a += op;
blinkl( a+30, 10 );
if( a > 200 || a < 0 ) op *= -1;
}
void blinkl(long low, long high )
{
int c = 5;
while ( c > 0 ) {
blink( low, high );
c-=1;
}
}
void blink( long low, long high )
{
long period = 4000;
long pt = period * high / (low + high );
int value = LOW;
digitalWrite(ledPin, value);
while( period > 0 ) {
if (period < pt && value == LOW ) {
value = HIGH;
digitalWrite(ledPin, value);
}
period -= 1;
}
}
[/c]
Ruby Serialport and Arduino - that's easy!
Yeah, just controlled my Arduino via the ruby irb console using ruby serialport. Damn easy! (well at least on a Mac, running OS 10.5.7) Hehe, soon more to come…
More to get you started with Arduino and Ruby:
http://www.arduino.cc/playground/Interfacing/Ruby
Yeah Mac Os X 10.5.7 just got released. All fine for me, except my external USB soundcard Terratec Aureon 5.1 can’t be volume controlled anymore - strange!? Any idea what’s wrong?
[update - solved!]
Apparently downgrading the USB Sound kernel back to 10.5.6 Version solves the issue. See the comments and the Apple Discussion-board for more… Thx to sonderpop for that hint!
Second try: 2x5 LED Matrix Arduino controlled
This time a more sophisticated example. I started to develop an LED Matrix controller and editor in Processing (like every does his first steps on arduino, I think).
By now, you can create a sequence by selecting the LEDs to light up and move over to the next frame. Finished, run it on the Arduino and control the speed - a nice and quick toy way to create any light patterns you can think of easily.
http://www.youtube.com/watch?v=Vmijzo2zT-s
More examples and source code soon to come…
My first Arduion test: 10 LEDs running light
Check this out:
http://www.youtube.com/watch?v=irVW4U8zq_k
That my first proper Arduino test, controlling a 10 LED running light. I attached a small button via interrupt as well to start & stop the light. More to come soon, stay tuned!
Here the (very,very ugly) source code:
[c]
int ledPin = 3; // First LED connected to digital pin 13
volatile int stop = LOW;
void setup()
{
Serial.begin(38400);
for( int i = 0; i < 10; i++) {
pinMode(ledPin + i, OUTPUT);
}
attachInterrupt(0, stopit, RISING); //Button attached to Pin 2
}
int i = 0;
void loop()
{
for( i = 0; i < 7 && !stop; i++) {
blink(ledPin + i);
}
for( i; i >= 1 && !stop; i–) {
blink(ledPin + i);
}
for( i = 0; i < 10 && !stop; i++) {
blink(ledPin + i);
}
for( i; i >= 3 && !stop; i–) {
blink(ledPin + i);
}
for( i; i < 10 && !stop; i++) {
blink(ledPin + i);
}
for( i = 9; i >= 1 && !stop; i–) {
blink(ledPin + i);
}
}
void stopit()
{
delayMicroseconds(1000);
stop = !stop;
}
void blink( int pin ) {
digitalWrite(pin, HIGH);
delay(120 - abs( pin - 8 ) * 20);
digitalWrite(pin, LOW);
}
[/c]
Arduion has arrived
Here it is! Yeah, finally my Arduino (ordered at Watterott) has been delivered. Can’t wait to get my hands on it. Stay tuned for future reports!
All about this great ‘toy’ here: www.arduino.cc
I want to have an Arduino - now!
MySQL User defined Variables - good thing to know!
Have you ever heard of user defined variables in MySQL? I hadn’t and nearly freaked out when I found out. That’s the thing I was always looking for, that’s so cool, and fasten up your SQL live a lot!
Now, renumbering a table is as easy as never before:
[text]
Set @a = 0;
UPDATE my_table SET id=@a:=@a+1
[/text]
Check out the docu and examples:
http://dev.mysql.com/doc/refman/5.0/en/user-variables.html
Named scopes in Rails are just awesome. They so much DRY and beautify your code! But did you ever had the trouble to create a new named_scope out of others? E.g. aliasing multiple ones to a new one. Luckily I now figured out how this works in a nice way.
The magic key is the method scope( :find )
This method called on a Scope class returns the Hash used for the ActiveRecord .find()
call. First it’s a nice way to debug your scopes, second it’s perfect for our need to chain multiple scoped into one. Check this out:
[ruby]
class Fu < ActiveRecord::Base
named_scope :has_moo, :conditions => { :moo => true }
named_scope :has_foo, :conditions => { :foo => true }
named_scope :has_moo_and_foo, lambda { has_moo.has_foo.scope(:find) }
end
[/ruby]
We chain the two scoped has_moo
and has_foo
together into a new one called has_moo_and_foo
. As the return value can only be a Hash we use the above mentioned scope(:find) to transform it into one.
Now this works:
[ruby]Fu.has_moo_and_foo.all[/ruby]
Sweet! Imagine how great this would be if we can return a scope object instead of a hash as well??
See my pastie here too.
LED Light Towers Installation
Hey, Check this out, a very nice LED tower installation:
http://www.youtube.com/watch?v=FsHMFkJkohM
see more great stuff at http://www.brilldea.com/
How to deal with recurrency in Ruby & Rails
I did a short eval of projects dealing with re currency in Ruby and Ruby on Rails. Here a short list & rough of interesting projects dealing with repeating time (intervals):
Common used lilbrary: http://runt.rubyforge.org
A better runt(?): http://github.com/nickstenning/recurring_event
Date extension, yahoo dev, rspec like: http://github.com/jhubert/ruby-date-recur
http://recurring.rubyforge.org
http://github.com/EdvardM/recurrence
http://github.com/fnando/recurrence
Check this as well:
http://stackoverflow.com/questions/85699/whats-the-best-way-to-model-recurring-events-in-a-calendar-application
Love ActiveScaffold: Show always Searchbox
ActiveScaffold is a great plugin to build edit form easily. Nicely AJAX and nested forms support (well with limits ;-). One thing which bugged me all the time, was the extra click you had to do to show the searchbox. Well I solved it like this:
[ruby]
def index
active_scaffold_config.list.label += render_to_string( :action => :search, :layout => false )
super
end
[/ruby]
I know, it’s kind of bad hack, as the label actually isn’t supposed to contain a form - but it works out quite well!