SlideShare ist ein Scribd-Unternehmen logo
1 von 48
Downloaden Sie, um offline zu lesen
Simple.Data
… an ORM without O, R or M
Timothée Bourguignon
1
What is Simple.Data?

An O/RM without O, R or M!

3
Hands-on!
• SQL Server + MvcMusicStore DB

– http://mvcmusicstore.codeplex.com/

4
What is Simple.Data?
• Lightweight way of manipulating data
– Based on .NET 4.0's „dynamic“ keyword
– Interprets method and property names
– Maps them to your underlying data-store
– Prevents SQL Injection
– Inspired by Ruby’s ActiveRecord and DataMappers
– Open Source & runs on Mono
– V1.0 rc3 released in Nov. 2012

5
The Menu
•
•
•
•
•
•
•
•

Generalities
Conventions
CRUD Operations
Objects Returned
Joins & Evaluation Strategies
Various Functions
Tool & Testing
Wrap-Up

• Hands-ons
along the
way

6
Database agnostic

7
Package Architecture
Core

MongoDB

OData

Azure

Ado

SqlServer
SqlCompact40
Oracle
VistaDB
MySQL
SQLite
PostgreSQL
SQLAnywhere
Informix
Mocking

9
Nuget Packages

PM> Install-Package
Simple.Data.SqlServer
Simple.Data.Ado
Simple.Data.SqlCompact40
Simple.Data.Sqlite
Simple.Data.MongoDB
...

10
Conventions

11
Opening a Connection
var magicDb = Database
.OpenConnection("ConnectString");
var fileDb = Database
.OpenConnection("MyDB.sdf");

• Per default connections are aggressively
opened and closed for each query
• Supports shared connections
12
Choose your weapon
• The „Fluid“ Way
– Methods & properties convention-based mapping

• The „Indexer“ Way
– Identification via an indexer syntax

13
The Fluid Way

Co
lu
m
Pa
n
ra
m
et
er
s

an
d
m
Co
m

Ta
bl
e/
Vi
ew

db.album.FindAllByGenreId(3);

14
The Indexer Way
• The problem
//Find by „Candy“ or find by „C and Y“?
db.sweets.FindAllByCAndY("Oreo");

• The solution
//Full indexer way
db["sweets"].FindAllBy(Candy: "Oreo");
//Hybrid fluid + indexer
db.sweets.FindAllBy(Candy: "Oreo");
db["city"].FindAllByCityName("Paris");

15
Target Matching
• Sequence
– Exact match
– Case-insensitive - non-alphanumeric chars
– Pluralized/Singularized version

• The following are thus all identical
– Albums.GenreId
– Album.GenreId
– ALBUMS.GENREID
– ALBUM.GENREID
– [ALBUMS].[GENREID]

– [ALBUM].[GENREID]
– AlBuM.geNReId
– Al__*bum.Genr-eId
– ...
16
No IntelliSence

•
•
•
•

Dynamics => no member / function inferrence
Schema analyse planned for Simple.Data v2
Tool: Simple.Data.Pad
Still easy to get used to
17
CRUD OPERATIONS

18
Create
• Insert(object or named parameters)

19
Read
• Read
– All()
– Find(simple expressions)
– Get(primary key)
– FindAll(optional condition)
– FindAllByXXX(parameter)

20
Update
• Update(object or named parameters)
– Update
– UpdateByXXX
– UpdateAll + optional condition

• Upsert e.g. Update or Insert
• Some kind of optimistic locking
– Update(modifiedObject, originalObject)
– Fails if the column(s) you are modifying changed
• Nota: does not work with Upsert
21
Delete
• Delete
– Delete(object or named parameters)
– DeleteByXXX(parameters)
– DeleteAll(optional conditions)

22
Hands-on!
• CRUD Operations
– Insert
– Update
– Delete
– Read

23
Objects Returned

24
SimpleRecord
• Dynamic object
• Contains a property for each of the columns
requested whose values are those of the
single row retrieved from the data store
• „Cast-able“ to a concrete implementation

25
SimpleQuery
•
•
•
•

Dynamic object
Similar to LINQ structure
Executes when enumerated
Contains a SimpleRecord object for each row
returned

26
Casting
• Casting to objects
– Implicit
– Explicit: Cast<T>, ToList, ToList<T>, ToArray,
ToArray<T>

• Hands-On
– Implicit casting
– Explicit casting
27
Joins
& Evaluation Strategies

28
Hands-on!
• Lazy natural evaluation
• Casting + Lazy?
• Eager evaluation

29
Joins
• Lazy loading
– Natural Joins / Table chaining

• Eager Loading
– „With Joins“
• With/WithXXX
• WithOne
• WithMany

Foreign-Key relationship present
No Foreign-Key relationship necessary
(no referential integrity)

– „Explicit Joins“
• Join
• LeftJoin
• OuterJoin

Natural joins can be used as part of an explicit
join, the join is then eager loaded
30
Hands-on!
• Eager Joins
– Select + Natural Joins + As
– With

31
Various Functions

32
Ordering Results
• OrderBy, OrderByDescending
• ThenBy, ThenByDescending
db.Albums.All().OrderByGenreId()
.ThenByArtistIdDescending();

33
Scalar Queries
•
•
•
•

GetCount
GetCountBy
Exists, Any
ExistsBy, AnyBy

int albumCount = db.Albums.GetCount(
db.Albums.GenreId == 2);

34
Query Modifiers
• Select
– Star & AllColumns
db.Albums.All().Select(db.Albums.Title,
db.Albums.ArtistId);

35
Query Modifiers
• Column Aliasing: As(string)
var albums = db.Albums.All().Select(
db.Albums.AlbumId,
db.Albums.Title.As("AlbumName"));

36
Query Modifiers
• Where clauses
– Operators (+, -, *, /, %)
– IN, BETWEEN, LIKE, IS NULL
var albums = db.Albums.FindAllByGenreId(1)
.Select(db.Albums.Title)
.Where(db.Albums.Price < 8);
db.Albums.All().Where(
db.Albums.Title.Like("%Side Of The%"));

37
Aggregate Functions
• Grouping and Aggregates
– Having → Group By / Having
– Min, Max, Avg, Sum
var cheapAlbums = db.Albums.All()
.Having(db.Albums.Price < 9).ToList();
var totalCost = db.Albums.All().Select(
db.Albums.Price.Sum().As("TotalCost"));

38
Stored Procedures
• Like a function...
CREATE PROCEDURE ProcedureWithParameters
@One VARCHAR(MAX),
@Two VARCHAR(MAX)
AS
SELECT * FROM Customers
WHERE Firstname = @One and Lastname like @Two
db.ProcedureWithParameters(1, 2);

39
Transactions
• Wrap up the calls
using (var transaction = db.BeginTransaction())
{
transaction.albums.Insert(GenreId: 1...);
transaction.Commit();
}

40
Tool & Testing

41
Tool: Simple.Data.Pad
• Similar to LINQ-Pad... kind of...
– https://github.com/markrendle/Simple.Data.Pad

42
Testing: InMemoryAdapter
[Test]
public void Should_do_something()
{
var adapter = new InMemoryAdapter();
Database.UseMockAdapter(adapter);
var db = Database.Open();
db.Test.Insert(Id: 1, Name: "Alice");
//...
}

• The InMemoryAdapter supports
– Joins, Transactions, Stored procedures...
43
InMemoryAdapter Configuration
• Tweaking functions
– SetKeyColumn
– SetAutoIncrementColumn
– AddFunction (stored procedure)
– ConfigureJoin
– ...

44
Design

45
Wrap-Up

46
Wrap-up
• OpenSource, Mono
• Everything is
dynamic
• Fluid-, Indexer Way
• CRUD
– FindXXX, DeleteXXX,
UpdateXXX etc.

• Dynamics Objects
Returned

• Joins, lazy, eager
– Natural, WithXXX,
Join

• Various Functions
– Group, Order, Scalar,
Modifiers etc.

• Tool & Testing
• Design

47
Simple.Data in Short
•
•
•
•
•

Lightweight
Readable
Compelling
Fun to use
Interesing design

• Dynamics extensive
testing
• Good understanding
upfront

• My Recommendation
– Try it and study it
– Take it for a spin for some tooling and/or
prototyping
– ...and some projects?
48
Further Reading
• Github

– https://github.com/markrendle/Simple.Data

• Nuget

– http://nuget.org/packages?q=simple.data

• GoogleGroup

– https://groups.google.com/forum/?fromgroups#!
forum/simpledata

• Mark Rendle

– @MarkRendle
– http://blog.markrendle.net/
49
Ich freue mich auf Eure Fragen!
tim.bourguignon@mathema.de
about.me/timbourguignon

50

Weitere ähnliche Inhalte

Was ist angesagt?

Collections In Java
Collections In JavaCollections In Java
Collections In Java
Binoj T E
 
ぐだ生 Java入門第一回(equals hash code_tostring)
ぐだ生 Java入門第一回(equals hash code_tostring)ぐだ生 Java入門第一回(equals hash code_tostring)
ぐだ生 Java入門第一回(equals hash code_tostring)
Makoto Yamazaki
 
.Net Collection Classes Deep Dive - Rocksolid Tour 2013
.Net Collection Classes Deep Dive  - Rocksolid Tour 2013.Net Collection Classes Deep Dive  - Rocksolid Tour 2013
.Net Collection Classes Deep Dive - Rocksolid Tour 2013
Gary Short
 

Was ist angesagt? (20)

Eurydike: Schemaless Object Relational SQL Mapper
Eurydike: Schemaless Object Relational SQL MapperEurydike: Schemaless Object Relational SQL Mapper
Eurydike: Schemaless Object Relational SQL Mapper
 
Java Collection framework
Java Collection frameworkJava Collection framework
Java Collection framework
 
Spark Schema For Free with David Szakallas
 Spark Schema For Free with David Szakallas Spark Schema For Free with David Szakallas
Spark Schema For Free with David Szakallas
 
BGOUG15: JSON support in MySQL 5.7
BGOUG15: JSON support in MySQL 5.7BGOUG15: JSON support in MySQL 5.7
BGOUG15: JSON support in MySQL 5.7
 
Collections Array list
Collections Array listCollections Array list
Collections Array list
 
Introduction to meta-programming in scala
Introduction to meta-programming in scalaIntroduction to meta-programming in scala
Introduction to meta-programming in scala
 
Java Collections API
Java Collections APIJava Collections API
Java Collections API
 
SPL - The Undiscovered Library - PHPBarcelona 2015
SPL - The Undiscovered Library - PHPBarcelona 2015SPL - The Undiscovered Library - PHPBarcelona 2015
SPL - The Undiscovered Library - PHPBarcelona 2015
 
Collections
CollectionsCollections
Collections
 
An Introduction to Higher Order Functions in Spark SQL with Herman van Hovell
An Introduction to Higher Order Functions in Spark SQL with Herman van HovellAn Introduction to Higher Order Functions in Spark SQL with Herman van Hovell
An Introduction to Higher Order Functions in Spark SQL with Herman van Hovell
 
Ruslan.shevchenko: most functional-day-kiev 2014
Ruslan.shevchenko: most functional-day-kiev 2014Ruslan.shevchenko: most functional-day-kiev 2014
Ruslan.shevchenko: most functional-day-kiev 2014
 
Collections In Java
Collections In JavaCollections In Java
Collections In Java
 
Spark schema for free with David Szakallas
Spark schema for free with David SzakallasSpark schema for free with David Szakallas
Spark schema for free with David Szakallas
 
Java - Collections framework
Java - Collections frameworkJava - Collections framework
Java - Collections framework
 
Metaprogramming in Haskell
Metaprogramming in HaskellMetaprogramming in Haskell
Metaprogramming in Haskell
 
Java 103 intro to java data structures
Java 103   intro to java data structuresJava 103   intro to java data structures
Java 103 intro to java data structures
 
ぐだ生 Java入門第一回(equals hash code_tostring)
ぐだ生 Java入門第一回(equals hash code_tostring)ぐだ生 Java入門第一回(equals hash code_tostring)
ぐだ生 Java入門第一回(equals hash code_tostring)
 
Object Class
Object ClassObject Class
Object Class
 
.Net Collection Classes Deep Dive - Rocksolid Tour 2013
.Net Collection Classes Deep Dive  - Rocksolid Tour 2013.Net Collection Classes Deep Dive  - Rocksolid Tour 2013
.Net Collection Classes Deep Dive - Rocksolid Tour 2013
 
An introduction to scala
An introduction to scalaAn introduction to scala
An introduction to scala
 

Andere mochten auch

Acatistul Sf. Nicolae
Acatistul Sf. NicolaeAcatistul Sf. Nicolae
Acatistul Sf. Nicolae
Alin Cazacu
 
Geeli all(2)
Geeli all(2)Geeli all(2)
Geeli all(2)
Apoorva
 
Lxsykj
LxsykjLxsykj
Lxsykj
880205
 

Andere mochten auch (20)

OO Design
OO DesignOO Design
OO Design
 
C# Dynamics in the Wild
C# Dynamics in the WildC# Dynamics in the Wild
C# Dynamics in the Wild
 
Refactoring the Tennis Kata v2 (2016)
Refactoring the Tennis Kata v2 (2016)Refactoring the Tennis Kata v2 (2016)
Refactoring the Tennis Kata v2 (2016)
 
Angular JS deep dive
Angular JS deep diveAngular JS deep dive
Angular JS deep dive
 
Micro ORM vs Entity Framework
Micro ORM vs Entity FrameworkMicro ORM vs Entity Framework
Micro ORM vs Entity Framework
 
Reactive Web-Applications @ LambdaDays
Reactive Web-Applications @ LambdaDaysReactive Web-Applications @ LambdaDays
Reactive Web-Applications @ LambdaDays
 
Modeling Microservices
Modeling MicroservicesModeling Microservices
Modeling Microservices
 
Java Libraries You Can’t Afford to Miss
Java Libraries You Can’t Afford to Miss Java Libraries You Can’t Afford to Miss
Java Libraries You Can’t Afford to Miss
 
Cristian frasinaru curs practic de java
Cristian frasinaru   curs practic de javaCristian frasinaru   curs practic de java
Cristian frasinaru curs practic de java
 
Acatistul Sf. Nicolae
Acatistul Sf. NicolaeAcatistul Sf. Nicolae
Acatistul Sf. Nicolae
 
History Design_ Surrealism
History Design_ SurrealismHistory Design_ Surrealism
History Design_ Surrealism
 
Geeli all(2)
Geeli all(2)Geeli all(2)
Geeli all(2)
 
Lxsykj
LxsykjLxsykj
Lxsykj
 
List posts: Why people love and hate Lists. Curation Tips for List Makers
List posts: Why people love and hate Lists. Curation Tips for List MakersList posts: Why people love and hate Lists. Curation Tips for List Makers
List posts: Why people love and hate Lists. Curation Tips for List Makers
 
TEXOCT2015
TEXOCT2015TEXOCT2015
TEXOCT2015
 
Uganda Martyrs University
Uganda Martyrs UniversityUganda Martyrs University
Uganda Martyrs University
 
Geografía
GeografíaGeografía
Geografía
 
Finding Singapore Cases and Legislation
Finding Singapore Cases and LegislationFinding Singapore Cases and Legislation
Finding Singapore Cases and Legislation
 
Hướng dẫn cài đặt và crack Vijeo Designer 6
Hướng dẫn cài đặt và crack Vijeo Designer 6Hướng dẫn cài đặt và crack Vijeo Designer 6
Hướng dẫn cài đặt và crack Vijeo Designer 6
 
Cap1 limites e continuidade
Cap1   limites e continuidadeCap1   limites e continuidade
Cap1 limites e continuidade
 

Ähnlich wie Introduction to Simple.Data

How mysql handles ORDER BY, GROUP BY, and DISTINCT
How mysql handles ORDER BY, GROUP BY, and DISTINCTHow mysql handles ORDER BY, GROUP BY, and DISTINCT
How mysql handles ORDER BY, GROUP BY, and DISTINCT
Sergey Petrunya
 

Ähnlich wie Introduction to Simple.Data (20)

Iniciando com jquery
Iniciando com jqueryIniciando com jquery
Iniciando com jquery
 
GreenDao Introduction
GreenDao IntroductionGreenDao Introduction
GreenDao Introduction
 
How mysql handles ORDER BY, GROUP BY, and DISTINCT
How mysql handles ORDER BY, GROUP BY, and DISTINCTHow mysql handles ORDER BY, GROUP BY, and DISTINCT
How mysql handles ORDER BY, GROUP BY, and DISTINCT
 
.NET Fest 2018. Дмитрий Иванов. Иммутабельные структуры данных в .NET: зачем ...
.NET Fest 2018. Дмитрий Иванов. Иммутабельные структуры данных в .NET: зачем ....NET Fest 2018. Дмитрий Иванов. Иммутабельные структуры данных в .NET: зачем ...
.NET Fest 2018. Дмитрий Иванов. Иммутабельные структуры данных в .NET: зачем ...
 
NOSQL101, Or: How I Learned To Stop Worrying And Love The Mongo!
NOSQL101, Or: How I Learned To Stop Worrying And Love The Mongo!NOSQL101, Or: How I Learned To Stop Worrying And Love The Mongo!
NOSQL101, Or: How I Learned To Stop Worrying And Love The Mongo!
 
Basic terminologies & asymptotic notations
Basic terminologies & asymptotic notationsBasic terminologies & asymptotic notations
Basic terminologies & asymptotic notations
 
CBStreams - Java Streams for ColdFusion (CFML)
CBStreams - Java Streams for ColdFusion (CFML)CBStreams - Java Streams for ColdFusion (CFML)
CBStreams - Java Streams for ColdFusion (CFML)
 
ITB2019 CBStreams : Accelerate your Functional Programming with the power of ...
ITB2019 CBStreams : Accelerate your Functional Programming with the power of ...ITB2019 CBStreams : Accelerate your Functional Programming with the power of ...
ITB2019 CBStreams : Accelerate your Functional Programming with the power of ...
 
Alasql JavaScript SQL Database Library: User Manual
Alasql JavaScript SQL Database Library: User ManualAlasql JavaScript SQL Database Library: User Manual
Alasql JavaScript SQL Database Library: User Manual
 
Collections
CollectionsCollections
Collections
 
Collections in Java
Collections in JavaCollections in Java
Collections in Java
 
5_MariaDB_What's New in MariaDB Server 10.2 and Big Data Analytics with Maria...
5_MariaDB_What's New in MariaDB Server 10.2 and Big Data Analytics with Maria...5_MariaDB_What's New in MariaDB Server 10.2 and Big Data Analytics with Maria...
5_MariaDB_What's New in MariaDB Server 10.2 and Big Data Analytics with Maria...
 
Collections
CollectionsCollections
Collections
 
ITB2019 RuleBox : The natural rule engine for CFML - Luis Majano
ITB2019 RuleBox : The natural rule engine for CFML - Luis MajanoITB2019 RuleBox : The natural rule engine for CFML - Luis Majano
ITB2019 RuleBox : The natural rule engine for CFML - Luis Majano
 
RuleBox : A natural language Rule Engine
RuleBox : A natural language Rule EngineRuleBox : A natural language Rule Engine
RuleBox : A natural language Rule Engine
 
Collections Framework Beginners Guide 2
Collections Framework Beginners Guide 2Collections Framework Beginners Guide 2
Collections Framework Beginners Guide 2
 
A Deep Dive into Spark SQL's Catalyst Optimizer with Yin Huai
A Deep Dive into Spark SQL's Catalyst Optimizer with Yin HuaiA Deep Dive into Spark SQL's Catalyst Optimizer with Yin Huai
A Deep Dive into Spark SQL's Catalyst Optimizer with Yin Huai
 
SQLGitHub - Access GitHub API with SQL-like syntaxes
SQLGitHub - Access GitHub API with SQL-like syntaxesSQLGitHub - Access GitHub API with SQL-like syntaxes
SQLGitHub - Access GitHub API with SQL-like syntaxes
 
Immutable js reactmeetup_local_ppt
Immutable js reactmeetup_local_pptImmutable js reactmeetup_local_ppt
Immutable js reactmeetup_local_ppt
 
In memory databases presentation
In memory databases presentationIn memory databases presentation
In memory databases presentation
 

Kürzlich hochgeladen

Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
Joaquim Jorge
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 
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
vu2urc
 

Kürzlich hochgeladen (20)

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
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
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
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your Business
 
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
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
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
 
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
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
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
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
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
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 

Introduction to Simple.Data