All Posts in XPeppers

maggio 29, 2016 - No Comments!

Lambda e architetture serverless, la nostra esperienza

Siamo stati ospiti del Trentino Cloud Computing Meetup, dove abbiamo raccontato la nostra esperienza con AWS Lambda, il servizio di Amazon AWS per poter realizzare architetture serverless.

 

Dopo una breve introduzione sui servizi di cloud computing offerti da Amazon AWS, abbiamo parlato di come funziona AWS Lambda, delle sue features e del relativo paradigma delle serverless architectures, di cui tanto si parla da un anno a questa parte.

Il motto che abbiamo inventato per descrivere le lambda è “no ops, just code!” :slight_smile:

Il servizio gestisce attualmente circa 400 mila fotografie, caricate da 150 mila fotografi. Ogni giorno vengono caricate circa 3000 foto.

Per sviluppare le lambda abbiamo usato Node.JS e il framework Serverless, che ci ha semplificato la scrittura, il testing automatico e il deploy su AWS delle diverse functions che componevano le nostre API. Servlerless inoltre consente di configurare facilmente l’API Gateway di Amazon per poter agganciare le lambda a delle rotte HTTP esposte ai nostri client (nella fattispecie il client è una app AngularJS).

 

 

 

 

 

 

 

 

 

 

 

Nella presentazione abbiamo cercato di condividere le cose che abbiamo imparato riguardo alle lambda, compresi pregi e difetti, e alcuni aspetti di cui bisogna tener conto per sfruttarle al meglio.


Alcuni link per approfondire l’argomento:


lambda costs

 

 

 

 

 

 

 

 

 

 

 

Un ringraziamento a @pietro.dibello e Daniel Depaoli per la presentazione e Impact Hub Trento per l'ospitalità.

aprile 20, 2016 - No Comments!

La nostra immagine ripensata

Group.png

Dall’inizio del nostro percorso, sei anni fa, abbiamo scelto un logo che rappresentasse in maniera giocosa la nostra voglia di sperimentare: una pozione per rendere piccante il codice e il riferimento all’eXtreme Programming in evidenza.
Nonostante la sua semplicità, si è rivelato legato ad un trend ormai passato. Ci ha servito bene attraverso i nostri primi anni, ma, come XPeppers è cresciuta e si è evoluta, il logo ha cominciato a non trasmettere quello che l’azienda era diventata.
Così, abbiamo deciso di rimodernare la nostra immagine, con l'obiettivo di creare un logo che sia una migliore riflessione di chi siamo e dove vogliamo andare da qui.

 

 

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

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.

gennaio 12, 2016 - No Comments!

XPeppers has become Advanced Consulting Partner

GOOD NEWS TO END 2015 AND TO BEGIN THE NEW YEAR, WE BECAME ADVANCED CONSULTING PARTNER FOR AMAZON WEB SERVICES.

advanced
This partnership has allowed us to get in touch with a lot of really interesting reality that are using, or want to adopt Amazon solutions for their business.
These were some of the activities:
  • Developed innovative and cloud-native applications using Continuous Integration and Continuous Delivery practices
  • DevOps in the AWS infrastructure, with tools like Puppet, Chef, Ansible, Vagrant and others
  • Discovered and introduced DevOps services like AWS CodeDeploy, CodeCommit, CodePipeline, Elastic Beanstalk, OpsWorks, CloudFormation and others.
Not only, as Training Partner, we have organised training courses for developers and systems engineers to provide skills in high demand (and hard to find) on the market.
Our customers will further benefit from this level advancement as it will enable us to create even more tailored solutions to their needs.
We are ready for a 2016 full of challenges ? ? and you?
About AWS DevOps Competency

AWS provides a broad set of flexible services that spans from the development process to deployment, provisioning, and management. These services easily integrate with popular third-party tools to build out an end-to-end solution that fits your needs. These AWS services are designed to simplify provisioning and management of your infrastructure and applications, deploying your code, and automating your software release process. With these services you can quickly build your cloud infrastructure, deploy applications to any instance, or easily create complex applications on AWS.

About APN Programs and AWS

APN has four performance tiers based on training, customer engagements, and overall business investment on AWS. These tiers are: Registered, Standard, Advanced, and Premier. By increasing our firm's level of AWS expertise and engagement we have achieved the penultimate performance tier as demonstration of the efforts made in the last two years.

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

settembre 17, 2015 - No Comments!

La nostra XPeppers in 67 parole

Per il 2015 XPeppers si è posta un traguardo ambizioso: far crescere il proprio organico e la propria presenza territoriale rimanendo allo stesso tempo un'azienda competitiva e a misura d'uomo, identificando e fortificando quei valori che ne caratterizzano il DNA fin dalla nascita.

Come sempre accade in XPeppers il team si è messo in gioco ed ha deciso di dedicare parte del proprio effort ad un processo di trasformazione aziendale iterativo ed incrementale che abbiamo voluto basare sui principi del Lean Change Management di Jason Little.

In questo articolo vogliamo condividere con voi parte di questo percorso che stiamo tuttora intraprendendo, evidenziando in modo particolare i nostri fallimenti, i nostri successi e tutto quello che abbiamo imparato e che porteremo con noi nel lavoro quotidiano.

Primo esperimento

Il punto di partenza del nostro percorso di trasformazione agile è coinciso con la costituzione di un team di 4 persone che si sono assunte il compito di raccogliere diverse idee di trasformazione proposte dai membri del team XPeppers e di indentificare un processo semplice e leggero (in poche parole agile!!) per votarle e valutarle.

I passi di cui tuttora si compone il processo sono:

  • Raccolta del feedback dal team sugli argomenti più importanti (insights)
  • Scelto l’argomento più importante (tramite votazione) fare delle ipotesi su come approfondire l’argomento (assumption)
  • Fare degli esperimenti misurabili per validare l’ipotesi e metterla in pratica

Tra i vari insights il team ha deciso che il primo tema importante da affrontare fosse l’identificazione dei valori che rispondano in modo chiaro alla domanda: “Cosa significa lavorare in XPeppers?”.

Per poter identificare tali valori abbiamo fatto l’ipotesi di proporre un questionario di 10 domande che affrontassero diversi temi: dalle dinamiche di relazione umana agli aspetti tecnici e metodologici, fino al concetto di vision aziendale. L’idea di fondo consisteva nel raccogliere e analizzare tutte le risposte con lo scopo di ricavarne un nostro manifesto.

Per verificare la nostra ipotesi fosse valida abbiamo condotto il primo esperimento: la raccolta in una settimana di almeno tre proposte di questionario. Se non si fosse raggiunto questo risultato minimo l’esperimento sarebbe stato da considerare fallito e avremmo intrapreso una strada differente.

Visto l’esito positivo, abbiamo dato il via alla seconda parte dell’esperimento: l’estrazione delle domande piu significative da sottoporre poi al team con l’obiettivo di raccogliere almeno 10 risposte in due settimane...la maggior parte di noi ha preso parte all’esperimento e quindi anche in questo caso l’esito è stato positivo!

A questo punto non rimaneva che analizzare le risposte ottenute ed estrarre da esse i nostri valori fondanti.

Fallimento e celebrazione

Purtroppo le cose non sempre vanno come ci si aspetta ed in effetti analizzare e sintetizzare oltre 200 risposte si è dimostrata un’attività ambiziosa e faticosa da portare avanti: le normali pressioni date dai diversi progetti in corso e le difficoltà nell’organizzare riunioni intersede stavano togliendo focus e minavano la motivazione e lo slancio iniziale.

Fortunamente in XPeppers sappiamo riconoscere i nostri fallimenti, celebrarli, correggere i nostri errori e rimetterci subito in carreggiata!

Reazione e Secondo esperimento

Analizzando il nostro primo esperimento abbiamo concluso che sarebbero serviti ancora molte energie e molto tempo per portarlo a termine e questo non ci avrebbe consentito di avere in tempi brevi un risultato da condividere con il resto del team. Perciò abbiamo deciso di parcheggiare per un po’ l’attività in corso e di valutare altre possibilità di esperimento.

Alcuni membri del team di trasformazione hanno pensato di dare in pasto le risposte ottenute ad uno strumento di generazione di word cloud e visto l’output incorraggiante si è deciso di chiedere ad ogni membro del team di identificare 10 parole che descrivessero XPeppers; tutte le parole ottenute sono state poi date in pasto allo stesso sistema automatico (si! Noi amiamo l’automation!) che in modo rapido ci ha fornito il seguente risultato:

Tagcloud XPeppers

Ma l’esperimento non si è concluso qui! Visto che crediamo nel valore del feedback, abbiamo voluto richiedere una validazione esplicita del risultato ottenuto ai nostri colleghi che ci hanno dato degli ottimi spunti su come migliorare l’immagine ottenuta e ci hanno dato consigli su come promuovere il nostro esperimento anche al di fuori di XPeppers.

Conclusioni

Ci piace davvero molto la nostra word cloud! Crediamo che le parole emerse rappresentino davvero la realtà quotidiana che si vive qui da noi. Non vediamo l’ora di farne un poster da appendere in ogni nostra sede, in modo da ricordarci e ricordare cosa significa lavorare in XPeppers!

Quali sono gli aspetti migliori dell’esperienza che vi abbiamo raccontato in questo post? Beh, per prima cosa la word cloud ci ha permesso di avere qualcosa di cui discutere davanti alla macchinetta del caffè, di confrontarci sulle parole emerse e di favorire lo scambio di opinioni tra i diversi membri del team. Inoltre, il processo che abbiamo seguito ha fortificato la nostra convinzione che sia fondamentale avere un ciclo di feedback breve.

Metriche

Per gli appassionati di metriche, ecco alcune informazioni riguardo ai due esperimenti raccontati in questo blog post:

tabellametriche

agosto 25, 2015 - No Comments!

AWS Cloudformation and Boto an alternative approach to stacks creation

AWS Cloudformation and Boto an alternative approach to stacks creation. AWS CloudFormation gives developers and systems administrators an easy way to create and manage a collection of related AWS resources. We can make an entire AWS Infrastructure starting from a template. A template has the following high level JSON structure:

{
"Parameters": {   },
"Resources" : {   },
"Outputs" : {   }
}

You can deploy and update a template and its associated collection of resources (called a stack) by using the AWS Management Console, AWS Command Line Interface, or SDKs as boto (AWS SDK for Python).

Using Cloudformation we are able to create our AWS infrastructure, starting by a single template where we describe all the resources (EC2 instances, RDS Instances, bucket S3, Cloudfront distribution, etc) of our infrastructure. Usually the infrastructure is described by a single monolithic template. This is a good solution in all those cases in which there is a strong dependency between the "tiers" of the infrastructure and almost never the user needs to create a single tier independently of the others. For example in case of Blue/Green deployment the user would like to create only the WEB Tier resources (EC2 instances, Elastic Load balancing and Autoscaling group) keeping the others tiers as DBMS and CDN unchanged or in those cases where the user want to test a single tier configuration. In case like this is a good practice to decompose the template to smaller template, one for each tier and make each tier independently. In these cases we can use the command line at runtime indicating the template to start

aws cloudformation create-stack --stack-name web-tier --region eu-west-1 --template-body file://./cloudformation/web.json --parameters file://./cloudformation/web/production.json

This practice, however, has a limit: a output of a Tier may be an input of other tier. In this case the user needs to retrieve the output of the first tier and then add it as a parameter of the second tier. This can be done manually, but in a logic to automate our infrastructure is better to delegate this task to a script. In this post i would like to introduce an alternative approach to this practice: decompose a monolithic cloudformation template in to smaller template, one for each tier, and add a file (JSON) that describe which tier should be active/created, the relative template and parameters file, what are its relations with the other tiers and eventually script to execute for fix missing action on Cloudformation Engine. We have a JSON file that describe the acrhitecture (the tiers of our architecture and relative dependencies and fix) plus a python script that parse this file and resolve denpendencie and launch fix modules.

 

Wrapper

Infrastructure.json

In this file we have a list of stacks to create (if stack is note defined will be not created). Each stack has a name, a template file, a parameters file and an array of dependencies and fix. The array of dependencies is a set of dependency from other stacks/tier, for example the security group in output created during web stack creation is an input for demo-preproduction-cache, because the security group of Elasticache cluster accept connection only from security group of EC2 instances on WEB Tier. The array of fix is a set di python modules that will be executed for fix missing action on Cloudformation service. For example with fix module we can tag the elasticache cluster, infact at this moment the tags on elasticache cluster are not supported by Cloudformation.

This is an example of stack with dependencies and fix

For example output of Web Stack

{
      "name": "demo-preproduction-cache",
      "template_file": "./cloudformation/elasticache/elasticache.json",
      "parameters_file": "./cloudformation/elasticache/preproduction.json",
      "dependencies": [
        {
          "stack": "demo-preproduction-web",
          "mapping": [
            {
              "output": "SecurityGroup",
              "input": "BackendInstanceSecurityGroup"
            }
          ]
        }
      ],
      "fix" : [
        {
          "fix_file" : "fix/fixredis.py"
        }
      ]
}

 

Wrapper.py

The wrapper.py script is the root of our logic. The script parse infrastructure.json file retrieve the stacks that must to be create, resolve dependencies

def resolve_dependencies(parameters_file, dependencies, connection):
  parameters_string = read_conf(parameters_file)
  parameters_list = json.loads(parameters_string)
  for parameter in parameters_list:
    for depend in dependencies:
      for mapping in depend['mapping']:
        if parameter['ParameterKey'] == mapping['input']:
          for output in get_output_of_stack(depend['stack'],connection):
            if output.key == mapping['output']: 
              parameter['ParameterValue'] = output.value
 return json.dumps(parameters_list)

and execute fix.

def resolve_fix(fixes, stack):
 for fix in fixes:
 command = "python %s %s" % (fix['fix_file'], stack)
 return os.system(command)

Cloudformation is able to implement a similar solutions by a conditions and using a parameter for able or disable a resource. But this is an alternative approach particularly in those cases where the script is required to overcome some "missing" features of Cloudformation.  For example the script Wrapper.py is able to resolve dependency and launch a python script for fix missing action on Cloudformation engine.For example with fix module we can tag the elasticache cluster, infact at this moment the tags on elasticache cluster are not supported by Cloudformation.

Untitled

All Scripts are available on my GitHub repository and i would like to thanks the MailUP team for support on this experimental task in particular Fabio e Daniele