SlideShare una empresa de Scribd logo
1 de 48
LinkedIn Mobile

Lessons from Building
Culture
   Product & Design
Development Background
     Our Choices
        Server
        Client
Cult of Simple
• Fast
  – App Launch
  – Screen to Screen Switch
• Easy
  – Tap Count
• Reliable
  – Don’t Crash
  – Repeatable
Product & Design

It impacts engineering
Websites vs. Applications


 Content Focus      Flow & Action Focus

Long Form Layout        Lists/Details



          Responsive Design
Good for websites; Not for applications
Interaction vs. Visual
• Design a house floor plan
• Focus on Rooms and Hallways
• Stay away from Paint, Furniture Carpet
• Has & Does for each screen
• Black & White then Color
Adjust App Platforms

• On Screen vs. Hardware Back

• Up vs. Back / Stacks vs. Pages

• Pull to Refresh vs. Button Refresh

• Settings Room Location

• Visual Design
Development Background

   Approach to Engineering
HTML5 vs Native

• What is the skillset of the team?

• What is your front door?

• Which platforms are you targeting?

• Phone Gap vs Titanium vs XXX
Libs vs. Frameworks



Frameworks call   App call libraries
   your app
    (Few)              (Lots)
Process vs Evented
     Systems
Process Systems

  Single process/thread per request

Block while waiting for I/O to complete

      Use Process/Thread Pools
Evented Systems


Single Process for large number of requests

           Non Blocking for I/O

Use 1 Process per Core on system for scale
Evented For Mobile

Process Systems great for high compute

 Evented Systems great for I/O bound

    With mobile client rendering,
  evented systems best for front end
Our Choices
Server
Mobile Server
•   Scaling Node
•   Node Modules
•   Logging vs Tracking vs Metrics
•   File Structure / Code Size
•   Client / Server Line Format
•   Server / Server Line Format
•   Latency vs Bandwidth
•   Gotchas
Scaling

• Load Balancer talking to each node instance
  running on separate cores
• In Node .8, finally have master/child file
  handle sharing based evented model
• 150 qps per core per instance
• 60 MB of RAM for an instance
Node Modules
•   Step to Async
•   Express/Connect -- Framework
•   Vows to Mocha
•   Request
•   Underscore
Logging/Monitoring/Tracking
• Logging used for sending lots of text information
   – useful for debugging

• Monitoring is for sending counters for realtime
  monitoring: Product and System
   – Typical: Query Rate, Response Code, Time for
     request, Page Views, Actions
   – Cube from Square

• Tracking is for product metric queries
   – Get into a database for queries
   – Needed for doing Uniqing and Pathing queries
File Structure / Code Size


• Follow simple Rails/Django dir
  – Controllers, Helpers, Formatters, Templates

  – No Views, No Models

• Code Size ~ 10K
Client / Server Line Level

•   Single Request per screen
•   JSON is template based
•   Updateable on Server
•   Don’t add:
    – Links
    – Styles
    – Positioning
• Node is part of the client
  NOT the server
Server / Server Line Level Format
• Stream Data
  – Metrics, Logging, Events, etc
  – Kafka, Thrift, Avro, Protocol Buffers etc.
• Request/Response Data
  – HTTP/JSON
  – REST Endpoints for actual data models
  – Not much faster for performance
Latency vs. Bandwidth
• Latency is the issue with mobile not
  bandwidth
• Establish and keep the socket open for ping
• Use a ping and pull model not a true push
• Easier to scale ping/pull model
Node Gotchas
• Exception Handling
• Don’t listen on startup till you are connected
  to down stream services
• Okay to die and respawn
• httpClient.agent = false
• Turn on console in production
• NO BLOCKING!
Client
 Native for Infinite Scroll

Native for Window Manger

HTML5 for everything else
iOS / Android Native
Native Gotchas

Web to Native Messaging

Cache/Image Management

      Tools / Test
Web to Native Messaging
• iFrame with URL for Ping

• Native Pulls from Queue

• Web-Sockets suck

• REST for Native Services
Cache/Image Management

• Store all data in url/result hash

• Render data from Hash

• Render again from server response

• Image src should be set to small image when
  off screen
Tools/Test
•   iWebInspector / Weinre
•   Charles Proxy for req debugging
•   Pain when OS upgrade
•   Selenium with Safari Simulator (Web Parts)
•   Instruments UIAutomation / Robotium (Native)
•   Layout Test: DumpRender + ImageDiff (5%)
•   Vcr.js – Fixture Creater
•   Android Emulator Super Slow to have to do on
    build machine with catchup
Mobile Web
Screen vs Page
• App is multiple Screens in one page
• Page is a browser Page and has an implication
  of JS Load/Parse time
• Screen to Screen move is div show/hide
Backbone.js
• Controls Routing from Screen to Screen
• Controls Screen lifecycle (load, show, hide)
• Controls View Updating based on Model
  Change
• Has Model construct for Validation
• BaseRouter to Backbone
  – Transitions, screen life cycle
• M V C links in Backbone lead to mem leaks
Libraries
• Zepto – Manipulate the DOM
• iScroll – Inertial Scrolling on iOS
   – Does not work on Android
   – Pull to Refresh
• Underscore – Collection helpers and binding
  constructs, templating
Build / Packaging
• Closure
  – Minify, Comment Removal, Template Compilation
• SASS
  – Variables, Functions, Selector Inheritance
• Bundle (set of screens)
  – Local, Template, Controllers/Views
• Build independently and resuable
Startup
• Initial
   –   Index.html
   –   List of bundle files
   –   Store all in Local Storage
   –   Backbone starts home bundle
• Upgrade
   –   Index.html
   –   MD5 has for each file
   –   Compare/Download Diff
   –   Store in Local Storage
Tools / Gotchas
• Chrome Memory Profiler
  – https://developers.google.com/chrome-
    developer-tools/docs/heap-profiling
• Memory Leak Tracking
  – http://gent.ilcore.com/2011/08/finding-memory-
    leaks.html
• Hardware Acceleration for DIV render only on
  screen DIV’s
• Double Render from Cache

Más contenido relacionado

La actualidad más candente

Cross-Platform Mobile Development - Technical Stuff
Cross-Platform Mobile Development - Technical StuffCross-Platform Mobile Development - Technical Stuff
Cross-Platform Mobile Development - Technical StuffAkash Kubavat
 
Web services automation workshop sreedhar dakshinamurthy
Web services automation workshop   sreedhar dakshinamurthyWeb services automation workshop   sreedhar dakshinamurthy
Web services automation workshop sreedhar dakshinamurthyvodQA
 
Web services automation workshop sreedhar dakshinamurthy
Web services automation workshop   sreedhar dakshinamurthyWeb services automation workshop   sreedhar dakshinamurthy
Web services automation workshop sreedhar dakshinamurthyThoughtworks
 
Service-oriented architecture
Service-oriented architectureService-oriented architecture
Service-oriented architectureShalva Usubov
 
Inland Empire .NET User's Group Silverlight Class
Inland Empire .NET User's Group Silverlight ClassInland Empire .NET User's Group Silverlight Class
Inland Empire .NET User's Group Silverlight Classiedotnetug
 
Gwt cdi jud_con_berlin
Gwt cdi jud_con_berlinGwt cdi jud_con_berlin
Gwt cdi jud_con_berlinhbraun
 
Seattle JS Meetup - Grunt EJS Static Presentation
Seattle JS Meetup - Grunt EJS Static PresentationSeattle JS Meetup - Grunt EJS Static Presentation
Seattle JS Meetup - Grunt EJS Static PresentationShae Kuronen
 
Using the Cascade Server Web Service API, by Artur Tomusiak
Using the Cascade Server Web Service API, by Artur TomusiakUsing the Cascade Server Web Service API, by Artur Tomusiak
Using the Cascade Server Web Service API, by Artur Tomusiakhannonhill
 
Micro Services in .NET Core and Docker
Micro Services in .NET Core and DockerMicro Services in .NET Core and Docker
Micro Services in .NET Core and Dockercjmyers
 
Using Web Standards to create Interactive Data Visualizations for the Web
Using Web Standards to create Interactive Data Visualizations for the WebUsing Web Standards to create Interactive Data Visualizations for the Web
Using Web Standards to create Interactive Data Visualizations for the Webphilogb
 
Node and Micro-Services at IBM
Node and Micro-Services at IBMNode and Micro-Services at IBM
Node and Micro-Services at IBMDejan Glozic
 
EFFICIENT AND SECURE MULTI-KEY-WORD SEARCH ON LARGE DATA ( PROJECT PRESENT...
EFFICIENT AND SECURE MULTI-KEY-WORD SEARCH ON LARGE DATA   (  PROJECT PRESENT...EFFICIENT AND SECURE MULTI-KEY-WORD SEARCH ON LARGE DATA   (  PROJECT PRESENT...
EFFICIENT AND SECURE MULTI-KEY-WORD SEARCH ON LARGE DATA ( PROJECT PRESENT...joel9vvs
 
Sinatra and Heroku - A comfortable ruby way for web service
Sinatra and Heroku - A comfortable ruby way for web serviceSinatra and Heroku - A comfortable ruby way for web service
Sinatra and Heroku - A comfortable ruby way for web serviceTony Zhang
 

La actualidad más candente (20)

Why XAF and XPO?
Why XAF and XPO?Why XAF and XPO?
Why XAF and XPO?
 
Cross-Platform Mobile Development - Technical Stuff
Cross-Platform Mobile Development - Technical StuffCross-Platform Mobile Development - Technical Stuff
Cross-Platform Mobile Development - Technical Stuff
 
How to ease the learning curve
How to ease the learning curveHow to ease the learning curve
How to ease the learning curve
 
Web services automation workshop sreedhar dakshinamurthy
Web services automation workshop   sreedhar dakshinamurthyWeb services automation workshop   sreedhar dakshinamurthy
Web services automation workshop sreedhar dakshinamurthy
 
Web services automation workshop sreedhar dakshinamurthy
Web services automation workshop   sreedhar dakshinamurthyWeb services automation workshop   sreedhar dakshinamurthy
Web services automation workshop sreedhar dakshinamurthy
 
MicroServices on Azure
MicroServices on AzureMicroServices on Azure
MicroServices on Azure
 
Service-oriented architecture
Service-oriented architectureService-oriented architecture
Service-oriented architecture
 
Rvrsit
RvrsitRvrsit
Rvrsit
 
Inland Empire .NET User's Group Silverlight Class
Inland Empire .NET User's Group Silverlight ClassInland Empire .NET User's Group Silverlight Class
Inland Empire .NET User's Group Silverlight Class
 
Gwt cdi jud_con_berlin
Gwt cdi jud_con_berlinGwt cdi jud_con_berlin
Gwt cdi jud_con_berlin
 
Seattle JS Meetup - Grunt EJS Static Presentation
Seattle JS Meetup - Grunt EJS Static PresentationSeattle JS Meetup - Grunt EJS Static Presentation
Seattle JS Meetup - Grunt EJS Static Presentation
 
Using the Cascade Server Web Service API, by Artur Tomusiak
Using the Cascade Server Web Service API, by Artur TomusiakUsing the Cascade Server Web Service API, by Artur Tomusiak
Using the Cascade Server Web Service API, by Artur Tomusiak
 
Micro Services in .NET Core and Docker
Micro Services in .NET Core and DockerMicro Services in .NET Core and Docker
Micro Services in .NET Core and Docker
 
Javascript for Wep Apps
Javascript for Wep AppsJavascript for Wep Apps
Javascript for Wep Apps
 
Using Web Standards to create Interactive Data Visualizations for the Web
Using Web Standards to create Interactive Data Visualizations for the WebUsing Web Standards to create Interactive Data Visualizations for the Web
Using Web Standards to create Interactive Data Visualizations for the Web
 
Node and Micro-Services at IBM
Node and Micro-Services at IBMNode and Micro-Services at IBM
Node and Micro-Services at IBM
 
EFFICIENT AND SECURE MULTI-KEY-WORD SEARCH ON LARGE DATA ( PROJECT PRESENT...
EFFICIENT AND SECURE MULTI-KEY-WORD SEARCH ON LARGE DATA   (  PROJECT PRESENT...EFFICIENT AND SECURE MULTI-KEY-WORD SEARCH ON LARGE DATA   (  PROJECT PRESENT...
EFFICIENT AND SECURE MULTI-KEY-WORD SEARCH ON LARGE DATA ( PROJECT PRESENT...
 
Sinatra and Heroku - A comfortable ruby way for web service
Sinatra and Heroku - A comfortable ruby way for web serviceSinatra and Heroku - A comfortable ruby way for web service
Sinatra and Heroku - A comfortable ruby way for web service
 
Microservices in Azure
Microservices in AzureMicroservices in Azure
Microservices in Azure
 
Spring framework v2
Spring framework v2Spring framework v2
Spring framework v2
 

Similar a Mobile gotcha

Building Enterprise Grade Front-End Applications with JavaScript Frameworks
Building Enterprise Grade Front-End Applications with JavaScript FrameworksBuilding Enterprise Grade Front-End Applications with JavaScript Frameworks
Building Enterprise Grade Front-End Applications with JavaScript FrameworksFITC
 
IBM Connect 2017: Your Data In the Major Leagues: A Practical Guide to REST S...
IBM Connect 2017: Your Data In the Major Leagues: A Practical Guide to REST S...IBM Connect 2017: Your Data In the Major Leagues: A Practical Guide to REST S...
IBM Connect 2017: Your Data In the Major Leagues: A Practical Guide to REST S...Serdar Basegmez
 
Single Page Applications: Your Browser is the OS!
Single Page Applications: Your Browser is the OS!Single Page Applications: Your Browser is the OS!
Single Page Applications: Your Browser is the OS!Jeremy Likness
 
Proud to be polyglot
Proud to be polyglotProud to be polyglot
Proud to be polyglotTugdual Grall
 
Development of concurrent services using In-Memory Data Grids
Development of concurrent services using In-Memory Data GridsDevelopment of concurrent services using In-Memory Data Grids
Development of concurrent services using In-Memory Data Gridsjlorenzocima
 
New Approaches to Faster Oracle Forms System Performance
New Approaches to Faster Oracle Forms System PerformanceNew Approaches to Faster Oracle Forms System Performance
New Approaches to Faster Oracle Forms System PerformanceCorrelsense
 
Meetup. Technologies Intro for Non-Tech People
Meetup. Technologies Intro for Non-Tech PeopleMeetup. Technologies Intro for Non-Tech People
Meetup. Technologies Intro for Non-Tech PeopleIT Arena
 
Machine Learning for Smarter Apps - Jacksonville Meetup
Machine Learning for Smarter Apps - Jacksonville MeetupMachine Learning for Smarter Apps - Jacksonville Meetup
Machine Learning for Smarter Apps - Jacksonville MeetupSri Ambati
 
Building Real World Applications using Windows Azure - Scott Guthrie, 2nd Dec...
Building Real World Applications using Windows Azure - Scott Guthrie, 2nd Dec...Building Real World Applications using Windows Azure - Scott Guthrie, 2nd Dec...
Building Real World Applications using Windows Azure - Scott Guthrie, 2nd Dec...Vikas Sahni
 
Building azure applications ireland
Building azure applications irelandBuilding azure applications ireland
Building azure applications irelandMichael Meagher
 
After the LAMP, it's time to get MEAN
After the LAMP, it's time to get MEANAfter the LAMP, it's time to get MEAN
After the LAMP, it's time to get MEANJeff Fox
 
Node.js BFFs: our way to better/micro frontends
Node.js BFFs: our way to better/micro frontendsNode.js BFFs: our way to better/micro frontends
Node.js BFFs: our way to better/micro frontendsEugene Fidelin
 
Scaling Systems: Architectures that grow
Scaling Systems: Architectures that growScaling Systems: Architectures that grow
Scaling Systems: Architectures that growGibraltar Software
 
API Architecture Summit 2014- APIs: A Mobile Developer's Perspective
API Architecture Summit 2014- APIs: A Mobile Developer's PerspectiveAPI Architecture Summit 2014- APIs: A Mobile Developer's Perspective
API Architecture Summit 2014- APIs: A Mobile Developer's PerspectiveNiall Roche
 
Escaping the yellow bubble - rewriting Domino using MongoDb and Angular
Escaping the yellow bubble - rewriting Domino using MongoDb and AngularEscaping the yellow bubble - rewriting Domino using MongoDb and Angular
Escaping the yellow bubble - rewriting Domino using MongoDb and AngularMark Leusink
 
Web frameworks don't matter
Web frameworks don't matterWeb frameworks don't matter
Web frameworks don't matterTomas Doran
 
Pros & Cons of Microservices Architecture
Pros & Cons of Microservices ArchitecturePros & Cons of Microservices Architecture
Pros & Cons of Microservices ArchitectureAshwini Kuntamukkala
 

Similar a Mobile gotcha (20)

Building Enterprise Grade Front-End Applications with JavaScript Frameworks
Building Enterprise Grade Front-End Applications with JavaScript FrameworksBuilding Enterprise Grade Front-End Applications with JavaScript Frameworks
Building Enterprise Grade Front-End Applications with JavaScript Frameworks
 
IBM Connect 2017: Your Data In the Major Leagues: A Practical Guide to REST S...
IBM Connect 2017: Your Data In the Major Leagues: A Practical Guide to REST S...IBM Connect 2017: Your Data In the Major Leagues: A Practical Guide to REST S...
IBM Connect 2017: Your Data In the Major Leagues: A Practical Guide to REST S...
 
Single Page Applications: Your Browser is the OS!
Single Page Applications: Your Browser is the OS!Single Page Applications: Your Browser is the OS!
Single Page Applications: Your Browser is the OS!
 
Proud to be polyglot
Proud to be polyglotProud to be polyglot
Proud to be polyglot
 
Development of concurrent services using In-Memory Data Grids
Development of concurrent services using In-Memory Data GridsDevelopment of concurrent services using In-Memory Data Grids
Development of concurrent services using In-Memory Data Grids
 
New Approaches to Faster Oracle Forms System Performance
New Approaches to Faster Oracle Forms System PerformanceNew Approaches to Faster Oracle Forms System Performance
New Approaches to Faster Oracle Forms System Performance
 
Meetup. Technologies Intro for Non-Tech People
Meetup. Technologies Intro for Non-Tech PeopleMeetup. Technologies Intro for Non-Tech People
Meetup. Technologies Intro for Non-Tech People
 
20120306 dublin js
20120306 dublin js20120306 dublin js
20120306 dublin js
 
Machine Learning for Smarter Apps - Jacksonville Meetup
Machine Learning for Smarter Apps - Jacksonville MeetupMachine Learning for Smarter Apps - Jacksonville Meetup
Machine Learning for Smarter Apps - Jacksonville Meetup
 
Building Real World Applications using Windows Azure - Scott Guthrie, 2nd Dec...
Building Real World Applications using Windows Azure - Scott Guthrie, 2nd Dec...Building Real World Applications using Windows Azure - Scott Guthrie, 2nd Dec...
Building Real World Applications using Windows Azure - Scott Guthrie, 2nd Dec...
 
Building azure applications ireland
Building azure applications irelandBuilding azure applications ireland
Building azure applications ireland
 
After the LAMP, it's time to get MEAN
After the LAMP, it's time to get MEANAfter the LAMP, it's time to get MEAN
After the LAMP, it's time to get MEAN
 
Node.js BFFs: our way to better/micro frontends
Node.js BFFs: our way to better/micro frontendsNode.js BFFs: our way to better/micro frontends
Node.js BFFs: our way to better/micro frontends
 
Scaling Systems: Architectures that grow
Scaling Systems: Architectures that growScaling Systems: Architectures that grow
Scaling Systems: Architectures that grow
 
API Architecture Summit 2014- APIs: A Mobile Developer's Perspective
API Architecture Summit 2014- APIs: A Mobile Developer's PerspectiveAPI Architecture Summit 2014- APIs: A Mobile Developer's Perspective
API Architecture Summit 2014- APIs: A Mobile Developer's Perspective
 
Escaping the yellow bubble - rewriting Domino using MongoDb and Angular
Escaping the yellow bubble - rewriting Domino using MongoDb and AngularEscaping the yellow bubble - rewriting Domino using MongoDb and Angular
Escaping the yellow bubble - rewriting Domino using MongoDb and Angular
 
Web Performance Optimization (WPO)
Web Performance Optimization (WPO)Web Performance Optimization (WPO)
Web Performance Optimization (WPO)
 
Scalability and performance for e commerce
Scalability and performance for e commerceScalability and performance for e commerce
Scalability and performance for e commerce
 
Web frameworks don't matter
Web frameworks don't matterWeb frameworks don't matter
Web frameworks don't matter
 
Pros & Cons of Microservices Architecture
Pros & Cons of Microservices ArchitecturePros & Cons of Microservices Architecture
Pros & Cons of Microservices Architecture
 

Último

The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsPixlogix Infotech
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .Alan Dix
 
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
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsMiki Katsuragi
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piececharlottematthew16
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfRankYa
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostZilliz
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Manik S Magar
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clashcharlottematthew16
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfPrecisely
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsRizwan Syed
 

Último (20)

The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .
 
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
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering Tips
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piece
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdf
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clash
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
 

Mobile gotcha

  • 2. Culture Product & Design Development Background Our Choices Server Client
  • 3. Cult of Simple • Fast – App Launch – Screen to Screen Switch • Easy – Tap Count • Reliable – Don’t Crash – Repeatable
  • 4. Product & Design It impacts engineering
  • 5. Websites vs. Applications Content Focus Flow & Action Focus Long Form Layout Lists/Details Responsive Design Good for websites; Not for applications
  • 6. Interaction vs. Visual • Design a house floor plan • Focus on Rooms and Hallways • Stay away from Paint, Furniture Carpet • Has & Does for each screen • Black & White then Color
  • 7.
  • 8. Adjust App Platforms • On Screen vs. Hardware Back • Up vs. Back / Stacks vs. Pages • Pull to Refresh vs. Button Refresh • Settings Room Location • Visual Design
  • 9.
  • 10. Development Background Approach to Engineering
  • 11. HTML5 vs Native • What is the skillset of the team? • What is your front door? • Which platforms are you targeting? • Phone Gap vs Titanium vs XXX
  • 12. Libs vs. Frameworks Frameworks call App call libraries your app (Few) (Lots)
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 20. Process Systems Single process/thread per request Block while waiting for I/O to complete Use Process/Thread Pools
  • 21. Evented Systems Single Process for large number of requests Non Blocking for I/O Use 1 Process per Core on system for scale
  • 22. Evented For Mobile Process Systems great for high compute Evented Systems great for I/O bound With mobile client rendering, evented systems best for front end
  • 24.
  • 26.
  • 27. Mobile Server • Scaling Node • Node Modules • Logging vs Tracking vs Metrics • File Structure / Code Size • Client / Server Line Format • Server / Server Line Format • Latency vs Bandwidth • Gotchas
  • 28. Scaling • Load Balancer talking to each node instance running on separate cores • In Node .8, finally have master/child file handle sharing based evented model • 150 qps per core per instance • 60 MB of RAM for an instance
  • 29. Node Modules • Step to Async • Express/Connect -- Framework • Vows to Mocha • Request • Underscore
  • 30. Logging/Monitoring/Tracking • Logging used for sending lots of text information – useful for debugging • Monitoring is for sending counters for realtime monitoring: Product and System – Typical: Query Rate, Response Code, Time for request, Page Views, Actions – Cube from Square • Tracking is for product metric queries – Get into a database for queries – Needed for doing Uniqing and Pathing queries
  • 31. File Structure / Code Size • Follow simple Rails/Django dir – Controllers, Helpers, Formatters, Templates – No Views, No Models • Code Size ~ 10K
  • 32. Client / Server Line Level • Single Request per screen • JSON is template based • Updateable on Server • Don’t add: – Links – Styles – Positioning • Node is part of the client NOT the server
  • 33. Server / Server Line Level Format • Stream Data – Metrics, Logging, Events, etc – Kafka, Thrift, Avro, Protocol Buffers etc. • Request/Response Data – HTTP/JSON – REST Endpoints for actual data models – Not much faster for performance
  • 34. Latency vs. Bandwidth • Latency is the issue with mobile not bandwidth • Establish and keep the socket open for ping • Use a ping and pull model not a true push • Easier to scale ping/pull model
  • 35. Node Gotchas • Exception Handling • Don’t listen on startup till you are connected to down stream services • Okay to die and respawn • httpClient.agent = false • Turn on console in production • NO BLOCKING!
  • 36. Client Native for Infinite Scroll Native for Window Manger HTML5 for everything else
  • 37. iOS / Android Native
  • 38. Native Gotchas Web to Native Messaging Cache/Image Management Tools / Test
  • 39. Web to Native Messaging • iFrame with URL for Ping • Native Pulls from Queue • Web-Sockets suck • REST for Native Services
  • 40. Cache/Image Management • Store all data in url/result hash • Render data from Hash • Render again from server response • Image src should be set to small image when off screen
  • 41. Tools/Test • iWebInspector / Weinre • Charles Proxy for req debugging • Pain when OS upgrade • Selenium with Safari Simulator (Web Parts) • Instruments UIAutomation / Robotium (Native) • Layout Test: DumpRender + ImageDiff (5%) • Vcr.js – Fixture Creater • Android Emulator Super Slow to have to do on build machine with catchup
  • 43. Screen vs Page • App is multiple Screens in one page • Page is a browser Page and has an implication of JS Load/Parse time • Screen to Screen move is div show/hide
  • 44. Backbone.js • Controls Routing from Screen to Screen • Controls Screen lifecycle (load, show, hide) • Controls View Updating based on Model Change • Has Model construct for Validation • BaseRouter to Backbone – Transitions, screen life cycle • M V C links in Backbone lead to mem leaks
  • 45. Libraries • Zepto – Manipulate the DOM • iScroll – Inertial Scrolling on iOS – Does not work on Android – Pull to Refresh • Underscore – Collection helpers and binding constructs, templating
  • 46. Build / Packaging • Closure – Minify, Comment Removal, Template Compilation • SASS – Variables, Functions, Selector Inheritance • Bundle (set of screens) – Local, Template, Controllers/Views • Build independently and resuable
  • 47. Startup • Initial – Index.html – List of bundle files – Store all in Local Storage – Backbone starts home bundle • Upgrade – Index.html – MD5 has for each file – Compare/Download Diff – Store in Local Storage
  • 48. Tools / Gotchas • Chrome Memory Profiler – https://developers.google.com/chrome- developer-tools/docs/heap-profiling • Memory Leak Tracking – http://gent.ilcore.com/2011/08/finding-memory- leaks.html • Hardware Acceleration for DIV render only on screen DIV’s • Double Render from Cache