All Posts in Coding

febbraio 25, 2016 - No Comments!

Coding Dojo a Trento: Refactoring codice Java

Il 27 gennaio abbiamo organizzato presso la sede trentina di XPeppers un coding dojo che ha riscosso un'ottima partecipazione di sviluppatori e sviluppatrici provenienti da tutta la regione Trentino-Alto Adige/Südtirol.

L'argomento della serata è stato il refactoring di codice legacy in Java, e i partecipanti si sono confrontati sulla risoluzione del Gilded Rose kata. Lo scopo del kata in questione è quello di andare ad aggiungere delle funzionalità ad una codebase esistente, scritta in modo ben lontano dall'ottimale e priva di test che ne provino il funzionamento corretto.

Come si è svolto il nostro Coding Dojo

Dopo una piccola introduzione al problema le persone presenti all'evento hanno avuto occasione di alternarsi in pair programming alla tastiera (prima come navigatore e poi come driver) e di mettere mano alla codebase con il supporto di tutte le persone partecipanti. Inizialmente si è cercato di comprendere meglio la codebase andando ad aggiungere un minimo set di test che dimostrassero la validità delle funzionalità già presenti.

Coding Dojo: Tutti assieme attorno alla tastiera

Tutti assieme attorno alla tastiera

Dopo questa prima fase abbiamo deciso di introdurre le nuove funzionalità richieste e qui ci sono venuti in soccorso i test scritti precedentemente perchè eseguendoli spesso ci hanno dato la sicurezza di non introdurre regressioni.

Tra un test in barra verde e una mossa di refactoring su Eclipse, i partepanti hanno potuto consumare degli stuzzichini delle bibite gentilmente messe a disposizione da XPeppers.

Pur non essendo riusciti a concludere l'esercizio, nelle 3 ore di coding dojo abbiamo avuto occasione di metterci a confronto con persone aventi background, skills ed esperienze diverse. E' stata sicuramente un'esperienza positiva e ne è riprova l'ottimo feedback emerso nel corso della retrospettiva tenutasi a fine incontro dove abbiamo analizzato con il classico "glad/sad/mad" la serata e i risultati ottenuti.

Coding Dojo: Retrospective time

Retrospective time

A fine sessione ci siamo lasciati con l'auspicio di organizzare questo tipo di eventi in modo più ripetitivo in modo da esplorare assieme argomenti di diverso tipo e creare un gruppo di appassionati di sviluppo software.

 

febbraio 15, 2016 - No Comments!

FOSDEM 2016 a Bruxelles

by Christian FeiTiago Martinho

Anche quest'anno XPeppers ha partecipato alla conferenza FOSDEM il 30 e 31 gennaio a Bruxelles!

FOSDEM è una conferenza gratuita dedicata a sviluppatori ed ormai è diventata il punto d'incontro in Europa che ogni anno ospita più di 7000 persone, presso l’università ULB di Bruxelles.

Da tutto il mondo sviluppatori appassionati di open-source vengono per discutere e condividere le loro esperienze.

Ci sono innumerevoli stanze dedicate a linguaggi di programmazione, tecnologie e pratiche come virtualizzazione, testing e automazione, fino al mondo open-source in generale.

Abbiamo seguito talk soprattutto legati ai temi Testing and Automation, Virtualisation, Configuration Management, Containers and Process Isolation e IoT.

Nel talk Jenkins as Code abbiamo conosciuto il plugin per Jenkins Job DSL, che rende programmabile la creazione di job Jenkins. Il presentatore ha mostrato come l'infrastruttura di Uber ha sfruttato questo strumento per scalare e automatizzare molti processi che prima richiedevano un intervento manuale.

Per rimanere nel contesto testing e automazione, abbiamo seguito la presentazione "Beyond config management", in cui l'autore ci ha esposto le sue considerazioni su DSL (scritti in Groovy) per modellare e definire l'infrastruttura in modo programmatico. Potendo compilare questo codice, abbiamo la possibilità di avere un'analisi statica sul codice dell'infrastruttura, oltre alla sua testabilità.

Secondo l'autore, e anche secondo noi, l'approccio di modellare l'infrastruttura tramite codice, cioè "Infrastructure as code", è una pratica essenziale per creare architetture affidabili e resilienti.

Nel talk PostgreSQL features for IoT da Simon Riggs abbiamo visto le nuove funzionalità di PostgreSQL dove la vision è avere un database che permette la creazione di applicazione dove l'ambulanza arriva prima del incidente perché la misurazione del battito cardiaco ha rilevato che la persone sta per avere un infarto. Questo database può registrare una grande quantità di dati in poco tempo in continuo, l'esempio fatto è quello di registrare le misurazione di glucose ogni minuto di ogni cittadino del europa.

Nel talk Build an IoT platform on Matrix da Matthew Hodgson è stata presentata una introduzione al framework Matrix. Questo framework permette di create una piattaforme aperta e decentralizzata dove vari dispositivi IoT riescono a comunicare tra di loro in una forma semplice e affidabile.

Puoi trovare i video di tutti talk qui FOSDEM 2016


 

Ogni anno viene organizzata una serata dedicata al FOSDEM, al Delirium Café vicino al Grand Place, la piazza centrale di Bruxelles. Non potevamo perderci questo evento per conoscere nuove persone, per fare networking e per goderci delle ottime birre belghe (la scelta è molto vasta; parliamo di oltre 25 birre)!

Come potete vedere non abbiamo resistito agli sticker che venivano distribuiti ai vari stand:

FOSDEM stickers!

gennaio 15, 2016 - No Comments!

Apple TV Tech Talks for tvOS

We had the opportunity to participate at the Apple TV Tech Talks at Berlin. This was a one-day event where was possible to get in-depth technical information on building and designing for tvOS, and obtain valuable development instruction from Apple experts.

1

The event started at 9:00 and finished at 17:00 approximately, for a total of 11 talks each one with the duration of half an hour. During all day was possible to meet with Apple experts to get development help for tvOS.

The agenda was the following:

Morning Agenda:

  • Apple TV Tech Talks Kickoff
  • Designing for the Apple TV
  • Focus-Driven Interfaces with UIKit
  • Break
  • Siri Remote & Game Controllers
  • On-Demand Resources & Data Storage
  • Lunch

Afternoon Agenda:

  • Media Playback
  • Leveraging TVML for Media Apps
  • Best Practices for Designing tvOS Apps
  • Break
  • Tuning Your tvOS App
  • Making the Most Out of Top Shelf
  • App Store Distribution
  • Reception

We will now dive deep into each talk and describe what impress us the most.

Apple TV Tech Talks Kickoff

2

In this introduction talk was explained the agenda and expectations for the day. A event talking about the mindset, best practices, state of the art developing into this new Apple platform.

It was talked that the rate of innovation in mobile is very different in regard to the one seen on the TV.  In the words of Apple "The future of TV is Apps". Apps optimised for media consumption like NetflixYoutubeHBO, etc. Apps for fitness like Zova. For shopping like GILT. And gaming apps, like Disney InfinityDoes Not CommuteAlto Adventure. Or even the digital comic book like Madefire. And also children apps like Sago Mini Fairy Tales.

Apple says we are still at the beginning it is still needed to bring the innovation from the mobile platform.

Next was talked about the three tvOS Fundamentals and how they differ from the mobile:

  1. Living Room Experience
  2. Always Connected
  3. Powerful Hardware

6

The Living Room Experience differs from the mobile since it is used from distance, the interaction with the user is focus-based and the attention should be on the content. It often can be a communal experience with a shared device and multiple people interacting, in group or at different hours.

The fact it is a device that is (probably) always connected enables services like http live streaming, on-demand resources and cloud storage to always be easily accessible, versus a mobile connection that usually is unreliable.

3

The "powerful hardware" present on the Apple TV is basically an iPhone 6 without screen and without sensors, it contains the A8 chip with 64-bit architecture (1.5 GHz dual-core + quad-core GPU). Apple says that for developers this HW sets a new performance baseline development, instead of the A5 chip with 32-bit architecture (800 MHz dual-core + dual-core GPU) if you are still supporting the iPhone 4S (which still runs iOS 9).

4

Doing a tvOS app means you are using a separate SDK, with a standalone binary (versus targeting iPhone and iPad where the binary is the same). For developers means you can also use the same tools and frameworks with extra support for media and gaming.

5

Designing for Apple TV

Designing for tvOS means designing for the Living Room Experience. You should connect people to content in a direct way, even if the TV is far away from the user. With the remote you can use gestures, small or quick movements.

7

The experience should be connected, clear and immersive. The omnipresent parallax effect should delight and connect the user to the content.

Some things should be intuitive, it should be clear where the user is at the moment. It never should be hard to read text, and the UI should never be dense.

The app navigation should be clear, one in-out path.

8

The system font San Francisco was optimised for large distances, and it responds to accessibility settings.

When possible should be used the grid structure with the item at focus clear at distance.

There should not be ambiguous gestures with the remote.

When correct it should be used a cinematic experience with edge-to-edge background of movie images.

The user can interact with the TV using the touch surface, menu button, play/pause button. It is not appropriated to use multi-touch gestures with two fingers, but you can use one-finger gestures.

The Play/Pause button can be used for playback or game shortcuts.

The Menu is the back button for navigation (there should be no back buttons on the UI).

The Accelerometer and Gyro are available for use, and in certain cases can help to connect users with the content, for example with subtle movements in the controller affecting the content rotation.

The remote can also be used in landscape, for example in the break neck game.

The content should move in the expected direction, inverse of direct manipulation like iOS (except in fullscreen mode or games).

The UI buttons can have different distinct states, unselected, selected focus, highlighted, disabled.

The focus should be obvious, a good test will be: "Look out of the TV and look back, the content at focus is obvious?".

It is possible to add animation to make it easy to see which content is at focus.

Measurements for grids and spacing are available for use at Apple Human Interface guidelines.

Most of the times use clicks instead of taps, taps can be made accidentally, click is intentionally and often will be a better option.

Focus-Driven Interfaces with UIKit

The focus-driven interface present in the TV follows the finger movement and states the next view in focus. This engine calculates how to move and animate, where the focus should be at any moment, the parallax effect, the speed adaption (if I move faster the finger on the remote).

The focus engine handle all the (numerous) tasks related to focus model.

9

The Focus API gets the focusable view, the initial focus and current focus.
A new property was added to UIView called canBecomeFocused to tell if the view can become focused.

The new protocol UIFocusEnvironment introduces new the property preferredFocusedView and table and collection views delegate methods for handling the focus model. To UIView and UIScreen were also added new read-only properties.

11

The focus should not be set manually, the user should be in control of the focus.
Avoid ambitious cases, for example when views are removed, new views are presented or dismissed, the focus update requests where the focus should go. To do this use canBecomeFocused and preferredFocusedView

You can request focus, with setNeedFocusUpdate and update focus if needed for collection view cells, just remember to adjust the cell when the ancestor is focused, for example respond to focus changes by showing/hiding a label with animation.

The animation timing should responds to speed of swipe in the remote, fast movements make faster animations.12

If you want to listen to focus updates implement the method didUpdateFocusInContext.

Use focus guides to guide focus when it is not clear in the UI where the focus model should move.

13

14

To debug focus use the property whyIsThisViewNotFocusable, or using the option "Quick Look"  in the Xcode debugger.

15

16

It is also possible to tap edges of the remote Up, Left, Right, Down, Arrow, works on Siri remote, and with game controllers pads

You can also implement low level event handling, the touch API is also available, coordinates are from center of focused view.

Siri Remote & Game Controllers

You can use the Siri Remote as a game controller directly by using the game controller framework.

Touches on the Digital Pad are windowing, that is the framework creates a window with a center where user first puts the finger and all values are relative to this virtual window.

DPAD values are by default in portrait, you can adapt it automatically with a the allows rotation property.

The menu button in gameplay should toggle pause/resume instead of handling navigation.

You can integrate the controller with UIKit with the user interaction enabled property.

To disable the screensaver timeout with idleTimerDisabled property, this should be done not always but only while in gameplay mode.

To access device motion use the GCMotion profile, this access accelerometer and gyroscope data, this data is already filtered and uses fused data from both sensors. This access is not intended for vigorous shaking aggressive movements.

17

18

There is a limitation for the number of controllers you can use: one siri remote plus up to two MFI controllers. You should always take input from all controllers if possible.

19

On-Demand Resources & Data Storage

20

Instead of traditional apps and downloading all the bundle, in the TV based on user interactions and predictions you download the resources you need. For example, when the user downloads the game, the app may contain the first level, and based on the level he is playing the resources are downloaded for that level, and when no longer in use they are erased.

21

The dynamically loaded content is hosted in the App Store. The on-demand resources feature enabled prioritised downloads and intelligent caching.

What the customer gets with on-demand resources? Better install experience with reduced time install, more apps on the device, and up to 20GB of content.

You can define install tags (download on demand) for the content and prefetch tags (immediately download after install).

The TV storage limits are the following base app up to 200MB, on-demand up to 20GB, in use app up to 2GB.

22

Initialise the content with a set of tags, then begin requests, and after tell the system when you are finished. You can track the progress of request, but ideally you should not have need to use this, instead you should anticipate the user needs better. Temporary data is subject to purge.

You can set the loading priority, and also set an urgent priority if the user is waiting for the content. You can use the property Is content available? You can conditionally begin accessing resources and receive the result with a completion handler.

23

You can also set a preservation priority to tell the system how important is to keep around the disk, this is for content not actively used, and is used for caching, it is relative to your app not system wide (don't set it to 100 to keep it around more than other apps ;)).
To test on-demand resources you can use Xcode and Xcode server, this is a artificial download, it should test correctness not performance.
If you use TestFlight closer to deploy, you get real world performance with the network link conditioner.
You can also embed the resources in the build, build settings to embed assets into the app, not correct for App Store, can be used to distribute ad hoc the app outside of App Store.
It is also possible to host the content in your internal web server, for example in a enterprise scenario.

To store small preferences data you can iCloud key-value store, for structured and bulk data you can use CloudKit. Remember that the user might not be signed in and multiple people may be sharing the device.

24

The cool thing is that public data is available even if user is not signed in. There is however a single sign in account per user.

Media Playback

The TV can offer a very good media playback experience. The video player present in the framework does a lot of heavy lifting for you. The AVFoundation and AVKit provides a info panel, language, subtitles, sound, content scrubbing.

AVAsset represents a single media asset, from a file or streaming. AVPlayerItem, references single asset, with metadata. AVPlayer, manages the playback of a AVPlayerItem and AVQueuePlayer plays multiple items in sequence.

To show metadata in the info panel, you set it in AVPlayerItem or set it with external metadata. "What did he/she just say" feature of Siri uses this metadata.

25

Interstitial time ranges, time ranges not part of actual content (ads,legal,warnings,etc.) and you can set different rules for it, for example no skipping ads. Avoid swapping players to display interstitial, instead use AVPlayerViewController delegate methods for managing interstitial , for example to disable skipping.

Rare cases can use AVPlayerLayer directly, use it when you want to customize the playback experience, this provides No Controls or UI, Zova uses it to skip/previous exercises.

The reproduce media can be file based (Local bundle, On-Demand Resources, or cached). This has to be downloaded prior playback and should be very short clips to avoid long loading times.

The ideal way to provide media is trough http live streaming (HLS), segments are downloaded during playback and is adaptive based on the available the internet connection status

27

The used codec is H.264 / AVC, it supports up to 60fps.

In the audio can be add described video track for accessibility. To support "trick play" it is needed to add frames with EXT I FRAMES. Subtitles are important for accessibility of for the "what did he just say" Siri feature.

For more info on the media reproduction with accessibility it is recommended to see the presentation of the WWDC13 Preparing and Presenting Media for Accessibility.

Leveraging TVML for Media Apps

TVMLKit is used by the App Store, music and video apps from Apple. It is recommend when the server content is the focus of the app.

2

TVML is template based language that offers consistent UI, and can lead to reduced development effort with shorten time to market.

1

Optimal cases where leverage existing client server architectures benefit a lot from TVMLKit, you
provide native experience with little development times.

As said clearly by Apple this is not a web browser.

The UI is defined with a XML document. and you can link the JavaScript with Swift or Objective-C. The TVJS framework has access to system frameworks, and you can bridge from native to JavaScript and vice-versa.

4

3

5

6

For debugging you can use the Safari web inspector.

Apple haves sample projects made with TVML and content server samples.

Best Practices for Designing tvOS Apps

This talk was about the common questions and problems when designing for tvOS.

In the TV loading is a constant, since the local storage is limited and you can always assume a network connection. Therefore you should at all costs avoid blank screens, is better to use placeholder for images and the UI, while the content is being loaded.

1

Activity indicators or other UI elements can indicate well progress, The game Does Not Commute and Rayman Adventures do it very well. In the first the radio of the car presents a loading bar and then it is the place where the game is played, in the latter we see Rayman running when loading the content.

Always try to set expectations to loading time, and use the loading time to educate the user (with useful info) or entertain him. Galaxy on Fire app when loading shows the story or if you skip show game tips.

Try to avoid authentication since it is not a good experience, if you need it, for example with payment systems, delay it until it is really necessary. GILT app lets browse everything without sign in until you try to buy something.

Important if you need to ask for emails remember to use the correct keyboard that shows the Recent emails entered in any system app.

When needed you can create a companion app to do more complex authentication behaviours.
Not on the high street app completes the payment with an iOS companion application, it finds your device in the network using the bonjour technology.

Since the apps in the TV can have multiple users Include a fast profile switching like in the Airbnb app.

Very likely your app will be used in different devices, iOS or tvOS, therefore make restore purchases obvious.

2

The on boarding is critical to show how to use your app. Try to get out of the way, remember people want entertainment, they don't want to read instructions.
Badland app does not show any instructions when starting, when you start playing the possibilities are gradually presented.

The on boarding should not be a crutch for a bad UI. If developing a game show the controls when the user pauses the gameplay, like Breakneck app does.

Transistor app show different instructions based on the controller you are using. Click with Siri remote, or press buttons with MFI controllers.

The Alto Adventures game show instructions as you go, much more fun than displaying a list of instructions (that everyone will skip).

3

Try to anticipate the need for help and give the information to users gradually.

Using a cursor to point something is wrong , the focus model is right. Try to design the UI right to take advantage of the focus model.

4

Take in mind that the TV is a totally new device, design specifically for this platform don't try to port from Mac or iOS, it will not work.

Making the Most Out of Top Shelf

The tvOS has a feature called "Top Shelf", that is when the user moves the app to the Top Shelf (the upper dock of the main screen).

When the app is at this position it has control of the content displayed on the Top Shelf. This can content can be a static image, and so it is not interactive.

If your app was moved to the top of the home screen the users are already using it, this is no place to capture users, but instead to promote content to your users and provide a quicker access to parts of your app.

If you choose to display dynamic content try to ship it on the first version otherwise people may lose it. This dynamic content has also the advantage that it is not linked to the bundle so it is always update when you change the service that serve this content.

Sing by Smule app does it with image content from the application. Zova shows the most relevant content for the user. The Newsy app shows featured content.

This feature can saves steps by going directly to content, and you should implement play to start immediate playback.

To be personalised you can  use the TV top shelf provider protocol. You can choose the Top shelf style, that can be a unique part with inset or divided by sections.

To populate the shelf you define a Tv content item array, specifying the image ratio and other metadata. If you use the section style you return an array with the sections.

You should provide links to content, with custom URL schemes for your app and responding to system calls, like you do right now in iOS.

The URL with media should go directly to playback when the play button is pressed.

You should implement the play direct option and display for all content on the top shelf, posting to different parts of your app.

To let the system know when the items will need to change using the notifications : tv top shelf items did change notification.

App Store Distribution

A the moment the tvOS App Store is available in over 100 countries. All apps are handpicked by Apple, trough their submission process, very similarly to iOS. The sections in the store are Editorial curated by local Apple employees and the store also displays a search feature and the traditional top charts, divided by paid, free and grossing.

The top markets for iOS at the moment is the following:

IMG_0235

There are some business considerations to define when developing an tvOS app. These Business models are the same as iOS. And application can be free and make money by selling services or goods (GILT, Airbnb, etc.), it can be a pay once strategy (Alto Adventures, etc.), a Freemium model, free to download and pay after for contents or features or even a Paymium model, where the user pays to download and then pays after for contents or features.

For the TV almost 40% of the applications are paid, contrary to the 10% in iOS.

IMG_0233

IMG_0234

Depending on what you want to achieve reach (maximum number of users), revenue (maximum return) or both, you have to find a solution that fits you and your users.
Freemium can be a good model to reach both a user base and still make a good revenue from the app.
It is a difficult task to find the right price for throughly charge users, and what kind of model does your user expect.
To help reasoning you have to think which kind of use is your app best at, people will use it periodically for a quick use or it has a lasting value? Does the app gets better the more user it has? All these are important questions that affect you product development.

With the TV Apple introduces a feature called "Universal Purchase" this is a non reversible action that enables your users to purchase once and use it in iOS and tvOS.

In app purchases are a place where you can use this feature, always demand the same question "What is most important reach, revenue or both?". Take in mind that customer don't want to pay two times, but if you offer something different/platform specific it may work. Take in consideration also case where you have Content right limitations , show in mobile and tv may not be the same and the user understands it (a little bit like Netflix does with their business model).

Both app stores enable global expansion and make it easy to start a global business, the iOS App Store is right now at 154 countries. But take in mind that the editors of the App Store like to feature local content. A good strategy should be to consider the top markets by leveraging also your own data and localise the app right in order to meet customer expectations (if I see a app in the store in my language but after I download it and I don't understand anything I will delete it).

Remember every visitor in the store is a potential customer, polish your Icon, have a good, unique, short app name, match uniqueness, short, no Apple TV or tvOS trademarks. Take great screenshots of your app. The first 3/4 lines of the description are the most important.

Keywords are important for ASO. Use all 100 characters, commas, plurals and category are not necessary, they are automatically added by the engine. Add relevant keywords by understanding well the rules.

IMG_0238

IMG_0239

When developing marketing materials use tvOS approved image in guidelines, Download the App Store badge to display in your website, add icon imagery. A good example is the Sago Mini Fairy Tales app.

Getting featured in the store is very easy, just make a great app that customer will love. 🙂IMG_0241

Always ask yourself the following questions: Is the app unique? What make people love your app?

The app should be engaging, provide a living room experience when interacting with a group of people. It should be have a intuitive use of Siri remote.

The first time a user opens you app should be fantastic, with great on boarding (don't use on boarding screens, don't pop up for login at start).

Remember that performance matters, if the app is slow at loading, freezes or crashes, it will not be featured.

If the app is not a port of a Mac or iOS but it is clear that is designed specifically for tvOS also helps getting featured.

Getting featured is also a matter of understanding the process at Apple. They refresh the contents every Thursday. Usually the it has certain themes for holidays or periods of the year (for example a fitness app in January, I see what you did there Zova 🙂 ). They have a preference for localised content, and have focus on initial launch and significant updates.

Even if Apple does not naturally discovers your app you can also let them know. Be sure to send the Product details, Apple ID and App Store link. Tell what makes your app special, your product roadmap, send the marketing material. Be sure to contact before going online, 3/4 weeks before is the recommend time frame. The contact email is appstorepromotion@apple.com

IMG_0243

Quality always comes first when getting featured, having the right business model to enable sustainable development of your app. Try to think global but be local. Create a great product page to help drive your sales and don't forget to market your app.

Conclusion

Overall the Apple TV Tech Talks for tvOS was a great day, the presentations had a great quality and the Apple experts at the event were very available to answer any doubt regarding different parts of tvOS.

All the materials of the event are present here.

dicembre 29, 2015 - No Comments!

Agile@Work – Bolzano 2015

Conferenza Agile, Cloud, Devops

Il 4 Dicembre 2015 si è tenuto a Bolzano l'evento “Agile@Work”, una conferenza su Agile, Cloud e Devops.

La collaborazione tra XPeppers, TIS e Red Oddity è stata un fattore determinante per la buona riuscita della conferenza come dimostrato dal numero dei partecipanti e dalla velocità con cui sono stati prenotati i posti disponibili. A questa prima edizione hanno partecipato infatti circa 100 persone provenienti principalmente del Trentino Alto Adige e dalle altre regioni del nord Italia.

Agile@Work Bolzano 2015

Agile@Work Bolzano 2015

Tematiche

La giornata è iniziata con l’introduzione di Roberto Bettazzoni in sessione plenaria che ha catalizzato l’attenzione facendo una panoramica generale su come utilizzare il Framework Cynefin per identificare ed affrontare situazioni semplici, complicate, complesse e caotiche e sul ruolo centrale delle retrospettive per adattare il modo di affrontare i problemi in base alla situazione esistente.

La giornata è continuata poi su tre track parallele dove sono stati presentati talk e workshop che hanno riscosso tutti un grande successo. Di seguito potete trovare i link ai video ed ai materiali resi disponibili dagli speaker.

Ha riscosso particolare interesse anche l’idea di rendere disponibile un aula dove le persone hanno potuto continuare a discutere degli argomenti presentati nei talk.

Riepilogo delle sessioni

Si riporta di seguito l’elenco delle sessioni presentate (talk e workshop), i link ai materiali presentati ed alla play-list dei video.

Why you need to change your way of working - Roberto Bettazzoni

Some of the most advanced technical practices allow to get sustainable and effective benefits only if you use them properly. Unfortunately the inertia in adapting the way of working to the changing needs can thwart any technological advantage.
In this talk I discuss the reason why an appropriate change of the way of working is a non postponable need. I also present some methods and indicators to help you adapting your way of working to the product’s needs, your company's culture and the technical practices.

Visualizza presentazione su SlideShare

What is Agile? - Marco Trincardi

Most of the times Agile is described as a set of practices. In this presentation I will give a different point of view of Agile, where practices are just a means to build an effective working culture.

Visualizza presentazione su SlideShare

Continuous Delivery on Java projects - Paolo D'Incau

We will talk about real life examples where we apply Continuous Delivery practices and principles. We will tell how you can evolve in an iterative way a CD pipeline starting from simple tasks (build and deploy on a single environment) to a multi-environment pipeline inspired by what we learned by hurting ourselves. We will give concrete examples, keeping the focus on the code, the infrastructure and the relationship with the different stakeholders.

Visualizza presentazione su SlideShare

Hiring Great People - Pietro Di Bello

Getting the right people will help create a great team, and will let it grow healthy. Moreover, it will keep it rooted in your company culture, and sustaining that same culture in turn. Nevertheless, too often recruiting is overlooked or completely delegated to HR or external recruiting agencies.
In this session I’ll share our experience in building our actual recruitment process, how we got to this recruitment workflow, what lessons we’ve learned and what are the key elements of a recruitment process. I’ll also examine some differences compared to a more “traditional” way of selecting and assessing people.

Visualizza presentazione su SlideShare

Event-driven (serverless) applications - Danilo Poccia

We built event-driven user interfaces for decades. What about bringing the same approach to mobile, web, and IoT backend applications? You have to understand how data flows and what is the propagation of changes, using reactive programming techniques. You can focus on the core functionalities to build and the relationships among the resources you use. Your application behaves similarly to a “spreadsheet”, where depending resources are updated automatically when something “happens”, and is decomposed into scalable microservices without having to manage the infrastructure. The resulting architecture is efficient and cost effective to run on AWS and managing availability, scalability and security becomes part of the implementation itself.

Visualizza presentazione su SlideShare

Agile banks, is it an oxymoron? - Marco Trincardi

Stated that Bank is an example of Control culture a Bank, Introducing Agile in a Bank is more working on existing culture than teaching practices.
In this talk I want to share my year experience on agile introduction in one of the most important Italian Bank.
I will cover the topic on how to be agile introducing agile, Scrum of scrum as the simple thing that could possible work, the compromises we accepted, the pitfall we faced; in essence how to instill an Agile Culture in a Control Culture environment.

Visualizza presentazione su SlideShare

Extreme Contracts - Turning negotiation into collaboration - Jacopo Romei

We care too much for contracts and too little for collaboration. We maximize contracts' value as safety devices and we never focus on their value as collaboration enabler. We want contracts that go fast towards a deadline instead of finding agreements which bring you and your counterpart to trust each other as soon as possible. We read in the Agile Manifesto: "[We value] customer collaboration over contract negotiation". How can we make the latter foster the former?

Test Driven Infrastructure - Filippo Liverani

Many IT operations teams are used to managing infrastructure manually or with simple one-off scripts. This manual work and lack of verifiable behavior results in many issues and in uncertainty. In software development, Test Driven Development (TDD) is well recognized for improving design, increasing code quality, and allowing refactoring and better knowledge sharing.
Similar benefits can be gained in infrastructure projects when infrastructure is treated as code, driving that code development with tests. Configuration management tools such as Chef and Puppet allow infrastructure to be easily described as code and provide a complete support to introduce and run tests. This can allow development and operations teams to collaborate and confidently deliver working infrastructure code.

Visualizza presentazione su SlideShare

Collective code ownership in Extreme Programming - Dario Coco

What can we do to improve communication and knowledge sharing in an Agile team? Collective Code Ownership is one of the most important rules in Extreme Programming: every member of the team is responsible for the architecture.
In this talk we'll explore the connection between CCO and the other XP rules, and we'll see some techniques that can help us in following this good practice.

Visualizza presentazione su SlideShare

Video


Approfondire gli argomenti

Per ricevere maggiori informazioni sui temi trattati, puoi contattare gli organizzatori ai seguenti indirizzi:

  • XPeppers: info@xpeppers.com
  • TIS Innovation Park: info@tis.bz.it
  • Red Oddity: info@redoddity.it

Il team XPeppers sta preparando il calendario corsi per il 2016. Visto il notevole interesse su queste tematiche riscontrato alla conferenza, sta pensando di proporre dei corsi anche a Trento e/o Bolzano. Se foste interessati a frequentare uno dei corsi disponibili vi invitiamo a compilare il modulo che abbiamo predisposto. Questo ci pemetterà di organizzare i corsi nelle sedi che risultano più comode per gli utenti interessati.

Ringraziamenti

Un ringraziamento particolare a:

  • XPeppers, TIS Innovation Park e Red Oddity per l’organizzazione dell’evento.
  • TIS Innovation Park per aver offerto la sede per l’evento e per il servizio.
  • Red Oddity e  TIS Innovation Park per aver promosso l’evento tra le aziende locali.
  • XPeppers per aver offerto il pranzo ed il coffee-break.
  • Tutti gli speaker per aver proposto talk e workshop che hanno riscosso grande interesse.
  • Tutte le persone che hanno partecipato per aver investito una giornata del loro tempo per confrontarsi sui temi trattati.

dicembre 3, 2015 - No Comments!

Global Day of Coderetreat del 14 novembre 2015

I found myself in a room with about 40 eager programmers, some of which had traveled through snowy conditions from two hours’ drive away. I didn’t know what to expect. Conway’s Game of Life? Over and over again? All day? It sounded strange. It sounded like it wouldn’t work. Wow, does it ever work!

Joe Rainsberger

Give me five!

Sabato 14 novembre 2015 si è svolta in tutto il mondo la 5a edizione del Global Day of Coderetreat, e anche Milano ha partecipato con un'edizione ospitata da Mikamai presso la splendida sede Venini42 e facilitata da:

Il Global Day of Coderetreat (GDCR) è "a day to celebrate passion and software craftsmanship": in tutto il mondo, lo stesso giorno, migliaia di programmatori si ritrovano per affrontare il gioco del Game Of Life (GOL).
Il GDCR è un evento globale organizzato dai volontari delle comunità locali che quest'anno ha viste coinvolte 144 città in tutto il mondo: da Auckland in Nuova Zelanda a Pechino in Cina; da Mumbai in India a Istanbul in Turchia; da Città del Capo in Africa a Stoccolma in Svezia; da Tel Aviv in Israele a New York City in USA. Un evento globale che ha unito i cinque continenti nel nome della passione per il lavoro del programmatore.

In ciascuna città partecipante alla manifestazione si sono pertanto svolte delle sessioni di programmazione secondo il formato ideato da Corey Haines.
Chi ha già partecipato ad un coderetreat sa che l'obiettivo non è quello quello di risolvere il GOL, piuttosto quello di migliorare le proprie capacità confrontandosi con se stessi e con altri programmatori in un ambiente sereno e amichevole; di sperimentare di tecniche di sviluppo e refactoring; di imparare quali sono gli ingredienti fondamentali per esercitarsi in modo efficace.

Come si svolge

Il GDCR non è un workshop sul TDD e i pair programming, ma queste sono le pratiche regine utilizzate per affrontare il GOL.

La giornata è divisa in 6 sessioni di esercizi della durata di 45 minuti ciascuna. I partecipanti sono seguiti da dei facilitatori che li guidano nell’esecuzione e li supportano nel caso ci fossero dei dubbi. Al termine di ogni sessione ci si ritrova tutti per un veloce confronto su eventuali difficoltà incontrate e su cosa si è appreso. Alla fine della giornata viene fatta una retrospettiva usando dei post-it: l’obiettivo della retrospettiva è di amplificare gli apprendimenti; di condividere da cosa sono stati stupiti i partecipanti e condividere come tali apprendimenti modificheranno, da domani, il loro modo di lavorare.

Un sogno che diventa realtà

Il GDCR nasce da un sogno di Corey Haines: quello di aiutare la comunità di sviluppo software a crescere, sostenendo un'eduzione alla programmazione tramite gli sforzi di tutto il mondo. Quando Corey parla del GDCR dice che l'obiettivo non è praticare o vendere il TDD e nemmeno quellod di risolvere il problema; l'obiettivo è lavorare sulle competenze di progettazione del software, esplorando le 4 regole del simple design e sperimentando approcci diversi allo stesso problema.

A XPeppers piace il Coderetreat

Al team Orione di XPeppers piacciono proprio tutte queste cose:

  • tenere viva la comunità locale
  • allenarsi per fare meglio il proprio lavoro
  • sperimentare in un ambiente che lo consente
  • incontrare altri programmatori e scambiare idee, opinioni, modi di lavorare
  • il TDD e il pair programming

Grazie

E ora il momento dei grazie, che come sempre sono numerosi e calorosi!

Grazie a Mikamai per aver messo a disposizione la sede Venini42 !

Grazie a Last Minute per aver sponsorizzato una colazione e un pranzo eccellenti e cruelty free tramite il catering equo e solidale di Bemvivir.

Grazie a XPeppers per gli stickers dell'evento.

Grazie a XPeppers, Onebip, Last Minute per i facilitatori.

E, dulcis in fundo, grazie a tutti i partecipanti, che ad ogni edizione sacrificano un giorno del week-end per imparare a migliorarsi!

Gabriele Tondi e Giorgio Sironi on stage

Gabriele Tondi e Giorgio Sironi on stage

Una finestra sul mondo di Coderetreat

Una finestra sul mondo di Coderetreat

I primi passi con Elixir

I primi passi con Elixir

TDD mantra

TDD mantra

marzo 22, 2015 - No Comments!

TDD .NET Clean Code That Works: TDD, testing, clean code e design in ambiente .Net

Corso di formazione sul TDD in ambiente .NET

“TDD .NET Clean Code That Works: TDD, testing, clean code e design in ambiente .Net” è il corso che i nostri trainers Pietro Di Bello e Boris Sclauzero hanno tenuto il 4, 5 e 6 Marzo.
Durante i tre giorni di corso, i partecipanti hanno potuto colmare il gap che spesso accomuna molti team che iniziano ad abbracciare i metodi agili, soprattutto Scrum, ovvero la mancanza di pratiche tecniche ed ingegneristiche adatte a sostenere lo sviluppo iterativo ed incrementale.

Senza l’adozione di opportune pratiche tecniche il processo di sviluppo è destinato ad un lento declino. Lo illustra molto bene Martin Fowler nel suo articolo “Flaccid Scrum”:

“If you're looking to introduce Scrum, make sure you pay good attention to technical practices. We tend to apply many of those from Extreme Programming and they fit just fine. XPers often joke, with some justification, that Scrum is just XP without the technical practices that make it work.”

flaccid scrum

 

Gli argomenti principali del corso sono stati il Test-Driven Development (TDD) in ambiente .NET, il Refactoring, il Simple Design, il Design Incrementale e la Continuous Integration.
Il metodo formativo che adottiamo prevede di alternare in modo stretto sessioni teoriche ad esercitazioni pratiche.
Le esercitazioni pratiche sono state l’occasione per i partecipanti di prendere in mano la tastiera, lavorare in pair o in gruppi, assieme ai trainers, ed applicare i concetti appresi sul TDD .NET.
Le forme che preferiamo per le esercitazioni sono il “coding dojo” e i “code katas”, perché permettono di condividere la conoscenza e l’apprendimento, favoriscono lo scambio di opinioni e il focus sulle nuove modalità di approcciare il problema e il suo design.

TDD .NET Primo giorno

Il primo giorno si parte con un richiamo al manifesto agile: “Working software is the primary measure of progress”. Questo ci porta ad introdurre la test automation ed è l’occasione per rimarcare le differenze tra unit test, integration test e acceptance test, visto che in letteratura e nell’industria stessa purtroppo non esistono chiare ed univoche definizioni e spesso capita di vedere trattati test di integrazione come test unitari, o di non capire quale sia il ruolo dei test di accettazione.
Poi si parte con il TDD: una breve spiegazione del microciclo di sviluppo e subito una prima dimostrazione pratica, tenuta da noi, che illustra come risolvere in TDD un piccolo esercizio di programmazione. Questa dimostrazione consente di vedere “dal vivo” quale sia il ritmo del TDD, e come sia importante mantenere il ciclo breve e focalizzato (“red, green, refactor!”).

Dopo un’altra sezione teorica per approfondire i concetti del TDD e del refactoring , si passa al primo conding dojo dove le persone possono mettere le mani sulla tastiera e svolgere un semplice esercizio in TDD .NET.
Di solito affrontiamo questa sessione spendendo le prima ora in modalità “randori”, ovvero

  • un solo computer collegato ad un proiettore, in modo che tutti possano seguire
  • i partecipanti si alternano alla tastiera, in pair programming
  • ogni 10 minuti la coppia cambia: un nuovo partecipante raggiunge la postazione di sviluppo e sostituisce uno dei due pair della coppia

Dopo questa prima fase che consente a tutti di riflettere sull’impostazione iniziale dell’esercizio, dividiamo i partecipanti in gruppi, ognuno con la propria postazione di sviluppo, in modo che possano andare avanti da soli e riflettere con maggiore tranquillità sulle dinamiche del TDD su .NET e del refactoring.

TDD .NET Secondo giorno

Il secondo giorno ci si concentra sui principi di buon design, partendo proprio dal loro opposto: “come riconoscete che un design è cattivo?” chiediamo ai partecipanti.
Ecco quello che ci hanno detto:

TTD .NET Bad design

I sintomi del bad design secondo i partecipanti al corso

Questo è l’incipit per parlare di rigidità, fragilità ed immobilità, ovvero tre proprietà del bad design. E soprattuto per parlare di quali siano invece la caratteristiche del buon design.

E così introduciamo i SOLID principles ed altre importanti euristiche.
Le esercitazioni che seguono hanno lo scopo di riconoscere alcune palesi violazioni di questi principi, e di verificare sulla propria pelle come questo genere di violazioni coincida spesso con una difficoltà a scrivere test (testability) su una codebase esistente.
Per questo usiamo gli esercizi messi a punto da Luca Minudel che hanno il pregio di essere molto semplici e rapidi da fare, e di chiarire fin da subito la portata di principi come l’Open-Closed Principle (OCP) [pdf], il Dependency Inversion Principle (DIP) [pdf] e il Single Responsibility Principle (SRP) [pdf].
Dopo queste esercitazioni pratiche parliamo di altre euristiche utili e di comune utilizzo, come DRY [pdf] o Tell Don’t Ask [pdf], ma alla fine proponiamo una guida unica alla scrittura di un codice soddisfacente e buono: le quattro regole del simple design.

A design is simple as long as

  1. passes all tests
  2. expresses all the intents you want to express
  3. minimises duplication
  4. is small (has fewer classes/modules/packages…)

Nel corso delle successive esercitazioni mostriamo come tutti i principi discussi si possono sintetizzare in questi quattro punti.

Una delle domande che spesso ci fanno è:
“Come facciamo ad applicare il TDD a codice esistente?”

Per questo un’altra esercitazione che proponiamo è il Birthday Greetings Kata (versione C# e versione Java), che ci consente di parlare di testabilità e di come affrontare una codebase non testata e riuscire a scrivere dei test automatici, a fare TDD e a rifattorizzarla in sicurezza.

TDD .NET Terzo giorno

Il terzo giorno è tutto dedicato alla pratica: proponiamo al “team” di partecipanti un vero e proprio progetto, articolato con user stories e test di accettazione, con lo scopo di vedere concretamente come avviare i primi test in TDD .NET, come scrivere i test di accettazione, come mettere in piedi una piccola Continuous Integration sul cloud (CI).

TDD .NET Planning del gioco dell'oca

La lavagna del planning del gioco dell’oca

 

L’esercizio scelto è il Goose Game Kata, in una variante che permette poi di far evolvere il progetto in una applicazione web.
A fine esercizio c’è una vera propria demo, con tanto di partita finale con i partecipanti e code review del codice scritto dalle varie coppie.

TDD .NET Il gioco dell'oca

Soddisfazione finale: fare la demo e svolgere una partita al gioco dell’oca!

Alla fine della giornata facciamo una breve retrospettiva, per consentire a tutti di riflettere su quanto imparato, su cosa li ha sorpresi e su cosa faranno diversamente in futuro.

Dopo il corso, proponiamo sempre ai partecipanti un percorso di studio, per consentirgli di portare avanti i temi studiati. Il percorso di studio è composto di libri, articoli, video, presentazioni e soprattutto tantissimi esercizi di programmazione che consentono di allenare e affinare le proprie skill sul TDD, sul refactoring e sul simple design.

Alcune cose che abbiamo imparato noi durante questi corsi:

  • alternare sempre le esercitazioni pratiche alla teoria
  • insistere sull’importanza di non puntare a risolvere per forza gli esercizi che vengono dati, ma sul ragionare e riflettere sul modo diverso di lavorare che offre il TDD
  • nella composizione delle coppie o dei gruppi per le esercitazioni, preferire sempre l’eterogeneità di skill, per dare a tutti la possibilità di imparare

Alcuni riferimenti bibliografici su TDD .NET

Per maggiori informazioni sui Coding Dojo, su come organizzarli e strutturarli, raccomandiamo il libro di Emily Bache “The Coding Dojo Handbook”.

Alcuni libri consigliati per approfondire il TDD e in generale le buone pratiche di programmazione Object-Oriented:

Ed ecco qualche esercizio che consigliamo per affinare le proprie capacità di fare TDD: