Dienstag, 25. Juli 2017

Cucumber and Gherkin language in Nederlandse taal

Cucumber has over 60 Languages, which all can bee seen in a Language File .json gherkin-languages.js but be carefull not any cucumber implementation is working in any language whithout problems. As most projects English is the most useful language. But if you do some Language specific application for example a dutch tax calculating software. It might be usefull to use native web

Gherkin example in Nederlandse taal: Stel Als Dann

#language: nl
Functionaliteit: Een broodje Kaas maken
  Om dat ik trek heb 
  Als iemand die graag kaas eet
  Wil ik een broodje kaas eten

  Scenario: Ik mak een broodjke met kaas
    Stel ik heb een broodje
    En ik heb kaas
    Als ik de kaas op de broodje doe
    Dan heb ik een lekker broodje kaas

Gherkin example in Deutsch: Gegeben Wenn Dann

#language: de
Funktionalität: Ein Wurstbrot machen
  Weil ich Hunger habe 
  Als jemand der gerne wurst ist
  Will ich ein Wurstbrot machen

  Szenario: Ich mache ein Wurstbrot
    Gegeben ich habe ein Brot
    Und ich habe Wurst
    Wenn ich die Wurst aufs Brötchen Lege
    Dann habe ich ein Wurstbrot

Gherkin example in English: Given When Then

#language: en
Feature: Make a cup of Tea
  As an English guy
  I wanna drink Tea

  Szenario: I make a cup of tea
    Given i have a hot cup of water 
    And i have some tea
    When i put tea into the hot water
    And remove 5 minutes later
    Then i have tea 

Using Java 8 Features in Cucumber SpecDefinitions

with cucumber java 8 function you have a nice way to use anonymous function for your feature files which makes the old annotations and underscore naming convention obsolete Example code for the ultimate Bowling game .Feature from the Bowling game Kata
  Scenario: Calculating Game Score for utimate Bowling game
    Given I play a 10 rounds Bowling game
    When I bowl a game X X X X X X X X XX X
    Then the game result will be 300 points

Scenario: Calculating Game Score for the worst Bowling game
    Given I play a 10 rounds Bowling game
    When I bowl a game 00 00 00 00 00 00 00 00 00 00
    Then the game result will be 0 points

package bowling;

import cucumber.api.java8.En;
import org.junit.Assert;

public class GameStepDefs implements En {
    private Game game;
    public GameStepDefs() {
        Given("^I play a (\\d+) rounds Bowling game$", (Integer arg0) -> {
            this.game = new Game(10);
        });
        When("^I bowl a game ([0-9, X//]+)$", (String gameString) -> {
            this.game = GameStringReader.createGameFromString(gameString);
        });
        Then("^the game result will be (\\d+) points$", (Integer gameResult) -> {
            Assert.assertEquals(gameResult, this.game.getPoints());
        });

    }
}

Make sure to add the cucumber-java8 plugin to your dependencies in Gradle or other build Tool
dependencies {
    testCompile 'info.cukes:cucumber-java:' + cucumberVersion
    testCompile 'info.cukes:cucumber-java8:' + cucumberVersion
    testCompile 'info.cukes:cucumber-junit:' + cucumberVersion
    testCompile 'junit:junit:' + junitVersion
}

The 10 best PhoneGap tricks for beginners

These post waiting as a draft for 1 years ... i´ll just publish it now Deploy Early on Real Device - Deploy Automated on Real Device Seeing log Messages http://stackoverflow.com/questions/6854127/filter-logcat-to-get-only-the-messages-from-my-application-in-android adb -d logcat : *:S Deployment Strategie -Seperate web application Use Build tools. Use tools which automatically install dependencies, minimize your code, prepare builds and run tests Bower, Grunt and NPM should be in your standard. Webapp and Phonegap in different repositorys. Automate as much as Possible fast builds does mean fast feedback and fast feedback means you catch errors as early as possible. Deploy fast, use a device use a test player eq B BlueStack it is faster than the usual android emulator. www.bluestacks.com Use a good integrated IDE, we recommend Webstorm. Build your app locally. The remote Build via Phonegap.com is easy for your first up. Uploading each time to build costs a lot of time, local build makes it faster. How to do that ? Install Android SDK or Android Studio C:\Development\adt-bundle\sdk\platform-tools;C:\Development\adt-bundle\sdk\tools Install Gradle https://docs.gradle.org/current/userguide/installation.html set PATH ;%JAVA_HOME%\bin;%GRADLE_HOME%\bin Debugging adb logcat -c adb logcat kann man prima zusehen Problems with Angular $http.post This was my biggest problem cause it breaked the app completely it is a cors cross origin device problem cordova plugin add cordova-plugin-whitelist The Whitelist Plugin is required to avoid cross origin problems Build Tool Default is Gradle but for some reason Phonegap for me used ANT on remote but gradle for locale which caused some problems Use good console - original one is more verbose than intellijs [error] {"error":"Error index.html not found"} [error] Reason 1 HTML Error in index.html could cause this Reason 2 was orginated by existing /build/www directory which could not be deleted. rm -rf (ohh i got this shit linux commands on windows console) helped me to fix it . Wired solution remove and add plattforms

Dienstag, 6. Juni 2017

Agile Developer Zertifizierung - Silber und Bronze

In zusammenarbeit mit CertByCells biete ich jetzt eine Agile Developer Zetifizierung Die Zertifizierung für den Bronze Level kann Kostenlos auf der Website abglegt werden. Agile Developer Zertifizierung auf CertByCels Für die Silber Zertifizierung fällt eine Gebühr an. Generell kann die Prüfung auch Schulung abgelegt werden, hierzu sollte der Entwickler mit Agilen Praktiken wie z.b. Test Driven Development, Clean Code, Scrum, Kanban und dem Agilen Manifest vertraut sein. Für interessierte Entwickler welche noch nicht so viel Erfahrung im bereich der Agilen Softwarentwicklung haben biete ich eine Schulung an, diese eignet sich besonders für Teams welche sich noch in der Agilen Transition befinden. Agile Developer Schulung: AGILE DEVELOPER ZERTIFIZIERUNG Die Schulung Agile Developer wird als Zertifizierungsschulung angeboten und enthält sowohl die technischen Teile agiler Entwicklungsmethodik wie TDD, Pair Programming, Clean Code und Qualitätssicherung, als auch methodische Ansätze wie Scrum, Kanban, User Stories oder Agile Meetings. Die Vermittlung erfolgt neben theoretischen Einheiten auch in vielen praktischen Übungen. Inhalte: Agile Organisation: • Scrum • Das Agile Manifest • Zusammenarbeit in Agilen Projekten Agile Qualitätssicherung: • Test Driven Development • Testverfahren • Software Metriken Agile Entwicklungspraktiken: • Clean Code • Software Design Prinzipien • Xtreme Programming Die Entwicklungsbeispiele und Übungen erfolgen sprachübergreifend oder angepasst in Java, PHP, C# oder JavaScript und können auch an den Bedarf des Kunden angepasst werden. Vorkenntnisse: Entwicklungserfahrung Zielgruppe: Entwickler, die in Agilen Projekten arbeiten. Dauer: 4 Tage Verkürzung bei Vorkenntnissen z.B. Clean Code und Scrum möglich. Abschluss: Zertifizierungsprüfung Agiler Developer Silber (Cert By Cels) Die Schulung kann über WebConsults.eu gebucht werden.

Donnerstag, 10. November 2016

Angular 2 Observing a Service and find Results

As i do not write so much blog posts, i decided to write some just short snippets for known problems. This covers searching inside Object Array for Angular 2 and Typescript Finding index of an Array Entry with Angular 2 and Typescript Example of how to use Observer able service in Angular 2
//service is Observable
this.name = 'nameToFind';
GetGalleryPics(galleryId).subscribe((data:Picture[]) => {
        //success
        this.pictures = data;
        //searching inside the array and find first entry 
        this.picture = this.pictures.filter(pic => pic.name == this.name)[0]
        console.log(this.picture);
        //find 
        let pictureIndex = this.pictures.findIndex(pic => pic.name == this.name);
        console.log('this picture'+pictureIndex);

      },

Freitag, 6. Februar 2015

Neue Schulung: Clean Code and Software Craftmanship for PHP Developers

 Clean Code and Software Craftmanship for PHP Developers

Ziele der Schulung:
Die Teilnehmer der Schulung lernen nach welchen Kriterien Sauberen Code zu Entwickeln und code nach Qualitätskriterien zu bewerten und zu optimieren. Ein besonderer Wert wird auf das Erlernen von Techniken gelegt die eigenen Clean Code Fähigkeiten kontinuierlich zu verbessern. Durch Übungen in der Gruppe am Rechner und auf Papier werden
Arbeitsmittel:
Beamer, Flip Charts, Moderationssticker, Arbeitsbögen, Programmierung im Team im sogenannten Mob Programming


Zeit:

Tag 1 Beginn 1 Tag: 10 Uhr
Ende ca 17:30 Uhr,
nach Absprache lockeres Coding Dojo bis 19:30
Tag 2: 09:00-17:30

Themen:
Grundlagen:
Was kann durch „Schlechten Code“ passieren.
Software Craftmanship, was ist das ?
Warum ist Clean Code wichtig ?
Der “Business Value“ von Clean Code.
Werte guter Software
Boy Scout Rule
WTF Per Minutes

Code Aufbau:
Prinzipien guten Codes
Solid Prinzipien
Lose Kopplung – Hohe Kohäsion
Design Patterns
Design Patterns in PHP Frameworks (Zend, Symfony)
Clean Architecture im Modernen web Umfeld
Warnung vor verfrühten Optimierungen


Methoden zur Coding Verbesserung:
Refactoring Legacy Code
Coding Katas
Coding Dojos
Code Reviews Effektiv gestalten
Pair Programming
Test Driven Development / PHP Unit
PHP Code Sniffer
Software Metriken
PHP Mess Detection
Whitebox Testing
Continious Integration mit PHP









Montag, 1. Dezember 2014

Agile Strategien für das Refactoring von Legacy PHP Anwendungen

Viele Teams stehen vor der Herausforderung das Erfolgreiche Web-Anwendungen wartbar und flexibel zu halten.

Schneller Wirtschaftlicher Erfolg hat die Betreiber oft dazu gezwungen schnell viele Features Umzusetzen, was oft zu lasten der Code Qualität ging. Mit der Zeit haben sich hier die soganannten Technischen Schulden angehäuft. Der historische gewachsene Code wird zum bekannten Problem des sogenannten „Big Ball of Mud“. Feature Entwicklungen dauern lange werden somit teuer und das Team ist oftmals mit Bugfixes im beschäftigt. Eines der größten Risiken an diesem Zustand ist auf einen sich verändernden Markt nicht schnell genug reagiert werden kann.

Um nicht wie schon viele andere zeitweise Erfolgreiche Web Angebote an dieser "Feature Lähmung“  zu scheitern ist es an dieser stelle erforderlich die Entscheidung für ein Refactoring zu treffen.

The Big Bang Relaunch


Oft wird als Lösung eine komplette neue Entwicklung der Plattform angestrebt, doch gerade im benutzerabhängigen Endkunden Markt des öffentlichen Web ist dies besonders schwierig, oft ist man neben dem wohlwollen der Benutzer zudem noch auf eine effektive SEO Platzierung des eigenen Portals angewiesen. Bei kompletten neu Entwicklungen ist das Verhalten der Benutzer schwer vor raus  zu sagen, oft stoßen solche Relaunches auf ablehnung bei den Stammbenutzern, gerade Communities reagieren hier zeitweise sehr empfindlich.  Zudem ist oft über Monate oder Jahre hinweg eine Parallel Entwicklung beider Versionen erforderlich. Bei Umsetzung neuer Features gibt es hier eine Doppeltbelastung. Ich war in der Vergangenheit häufiger in solche Big Bang Refactoring verfahren verwickelt oder habe von Entwicklern aus erster Quelle davon gehört wie sie schief gegangen sind.

In Zeiten von Lean Software Entwicklung mit Agilen Methoden halte ich dieses Vorgehen zudem für nicht mehr Zeitgemäß. Da die Entwicklungszyklen zu lang sind und ein wirklich verlässliches Feedback erst beim Big Bang Relaunch erfolgt.

Agile Refactoring: das wichtigste zurerst.


Ziel eines Refactorings sollte es sein möglichst schnell messbare Erfolge zu erzielen,
Entwicklung neuer Features muss schnell billiger werden und die  gebundenen Ressourcen für Bugfixing und Maintanance müssen schnell reduziert werden.

Gerade im Bereich von historisch gewachsenen PHP Projekten die oftmals ohne feste Code Struktur die Prinzipien Objektorientierter Programmierung oder Design Patterns noch nicht oder nur halbherzig Angewendet. Framworks der ersten Generation wie z.b. Zend Framework 1, Cake oder Symfony 1 in teil Bereichen eingesetzt.

Ein häufiger Ansatz ist ein Technologie switch beim Aufsetzen beim Refactoring, moderne Frameworks wie z.b. Zend Framework 2, Symfony 2, Yii im PHP Bereich,  das Spring oder Play Framework in der Java Welt bieten hier neben vielen anderen mögliche Lösungen
Daneben bieten auch Node.Js oder NoSQL oft alternativen für bestimmte Einsatzszenarien.
Um Funktionalität aus dem Legacy Code stückweise her raus zu ziehen eignet sich die Erschaffung von Microservices hervorragend, hierbei ist relativ egal ob diese zunächst über PHP angesprochen oder gleich als entsprechende REST Services etabliert werden. Diese Methodik könnte man auch "Refactoring to Services" bezeichnen.


Um die Refactoring Maßnahmen abzusichern empfiehlt es sich sofern nicht vorhanden möglichst schnell eine gewisse Testabdeckung mit kurzen Feedback Zyklen zu etablieren.
Es geht hierbei nicht um eine möglichst vollständige Abdeckung sondern um ein effektives Sicherheitsnetz das möglichst die wichtigsten Stellen zuerst betrifft.
Unit Test eignen sich zwar für neue Entwicklungen sehr gut sind für Legacy Anwendungen allerdings ungeeignet.  Die effektivere Lösung ist es bestehende Funktionalität erstmal durch  End 2 End test abzusichern, dies kann mittels einer Behavior Driven Development Schicht wie zum Beispiel Cucumber oder Behat erfolgen oder direkt mit einem Test Tool wie beispielsweise Selenium Webdriver. Wenn man gar nichts hat kann man auch mit dem Selenium IDE Tests aus dem Browser capturen, diese sind allerdings bedeutend weniger wartungsfreundlich als die Webdriver Tests.

Grundsätzlich ist bei Refactorings nicht zu vergessen das neben den Technischen Neuerungen auch das Team eine wichtige Rolle spielt,  neue Technologien und Vorgehensweisen müssen  elernt werden, gerade auch deswegen sind kurze Feedback schleifen und regelmäßige Anpassungen sehr wichtig.  Agile Vorgehens Methodik wie das Einbeziehen des gesamt Teams unter Erwägung technischer und kaufmännischer Gesichtpunkte wie z.b. in Scrum Planning Meetings bietet hier eine gute Grundlage.

Mögliche Massnahmen beim Agilen Refactoring


- Applikation in Module splitten
- Split oder sogenanntes A/B Testing für Einzelbereiche der Applikation
- Refactoring hin zu einzelnen Modulen und Services
- Entwickeln von Ziel Paradigmen für Architektur und Code
- Schaffen einer Deployment und Continious Integration Pipeline
- Einführen oder erweitern von Tests
- Workshops zur Identifikation der Problemstellen
- Software Metriken
- Coaching des Teams
- Einbau von Feedback schleifen für Aktuellen Stand

Planen sie ein Refactoring ihrer PHP Legacy Anwendung ?
Gerne stehe ich ihnen als Coach, Trainer und Entwickler zur Verfügung
http://www.webconsults.eu/