SlideShare une entreprise Scribd logo
1  sur  70
Yes! my real surname is
Maffia!
Thursday, 21 February 13
SQLite
Dynamic Data in Titanium
tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia
Thursday, 21 February 13
Joe Maffia
Web, Mobile and Application Developer,Apple
maniac, DJ - Producer, Sound engineer, music
lover and a general full-time geek!
http://about.me/joemaffia
“amazing what Photoshop can do...”
tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia
Thursday, 21 February 13
{SQLite}
SQLite is an in-process library that implements a self-
contained, serverless, zero-configuration, transactional SQL
database engine...contained in a small (~350 KB) C
programming library.
tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia
Thursday, 21 February 13
Self-Contained
It requires very minimal support from external libraries or
from the operating system.This makes it well suited for use
in embedded devices that lack the support infrastructure of
a desktop computer.
mobile?
tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia
Thursday, 21 February 13
Serverless
Most SQL database engines are implemented as a separate
server process.
With SQLite, the process that wants to access the database
reads and writes directly from the database files on disk.
There is no intermediary server process.
tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia
Thursday, 21 February 13
No Setup
Zero Configuration
• No “setup” procedure.
• No “installation”.
• No “server process” to start,
stop or configure.
• No “administrator”.
• No “configuration files”.
tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia
Thursday, 21 February 13
Transactional
All changes within a single transaction in SQLite either
occur completely or not at all.
Program crash, operating system crash or
a power failure.
tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia
Thursday, 21 February 13
Feature or Bug?
It looks like a duck, it acts like a duck, it walks like a
duck - it must be a duck.
tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia
Thursday, 21 February 13
Duck Typing
tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia
Thursday, 21 February 13
CREATE TABLE cartoon
(
name TEXT,
height INTEGER,
....
)
INSERT INTO cartoon (name, height,...)
VALUES (“donald”,”18cm”,...)
If the string doesn't look like an integer -- it
won't convert it. It will store it as a string.
But it tries to convert it to integer if it can.
tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia
Thursday, 21 February 13
Limits?in this context means sizes or quantities that can not be exceeded.
tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia
Thursday, 21 February 13
Limits?in this context means sizes or quantities that can not be exceeded.
tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia
Thursday, 21 February 13
Limits in SQLite
SQLite was originally designed with a policy of avoiding
arbitrary limits.
The policy was that if it would fit in memory and you could
count it with a 32-bit integer, then it should work.
tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia
Thursday, 21 February 13
Unfortunately :(
Because the upper bounds were not well defined, they
were not tested, and bugs (including possible security
exploits) were often found when pushing SQLite to
extremes.
tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia
Thursday, 21 February 13
“Limits”
• 1 billion Maximum length of a string or BLOB
• 2000 Maximum Number Of Columns
• 64 Maximum Number OfTables In A Join
http://sqlite.org/limits.html
tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia
Thursday, 21 February 13
Ti.Database
tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia
Thursday, 21 February 13
Create vs Install
• Create an empty database and define its
structure and contents via SQL statements
in Ti.
• Install a predefined database (with or
without data) that is shipped with your app.
tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia
Thursday, 21 February 13
Create
tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia
Thursday, 21 February 13
*iCloud
iOS 5.0.1+
the database will be included in any other user data backed
up to iCloud.
db.file.setRemoteBackup(false);
tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia
Thursday, 21 February 13
Install
tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia
Thursday, 21 February 13
Let’s use it!
tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia
Thursday, 21 February 13
Write
tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia
Thursday, 21 February 13
Read
tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia
Thursday, 21 February 13
Tips & Tricks
• Close db connection.
• Transaction.
• Too large pre-populated db.
• Version Number
tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia
Thursday, 21 February 13
db.close();
In a mobile app, you're dealing with a single-user, memory
constrained environment...
It’s vital that you close the database connection when you
have completed any INSERT or UPDATE operations.
tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia
Thursday, 21 February 13
SQLite faq #19
Use transactions to speed up inserts!
By default, each INSERT statement is its own transaction.
But if you surround multiple INSERT statements with
BEGIN...COMMIT then all the inserts are grouped into a
single transaction.
You create a single, mass operation against the database
rather than x little operations.
tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia
Thursday, 21 February 13
Big db = Big app
Ship a "skeleton" database file instead with the minimum
amount of data required for the application to run.
Then, on first boot, ask the user's authorization to
download a replacement/update from a remote source.
tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia
Thursday, 21 February 13
version 1.007αβγ
• Is the user really running the old version or
did a previous update fail?
• Are they downloading a new app version or
upgrading an existing version?
• At the end of the day... is the data correct/
updated/wrong?
Include a "version" table in your database!
tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia
Thursday, 21 February 13
tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia
Thursday, 21 February 13
Tips n Places
tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia
Thursday, 21 February 13
Problem
{API
call}
tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia
Thursday, 21 February 13
Problem
Usage of the API is subject to rate limits.
The default limit is 500 requests per hour
Twitter is taking the default limit from 350 and cutting it to 175
Unauthenticated calls are permitted 150 requests per hour.
Google warns that rate limits, overage fees are coming to Maps API
will be capped at 25,000 map loads per day
{API
call}
tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia
Thursday, 21 February 13
Solution?
tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia
Thursday, 21 February 13
Solution?
• I don’t care!?! :(
tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia
Thursday, 21 February 13
Solution?
• I don’t care!?! :(
• Once reached the limit, the user will pay
the consequences... :/
tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia
Thursday, 21 February 13
Solution?
• I don’t care!?! :(
• Once reached the limit, the user will pay
the consequences... :/
• Limit the API calls :| (timeframe or similar)
tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia
Thursday, 21 February 13
Solution?
• I don’t care!?! :(
• Once reached the limit, the user will pay
the consequences... :/
• Limit the API calls :| (timeframe or similar)
• Saving results into files... but how many?
how to manage them?
tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia
Thursday, 21 February 13
Solution?
tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia
Thursday, 21 February 13
tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia
Thursday, 21 February 13
Let me guess...
...
......
...ah yes....
SQLite
tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia
Thursday, 21 February 13
{code}
tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia
Thursday, 21 February 13
Thursday, 21 February 13
tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia
Thursday, 21 February 13
{initCache}
tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia
Thursday, 21 February 13
{expireCache}
tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia
Thursday, 21 February 13
{get}
tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia
Thursday, 21 February 13
{put}
tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia
Thursday, 21 February 13
{del}
tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia
Thursday, 21 February 13
{public}
tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia
Thursday, 21 February 13
Demo
Thursday, 21 February 13
Where do you want to go today?
{next}
tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia
Thursday, 21 February 13
...not here :)
tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia
Thursday, 21 February 13
So, how do I query the
database?
It’s not a database. It’s
a key-value store!
Meet Bob
tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia
Thursday, 21 February 13
Ok, It’s not a database.
How do I query it?
You write a distributed
map reduce function in
Erlang!
tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia
Thursday, 21 February 13
Did you just tell me to
fuck myself?
tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia
Thursday, 21 February 13
I believe I did, Bob!
tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia
Thursday, 21 February 13
NoSQL on Titanium
Wikipedia
In computing, NoSQL (sometimes expanded to "not only SQL") is a broad class of database management
systems that differ from the classic model of the relational database management system (RDBMS) in some
significant ways.These data stores may not require fixed table schemas, usually avoid join operations, and
typically scale horizontally.
tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia
Thursday, 21 February 13
SQLite is great...but:
db.execute('INSERT INTO favorites (api_id,
tip_avatar, tip_user, tip_text, venue_icon,
venue_name, venue_meters, venue_address,
venue_category, venue_lat, venue_lng)
SELECT ?,?,?,?,?,?,?,?,?,?,? WHERE NOT EXISTS
(SELECT 1 FROM favorites WHERE api_id=?)',
Ti.App.pin.api_id, Ti.App.pin.tip_avatar,
Ti.App.pin.tip_user, Ti.App.pin.tip_text,
Ti.App.pin.venue_icon, Ti.App.pin.venue_name,
Ti.App.pin.venue_meters, Ti.App.pin.venue_address,
Ti.App.pin.venue_category, Ti.App.pin.venue_lat,
Ti.App.pin.venue_lng, Ti.App.pin.api_id);
	
tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia
Thursday, 21 February 13
JSONDB
Thursday, 21 February 13
• It was slow and difficult to constantly modify, re-index and deploy a new schema every
time we changed the application or added a new feature
• Migrating data between versions of the app became very difficult
• Our data wasn’t secure – users with jail broken phones could basically change whatever
they wanted whenever they wanted (and they did)
• Translating between tabular data and objects in JavaScript turned out to be fairly inefficient
even with our own custom ORM libraries
• Maintaining large embedded SQL queries turned out to be a maintenance nightmare in
JavaScript
http://www.irlgaming.com/blog/nosql-ios-titanium-appcelerator-worries/
:(
tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia
Thursday, 21 February 13
• Secure – all data committed to and read from disk is signed so that it can’t be tampered
with by users
• File Based – we didn’t want to run a server on the handset, so all data committed to
storage is encoded as JSON and stored in flat files.This also means that all your data is
portable
• Simple – we wanted to get rid of ugly SQL queries and make everything object based
• Easy – no schema, no indexes, no complicated SQL. Just objects.That’s how JavaScript
should be.
:)
http://www.irlgaming.com/blog/nosql-ios-titanium-appcelerator-worries/
tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia
Thursday, 21 February 13
tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia
Thursday, 21 February 13
http://www.irlgaming.com/blog/nosql-ios-titanium-
appcelerator-worries/
https://github.com/dan-eyles/jsondb-public
ReadMORE:
tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia
Thursday, 21 February 13
SculeJS
(from Minuscule - pronounced skyul)
Thursday, 21 February 13
My vision with SculeJS wasn't just to replace JSONDB, but to provide
powerful, generic data structures and algorithm implementations that
developers could leverage in their day to day development.
Daniel Eyles
tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia
Thursday, 21 February 13
SculeJS
is actually a pretty advanced piece of technology
• Implements B+Tree and Hash index types.
• Compiles query expressions down to byte
code that is then executed in a hybrid
(stack + register) virtual machine.
• The system also performs automatic query
expression normalization and index
selection to optimize the efficiency of
queries.
tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia
Thursday, 21 February 13
SculeJS
SculeJS can run in your web browser, in a NodeJS process,
or even inside iOS and Android applications including a
JavaScript runtime environment.
https://github.com/dan-eyles/sculejs
tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia
Thursday, 21 February 13
tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia
Thursday, 21 February 13
APPLAUSE / Q&A
tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia
Thursday, 21 February 13

Contenu connexe

Dernier

ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProduct Anonymous
 
Tech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdfTech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdfhans926745
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024The Digital Insurer
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobeapidays
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoffsammart93
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...Neo4j
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slidevu2urc
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
Developing An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilDeveloping An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilV3cube
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?Antenna Manufacturer Coco
 

Dernier (20)

ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Tech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdfTech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdf
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
Developing An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilDeveloping An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of Brazil
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
 

En vedette

PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024Neil Kimberley
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)contently
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024Albert Qian
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsKurio // The Social Media Age(ncy)
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Search Engine Journal
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summarySpeakerHub
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next Tessa Mero
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentLily Ray
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best PracticesVit Horky
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project managementMindGenius
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...RachelPearson36
 
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Applitools
 
12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at WorkGetSmarter
 
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...DevGAMM Conference
 

En vedette (20)

Skeleton Culture Code
Skeleton Culture CodeSkeleton Culture Code
Skeleton Culture Code
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search Intent
 
How to have difficult conversations
How to have difficult conversations How to have difficult conversations
How to have difficult conversations
 
Introduction to Data Science
Introduction to Data ScienceIntroduction to Data Science
Introduction to Data Science
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best Practices
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project management
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
 
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
 
12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work
 
ChatGPT webinar slides
ChatGPT webinar slidesChatGPT webinar slides
ChatGPT webinar slides
 
More than Just Lines on a Map: Best Practices for U.S Bike Routes
More than Just Lines on a Map: Best Practices for U.S Bike RoutesMore than Just Lines on a Map: Best Practices for U.S Bike Routes
More than Just Lines on a Map: Best Practices for U.S Bike Routes
 
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
 

SQLite Dynamic Data in Titanium

  • 1. Yes! my real surname is Maffia! Thursday, 21 February 13
  • 2. SQLite Dynamic Data in Titanium tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia Thursday, 21 February 13
  • 3. Joe Maffia Web, Mobile and Application Developer,Apple maniac, DJ - Producer, Sound engineer, music lover and a general full-time geek! http://about.me/joemaffia “amazing what Photoshop can do...” tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia Thursday, 21 February 13
  • 4. {SQLite} SQLite is an in-process library that implements a self- contained, serverless, zero-configuration, transactional SQL database engine...contained in a small (~350 KB) C programming library. tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia Thursday, 21 February 13
  • 5. Self-Contained It requires very minimal support from external libraries or from the operating system.This makes it well suited for use in embedded devices that lack the support infrastructure of a desktop computer. mobile? tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia Thursday, 21 February 13
  • 6. Serverless Most SQL database engines are implemented as a separate server process. With SQLite, the process that wants to access the database reads and writes directly from the database files on disk. There is no intermediary server process. tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia Thursday, 21 February 13
  • 7. No Setup Zero Configuration • No “setup” procedure. • No “installation”. • No “server process” to start, stop or configure. • No “administrator”. • No “configuration files”. tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia Thursday, 21 February 13
  • 8. Transactional All changes within a single transaction in SQLite either occur completely or not at all. Program crash, operating system crash or a power failure. tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia Thursday, 21 February 13
  • 9. Feature or Bug? It looks like a duck, it acts like a duck, it walks like a duck - it must be a duck. tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia Thursday, 21 February 13
  • 10. Duck Typing tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia Thursday, 21 February 13
  • 11. CREATE TABLE cartoon ( name TEXT, height INTEGER, .... ) INSERT INTO cartoon (name, height,...) VALUES (“donald”,”18cm”,...) If the string doesn't look like an integer -- it won't convert it. It will store it as a string. But it tries to convert it to integer if it can. tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia Thursday, 21 February 13
  • 12. Limits?in this context means sizes or quantities that can not be exceeded. tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia Thursday, 21 February 13
  • 13. Limits?in this context means sizes or quantities that can not be exceeded. tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia Thursday, 21 February 13
  • 14. Limits in SQLite SQLite was originally designed with a policy of avoiding arbitrary limits. The policy was that if it would fit in memory and you could count it with a 32-bit integer, then it should work. tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia Thursday, 21 February 13
  • 15. Unfortunately :( Because the upper bounds were not well defined, they were not tested, and bugs (including possible security exploits) were often found when pushing SQLite to extremes. tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia Thursday, 21 February 13
  • 16. “Limits” • 1 billion Maximum length of a string or BLOB • 2000 Maximum Number Of Columns • 64 Maximum Number OfTables In A Join http://sqlite.org/limits.html tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia Thursday, 21 February 13
  • 17. Ti.Database tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia Thursday, 21 February 13
  • 18. Create vs Install • Create an empty database and define its structure and contents via SQL statements in Ti. • Install a predefined database (with or without data) that is shipped with your app. tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia Thursday, 21 February 13
  • 19. Create tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia Thursday, 21 February 13
  • 20. *iCloud iOS 5.0.1+ the database will be included in any other user data backed up to iCloud. db.file.setRemoteBackup(false); tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia Thursday, 21 February 13
  • 21. Install tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia Thursday, 21 February 13
  • 22. Let’s use it! tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia Thursday, 21 February 13
  • 23. Write tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia Thursday, 21 February 13
  • 24. Read tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia Thursday, 21 February 13
  • 25. Tips & Tricks • Close db connection. • Transaction. • Too large pre-populated db. • Version Number tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia Thursday, 21 February 13
  • 26. db.close(); In a mobile app, you're dealing with a single-user, memory constrained environment... It’s vital that you close the database connection when you have completed any INSERT or UPDATE operations. tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia Thursday, 21 February 13
  • 27. SQLite faq #19 Use transactions to speed up inserts! By default, each INSERT statement is its own transaction. But if you surround multiple INSERT statements with BEGIN...COMMIT then all the inserts are grouped into a single transaction. You create a single, mass operation against the database rather than x little operations. tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia Thursday, 21 February 13
  • 28. Big db = Big app Ship a "skeleton" database file instead with the minimum amount of data required for the application to run. Then, on first boot, ask the user's authorization to download a replacement/update from a remote source. tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia Thursday, 21 February 13
  • 29. version 1.007αβγ • Is the user really running the old version or did a previous update fail? • Are they downloading a new app version or upgrading an existing version? • At the end of the day... is the data correct/ updated/wrong? Include a "version" table in your database! tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia Thursday, 21 February 13
  • 30. tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia Thursday, 21 February 13
  • 31. Tips n Places tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia Thursday, 21 February 13
  • 32. Problem {API call} tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia Thursday, 21 February 13
  • 33. Problem Usage of the API is subject to rate limits. The default limit is 500 requests per hour Twitter is taking the default limit from 350 and cutting it to 175 Unauthenticated calls are permitted 150 requests per hour. Google warns that rate limits, overage fees are coming to Maps API will be capped at 25,000 map loads per day {API call} tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia Thursday, 21 February 13
  • 34. Solution? tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia Thursday, 21 February 13
  • 35. Solution? • I don’t care!?! :( tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia Thursday, 21 February 13
  • 36. Solution? • I don’t care!?! :( • Once reached the limit, the user will pay the consequences... :/ tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia Thursday, 21 February 13
  • 37. Solution? • I don’t care!?! :( • Once reached the limit, the user will pay the consequences... :/ • Limit the API calls :| (timeframe or similar) tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia Thursday, 21 February 13
  • 38. Solution? • I don’t care!?! :( • Once reached the limit, the user will pay the consequences... :/ • Limit the API calls :| (timeframe or similar) • Saving results into files... but how many? how to manage them? tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia Thursday, 21 February 13
  • 39. Solution? tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia Thursday, 21 February 13
  • 40. tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia Thursday, 21 February 13
  • 41. Let me guess... ... ...... ...ah yes.... SQLite tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia Thursday, 21 February 13
  • 42. {code} tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia Thursday, 21 February 13
  • 44. tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia Thursday, 21 February 13
  • 45. {initCache} tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia Thursday, 21 February 13
  • 46. {expireCache} tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia Thursday, 21 February 13
  • 47. {get} tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia Thursday, 21 February 13
  • 48. {put} tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia Thursday, 21 February 13
  • 49. {del} tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia Thursday, 21 February 13
  • 50. {public} tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia Thursday, 21 February 13
  • 52. Where do you want to go today? {next} tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia Thursday, 21 February 13
  • 53. ...not here :) tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia Thursday, 21 February 13
  • 54. So, how do I query the database? It’s not a database. It’s a key-value store! Meet Bob tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia Thursday, 21 February 13
  • 55. Ok, It’s not a database. How do I query it? You write a distributed map reduce function in Erlang! tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia Thursday, 21 February 13
  • 56. Did you just tell me to fuck myself? tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia Thursday, 21 February 13
  • 57. I believe I did, Bob! tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia Thursday, 21 February 13
  • 58. NoSQL on Titanium Wikipedia In computing, NoSQL (sometimes expanded to "not only SQL") is a broad class of database management systems that differ from the classic model of the relational database management system (RDBMS) in some significant ways.These data stores may not require fixed table schemas, usually avoid join operations, and typically scale horizontally. tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia Thursday, 21 February 13
  • 59. SQLite is great...but: db.execute('INSERT INTO favorites (api_id, tip_avatar, tip_user, tip_text, venue_icon, venue_name, venue_meters, venue_address, venue_category, venue_lat, venue_lng) SELECT ?,?,?,?,?,?,?,?,?,?,? WHERE NOT EXISTS (SELECT 1 FROM favorites WHERE api_id=?)', Ti.App.pin.api_id, Ti.App.pin.tip_avatar, Ti.App.pin.tip_user, Ti.App.pin.tip_text, Ti.App.pin.venue_icon, Ti.App.pin.venue_name, Ti.App.pin.venue_meters, Ti.App.pin.venue_address, Ti.App.pin.venue_category, Ti.App.pin.venue_lat, Ti.App.pin.venue_lng, Ti.App.pin.api_id); tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia Thursday, 21 February 13
  • 61. • It was slow and difficult to constantly modify, re-index and deploy a new schema every time we changed the application or added a new feature • Migrating data between versions of the app became very difficult • Our data wasn’t secure – users with jail broken phones could basically change whatever they wanted whenever they wanted (and they did) • Translating between tabular data and objects in JavaScript turned out to be fairly inefficient even with our own custom ORM libraries • Maintaining large embedded SQL queries turned out to be a maintenance nightmare in JavaScript http://www.irlgaming.com/blog/nosql-ios-titanium-appcelerator-worries/ :( tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia Thursday, 21 February 13
  • 62. • Secure – all data committed to and read from disk is signed so that it can’t be tampered with by users • File Based – we didn’t want to run a server on the handset, so all data committed to storage is encoded as JSON and stored in flat files.This also means that all your data is portable • Simple – we wanted to get rid of ugly SQL queries and make everything object based • Easy – no schema, no indexes, no complicated SQL. Just objects.That’s how JavaScript should be. :) http://www.irlgaming.com/blog/nosql-ios-titanium-appcelerator-worries/ tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia Thursday, 21 February 13
  • 63. tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia Thursday, 21 February 13
  • 65. SculeJS (from Minuscule - pronounced skyul) Thursday, 21 February 13
  • 66. My vision with SculeJS wasn't just to replace JSONDB, but to provide powerful, generic data structures and algorithm implementations that developers could leverage in their day to day development. Daniel Eyles tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia Thursday, 21 February 13
  • 67. SculeJS is actually a pretty advanced piece of technology • Implements B+Tree and Hash index types. • Compiles query expressions down to byte code that is then executed in a hybrid (stack + register) virtual machine. • The system also performs automatic query expression normalization and index selection to optimize the efficiency of queries. tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia Thursday, 21 February 13
  • 68. SculeJS SculeJS can run in your web browser, in a NodeJS process, or even inside iOS and Android applications including a JavaScript runtime environment. https://github.com/dan-eyles/sculejs tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia Thursday, 21 February 13
  • 69. tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia Thursday, 21 February 13
  • 70. APPLAUSE / Q&A tiConf -VALENCIA, FEB 23-24th, 2013#tiConf @joemaffia Thursday, 21 February 13

Notes de l'éditeur

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n
  30. \n
  31. \n
  32. \n
  33. \n
  34. \n
  35. \n
  36. \n
  37. \n
  38. \n
  39. \n
  40. \n
  41. \n