Devoxx 2015 presentation
We will show you the same application, developed for the three most renowned smartwatch platforms, namely the Pebble, Android Wear and Apple Watch. We will show you the tools, languages, APIs and capabilities of each platform so that you can get a feel for the kind of opportunities offered by this new usage paradigm and the investment required to leverage those opportunities. Be advised there will be some C, Java and Swift in this presentation.
The document discusses the Lean Startup methodology for developers looking to create their own startup. It begins with the presenter introducing himself and his background. It then discusses common misconceptions about starting a startup and proposes using Lean Startup practices like validating hypotheses through customer interviews rather than traditional methods like business plans or prototypes. The document provides examples of how to identify target customers, problems, and potential solutions through iterative customer interviews and lean canvas modeling to test assumptions and guide product development. The overall message is that Lean Startup practices can help developers test ideas and build products customers want more efficiently than traditional methods.
The document outlines Sébastien Arbogast's presentation on Lean Startup for Developers. It begins by asking attendees about their experience with startups. It then introduces Arbogast and his background. The bulk of the document contrasts traditional startup approaches like business plans and prototypes with Lean Startup approaches like customer interviews, business model canvases, and validated learning. It emphasizes gathering early feedback and iterating quickly rather than spending a long time planning before testing ideas with customers.
The document provides tips and advice for iPhone game development from the perspective of Joash the Geek. Some of the key points mentioned include:
- Joash's background and interest in programming from a young age using Apple IIe and various languages like Basic and Pascal.
- Suggestions for iPhone game development include assuming developers are smart and resourceful, learning from conferences like WWDC but avoiding being too condensed, and gaining insights from experience and research.
- Other advice covers minimizing development time spent and maximizing the time spent on iterations, as well as the importance of planning, production, gathering feedback, and balancing long term and short term goals.
The business case for contributing codeZivtech, LLC
In the Drupal community we tend to talk about committing code to our public spaces (drupal.org, but also github) in terms of "contributing" and "contributions", and while much of it can be seen in that light, there are actually very strong business reasons for publishing your code and/or attempting to get your code changes committed to the open source project that you are working on.
We will be looking at several documents from the U.S. Military detailing their recommendations for contracting Open Source Software services, and will use those as a jumping off point to discuss the many benefits of contributing code. Some of the business reasons for public publishing we'll explore will include:
* The power of peer review. With enough eyes, all bugs are shallow, and with only a few eyes the stupidity knows no depths!
* Fork you! The costs associated with "hacking" both Drupal core and contrib modules and base themes.
* Take my code, please! Cost savings from committing patches.
* Professionals publish or perish. Using code commits as marketing towards clients or potential hires.
* It's so easy, even a child(ish person) could do it! How you can easily integrate patching into your development workflow.
This session will also include a walk through of how Zivtech handles code review, patches, and deployment processes and you will hopefully walk away convinced that all of your in-house and out-sourced developers should be publicly committing their work.
Preparing your profile free code camp londonJay Gohil
XL Engine is a specialist digital technology recruitment company founded in 2016 that places candidates in leadership, product, mobile, web, and data roles. The document provides tips for job searching including preparing a CV by keeping it concise, tailoring it for each role, and including examples from projects. It also recommends contributing to open source software, using social media and job sites to find roles, and deciding whether to approach companies directly or work with a recruiter.
We gave this talk at Devoxx 2016 (Morocco and Belgium) to make software developers aware of the opportunities of developing Apps on Smart TVs. To illustrate these concepts, we have developed the application "TVoxx" available on:
- Apple TV: https://itunes.apple.com/be/app/tvoxx/id1097323734?mt=8
- Android TV: https://play.google.com/store/apps/details?id=net.noratek.tvoxx.androidtv&hl=en
Hardware hacking on the pi; what's js got to do with itAlexander Roche
The document discusses hardware hacking and options for getting started, including Little Bits, Makey Makey, Arduino, and Raspberry Pi. It provides an overview of each tool, discussing their capabilities and what types of projects they are best suited for. The document also covers using Node.js and JavaScript with hardware, and how to install and use Node packages like NPM to interface with hardware through libraries.
Devoxx 2015 presentation
This presentation will quickly go over the 3 main smartwatch platforms on the market, namely Pebble, Android Wear and Apple Watch. We will explain the characteristics of each platform, the usage scenarios it supports, the architecture of an app, show the language and the tools that are available to develop apps, describe the development lifecycle and illustrate with code samples (no live-coding). We will demonstrate all that based on a common app developed for the three platforms.
The document discusses the Lean Startup methodology for developers looking to create their own startup. It begins with the presenter introducing himself and his background. It then discusses common misconceptions about starting a startup and proposes using Lean Startup practices like validating hypotheses through customer interviews rather than traditional methods like business plans or prototypes. The document provides examples of how to identify target customers, problems, and potential solutions through iterative customer interviews and lean canvas modeling to test assumptions and guide product development. The overall message is that Lean Startup practices can help developers test ideas and build products customers want more efficiently than traditional methods.
The document outlines Sébastien Arbogast's presentation on Lean Startup for Developers. It begins by asking attendees about their experience with startups. It then introduces Arbogast and his background. The bulk of the document contrasts traditional startup approaches like business plans and prototypes with Lean Startup approaches like customer interviews, business model canvases, and validated learning. It emphasizes gathering early feedback and iterating quickly rather than spending a long time planning before testing ideas with customers.
The document provides tips and advice for iPhone game development from the perspective of Joash the Geek. Some of the key points mentioned include:
- Joash's background and interest in programming from a young age using Apple IIe and various languages like Basic and Pascal.
- Suggestions for iPhone game development include assuming developers are smart and resourceful, learning from conferences like WWDC but avoiding being too condensed, and gaining insights from experience and research.
- Other advice covers minimizing development time spent and maximizing the time spent on iterations, as well as the importance of planning, production, gathering feedback, and balancing long term and short term goals.
The business case for contributing codeZivtech, LLC
In the Drupal community we tend to talk about committing code to our public spaces (drupal.org, but also github) in terms of "contributing" and "contributions", and while much of it can be seen in that light, there are actually very strong business reasons for publishing your code and/or attempting to get your code changes committed to the open source project that you are working on.
We will be looking at several documents from the U.S. Military detailing their recommendations for contracting Open Source Software services, and will use those as a jumping off point to discuss the many benefits of contributing code. Some of the business reasons for public publishing we'll explore will include:
* The power of peer review. With enough eyes, all bugs are shallow, and with only a few eyes the stupidity knows no depths!
* Fork you! The costs associated with "hacking" both Drupal core and contrib modules and base themes.
* Take my code, please! Cost savings from committing patches.
* Professionals publish or perish. Using code commits as marketing towards clients or potential hires.
* It's so easy, even a child(ish person) could do it! How you can easily integrate patching into your development workflow.
This session will also include a walk through of how Zivtech handles code review, patches, and deployment processes and you will hopefully walk away convinced that all of your in-house and out-sourced developers should be publicly committing their work.
Preparing your profile free code camp londonJay Gohil
XL Engine is a specialist digital technology recruitment company founded in 2016 that places candidates in leadership, product, mobile, web, and data roles. The document provides tips for job searching including preparing a CV by keeping it concise, tailoring it for each role, and including examples from projects. It also recommends contributing to open source software, using social media and job sites to find roles, and deciding whether to approach companies directly or work with a recruiter.
We gave this talk at Devoxx 2016 (Morocco and Belgium) to make software developers aware of the opportunities of developing Apps on Smart TVs. To illustrate these concepts, we have developed the application "TVoxx" available on:
- Apple TV: https://itunes.apple.com/be/app/tvoxx/id1097323734?mt=8
- Android TV: https://play.google.com/store/apps/details?id=net.noratek.tvoxx.androidtv&hl=en
Hardware hacking on the pi; what's js got to do with itAlexander Roche
The document discusses hardware hacking and options for getting started, including Little Bits, Makey Makey, Arduino, and Raspberry Pi. It provides an overview of each tool, discussing their capabilities and what types of projects they are best suited for. The document also covers using Node.js and JavaScript with hardware, and how to install and use Node packages like NPM to interface with hardware through libraries.
Devoxx 2015 presentation
This presentation will quickly go over the 3 main smartwatch platforms on the market, namely Pebble, Android Wear and Apple Watch. We will explain the characteristics of each platform, the usage scenarios it supports, the architecture of an app, show the language and the tools that are available to develop apps, describe the development lifecycle and illustrate with code samples (no live-coding). We will demonstrate all that based on a common app developed for the three platforms.
CYPNAVAL 2013 and CYPSEC 2013 were held from 28-29 May in Cyprus to strengthen cooperation between public authorities and the private sector in defense, security, offshore activities like oil and gas, and maritime facilities. The conferences brought together leading experts and featured opening addresses from officials in the Cypriot ministries of defense, justice, and communications and works. Over the two days, distinguished speakers from Cyprus, Israel, France, and other countries discussed technology, innovation, intelligence, and security challenges at sea. The event was well attended by representatives from Cypriot government agencies, foreign embassies, private companies, universities, and NATO.
This document summarizes key learnings from India's performance at the 2015 Cricket World Cup. In 3 sentences:
India's captain, MS Dhoni, was successful due to his leadership, decision making, and ability to motivate the team. However, he failed to take action on poor individual performances, did not experiment with team selection when results were good, and may have become complacent and surrounded by sycophants. The document outlines these areas as lessons for leaders on the importance of accountability, continuous improvement, and objective self-evaluation.
Trafigura, a leading commodity trading and logistics company, uses various arbitrage techniques to generate profits from temporary price differentials in commodity markets. In the example, Trafigura originally sourced copper concentrates from Peru for a customer in Finland. It then switched suppliers and buyers, sourcing from Spain for Finland and selling Peruvian concentrates to the US for geographic arbitrage. It also engaged in time arbitrage by storing the Peruvian shipment for 6 months until the premium price was realized, and technical arbitrage by blending concentrates to meet the US customer's specifications. By combining these arbitrage strategies, Trafigura increased its profits and competitiveness.
(1) The document describes an integrated township project in Neemrana, Rajasthan called Gracious City. Plot sizes range from 86 to 200 square yards.
(2) Neemrana is located 120 km from Delhi and 140 km from Jaipur, making it well situated for industry along National Highway 8 between the two cities. It has become a major industrial hub.
(3) Over 30 major companies operating in Neemrana are listed, ranging from automotive parts manufacturers to steel, electronics, consumer goods, textiles, and beverage companies. The area has become a major industrial corridor.
The document provides results from the Commonwealth Karate Championships 2015 held on September 18, 2015. It lists winners and placement in various age group and gender categories for kata (forms), kumite (sparring), and team competitions. The results are broken down into multiple age divisions for both male and female competitors across different weight classes.
Glueck proposes 4 dimensions for defining grand strategies:
1) Internal/external - independently or with partners
2) Related/unrelated - related or unrelated to existing business
3) Horizontal/vertical - new customer groups or new technologies
4) Active/passive - proactive or reactive to opportunities/threats
There are 32 possible mixed strategies combining the 4 dimensions and 2 options in each. Strategies include stability, expansion, retrenchment, and combination approaches pursued independently or with other organizations in related or unrelated business areas.
O documento descreve um exercício de futebol com os seguintes elementos: equipes azul e vermelha, com a azul jogando em superioridade numérica contra a vermelha para passar a bola para o outro lado do campo. Após o passe, as equipes trocam de lado, com a vermelha ficando temporariamente em superioridade numérica.
Serverless: when functions and GitOps collideEdward Wilde
Abstract
--------
This talk introduces OpenFaaS, an open source platform for serverless functions. We begin by installing, running the platform and invoking a machine learning function within 60 seconds (ish). Next we step up and look at the level of architecture and key pillars of OpenFaaS: developer first, operator friendly and community focused. We close by looking at a multiuser platform built on top OpenFaas.
The objective of this talk is openFaaS the serverless platform and OpenFaaS cloud the multi-user environment for practicing git ops with functions.
Bio
---
Edward Wilde is a core contributor to the OpenFaaS project and platform architect at Form3
This presentation was delivered at the ASTD Twin Cities Regional Conference. It discussed different design and development considerations for mLearning.
Nebraska Trainer's Institute eLearning Presentaiotneaselsolutions
This presentation covered a few eLearning development tools as well as some mLearning Strategies. It was delivered during a ASTD Nebraska 2012 Trainer's Institute session.
Azure ML: from basic to integration with custom applicationsDavide Mauri
In this session, Davide will explore Azure ML from the inside out. After a gentle approach on Machine Learning, we’ll see the Microsoft offering in this field and all the feature it offers, creating a simple yet 100% complete Machine Learning solution.
We’ll start from something simple and then we’ll also move to some more complex topics, such as the integration with R and Python, IPython Notebook until the Web Service publishing and usage, so that we can integrate the created ML solution with batch process or even use it in real time with LOB application.
All of this sound cool to you, yeah? Well it is, since with ML you can really give that “something more” to your customers or employees that will help you to make the difference. Guaranteed at 98.75%!
JAX London 2014 "Moving to DevOps Mode: easy, hard or just plain terrifying?"Daniel Bryant
DevOps - is it for you? Heard about the wonderful ways it could benefit your organisation, but put off by the scary stories? Can you really make the transition to DevOps, and is it worth it? Listen and learn from two DevOps practitioners about their hands-on experiences in making the change. Covering a range of real life examples, this talk will explain the real business benefits to be had from using DevOps techniques, as well as the technical and personal aspects involved.
Whether it’s a small team within a startup or one of hundreds within a large organisation, this talk has practical advice on how to approach the challenge, what critical changes need to be considered, and what tools and processes are best suited for the situation. The adoption of DevOps is a game changing event for the industry. Learn why and learn how you can benefit from it too.
This talk was presented with Steve Poole (@spoole167) at JAX London, October 2014
Moving to a DevOps mode - easy, hard or just plain terrifying? - Daniel Bryan...JAXLondon2014
The document discusses moving to a DevOps model and describes it as both easy and terrifying. It advocates breaking down silos between development and operations teams by emphasizing common goals, shared responsibility, and standard technology. The benefits of DevOps include faster reaction times for businesses and extending agility across IT organizations.
This document provides a summary of tools and resources for mobile development across the design, development, testing, and deployment lifecycle with a focus on Xamarin. It includes links to design guidelines, prototyping tools, IDE extensions, data libraries, debugging tools, UI testing libraries, and deployment libraries. It also lists community resources like blogs, podcasts, and chat channels for staying up to date with Xamarin development.
The document discusses the history and capabilities of computing from the Apollo missions to modern smartphones. It notes that the iPhone 6 has 130,000 times more transistors and is 80,800,000 times faster than the Apollo computer in terms of instructions per second. The document then discusses cloud computing and Microsoft Azure, highlighting features like App Service, Cognitive Services, and Azure infrastructure models. It promotes opportunities for students through programs like Imagine and provides an overview of mobile development with Xamarin.
CYPNAVAL 2013 and CYPSEC 2013 were held from 28-29 May in Cyprus to strengthen cooperation between public authorities and the private sector in defense, security, offshore activities like oil and gas, and maritime facilities. The conferences brought together leading experts and featured opening addresses from officials in the Cypriot ministries of defense, justice, and communications and works. Over the two days, distinguished speakers from Cyprus, Israel, France, and other countries discussed technology, innovation, intelligence, and security challenges at sea. The event was well attended by representatives from Cypriot government agencies, foreign embassies, private companies, universities, and NATO.
This document summarizes key learnings from India's performance at the 2015 Cricket World Cup. In 3 sentences:
India's captain, MS Dhoni, was successful due to his leadership, decision making, and ability to motivate the team. However, he failed to take action on poor individual performances, did not experiment with team selection when results were good, and may have become complacent and surrounded by sycophants. The document outlines these areas as lessons for leaders on the importance of accountability, continuous improvement, and objective self-evaluation.
Trafigura, a leading commodity trading and logistics company, uses various arbitrage techniques to generate profits from temporary price differentials in commodity markets. In the example, Trafigura originally sourced copper concentrates from Peru for a customer in Finland. It then switched suppliers and buyers, sourcing from Spain for Finland and selling Peruvian concentrates to the US for geographic arbitrage. It also engaged in time arbitrage by storing the Peruvian shipment for 6 months until the premium price was realized, and technical arbitrage by blending concentrates to meet the US customer's specifications. By combining these arbitrage strategies, Trafigura increased its profits and competitiveness.
(1) The document describes an integrated township project in Neemrana, Rajasthan called Gracious City. Plot sizes range from 86 to 200 square yards.
(2) Neemrana is located 120 km from Delhi and 140 km from Jaipur, making it well situated for industry along National Highway 8 between the two cities. It has become a major industrial hub.
(3) Over 30 major companies operating in Neemrana are listed, ranging from automotive parts manufacturers to steel, electronics, consumer goods, textiles, and beverage companies. The area has become a major industrial corridor.
The document provides results from the Commonwealth Karate Championships 2015 held on September 18, 2015. It lists winners and placement in various age group and gender categories for kata (forms), kumite (sparring), and team competitions. The results are broken down into multiple age divisions for both male and female competitors across different weight classes.
Glueck proposes 4 dimensions for defining grand strategies:
1) Internal/external - independently or with partners
2) Related/unrelated - related or unrelated to existing business
3) Horizontal/vertical - new customer groups or new technologies
4) Active/passive - proactive or reactive to opportunities/threats
There are 32 possible mixed strategies combining the 4 dimensions and 2 options in each. Strategies include stability, expansion, retrenchment, and combination approaches pursued independently or with other organizations in related or unrelated business areas.
O documento descreve um exercício de futebol com os seguintes elementos: equipes azul e vermelha, com a azul jogando em superioridade numérica contra a vermelha para passar a bola para o outro lado do campo. Após o passe, as equipes trocam de lado, com a vermelha ficando temporariamente em superioridade numérica.
Serverless: when functions and GitOps collideEdward Wilde
Abstract
--------
This talk introduces OpenFaaS, an open source platform for serverless functions. We begin by installing, running the platform and invoking a machine learning function within 60 seconds (ish). Next we step up and look at the level of architecture and key pillars of OpenFaaS: developer first, operator friendly and community focused. We close by looking at a multiuser platform built on top OpenFaas.
The objective of this talk is openFaaS the serverless platform and OpenFaaS cloud the multi-user environment for practicing git ops with functions.
Bio
---
Edward Wilde is a core contributor to the OpenFaaS project and platform architect at Form3
This presentation was delivered at the ASTD Twin Cities Regional Conference. It discussed different design and development considerations for mLearning.
Nebraska Trainer's Institute eLearning Presentaiotneaselsolutions
This presentation covered a few eLearning development tools as well as some mLearning Strategies. It was delivered during a ASTD Nebraska 2012 Trainer's Institute session.
Azure ML: from basic to integration with custom applicationsDavide Mauri
In this session, Davide will explore Azure ML from the inside out. After a gentle approach on Machine Learning, we’ll see the Microsoft offering in this field and all the feature it offers, creating a simple yet 100% complete Machine Learning solution.
We’ll start from something simple and then we’ll also move to some more complex topics, such as the integration with R and Python, IPython Notebook until the Web Service publishing and usage, so that we can integrate the created ML solution with batch process or even use it in real time with LOB application.
All of this sound cool to you, yeah? Well it is, since with ML you can really give that “something more” to your customers or employees that will help you to make the difference. Guaranteed at 98.75%!
JAX London 2014 "Moving to DevOps Mode: easy, hard or just plain terrifying?"Daniel Bryant
DevOps - is it for you? Heard about the wonderful ways it could benefit your organisation, but put off by the scary stories? Can you really make the transition to DevOps, and is it worth it? Listen and learn from two DevOps practitioners about their hands-on experiences in making the change. Covering a range of real life examples, this talk will explain the real business benefits to be had from using DevOps techniques, as well as the technical and personal aspects involved.
Whether it’s a small team within a startup or one of hundreds within a large organisation, this talk has practical advice on how to approach the challenge, what critical changes need to be considered, and what tools and processes are best suited for the situation. The adoption of DevOps is a game changing event for the industry. Learn why and learn how you can benefit from it too.
This talk was presented with Steve Poole (@spoole167) at JAX London, October 2014
Moving to a DevOps mode - easy, hard or just plain terrifying? - Daniel Bryan...JAXLondon2014
The document discusses moving to a DevOps model and describes it as both easy and terrifying. It advocates breaking down silos between development and operations teams by emphasizing common goals, shared responsibility, and standard technology. The benefits of DevOps include faster reaction times for businesses and extending agility across IT organizations.
This document provides a summary of tools and resources for mobile development across the design, development, testing, and deployment lifecycle with a focus on Xamarin. It includes links to design guidelines, prototyping tools, IDE extensions, data libraries, debugging tools, UI testing libraries, and deployment libraries. It also lists community resources like blogs, podcasts, and chat channels for staying up to date with Xamarin development.
The document discusses the history and capabilities of computing from the Apollo missions to modern smartphones. It notes that the iPhone 6 has 130,000 times more transistors and is 80,800,000 times faster than the Apollo computer in terms of instructions per second. The document then discusses cloud computing and Microsoft Azure, highlighting features like App Service, Cognitive Services, and Azure infrastructure models. It promotes opportunities for students through programs like Imagine and provides an overview of mobile development with Xamarin.
Introduction to New Age Applications with Kendo UIAbhishek Kant
The document announces a series of webinars on Telerik tools for developers. It provides an agenda for an introductory webinar on the Kendo UI framework, covering getting started, its web and mobile widgets, and a Q&A session. A list of future webinars on other Telerik products like Test Studio and reporting is also given, along with resources like documentation and forums for learning more.
The document discusses an upcoming presentation by Pierre-Antoine Grégoire and Arnaud Héritier on DevOps. It includes their backgrounds and experiences. The agenda covers what DevOps is and is not, its origins, trends in DevOps tooling, and current trends in the DevOps space.
Getting Started with Mobile Websites if You Don't Know CodeCarli Spina
This presentation was given at the June 8, 2012 Amigos Library Services virtual conference entitled "Access by Touch: Delivering Library Services Through Mobile Technologies".
Philly CocoaHeads 20160414 - Building Your App SDK With SwiftJordan Yaker
This document provides a summary of the steps taken to build an iOS SDK for the Supportify app over multiple iterations:
1. The initial SDK was created in Objective-C using a base framework but was difficult to implement and had code quality issues.
2. An updated SDK was created using Swift, but usability problems remained as it was still difficult for developers to implement.
3. Further iterations incorporated iOS design patterns like Clean Swift to reduce dependencies and modularize components. However, problems with the underlying API specification and tests emerged.
4. The final SDK version incorporated a Swagger-based proxy, models, authentication, and other improvements to address issues, resulting in a more full-featured and easier
Going crazy with docker multi stage build - Jorge ArteiroJorge Arteiro
This document summarizes a presentation about Docker multi-stage builds. The presentation introduces containers and Dockerfiles. It demonstrates using multi-stage builds to create a Docker image for .NET Core that separates the build and runtime stages. Finally, it discusses future directions for containers including build services, GitOps approaches, and container patching without Dockerfiles.
This document discusses PhoneGap, an open-source framework that allows developers to build mobile applications using standardized web APIs for accessing native device functions on various mobile platforms. It provides an overview of PhoneGap's history and goals of supporting web apps as first-class platforms, outlines its licensing and commitment to open web standards, and describes how it uses a bridge technique to enable calling native device APIs from JavaScript. The document also discusses PhoneGap's platform support, upcoming roadmap priorities around plugins, performance, security and tooling, and how it aims to support common development tasks through tools and automation.
How to Set Up Mobile Continuous Integration with Real Devices: CloudBees & SO...SOASTA
How To Set Up Continuous Integration for Mobile Apps, using Real Devices
Past Webinar
Jenkins core architect, Kohsuke Kawaguchi asserts, “Continuous Integration is synonymous with automation.” CI for mobile poses a challenge because to accurately test a mobile app, it must be installed and run on real mobile devices, a formerly manual process.
Built with Kohsuke’s guidance and enhancements, SOASTA’s new Jenkins plugin eliminates all manual tasks around mobile CI using actual mobile devices. In this webinar, CloudBees’ Mark Prichard and SOASTA’s Mike Ostenberg will demonstrate setting up 100% hands-free mobile CI.
Build automated tests with TouchTest that capture and replay complex gestures and mobile actions
Set up the automated build process using CloudBees DEV@Cloud (Jenkins as a Service) to make apps testable as part of the build
Wake up remote mobile devices
Automatically push out testable apps to real device labs located anywhere
Execute realistic automated test cases on a variety of devices in the lab
Reboot devices to assure valid results on subsequent runs
Review and analyze results anywhere directly in Jenkins in the cloud
Register now to reserve you space for this highly popular topic!
Angular: Go Mobile!
How could you develop a mobile app across iOS, Android or windows devices? We’ll show how Apache Cordova opens the world of mobile app development to web developers. In the session, a “To Do” app using Angular will be explored and then it will be demonstrated step by step on how to turn it into a mobile app, with access to native device capabilities. Along the way, you'll also learn what kind of apps are best-suited for the hybrid architecture and when to make the switch from web app to mobile app.
The document provides guidance on how to give and receive feedback effectively. It discusses why feedback is important, how to structure feedback conversations, and tips for both giving and receiving feedback in a constructive manner. The key points covered include using examples, expressing clear requests, listening without interrupting, thanking the other person, and focusing feedback on behaviors and issues rather than personal attacks.
Our laptop and smartphone contain our life and our livelihood, and yet we expose them to all sorts of threats and risks through traveling. In this skillshare I can show you the basic best practices to take care of your data, finances and gear as you move around.
NLP involves modeling behaviors and thought patterns to improve communication and collaboration. It examines how neurological processes, language, and experiences shape behavior. Key concepts in NLP include metaprograms, which influence how people think and act, and logical levels, which help understand issues at the right complexity level. NLP tools like metaprograms and logical levels can provide insight into recruiting, coaching, and personal development.
Bitcoin offers a new currency called BTC that is issued through an algorithm, resisting corruption and censorship while being efficient, global, and accessible. It uses three key techniques: peer-to-peer transactions, proof-of-work, and blockchain. These techniques allow Bitcoin to function as a network of value that is unstoppable. The document argues that blockchain technologies could help address issues on a global scale without corrupted middlemen by democratizing power, though more diverse people would need to get involved for its full potential to be realized.
What gamification is and is not, and how understanding and leveraging game mechanics can affect all aspects of a business, from marketing to management all the way through recruitment and sales.
Slides of a workshop I gave in May and June in Brussels. The code is on Github: http://github.com/chainskills/ethereum-cv
For more content, see http://www.chainskills.com
Une présentation contextuelle que j'ai donnée à l'occasion du meetup du Coworking Namur sur le sujet le 7 décembre 2016 (http://coworkingnamur.be/event/blockchain-impact-belgique/)
Si vous voulez en apprendre plus sur le développement blockchain et Ethereum, merci de répondre à cette enquête rapide: http://chainskills.com/2017/01/11/we-need-to-know-what-you-need-to-know/
Here are the slides of the Lean Startup for Developers conference talk I gave at Devoxx Poland on June 24th 2016.
To continue the conversation, feel free to register on www.ls4dev.com
Une présentation que j'avais préparé pour expliquer en quoi consiste le métier de développeur pour les futurs stagiaires de la formation de codeurs de Boitront (codeur-rural.fr)
The document discusses the principles of the Lean Startup methodology for starting a technology business. It notes that traditional business plans are too rigid and that startups operate under extreme uncertainty. Following Lean Startup principles, the key goals for startups are to build a Minimum Viable Product, get customer feedback to validate problem-solution fit through the build-measure-learn process, and iterate quickly based on learning rather than relying on assumptions or market studies.
Salesforce Integration for Bonterra Impact Management (fka Social Solutions A...Jeffrey Haguewood
Sidekick Solutions uses Bonterra Impact Management (fka Social Solutions Apricot) and automation solutions to integrate data for business workflows.
We believe integration and automation are essential to user experience and the promise of efficient work through technology. Automation is the critical ingredient to realizing that full vision. We develop integration products and services for Bonterra Case Management software to support the deployment of automations for a variety of use cases.
This video focuses on integration of Salesforce with Bonterra Impact Management.
Interested in deploying an integration with Salesforce for Bonterra Impact Management? Contact us at sales@sidekicksolutionsllc.com to discuss next steps.
Ivanti’s Patch Tuesday breakdown goes beyond patching your applications and brings you the intelligence and guidance needed to prioritize where to focus your attention first. Catch early analysis on our Ivanti blog, then join industry expert Chris Goettl for the Patch Tuesday Webinar Event. There we’ll do a deep dive into each of the bulletins and give guidance on the risks associated with the newly-identified vulnerabilities.
Have you ever been confused by the myriad of choices offered by AWS for hosting a website or an API?
Lambda, Elastic Beanstalk, Lightsail, Amplify, S3 (and more!) can each host websites + APIs. But which one should we choose?
Which one is cheapest? Which one is fastest? Which one will scale to meet our needs?
Join me in this session as we dive into each AWS hosting service to determine which one is best for your scenario and explain why!
GraphRAG for Life Science to increase LLM accuracyTomaz Bratanic
GraphRAG for life science domain, where you retriever information from biomedical knowledge graphs using LLMs to increase the accuracy and performance of generated answers
Driving Business Innovation: Latest Generative AI Advancements & Success StorySafe Software
Are you ready to revolutionize how you handle data? Join us for a webinar where we’ll bring you up to speed with the latest advancements in Generative AI technology and discover how leveraging FME with tools from giants like Google Gemini, Amazon, and Microsoft OpenAI can supercharge your workflow efficiency.
During the hour, we’ll take you through:
Guest Speaker Segment with Hannah Barrington: Dive into the world of dynamic real estate marketing with Hannah, the Marketing Manager at Workspace Group. Hear firsthand how their team generates engaging descriptions for thousands of office units by integrating diverse data sources—from PDF floorplans to web pages—using FME transformers, like OpenAIVisionConnector and AnthropicVisionConnector. This use case will show you how GenAI can streamline content creation for marketing across the board.
Ollama Use Case: Learn how Scenario Specialist Dmitri Bagh has utilized Ollama within FME to input data, create custom models, and enhance security protocols. This segment will include demos to illustrate the full capabilities of FME in AI-driven processes.
Custom AI Models: Discover how to leverage FME to build personalized AI models using your data. Whether it’s populating a model with local data for added security or integrating public AI tools, find out how FME facilitates a versatile and secure approach to AI.
We’ll wrap up with a live Q&A session where you can engage with our experts on your specific use cases, and learn more about optimizing your data workflows with AI.
This webinar is ideal for professionals seeking to harness the power of AI within their data management systems while ensuring high levels of customization and security. Whether you're a novice or an expert, gain actionable insights and strategies to elevate your data processes. Join us to see how FME and AI can revolutionize how you work with data!
Fueling AI with Great Data with Airbyte WebinarZilliz
This talk will focus on how to collect data from a variety of sources, leveraging this data for RAG and other GenAI use cases, and finally charting your course to productionalization.
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdfChart Kalyan
A Mix Chart displays historical data of numbers in a graphical or tabular form. The Kalyan Rajdhani Mix Chart specifically shows the results of a sequence of numbers over different periods.
Trusted Execution Environment for Decentralized Process MiningLucaBarbaro3
Presentation of the paper "Trusted Execution Environment for Decentralized Process Mining" given during the CAiSE 2024 Conference in Cyprus on June 7, 2024.
In the rapidly evolving landscape of technologies, XML continues to play a vital role in structuring, storing, and transporting data across diverse systems. The recent advancements in artificial intelligence (AI) present new methodologies for enhancing XML development workflows, introducing efficiency, automation, and intelligent capabilities. This presentation will outline the scope and perspective of utilizing AI in XML development. The potential benefits and the possible pitfalls will be highlighted, providing a balanced view of the subject.
We will explore the capabilities of AI in understanding XML markup languages and autonomously creating structured XML content. Additionally, we will examine the capacity of AI to enrich plain text with appropriate XML markup. Practical examples and methodological guidelines will be provided to elucidate how AI can be effectively prompted to interpret and generate accurate XML markup.
Further emphasis will be placed on the role of AI in developing XSLT, or schemas such as XSD and Schematron. We will address the techniques and strategies adopted to create prompts for generating code, explaining code, or refactoring the code, and the results achieved.
The discussion will extend to how AI can be used to transform XML content. In particular, the focus will be on the use of AI XPath extension functions in XSLT, Schematron, Schematron Quick Fixes, or for XML content refactoring.
The presentation aims to deliver a comprehensive overview of AI usage in XML development, providing attendees with the necessary knowledge to make informed decisions. Whether you’re at the early stages of adopting AI or considering integrating it in advanced XML development, this presentation will cover all levels of expertise.
By highlighting the potential advantages and challenges of integrating AI with XML development tools and languages, the presentation seeks to inspire thoughtful conversation around the future of XML development. We’ll not only delve into the technical aspects of AI-powered XML development but also discuss practical implications and possible future directions.
Monitoring and Managing Anomaly Detection on OpenShift.pdfTosin Akinosho
Monitoring and Managing Anomaly Detection on OpenShift
Overview
Dive into the world of anomaly detection on edge devices with our comprehensive hands-on tutorial. This SlideShare presentation will guide you through the entire process, from data collection and model training to edge deployment and real-time monitoring. Perfect for those looking to implement robust anomaly detection systems on resource-constrained IoT/edge devices.
Key Topics Covered
1. Introduction to Anomaly Detection
- Understand the fundamentals of anomaly detection and its importance in identifying unusual behavior or failures in systems.
2. Understanding Edge (IoT)
- Learn about edge computing and IoT, and how they enable real-time data processing and decision-making at the source.
3. What is ArgoCD?
- Discover ArgoCD, a declarative, GitOps continuous delivery tool for Kubernetes, and its role in deploying applications on edge devices.
4. Deployment Using ArgoCD for Edge Devices
- Step-by-step guide on deploying anomaly detection models on edge devices using ArgoCD.
5. Introduction to Apache Kafka and S3
- Explore Apache Kafka for real-time data streaming and Amazon S3 for scalable storage solutions.
6. Viewing Kafka Messages in the Data Lake
- Learn how to view and analyze Kafka messages stored in a data lake for better insights.
7. What is Prometheus?
- Get to know Prometheus, an open-source monitoring and alerting toolkit, and its application in monitoring edge devices.
8. Monitoring Application Metrics with Prometheus
- Detailed instructions on setting up Prometheus to monitor the performance and health of your anomaly detection system.
9. What is Camel K?
- Introduction to Camel K, a lightweight integration framework built on Apache Camel, designed for Kubernetes.
10. Configuring Camel K Integrations for Data Pipelines
- Learn how to configure Camel K for seamless data pipeline integrations in your anomaly detection workflow.
11. What is a Jupyter Notebook?
- Overview of Jupyter Notebooks, an open-source web application for creating and sharing documents with live code, equations, visualizations, and narrative text.
12. Jupyter Notebooks with Code Examples
- Hands-on examples and code snippets in Jupyter Notebooks to help you implement and test anomaly detection models.
Skybuffer SAM4U tool for SAP license adoptionTatiana Kojar
Manage and optimize your license adoption and consumption with SAM4U, an SAP free customer software asset management tool.
SAM4U, an SAP complimentary software asset management tool for customers, delivers a detailed and well-structured overview of license inventory and usage with a user-friendly interface. We offer a hosted, cost-effective, and performance-optimized SAM4U setup in the Skybuffer Cloud environment. You retain ownership of the system and data, while we manage the ABAP 7.58 infrastructure, ensuring fixed Total Cost of Ownership (TCO) and exceptional services through the SAP Fiori interface.
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAUpanagenda
Webinar Recording: https://www.panagenda.com/webinars/hcl-notes-und-domino-lizenzkostenreduzierung-in-der-welt-von-dlau/
DLAU und die Lizenzen nach dem CCB- und CCX-Modell sind für viele in der HCL-Community seit letztem Jahr ein heißes Thema. Als Notes- oder Domino-Kunde haben Sie vielleicht mit unerwartet hohen Benutzerzahlen und Lizenzgebühren zu kämpfen. Sie fragen sich vielleicht, wie diese neue Art der Lizenzierung funktioniert und welchen Nutzen sie Ihnen bringt. Vor allem wollen Sie sicherlich Ihr Budget einhalten und Kosten sparen, wo immer möglich. Das verstehen wir und wir möchten Ihnen dabei helfen!
Wir erklären Ihnen, wie Sie häufige Konfigurationsprobleme lösen können, die dazu führen können, dass mehr Benutzer gezählt werden als nötig, und wie Sie überflüssige oder ungenutzte Konten identifizieren und entfernen können, um Geld zu sparen. Es gibt auch einige Ansätze, die zu unnötigen Ausgaben führen können, z. B. wenn ein Personendokument anstelle eines Mail-Ins für geteilte Mailboxen verwendet wird. Wir zeigen Ihnen solche Fälle und deren Lösungen. Und natürlich erklären wir Ihnen das neue Lizenzmodell.
Nehmen Sie an diesem Webinar teil, bei dem HCL-Ambassador Marc Thomas und Gastredner Franz Walder Ihnen diese neue Welt näherbringen. Es vermittelt Ihnen die Tools und das Know-how, um den Überblick zu bewahren. Sie werden in der Lage sein, Ihre Kosten durch eine optimierte Domino-Konfiguration zu reduzieren und auch in Zukunft gering zu halten.
Diese Themen werden behandelt
- Reduzierung der Lizenzkosten durch Auffinden und Beheben von Fehlkonfigurationen und überflüssigen Konten
- Wie funktionieren CCB- und CCX-Lizenzen wirklich?
- Verstehen des DLAU-Tools und wie man es am besten nutzt
- Tipps für häufige Problembereiche, wie z. B. Team-Postfächer, Funktions-/Testbenutzer usw.
- Praxisbeispiele und Best Practices zum sofortigen Umsetzen
TrustArc Webinar - 2024 Global Privacy SurveyTrustArc
How does your privacy program stack up against your peers? What challenges are privacy teams tackling and prioritizing in 2024?
In the fifth annual Global Privacy Benchmarks Survey, we asked over 1,800 global privacy professionals and business executives to share their perspectives on the current state of privacy inside and outside of their organizations. This year’s report focused on emerging areas of importance for privacy and compliance professionals, including considerations and implications of Artificial Intelligence (AI) technologies, building brand trust, and different approaches for achieving higher privacy competence scores.
See how organizational priorities and strategic approaches to data security and privacy are evolving around the globe.
This webinar will review:
- The top 10 privacy insights from the fifth annual Global Privacy Benchmarks Survey
- The top challenges for privacy leaders, practitioners, and organizations in 2024
- Key themes to consider in developing and maintaining your privacy program
Your One-Stop Shop for Python Success: Top 10 US Python Development Providersakankshawande
Simplify your search for a reliable Python development partner! This list presents the top 10 trusted US providers offering comprehensive Python development services, ensuring your project's success from conception to completion.
2. #Devoxx #smartvoxx @sarbogast @eloudsa
• Who owns a smartwatch?
• Who is an Android developer?
• Who is an iOS developer?
• Who is a Pebble developer?
• Who is a Rolex developer?
• Who has already written a smartwatch app?
• Who is a member of the Night’s Watch?
Survey
3. #Devoxx #smartvoxx @sarbogast @eloudsa
Sébastien Arbogast
@sarbogast
• Java developer for 10 years
• iOS developers for 5 years (developer of the first Devoxx schedule
app)
• Pebble developer for 2 years
• Owner of TikTok Lunatik with iPod Nano
• VP of engineering for Take Eat Easy
4. #Devoxx #smartvoxx @sarbogast @eloudsa
Said Eloudrhiri
@eloudsa
• Developer since 1992
• Agile Coach and trainer
• Devoxx4Kids helper (Sphero, MindStorms, CodeCombat)
• Side Projects: mobile development
• Husband and father of Nora, Rayane and Djenna
• No kitten but a dog
5. #Devoxx #smartvoxx @sarbogast @eloudsa
Disclaimer
We are not related to Google,Apple or Pebble.
We are just curious developers sharing our experience.
Materials used in this presentation remains the property of their
owners.
Any questions?
24. #Devoxx #smartvoxx @sarbogast @eloudsa
• Form factor: 38 mm and 42 mm (Square)
• Four kinds of applications: apps, notifications, glances,
complications
• Design guidelines: personal communication, holistic design,
lightweight interaction
Design constraints on Apple Watch
25. #Devoxx #smartvoxx @sarbogast @eloudsa
• Form factors
• Kinds of applications
• Design guidelines
Design constraints on Android Wear
48. #Devoxx #smartvoxx @sarbogast @eloudsa
• Tools:
• Android SDK Tools
• Android SDK Platform-Tools
• Android SDK Build-Tools
• Android from API 18 (4.3.1) to API 22 (5.1.1) and higher
• SDK Platform
• Google APIs
• Android Wear Intel x86 System Image
• Google APIs Intel x86 Atom System Image
Required libs
49. #Devoxx #smartvoxx @sarbogast @eloudsa
• Extras:
• Android Support Repository
• Android Support Library
• Google Play Services
• Google Repository
Required libs
50. #Devoxx #smartvoxx @sarbogast @eloudsa
Android Studio or Eclipse?
• Android Development Tools (ADT)
• Andmore - Eclipse Android Tooling (Incubation Project)
https://projects.eclipse.org/projects/tools.andmore
http://developer.android.com/tools/sdk/eclipse-adt.html
80. #Devoxx #smartvoxx @sarbogast @eloudsa
Step 3: Get Schedules
… monday - Monday, 9th November 2015
… tuesday - Tuesday, 10th November 2015
… wednesday - Wednesday, 11th November 2015
… thursday - Thursday, 12th November 2015
… friday - Friday, 13th November 2015
81. #Devoxx #smartvoxx @sarbogast @eloudsa
Step 3: Get Schedules
• Google Play Services and the Data Layer API:
• Node API, Message API
• The watch sends a request to the phone
• The phone accesses the network to fetch the schedules
• The phone logs the schedules
84. #Devoxx #smartvoxx @sarbogast @eloudsa
Google API Client
Device
Google Play
Services
Your App
Google API Client
Google Play
services library
Message API
Data API
Node API
85. #Devoxx #smartvoxx @sarbogast @eloudsa
Node API
• Learn more about local or connected Nodes
• Display name
• Id to identify the node in the Android Wear network
• Nearby the local node
86. #Devoxx #smartvoxx @sarbogast @eloudsa
Message API
• One-way communication
• Message (Data Item) sent to the connected device
• path -> identifies the message
• payload -> small message payload
87. #Devoxx #smartvoxx @sarbogast @eloudsa
Data Item
Path Payload
/path/to/your/data
Byte array
max: 100 Kb
Asset (Binary Blob) can go beyond this limitation of 100Kb.
Requires the Data API.
88. #Devoxx #smartvoxx @sarbogast @eloudsa
Watch
MessageApi
sendMessage()
Data Layer
Phone
WearableListenerService
onMessageReceived()
Data Layer
Bluetooth/Wi-Fi
MessageEvent
getData()
getPath()
Data Item
Message API
89. #Devoxx #smartvoxx @sarbogast @eloudsa
Wi-Fi
Fallback solution when Bluetooth not
available.
Unable to connect on remote servers.
90. #Devoxx #smartvoxx @sarbogast @eloudsa
Watch part
• Declare the Google API Client
• Connect-Disconnect to-from Google Play Services
• Define the message path
• Add a button listener
• Send the message to the phone to get the schedules
91. #Devoxx #smartvoxx @sarbogast @eloudsa
Phone part
• WearableListenerService: receive events from the Data Layer
• Process message path “/schedules” (onMessageReceived)
• Retrieves schedules with Retrofit (REST API Client)
• Logs schedules on the console
102. #Devoxx #smartvoxx @sarbogast @eloudsa
public class WearService extends WearableListenerService {
…
@Override
public void onMessageReceived(MessageEvent messageEvent) {
// Processing the incoming message
String path = messageEvent.getPath();
String data = new String(messageEvent.getData());
if (path.equalsIgnoreCase(SCHEDULES_PATH)) {
retrieveSchedules();
return;
}
}
Process “/schedules”
103. #Devoxx #smartvoxx @sarbogast @eloudsa
public class WearService extends WearableListenerService {
…
// Retrieve schedules from Devoxx
private void retrieveSchedules() {
// retrieve the schedules list from the server
Callback callback = new Callback() {
@Override
public void success(Object o, Response response) {
// retrieve schedule from REST
Schedules scheduleList = (Schedules) o;
if (scheduleList == null) {
Log.d(TAG, "No schedules!");
return;
}
List<Link> links = scheduleList.getLinks();
for (Link link : links) {
Log.d(TAG, Utils.getLastPartUrl(link.getHref()) + " - " + link.getTitle());
}
}
@Override
public void failure(RetrofitError retrofitError) {
Log.d(TAG, retrofitError.getMessage());
}
};
mMethods.getSchedules(mConferenceName, callback);
}
Retrieve Schedules
104. #Devoxx #smartvoxx @sarbogast @eloudsa
Run on Phone
• Build and deploy on Phone and Watch
• Forwarding ports (adb forward tcp:…):
• Link Phone to Wear Emulator
• On the Watch, tap on “GET SCHEDULES” button
• Check the log output of the phone
109. #Devoxx #smartvoxx @sarbogast @eloudsa
… monday - Monday, 9th November 2015
… tuesday - Tuesday, 10th November 2015
… wednesday - Wednesday, 11th November 2015
… thursday - Thursday, 12th November 2015
… friday - Friday, 13th November 2015
Step 3: Done!
110. #Devoxx #smartvoxx @sarbogast @eloudsa
Step 3: Get Schedules
• If phone is connected, go through phone
• Otherwise access the network directly
• Transparent for the developer
• Access to the same network SDK as on the iPhone
(NSURLSession)
112. #Devoxx #smartvoxx @sarbogast @eloudsa
Step 3: Get Schedules
• Bypass App Transport Security
• Create Devoxx singleton to handle API client stuff in watch
extension
• Initialize session configuration
• Initialize session
• Call the API
• Parse JSON into dictionaries
• Log dictionaries to the console
119. #Devoxx #smartvoxx @sarbogast @eloudsa
Step 4: Show Schedules
• The phone sends the schedules to the watch (Data API)
• The watch receives the schedules
• The watch displays the schedules on a list view
120. #Devoxx #smartvoxx @sarbogast @eloudsa
Data API
• Support one-way or two-way data communication
• Sending Binary Blog (Asset)
• Synchronise data between connected devices
• Synchronise data when connection is re-established
• Data caching
121. #Devoxx #smartvoxx @sarbogast @eloudsa
Phone
Data Layer
Watch
Data Layer
.create(“/path”)
PutDataMapRequest
.putInt(KEY, data)
DataMap
.asPutDataRequest()
PutDataRequest
.putDataItem()
Wearable.DataApi
Data Item
(Shared)
.getInt()
DataMap
.getDataItem()
DataEvent
.fromDataItem(DataItem)
DataMapItem
onDataChanged()
DataApi.DataListenerBluetooth/Wi-Fi
Data API
122. #Devoxx #smartvoxx @sarbogast @eloudsa
@Override
protected void onResume() {
super.onResume();
// Retrieve the list of schedules
sendMessage(SCHEDULES_PATH, "get list of schedules");
}
Display schedules
123. #Devoxx #smartvoxx @sarbogast @eloudsa
public class WearService extends WearableListenerService {
// send Schedules to the watch
private void sendSchedules(List<Link> schedules) {
final PutDataMapRequest putDataMapRequest = PutDataMapRequest.create(SCHEDULES_PATH);
ArrayList<DataMap> schedulesDataMap = new ArrayList<>();
// process each schedule
for (Link schedule : schedules) {
final DataMap scheduleDataMap = new DataMap();
// process and push schedule's data
// We need to add a timestamp to force a onDataChanged event on the remote device.
scheduleDataMap.putString("timestamp", new Date().toString());
scheduleDataMap.putString("day", Utils.getLastPartUrl(schedule.getHref()));
scheduleDataMap.putString("title", schedule.getTitle());
schedulesDataMap.add(scheduleDataMap);
}
// store the list in the datamap to send it to the watch
putDataMapRequest.getDataMap().putDataMapArrayList("/list", schedulesDataMap);
// send the list
if (mApiClient.isConnected()) {
Wearable.DataApi.putDataItem(mApiClient, putDataMapRequest.asPutDataRequest());
}
}
Send Schedules
1
2
3
5
6
4
130. #Devoxx #smartvoxx @sarbogast @eloudsa
// Inner class providing the WearableListview's adapter
public class ListViewAdapter extends WearableListView.Adapter {
…
// Create new views for list items
// (invoked by the WearableListView's layout manager)
@Override
public WearableListView.ViewHolder onCreateViewHolder(ViewGroup parent,
int viewType) {
// Inflate our custom layout for list items
return new ItemViewHolder(new SettingsItemView(mContext));
}
…
Animation
131. #Devoxx #smartvoxx @sarbogast @eloudsa
public final class SettingsItemView extends FrameLayout implements
WearableListView.OnCenterProximityListener {
private TextView description;
public SettingsItemView(Context context) {
super(context);
View.inflate(context, R.layout.schedule_row_activity, this);
description = (TextView) findViewById(R.id.description);
}
@Override
public void onCenterPosition(boolean b) {
description.animate().scaleX(1f).scaleY(1f).alpha(1);
}
@Override
public void onNonCenterPosition(boolean b) {
description.animate().scaleX(0.8f).scaleY(0.8f).alpha(0.6f);
}
}
Animation
134. #Devoxx #smartvoxx @sarbogast @eloudsa
Run the app
• Build and deploy on Phone and Watch
• Forwarding ports (adb forward tcp:…):
• Link Phone to Wear Emulator
• Data are retrieved and displayed from Phone
137. #Devoxx #smartvoxx @sarbogast @eloudsa
Step 4: Show Schedules
• Model classes to store data (Model)
• Storyboard to layout screens (View)
• InterfaceControllers to configure and react (Controllers)
139. #Devoxx #smartvoxx @sarbogast @eloudsa
Step 4: Show Schedules
• Create Schedule class: initializer and overridden description
• Replace dictionary by class in callback
• Remove label and add table to layout
• Specify identifier for row controller
• Create ScheduleRowController class
• Link ScheduleRowController in storyboard
• Label outlet in ScheduleRowController
• Table outlet in interface controller
140. #Devoxx #smartvoxx @sarbogast @eloudsa
Step 4: Show Schedules
• Call Devoxx loading method in willActivate and initialize table
• Remove Devoxx call from ExtensionDelegate
• RUN!
141. #Devoxx #smartvoxx @sarbogast @eloudsa
class Schedule: NSObject {
var title:String?
var href:NSURL?
init(fromDictionary dictionary:NSDictionary){
guard let title = dictionary["title"] as? String else {
print("Cannot find title")
return
}
guard let href = dictionary["href"] as? String else {
print("Cannot find href")
return
}
self.title = title
self.href = NSURL(string: href)
}
override var description:String {
return self.title!
}
}
Schedule model class
142. #Devoxx #smartvoxx @sarbogast @eloudsa
func loadSchedulesForConference(conference:String, callback: ([Schedule]) -> (Void)) {
let task = session.dataTaskWithURL(schedulesURL) { (data: NSData?, response:NSURLResponse?,
error:NSError?) -> Void in
do {
let schedulesDict=try NSJSONSerialization.JSONObjectWithData(data, options:.AllowFragments)
guard let schedulesArray = schedulesDict["links"] as? [NSDictionary] else {
print("No links array in parsed schedules")
return
}
var schedules = [Schedule]()
for scheduleDict in schedulesArray {
schedules.append(Schedule(fromDictionary: scheduleDict))
}
callback(schedules)
} catch let jsonError { print(jsonError) }
}
task.resume()
}
Replace dictionary by model
151. #Devoxx #smartvoxx @sarbogast @eloudsa
Step 5: Select a Schedule
• Store Schedule’s data on Tag
• Add ClickListener on WearableListView
• Attach the listener
• Retrieve Schedule’s data from Tag
• Display the selected item
152. #Devoxx #smartvoxx @sarbogast @eloudsa
@Override
public void onBindViewHolder(WearableListView.ViewHolder holder,
int position) {
// retrieve the text view
ItemViewHolder itemHolder = (ItemViewHolder) holder;
TextView view = itemHolder.textView;
// retrieve, transform and display the schedule's day
Schedule schedule = mDataset.get(position);
String scheduleDay = schedule.getTitle().replace(",", "n");
view.setText(scheduleDay);
// replace list item's metadata
holder.itemView.setTag(schedule);
}
Store Schedule’s data
1
2
153. #Devoxx #smartvoxx @sarbogast @eloudsa
public class ScheduleActivity extends Activity implements
WearableListView.ClickListener,
GoogleApiClient.ConnectionCallbacks,
DataApi.DataListener {
@Override
public void onClick(WearableListView.ViewHolder
viewHolder) {
}
}
Add ClickListener
154. #Devoxx #smartvoxx @sarbogast @eloudsa
@Override
protected void onCreate(Bundle savedInstanceState) {
…
// Assign the adapter
listViewAdapter = new ListViewAdapter(ScheduleActivity.this, new
ArrayList<Schedule>());
listView.setAdapter(listViewAdapter);
// Set the click listener
listView.setClickListener(ScheduleActivity.this);
}
Attach the ClickListener
155. #Devoxx #smartvoxx @sarbogast @eloudsa
@Override
public void onClick(WearableListView.ViewHolder viewHolder) {
Schedule schedule = (Schedule) viewHolder.itemView.getTag();
if (schedule == null) {
return;
}
Toast.makeText(ScheduleActivity.this, "You tap on: " +
schedule.getDay(), Toast.LENGTH_SHORT).show();
}
Retrieve and display schedule
1
2
156. #Devoxx #smartvoxx @sarbogast @eloudsa
Run the app
• Build and deploy on the Watch
• Forwarding ports (adb forward tcp:…):
• Link Phone to Wear Emulator
• Tap on a schedule
159. #Devoxx #smartvoxx @sarbogast @eloudsa
Step 5: Select a Schedule
• Add title to interface controller
• New interface controller in storyboard
• Push segue from first to second interface controller
• Create ScheduleInterfaceController class
• Link it to storyboard
• Add schedule member variable
• Override contextForSegueWithIdentifier
• Catch context in ScheduleInterfaceController
• Set title in willActivate
167. #Devoxx #smartvoxx @sarbogast @eloudsa
Phone
Data Layer
Watch
Data Layer
.create(“/path”)
PutDataMapRequest
.putInt(KEY, data)
DataMap
.asPutDataRequest()
PutDataRequest
.putDataItem()
Wearable.DataApi
Data Item
(Shared)
.getInt()
DataMap
.getDataItem()
DataEvent
.fromDataItem(DataItem)
DataMapItem
onDataChanged()
DataApi.DataListener
Data API
168. #Devoxx #smartvoxx @sarbogast @eloudsa
Wear
Data Item
(Cache)
.getInt()
DataMap
.getDataIetms()
DataApi
wear://path_to_data
1
2
Fetch from local cache
MessageApi
sendMessage()
3
4
169. #Devoxx #smartvoxx @sarbogast @eloudsa
public class WearService extends WearableListenerService {
// send Schedules to the watch
private void sendSchedules(List<Link> schedules) {
final PutDataMapRequest putDataMapRequest = PutDataMapRequest.create(SCHEDULES_PATH);
ArrayList<DataMap> schedulesDataMap = new ArrayList<>();
// process each schedule
for (Link schedule : schedules) {
final DataMap scheduleDataMap = new DataMap();
// process and push schedule's data
scheduleDataMap.putString("day", Utils.getLastPartUrl(schedule.getHref()));
scheduleDataMap.putString("title", schedule.getTitle());
schedulesDataMap.add(scheduleDataMap);
}
// store the list in the datamap to send it to the watch
putDataMapRequest.getDataMap().putDataMapArrayList("/list", schedulesDataMap);
// send the list
if (mApiClient.isConnected()) {
Wearable.DataApi.putDataItem(mApiClient, putDataMapRequest.asPutDataRequest());
}
}
Changes on Phone: No timestamp
1
170. #Devoxx #smartvoxx @sarbogast @eloudsa
@Override
protected void onResume() {
super.onResume();
// Retrieve and display the list of schedules
getSchedules(SCHEDULES_PATH);
}
Display data items
171. #Devoxx #smartvoxx @sarbogast @eloudsa
private void getSchedules(final String pathToContent) {
Uri uri = new Uri.Builder()
.scheme(PutDataRequest.WEAR_URI_SCHEME)
.path(pathToContent)
.build();
Wearable.DataApi.getDataItems(mApiClient, uri)
.setResultCallback(
new ResultCallback<DataItemBuffer>() {
@Override
public void onResult(DataItemBuffer dataItems) {
if (dataItems.getCount() == 0) {
// refresh the list of schedules from Mobile
sendMessage(SCHEDULES_PATH, "get list of schedules");
return;
}
…
// retrieve and display the schedule from the cache
SchedulesListWrapper schedulesListWrapper = new SchedulesListWrapper();
final List<Schedule> schedulesList = schedulesListWrapper.getSchedulesList(dataMap);
runOnUiThread(new Runnable() {
@Override
public void run() {
// hide the progress bar
findViewById(R.id.progressBar).setVisibility(View.GONE);
listViewAdapter.refresh(schedulesList);
}
});
}
}
);
}
Retrieve data: mobile or cache?
1
2
3
4
174. #Devoxx #smartvoxx @sarbogast @eloudsa
Step 6: Get and Cache Schedules
• Create activity indicator animation
• Link with CoreData framework
• Create object model
• Create DevoxxCache class
• Setup Core Data stack in DevoxxCache
• Model Schedule and Conference in object model
• Delete Schedule Model class
• Generate NSManagedObject subclasses
175. #Devoxx #smartvoxx @sarbogast @eloudsa
Step 6: Get and Cache Schedules
• Add empty getSchedules() method to DevoxxCache
• Add empty saveSchedules() method to DevoxxCache
• Modify loadSchedules in Devoxx class
176. #Devoxx #smartvoxx @sarbogast @eloudsa
Create activity indicator animation
https://github.com/mikeswanson/JBWatchActivityIndicator
• Add image to interface controller
• Scale mode: center
• Height and width relative to
container
• Hidden
• activityIndicator outlet in interface
controller
194. #Devoxx #smartvoxx @sarbogast @eloudsa
Step 7: Get Talk
• Create the Activity
• Layouts: GridView, Card, Custom
• GridViewPagerAdapter
• Create the Fragments
• EventBus
• Retrieve Talks and Speakers from Data Api
• Requests sent through the Message Api
• Bonus: Follow on Twitter (Confirmation Activity)
196. #Devoxx #smartvoxx @sarbogast @eloudsa
Fragment Fragment
Fragment Fragment
• TalkFragment
• TalkSummaryFragment
• TalkSpeakerFragment
FragmentGridPagerAdapter
TalkActivity
197. #Devoxx #smartvoxx @sarbogast @eloudsa
• Define the layout
• Create the fragments
• Create the Adapter
• Link the Adapter
Create the GridViewPager
206. #Devoxx #smartvoxx @sarbogast @eloudsa
public class TalkSummaryFragment extends Fragment {
…
description.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mTalkSummary == null) {
return;
}
if (mEllipsize) {
description.setText(mTalkSummary);
} else {
description.setText(StringUtils.abbreviate(mTalkSummary, ELLIPSIS_SIZE));
}
mEllipsize = !mEllipsize;
// Force the CardScrollView to reset to its initial position
mainView.findViewById(R.id.card_scroll_view).setScrollX(0);
mainView.findViewById(R.id.card_scroll_view).setScrollY(0);
}
});
Summary: Expand content
212. #Devoxx #smartvoxx @sarbogast @eloudsa
public void onEvent(AddFavoriteEvent addFavoritesEvent) {
…
}
EventBus - Receive events
Required to register/unregister to the bus
224. #Devoxx #smartvoxx @sarbogast @eloudsa
Step 8: Set Favorites
• Retrieve, add, remove favorites on the calendar
• Add CalendarHelper on the phone
• Favorite messages sent over DataApi (retrieved, added, removed)
• Add reminders using AlarmManager
• Manage a manual delete from the Calendar with a synchronisation of
the SlotsActivity or TalkActivity
• Send a message when required (retrieve) or when the favorite has
changed (add or remove)
• Use the EventBus to synchronise the components (Activity, Fragments)
• ConfirmationActivity on favorite’s action
238. #Devoxx #smartvoxx @sarbogast @eloudsa
Step 8: Managing Favorites
• Add a force touch menu to SlotController
• Handle menu actions
• Add scheduleNotifications() method to talk to the phone
• Import WatchConnectivity framework
• Start WatchConnectivity session
• Receive messages in AppDelegate on iPhone
239. #Devoxx #smartvoxx @sarbogast @eloudsa
class SlotController: WKInterfaceController {
override func awakeWithContext(context: AnyObject?) {
super.awakeWithContext(context)
self.updateMenu()
}
func updateMenu() {
self.clearAllMenuItems()
if let talkSlot = self.slot as? TalkSlot {
if let favorite = talkSlot.favorite?.boolValue where favorite {
self.addMenuItemWithImageNamed("FavoriteOffMenu", title: NSLocalizedString("Remove
from Favorites", comment: ""), action: "favoriteMenuSelected")
self.favoriteImage.setImageNamed("FavoriteOn")
} else {
self.addMenuItemWithImageNamed("FavoriteOnMenu", title: NSLocalizedString("Add to
Favorites", comment: ""), action: "favoriteMenuSelected")
self.favoriteImage.setImageNamed("FavoriteOff")
}
self.addMenuItemWithItemIcon(WKMenuItemIcon.Decline, title: NSLocalizedString("Cancel",
comment: ""), action: "cancelMenuSelected")
}
}
}
Add force touch menu
240. #Devoxx #smartvoxx @sarbogast @eloudsa
class SlotController: WKInterfaceController {
[…]
@IBAction func favoriteMenuSelected() {
if let talkSlot = self.slot as? TalkSlot {
DataController.sharedInstance.swapFavoriteStatusForTalkSlot(talkSlot, callback:
{ (talkSlot:TalkSlot) -> Void in
self.slot = talkSlot
self.updateMenu()
})
}
}
@IBAction func cancelMenuSelected() {}
}
Handle menu actions
241. #Devoxx #smartvoxx @sarbogast @eloudsa
class SlotController: WKInterfaceController {
[…]
@IBAction func favoriteMenuSelected() {
if let talkSlot = self.slot as? TalkSlot {
DataController.sharedInstance.swapFavoriteStatusForTalkSlot(talkSlot, callback:
{ (talkSlot:TalkSlot) -> Void in
self.slot = talkSlot
self.updateMenu()
self.scheduleNotification()
})
}
}
@IBAction func cancelMenuSelected() {}
}
Handle menu actions
255. #Devoxx #smartvoxx @sarbogast @eloudsa
<application>
…
<service android:name=".service.EventService"/>
</application
Alarm: EventService
Update the manifest of the phone
256. #Devoxx #smartvoxx @sarbogast @eloudsa
public class EventService extends Service {
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
…
// remove the event from the calendar
CalendarHelper calendarHelper = new CalendarHelper(this);
calendarHelper.removeEvent(eventId);
…
sendFavorite(talkId, 0L);
..
}
Phone: EventService
259. #Devoxx #smartvoxx @sarbogast @eloudsa
Step 9: Notifications
• Schedule notifications on the iPhone
• Custom notification controller
260. #Devoxx #smartvoxx @sarbogast @eloudsa
private func updateLocalNotificationWithMessage(message:[String:AnyObject]){
if let talkSlot = message["talkSlot"] as? NSDictionary {
let id = talkSlot["talkId"] as? String
for notification in UIApplication.sharedApplication().scheduledLocalNotifications! {
if let userInfo = notification.userInfo {
if let talkId = userInfo["id"] as? String {
if talkId == id {
UIApplication.sharedApplication().cancelLocalNotification(notification)
}
}
}
}
let favorite = talkSlot["favorite"] as? NSNumber
if let fav = favorite?.boolValue where fav {
let title = talkSlot["title"] as? String
let room = talkSlot["room"] as? String
let fromTimeMillis = talkSlot["fromTimeMillis"] as? NSNumber
let fromTime = talkSlot["fromTime"] as? String
let toTime = talkSlot["toTime"] as? String
let date = NSDate(timeIntervalSince1970: fromTimeMillis!.doubleValue / 1000)
let notification = UILocalNotification()
notification.fireDate = date.dateByAddingTimeInterval(-10*60)
notification.timeZone = NSTimeZone.localTimeZone()
notification.userInfo = talkSlot as [NSObject : AnyObject]
notification.alertTitle = title
notification.alertBody = String(format: NSLocalizedString("From %@ to %@ in %@", comment: ""), arguments: [fromTime!, toTime!, room!])
UIApplication.sharedApplication().scheduleLocalNotification(notification)
}
}
}
Actually schedule notifications
277. #Devoxx #smartvoxx @sarbogast @eloudsa
Step 11: Release the App
• Package the Apple Watch app with the iPhone app
• Release the iPhone app like any other
• Wait for review…
• Wait again…
• Wait some more…
278. #Devoxx #smartvoxx @sarbogast @eloudsa
A word about Pebble
• Language: either C or Javascript
• Development environment: either text editor or CloudPebble
• Platform support: both iOS and Android (+SDKs)
• Devices: Pebble Classic, Pebble Time, Pebble Time Round
• Distribution: via the Pebble app
280. #Devoxx #smartvoxx @sarbogast @eloudsa
function loadShutterGroupList(accessToken, refreshToken, args) {
console.log("Loading shutter group list for access token " + accessToken + " and site " + args[0]);
var response;
var req = new XMLHttpRequest();
// build the GET request
var url = "https://api.myfox.me:443/v2/site/" + args[0] + "/group/shutter/items?access_token=" + accessToken;
console.log("GETting " + url);
req.open('GET', url, true);
req.onload = function(e) {
if (req.readyState == 4) {
// 200 - HTTP OK
if(req.status == 200) {
console.log(req.responseText);
response = JSON.parse(req.responseText);
var shutterGroupList;
if (response.status === 'OK') {
shutterGroupList = response.payload.items;
var msg = {};
msg.messageType = MessageType.SHUTTER_GROUP_LIST;
for(var i = 0; i < shutterGroupList.length; i++){
var shutterGroup = shutterGroupList[i];
msg['' + shutterGroup.groupId] = shutterGroup.label;
}
console.log("Sending response back to Pebble: " + JSON.stringify(msg));
Pebble.sendAppMessage(msg);
} else {
console.log("Status not OK");
Pebble.sendAppMessage({messageType:MessageType.ERROR, errorMessage:"Could not load shutter groups."});
}
} else if(req.status == 401 && refreshToken){
getNewAccessToken(refreshToken, loadShutterGroupList, args);
} else {
console.log("Request returned error code " + req.status.toString());
Pebble.sendAppMessage({messageType:MessageType.ERROR, errorMessage:"Could not load shutter groups."});
}
}
};
req.send(null);
}
Pebble code
281. #Devoxx #smartvoxx @sarbogast @eloudsa
Summary
• Huge inequalities in terms of development platform ease-of-
use
• Apple obviously took time to add abstraction layers that make
development more expressive
• Short learning curve on Android Wear compared to Apple
Watch
• Tooling support not up-to-date on Android
• Documentation is not really finished for both platforms
• Not all apps make sense on smartwatches
282. #Devoxx #smartvoxx @sarbogast @eloudsa
Apps that work on smartwatches
• countdowns and timers
• status checks: what’s the temperature? what’s my next
session? what’s the score of the game?
• remote controls: switch off the light, change the music, open
my hotel room, pay for my shopping
• notification responders: invitation to a meeting -> what’s the
meeting about, somebody sent me a message -> what does it
say?
• data trackers: where am I? how many calories am I burning?
what’s my speed?)
283. #Devoxx #smartvoxx @sarbogast @eloudsa
Apps that don’t make sense
• games of any kind
• any long reading (news, books, etc.)
• ecommerce
• video or image viewing
• anything that requires text input