Category Archives: News, Events & Fun

After work and more…

ReactJs – Minesweeper App

Minesweeper is well known and quite popular computer game from ’90. For purpose of this blogpost I decided to revive it in ReactJs technology.

ReactJs is JavaScript library providing a view for data rendered as HTML. React offers a model in which subcomponents cannot directly affect enclosing components (“data flows down”), and is also very effective in refreshing a view when data is changed. Its “virtual DOM” feature allows this framework to only render parts of view that actually need to be changed and that is a reason why ReactJs provides fastest reactions on user inputs for great user experience in front-end applications.

MVC architecture

Best practice when using ReactJs is to create a hierarchy with one master component on the top. That component presents the application itself and holds the global state of application. In MVC architecture, that component will be used as a controller and it will handle changes on a model state and trigger a rendering when necessary.

Creating a good model is a key step in developing any good application. Model will hold the data that represents the application current state. Each object should represent one specific element and should only contain at least outer dependency as necessary. Simpler model allows you easier data handling when changes occur.

View is implemented by creating low level React components that can be reused on multiple places in application. Each view component always represents a single model object and it contains that object as a property of a view. Each view component is also responsible for catching html events and forwarding them to controller. In order to be able to handle such events from input devices, each input device is also represented in model. In Minesweeper case it is the MouseModel that holds informations about  current mouse state and alerts controller when actions are made.

Image 1:  Minesweeper – MVN architecture

minesweeper-mvc-arhiecture

Handling state changes

Controller contains a whole global state of application. It reacts on state changes of input devices, delegates actions to a game model and updates application state when necessary. In order to be able to update application state, the controller must be aware of any state change on the model. For that purpose ‘event listener’ pattern is implemented on model.

Each model component implements interface that contains two methods: addEventHandler(eventHandler) and fireEvent(eventName, event). Each model object set an event handler callback to each of its children. So, when model object changes its state it can fire a ‘stateChanged’ event. Its parent will handle that event and fire the same event to his parent and so on and so on until event reach the controller on top of the hierarchy. Controller then handles that event by updating global state and starting render() procedure that will update the view.

Image 2:  Minesweeper – handling state changes 

minesweeper-events

This application was created as a full front-end application and requires only a browser to run. It was developed for Chrome browser and was not additionally adapted to other browsers. It was developed as full front-end but it also offers an option of adding a scoreboard that require a back-end REST service with some kind of persistence.

Live demo is available on:  http://dobilinovic.comsysto.com/minesweeper/

Source code is available on gitHub: https://github.com/Obee88/minesweeper-react

Hope you enjoy it!

Davor Obilinović

 

Advertisements

Interview with Talip Ozturk – founder & CTO from Hazelcast

Bildschirmfoto 2015-11-11 um 15.31.48Recently we had a very special guest in our Lightweight Java User Group. Talip Ozturk is the founder & CTO of Hazelcast. He is a pioneering startup founder having created the first Silicon Valley startup from Turkey. He has been working with enterprise Java since 1999. Talip gave a nice talk on Distributed Caching with JCache and beyond. After his talk we took the opportunity to ask a couple questions about him and his work.

Check out the interview with Talip Ozturk below:

You gave the talk “Distributed Caching with JCache and Beyond” on Tuesday, October 3rd in our Lightweight Java User Group.

What’s your impression of the Lightweight Java User Group & comSysto?

Talip Ozturk: Very smart and interactive group of developers. I love it.

What is so special about JCache?

Talip Ozturk: It standardizes the caching in Java. No need to learn a new caching API. We are now free to switch to any caching provider. Life is much easier this way.

How did you come up with the idea to establish Hazelcast?

Talip Ozturk: I thought it would be really cool if we had distributed implementations of all data structures and services available in java concurrency package. This way we can build distributed applications easily.

Did you always dream of creating your own company?

Talip Ozturk: Yes, since I was in college. I was curious to see how far the rabbit hole goes.

What makes Hazelcast different from its competitors?

Talip Ozturk: Its elegant design from its API to implementation to packaging and also the fact that there is great community around the product. It is built to give “feels right” feeling.

In which direction is your company headed for 2016?

Talip Ozturk: Out new hot-restart persistence is a big deal for us. Also we are working on to make Hazelcast more cloud friendly through better integration with Openshift, Docker, Cloud Foundry etc.

If you could describe yourself in only 5 words, what would they be?

Talip Ozturk: passionate puzzled curious mind

Where do you see yourself in 5 years?

Talip Ozturk: building new technology products

What would you say is so special about your job?

Talip Ozturk: understanding customer/user experience.

What event did you most recently visit and why did you visit this event?

Talip Ozturk: JavaOne, it is great place to demo Hazelcast and meet developers.

How did you come across our meetup user group?

Talip Ozturk: Through Java community. We try to attend all active Java user groups.

What do you do in your free time if you don’t write codes?

Talip Ozturk: Playing soccer. Spending time with my kids.

Imagine you’d be the king of the java world for one day, what would you try to change?

Talip Ozturk: I would ask Java Unsafe to be made ‘safe’.

When and where can we expect to see you again? 🙂

Talip Ozturk: Another Java User Group or Conference

If you missed out on Talip’s talk please check out the video below:

The slides to Talip’s talk are here available.

If you have a great topic and would like to share it with the Lightweight Java User Group, please contact us here.

 

 

 

Agiles Projektmanagement auf dem PMCamp

Was ist das PMCamp?

Das PMCamp ist die wichtigste Unkonferenz im Projektmanagement, offen und vielfältig, die Ende Juli im München stattgefunden hat. Das PMCamp bringt Menschen auf Augenhöhe zusammen, um von- und miteinander zu lernen und gemeinsam die Zukunft im Projektmanagement zu gestalten. Erklärtes Ziel dieses Barcamps ist: Wissen teilen, Wissen vermehren – es schlägt eine Brücke zwischen (scheinbar) widerstrebenden Aspekten des gelebten Projektmanagements. Wir finden, dass das PMCamp ein in jeglicher Hinsicht unterstützenswerter Event ist. Weswegen wir mit großer Freude dieses Jahr als Teilnehmer, Programmgestalter und Sponsor dabei waren.

 

Warum war comSysto beim PMCamp?

comSysto hilft vielen, Expertise für moderne Technologien aufzubauen und mittels fortschrittlicher Methoden selbst agiler zu werden. Das PMCamp war für uns eine exzellente Gelegenheit und genau die richtige Plattform, um sich mit Gleichgesinnten auszutauschen und neue Impulse mitzugeben und mitzunehmen.

Wir – Manuela, Florian, Tobias, Christian und ich – sind dort angetreten, eine in punkto Skills und gemeinsamen Interessesgebieten bunte Truppe aus Lean Java Experts, Profis mit Scrum Master Skills und Rollen im Projekt, agil arbeitenden Projektmanagern, Agile Coaches und Lean Change Managern. Jeder von uns hatte mehrere Topics im Kopf, ganz konkret, aus unseren Projekten, die uns im Moment gerade beschäftigen oder die wir in naher Zukunft angehen wollen. Unser Ziel für das PMCamp war innovativen Input in Bezug auf agiles Projektmanagement für unsere tägliche Arbeit zu sammeln, unsererseits aus dem agilen Nähkästchen zu plaudern, zu networken und so einen Mehrwert für alle Anwesenden schaffen.

Das comSysto-Team auf dem PMCamp

 

 

 

 

 

 

 

 

Die Agenda und unsere Sessions im Einzelnen

Agenda PMCampMuc

 

 

 

 

 

 

 

Die Agenda war kunterbunt zusammegestellt aus Diskussionsthemen, Workshops, vorbereiteten Talks und Funsessions. Was uns bewegt hat:

Christian:

“Das PMCamp ist als Gegenstück zu klassischen Konferenzen eine echte Bereicherung. Statt polierten Folien und Frontal-Unterricht steht hier der Erfahrungsaustausch aus unterschiedlichsten Perspektiven auf Augenhöhe im Mittelpunkt. Dank der offenen Barcamp-Kultur benötigt man nicht viel Vorbereitung um spontan eine Session abzuhalten. Es genügt Interesse an einem Thema und mindestens eine Hand voll Teilnehmer die sich ebenfalls darüber austauschen wollen. Ich selbst habe eine auf 2 Slots an 2 Tagen verteilte Diskussions-Session zu “Projektmanagement mit Agilen Teams – Planung, Metriken und Reporting” vorgeschlagen und dann auch erfolgreich durchgeführt. Das PMCamp war dafür die perfekte Bühne da Teilnehmer aus verschiedenen Branchen, Abteilungen und Unternehmenskulturen ihre Erfahrungen teilen und voneinander lernen konnten. So können wir gemeinsamen einen wertvollen Beitrag leisten um moderne Management-Methodik und agiles Gedankengut auch in größeren Unternehmen zu etablieren. Ich bin nächstes Jahr definitiv wieder am Start!”

IMG_6659

 

 

 

IMG_6666

 

 

 

 

 

 

 

Manuela:

“In der Session zum Thema “Verteilte Teams” wurde diskutiert, welche Probleme entstehen, wenn Teams an mehreren Standorten arbeiten, die eventuell sogar über die ganze Welt verteilt sind. Die Kommunikation erfolgt verstärkt über E-Mails und online (Video-)Konferenz Tools. Je größer die Kultur- und Sprachunterschiede, desto schwieriger wird die Kommunikation und der Aufbau einer Vertrauensbasis. Umso wichtiger ist es, persönliche Treffen zu organisieren – auch wenn man Teammitglieder um die halbe Welt schicken muss. Die Teilnehmer brachten sehr anschauliche Beispiele ein, zum Beispiel von Projekten jahrelang schlecht liefen, bis man sich schließlich doch zu durchgerungen hat, alle Projektmitlieder für ein paar Wochen zu Workshops an den selben Ort brachte. Interessant war auch die Frage, warum in großen Open Source Projekten wie Wikipedia oder Linux diese Probleme nicht so ausgeprägt zu sein scheinen. Spannende Themen, die uns in den nächsten Jahren definitiv weiter begleiten werden.

Das tolle am PMCamp war für mich einerseits die Diversität der Teilnehmer – Projektleiter aus großen Konzernen, Manager aus mittelständischen Betrieben, Software Entwickler, Freelancer, Consultants und Studenten waren gleichermaßen vertreten. Dadurch ergaben sich sehr spannende, vielseitige Sessions und Diskussionen. Eine echte Bereicherung!”

IMG_6660 IMG_6665

 

 

 

 

 

 

 

 

 

 

 

Tobias:

“Das Teilnehmerfeld war sehr heterogen aufgestellt (klassische Wasserfall Projektleiter, Bauingenieure, Agenturhengste, Prozessberater auf Company Ebene, viele Selbständige). Dies ist einerseits sehr positiv, weil man sehr viele Einblicke bekommt in einem unbekannte Arbeitsumfelder; ferner erfährt man wie dort Probleme und Herausforderungen angegangen und gelöst werden. Etwas negativ hierbei ist natürlich gewesen, dass man selbst für seine eigene Tätigkeit nicht immer etwas mitnehmen konnte. Allgemein fand ich den Socializing Faktor höher als bei klassischen Konferenzen.

Process Change- Fluch oder Segen“: Meine Session war als Diskussionsrunde ausgelegt. In dieser wollte ich über die Erfahrungen, Probleme und Lösungen der anderen Teilnehmer in Bezug auf die Adaptierfähigkeit von Prozessrichtlinien im eigenen Team / Abteilung sprechen. Wann zu welchem Zeitpunkt in welcher Iteration sind Anpassungen am eigenen Prozess notwendig? Welche Probleme interner und externer Art entstehen hierbei? Sehr schnell stellte sich heraus, dass die Teilnehmer wie im kompletten Barcamp sehr heterogen besetzt waren. Es entstand schnell eine rege Diskussion, die zum Teil auch durchaus kontrovers geführt wurde. Während bei uns Anpassungen am Prozess monatlich stattfinden, berichtete ein anderer Diskutant, dass sie 8 Monate brauchen für Veränderungen. Insgesamt eine lustige Erfahrung, bei der ein interessanter Erfahrungsaustausch stattgefunden hat.

Fazit: Generell finde ich das Konzept der Barcamps sehr gelungen, es findet ein weitaus höherer Erfahrungs- und Meinungsaustausch zwischen den Teilnehmern statt, von dem zumindest ich oftmals mehr profitiere als von klassischen Konferenzen mit Front-Beschallung.”

IMG_6658 IMG_6662

 

 

 

 

 

 

 

 

 

 

 

 

Florian:

“Das PMCamp: Eine tolle Veranstaltung, um mit Projektverantwortlichen anderer Unternehmen Erfahrungen auszutauschen. Klasssiches Projektmanagement spielt für uns keine große Rolle – um so mehr war ich überrascht zu sehen, wie viele Projekte noch immer klassisch “gemanaged” werden, obwohl Vor- und Nachteile zwischen klassischen- und agilen Methoden hinlänglich bekannt sind. Trauen sich viele Unternehmen noch immer nicht zu mehr Agilität?

In einer eigenen Session “Wie schaffe ich den Change?” haben wir dann mit weiteren Teilnehmern über die Herausforderungen, die sich im Rahmen der Agilen Transition innerhalb eines Unternehmens ergeben, gesprochen. Viele der Teilnehmer konnten unsere Erfahrungen bestätigen: Teams arbeiten sehr oft agil – wohingegen die Organisation um die Teams herum oft den klassischen Ansätzen folgt. So haben Teams oft damit zu leben, dass Entscheidungen von oben nach unten weitergegeben werden, ohne die, die mit den Entscheidungen im Alltag leben werden, bei der Entscheidungsfindung mit einzubeziehen. Dieses Vorgehen kann dazu führen, dass der Mehrwert echter Agilität nicht genutzt wird. Die durch die Teams unterstützte Produktentwicklung kann nur bedingt auf Veränderungen reagieren und das Produkt nicht den gewünschten Wert liefern.”

IMG_6657 IMG_6670

 

 

 

 

 

 

 

 

 

 

 

 

Was folgt nach dem PMCamp?

Jeder von uns nimmt aus den selbst durchgeführten Sessions und aus denen, die wir besucht haben, Insights mit für unsere tägliche Arbeit. Öffentlich werden sich die Sessions von Christian in einer ähnlichen Form auf einem der nächsten Management 3.0 Stammtische wiederfinden bzw. fortgeführt. Hier geht es zur offiziellen Gruppe bei Xing.

Der kommende Management 3.0 Stammtisch findet wieder bei comSysto statt. Besonderheit: wir bekommen die Gelegenheit Jeff Sutherland, den “Erfinder”  des Scrum, persönlich kennenzulernen und seinem Vortrag über “Scrum@Scale and Leadership Development” zu lauschen.

Mehr zum PMCamp München

Mehr zu Management 3.0 und Trainingstermine

Connecting your secured OAuth2 webapp with Android

In my last post I showed how to send custom notifications for Android Wear devices to an Android Wear watch.

In order to demonstrate this better I used the events from our Teamgeist App as a case example and how notifications could look like.

I mocked the server side data as the focus was on the notification part. Today, I wanted to connect to our server side data via an Android app. Therefore I needed to authenticate the Android user at the server.

How the Google OAuth2 flow works for our web app

Our Teamgeist App uses OAuth2 and Google to authenticate a user and gain some information about the users profile picture or email address. The OAuth2 flow can be quite tricky the first time. The flow between our JavaScript client and the server part can be simplified to following the steps:

1. The first request from our JavaScript application to the server will be sent without token in the HTTP header. Therefore, we redirect the user to the login page where we show the Google+ login button:

 

Web1

 

2. Depending on the current user login status the next pages could be a login screen or selection page (e.g. if the user is using multiple Google accounts). Let’s assume the user logs in. The next page will be our consent screen:

Web3 Consent

 

As you can see, our App wants access to the users’ profile information. If the user grants the permission and accepts this screen, Google will generate an authorization code. During the OAuth2 setup Google asked for a callback URL. The generated authorization code will be sent to this URL.

In exchange of the authorization code the server retrieves an access token from Google. With this token the server can obtain information about the users’ profile for a certain amount of time. Furthermore, the server gets a refresh token which lasts longer and can be used to get a new access token.

The access and refresh tokens should be stored on the server. These tokens should never be given to the client app (Neither Android nor JavaScript). On the client side we store an application bearer token. We associate this token to the user and give it to the client. That’s the only token the client needs to communicate to our server.

Connect Android to the existing flow

Let’s assume that the user using an Android app already registered over the web. In order to get any information from the server e.g. events or kudos, we must initiate a request for a bearer token. We followed a blog post from Google, step-by-step about cross-client-identity which lead us to two working solutions. Both have their restrictions.

For both of them you need to register an Android app INSIDE of your application project in the Google Developer Console. Don’t create a new one, as these will be linked together and must be part of the same project. Please verify twice the SHA1 key for the Android app you enter AND the package name of your Android application. In the beginning we started with refactoring the current notification app by changing the package name from io.teamgeist.app to io.teamgeist.android. This lead to frustrating INVALID_CLIENT_ID and INVALID_AUDIENCE errors. As we changed back to .app and recreated the Android application in the developer console everything started to work. We haven’t tried to rename it back to .android so we can’t tell if this is a forbidden keyword in the package name or maybe we were too confident about our IDE renaming android package names. If you struggle with any of the errors check your keystore SHA1 key and your packagename. Also look into this blog post, which came quite handy.

If you did everything right you can obtain an authorization code or a GoogleIdToken from GoogleAuthUtil. For this, you will need the client id of the server or web application registered in your project.

Select the Google Account

Before you start you need to let the user select an Google Account. This is done by invoking a Choose Account Intent from the AccountPicker class:

Intent intent = AccountPicker.newChooseAccountIntent(
        null, null,
        {"com.google"}, 
        false, null, null, null, null);
startActivityForResult(intent, PICK_ACCOUNT_CODE);

When the user picks one Account the onActivityResult method of the initiating activity will be triggered. In order to get the authorization code or GoogleIdToken, you need the e-mail address of the user from the intent extras.

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
...
        if (resultCode == RESULT_OK) {
            String email = data.getStringExtra(AccountManager.KEY_ACCOUNT_NAME);
....

Authorization Code

The idea using the same flow with the authorization code was tempting. Get the code from your Android application and send it to the server where the server can exchange it for a pair of refresh/access tokens. You can request an authorization code by calling:

GoogleAuthUtil.
        getToken(yourActivity, email,
        "oauth2:server:client_id:{server_client_id}:api_scope:");

This call is blocking and therefore has to be executed e.g. in an AsyncTask. Besides, the server_client_id of the scope parameter must be the client id of the server.

When you call this, you will not get an authorization code but an exception of type UserRecoverableAuthException, because you need to authorize your Android app for offline access. The exception itself contains already an intent to be triggered. It will launch a consent screen where the user has to grant the requested permissions of the app.

catch (UserRecoverableAuthException userRecoverableException) {
    yourActivity.startActivityForResult(userRecoverableException.getIntent(), 
    GRANT_PERMISSIONS_CODE);
}

Screenshot_2015-01-02-21-07-33

 

When you add more scopes to the scope string (see com.google.android.gms.common.Scopes for available permissions) the consent will contain more permission requests.

After the user accepts the consent, the onActivityResult of the initiating Activity will be called. From the extras you get the authorization code:

protected void onActivityResult(int requestCode,int resultCode,Intent data){
    if(requestCode==GRANT_PERMISSIONS_CODE){
        if(resultCode==RESULT_OK){
            Bundle extras=data.getExtras();
            String authtoken=extras.getString("authtoken");
        }
    }
}

The code has a very short time-to-live (TTL) and can only be used once. Once you send the token to the server you can get a refresh and access token in exchange. After that create a bearer token and return it to the Android app as you would do it with your JavaScript app. Add the bearer token to the header of all your REST calls.

The authorization code grants offline access to the app through the refresh token. That’s one of our reasons why we don’t like this solution:

1. If the user logs out from the Android app (remove the Bearer Token), you will need to go through all the steps again, including the consent screen.

2. In our example we also don’t need the offline access to user data (meaning the server can interact with Google without any user interaction). As we suppose the user is already registered via web and has granted the permission for offline access.

In our Android app we only want to fetch data contained in our server. Next, let’s take a look into the GoogleIdToken approach.

GoogleIdToken

The GoogleIdToken is a JSON Web Token (JWT). The JWT contains three parts: Header, payload and signature. The signature is encrypted and contains the header and the payload. With the public keys from Google (https://www.googleapis.com/oauth2/v1/certs) everybody can decrypt the signature and check if it matches the header and the payload.

The GoogleIdToken payload contains several information regarding the user and the application. If you send the token to https://www.googleapis.com/oauth2/v1/tokeninfo?id_token=[jwt] a payload could look like this:

{
    "issuer": "accounts.google.com",
    "issued_to": "[Client id of your android application from the developer console]",
    "audience": "[Client id of your web application from the developer console]",
    "user_id": "10186*************",
    "expires_in": 3581,
    "issued_at": 1420230999,
    "email": "stefan.djurasic@comsysto.com",
    "email_verified": true
}

On the server you would verify the signature and then look into the payload.

1. If the signature check is ok, you know the token has been created by Google.

2. You know Google has already verified your Android app (it checks the SHA-1 key and the package name of your Android app and compares them with the Android client registered in the same project as the web/server application) and thus provided your app with the JWT for the user with the e-mail address in the payload.

This is why you have to check the “audience” field. It must contain your web/server application client id. You could also check the “issued_to” field (also called “azp”). It contains the client id of your Android application. But this is not really needed as long as you have only one client communicating this way with your server. Google says this field could be faked from rooted devices although we don’t know how we would accomplish this.

So lets come back to our app. We want to get the GoogleIdToken. You can obtain it from Android with the same method call with which you obtained the authorization code:

Change the scope parameter in the call from

"oauth2:server:client_id:{server_client_id}:api_scope:"

to

"audience:server:client_id:{server_client_id}"

Unlike the Authorization Code request,  we directly get the response back this time. There is no need for consent screen, as the user already granted permission to the server app. On the server side Google provides the verification of the token signature with a GoogleIdTokenVerifier. You should also provide your client id of the web/server application through the Builder of the GoogleIdTokenVerifier :

JsonFactory jsonFactory = new JacksonFactory();
NetHttpTransport transport = new NetHttpTransport();
String jwt = "thestringofthejwt";

GoogleIdTokenVerifier verifier = new GoogleIdTokenVerifier.Builder(transport, jsonFactory)
    .setAudience(Arrays.asList("YOUR SERVER CLIENT ID "))
    .setIssuer("accounts.google.com")
    .build();

GoogleIdToken googleIdToken = verifier.verify(jwt);
if (googleIdToken != null) {
    //The token is valid. You can add a check for the issued_to/azp field
    if (!"YOUR ANDROID CLIENT ID".equals(googleIdToken.getPayload().getAuthorizedParty())) {
        throw new OAuthException("Wrong authorized party returned");
    }
        
}

You verified the user and the application and could send the Bearer Token to the Android app as explained before with the authorization code. The benefits you gain additionally are:

1. You need no extra call to Google to verify the token.

2. You could even change your server application to accept not only the bearer token but also the GoogleIdToken. Therefore, you could spare the creation of the bearer Token and store it to the database.

The only thing you need to do, is to check if the user has already logged in from the web and search for the users’ data in your user database by using the social id or e-mail address from the JWT.

Drawbacks:

1. The user must have logged in into the app via the authorization code flow from the webapp. There the user has to accept the consent screen.

2. The user is never logged out. If the JWT expires (60 minutes) the Android app can get a new JWT without interaction with your server. Even if you invalidate all Bearer Tokens from the user the JWT would still be valid. Blocking the user is only possible by adding a flag to the user in your database.

3. You can’t access additional data on the server side from Google with the JWT.

4. Checking for the JWT in addition to the Bearer Token needs change on our server side.

Besides all the drawbacks we prefer the JWT approach. One suggestion is to create a mixture of these two possibilities. Use an authorization code for user registration and to get the access/refresh token. For User Identification use the GoogleIdToken only.

In our next episode we will use the login to gather periodically events from our server and push them as notifications to an Android Wear Smartwatch.

Feel free to share your thoughts and opinions in the comments section below.

 

Von Mitarbeiter zu Mitarbeiter – was haben wir auf der ersten cS ONE Conference gelernt?

Wie euch meine Kollegin Selma letzte Woche schon berichtet hat, haben wir Anfang Dezember unsere erste, eigene cS ONE Konferenz veranstaltet. Ein Event der ganz und gar im Zeichen der Wissenvermittlung und des Teambuildings stand. Um einen besseren Eindruck von der tollen Stimmung und den Themen des Tages zu bekommen, habe ich mal einige Abstracts zusammengestellt, inklusive der Meinungen des Speaker und Kollegen.

 

Cindy

Da wir als Beratungsfirma hauptsächlich beim Kunden vor Ort arbeiten, ist jede Gelegenheit bei der man alle (nicht-Projekt-)Kollegen trifft schön. Dafür haben wir zwar monatlich ein Teamessen, die cS One jedoch war etwas ganz Besonderes: Da hatte man einen ganzen Tag lang Zeit und Muße sich mit allen Kollegen über verschiedene relevante sowie triviale Themen auszutauschen in einer Atmosphäre, die eine perfekte Mischung war aus “Arbeit” (Konferenzräume, Stuhlkreise) und “Spaß” (Playstation mit Guitar Hero). Je mehr unsere Firma wächst, desto wichtiger sind solche Gelegenheiten und ich freue mich sehr auf eine cS Two, Three und Four.

Vortrag: Data, data everywhere and only Map-Reduce to drink – ein Projektbericht

“Gemeinsam mit unserem Partner MapR haben wir im Vorfeld der cS One einen Vortrag auf der Strata Europe Konferenz in Barcelona gehalten zum topaktuellen Thema Internet-of-Things Architektur in Verbindung mit einem tatsächlichen Big Data Projekt das comSysto im Jahr 2013 realisiert hat. Bei dem Projekt handelte es sich um einen Mobilfunkanbieter der die vorhandenen Netzwerkdaten um sozio-demografische Merkmale anreichern wollte um so interessante örtlich-zeitlich aufgegliederte Marketing Insights zu gewinnen. Diesen Vortrag haben wir natürlich auch intern vorgestellt, erweitert um Diskussionen inwieweit die Internet-of-Things Architektur die damaligen Projektherausforderungen hätte beeinflussen können.”

Workshop: Shortcut Mania

“Es sind die sonderbaren Dinge, die uns in comSysto auf einem ganz besonderem Niveau zusammen schweißen. Z.B., dass wir uns 45 Minuten lang über die besten Tastenkombinationen in IntelliJ, Shell und Co. unterhalten können. Die Shortcut Mania Workshop Teilnehmer haben alle ihre Lieblingskombinationen wie kleine Sammlerstücke vorgezeigt und – wie es unter leidenschaftlichen Sammlern so zu geht – auch hitzig über die Überlegenheit des neuen IntelliJ Key Mappings gegenüber dem alten Key Mapping diskutiert. Am Ende waren alle Teilnehmer um einige Sammlerstücke reicher.”

Workshop_Shortcuts_2 Workshop_Shortcuts_1 Workshop_Shortcuts_3

 

Christian

Die cS ONE war eine ausgezeichnete Idee die hoffentlich in den kommenden Jahren eine Fortsetzung finden wird. Der Austausch mit Kollegen zu fachlichen Themen in einem lockeren Rahmen hilft enorm bei der Wissensverteilung im Unternehmen und kann nicht durch gemeinsame Events nach der Arbeit ersetzt werden – hier steht zu sehr der Freizeit-Aspekt im Vordergrund. Ich denke dieser Tag war der beste Beweis dafür, wie umfangreich das Know-How innerhalb von comSysto mittlerweile ist und wie viel wir voneinander lernen können.

Vortrag: Telefonica Deutschland, ein Projektbericht

“Telefonica Deutschland ist seit langer Zeit einer der größten Kunden von comSysto bei dem zahlreiche Mitarbeiter in verschiedenen Teams und Projekten arbeiten. Nicht zuletzt aufgrund der Fusion mit e-plus ergeben sich für die IT aktuell zahlreiche Herausforderungen auf technischer und organisatorischer Ebene. Neben dem regulären Tagesgeschäft müssen einerseits Teams skaliert, neue Rollen definiert und Entwicklungsprozesse jeden Tag hinterfragt werden. Gleichzeitig stehen wir auch vor zahlreichen Architektur-Entscheidungen mit weitreichenden Folgen, um die Software anschließend im laufenden Betrieb iterativ vom Ist- in den Ziel-Zustand zu überführen. Der Vortrag greift einzelne Ausschnitte aus diesem Themenkomplex auf.”

Projektbericht Telefonica Deutschland

 

 

 

 

 

 

Zusatzinfos: Den Talk hat Christian zusammen mit Jens, Alica und Otto vorbereitet und gehalten.

Vortrag: Sensor Labs

“In einer Serie aus mehreren internen Labs wurde das comSysto Office mit zahlreichen Tinkerforge Sensoren zur Überwachung von Temperatur, Lärmpegel, Bewegungen sowie Berührungen ausgestattet. Über einen Raspberry Pi wurden die Messdaten in einer MongoSoup-Instanz abgelegt. Beim Speichern von großen Datenmengen in MongoDB ist das verwendete Schema essentiell für Speicherverbrauch, die Mächtigkeit von möglichen Queries und die Übertragungszeit von deren Ergebnissen. Wir haben daher kontinuierliche und diskrete Sensordaten in untertschiedlichen Schemas gespeichert. Neben einem einfachen Web-Interface zur Sichtung der Daten wurde R für die Analyse an MongoDB angebunden. Wir haben die kontinuierlichen Daten in R als Zeitreihe eines ARIMA Modells analysiert, um Trends und sich wiederholende Muster zu erkennen. Das Modell eignet sich gut für die Analyse von Temperaturdaten, für die Analyse der Lautstärke erwies es sich als weniger geeignet.”

Sensor Lab

 

 

 

 

 

 

Zusatzinfos: Den Sensor Talk haben Christian, Lars und Julio zusammen vorbereitet. Im Lab dabei war auch Cindy und Mario. Zum Thema Labs kannst du mehr auf unserer Website lesen.

Zusatzinfos: MongoSoup ist der erste deutsche MongoDB-as-a-Service-Anbieter, entwickelt von comSysto und auch auf AWS Servern in Deutschland erhältlich.

 

Daniel

Ich finde, dass die erste cS One sehr gelungen war. Die Vortragsqualität durchwegs sehr gut und in den Workshops konnte man sich gegenseitig austauschen und voneinander lernen. Dank einem eigenen “Spielzimmer” und genügend Zeit für Pausen kam auch der Spaß nebenbei nicht zu kurz.

Vortrag: JVM Deep Dive Talk

“Was sind Safepoints, Tiered Compilation, Constant Table, Tenured oder Shenandoah? Jeder dieser Begriffe hat mit der Java Virtual Machine (JVM) zu tun. Als Java Programmierer nutzen wir täglich die JVM, machen uns aber selten bewusst wie sie funktioniert.

Dieser Vortrag bietet einen Blick hinter die Kulissen und stellt die wesentlichen Komponenten der JVM vor: Runtime, JIT Compiler und Garbage Collector. Neben dem Zusammenspiel der Komponenten, wird auch gezeigt wie man deren Verhalten analysieren kann. Damit hat man das Rüstzeug um das Laufzeitverhalten der eigenen Applikation besser zu verstehen, eigene Experimente durchzuführen und die Performance zu verbessern.”

Zusatzinfos: Daniel wird übrigens im März zwei Talks auf der Javaland halten:

Thema 1: JVM-Microbenchmarks mit dem Java Microbenchmarking Harness

Thema 2: Make or Break: The Big Impact of Small Changes in Performance

Die nächsten Talks mit Daniel in unserer Lightweight Java User Group München stehen ebenfalls fest. Im März und im Juni könnt ihr, wie wir auf der cS ONE Konferenz, gebannt Daniels Worten lauschen. Anmelden, und dabei sein!

Workshop: Modern Dev Tools

Lockere Vorstellung verschiedener moderner Tools, die bei uns im Einsatz sind (oder wir uns gern mal ansehen würden)wie z.B. Gradle für Builds.  Oder wie werden Java 8 Features eingesetzt? Wie wird Software gebaut und deployt? Packaging (Stichwort: Vagrant, Docker), Monitoring von Produktionssystemen, Logging, etc. etc.

Workshop_Modern_Dev_Tools_byDanielM

 

 

 

 

 

 

 

 

 

Franky

Volle Punktzahl! Unbedingt wiederholen und so weitermachen.

Vortrag: AngularJS in 45 Minuten

“Dieser Vortrag gibt einen kurzen Einstieg in AngularJS. Ausgehend von den Unterschieden zu herkömmlichen JavaScript-Frameworks (wie jQuery), werden die wichtigsten Teile eine “Single-Page-Application (SPA)” erläutert. Eine einfache Beispiel SPA wird auf Basis von AngularJS gebaut. Von einem Eingabefeld ohne Logik, wird ein digitales Bücherregal gebaut, welches Bücher über Ajax (REST) von einem Backend-System lädt. Am Ende habe ich einen Ausblick auf kommende Features von AngularJS 2.0 mit einer persönlichen Interpretation gegeben.”

Zusatzinfos: Franky bereitet zur Zeit einen AngularJS Workshop vor. Wer zeitnah informiert sein möchte, kann sich gerne für unseren Newsletter anmelden. In diesem werden wir über die nächsten Aktivitäten in punkto AngularJS berichten. Oder du schickst uns eine kurze E-Mail an marketing@comsysto.com und wir erfassen dich als Interessenten schon mal vorab in der Teilnehmerliste.

 

Florian

Hat Spaß gemacht, war interessant etwas zu lernen. Sinnvoll um auf diese Weise einen Raum zu schaffen, um Menschen zusammen zu bringen, die sich ansonsten nicht täglich sehen.

Vortrag: Agile im Kundenprojekt

“Zunächst habe ich eine Einführung zu unserem Kunden gegeben und über die Art, wie dieser Kunde Produkte baut, erzählt. Im Anschluss haben wir uns angeschaut wie sich basierend auf dem Taylorismus Organisationen im letzten Jahrhundert entwickelt haben, um Menschen und Teams zu führen. Diese Art der Steuerung hat in einem komplizierten Umfeld zu den nötigen Erfolgen geführt, jedoch hat sich gezeigt, dass in einem Umfeld komplexer Rahmenbedingungen diese Art der Steuerung versagt. Mit Beginn der Digitalen Revolution hat man die etablierten Steuerungstechniken versucht ebenso auf die Softwareentwicklung zu übertragen, was jedoch nicht funktioniert hat. Um den Stand eines Softwareentwicklungsprojektes festzustellen wird klassischerweise auf Content/Scope, Zeit, Kosten/Ressourcen und Qualität geschaut, was den etablierten Steuerungskonzepten entspricht. Ein neuer Ansatz, auf Projekte zu schauen, bietet 7 Perspektiven: Value, People, Functionality, Quality, Tools, Time, Process. Basierend auf diesen 7 Perspektiven haben wir uns in dem Talk die Arbeit von Team New York angesehen und diskutiert.”

 

Max

Die cS One Konferenz fand im letzten Jahr zum ersten Mal statt und kann sich wirklich sehen lassen. Es war sehr schön, einen Tag mit fast allen Mitarbeitern zu verbringen. Die Stimmung war toll, der Spirit war zu spüren. Besonders beeindruckt hat mich ich die Vielfältigkeit der Vorträge, die gute Aufbereitung der Themen. Leider hat mir die Zeit für die Topic-Tables ein bißchen gefehlt, was ich hoffentlich bei der cS Two nachholen kann.

Workshop: Gruppendynamik

“Viele von uns arbeiten im Berufsalltag in Teams und/oder haben täglich mit Gruppen von Menschen zu tun. In jeder Gruppe laufen bestimmte Prozesse ab und es bilden sich mit der Zeit bestimmte Strukturen aus. In diesem Workshop besteht die Möglichkeit mal abseits des sachlichen Inhalts, mit dem sich eine Gruppe beschäftigt, auf die darunterliegenen gruppendynamischen Merkmale einer Gruppe zu schauen. Aufbauend auf den formalen Merkmalen eines Gruppe wie der Zweck der Gruppe, die Mitglieder und einer gewissen zeitlichen Perspektive, wollen wir hier Themen betrachten wie Gruppenrollen, Normen in Gruppen und Modelle zur Beschreibung eines Phasenverlaufs. Diese Mechaniken beeinflussen die gute Zusammenarbeit und die Aufgabenbewältigung einer Gruppe erheblich. Das Wissen über diese Mechanismen kann das Analysieren und die Intervention in einem Team erleichtern.”

Vortrag: Stressmanagement

“Stress ist die Würze des Lebens”, so hat Hans Seyle die Bedeutung des Stresses für uns Menschen beschrieben. Wir alle empfinden Stress in gewissen Situationen, der eine mehr der andere weniger. Dieser Vortrag beschäftigt zum einen mit der Beschreibung was Stress für uns Menschen bedeutet, wie wir Stress erleben und welche Implikationen dies hat. Zum anderen sollen Strategien aufgezeigt werden, wie mit Stress umgegangen werden kann. Im ersten Teil wird beschrieben, was Stress auslösen kann (Stressoren), wie wir dann den Stress verarbeiten (persönliche Verstärker) und welche Reaktion daraus entsteht. Die Stressreaktion kann in körperlich, koginitiv, emotionale und behaviourale Aspekte aufgeteilt werden. Ausgehend vom Konzept der Salutogene werden personliche als auch institutionelle Strategien der zur Stressbewältigung und Prävention vorgestellt.”

 

Robert

Insgesamt fand ich die Konferenz sehr gelungen, sowohl von der Organisation, der Mischung der Vorträge und Workshops, sowie den Ideen mit den Monkeys. Ich würde mich sehr auf eine cs Two freuen 😉

Workshop: Building a mobile webapp with famo.us

Famo.us ist ein Open Source JavaScript Frameworks zur Erstellung komplexer UIs für Web  Anwendungen. Die eigens von Famo.us entwickelte Rendering und Physics Engine soll dabei die Umsetzbarkeit von flüssigen Animationen im Browser gwährleisten, wie sie bislang nur native Apps  boten.  Ziel des Workshops war es den Teilnehmern Famo.us und dessen Konzepte vorzustellen. Dabei  wurden in einzelnen Kapiteln die „building blocks“ einer Famo.us Anwendung erläutert. Mit  JavaScript Live-Coding, ausgehend von einem einfachen Github Projekt, wurde erläutert wie eine  Famo.us App aufgebaut ist, wie unabhängige UI Elemente, sog. Views, erzeugt werden, die  untereinander mit Hilfe von Events kommunizieren. Über das Programmiermodell von Famo.us  konnten die Teilnehmer diese UI Elemente positionieren, transformieren und mit Animationen  versehen. Das Ergebnis war eine kleine, einfache Webanwendung, in der alle genannten Konzepte  exemplarisch umgesetzt wurden.

Zusatzinfos: Mit dem Monkey meint Robert unser Firmenmaskottchen, das omnipräsent ist bei comSysto. Ob als Wegweiser auf der cS ONE Konferenz, “besetzt”-Türschild, Namensgeber unseres internen Newsletters oder Plüschäffchen zum Mitnehmen. Auch “g´suffa!”-Sticker haben wir mittlerweile (ein Bild davon findet ihr in Selmas Blogpost).  Die sind mit dem Facebook-Like vergleichbar, sozusagen Sticker-gewordene, bavarisierte Kudos , die wir gerne und reichlich uns gegenseitig vergeben. Du willst auch einen “g´suffa!”-Sticker? Kein Problem. Drop us a line (marketing@comsysto.com) und wir schicken dir einen zu!

cS ONE Konferenz Lageplan

 

 

Firmenmaskottchen Monkey beim Chillen

 

 

 

 

 

 

 

 

 

…und ein Moodboard zu comSysto haben wir auch in einem Speed-Workshop erstellt:

Workshop_cS-Moodboard

 

 

 

 

 

 

 

Neben den Speakern habe ich noch ein paar Meinungen von Kollegen eingefangen:

Christina

Super coole Sache. Sollten wir wieder machen. Vielleicht voten wir für die Themen das nächste Mal, wie auf Barcamps. Die Unterlagen waren professionell und liebevoll gestaltet.

Stefan

Die Vorträge waren toll und das Alternativprogramm (Recreation Area) hat auch gepasst. 🙂

Iris

Ich fand es schön, dass man die Gelegenheit hatte, neue Mitarbeiter kennen zu lernen, und man erfahren hat, wer was überhaupt macht bei comSysto. Ich fand es auch schön, dass meine Kollegen aus Kroatien da waren. Sonst spreche ich mit ihnen nur per Video.

Selma

Bei der cS One Konferenz hatten wir nicht nur die Gelegenheit unser Wissen mit anderen Mitarbeitern aus der Firma zu teilen. Wir hatten auch die Chance einander besser kennenzulernen. Da wir viel miteinander arbeiten, finde ich das dies sehr wichtig ist für Teambuilding. Außerdem finde ich es super, dass die Mitarbeiter bei den Talks sich die Themen selber aussuchen durften und Talks über Themen halten konnten die sie selbst sehr interessieren.

Summa summarum: Sehr interessante Themen und Workshops, informative Topic Tables und eine gut besuchte Spielwiese haben uns einen tollen Tag bereitet mit viel Input und noch mehr Spaß. Wir von comSysto können eine cS ONE Konferenz nur empfehlen.
Die cS ONE war zwar eine interne Veranstaltung, wir organisieren aber auch öffentliche Trainings, an denen auch du teilnehmen kannst. Einen Überblick über alle Trainings, die wir anbieten, findest du hier.

Brandaktuell und besonders möchte ich das nächste 2-Tages-Training zum Thema Continuous Delivery im April hervorheben. Interesse? Early Bird gilt noch bis Ende Februar.

Introduction to comSysto´s cS ONE Conference

We were planning this amazing event for a couple month. On December 4th, 2014 it was finally time to start with the cS One Conference. This event was the first ever internal conference for comSysto, therefore everyone was enthusiastic and very excited about the outcome.

The Idea Behind It / Motivation

The introduction to the conference was made during breakfast by Daniel Bartl, one of the owners of comSysto.

Featured image      Featured image

As a proponent of the idea “New Work, New Culture”, we always try to find a way how to give our colleagues a chance to do something they deeply care about and love, to transfer knowledge to each other, to socialize with each other and be able to work in teams together.

The cS ONE Conference was all about knowledge transfer and team strengthening. comSysto employees had the chance to organize their own workshop or bring certain topic up for discussion in a group setting, which was conducted during working hours. The employees were very passionate about their workshops and group discussions and were looking forward to the conference. Everyone had the chance to sign up for the workshops and talks which, took place that day.

The Agenda

In order to start our day with lots of energy, we kicked it off with great breakfast which was very delicious and kept us going until lunch break thanks to lunchbox catering.

Featured image      Featured image

The talks as well as the workshops started both at 10 am. See below the timesheet for each talk and workshop.

Featured image      Featured imageThe topics of the talks were as follows:

  • JVM Deep Dive
  • Angular JS
  • Footfalls reloaded (Talk from Strata Barcelona)
  • Stress management & Burnout prevention
  • Agile at Emnos
  • DIY IOT Sensor Labs

The topics of the workshops were as follows:

  • How groups of people work
  • Shortcut Mania
  • comSysto moodboard
  • Modern Dev Tools
  • Building a mobile web app with famo.us
  • MOOC Mania

The topics of the tables were as follows:

  • comSysto Continuous Improvement Board
  • BIG PICTURE Guild
  • Wissenskombinat Guild
  • Marketing: Outlook for the 1st half year of 2015
  • Trainee @ comSysto + small workshop
  • Managing directors table
  • Introducing the new office team and their roles
  • GULP 2.0

The topic tables at comSysto were similar to a booth at an exhibition, and each topic table covered a different subject matter. Each colleague had the chance to drop by and inform themselves about the certain focus area. Many of the topics were work related. As most of the talks have lots of internal information about clients and projects, we can only show you two of the sessions (GULP 2.0 and JVM Deep Dive).

The guild tables were groups of employees that share knowledge, tools, codes about certain topics. In the BIG PICTURE Guild, employees explore data in small projects like Kaggle competitions, sensor data analysis, IOT, location tracking and anomaly detection. They basically try to get knowledge out of the data mainly by using machine learning methods. Wissenkombinat is the guild that has its focus on knowledge transfer and employee development. The aim of the Wissenkombinat is to improve the good “knowledge” (e.g. increasing efficiency, increasing communication between each other and transferring knowledge, etc.) and to find ways how to better learn from each other. If you want to read more about our guilds (there are several more) then please follow this link to our website.

Featured image        Featured imageFeatured image         Featured image

Each attendee had the chance to rate the talks, workshops and topic tables with our mascot sticker (see below).

IMG_2943

Work Hard, Play Hard

Featured image      Featured image

The chillout corner was very popular. comSysto employees had the chance to play playstation, which by the way belongs to teambuilding :).

What do you think about comSysto’s One Conference?

Does it encourage you to start your own internal conference?

You are so convinced by it and want to join our team? 🙂

Share your thoughts with me.

A first timer’s experience at Strata Europe

I am totally overwhelmed by the impressions I got as a first timer at a Strata Europe conference, which was this year from 19 November to 21 November in Barcelona. The seven(!) different tracks included talks of high quality covering topics from a theoretical standpoint as well as an architectural and tooling view. The most interesting talks for me personally however were those in which the speakers shared their experiences about the real world application of the presented concepts.

_93A9821

As a perfect starting point I joined the D3 tutorial by Sebastian Gutierrez (DashingD3js.com). There I learned the basics of how D3 works, which enables me now to understand and possibly customize all the libraries that are built on top.

Continue reading