Shop

Dienstag, 24. September 2013

Lession learned (JSF): Exception Handler

If an Exception is thrown during the execution of a Phase, the PhaseListener after phase event is called before the Exception is handled from the Exception Handler.

Dienstag, 10. September 2013

Primefaces multifile upload in IE10

Primefaces multifile upload works in IE10.
But not out of the Box in the Community Edition. There ist a fix in the primefaces version 3.5.9.

See Group Entry

But get it work with the Community Edition is far easy.

Use the fileUpload component like you would do it in IE9.
And add the CSS styles described below.

Sonntag, 8. September 2013

JSF Bootstrap Message and Messages Renderer

Add the JSF Bootstrap Render to your Page to view the JSF Messages in Bootstrap Style.
Here you can find the Code Snippets.

Sonntag, 28. April 2013

Fit to Parent in JavaFx

Versucht man mit JavaFx und SceneBuilder UIs zu zeichnen und die einzelnen Fragmente per Code zusammen zuführen, funktioniert das mit den Anchor nicht outofthebox. Die Anchor Attribute müssen beim einzufügenden Fragment händisch ergänzt werden.

Java Enum#parseFrom

How the parse an enum from an constant?

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);
}