Information is a great tool in software development and it’s useful to have easy access to it. The more obvious you make your problems, the harder you make them to ignore. The more attention they get, the quicker they get solved. One thing developers like to monitor in software development is the continuous integration status and metrics from running services. And what better way to achieve visibility and visualize those metrics than building an information radiator.
I didn’t want to reinvent the wheel so I got a Raspberry Pi 3 Model B with accessories and a 7″ touchscreen to base my project. Using a Raspberry Pi as an information radiator isn’t a new idea and the Internet is full of examples of different adaptations with screens, lights, bells and whistles. For the start, we just visualized our Jenkins builds and Grafana dashboard but later on we will probably do a custom dashboard.
Setting up the base
The information radiator is easy to get running as you only need a computer which preferably runs Linux. You can use an old laptop and attach it to an external screen, or if you’re like me and want to tinker, you can get e.g. Raspberry Pi 3 Model B and couple it with a small external screen for portability. A nice and low-cost solution which gets you some hacker value. I got the Rpi Model B from our local hardware store but unfortunately, I missed out on the Model B+ which was released on the same day. The extra 15% power, 5 GHz Wifi and less heat and throttling would’ve been nice.
I got the Raspberry Pi starting package with the official case, power supply, HDMI cable and a MicroSD card with preloaded NOOBS. So I just needed to connect the cables, put SD Card in and click to install Raspbian. Other interesting operating systems would have been Fedberry which is Fedora ‘Minimal, XFCE and LXQt’ Remixes.
For the screen, I used a 7″ IPS 5 point touch screen for Raspberry Pi with 1024×600 resolution and HDMI from joy-it codename RB-LCD-7-2. Initially, I thought I could install the whole system with this display but as it turned out Rpi doesn’t understand it out of the box. It just showed some white noise and interference. Luckily someone had already solved this and I got the right config after I had installed Raspbian with a real monitor.
Edit your /boot/config.txt:
hdmi_cvt=1024 600 60 3 0 0 0
Uncomment these lines:
# uncomment to force a specific HDMI mode (this will force VGA) hdmi_group=2 hdmi_mode=87
And reboot your Raspberry Pi after those changes.
You should also run
$ sudo raspi-config to setup, for example, WiFi country to allow channels 12 and 13 and your current Timezone.
I also updated Raspbian which bumps it to rpi-4.14.y linux tree:
$ sudo apt-get update $ sudo apt-get upgrade $ sudo apt-get dist-upgrade $ sudo rpi-update
To connect to Rpi with SSH enable it with raspi-config > Interfacing Options or just:
$ sudo systemctl enable ssh $ sudo systemctl start ssh
For the note, by default, the user pi has password raspberry. You should change it but if you want to remove the nagging of default password run:
$ sudo apt-get -y purge pprompt $ sudo rm /etc/profile.d/sshpwd.sh $ sudo rm /etc/xdg/lxsession/LXDE-pi/sshpwd.sh
Accessing Raspberry Pi remotely
The information radiator is usually connected to a TV with no keyboard or mouse attached so accessing it remotely is useful. You can use x11vnc which allows you to VNC into a headless Pi with a VNC client like Apple Remote Desktop, RealVNC’s vncviewer or homebrew’s tiger-vnc.
$ sudo apt-get install ttf-mscorefonts-installer $ sudo apt-get install x11vnc
To start x11vnc automatically create new or edit existing ~/.xsessionrc file:
$ cat ~/.xsessionrc /usr/bin/x11vnc -noxrecord -noxdamage -forever -bg -rfbport 5900
Getting interesting things on the screen
To test our setup and quickly show some data I just added a Build Monitor view in Jenkins and another view with Dashboard view. I also configured the Rpi to automatically start the Chromium browser in kiosk mode after reboots and directed it to the Jenkins website so there would be no need for interactions to get things on the screen. To show several sources of data and get things running quickly without customized information radiator we used Revolver – Tabs Chromium extension to rotate between multiple browser tabs: one showed Jenkins Build Monitor other Grafana Dashboard and third Twitter feed.
To automatically start the chromium-browser after Raspbian desktop starts, edit the following lxsession file:
$ cp /etc/xdg/lxsession/LXDE-pi/autostart /home/pi/.config/lxsession/LXDE-pi/autostart $ vim /home/pi/.config/lxsession/LXDE-pi/autostart #@xscreensaver -no-splash # comment this line out to disable screensaver # Disable Xsession from blanking @xset s off @xset -dpms @xset s noblank @sh ./autostart.sh # load chromium after boot and point to the localhost webserver in full screen mode @chromium-browser --kiosk --no-default-browser-check --no-first-run --disable-infobars http://jenkins.url/ http://jenkins.url/ http://grafana.url/ http://twitter.url
Chromium has a feature to show “Restore pages” nagging popup when not gracefully shutdown and you can try the following Stack Overflow suggestion. What was also suggested was doing “chmod 001 ~/.config/chromium/Default/Preferences” but it resulted in another nagging window.
$ cat ./autostart.sh #!/bin/sh sed -i 's/"exited_cleanly":false/"exited_cleanly":true/' ~/.config/chromium/'Local State' sed -i 's/"exited_cleanly":false/"exited_cleanly":true/; s/"exit_type":"[^"]\+"/"exit_type":"Normal"/' ~/.config/chromium/Default/Preferences
You could use “–restore-last-session” or “–incognito” parameter which also works but it has several disadvantages, such as disabling the cache and login information. Or maybe I should just use Firefox.
Turning the monitor on and off automatically
When running Rpi as a wall monitor it’s useful to save energy and extend the life of your monitor by turning the monitor on/off on a daily schedule. You can do this by running a cron script. Get this script and put it in “/home/pi/rpi-hdmi.sh” and make it executable:
chmod +x /home/pi/rpi-hdmi.sh. Call the script at the desired time with the cron entry:
$ crontab -e # Turn HDMI Off (22:00) 0 17 * * * /home/pi/rpi-hdmi.sh off # Turn HDMI On (7:00) 30 7 * * * /home/pi/rpi-hdmi.sh on
If you have problems with the above script try this one which is the original, but change “curr_vt=`fgconsole`” to be “curr_vt=`sudo fgconsole`” as fgconsole needs sudo privileges otherwise you get an error “Couldn’t get a file descriptor referring to the console”.
From simple dashboard to real information Radiator
Showing just the Jenkins Build Monitor or Grafana dashboards is simple but to get more information you could show things like the success rate of the builds, build health, latest open pull request and project Twitter Messages. One nice example of an information radiator is Panic’s Status board.
There are different ways to create a customizable dashboard and one way is to use Dashing which is a dashboard framework. To get a headstart you can see Project Dashboard which shows “build health” for the latest build, the latest open pull request in Github, the success rate of your builds, some free-form text and your project’s or company’s logo. It uses the Jenkins API to get the ratio of successful / non-successful builds as well as the latest build state. It also calls the Github API to get the latest pull request to display the name and picture of the author and the title of the pull request on the dashboard.
This article was originally published on Rule of Tech, the author’s personal blog about technology and software development.
What is Angular?
Angular is an open-source platform that is a complete rewrite of its predecessor AngularJS. It is based on TypeScript and used for front-end web application development. Angular offers fast performance, cross-platform deployment and a large assortment of tools like Angular CLI and many existing components.
NgVikings is the main annual Angular event in the Nordics, organized by a non-profit organization comprised of local Angular groups. The first conference was held last year in Copenhagen, followed by this year’s event in the Aalto University campus in Otaniemi, Espoo. The event gathers an international crowd with 400 participants and speakers from the Angular core team as well as other experts in the field. In addition to presentations, there are workshops around different Angular topics.
The Dipoli building proved to be a convenient venue for the conference with its bright interiors and wooden architecture. As the conference name implies, the Viking theme was very much present: different conference areas were named according to Viking mythologies, and during breaks, you could even witness authentic Viking battles. The first conference day naturally ended with an afterparty titled Ragnarok (the Viking end of the world) at the restaurant of the local Fat Lizard brewery.
NgVikings 2018 was the first Angular conference where Gofore participated as a sponsor, although we have previously sponsored Angular Finland events and hosted meetups in our Tampere and Helsinki offices.
As the main sponsor of the event, we brought a big Gofore booth along with our curl://ing game and a foosball table, which turned out to be a big hit with the crowd. Our goal for the event was to support the global Angular community while also getting some visibility for Gofore and possibly meeting future new Goforeans.
It was notable that while a majority of the participants were from the Nordics, a lot of people attended from all around Europe. As Gofore is aiming to be an increasingly international company, these kind of events provides us with an excellent opportunity to make us known worldwide.
Our crew also got to see some great talks while not manning the booth.
The talks were in two different rooms called Valhalla (the Viking “heaven”) and Bifrost (the rainbow bridge to Asgard), and both of them had a speaker performing at the same time. Usually one held a beginner level talk and the other one was aimed at the more advanced level audience. All the talks can be found on Youtube. Here are some highlights from the talks we managed to catch:
This year’s keynotes were delivered by Matias Niemelä from Google, who talked how he got involved in Angular development and ended up in the core team, and John Papa from Microsoft, who discussed deploying Angular and Node to cloud with tools like VS Code with good live examples.
Many of the talks provided introductions to exciting web technologies and how to use them with Angular: Martin Splitt talked about getting started with WebVR to create virtual worlds inside the browser, while Michael Haberman showcased building a multiplayer game using Phaser.js and Firebase with Angular. Sean Landsman then introduced D3 as a viable tool for visualizing enterprise data.
Vitalii Bobrov discussed an important issue related to any component-based web framework: how to design a clean component API? According to him, one of the best examples that can be benefited from are the web standards: they have been created with multiple use-cases in mind and provide clear, declarative APIs.
Eric Haddad gave an interesting talk and a live-coding session about what Progressive Web Apps (PWAs) are and how using Angular and Firebase allow you to easily develop PWAs using Firebase’s authentication, scaling database, cloud functions and hosting. He also presented AngularFire 2 which is the official library for Angular v2+ and Firebase. It seemed like a great way to quickly get started in developing PWAs.
The Q&A with all the speakers was the final talk before the closing words for ngVikings 2018 and it was one of the most interesting talks of the event. It was kicked off by our own Roope Hakulinen giving a quick presentation about Gofore and after that John Papa took over the hosting of the Q&A. The questions from the audience varied from the future of Angular to community support and biases in the software industry and Angular community. It was really great to hear what all the different speakers thought about these matters which are also very topical outside the Angular community.
To summarize the feelings from the event, Angular comes across as stable and mature framework for web applications development with a nice and enthusiastic community behind it.
Instead just creating hype about the newest libraries, the talks focused on how to best utilise the many features Angular provides, and how Angular can be used alongside other technologies for a huge variety of needs.
Especially as Progressive Web Apps seem to be in high demand, the amount of focus given to them seems to promise a bright future for Angular for years to come.
The ongoing digital transformation is changing the operating logic and operating environment of organisations, as a result of which customer-orientation and the ability to offer a good customer experience are becoming increasingly vital success factors. This is undoubtedly one of the reasons why so many organisations have started to incorporate customer-orientation and providing a good customer experience into their stated values, in addition to making them strategic operational objectives.
The operations of an organisation are steered – or at least should be steered – by its strategy. The strategy, in turn, is shaped by both the organisation’s values and its view of human beings, i.e. how the organisation views its employees and customers. The importance of these two cornerstones should not be forgotten in our increasingly digital world, even as we start to reshape our operating methods. After all, an organisation’s values are the foundation on which its customer experience is built.
The systemic view – what does it mean?
Due to the systemic nature of organisations, all the parts that make up an organisation are intrinsically interconnected. What this means in practice is that every change caused by the digital transformation inevitably affects not only the management of an organisation, but also its structures, processes, expertise and recruitment needs as well as its work and organisational culture – and its customer experience.
While carrying out its own change process, an organisation must also make sure to maintain the excellence and constantly improving quality of its customer experience. However, in order to provide customer value in the present, constantly changing environment, more and more organisations must also be able to serve customers through digital channels. The ability to respond to this challenge can vary considerably between different organisations. Overcoming the situation may require some organisations to even undergo some rather painful procedures, while others may be able to navigate the changing tides with ease, hardly rocking the boat at all.
A good customer experience is not created in a vacuum…
Despite acknowledging the importance of customer-orientation, the development of many organisations seems to be characterised by an excessively inward-looking approach. That is to say, organisations will surprisingly often implement ongoing development measures as if they existed in a vacuum, which can lead an organisation to develop the operating models and processes considered vital to the customer experience based exclusively on information and needs arising from within the organisation itself.
This kind of approach is of course quite understandable, especially in sectors where competition over skilled employees is high, since in these sectors a positive employer image is a vital factor and condition for success. Even so, the customer should never be entirely forgotten, as focusing exclusively on internal development work can also lead to negative consequences in terms of the customer experience.
… Instead, a truly customer-oriented organisation is born though dialogue
Organisational design helps us develop an organisation in a comprehensive manner, so that all of its functions synchronously support not only the change taking place in different areas, but the customer experience provided by the organisation as well.
In addition, organisational design aims to prepare the organisation for the impacts that organisational changes may have. Such impacts can include the realignment of the organisation in relation to the market situation, operating environment, partners, competitors or customers, for example.
Comprehensive organisational design must always focus on also examining the world outside the organisation and the requirements that the outside world imposes on the organisation’s success. Furthermore, organisational design that strives for a good employee and customer experience requires focusing not only on operational (business) objectives, but on people as well. Ensuring a seamless and customer-oriented operation requires collecting information on the wishes, expectations, joys and woes that people experience when working in the organisation, as well as the wishes, expectations, joys and woes that people face when they interact with the organisation as customers and navigate its service environment.
Methods of organisational design
The methods of organisational design employed should always be selected based on the present change needs and situation. Here are some examples of the design tools that we utilise at Gofore:
- management consultation and sparring
- business design
- service design
- data analytics
- cultural consultation
Another tool that we consider important in regard to organisational design is research based on quantitative, qualitative and mixed methods, as well as the analysis of the results of said research. Research, along with co-creation and other participatory methods, is a vital part of organisational design work, providing us with information on human behaviour, which is crucial for development. Armed with this information, we can start working together with the organisation’s representatives on how best to approach past or ongoing changes within the organisation. At the same time, we can start preparing concrete plans on how and in what kind of timeframe we should promote development from the perspective of improving the customer experience.
Customer experience is always a subjective phenomenon, the quality of which can be influenced by means of organisation design. That is why it is worth asking whether it is possible to scale something so deeply rooted in individual experience. And if it is, how do we go about it? These questions will be answered in the next blog post, which will focus on the scaling of the customer experience.
Interested in finding out more?
Just tell us how we can reach you, and we’ll get back to you.
[contact-form-7 id=”30143″ title=”Personal contact form, English” destination-email=”email@example.com” cc-email=”firstname.lastname@example.org”]