Shop

Mittwoch, 31. Oktober 2012

Taskfokusiertes arbeiten oder Wie wir die Zeit anhalten

Wer kennt das Problem nicht. Man sitzt im Büro, eigentlich hätte man ja genug Arbeit, aber irgendwie kommt man mit der zu erledigenden Arbeit nicht weiter.
Das hat natürlich unterschiedliche Gründe:
  • Arbeit muss immer wieder unterbrochen werden
  • Ständig kommen neue Anforderungen dazu
  • Wir können uns schwer auf eine Sache konzentrieren
Oft liegt es aber auch daran wie unsere Arbeit an uns heran getragen wird. Die Arbeiten sind geprägt von verschiedensten Daten, die Arbeit muss da begonnen werden und da muss sie fertig sein. In den seltensten Fällen geht es dabei um Einzelaufgaben, vielmehr geht es um eine ganze Menge von Aufgaben, die dann als ein gesamtes zu einem Termin fertig sein muss.
Zu alle dem gibt es auch noch Routine-aufgaben die auch zu erledigen sind. Diese Aufgaben sind oft nicht klar aufgelistet und dennoch müssen wir diese Aufgaben erledigen, und selbstverständlich haben auch diese einen Fertigstellungstermin.
Auf jeden Fall scheint alles Zeit getrieben. Somit muss es einen nicht verwundern wenn einige die Ansicht vertreten, sie hätten zu wenig Zeit.
Jedoch hängt die Sichtweise auf das offensichtliche Problem immer vom Blickwinkel des Betrachters ab. Wir sollten unsere Ansicht zu dem Thema gründlich überdenken.
Halten wir doch einfach einmal die Zeit an!
Nicht das wie es am Ende aussieht sollte uns im Moment wichtig sein, sondern die nächste Aufgabe welche wir erledigen müssen um das Endergebnis zu erreichen.
Die Umstellung von dem zeit getriebenen Arbeiten auf Aufgaben fokussiertes Arbeiten hilft uns hierbei.
Machen sie sich frei, schnappen sie sich eine Aufgabe und arbeiten sie diese ab. Haben sie die Aufgabe erledigt haben sie sich eine Pause verdient. Dann geht es wieder weiter.
Es gibt verschiedene Techniken wie man einen konstanten Durchsatz beim Aufgaben fokussierten Arbeiten erreicht.
  • TODO dazu werde ich einen weiteren Beitrag schreiben.
Auch gibt es unterschiedlichste Techniken wie Aufgaben priorisiert und somit auf die Reise geschickt werden können. Denn am idealsten ist es natürlich wenn sich jemand anderer Gedanken macht welche Aufgabe als nächstes zu erledigen ist.
  • TODO dazu werde ich einen weiteren Beitrag schreiben.

Montag, 27. August 2012

Arduino Roboter

IMG_0802

Nun habe ich endlich mein neues Spielzeug erhalten und musste auch gleich damit beginnen einen “LineFollower” zu basteln. Hier mal ein Video vom fertigen Roboter:

Roboter

schema

Schematischer Aufbau

Und anschließend noch der Code:


//motor RIGHT connected between A01 and A02
//motor LEFT connected between B01 and B02

int STBY = 10; //standby

//Motor A
int PWMA = 3; //Speed control 
int AIN1 = 9; //Direction
int AIN2 = 8; //Direction

//Motor B
int PWMB = 5; //Speed control
int BIN1 = 11; //Direction
int BIN2 = 12; //Direction

int RIGHT = 2;
int LEFT = 1;
int QRE1113_LEFT = 2;
int QRE1113_RIGHT = 4;
int schwellwert = 400;
void setup(){
  pinMode(STBY, OUTPUT);

  pinMode(PWMA, OUTPUT);
  pinMode(AIN1, OUTPUT);
  pinMode(AIN2, OUTPUT);

  pinMode(PWMB, OUTPUT);
  pinMode(BIN1, OUTPUT);
  pinMode(BIN2, OUTPUT);
  
  Serial.begin(9600);
  stop();
  delay(5000);
}

void loop(){
  // Lesen der Sensorwerte
  Serial.println("--");  
  int QRE_Value_LEFT = readQD(LEFT);
  Serial.println(QRE_Value_LEFT); 
  int QRE_Value_RIGHT = readQD(RIGHT);
  Serial.println(QRE_Value_RIGHT);  
  // Falls beide Sensoren schwarzen Untergrund liefern geradeaus
  // fahren
  if(QRE_Value_LEFT >= schwellwert && QRE_Value_RIGHT >= schwellwert)
  {
    Serial.println("forward");
    move(LEFT, 200, 1);
    move(RIGHT, 200, 1);
  } else if (QRE_Value_LEFT < schwellwert && QRE_Value_RIGHT< schwellwert) {
    stop(); // Überarbeiten
    if(QRE_Value_LEFT<QRE_Value_RIGHT){
      Serial.println("sharp RIGHT");
      while(readQD(RIGHT)<schwellwert) {
        move(LEFT, 150, 1);
        move(RIGHT, 150, 0);
      }
    } else {
      Serial.println("sharp LEFT");
      while(readQD(LEFT)<schwellwert) {
        move(LEFT, 150, 0);
        move(RIGHT, 150, 1);
      }
    }
    stop();
  } else {
    if(QRE_Value_LEFT<QRE_Value_RIGHT){
      Serial.println("RIGHT");
      move(RIGHT, 100, 1);
      move(LEFT, 200, 1);
    } else {
      Serial.println("LEFT");
      move(LEFT, 100, 1);
      move(RIGHT, 200, 1);
    }
  }
  delay(5);
}
int readQD(int motor){
  //Returns value from the QRE1113 
  //Lower numbers mean more refleacive
  //More than 3000 means nothing was reflected.
  int QRE1113_Pin = QRE1113_RIGHT;
  if(motor == LEFT){
    QRE1113_Pin = QRE1113_LEFT;
  }
  pinMode( QRE1113_Pin, OUTPUT );
  digitalWrite( QRE1113_Pin, HIGH );
  delayMicroseconds(10);
  pinMode( QRE1113_Pin, INPUT );

  long time = micros();

  //time how long the input is HIGH, but quit after 3ms as nothing happens after that
  while (digitalRead(QRE1113_Pin) == HIGH && micros() - time < 3000);
  int diff = micros() - time;
  pinMode( QRE1113_Pin, OUTPUT );
  digitalWrite( QRE1113_Pin, LOW );
  return diff;
}

void move(int motor, int speed, int direction){
  //Move specific motor at speed and direction
  //motor: 0 for B 1 for A
  //speed: 0 is off, and 255 is full speed
  //direction: 0 clockwise, 1 counter-clockwise
  digitalWrite(STBY, HIGH); //disable standby

  boolean inPin1 = LOW;
  boolean inPin2 = HIGH;

  if(direction == 1){
    inPin1 = HIGH;
    inPin2 = LOW;
  }

  if(motor == LEFT){
    digitalWrite(AIN1, inPin1);
    digitalWrite(AIN2, inPin2);
    analogWrite(PWMA, speed);
  }else{
    digitalWrite(BIN1, inPin1);
    digitalWrite(BIN2, inPin2);
    analogWrite(PWMB, speed);
  }
}

void stop(){
  //enable standby  
  digitalWrite(STBY, LOW);
  move(LEFT, 0, 1);
  move(RIGHT, 0, 1);
}

Donnerstag, 29. März 2012

Mockito: Mock a JspWriter

How to Mock a JspWriter to move the appended text to a StringBuilder?



Here we are :-)

Groovy: Analyse Accesslogs

Analyse access logs with groovy. Compare a special behaviour on two different files.
 pattern = ~/.*\\/(.*\.jsp).*/  
 data = new HashMap()  
 calculate("c:/P7_ARCTIS_access_log.2012_01_31%2336[1]", 0);  
 calculate("c:/P7_ARCTIS_access_log.2012_03_23%2336[1]", 1);  
 def calculate(filename, i) {  
   def file = new File(filename);  
   file.eachLine{line ->  
     if(line.contains(".jsp")) {  
       m = line=~pattern  
       def jsp = m[0][1]  
       if(!data.containsKey(jsp)) {  
         data.put(jsp, [0,0]);  
       }  
       int[] werte = data.get(jsp);  
       werte[i] = werte[i]+1;  
       data.put(jsp, werte);  
     }  
   }  
 }  
 println data  
Here we are!

Donnerstag, 16. Februar 2012

Technologischer Sex-Appeal

In der Entwicklung arbeiten wohl immer unterschiedlichste Charaktere, und so sagte mir unlängst ein Kollege, er hätte sich in einer Firma als Java Entwickler beworben, nun ist er jedoch Cobol Entwickler geworden. Er ist froh, dass er dort gelandet sei.
Gerade Unternehmen müssen bei Ihren Produkten den Fokus auf die Nachhaltigkeit ihrer Produkte legen. Nachhaltigkeit ist jedoch in der Softwareentwicklung ein dehnbarer Begriff. Oft mach es hier einen Unterschied in welcher Brache man sich bewegt. Schreibt man Software für mobile Endgeräte, kann es schon vorkommen, dass man die Software nicht nur einmal implementiert. Dabei würde man die Nachhaltigkeit in den Konzepten und in Programmiersprachen unabhängigen Algorythmen suchen. Bei Legacy Anwendungen würde man die Nachhaltigkeit dann wohl eher in der Änderbarkeit oder Wartbarkeit vermuten.
Aber gerade bei Legacysystemen kann es vorkommen, dass ein und das selbe Stück Code während seiner Lebensdauer von verschiedensten Personen angegriffen werden muss. Wie kann man dann Mitarbeiter dazu motivieren sich immer wieder in ältere Codeartefakte einzuarbeiten und diese zu verändern.
Es zeigt sich, dass diese Bereitschaft mit der Zeit einfach sinkt. Es werden immer wieder neue Technologien entwickelt, Sprachen werdern vereinfacht bzw. wieterentwickelt, auch die Entwicklungsprozesse entwickeln sich weiter. Es fängt schon bei so banalen Dingen wie einem Sourcerepository an, wo auch schon der Zahn der Zeit nagt.
Potentielle Bewerber suchen sich Ihren Job nicht mehr nur nach den Sozialen- und Intrinsischen- Merkmalen eines Unternehmens aus, nein es spielt mittlerweilen auch schon viel mehr der Technologischesexappeal des Unternehmens eine Rolle.
Wie siehts mit Ihrem Sex-Appeal aus?