Tag-Archiv für 'javascript'

03
Mrz

Ruby on Rails Entwickler gesucht

Wir suchen einen erfahrenen und motivierten Softwareentwickler mit hervorrangenden Programmierkenntnissen und viel Kreativität als Verstärkung für unser Entwicklungsteam. Du liebst die Kunstfertigkeit der Programmierung und hast den Ergeiz verständlichen Code zu schreiben und diesen optimalerweise durch stetige, testgetriebene Refaktorisierung zu pflegen.

Als Senior bist du auch für den Design von Datenbanken zuständig und hast fundierte Kenntnisse in SQL sowohl auch der objektorientierter Analyse und Design unter Anwendung von Entwurfsmustern. Die bist von agilen Methodiken begeistert und arbeitest gerne im Team und verbesserst konstant die Abläufe und Qualität der Arbeiten und hilfts deinen Kollegen bei der Paarprogrammierung oder durch einen Code Review.

Du solltest sehr gute Kenntnisse im Design von besonders benutzerfreundlichen Webseiten haben, welche mit Prototype, Scritaculous und JQuery zum Leben erweckt werden. Du legst Wert auf eine saubere Trennung von XHTML, CSS und JavaScript und beherrscht diese Techniken anstandslos. Falls notwendig werden Unklarheiten in der Bedienung in einen Usability-Test geklärt.

Du arbeitest selbstständig im gesamten Prozess mit: Von der Beratung über den Design bis hin zur Entwicklung und Wartung der Systeme. Die bist kommunikativ und hilfst bei der Leitung der Projekte mit und kannst auch Pflichtenhefte und Kostenschätzungen erstellen.

Wir verwenden hauptsächlich Ruby on Rails/Radiant und Flex um hochdynamische Webapplikationen zu entwickeln, verwalten unseren Code mit Git und nutzen Apache/Passenger auf Linux Servern in der Produktion, auf welche wir mit Capistrano deployen.

Du solltest dich aber nicht scheuen auch einmal bei der Wartung von älteren Systemen in Java oder PHP Hand anzulegen, oder aber auch neues wie Erlang oder Objective C ausprobieren zu wollen. Kenntnisse von Java sind von Vorteil, da auch Ruby und Flex von der Java Plattform (JRuby) und Tools wie Ant profitieren können.

Obwohl unsere Applikationen professionell von einem externen Partner betrieben werden, solltest du dich gut mit der Administration diverser Linux Servern auskennen (Ubuntu/SuSE/RedHat/Debian) um die Umgebungen der diversen Test- und Produktivservern für unsere Projekte zu planen und verwalten.

Wir sind von den Vorteilen von Open Source überzeugt und stellen unsere eigenen Codes der Allgemeinheit zu Verfügung und helfen auch bei anderen Projekten aktiv mit.

Einige Jahre Erfahrung in der Entwicklung webbasierter Anwendungen sind ideal und du solltes über eine fundierte Ausbilung (ETH/Uni/FH) oder genügend praktischer Erfahrung in der Softwareentwicklung verfügen.

Wir sind ein kleines Team welches gerade im Umbruch ist. Weg von den grossen e-Commerce Systemen mit JEE zu eher kleinen, ausgetüftelten und  hoch-dynamischen Webseiten. Du hast die aussergewöhnliche Gelegenheit mit deinem Wissen den Weg in die Zukunft mitzugestalten.

Falls du dich angesprochen fühlst, schreib mir doch eine Email an michael.kessler@screenconcept.ch oder ruf mich unter 041 748 44 58 an, damit wir uns kennenlernen können. Und ja, wir arbeiten bereits an unserer eigenen Webseite, die aktuelle ist schrecklich ;-)

20
Okt

HTML Selectbox Optionen verschieben

Als ich auf einem Webinterface die Optionen einer SELECT-Box mittels JavaScript umsortieren musste, dachte ich es gibt im Internet sowieso tausend gute Implementierungen - wieso also selber eine entwicklen? Nach kurzer Zeit wurde ich auch schon auf diversen Seiten fündig, jedoch genügte keines dieser Scripts meinen Anforderungen. Ich benötigte nähmlich eine Version, die mehrere Optionen zusammen um mehrere Positionen verschiebt, und nicht nur um eine Position rauf und runter.

Damit beim Verschieben die Optionen nicht aus der SELECT-Box raus fliegen, musste zuerst eine Funktion zur Überprüfung und Korrektur der Schrittanzahl her:

function checkMoveCount(obj, moveCount) {
   if (moveCount == 0) return;
   if (moveCount > 0) {
      for (var index=obj.options.length-1; index>0; index--) {
         if (obj.options[index].selected) {
            var maxMove = obj.options.length - index - 1;
            if (maxMove < moveCount) {
               moveCount = maxMove;
            }
            break;
            }
         }
      } else {
         for (var index=0; index<obj.options.length-1; index++) {
            if (obj.options[index].selected) {
            var maxMove = index * -1;
               if (maxMove > moveCount) {
                  moveCount = maxMove;
               }
               break;
               }
            }
         }
   return moveCount;
}

Nun kann also die Hauptfunktion für die Umsortierung implementiert werden:

function move(id, moveCount) {
   var obj = document.getElementById(id);
   moveCount = checkMoveCount(obj, moveCount);
   if (moveCount == 0) return;
   if (moveCount > 0) {
      for (var index=obj.options.length-1; index>=0; index--) {
         if (obj.options[index].selected) {
            var toOption = index+moveCount;
            for (var from=index; from<toOption;from++) {
               swapOptions(obj, from, from+1);
            }
         }
      }
   } else {
      for (var index=0; index<=obj.options.length-1; index++) {
         if (obj.options[index].selected) {
            var toOption = index+moveCount;
            for (var from=index; from>toOption; from--) {
               swapOptions(obj, from, from-1);
            }
         }
      }
   }
}

Diese Funktion benötige eine kleine Hilfsfunktion, die das tatsächliche kopieren der Optionen übernimmt:

function swapOptions(obj, from, to) {
   var theOptions = obj.options;
   var isFromSelected = theOptions[from].selected;
   var isToSelected = theOptions[to].selected;
   var tempFrom = new Option(theOptions[from].text, theOptions[from].value,
                             theOptions[from].defaultSelected, theOptions[from].selected);
   var tempTo= new Option(theOptions[to].text, theOptions[to].value,
                          theOptions[to].defaultSelected, theOptions[to].selected);
   theOptions[from] = tempTo;
   theOptions[to] = tempFrom;
   theOptions[from].selected = isToSelected;
   theOptions[to].selected = isFromSelected;
}

Nun können mehrfache Optionen um beliebige Schritte nach oben bzw. unter verschoben werden. Unschön ist, dass die Verarbeitung der Verschiebung nach unter bzw. oben sehr separat gehandhabt werden. Die implementationen sind ähnlich aber halt doch nicht gleich. Eine Variante wäre, die Funktion move() in zweit Funktionen aufzusplitten: moveUp() und moveDown(). Es währe wahscheinlich auch möglich, mit ein paar Tricks beide Varianten in der gleichen Schlaufe abzuarbeiten, ich denke aber dieser Code würde man dann selber in zwei Wochen nicht mehr verstehen.

Das Resultat kann auf der Selectbox Beispiel angeschaut werden.




Februar 2010
M D M D F S S
« Jun    
1234567
891011121314
15161718192021
22232425262728

Werbung


Buttonitis