Maschinenraum goes swopspot

May 29th, 2012 § 0 comments § permalink

Eines unserer aktuellen projekte im maschinenraum ist swopspot.

Auf swopspot, kann man alles gegen alles tauschen. Gartenarbeit gegen einen Schal, alte Platten oder CDs gegen neue Bücher, Handgemachtes gegen Ungebrauchtes etc. Man packt einfach den Kram, den man selber nicht mehr braucht auf sein Profil und wartet bis man ein Angebot für den Gegenstand von einem anderen Nutzer bekommt. Oder man unterbreitet anderen Angebote mit dem eigenen Zeug.

Ziel ist es vor allem den nachbarschaftlichen Tauschhandel zu unterstützen, dabei spart man Verpackung und Versand, denn zum Austausch der Ware trifft man sich im Idealfall einfach auf einen Kaffee.

Wir sind jetzt in der Betaphase. Das heißt, dass alles soweit funktioniert. Allerdings ist die Bedienung an manchen stellen noch etwas schwierig und es fehlen noch etliche Funktionen und Erläuterungen. Da wir wissen wollen, was wir noch verbessern können, brauchen wir unbedingt Leute die mit testen wollen.

Momentan haben wir vor allem in Weimar aktive Nutzer. Das soll sich ändern. Schauts euch einfach mal an und wenn euch gefällt, sagt euren Freunden und Verwandten Bescheid. Je mehr Leute mitmachen, desto interessanter wirds.

www.swopspot.net

Wenn ihr Kommentare, Ideen oder Anregungen habt, schreibt mir einfach an info@swopspot.net

mr_door_status

December 8th, 2011 § 3 comments § permalink

Schloss, Schalter, Arduino, Ethernet-Shield, Twitter
www.twitter.com/mr_door_status
http://mrdoor.paddd.de/

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

CODE:

#if defined(ARDUINO) && ARDUINO > 18
#include <SPI.h>
#endif
#include <Ethernet.h>
#include <EthernetDNS.h>
#include <EthernetDHCP.h>
#include <Twitter.h>

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
const char* ip_to_str(const uint8_t*);
int state = 1; //door will be open at boot!!!
int sensorValue = 0;

Twitter twitter("your-token-here");

void setup() {
  Serial.begin(9600);
  network();
}

void network() {
  Serial.println("attempting to obtain DHCP lease...");
  EthernetDHCP.begin(mac);

  const byte* ipAddr = EthernetDHCP.ipAddress();
  const byte* gatewayAddr = EthernetDHCP.gatewayIpAddress();
  const byte* dnsAddr = EthernetDHCP.dnsIpAddress();
  
  Serial.println("DHCP lease has been obtained.");

  Serial.print("IP address is ");
  Serial.println(ip_to_str(ipAddr));
  
  Serial.print("gateway IP address is ");
  Serial.println(ip_to_str(gatewayAddr));
  
  Serial.print("DNS IP address is ");
  Serial.println(ip_to_str(dnsAddr));
}


// Just a utility function to nicely format an IP address.
const char* ip_to_str(const uint8_t* ipAddr) {
  static char buf[16];
  sprintf(buf, "%d.%d.%d.%d", ipAddr[0], ipAddr[1], ipAddr[2], ipAddr[3]);
  return buf;
}

void loop() {
  door_status();
  EthernetDHCP.maintain();
  randomSeed(millis());
}

void door_status() {
  int sensorValue = analogRead(A0);
  Serial.println(sensorValue);
  
  if(sensorValue>915 && state==1){
    delay(3000);
    int sensorValue = analogRead(A0);
    if(sensorValue>915 && state==1){
      delay(3000);
      int sensorValue = analogRead(A0);
      if(sensorValue>915 && state==1){
        state=0;
        tweet(state);
      }
    }
  } 
  if(sensorValue<916 && state==0) {
    delay(3000);
    int sensorValue = analogRead(A0);
    if(sensorValue<916 && state==0) {
      delay(3000);
      int sensorValue = analogRead(A0);
      if(sensorValue<916 && state==0) {
        state=1;
        tweet(state);
      }
    }
  }
  //update margin
  delay(10000);
}

void tweet(int state) {
  if(state==1) {
    
    int rand = random(5000);
    char txt [120];
    sprintf(txt, "der maschinenraum ist offen No. %d", state);
    
    Serial.println("connecting to twitter...");
    if (twitter.post(txt)) {
      int status = twitter.wait();
      if (status == 200) {
        Serial.println("status tweet OPEN sent.");
      } else {
        Serial.print("tweet failed : code ");
        Serial.println(status);
      }
    } else {
    Serial.println("connection to twitter failed.");
    setup();
    }
    
  }  
  
  if(state==0) {
    
    int rand = random(5000);
    char txt [120];
    sprintf(txt, "der maschinenraum ist geschlossen No. %d", state);
    
    
    Serial.println("connecting to twitter...");
    if (twitter.post(txt)) {
      int status = twitter.wait();
      if (status == 200) {
        Serial.println("status tweet CLOSED sent.");
      } else {
        Serial.print("tweet failed : code ");
        Serial.println(status);
      }
    } else {
    Serial.println("connection to twitter failed.");
    setup();
    }
  }
}

World Usability Day

October 24th, 2011 § 1 comment § permalink

Am 11.11.11, ab 10:00 gibt es in der M18 eine kleine "unconference" zum World Usability Day. Es wird nicht nur um klassische Usability gehen – Produktdesign, Nutzerforschung, Interaktionsdesign, Human Centered Design, Services, Informationsarchitektur und Architektur (solche zum anfassen!) werden auch ihren Platz finden.

Soweit zum Thema. Bleibt "unconference" zu klären. Die Wikipedia meint zu dem Format: "there is no agenda until... the attendees made one up." Sprich: Wer von den Anwesenden eine Diskussionsrunde, einen Workshop leiten oder einen Vortrag geben möchte sei dazu aufgerufen, genau das zu tun. (Vorträge sollten ca. 20 Minuten lang sein, damit Platz für Fragen und Diskussion bleibt)
Dass das Konzept funktioniert zeigen z.B. das EduCamp und das UXCamp Europe.

Also: kommet zahlreich, bringt Ideen mit.

UPDATE:

Wir freuen uns ankündigen zu dürfen, dass Prof. Dr. Bernhard Klein gegen 11 Uhr einen Vortrag über "usability in urban design" halten wird. Auch Prof. Jay Rutherford ist mit dabei.

UPDATE 2:

...und trägt um 14:00 zu "Core Competencies in Information Design" vor.

Anmeldung, Fragen:   wud@m18.uni-weimar.de

world usability day

Pure Data Convention

August 5th, 2011 § 0 comments § permalink

Nächste Woche ist das 4te Treffen der Künstler und Programmierer der Pure Data Convention. Der Maschinenraum wird versuchen dabei unterstützend als Ort zum Quatschen, Chillen und Mate-Trinken zu fungieren.
Natürlich gibt es wie immer die Möglichkeit sich der Realität zu Entziehen, Musik zu hören, Ideen zu tauschen oder einfach nur E-Mails zu checken.

Die wichtigsten Infos gibts hier.

youtube-dl-agent

January 22nd, 2011 § 3 comments § permalink

youtube-dl-agent laedt eine liste von youtube-videos mit youtube-dl runter, konvertiert sie mit ffmpeg und fuegt sie mit mencoder zusammen. gedacht fuer splited youtube-videos.

usage:

$ youtube-dl-agent http://www.youtube.com/watch?v=Qpwj5k0zYDs \
http://www.youtube.com/watch?v=XCyXY4jLxo8 \
http://www.youtube.com/watch?v=BwJUV8vvGyA \
http://www.youtube.com/watch?v=xQuyiMravE4 \
--output="Weimar nach der Wende.avi"
#!/bin/bash

case "$1" in

  "" )
      exit $E_PARAM ;
  ;;

  * )
    TEMPPATH=$PWD"/youtube-dl-agent.swap/";
    mkdir $TEMPPATH;
    cd $TEMPPATH;

    for i in "$@"
    do
      case "$i" in
        http://* )
            URL=`echo $i`;
            echo " * * * "$URL" * * *";

            ###
            # DOWNLOAD FLV WITH YOUTUBE-DL
            /usr/local/bin/youtube-dl -t $URL

            ###
            # FIND DOWNLOADED FLV FILE BY ID
            ID=`echo $URL | /bin/sed -r 's/.*v=(.*)$/\1/'`;
#            echo $ID;
            IDS=$IDS$ID" ";

            FLV=`/usr/bin/find $PWD"/" -maxdepth 1 -name "*$ID.flv"`;
#            echo $FLV;
            FLVS=$FLVS$FLV" ";

            ###
            # COVERT FLV TO AVI
            /usr/bin/ffmpeg -i $FLV -vcodec copy \
            -acodec libmp3lame -ab 128k $FLV".avi"

            AVI=`/usr/bin/find $PWD"/" -maxdepth 1 \
            -name "*$ID*.avi"`;
#            echo $AVI
            AVIS=$AVIS$AVI" ";
        ;;

        # STRINGS WITH WHITESPACES HAVE TO BE
        # ENCAPSULATE WITH DOUBLE QUOTES
        --output=* )
            OUTPUT=`echo $i | sed 's/--output=//'`;
        ;;

        * )
            exit $E_PARAM ;
        ;;

      esac
    done
  ;;

esac

###
# MERGE SPLIT AVIS
/usr/bin/mencoder -ovc copy -oac copy $AVIS -o $OUTPUT

###
# MOVE FROM TEMP-DIR TO $USERS PWD
/bin/mv -v $OUTPUT ..

###
# CLEAN UP
/bin/rm -rv $TEMPPATH

exit 0