AngularJS 2 workshop

Last Saturday I have attended AngularJS 2.0 workshop organized in Wrocław. The event has been organized by DevMeetings (http://devmeetings.pl), started ~9 am and finished rougly 6 hours later.

Hosts were employees of LiveChat (https://www.livechatinc.com/). One of them - Wojciech Kwiatek - gave a talk on AngularJS2 based on their experience at one of the local tech groups. LiveChat decided to switch to AngularJS2 couple of months ago - even though AngularJS2 was not stable at all at that time (they have jumped on the AngularJS2 bandwagon when the whole thing was still in alpha!). It seems they are still pretty happy with the decision. I know that they have been looking at ReactJS as well, but decided that ReactJS may not fit that well into their usecase, and they would need to create a framework from many libraries on their own - so the ‘completeness’ of AngularJS2 was also important.
It was great that hosts had real experience with AngularJS2, and not only “played with it” at home :)

Two skeletons of the apps were prepared - one using gulp, and the other utilizing webpack. If you would like to have a look, the webpack version is freely available on github: https://github.com/wkwiatek/angular2-webpack2

The whole agenda was as follows:

  1. Introduction to AngularJS2
  2. Components
  3. Events
  4. Pipes
  5. Services and Dependency Injection
  6. Forms
  7. Http+Rx.js
  8. Routing

It was quite a lot of stuff (mostly brand new to most of the attendees) and I don’t think a single person has managed to finish all the tasks. I have personally go through the first 6 of them, but haven’t touched Http+Rx.js & routing at all.

I especially liked how forms are implemented in AngularJS2 - that is a common thing for web developers to create, and it is not of minor importance. We had interesting discussion on forms in ReactJS at one of the last local tech group meetings. Yes… forms are things you just can’t escape from :)

What I lacked a bit was how to structure the whole application. I have spotted that many attendess just took the “finished? go with the next task” approach, and had most of the code in single .ts file. I just wanted to avoid that, and spend some more time on re-structuring the application, so I had everything (classes, components) in separate files.

Summary:
I am happy I have attended the event. I only read about AngularJS2 before, and apart from tiny snippets, I have not written any AngularJS2 code. This was the best opportunity to get more familiar with the technology, create something bigger, and get the ‘feeling’ of the new, upcoming and technology.

The event was another opportunity to do some more coding in TypeScript. I am not sure if I like it or not… on one hand it seems to mee just too much of a ‘C# for JavaScript developers’ type of approach, I realize that there is additional effort required to have type definition for all the libraries you use. But on the other hand - I think that TypeScript may allow for further improvements of JavaScript performance (thanks to type annotations and optimizations that could be possible to achieve thanks to it).

Thanks to Wojciech Kwiatek, his friend from LiveChat (sorry, forget the name) and DevMeetings team for making this event happen!

My personal rant against GeekWeekWro

Last year the first edition of the GeekWeekWro (http://geekweekwro.pl) iniative has taken place in Wroclaw. I wasn’t really bought by it, and the same is this year - I don’t understand what is the point of having it (having GeekWeekWro).

I have couple of doubts, qestsions regarding this idea:

  1. What is the purpose? What is the aim of it?
  2. What extra value does that bring? What does it improve within local tech-communites?

The answer for the 1st question is… “I don’t know”. Even worse, you won’t find any goals of it on its own website (date: 3rd of March, 2016). The only thing you can find is as follows (translation from Polish by me):

GeekWeekWro #2 to tydzień pełen wiedzy, technologii i przede wszystkim zabawy!
Od 11 do 16 kwietnia 2016 po raz drugi będziecie mogli wziąć udział w spotkaniach grup, które działają we Wrocławiu!

Translation:

GeekWeekWro #2 - a week full of knowledge, technology, and more importantly - fun!
During the week of 11 - 16 of April 2016, you will have the chance to take part in tech group meetings in Wroclaw!

Well… that’s all true, but… can’t we take part in the tech group meetings in other months? When no GeekWeekWro is on schedule? Well… sure you can! Most of active group participants are doing it thorough all the year!
So… there is nothig that GeekWeekWro improves. There is no gain for the community. There is nothing ‘extra’ that happens during this ‘special’ week.

Unfortunately, there is one thing that GeekWeekWro makes worse: it introduces clashes between events.

(Sidenote):
When I settled down in Wroclaw in 2012, there were not many actively functioning tech groups. I was complainig a bit about it, but someone told me to put some effort and improve the situation. Since then I have been active member (and co-organizer) of the .Net group (I have given several talks), together with my friend Adam I have started AngularJS group (I am still main organizer), I am founder and leader of the functional programming group and I co-organize local Go Language group. I am not putting all these things in here to show you how awesome I am - I just want to point that in the area of how local tech communities work - I know what I am talking about.

Let’s get back to the problem of clashing events. As an organizer I tried hard to avoid situation when the newly started group will clash with another one (that is probably more established already). I know that others (organizers) are thinking alike. Why would we put people in a position of choosing between attending meeting of group A vs attending meeting of group B if this is not necessary? I would like everyone to have opportunity to show up on as many events as possible. It should all be only personal limit, not something that myself (other organizers) are doing on purpose.

So, if you think about cramming many events during a single week - it is obvious that there will be no choice, but to choose which event to give up from. Is that the goal of the GeekWeekWro? To limit, to restrict people from attending many events during the month that GeekWeekWro takes place? If so - well… job well done!

I don’t see any way as how to improve this situation. In my opinion the whole idea is flawed. I don’t see any benefits of GeekWeekWro, but I can easily see disadvantages of having it. I clearly see how it negatively affects local community, and makes things worse than usual. I hope it will not get very popular (and I hope for it only because I want to be able to attend as many events as I usually do). The groups I am the main organizer of will definitely NOT join this initiative. And I am more than certain, that some others share my views and will thank me for that (for not introducing even more clashes between events).

I have discussed ‘the problem of GeekWeekWro’ briefly during the last meeting of the local Python group. My friend Paweł suggested that it could have been much better idea to have several groups meeting in one place, each group giving 1 talk only. That could help integrate local community much better than what GeekWeekWro is currently doing.
Unfortunately, I still can see couple of problems:

  • how to create ‘packs’ of groups? Matching JS/front-end focused with Go/.Net/Java - will that work for everyone?
  • when to meet? For some people some days are simply ‘no-go’ days. In case there are many groups having a meeting on this particular ‘no-go’ day - such a person will not be able to attend a single event out of x they ususally attend
  • can we prepare such ‘joined’ events in such a way so that these are interesting for many people?
  • some groups are quite popular, and you may easily expect 50+ people attending - what if there are 4 groups meeting at the same place, same time? How do we find venue(s) for such meetings? It seems to mee that mostly due to this fact, this is not something we may organize.

Besides - do we really need this kind of event to ‘integrate local tech groups’? Most of the groups are easy to find on meetup. If someone thinks some particular group could be of her/his interest - there is no other option as to go and check for yourself. That’s it. You don’t need GeekWeekWro for that. You don’t need GeekWeekWro, so that people unaware of existence of such groups will read about ‘how many tech oriented groups we have in Wrocław’. That is a pure nonsense. Anyone from the IT industry must have heard about local communities - either from work mates, colleagues, or via electronic channels. Those who are unaware - are probably not the target anyway.
And hearing in the ‘news’ or reading about tech groups on websites that have nothing to do with tech community - is this of any value? For the community?

TestFest conference 2016

On the 20th of February 2016 I have attended a TestFest conference ([PL] http://www.testfest.pl). It was targeted at testers/QAs working in IT industry. I am not one of them ;) but as my friends were organizing the whole event, and they let me know about it - I decided to take part in it.

Epic Battle: Zombies vs Mutants (Mutation testing) by Tomasz Dubikowski

It was the best talk of the whole conference from my perspective. It was not only a great introduction into mutation testing, but also very funny talk. Tomasz is great at presenting concepts. If you ever wandered what mutation testing was - you should definitely watch Tomasz’s talk (it is not available to watch yet). In my opinion the biggest gain there was that Tomasz made sure to present the whole concept on the very well though of example(s). In my opinion it was huge part of the success of this talk. I have watched several talks about mutation testing so far, but not many were close to the quality of the talk given by Tomasz. If you seem to struggle to understand the whole concept of mutation testing - I would strongly advise you to spend ~hour of your life watching Tomasz Dubikowski’s talk. Trust me - it will be time well spent.

Other Talks

Some other talks were mainly adressed to testers (or as Tomasz put that - QA Evangelists :) There were interesting talks on how to test the hardware to be sent into space (small satellites), how big companies from the telco industry make sure that what they develop could cope with high traffic.

Some other talks were not that interesting for myself (please mind: I am a developer) - for example I haven’t gained much from the talk that focused on the need of understanding of RDBMSs for QA person. Everything was already known to me. What stroke me though, was that it seems the “marriage” between QAs and Devs are still… challenging relationships :) I think most of the problems (technical ones) QAs have when aiming at testing particular application are due to the fact that they get very little (if any) help from developers. Yes - we, developers - are to be blamed here.
That is pretty much surprising, as we all should have a feeling that the success is only possible if we all make an effort to build the product of the best quality possible. So - lesson for us - developers - we should be more open, and more willing to share our knowledge with QAs.

I have missed two last talks:

  • “Wyzwania w automatyzacji WebDriver” (Challenges in WebDriver automation) by Tomasz Fajks, Tomasz Bień
  • “Narzędzia do zautomatyzowanego testowania bezpieczeństwa aplikacji WWW” (Tools for automated security testing for web applications) - by Borys Łącki

I hope that videos will be available on the TestFest’s youtube channel (https://www.youtube.com/channel/UCsDeChNGyDDHTevmoC3DrEQ) soon.

Workshop (errors prediction)

I have missed the 2 talks mentioned above only because I have decided to join one of the workshops, namely the one entitled: “Predykcja elementów błędogennych w kodzie w praktyce” (Prediction of error causes in practice) - by Jarosław Hryszko. I had no expectations for this workshop whatsoever, but I thought that I know nearly nothing about the subject, so there was a high chance for myself to learn something. And I must say I wasn’t wrong with my reasoning ;)

Have you ever heard of KNIME (http://knime.org) ? I have not heard about it as well :) So this is Eclipse based tool that allows you to create workflows for data analysis (as I understand). The great power of this solution comes from available “boxes” (components) that are ready to use. These are of different kinds:

  • data input (reading from various files)
  • data transformation (different techniques/algorithms are available)
    The outcome of the whole workflow is mathematical model, that could be later on used to process another set of data.

At the beginning we were all given a very short introduction to the KNIME platform. Jarosław explained how to create workflows, how to connect elements (boxes/components) together, how do we make sure there are no errors etc. Jarosław mentioned that the tool is so easy, that everyone who is capable of using a mouse should be able to use.
The last part of the workshop was the most challenging one. Jarosław explained us the real power behind KNIME - ability to create models based on the data provided, and analyzing data with the help of the models.

So… is there any possibility to predict where errors in code could/would occur? The only technique I knew so far was as follows:

  • gather system statistics (especially focus on measure cyclomatic complexity and similar code metrics)
  • gather data on which particular files in the repo are the ones that are being changed most often

Create a 4 section box, having following groups:
a) complicated, frequently changed
b) complicated, infrequently changed
c) non-complicated, frequently changed
d) non-complicated, infrequently changed

Those components/source files that belong to the ‘A’ group are those who are most likely to have new bugs introduced in. Those in the ‘B’ group, probably are buggy (or were buggy) and we should make sure that we test them properly. ‘C’ group contains code which is usually frequently changed due to changing requirements, but if not many errors were introduced so far - we should not worry about this group as much as of ‘A’ & ‘B’. The last area is the one that is of the least importance (from the perspective of possibility of new bugs being introduced).
That approach should not be anything new for anyone who spotted the correlation between frequent changes & code complexity and number of bugs found in particular source files.

What Jarosław demonstrated was much more sophisticated. There were 3 requirements:
a) code metrics
b) history of bug fixes (based in Jira, if I remember correctly)
c) data from repository (frequency of changes - if I recall)

After the model was created it would be possible to have another code metrics applied as input for the workflow, and get prediction on which parts of the application code are very vulnerable to bug introduction. That approach literaly blew my mind out.

Of course, this requires a lot of discipline (input data - this is not something you can ‘borrow’ from someone else - another team/company). The other thing that could be a bit of a problem is: what happens if team gets changed: new people join and some other leave the team? The overall experience of the team changes. That could definitely impact the structure of the code, and its quality.

Anyway, I think it was very well spent ~2 hours. I may not use this technique, but being aware of such an approach is (in my perspective) a real eye-opener.

Jarosław’s bio [PL]: http://www.testfest.pl/wordpress/?page_id=973
Jarosław’s home page (including some materials we have used during the workshop): http://hryszko.net/
KNIME tool: http://knime.org

Summary

So even though TestFest was not target at developers, I definitely think it was worth to spend whole Saturday in the building of the local Technical University. I have had a chance not only to get to know some interesting personas, but also learned couple of things.
I have meet with my colleagues (organizing the event) later in the evening at the after party, and we have spent good couple of hours discussing different topics (not all related to IT at all), enjoying good food and beverages.

Do I plan to show up on TestFest next year? Definitely. I hope I will meet some of the people I meet the next year as well!

Please note, that talks, conference site etc. are in Polih only.
TestFest conference site [PL]: http://www.testfest.pl
TestFest conference YouTube channel [PL]: https://www.youtube.com/channel/UCsDeChNGyDDHTevmoC3DrEQ

Management 3.0 & moving motivators

Couple of days ago I had a chance to attend first meeting of the newly created group focusing on “Management 3.0”. My understanding was that it was planned to talk about the burn-out and motivation for work, but it turned out that this has been slightly changed.

After the introduction we started talking about our expectations regards the group and the meetings. It was great, as I had a very little knowledge of what the Management 3.0 is all about (and there were others who knew a lot more in this area than myself).

At some point we have started discussing work motivation factors, and Piotr - event host - introduced the concept of “moving motivators”. As Piotr explained - there were some psychological studies and it seems that there are 12 main motivators: but as 2 of them refer to very personal area (family & sex relationship) we have focused on the remaining 10. Piotr has prepared a card pack for each attendee. The pack contained following cards:

  • curosity (I have plenty of things to investigate and to think about)
  • maestry (My work challenges my competence but it is still within my abilities)
  • relatedness (I have a good social contact with the people in and around my work)
  • status (My position is good, and recognized by the people who work with me)
  • goal (My purpose in life is reflected in the work that I do)
  • power (There’s enough room for me to influence what happens around me)
  • order (There are enough rules and policies for a stable environment)
  • honor (I feel proud that my personal values are reflected in how I work)
  • acceptance (The people around me approve of what I do and who I am)

We have briefly discusses the meaning of cards. What was surprising that many of us had different thoughs about the very same card(s).

Later Piotr asked us to put the cards in the following order:

  • pick 3 which are the most important
  • pick 4 that are also important, but not as important as the first 3
  • pick 3 that are least important for us

It is all important in regards of picking new work. If 2 out of 3 “most important” things will actually be lower in new place - is this a good choice?

Another thing that Piotr mentioned was that it was important to take a photo of the order of the cards. Why? As our thinking of “what is the most important for me” changes through time. So it could be interesting to see how our approach to career/motivation goals change.

Acodemy.io - AngularJS & WebComponents workshop

Last Saturday I had a chance to join couple of folks from Wroclaw and take part in the AngularJS+WebComponents workshop. The whole event has been run by the 10Clouds(http://10clouds.com) - interesting IT company from Warsaw which specializes in modern solutions (made mainly using JavaScript, Php and Python).

I have had a chance to work with AngularJS and that’s why I was more interested in WebComponents part of the workshop. I have done some reading before the workshop on WebComponents, so I had a bit of understanding what these beasts are, but I have never created one myself :)

What I liked about the event is that I get much better understanding of the WebComponents. I haven’t had a chace to use them before. I was not sure what the difference between WebComponents and Polymer library was. Right now I know, that the aim of Polymer is to make using WebComponents a bit easier. Unfortunately, from the talks I had with some of the devs who already done some effort and used WebComponents I realized that Polymer is not yet ready to be used in production environment. Polymer still has no stable version, but its API has been greatly changed, and many breaking changes have been introduced some time ago. So for myself, the take-way was: WebComponents are definitely the future of web development (front-end), but at the moment Polymer is not ready to be used in production quality applications.

I think that the event was very well prepared. We have started with pure AngularJS application (let’s say it was a Spotify clone) and then slowly made some improvements/changes to it. It was very interesting to see how WebComponents could be used from withing AngularJS application. Some steps were quite complicated, and that was the moment when asking the mentor about help was the best decision.

The great thing about the event was that the company did not hide its aim: become better known in Wrocław, as they are about to expand their local office (at the time of writing it, the employed only ~3 devs in Wrocław). They way they approached their goal was awesome: no posters all over the town, no “conference” (usually such events are not of high quality) - but organizing something that is a huge challenge, an event that participants can benefit a lot from. Personally, I think this is the very best way to attract people to start working for a newly settled down company.

The other great thing was that there was a possibility to talk to couple of developers already working for 10Clouds (they were mentoring groups during the event). So if anyone had any question in regards how the company works, what kind of project do they usually work on, what is their approch to forming teams, how do they organize their work in terms of the methodology - all these (and many more) questions could be easily answered either during the meeting or during the after party.

10Clouds - thank you for making it all happen!