Nerd stuff.

Die Agentur Seibert Media hat einen kleinen Programmierer-Wettbewerb laufen:

Wer den schlankesten Code schreibt, der einen Weihnachtsbaum auf dem Bildschirm erzeugt, bekommt einen netten iPod-Schuffle.

Hier mein Beitrag, geschrieben in Ruby:

puts (0..30).map{|x|" "*(30-x)+"XX"*x+"\n"}.join+(" "*29+"||\n")*2

Und die Ausgabe auf der Konsole mit IRB:

                             XX
                            XXXX
                           XXXXXX
                          XXXXXXXX
                         XXXXXXXXXX
                        XXXXXXXXXXXX
                       XXXXXXXXXXXXXX
                      XXXXXXXXXXXXXXXX
                     XXXXXXXXXXXXXXXXXX
                    XXXXXXXXXXXXXXXXXXXX
                   XXXXXXXXXXXXXXXXXXXXXX
                  XXXXXXXXXXXXXXXXXXXXXXXX
                 XXXXXXXXXXXXXXXXXXXXXXXXXX
                XXXXXXXXXXXXXXXXXXXXXXXXXXXX
               XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
              XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
             XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
            XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
           XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
          XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
         XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
        XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
       XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
      XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
     XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
                             ||
                             ||

Nun hab ich auch eins.

Ein schönes neues iPhone. Nach einigen schlaflosen Nächten habe ich mir eins bestellt. Und ganz ehrlich: Das ist so ziemlich das coolste Gadget, das ich jemals in meiner Tasche hatte. Es kann genau das, was ich suchte: Email, Internet, Musik, Videos und vieles mehr whenever, wherever. Meine Emails werden aus meinem Google Account synchronisiert, genauso meine Kontakte und Termine.

Die Terminsynchronisation ist komischerweise nicht als Funktion integriert. Aber es gibt Dienste wie NuevaSync, die das übernehmen und dem iPhone eine MS Exchange Schnittstelle vorgaukeln. Selbst Google Earth läuft auf dem iPhone. Erst überlegte ich, wie man wohl den 3D-Modus nutzt. Bis ich einfach das iPhone kippte und Google Earth auf meine Bewegungen reagierte und mich durch Bergmassive navigieren ließ. Beeindruckend, wirklich.

Neu ist auch das Tool Qype Radar: Es nutzt die GPS Daten des iPhone und sucht Restaurants, Kneipen oder anderes in der Umgebung seines Standortes. Auf Wunsch überträgt es die Daten auch gleich in die Kartenapplikation und man wird problemlos zum Ziel geleitet.

Mit  Fring steht ein Dienst für Skype, ICQ und andere Instant Messanger oder VoIP-Anbieter zur Verfügung. Ich kam nur zum Testen der Skype-Chatfunktion. Als ich ICQ aktivierte, ließ sich das Tool nicht mehr starten. Werde es sicher in den nächsten Tagen noch einmal versuchen.

Das Surfen durchs Netz ist auch sehr komfortabel- solange man die speziellen mobilen Angebote von beispielsweise Spiegel, FAZ, Xing oder ähnlichen Anbietern nutzt. Aber auch normale Internetseiten lassen sich gut besurfen dank der innovativen Zoomfunktion. Noch gibt es keine Unterstützung für Flas. Aber auch hier ist schon ein Anbieter unterwegs, der demnächst ein Flashplugin für die 2.x Version der iPhone-Firmware bereitstellen wird.

Anfangs hatte ich Bedenken wegen des Tippens auf der Onscreen-Tastatur. Aber es gestaltet sich äußerst leicht. Nicht zuletzt auch durch die intelligente Berechnung des iPhones, welche Tippfehler erkennt und zu korrigieren versucht. Manchmal schlägt das fehl, besonders dann, wenn man englische Begriffe verwendet. Dennoch, eine große Hilfe ist diese Funktion allemal.

Alles in allem: Ich bin sehr happy mit meinem neuen Weggefährten. Kann es nur empfehlen!

Use ar_mailer for future mail delivery

This little howto describes, how to use ar_mailer to schedule emails for future delivery.

Sorry for the bad formatting. Might change it someday…
1) Migrate emails table and add needed fields

  add_column :emails, :various, :string #holds classname and id of any object you want to
  add_column :emails, :type, :string #type of email
  add_column :emails, :date_to_send, :date #date to send that mail

2) Override “def find” in email.rb

  def self.find(*args)
    with_scope(:find=>{ :conditions=>["(date_to_send IS NULL OR date_to_send <= ?)", Date.today] }) do
      super(*args)
    end
  end

3) Create DelayedEmail class, inherting Email

  class DelayedEmail < Email
    before_save :set_due_date
    before_save :set_various_field
    @@days_before_sending = 21 #default is 3 weeks after creation of various object
    @@various_class = nil

    def set_due_date
      self.date_to_send = Date.today + @@days_before_sending
    end

    def set_various_field
      name = @@various_class.class.to_s + "_" rescue "NOCLASS_"
      id = @@various_class.id.to_s rescue "0"
      self.various = name + id
    end

    #tell email to which object it belongs. might be important for future deletion of unsent mails
    def self.set_various_class(c)
      @@various_class = c
    end

    #tell email how many days shall pass by before sending email
    def self.set_days(days)
      @@days_before_sending = days
    end
  end

4) Modify ar_mailer standard emailer class in controller before delivery and set it back afterwards

  DelayedEmail.set_days(10)
  DelayedEmail.set_various_class(SOMEOBJECT)
  ActionMailer::ARMailer.email_class=DelayedEmail
  #Let any mailer send an email through this class
  #eg. Mailer.deliver_mymail(...)
  ActionMailer::ARMailer.email_class=Email