SlideShare a Scribd company logo
1 of 43
Handy Labs Apps and the
Technology Behind Them
Amro A Younes
Agenda
 Inspiration behind iOS App development
 Pocket Change
 uClimate SF
 iOnTime
 Observations
Inspiration and Beginnings
 Friend wanted to collaborate with me on his ideas, so we decided to take a course
together
 I wanted to learn something new
 Took the self learning Stanford iOS App Development course in 2013. Followed
the curriculum, completed all homework assignments, and extra credit
 Pocket Change was my final project.
 Used ARC to get a feel for memory management, despite auto memory
management already available in iOS.
 retain, release, autorelease
 Drawbacks, no one to grade my work and show me better ways of doing
something.
Why HANDY Labs LLC
 Patent Trolls
 http://www.thisamericanlife.org/radio-archives/episode/441/when-patents-attack?rgp-
redirect-tag=rgp-redirect-tag
 Liability Protection
Pocket Change
 Simple expense tracking tool for tracking cash incidentals
 Idea is not novel or unique.
 No app is as simple as this. Expense tracking apps contain budgets, graphs with no
easy interface to quickly enter your expenses.
 Initially marketed to folks who want to track cash incidentals only
 I personally found it more useful when I travel and marketed it as such
 The heart of the solution is CoreData, a.k.a as SQLLite
 iOS 6.1
Pocket Change
 Never hard code your values.
 Load from a text file:
 NSString *path = [[NSBundle mainBundle] pathForResource:@"categorywords"
ofType:@"txt"];
 NSDictionary *categories = [NSDictionary dictionaryWithContentsOfFile:path];
 Translate Dictionary to CoreDB
 CoreDB is not thread safe. Luckily access to it is quick. So always access it
from the main thread.
 Usually that is UIManagedDocument, or
[context performBlock:^{
// do stuff with context
}];
 Some contexts including Core Data ones have a parentContext. The
parentContext will almost always have its own thread, so you can performBlock
on it. But it is a different context, so you will have to save and then refetch to
see the changes
uClimate San Francisco
 Many areas in California have vastly different weather conditions. San Francisco in
particular
 Need a data source: Weather Underground
 Weather Apps are almost always free
 Extensible to any place with data points
 Hub and Spoke Architecture
 iOS 6.1
 CoreData
 iAd Framework
 MapKit
 UIKit
 CoreGraphics
uClimate San Francisco
Weather
Underground
uClimate
Backend
Server
uClimate SF Filtering Out Annotations
uClimate SF: Customizing Annotations
uClimate SF: Customizing Annotations
uClimate San Francisco
 Weather stations come and go.
 Updating configuration should not involve a new software revision.
 Every 24 hours back end server discovers new stations and purges old stations that
have not been active for a while.
 App requests weather station list from back end and updates its configuration on
the fly.
 App also processes custom list of stations. Updates are in the backend
 Multi-threaded solution to account for slow networks and prevent the UI from
locking up.
 Save and re-fetch approach in the DB is required due to different threads accessing
weather data.
iOnTime
 I live in a congested area. Your timing is highly dependent on traffic.
 I had the idea in 2013 but had to wait for iOS 7 so I could implement my solution
 calculateETAWithCompletionHandler: Available in iOS 7.0 and later, or use
 Google API
 Considered patenting the idea, but …
 Did not want to to store any date to address privacy concerns and not have to
manage out of sync information
iOnTime cont’d
 Had to wait for iOS9 so I could add public transportation
 Initially based on iOS7 then moved to iOS8
 MessageUI
 Foundation
 UiKit
 CoreLocation
 MapKit
 EventKit
 EventKitUI
 Apple introduced a similar concept a year after I started selling this App. Theirs is
built into the Calendar, it doesn’t work reliably
uClimateSF Texting
• If the calendar event has an invitee,
the App uses the contact’s mobile
number to auto fill in the To
• A preloaded message of I am on my
way is put together if leaving on time.
• If it detects you have not left it
autofills with: Running late, see you
soon.
iOnTime Design Considerations
 Minimize impact on battery when tracking location
 While in the foreground, implemented high accuracy GPS location.
 While in the background, woke up once a minute and updated my GPS location
 Minimize network usage by only requesting new travel time estimates every n minutes
or x distance since last location update
 Getting Apple to approve location tracking while running in the background took
months of going back and forth.
 The following plist configuration was rejected because they did not consider iOnTime a
navigation based solution
 Without the ability to run in the background, I was unable to use the most accurate
location based solution, or wake up to ask for location.
iOnTime Design Considerations
 Reworked implementation and background manager to receive significant location
updates from Apple
 The significant-change location service delivers updates only when there has been
a significant change in the device’s location, such as 500 meters or more.
 Updates to a change in traffic conditions changes are missed while in background
without location changes.
 Apple time estimates are okay. It would be great to correlate with other sources
such as Waze and Google Maps
 Remember ARC and auto memory management. Calendar event notification
expired as information was sent into the bowels of the App. Had to copy
information
 Multi-threaded to not lock up the UI while location and time estimates are derived.
 Dictionary of Dictionaries is a pain in Objective C. Easier in Java, and a piece of
cake in Python.
iOnTime Usability
Improvements
• Ability to filter out calendars
• Customize alerting
• Arrive a number of minutes before
appointment
• Receive alerts a number of minutes
before you have to be on your way
• Did not use CoreData
• Dictionary of Dictionaries to reflect
Calendar configuration is more
challenging than having done that in
CoreData
Observations
 Engineering is the easiest part of the App cycle
 Marketing your app and getting it to stand out amongst the noise is hard
 There are two forms of App development approaches, which one is you?
 You have an idea, its unique, or you can do better, faster, or make it more user friendly
 You have a business idea, the mobile app is your platform
 User Experience is key
 Do not do this alone
 Requires dedicated time due to frequency of OS updates, new languages
introduced, and new platforms.
Observations cont’d
 Take your app to the next level. Social interaction amongst users. Requires a
backend infrastructure to connect everyone.
 Careful with services like Parse. Very easy to use. Does not scale cost wise.
 Cheaper to build your own infrastructure but takes longer to develop
 Amazon Web Services
 Database such as mySQL, Mongo DB, HBASE (Big Data).
 Tutorial on Parse
 https://www.raywenderlich.com/15916/how-to-synchronize-core-data-with-a-web-
service-part-1
 Comparison of different services, Parse vs Stackmob vs. Appcelerator
 http://www.raywenderlich.com/20482/how-to-choose-the-best-backend-provider-for-
your-ios-app-parse-vs-stackmob-vs-appcelerator-cloud-and-more
Observations cont’d
 Monetization is not easy
 Advertisement model only works for apps that are engaging on screen
 People do not want to pay for apps. Less so on Android than iOS
 User retention gives value that you can demonstrate to investors
 In app purchases. Typical gaming model. Does not work for all paradigms unless your idea
lends itself to that concept. Celebrity apps do this as well.
 If you own data that you can provide an API for, you are in a very good place.
 Explored making demo apps that can be upgraded to paid apps. Had minimal
conversion success
 Tutorial on how to Market and Promote your App
 http://www.raywenderlich.com/11359/how-to-market-and-promote-your-games-and-apps-
part-1
2016 05-07 amro handy labs workshop

More Related Content

Similar to 2016 05-07 amro handy labs workshop

Empower individuals with autism through coding
Empower individuals with autism through codingEmpower individuals with autism through coding
Empower individuals with autism through codinglivecode
 
Managing Large Flask Applications On Google App Engine (GAE)
Managing Large Flask Applications On Google App Engine (GAE)Managing Large Flask Applications On Google App Engine (GAE)
Managing Large Flask Applications On Google App Engine (GAE)Emmanuel Olowosulu
 
iOS Application Development Step by Step to develop an iOS App.pdf
iOS Application Development Step by Step to develop an iOS App.pdfiOS Application Development Step by Step to develop an iOS App.pdf
iOS Application Development Step by Step to develop an iOS App.pdfJPLoft Solutions
 
Progressive Web Apps –The Future of Apps
Progressive Web Apps –The Future of Apps   Progressive Web Apps –The Future of Apps
Progressive Web Apps –The Future of Apps Ashish Saxena
 
Google Cloud Platform Update
Google Cloud Platform UpdateGoogle Cloud Platform Update
Google Cloud Platform UpdateIdo Green
 
Developer connect - microservices
Developer connect - microservicesDeveloper connect - microservices
Developer connect - microservicesAnton McConville
 
When to choose and avoid react native for mobile app development
When to choose and avoid react native for mobile app developmentWhen to choose and avoid react native for mobile app development
When to choose and avoid react native for mobile app developmentFullestop
 
COURSE ORIENTATION ON MAD&PWA
COURSE ORIENTATION ON MAD&PWACOURSE ORIENTATION ON MAD&PWA
COURSE ORIENTATION ON MAD&PWAnikshaikh786
 
Build your cross-platform service in a week with App Engine
Build your cross-platform service in a week with App EngineBuild your cross-platform service in a week with App Engine
Build your cross-platform service in a week with App EngineJl_Ugia
 
Top successful companies made using React Native app development.pdf
Top successful companies made using React Native app development.pdfTop successful companies made using React Native app development.pdf
Top successful companies made using React Native app development.pdfMoonTechnolabsPvtLtd
 
Basic Understanding of Progressive Web Apps
Basic Understanding of Progressive Web AppsBasic Understanding of Progressive Web Apps
Basic Understanding of Progressive Web AppsAnjaliTanpure1
 
The Fine Print of iOS Development
The Fine Print of iOS DevelopmentThe Fine Print of iOS Development
The Fine Print of iOS DevelopmentCory Wiles
 
Jose l ugia 6 wunderkinder, momenta
Jose l ugia  6 wunderkinder, momentaJose l ugia  6 wunderkinder, momenta
Jose l ugia 6 wunderkinder, momentaapps4allru
 
9/24/2015 Webinar: Designing Mobile Learning Apps for Education
9/24/2015 Webinar: Designing Mobile Learning Apps for Education9/24/2015 Webinar: Designing Mobile Learning Apps for Education
9/24/2015 Webinar: Designing Mobile Learning Apps for EducationTryMyUI
 
Optimizing Data Caching for iPhone Application Responsiveness
Optimizing Data Caching for iPhone Application ResponsivenessOptimizing Data Caching for iPhone Application Responsiveness
Optimizing Data Caching for iPhone Application ResponsivenessJohn Wilker
 

Similar to 2016 05-07 amro handy labs workshop (20)

Empower individuals with autism through coding
Empower individuals with autism through codingEmpower individuals with autism through coding
Empower individuals with autism through coding
 
Managing Large Flask Applications On Google App Engine (GAE)
Managing Large Flask Applications On Google App Engine (GAE)Managing Large Flask Applications On Google App Engine (GAE)
Managing Large Flask Applications On Google App Engine (GAE)
 
iOS Application Development Step by Step to develop an iOS App.pdf
iOS Application Development Step by Step to develop an iOS App.pdfiOS Application Development Step by Step to develop an iOS App.pdf
iOS Application Development Step by Step to develop an iOS App.pdf
 
Progressive Web Apps –The Future of Apps
Progressive Web Apps –The Future of Apps   Progressive Web Apps –The Future of Apps
Progressive Web Apps –The Future of Apps
 
Google Cloud Platform Update
Google Cloud Platform UpdateGoogle Cloud Platform Update
Google Cloud Platform Update
 
Firebase
FirebaseFirebase
Firebase
 
Developer connect - microservices
Developer connect - microservicesDeveloper connect - microservices
Developer connect - microservices
 
When to choose and avoid react native for mobile app development
When to choose and avoid react native for mobile app developmentWhen to choose and avoid react native for mobile app development
When to choose and avoid react native for mobile app development
 
COURSE ORIENTATION ON MAD&PWA
COURSE ORIENTATION ON MAD&PWACOURSE ORIENTATION ON MAD&PWA
COURSE ORIENTATION ON MAD&PWA
 
Build your cross-platform service in a week with App Engine
Build your cross-platform service in a week with App EngineBuild your cross-platform service in a week with App Engine
Build your cross-platform service in a week with App Engine
 
Kuldeep_IOS
Kuldeep_IOSKuldeep_IOS
Kuldeep_IOS
 
InternShip performed tasks
InternShip performed tasksInternShip performed tasks
InternShip performed tasks
 
Io 2018
Io 2018Io 2018
Io 2018
 
Top successful companies made using React Native app development.pdf
Top successful companies made using React Native app development.pdfTop successful companies made using React Native app development.pdf
Top successful companies made using React Native app development.pdf
 
Basic Understanding of Progressive Web Apps
Basic Understanding of Progressive Web AppsBasic Understanding of Progressive Web Apps
Basic Understanding of Progressive Web Apps
 
The Fine Print of iOS Development
The Fine Print of iOS DevelopmentThe Fine Print of iOS Development
The Fine Print of iOS Development
 
Jose l ugia 6 wunderkinder, momenta
Jose l ugia  6 wunderkinder, momentaJose l ugia  6 wunderkinder, momenta
Jose l ugia 6 wunderkinder, momenta
 
9/24/2015 Webinar: Designing Mobile Learning Apps for Education
9/24/2015 Webinar: Designing Mobile Learning Apps for Education9/24/2015 Webinar: Designing Mobile Learning Apps for Education
9/24/2015 Webinar: Designing Mobile Learning Apps for Education
 
supriyapandey_resume
supriyapandey_resumesupriyapandey_resume
supriyapandey_resume
 
Optimizing Data Caching for iPhone Application Responsiveness
Optimizing Data Caching for iPhone Application ResponsivenessOptimizing Data Caching for iPhone Application Responsiveness
Optimizing Data Caching for iPhone Application Responsiveness
 

More from Lama K Banna

The TikTok Masterclass Deck.pdf
The TikTok Masterclass Deck.pdfThe TikTok Masterclass Deck.pdf
The TikTok Masterclass Deck.pdfLama K Banna
 
دليل كتابة المشاريع.pdf
دليل كتابة المشاريع.pdfدليل كتابة المشاريع.pdf
دليل كتابة المشاريع.pdfLama K Banna
 
Investment proposal
Investment proposalInvestment proposal
Investment proposalLama K Banna
 
Lecture 3 facial cosmetic surgery
Lecture 3 facial cosmetic surgery Lecture 3 facial cosmetic surgery
Lecture 3 facial cosmetic surgery Lama K Banna
 
lecture 1 facial cosmatic surgery
lecture 1 facial cosmatic surgery lecture 1 facial cosmatic surgery
lecture 1 facial cosmatic surgery Lama K Banna
 
Facial neuropathology Maxillofacial Surgery
Facial neuropathology Maxillofacial SurgeryFacial neuropathology Maxillofacial Surgery
Facial neuropathology Maxillofacial SurgeryLama K Banna
 
Lecture 2 Facial cosmatic surgery
Lecture 2 Facial cosmatic surgery Lecture 2 Facial cosmatic surgery
Lecture 2 Facial cosmatic surgery Lama K Banna
 
Lecture 12 general considerations in treatment of tmd
Lecture 12 general considerations in treatment of tmdLecture 12 general considerations in treatment of tmd
Lecture 12 general considerations in treatment of tmdLama K Banna
 
Lecture 10 temporomandibular joint
Lecture 10 temporomandibular jointLecture 10 temporomandibular joint
Lecture 10 temporomandibular jointLama K Banna
 
Lecture 11 temporomandibular joint Part 3
Lecture 11 temporomandibular joint Part 3Lecture 11 temporomandibular joint Part 3
Lecture 11 temporomandibular joint Part 3Lama K Banna
 
Lecture 9 TMJ anatomy examination
Lecture 9 TMJ anatomy examinationLecture 9 TMJ anatomy examination
Lecture 9 TMJ anatomy examinationLama K Banna
 
Lecture 7 correction of dentofacial deformities Part 2
Lecture 7 correction of dentofacial deformities Part 2Lecture 7 correction of dentofacial deformities Part 2
Lecture 7 correction of dentofacial deformities Part 2Lama K Banna
 
Lecture 8 management of patients with orofacial clefts
Lecture 8 management of patients with orofacial cleftsLecture 8 management of patients with orofacial clefts
Lecture 8 management of patients with orofacial cleftsLama K Banna
 
Lecture 5 Diagnosis and management of salivary gland disorders Part 2
Lecture 5 Diagnosis and management of salivary gland disorders Part 2Lecture 5 Diagnosis and management of salivary gland disorders Part 2
Lecture 5 Diagnosis and management of salivary gland disorders Part 2Lama K Banna
 
Lecture 6 correction of dentofacial deformities
Lecture 6 correction of dentofacial deformitiesLecture 6 correction of dentofacial deformities
Lecture 6 correction of dentofacial deformitiesLama K Banna
 
lecture 4 Diagnosis and management of salivary gland disorders
lecture 4 Diagnosis and management of salivary gland disorderslecture 4 Diagnosis and management of salivary gland disorders
lecture 4 Diagnosis and management of salivary gland disordersLama K Banna
 
Lecture 3 maxillofacial trauma part 3
Lecture 3 maxillofacial trauma part 3Lecture 3 maxillofacial trauma part 3
Lecture 3 maxillofacial trauma part 3Lama K Banna
 
Lecture 2 maxillofacial trauma
Lecture 2 maxillofacial traumaLecture 2 maxillofacial trauma
Lecture 2 maxillofacial traumaLama K Banna
 

More from Lama K Banna (20)

The TikTok Masterclass Deck.pdf
The TikTok Masterclass Deck.pdfThe TikTok Masterclass Deck.pdf
The TikTok Masterclass Deck.pdf
 
دليل كتابة المشاريع.pdf
دليل كتابة المشاريع.pdfدليل كتابة المشاريع.pdf
دليل كتابة المشاريع.pdf
 
Investment proposal
Investment proposalInvestment proposal
Investment proposal
 
Funding proposal
Funding proposalFunding proposal
Funding proposal
 
5 incisions
5 incisions5 incisions
5 incisions
 
Lecture 3 facial cosmetic surgery
Lecture 3 facial cosmetic surgery Lecture 3 facial cosmetic surgery
Lecture 3 facial cosmetic surgery
 
lecture 1 facial cosmatic surgery
lecture 1 facial cosmatic surgery lecture 1 facial cosmatic surgery
lecture 1 facial cosmatic surgery
 
Facial neuropathology Maxillofacial Surgery
Facial neuropathology Maxillofacial SurgeryFacial neuropathology Maxillofacial Surgery
Facial neuropathology Maxillofacial Surgery
 
Lecture 2 Facial cosmatic surgery
Lecture 2 Facial cosmatic surgery Lecture 2 Facial cosmatic surgery
Lecture 2 Facial cosmatic surgery
 
Lecture 12 general considerations in treatment of tmd
Lecture 12 general considerations in treatment of tmdLecture 12 general considerations in treatment of tmd
Lecture 12 general considerations in treatment of tmd
 
Lecture 10 temporomandibular joint
Lecture 10 temporomandibular jointLecture 10 temporomandibular joint
Lecture 10 temporomandibular joint
 
Lecture 11 temporomandibular joint Part 3
Lecture 11 temporomandibular joint Part 3Lecture 11 temporomandibular joint Part 3
Lecture 11 temporomandibular joint Part 3
 
Lecture 9 TMJ anatomy examination
Lecture 9 TMJ anatomy examinationLecture 9 TMJ anatomy examination
Lecture 9 TMJ anatomy examination
 
Lecture 7 correction of dentofacial deformities Part 2
Lecture 7 correction of dentofacial deformities Part 2Lecture 7 correction of dentofacial deformities Part 2
Lecture 7 correction of dentofacial deformities Part 2
 
Lecture 8 management of patients with orofacial clefts
Lecture 8 management of patients with orofacial cleftsLecture 8 management of patients with orofacial clefts
Lecture 8 management of patients with orofacial clefts
 
Lecture 5 Diagnosis and management of salivary gland disorders Part 2
Lecture 5 Diagnosis and management of salivary gland disorders Part 2Lecture 5 Diagnosis and management of salivary gland disorders Part 2
Lecture 5 Diagnosis and management of salivary gland disorders Part 2
 
Lecture 6 correction of dentofacial deformities
Lecture 6 correction of dentofacial deformitiesLecture 6 correction of dentofacial deformities
Lecture 6 correction of dentofacial deformities
 
lecture 4 Diagnosis and management of salivary gland disorders
lecture 4 Diagnosis and management of salivary gland disorderslecture 4 Diagnosis and management of salivary gland disorders
lecture 4 Diagnosis and management of salivary gland disorders
 
Lecture 3 maxillofacial trauma part 3
Lecture 3 maxillofacial trauma part 3Lecture 3 maxillofacial trauma part 3
Lecture 3 maxillofacial trauma part 3
 
Lecture 2 maxillofacial trauma
Lecture 2 maxillofacial traumaLecture 2 maxillofacial trauma
Lecture 2 maxillofacial trauma
 

Recently uploaded

#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
Snow Chain-Integrated Tire for a Safe Drive on Winter Roads
Snow Chain-Integrated Tire for a Safe Drive on Winter RoadsSnow Chain-Integrated Tire for a Safe Drive on Winter Roads
Snow Chain-Integrated Tire for a Safe Drive on Winter RoadsHyundai Motor Group
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitecturePixlogix Infotech
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024Scott Keck-Warren
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024Neo4j
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Patryk Bandurski
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
Artificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning eraArtificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning eraDeakin University
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsMemoori
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machinePadma Pradeep
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024The Digital Insurer
 

Recently uploaded (20)

#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
Snow Chain-Integrated Tire for a Safe Drive on Winter Roads
Snow Chain-Integrated Tire for a Safe Drive on Winter RoadsSnow Chain-Integrated Tire for a Safe Drive on Winter Roads
Snow Chain-Integrated Tire for a Safe Drive on Winter Roads
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC Architecture
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food Manufacturing
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024
 
The transition to renewables in India.pdf
The transition to renewables in India.pdfThe transition to renewables in India.pdf
The transition to renewables in India.pdf
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 
Artificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning eraArtificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning era
 
Vulnerability_Management_GRC_by Sohang Sengupta.pptx
Vulnerability_Management_GRC_by Sohang Sengupta.pptxVulnerability_Management_GRC_by Sohang Sengupta.pptx
Vulnerability_Management_GRC_by Sohang Sengupta.pptx
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial Buildings
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machine
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024
 

2016 05-07 amro handy labs workshop

  • 1. Handy Labs Apps and the Technology Behind Them Amro A Younes
  • 2. Agenda  Inspiration behind iOS App development  Pocket Change  uClimate SF  iOnTime  Observations
  • 3. Inspiration and Beginnings  Friend wanted to collaborate with me on his ideas, so we decided to take a course together  I wanted to learn something new  Took the self learning Stanford iOS App Development course in 2013. Followed the curriculum, completed all homework assignments, and extra credit  Pocket Change was my final project.  Used ARC to get a feel for memory management, despite auto memory management already available in iOS.  retain, release, autorelease  Drawbacks, no one to grade my work and show me better ways of doing something.
  • 4. Why HANDY Labs LLC  Patent Trolls  http://www.thisamericanlife.org/radio-archives/episode/441/when-patents-attack?rgp- redirect-tag=rgp-redirect-tag  Liability Protection
  • 5. Pocket Change  Simple expense tracking tool for tracking cash incidentals  Idea is not novel or unique.  No app is as simple as this. Expense tracking apps contain budgets, graphs with no easy interface to quickly enter your expenses.  Initially marketed to folks who want to track cash incidentals only  I personally found it more useful when I travel and marketed it as such  The heart of the solution is CoreData, a.k.a as SQLLite  iOS 6.1
  • 6.
  • 7.
  • 8.
  • 10.  Never hard code your values.  Load from a text file:  NSString *path = [[NSBundle mainBundle] pathForResource:@"categorywords" ofType:@"txt"];  NSDictionary *categories = [NSDictionary dictionaryWithContentsOfFile:path];  Translate Dictionary to CoreDB  CoreDB is not thread safe. Luckily access to it is quick. So always access it from the main thread.  Usually that is UIManagedDocument, or [context performBlock:^{ // do stuff with context }];  Some contexts including Core Data ones have a parentContext. The parentContext will almost always have its own thread, so you can performBlock on it. But it is a different context, so you will have to save and then refetch to see the changes
  • 11. uClimate San Francisco  Many areas in California have vastly different weather conditions. San Francisco in particular  Need a data source: Weather Underground  Weather Apps are almost always free  Extensible to any place with data points  Hub and Spoke Architecture  iOS 6.1  CoreData  iAd Framework  MapKit  UIKit  CoreGraphics
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21. uClimate SF Filtering Out Annotations
  • 24. uClimate San Francisco  Weather stations come and go.  Updating configuration should not involve a new software revision.  Every 24 hours back end server discovers new stations and purges old stations that have not been active for a while.  App requests weather station list from back end and updates its configuration on the fly.  App also processes custom list of stations. Updates are in the backend  Multi-threaded solution to account for slow networks and prevent the UI from locking up.  Save and re-fetch approach in the DB is required due to different threads accessing weather data.
  • 25. iOnTime  I live in a congested area. Your timing is highly dependent on traffic.  I had the idea in 2013 but had to wait for iOS 7 so I could implement my solution  calculateETAWithCompletionHandler: Available in iOS 7.0 and later, or use  Google API  Considered patenting the idea, but …  Did not want to to store any date to address privacy concerns and not have to manage out of sync information
  • 26. iOnTime cont’d  Had to wait for iOS9 so I could add public transportation  Initially based on iOS7 then moved to iOS8  MessageUI  Foundation  UiKit  CoreLocation  MapKit  EventKit  EventKitUI  Apple introduced a similar concept a year after I started selling this App. Theirs is built into the Calendar, it doesn’t work reliably
  • 27.
  • 28.
  • 29.
  • 30. uClimateSF Texting • If the calendar event has an invitee, the App uses the contact’s mobile number to auto fill in the To • A preloaded message of I am on my way is put together if leaving on time. • If it detects you have not left it autofills with: Running late, see you soon.
  • 31.
  • 32.
  • 33.
  • 34. iOnTime Design Considerations  Minimize impact on battery when tracking location  While in the foreground, implemented high accuracy GPS location.  While in the background, woke up once a minute and updated my GPS location  Minimize network usage by only requesting new travel time estimates every n minutes or x distance since last location update  Getting Apple to approve location tracking while running in the background took months of going back and forth.  The following plist configuration was rejected because they did not consider iOnTime a navigation based solution  Without the ability to run in the background, I was unable to use the most accurate location based solution, or wake up to ask for location.
  • 35. iOnTime Design Considerations  Reworked implementation and background manager to receive significant location updates from Apple  The significant-change location service delivers updates only when there has been a significant change in the device’s location, such as 500 meters or more.  Updates to a change in traffic conditions changes are missed while in background without location changes.  Apple time estimates are okay. It would be great to correlate with other sources such as Waze and Google Maps  Remember ARC and auto memory management. Calendar event notification expired as information was sent into the bowels of the App. Had to copy information  Multi-threaded to not lock up the UI while location and time estimates are derived.  Dictionary of Dictionaries is a pain in Objective C. Easier in Java, and a piece of cake in Python.
  • 36.
  • 37. iOnTime Usability Improvements • Ability to filter out calendars • Customize alerting • Arrive a number of minutes before appointment • Receive alerts a number of minutes before you have to be on your way • Did not use CoreData • Dictionary of Dictionaries to reflect Calendar configuration is more challenging than having done that in CoreData
  • 38. Observations  Engineering is the easiest part of the App cycle  Marketing your app and getting it to stand out amongst the noise is hard  There are two forms of App development approaches, which one is you?  You have an idea, its unique, or you can do better, faster, or make it more user friendly  You have a business idea, the mobile app is your platform  User Experience is key  Do not do this alone  Requires dedicated time due to frequency of OS updates, new languages introduced, and new platforms.
  • 39.
  • 40. Observations cont’d  Take your app to the next level. Social interaction amongst users. Requires a backend infrastructure to connect everyone.  Careful with services like Parse. Very easy to use. Does not scale cost wise.  Cheaper to build your own infrastructure but takes longer to develop  Amazon Web Services  Database such as mySQL, Mongo DB, HBASE (Big Data).  Tutorial on Parse  https://www.raywenderlich.com/15916/how-to-synchronize-core-data-with-a-web- service-part-1  Comparison of different services, Parse vs Stackmob vs. Appcelerator  http://www.raywenderlich.com/20482/how-to-choose-the-best-backend-provider-for- your-ios-app-parse-vs-stackmob-vs-appcelerator-cloud-and-more
  • 41.
  • 42. Observations cont’d  Monetization is not easy  Advertisement model only works for apps that are engaging on screen  People do not want to pay for apps. Less so on Android than iOS  User retention gives value that you can demonstrate to investors  In app purchases. Typical gaming model. Does not work for all paradigms unless your idea lends itself to that concept. Celebrity apps do this as well.  If you own data that you can provide an API for, you are in a very good place.  Explored making demo apps that can be upgraded to paid apps. Had minimal conversion success  Tutorial on how to Market and Promote your App  http://www.raywenderlich.com/11359/how-to-market-and-promote-your-games-and-apps- part-1

Editor's Notes

  1. https://itunes.apple.com/us/course/developing-ios-8-apps-swift/id961180099 https://itunes.apple.com/en/course/developing-ios-7-apps-for/id733644550 You immediately own any object you get by sending a message starting with new, alloc, or copy If you get an object from any other source you do not own it, but you can take ownership by sending it the NSObject message retain. Careful with this with automemory management because if you receive a notification for an object you cannot claim retain. You need to make your own copy of the object to pass it around in the stack. This was one of my challenges with iOnTime.
  2. Why so many boards and links. I wanted a positive user experience. I did not want them to press more than three times to get to what they needed. So I flattened the look.
  3. Weather Underground imposes limits on the frequency of updates and the daily number of updates. Initial version was for my app to directly query WU for data. Such an architecture would not scale as I would hit API limits quickly with just one user. Came up with a hub and spoke architecture. My hub is a backend python program that interfaces with WU. Apps would interface with my backend server and get data at limited time intervals. Less than ideal, but that is the only way to keep the cost down until the app generated enough revenue to sustain itself.
  4. Back end server polls WU within its API contract limits Only way to run the app affordably and extend it to the world
  5. Note that I store the thumbnail image to reflect the weather condition in the DB.
  6. Customized my annotations to show temperature or conditions at a glance.
  7. Weather varies in a 15 square kilometer city. When I noticed most downloads were from accounts outside of the U.S. I quickly included Celcius.
  8. You do not need the class THLabel (more on that in the next slide). You can use the class UILabel and customize your text. Refer to this link for a more basic example: http://stackoverflow.com/questions/9822756/replace-icon-pin-by-text-label-in-annotation
  9. Thanks to Tobias Hagemann, he created a class THLabel that helps draw outlines around text to make them more visible. https://github.com/MuscleRumble/THLabel
  10. Delivery was delayed by wanting to establish an LLC, deliver Weather App and Expense App first. Stabilize them before I started this. Finished implementation early 2015. Had lots of challenges in getting app approved by Apple
  11. Technology evolves very quickly. Consider Bump, when iPhone first introduced, their approach to exchanging contact information was novel, however as iOS features improved Bump become obsolete. More on Bump later.
  12. Added texting capability to tell your invitee if you are on your way or are running late.
  13. Two different story boards, one for iPhone and one for iPad. Universal implementation. To get approved by the app store, you simply can’t use the same UI paradigm. They will reject it.
  14. iPad paradigm involves a split view controller. I still wanted the tab bar controller and it took some interesting rework with the initiliization of the ipad version to ensure the proper UI po
  15. Getting the UI to connect to the back end involved a lot of patience. Think of the UI views as a deck of cards laid one on top of the other. Based on that understanding, you can set up your views and initialize the right component. The challenge in this case was the fact that in a split view I wanted to embed a tab bar controller. Good luck with that, there were no tutorials/examples or stack overflow questions based on that need. So I cobbled the code above based on the iPad idiom of split view controllers and how the interfaces are overlaid one on top of the other.
  16. iOS does not let apps run in the background. After 5 minutes or so it shuts them down. So when they move to the background they need to wrap up what they have to do before they get shut down by the OS. I implemented a background manager using timers to keep the application alive and run location services
  17. The significant-change location service provides a way to get the current location and be notified when significant changes occur, but it’s critical to use it correctly to avoid using too much power.
  18. I was doing a big stint of Python development and was using a lot of nested dictionaries. In Objective C and Java it is more involved.
  19. Just because mobile solutions are there is it the right platform for your business idea. Weather Underground model. They got folks to put their weather stations up for free. They grab the data and store it, then sell it to the end user. Excellent monetization and covers their cost for datacenters, storage and data propogation. This approach is more profitable in my opinion than making an app itself. If you have to buy the data, you are already at a disadvantage, so be careful. Despite using ad based model, you are earning pennies, you need to have a huge deployment/download base. There are companies that can help you with marketing your app,. I have not tried that approach. I was not convinced with the ROI based on my ideas. Design a nice UI, be mindful of User Experience, not more than a couple of button presses before you get to your objective. Rule of thumb in Web design, no more than three link presses to get to the page is a good thing to keep in mind when designing your interface. I try to keep it at two. I used the approach of casting a wide net with my apps hoping to see which would be popular before I targeted more development and improvements. Others worked on one idea, it never took off but they continued to work on it regardless. Be careful. Pricing makes a difference. If you feel you are providing a premium services, charging more than .99 has a psychological effect that you truly have a premium product. May work better than simply charging .99
  20. Bump was bought out despite its technology becoming obsolete only because they had a user base which Google wanted. Bump collected customer behavior and habits. For me Bump user experience was disappointing, it took me more time to bump at times than if I had just copied the info by hand. However, they were the first to market. Bump crossed many different platforms: Android, Windows, iOS and they tried with Blackberry as well. When considering creating user based interaction amongst apps you need backend infrastructure. You can try using technology like Parse. They give you the modules in iOS to connect to Parse infrastructure which allows you to connect your app across users and devices. For demo purposes when looking to get investors, Parse might be good enough, but then as you scale, you will need to re-write your app notification interface to something cheaper. My advice, don’t use things like Parse, build your own infrastructure, Amazon Web Services (AWS), mySql and write your own back end using Python or any language of your choice. If you want to use Parse as a starting point to get a feel for user notification, try this tutorial: https://www.raywenderlich.com/15916/how-to-synchronize-core-data-with-a-web-service-part-1 Here is a link to how to compare difference services: http://www.raywenderlich.com/20482/how-to-choose-the-best-backend-provider-for-your-ios-app-parse-vs-stackmob-vs-appcelerator-cloud-and-more Consider how many users you want to scale to. mySQL may not handle a large table, so design carefully. If your schema will always evolve, consider Mongo DB. However, be very careful about Mongo’s performance and disk usage. I am a fan of mySQL for most things.
  21. I did not use the tutorial on marketing and promoting the app, so use at your own risk, but it might be a good starting point for you.