Wednesday, March 28, 2018

On talks and talking

I love talks. I consider them a top expression of the human intellect. They rank second only to a good book on how people communicate, collaborate, share knowledge, share opinions and make progress.

Each talk is an image of the speaker. It reflects its intentions, its knowledge, its passion and its theatricality. The ultimate judge of the talk are the listeners in the crowd. They accept or reject the talk by also talking! If they liked it, they will talk about it to others and they may even give a new talk inspired by the previous one. If they didn't liked it then they either don't talk about it or they give a talk supporting the opposite view of the previous talk.

A talk can be very important as when a head of state announces the plans of the government but it can be non critical as when a soccer coach explains how he will win the next game. A talk can be very formal as when a scientist presents a new medicine but it also be very casual as when a mother answers questions of her kids about the world. A talk can also be emotional, influential, motivational, educational and much much more. There are excellent historic talks in all topics for example politics, science, religion. There are also excellent fictional talks in all topics for example politics, science, religion.

From all these amazing topics i would like to focus on one particular type of talk.

Information Technology Talks


I am an information technology professional, i work as a software engineer for many years. It is essential for my profession to attend conferences to catch up with the later developments since IT is the fastest changing field. The talks at these conferences are mostly about engineering: Presentations of new products and tools, discussions about best practices and speculations of the future of IT. So, what kind of talks are delivered at IT conferences?

New developments, products and tools


These are the talks about new trends and the future. Engineering is an always evolving discipline and progress never ceases. In such talks you can hear about new storage systems, new programming languages, new programming environments and essentially everything new that might not existed even just a month ago. The important thing is to be absolutely clear in what aspects the new thing is better than the old. The IT field is a bit of a fashion victim. New technologies appear continuously and professionals become fascinated by buzzwords and rush to adopt them almost without thinking. This kind of talk is very important and many conferences are remembered because of technologies that appeared there. In these talks the focus is on the product. The speaker can deliver an impressive talk but in the end everything is about the product whether it is good or not. One example of such a talk is the presentation of Docker at dotScale 2013.

Best practices with technology


These are the talks where an expert in some area delivers a talk about using a technology effectively. He discusses feasible approaches, best patterns, good usage examples and usage counter examples. The audience can be inspired to use a technology, adopt some guidelines and start thinking like the expert. This is the equivalent of "learning from the masters" in art. In these talk the focus is on the speaker. The way he presents the material, the examples and his thoughts can make a big difference between a boring talk and a classic.  An excellent example of such a talk is Joshua Bloch on API design

The Community


These are the talks about the people. It is of the greatest importance that people must communicate and collaborate to exchange opinions and ideas. This is how progress is achieved. These talks about the organization of communities and the conventions for communication and collaboration and no less important than the talks about products and practices. This is best demonstrated by the open source movements. Products that started humbly as weekend projects, or as personal tools have become excellent software because of the many people that contributed ideas and code. Moreover such talks explain the present and reveal the future. In such talk you can understand why ruby is not yet good enough for machine learning and predict the future of Python. IMHO these are the talks that make a conference worth going to. An excellent example of such a talk is the opening keynote of Russ Cox at GopherCon 2015 

Lightning Talks


Admittedly, preparing and delivering a good talk is neither easy nor straightforward. It definitely requires some preparation and it may require some expertise on the field of the talk. The latter is something that candidate speakers see as a prerequisite or even as a burden but it does not have to. Some of the best talks are by people who were curious or interested in a subject, studied it a bit and decided to share their findings. Their talks helped others to demystify the topic, study it, talk about it and so on. Remember that a talk is not a lecture, it is not indented to teach. This requires the full theory-practice-example cycle and cannot be done in 45 minutes. The purpose of a talk is to inform, inspire and provoke thought.

Nevertheless the issues of preparation and expertise are valid. The best practical way to loosen them a bit is the lightning talk The speaker has a little amount of time, usually 15 minutes to make a talk on a topic. Because of the short duration it requires little preparation, since the material for 15 minutes is small, and little expertise, since in 15 minutes you cannot go deep on any subject. Lightning talks come in various formats that emphasize content, theatricality, brevity etc. The most popular formats are Ignite, for which there is an OReilly conference and PechaKucha There are many examples for each on the web. In my free time i like to watch them especially on topics i have no idea about, for example why Japanese paint brushes are the best

Lightning is not light


Some may argue that in 15 minutes you cannot deliver something good. Well, the practice contradicts this claim rigorously.

First of all there are excellent lightning talks in the web. I highly recommend the series by Francesc Campoy "Just for Func" which is on topics for the Go programming language and the series by David Heinemeier Hansson "On Writing Software Well" which is on general software engineering topics but with a bias toward the Ruby language. On the average each of these talks is about 20 minutes, easy to watch and with very good content. These talks are very inspirational. After each video you want to rush to your laptop and start practicing on what you have just heard.

Secondly there is the practice. More and more conferences include a session for lightning talks in their schedule and this sessions becomes one of the best moments of the conference. I have watched lightning talks in dotGoFOSDEM and in voxxeddays and some of them were even better than the actual talks. The speakers and their talks represented a wide spectrum. Seasoned experts on their specialties and novice speakers on state of the art technologies giving very well paced talks.

Lightning talks and communities


But what about local, small communities? Is the lightning talk relevant? I would say: yes it is and in some ways more important that the regular talks.

Small communities, like the go, java or javascript meetup of a town are about their people. It is of the greatest importance that they meet regularly and exchange information and opinions on their favorite topics. In such communities everyone should know about the other members. Who is a spring expert? Who works currently with typescript? Is there a company that uses kubernetes in production? Is there a startup that considers elixir for production? The creation of a small web between the members of a community greatly favors both personal and community wise progress. People in communities are both teachers and students. They teach and learn from each other depending on the topic. As topics change and evolve teachers become students and vice versa. The only constant is the community that acts like a safe and secure environment for the transformation. Meetups and conferences can be organized better, faster and up to the challenges if the communities are well informed about the needs of the members.

First of all lightning talks are about identification. Each member can certainly give a small talk:
  • I am John, i work with J2EE and in my company we do web analytics using mongoDB
  • I am Patrick, i work with Python on a custom CI/CD system for AWS
  • I am Maria, i like Go, read some things about it and i think it suits my needs better than C++
Second they are about the trends and needs of the community
  • I am Peter and i think J2EE is dead, we should move to Spring
  • I am Johanna and i think RoR is too slow for web apps
  • I am  James and i used d3.js effectively for the new dashboard of my company
Third they complement the schedule of a meetup perfectly. It is much better to have a central talk on say "jpa persistence" and then some lightining talks on hibernate, jooq and ibatis that a second central talk on a different topic.

You should give a talk


Every professional want to improve. That is well understood and respected. That's why he reads articles, attends conferences and practices constantly. One of the best roads to improvement is giving a talk. The process of preparing the material, organizing it, presenting it and answering questions on a topic puts the knowledge and the skills of a speaker to a very good test. It is like a sports event. Even if you go fully prepared you may loose but you will learn from your defeat. Also as in sports you cannot wait to be of world champion skill before your enter the arena. You start from the C division and you climb to the top. The same holds for talks. You think you know a subject? Give a talk! It is the ultimate test. If it goes well then you can be sure you are good at it and move to your next challenge. If it does not go as desired you can learn from it, correct your mistakes and go on.

There are countless meetups and conferences to submit a talk proposal. In Greece i can suggest JHUG(my favorite!), GreeceJSAthens Ruby MeetupAthens Gophers and PWL Most of them accept lightning talks (JHUG and PWL for sure) and do monthly meetups so there is no hurry or a deadline for a submission.

Enjoy!


Sunday, January 7, 2018

Remembering 2017 with forgotten information

As usual, at the end of a year, we look back and try to remember all the moments, the good and the bad, the happy and the unhappy. Our memories are brought back using notebooks, photographs, pictures, sounds, bookmarks etc. All this information, although it seems big, is consumed in afternoon, and this seems amazing since we are sure that in the previous year we accessed very big volumes of information from sites, blogs, books, radios, television etc. Where is all this information now? Well it is lost. Unfortunately we live in the digital dark ages and information is not archived or classified properly. It becomes more and more difficult to find old data. Everybody cares and builds for real time data and access only.

I got the habit of archiving thinks i like so that i can access them anytime. However this is just the tip of the iceberg. My archive for 2017 is just a big directory of saved pages, pdfs, images, mp3 and in general a bunch of unstructured data. Clearly i must find a better way, maybe something like perkeep but this is not the point. The point is that we are loosing information and we can't tell if something is important until we need it a second time.

Nevertheless a bad archive is better than no archive and it can remind you some great moments. Here are some of my favorite photos of 2017. Some of them are famous, some of them not. There are real photos, edited photos and sketches. I couldn't find the original source for most of them so there are no references to the sources. None of them is mine and i don't have any claims on them.

Enjoy

An artist painted the ruins of an apartment to give a glimpse of how it used to be

A new born baby beat spiral contraception. Life triumphs!

Your personal point of view is not globally accepted

Scary past

Man and nature

Reading is travelling

From a bookshop in US. Modern politics have issues

A young boy plays the violin at the funeral of his music teacher. Music took him out of poverty

The children's world is amazing

Listening to the radio in his bombed apartment

Sailing

The most famous comic immigrant responds to current US immigration policy

In the NY subway

Sword

Problem

Solution

The pope talks with the personnel of the ISS

The French president Macron during his visit in Greece

Why football isn't always like this?

Chess has become an internet spectacle

Found in excavations in Greece, a 2.5K years old ring with a battle scene engraved



Monday, December 18, 2017

What you gonna do when they come for you?

Artificial Intelligence (AI) is the focus of modern research in information technology. The successes of deep learning in narrow tasks like voice and image recognition and processing made the industry confident that in the near future we will see an AI breakthrough and every software system will integrate an AI subsystem both for the human-computer interface and for the actual information processing. The future will be characterized by AI personal assistants, self-driving cars, computer tutors for university courses, robot surgeons, digital fashion designers and writers and the list goes on since it seems that it is limited only by our imagination and not by our technology.

To most people all the above seem both futuristic and utopical. IT professionals who work in companies that have dedicated teams for machine learning (ML) and data processing get a glimpse of what is coming but mostly they are small applications in narrow sections of their business domain like autocompletes, suggestions or data categorizations. Even for them large scale AI is something that is done somewhere far far away.

And then, all of a sudden, AI knocks your door. For me it happened last week when was announced a new chess engine and a new way to create indices for databases. In these two domains, chess and computer science, I have devoted much time and work to get some expertise so the thought that now ML conquered them was at first shocking but when I relaxed and gave it a proper thought, I become excited for the upcoming future.

Chess

A new engine, AlphaZero, defeated the previous engine world champion Stockfish 28-0 with 78 draws. The news received great publicity in chess sites like chessbase and chess.com Top GMs like Vishy Anand the 15th World Champion reacted to the news. But what was so special about the new engine?

AlphaZero is the successor of AlphaGo a machine for the game of Go, which beat the human world champion last year and that caused sensation as the game of Go was regarded too complex for a computer. But AlphaGo not only became capable of playing but did it with reinforcement learning a subdomain of machine learning. The machine was latter tuned and trained for chess, learned to play in 4 hours and reached world class level at about a day using again reinforcement learning. To oversimplify the process, the machine started with absolutely no knowledge of chess, played games against itself, learned from the mistakes and evolved. During the match with Stockfish it didn't use any databases of chess games and rules. Traditional chess engines use brute force algorithms to prune the tree of variations. They also employ large database of openings and endings for help. Until now researchers believed that a machine cannot learn chess with ML. AlphaZero proved that this was a prejudice.

Does the existence of such a strong engine implies that the game is now dead. Absolutely not! More people play the game today that ever despite that there exist strong chess engines that even the top grandmasters cannot beat. The new machine with the novel approach to chess opens new ways for a better understanding of the game.

The usual way that players use a chess engine is as follows: they enter a game into a board and they have the engine run in the background. When the engine finds an error it popups a notification window saying "You moved the bishop to c5, you should have moved the rook to c1" and that's all. Depending on the level of the player he may or may not understand why the bishop move was wrong and why the rook move is better. People think in terms of plans, time, space, center and other chess terms. The chess engine cannot make an explanation with words, it can just say good moves. Now let's have a look at a random chess analysis from the internet like this. As you can see there are phrases in English explaining the moves and the plans. Imagine if we can feed these analyses to AlphaZero. Using the chess engine and a system for natural language processing it could combine words and moves and produce analyzed games for human with comments like "The rook move is wrong it looses time. Better move the knight to organize an attack in the center". This is a good case of embracing the machine. Players should analyze their games, in other words create more data for the machine, submit them to the engine, reflect on the feedback and start over again. This would help us better understand both the machine and the game and certainly won't prohibit us from playing chess.

Computer Science

Last week I saw the slides of an interesting talk by Jeff Dean the head of Google Brain, google's AI sector. In this excellent talk there was a section on "Learned Indexed Structures" with a link to a paper. There they present experimental results for replacing traditional search structures like B-trees, hash tables and bloom filters with machine learning models, and the results are indeed astonishing as they get the same correctness semantics with a performance speedup.

Index structures are used to speedup access to a large dataset. Suppose you have a large set of records of books. You can create an index structure for the authors in a preprocessing step and then be able to quickly retrieve all the books of an author without having to check every record. Traditional index structures like B-trees are using heuristics and smart algorithms underneath and are implemented traditionally as code. Their characteristic is that they are context unaware, not adaptable to data and they try to handle even the worst cases where the data distribution is not suitable for the algorithm.

The learned index takes a novel approach. It views the index as a model to be trained with the data. It uses a small portion of the data to generate and train the model which is subsequently used as the index and facilitates queries and updates. Another view of the above procedure is that it computes the cumulative distribution function of the data set. Then a query for record r will use P(r) to find the record in the data set. To summarize: you don't invent algorithms or configure anything. You use your data to train a predefined model which you use for indexing. The paper describes all the details and has all the background on the research but for now just note that a learned index is an ML model trained on your data and not a complex algorithm that tries hard to rebalance the internal search trees to maintain the performance semantics.

Suppose now that the above becomes mainstream and eventually databases come with such indices. What about our unnecessary expertise on understanding and using indices? Do we become obsolete as engineers? Of course not! Instead we are evolving. Nowadays because our building blocks are algorithms we think using keys, partitions and types. Our abstractions and flows are based on these building blocks. In the - near? - future we will think using models and their composition. Their advantage is that models hide the implementation details like primary and foreign keys and column types. They also compose easily in arbitrary ways. For example we won't have to specify joins and subselects, we will only have to make the appropriate query and the engine underneath will combine the models to answer the query. More important is that models can be shared and that will lead to libraries of models. That will make learning easier as software will be distributed alongside data models that operates on. Imagine for example containers with database engines tailored for particular data sets, vms with data pipelines optimized for selected tasks or even whole cloud deployments tuned for our applications. No more configuration, parameter tuning, setup scripts etc. We may take this a bit further and get software by presenting the data not the other way as we do today. We are making the first steps to escape the world of technological fetters for a true information age where we are working only and for the pure information.

Aftermath

AI evolves with a geometric pace and eventually will enter the comfort zone of everybody. But it is not something to worry about. Every new advance, surely makes old knowledge obsolete but it also opens new ways for exploration and usage. The future is very promising both for our work as IT professionals and as digital citizens.

PS I will be happy to meet you at RetroCon 2031 and play a game of chess with you after my talk on implementing secondary indices with java.




Monday, November 13, 2017

Languages

How do people communicate with each other? Of course with a language. Formally a language is a system of communication using sounds, notation, glyphs and symbols to transfer information between two speakers. This is the essence of English, Greek, Italian, Chinese and all other languages.

The language is the most versatile human tool. It can be used for very simple information content like "my name is Spyros" to very significant information like "The earth rotates round the sun". It can support daily life "don't forget to buy bread" and it can create art "Sing to me of the man, Muse".

Recently I was to France to attend a conference and I had disadvantage as I don't know French. I was however amazed to realize how many other language I could use to communicate with many different people in different contexts. The most amazing thing is that you realize that most of these "tools" are actually languages afterwards you use them to communicate and not when you learn them.

Human Languages

I can't talk French but I can talk Greek, English and Italian. Every time with everyone we could find a common language to talk. The human languages are amazing. Everyone of them contains the civilization, the history and the customs of its origin and it exposes them rigorously. For example the Greek word "Μουσείο" - "Museum" in English - means the place of the Muse and reveals the ancient use of Museums as places of worship and inspiration. Most people try to learn additional languages and if possible they would learn them all.

Programming Languages

The conference I was in France, was about the programming language "Go". Most people there think that Go is a very good language and they prefer it for their programs. Programming Languages are in essence notation for generating engineering artifacts for computers. Programmers choose them based on simplicity, performance, clarity and consistency. They like to compare a language between each other and sometimes this leads to flame wars, a popular activity for programmers in social media. When talking to another programmer, even there isn't a common human language you can communicate using code, some gestures and basic words. You just put a laptop in between, one writes some code, the other corrects it etc. This escalates nicely in talks. If you talk in English about a difference between Go and Java it eventually will go to code and we will exchange code snippets than words. In this kind of art the monuments are not the Iliad and the Divine Comedy but rather open source projects like spring, kubernetes, rails and many others. There is however a very notable difference between programming and human languages. People like it very much when they talk in different language but they hate it when they have to use a programming language other than their beloved one.

Chess

When in Paris, I frequently visit the Gardens of Luxemburg where people enjoy good weather practicing chess and other sports outdoors. Chess has its own notation like Bg3, Nf5, Qa5 etc. This notation can be used to write games for future reference, but also to talk with the opponent even if no common human language exists. In a given position a player can propose alternative moves and plans using just the position of the pieces. He can say "Nf5, Rg1, Qh3 better" and the other player immediately understands not only his intentions but also his style and aspects of his character. It is amazing how far such discussions can last using only just the chess notation.

Sketching

When everything fails you can always draw something. Of course you don't expect someone to give you the directions to your hotel by drawing a map. But what happens when you go a shop with art supplies because of your hobby? There you will meet people with the same interests and soon you will exchange portfolio and start drawing new sketches. The language is the drawings and the words and the lines, the colors and the composition.

And much more

Of course there are many other alternatives. Things you can consider as a language include music, cuisine, sport, fashion and many more. It is important to realize that all these are used to communicate with people and reveal more about someone than this CV. They are not just notation, sounds or gestures. They are complete languages.

Monday, August 21, 2017

What if programming languages were accommodation for tourists

Finding good accommodation for vacations is neither easy nor straightforward. It requires some experience and some investigative skills. I was in a good summer mood when planning my own vacations and a thought occurred: What if programming languages were accommodation for tourists?

The internet is full of humorous what if programming languages texts, but couldn't find one for accommodation, so I wrote my own. Summer is a good time for writing funny, lightweight, worthless posts.

Enjoy!

Java

An expensive, luxury 5-star hotel. Everyday you wonder why you pay such money for services you rarely use. If money is not an issue this is the best choice.

JavaScript

A decent bed and breakfast. Nothing more, nothing less. Suitable only if you are outdoors for sightseeing the whole day.

C++

A hostel. You must handle everything yourself: living conditions, transportation, guides, neighbors etc. Recommended only to young and experienced travelers.

Go

A decent 3-star hotel. The personnel is the most kind, helpful and trained you ever met. You will enjoy it but next year you will consider the 5-star hotels.

Ruby

Airbnb. It looks beautiful and cheap on the site but you can never be sure until you see it with your eyes.

Python

Hospitality. You are hosted in a friend's house. Everything depends on how good and close that friend is.

PHP

Apartment. You couldn't find anything decent online so you talk to a friend who has a friend with a friend who rents rooms. Hope for the best but prepare for the worst.

Clojure

A mansion. A well preserved 19th century mansion, located inside a big, beautiful garden and with a path to a private beach. Nature and serenity but where are the people? Recommended to fiction writers or avid readers.

Monday, July 24, 2017

Inspiration and Irritation

Recently I read an excellent post about Claude Shannon the father of the information age. In the post, the author summarizes his approach to problem solving as "Don’t look for inspiration. Look for irritation".

This is an interesting approach. I thought that as an IT professional, there are many things that irritate me. Most of them are personal views but others are generally accepted. The list is not exhaustive as I don't want to sound too grumpy.

Limited Connectivity


Turn on the Wi-Fi at a random place and you will probably see between 10 to 20 networks. Almost all of them are secured, you don't have credentials for either of them and rightfully you don't trust the free ones. So you walk a little until you get to a familiar place with a network you are registered to. Of course there are another 10 networks at this place but you only have access to one. After a while you have to leave this place, your device forgets this network and you must find another one a few meters further. So on the average there are 10-20 Wi-Fi networks at every place, idle most of the time and no user is connected 24x7. This is a total waste of bandwidth and user experience. It happens because network connectivity is not considered a resource but rather a bonus or a benefit like we have free Wi-Fi with your coffee. The equivalent for water would have been bottled water selling machines every 10m and no taps, fountains or pipe network. Of course that would have been unacceptable.

In the European Union Wifi4EU is a project for free Wi-Fi everywhere. It is a good step but it seems like putting bottled water selling machines every 1m. In the US they have a bigger problem to solve as net neutrality is threatened an issue much bigger than 24x7 connectivity.

Networks are resources and should be treated as such. We need free, fast, neutral networks everywhere.

The Digital Dark Age


Nowadays terra bytes of new information are generated every day and all sites try hard to provide real time services. What about the information of yesterday or the previous year or 5 years ago? Well, generally nobody cares. A good article you read and bookmarked last year may be still online, you may be still able to find a video from 2 years and you may still contribute to a discussion thread started some time ago. The issue is that past information becomes inaccessible and eventually is lost. This comes in two flavors:
  • technology: new technology does not try to be fully backwards compatible and we lose artifacts stored using older technology. Read this excellent post by Rob Pike for more details
  • archiving: almost all sites overwrite previous versions when adding new content and do not preserve the previous. Vint Cerf believes that can be solved in a generic way using existing technologies
This is important because it is about our heritage. Something that didn't work in the past may inspire something in the future. Since we have the technology to preserve and index everything we should do it on a continuous base. Nothing should be lost. Notable work towards this is done by the internet archive and the software heritage but it needs to be done globally by every site and provider.

Devices are not interconnected


Laptops, tablets, cellphones  are connected to the cloud and this is very good. Examples of daily and common use are very familiar: I enjoy my coffee and I have a good idea. I put it in google keep and when i open my laptop later at home I find it there. I am at work and a friend sends me a nice video. I can put it in pocket and enjoy it later on my tablet. I start writing a document. I can share it with my colleagues with google docs and check their changes and comments in real time.

However connectivity to the cloud implicitly means usage of only one device at a time. What if I want to use all my devices together? Well, in this case I am alone. I have to move from device to device, open apps on demand and upload/download data continuously, a very bad user experience indeed. Devices cannot cooperate together to give a better environment. This limits our possibilities significantly. Some usage patterns can be:
  • edit a file on my laptop and check urls fr it to the nearby tablet automatically
  • switch view of a video from my tablet to my laptop with just a click
  • see photos from past vacations on my laptop and my tablet automatically search and play music from that period
  • see current photos on my tablet and my laptop automatically generate artistic collages from them or fix them with filters
  • write a document on my tablet and my laptop stream a sound version of it in another language for practicing my skills
  • surf the web on my phone and my laptop generate a visualization of the graph
The possibilities are endless. My hope is that since voice interfaces are becoming common, all devices would hear the voice of the user and each respond differently depending on the task and the topology.

The web is not interconnected any more


The WWW was build and succeeded based on the power of the link. A web page should have references to other web pages. The other web pages need not have similar content and this is the power of the model. It works like the coherence of the human thought. A good book can make you think of paintings. A good song can make you think of travelling. A good article can make you think of politics. The links make the web simple and powerful and help organize and decentralize the information. Unfortunately the web has become a business domain and sites loose money if you leave them for another site, so there are not external links. In the cases that external information is needed most sites prefer to embed it or make a strong hint for it. It has become daily practice to read articles without links, mark interesting text snippets and right-click "search with google" to find additional information.

Extreme cases of limited interconnection are the "silos", sites like Facebook, twitter, Instagram etc. These embed all their content and not only they don't have or support links outside but make it difficult to point a link inside them to target small information snippets.

I loved the early days of the web where surfing was actually a learning process. Following links is like discussing a topic with others. Googling is like a presentation by a teacher. Both are needed but it seems we have lost the former. This excellent post by Hossein Derakhshan is a great summary of the bad situation we are in.

Beautiful web pages are hard to find


The average web page is
  • Bloated It has big overhead compared to the actual information content and if the connection is slow or the hardware a bit slow then the loading lag is noticeable. This happens mainly because nowadays web pages are not documents but rather programs that generate content.
  • Unreadable Few pages take typography, aesthetic aspects and accessibility seriously. Most of them want to include almost everything in the page to facilitate SEO and attract clicks and they make the reader a second priority. If google puts us first we are OK even if the page is badly designed.
  • Annoying Too much advertising and too much tracking. This affects not only the loading speed of a page but the whole user experience since as you surf we carry and see information about your actions on a previous page. A common example is book suggestions from amazon while you read an article on climate change.
I would like to add another aspect, maybe minor maybe not, web publishing for non-IT professionals. It is not easy to create a web site anymore. The requirements for a good site are many and a non-IT user does not have the technical background to cope with them. The solution are site-building sites or sites with predefined templates. They make it easy to publish content but they hide the details from end users. This is not necessarily bad but in the early days it was very easy to learn html and write your own page. I don't like that non-IT people became frustrated from the complexity of the web, stopped coding and started using out of the box solutions. I hope that the rising popularity of static site generators and cloud deployment will bring back people to coding, especially kids.

Operating systems have become irrelevant


During the day we use multiple devices and operating systems. My setup is android, iOS, windows and chrome OS. I use 4 machines daily with 4 different operating systems. Almost mechanically I press "update" when the notification comes and I get the latest version every time. So, what new features I get and in what ways my computing experience has improved? To be honest I can't tell. The computing world is nowadays the applications and they are the same on all devices and OSes. Most OS updates and new features are either shortcuts for common tasks or ports of popular applications to the base OS. New, exciting ways to use the computer are missing.

I think the computer is the most revolutionary machine ever invented and the ways it enhances human productivity and imagination are countless. However to get the best from it you need special coding skills. Out of the box the computers have become difficult and tedious to use. It is the job of the OS not of the application to give a sweet, fast and intuitive interface to the computer and there is a lot of work to be done in this direction. We need better ways to interconnect devices and applications, move and transform data around and make computers work, find and present data to the users proactively rather expecting users to request them on demand and leave for the computer only some decorations for the presentation. I think we must aim high on this like in the movies  and stop considering things like "C-t closes least recent active window" or "file explorer with custom colors" as innovations any more.

Saturday, May 20, 2017

Impressions from Voxxed days Athens

After Voxxed day Thessaloniki, it was the turn of Athens to host the event. The bar was set very high because of the enormous success of the first Voxxed days in Greece. As i walked through the venue and talked with my fellow engineers i could notice that almost everyone was anxious for the talks and had absolutely no concern about the various organizational aspects. They expected everything to be just fine and so it was.

The event was sold out and the venue was full of IT professionals. The sponsors had their own place to present themselves, answer questions and discuss potential collaborations and prospects with people interested in their work. The most impressive was stoiximan  who had an installation of the VR project they made with the Greek football champion Olympiakos. It was really impressive to see it and more impressive to live it. You can see it on youtube

I was very happy to see many Greek colleagues that now work abroad and came to Athens for the event. Looks like Voxxed has become a pan-European meeting place.

The venue was OK for the talks but the rooms for socializing and networking were a bit small and were always very crowded. The food was fine, not as good as in Thessaloniki but honestly no Greek city has better food than Thessaloniki.

And now the interesting part

The talks


There were 3 tracks with a total of 17 talks and also 2 common keynotes, the opening and the closing ones. That way you could attend at most 8 talks. My choices were:

The Art of Visualising Software Architecture by Simon Brown


The opening keynote of the event was a small workshop about notations and diagrams for software architecture. This topic reminds me of a Dilbert strip, obviously inspired from real life


but fortunately the talk had a very solid base also inspired from real life. It discussed various abstractions and notations for modeling the software architecture and presented many examples both good and bad. Architecture Visualization  is very important but most engineers use their own custom notation and not a common vocabulary. This hinter communication, understanding and eventually evolution of systems. Simon also presented his own model of software architecture, called C4 for Context, Containers, Components, Code, and structurizr his tools for expressing and visualizing architecture. You can find his presentations, tools and much more at https://structurizr.com/ A very interesting talk that reminded us the obvious we always forget, that a software system is much much more that the code

Implementing binary protocols with Elixir by Ole Michaelis


I attended the http2 talk by Ole at Voxxed Thessaloniki and i liked his lively presenting style, so i decided to attend his talk. This time he presented an elixir implementation of an http2 request parser. I have a good picture of elixir, mostly by following the blog of my friend Dimitris. I can understand code snippets in elixir but still can't use it. You see the book i bought at Fossdem is still in the bag :-(


Nevertheless Ole explained the features he used each time and it was easy for us to keep in touch with his ideas. He implemented the parser using pattern matching. To oversimplify, it is a mechanism that instructs the compiler to decide at runtime which function to call based on the values of the arguments. With this mechanism he "almost" embedded the http2 request format in the signatures of the functions and the compiler practically unraveled the parser flow during the runtime. It seems magical, and elixir pattern matching is indeed magical. I am not a fan of such exotic features, they are like the songs of the sirens and i prefer explicit function calls. However i really enjoy such talks from hackers to hackers presenting good hacks. I liked this talk and probably i will take the book from the bag.

Security issues and challenges when building novel web applications by Barbara Vieria and Theodoor Scholte


A talk for systems security based on the speaker's experience from auditing and reviewing software systems. They presented common areas of errors, statistics about failures and some of the features of ISO 25010 Then they proceeded to describe a very common system architecture, a typical 3tier with angular.js and mongodb and discussed many of the security errors and pitfalls like unauthorized access, code injection, XSS, output escaping and many more. A very useful talk for engineers without a proper background on software security. The also presented a tool that can help you with code and security. You can find it at https://bettercodehub.com/

Continuous learning of Tech Professionals in an evolving world by Dimitris Livas


One thing is sure in the IT industry: Nothing is steady, everything moves very fast. You cannot rely on today's knowledge to take you very far. Technology evolves with a very fast rate: Tools, practices and even whole platforms that are relevant today may not even exist in 10 years. Industry also evolves with a very fast rate: You cannot predict what kind of jobs will be high in-demand in the future. Business evolves: The business models keep changing. We have witnessed the internet effect and we are now seeing the AI effect. Finally people evolve too: They have ambitions, goals and needs. In such a world continuous learning is a necessity. Dimitris presented a methodology for it that he calls "the scrumification of personal development process". In a nutshell each individual is the product owner of the most valuable product, himself, and he can apply scrum and agile methodologies to evolve personally. The values the process are having a purpose, being adventurous, being agile, respecting colleagues and trust. You can find more about his methodology at the web site of his company, Agile Actors

The topic of continuous learning is a very interesting one. It is not simple however. It always depends on the context. It is very difficult to decide what to learn next and when and to make the decision proactively before you are forced to. It is always better to be prepared for the future that trying to catch up with it. The "scrumification" seems mostly a proposal for IT companies to adapt such a process so that they can evolve together with their personnel. An individual of course can embrace it but it is not clear how it can work in this case. Anyway it was a very nice talk about a very topical issue.

Create a JEE Test Automation Framework with Cucumber.io and Selenium Webdriver by Vangelis Ghiossis


A talk about the internal test infrastructure of Advantage FSE. They develop mission critical systems for banking and payments and it is of great importance to ensure the quality of their deliverables. They presented to us how they test their products. They assembled a stack for testing using maven, gitlab, nexus, ansible, docker, cucumber, selenium, appium and acunetix and configured it for their needs. This stack helps them test quickly and reliable applications on different mobile devices and on different OS/browser configurations. The specifications written in cucumber in a human like language are under QA and version control and the whole stack uses Jira and slack to communicate the results with the engineers. They also made a live demo of the stack testing the voxxed Athens page.

A good talk. Objectively there are many ways to assemble such a stack and each company has it's own variant but it is of great help that companies share such knowledge and in a way teach and urge engineers to build and use them.

Elixir: scaling for the future using 30 year old tech by Manos Emmanouilidis


The second talk about elixir today. This was an 101 talk but the purpose was not to demonstrate the language vigorously. It was an overview of the history of erlang and elixir, the design motivation for the new language and a tour of the features. The goal was to urge the audience to have a look at elixir and expunge the fear of erlang both the VM and the language. A very nice motivational talk indeed.

A language that supports concurrency must be in every developer's arsenal. There are many good choices available like clojure, scala, go (my favorite) and elixir. If you are a fan of ruby you should try elixir right away, it has the same feel.

To get a glimpse of elixir in a real production environment check this blog post by Manos on "Binary data over Phoenix sockets"

Costs of the Cult of Expertise by Jessica Rose


Who is an expert? Who has exceptional skills? Is expertise and skills related? How can we spot them? Can we pass an incompetent for expert and vice versa?


A great talk about managing people and expunging the myths of expertise. The talk had 4 sections:
  1. Definition of expertise and skills in various contexts
  2. Teams and expertise - the part about hiring an expert
  3. Community and expertise - the part about identifying and acknowledging an expert
  4. Individual expertise - how can you become an expert if you already aren't

The talk was full of interesting stories from her experience about geniuses and jerks, experts and incompetents. Moreover the talk was very lively as she talked with the audience for opinions and experiences. Very nice and thought provoking talk. Kudos to Jessica for it.

Numbers by Douglas Crockford


The closing keynote was by Douglas Crockford of javascript and json fame. He made a very interesting talk about numbers, how they evolved historically from ancient Sumerians to Greeks and Arabs. How they served civilization faithfully for many centuries until we integrated them badly in programming languages. Then we started having problems with integer overflows and floating point rounding errors. He believes that the solution is a single numeric type that is always correct. This is his DEC64 project that he presented to us.

An exciting talk about low level computer arithmetic and programming language design. It remains to be seen if his ideas will be accepted by new language designers.

The talk had many historical references and a tribute to great mathematicians of the past. I will only reference Tahuti, the inventor of writing who later become an Egyptian God. As Mr Crockford said, "in a sense we are his children"

Aftermath

Voxxed Athens was a great experience. All the people i talked afterwards liked it very much and renounced the meeting for Thessaloniki. We are very happy because we now have 2 great conferences for developers in Greece and we are looking forward to attend them every year.