SlideShare uma empresa Scribd logo
1 de 44
1 of 44
#1563
Printing Without Printers:
A Database-Centric Approach
to
Document Exchange and Reporting
Michael Rosenblum & Dr. Paul Dorsey
Dulcian, Inc.
www.dulcian.com
2 of 44
Who Am I? – “Misha”
Oracle ACE
Co-author of 3 books
 PL/SQL for Dummies
 Expert PL/SQL Practices
 Oracle PL/SQL Performance Tuning Tips &
Techniques (Rosenblum & Dorsey, Oracle Press,
July 2014)
Known for:
 SQL and PL/SQL tuning
 Complex functionality
 Code generators
 Repository-based development
3 of 44
Who Am I? – “Dr.Paul”
 Been Around FOREVER
 Spoke at almost every big Oracle conference since ’93
 First inductee to SELECT Hall of Fame
 Wrote lots of books
 Designer, Developer, JDeveloper, PL/SQL
 Won lots of awards
 One of initial 6 ACE Directors
 First one fired
 Built lots of big systems
 Air Force Recruiting
 Ethiopian Ministry of Finance and Economic Development Budget
System
 Known for:
 Thick Database approach
 Business Rules
4 of 44
Documents???
Why bother?
 Standards
 For example - government, medical
 High importance
 Legally binding
 Physical limitations
 Sorry, no scrollable parchments anymore 
5 of 44
Documents…
What are they?
 Formal representation of available data
 Non-interactive
 Self-contained
What about them?
 Data representation on the screen is NOT the same
as on paper
 … always present is the notion of “translation” 
something will be “lost in translation”
6 of 44
Documents!!!
Documents
Pre-defined
format
Data
7 of 44
Documents ?!?!
Being done
forever!!!
Topic,
please!!! Boring!
Ancient
history…
So what?
8 of 44
Well…
“…as we know, there are known knowns; there are
things we know we know. We also know there are
known unknowns; that is to say we know there are
some things we do not know. But there are also
unknown unknowns – the ones we don't know we
don't know.”
© D. Rumsfeld
9 of 44
Known Knowns
Data
 Every database can store text.
 ... And some of them are even explicitly made to be
document-based
 All scalar datatypes can be converted to text.
 … to be fair, with some potential data loss
Formats
 DOC, DOCX, PDF, XLSX… (you name it!)
10 of 44
Known Unknowns
Where to merge data and formatting
 Schools of thought:
 Front-end
 Middle-tier
 Back-end
 Different implementations:
 Open-source vs. commercial solutions
Costs
How to merge
 Acceptable data loss when formatting
 Performance considerations
11 of 44
Unknown Unknowns
How can you predict and support future
requirements?
 … because changes can just “happen”
Where do you draw the line between regular
reporting and ad-hoc querying?
 …because both of these areas quickly blur in actual
production environments.
12 of 44
So?
You need to solve known unknowns.
 Choosing the wrong environment can be very
costly!
You need to build systems that are:
 Flexible enough
 Customizable enough
13 of 44
Technology Decisions
14 of 44
Client-Side (1)
Pros:
 Shifts workload to the client
 Minimizes network traffic
Cons:
 Deployment nightmare!
 Unpredictable performance
Current state:
 Rarely used (only in tightly controlled environments)
15 of 44
Client-Side (2)
 Real world example:
 What: Client-based document viewer (now called IBM
Lotus Forms)
 Client software requires installation on every working laptop.
 All forms must be local (and current!) on every laptop.
 How:
 Viewer accepts master form plus XML-formatted data.
 Viewer allows edits which are shipped back to server as XML.
 When: Early 2000 / 2014
 Lessons learned:
 Real deployment nightmare, but offloading merging to
clients  less server resources needed
16 of 44
Middle Tier (1)
Pro:
 Convenient - if accessing multiple data sources
Cons:
 Frequently inefficient mechanisms for accessing
data sources
 Multiple roundtrips to database
 High memory utilization
 Often overkill (adds complexity)
Current state:
 The most commonly used solution
17 of 44
Middle Tier (2)
 Real world example:
 What: Same client-based document viewer, but together
with Lotus Forms Server
 Client software requires installation on every working laptop.
 Server does the merging and returns the document.
 How:
 Viewer just shows final document (real-only).
 Editing is done using a web-based application.
 When: 2014 / 2017 (being gradually retired)
 Lessons learned:
 Large documents (20+ pages, 600+ fields) are expensive
to merge (both memory- and CPU-wise)  resource
tuning is very important.
18 of 44
Server-Side (1)
Pros:
 Formatting is brought to data - not vice versa
 No extra round-trips
 Complete access to available data
Cons:
 Counter-intuitive
 Increased server workload
Current state:
 Deployed and working in production 
19 of 44
Server-side (2)
 Real world example:
 What: Database generates PDFs directly.
 Many browsers already understand PDFs directly (no need for
Adobe products)
 How:
 Database stores fillable PDF forms, merges data (Java-based
merger) and ships the final document out.
 Viewer just shows final document (real-only).
 Editing is done using a web-based application.
 When: 2015+ (replacing previous implementation)
 Lessons learned:
 Database workload increase appears to be less than
expected.
 Fillable PDFs use JavaScript internally even for basic
calculations (security no-go!)  more work that expected
20 of 44
Why use the database?
Fewer roundtrips mean less workload
 … no resource waste to manage connections,
environments, etc.
Less software to configure
 … because each piece of software has its own
setting issues (+corresponding learning curve)
Single integration mechanism (PL/SQL)
 … plus various PL/SQL access mechanisms
21 of 44
Architectural Challenges
22 of 44
Getting Agile
Goal:
 Use flexible reporting
 Parameters should be customizable enough  end users
feel their power
 Documents should be well-formatted  end users get
what they need
 Avoid “ad-hoc” trap
 Adequate performance
 Predictable (and manageable number of query
permutations)
23 of 44
Repository-Based
Development
Solution:
 Developers/Architects register available data sources
plus all extras:
 Columns/aggregates
 Filters (run-time and design-time)
 Output formats
 End users can define customized reports (or use pre-
existing ones):
 Inputs are stored.
 Execution is timed.
 Errors are stored.
 Results are stored (if needed).
24 of 44
Data model (Main)
25 of 44
Data model (Access)
26 of 44
Maintenance UI Example
27 of 44
Running UI Example
28 of 44
Important Lessons
Avoid over-generalizations:
 … because your own developers should be able to
understand the repository.
Don’t be afraid of project-specific data elements
 … because it makes your code much more
maintainable.
Never ever reuse attributes from a generic
model for alternative purposes
 … because at some point you may have to migrate
to a different solution.
29 of 44
Existing Solutions
and Case Studies
30 of 44
Tools Overview
JSON generation
 PL/SQL-based [PL/JSON]
 Free
PDF generation
 PL/SQL-based [PL/PDF]
 Commercial
 Java-based [ITEXT]
 “Sort of” free (AGPL)
XSLX/XML generation
 PL/SQL-based
 Our own (meaning free )
31 of 44
PL/JSON (1)
 Used for:
 Very granular manipulation of JSON data
 100% PL/SQL-based
 Various extra APIs for printing/converting to XML/table
access etc.
 Info:
 Developed by Jonas Krogsboell and Lewis Cunningham
 Github: https://github.com/pljson/pljson
 Current version: 1.0.5
 Works even in Oracle 12c, but some people
prefer customization of names to avoid clashing with
Oracle’s own JSON datatype
32 of 44
PL/JSON (2)
Code sample
declare
obj pljson.json:=pljson.json();
begin
obj.put('A', 'a little string');
obj.put('B', 123456789);
obj.put('C', true);
obj.put('D', false);
obj.put('F', json_value.makenull);
obj.remove('C');
obj.put('Nested JSON',
pljson.json('{"lazy construct": true}'));
obj.put('An array', pljson.json_list('[1,2,3,4,5]'));
obj.print;
end;
33 of 44
PL/JSON (3)
Our story:
 Currently in production to manipulate reasonably
large (up to 1 MB) JSON documents from a medical
provider
 JSON is multi-level (and often very deep).
 Manipulations are very intense.
 Because PL/JSON is using Oracle objects and
object-collections, it has a very noticeable impact on
server memory usage  needed to make sure that
server has enough resources.
Overall:
 Saved us from reinventing the wheel!
 Written by people who REALLY know the business
34 of 44
PL/PDF (1)
Used for:
 Procedural constructor of PDF documents
 100% PL/SQL-based (source code is wrapped  )
 Various extensions
Info:
 Commercial product (but prices are OK)
 Company website: http://plpdf.com/plpdf.php
 Current version: 4.1.0
 Important feature: works even on XE!
 Also includes PL/DOCX (but we didn’t evaluate it)
35 of 44
PL/PDF (2)
Code sample
procedure InitDefault (l_blob OUT blob) is
begin
-- create new doc (with default settings) and first page
plpdf.Init;
plpdf.NewPage();
-- set font and add text
plpdf.SetPrintFont(
p_family => 'Arial', -- Font family: Arial
p_style => null, -- Font style: Regular
p_size => 12 -- Font size: 12
);
plpdf.PrintoutText(p_x => 20,p_y => 30,p_txt => 'Hello!');
-- close document and create PDF as BLOB
plpdf.SendDoc(p_blob => l_blob);
end;
36 of 44
PL/PDF (3)
 Our story:
 Currently in production and used for multiple purposes:
1. Server-generated emails with attached documents
2. Highly customizable reports (where defining a single
template is too difficult)
3. Transmitting sensitive information (PDFs can be encrypted
and password-protected)
 Very limited support of fillable fields 
 Overall evaluation:
 Same issue as PL/JSON – significant memory footprint
 Very convenient substitution of extremely complex
reporting tools
 Somewhat time consuming to develop because every
line has to be scripted.
37 of 44
IText (1)
Used for:
 Procedural constructor of PDF documents
 100% Java-based
Info:
 “Sort of” free (AGPL), but also there are commercial
implementations (http://itextpdf.com/)
 SourceForge: https://sourceforge.net/projects/itext/
 Current version: 5.5.9
38 of 44
IText (2)
 Code sample
public class HelloWorldNarrow {
/** Path to the resulting PDF file. */
public static final String RESULT
= "results/part1/chapter01/hello_narrow.pdf";
public static void main(String[] args)
throws DocumentException, IOException {
// step 1
// Using a custom page size
Rectangle pagesize = new Rectangle(216f, 720f);
Document document = new Document(pagesize, 36f, 72f, 108f, 180f);
// step 2
PdfWriter.getInstance(document, new FileOutputStream(RESULT));
// step 3
document.open();
// step 4
document.add(new Paragraph(
"Hello World! Hello People! " +
"Hello Sky! Hello Sun! Hello Moon! Hello Stars!"));
// step 5
document.close();
}
}
39 of 44
IText (3)
Our story:
 Currently in production as a part of PL/SQL-based
solution (no wrapped code)
 Still under AGPL (or at least that’s what I’ve been
told  )
 Creates PDF documents with fillable fields (in DEV)
 Merges data to created PDFs (in PROD)
Overall evaluation:
 Very convenient and flexible
 AGPL license may be a show-stopper for many
organizations
 Reasonably low performance impact (definitely
cheaper than roundtrips to an application server)
40 of 44
XLSX (1)
Our own solution
 … yes, this time we reinvented the wheel, but:
 XLSX is generic enough to be generated
 All built-in computations are reasonably straightforward.
Used for:
 Procedural constructor of Excel reports in XLSX
format (including multi-worksheet)
 Also needed for reports that are wider than normal
pages
 100% PL/SQL-based
41 of 44
XLSX (2)
Code sample
--header
dbms_lob.append(v_XML_cl,vc_style_tx);
dbms_lob.append(v_XML_cl,
'<Worksheet ss:Name="EA NETRES EAD REPORT"><Table>
<Column ss:Width="200"/>
<Column ss:StyleID="RptDetail" ss:AutoFitWidth="0" ss:Width="42" ss:Span="9"/>
<Column ss:Index="12" ss:StyleID="RptDetail" ss:Width="50.25"/>
<Column ss:AutoFitWidth="0" ss:Width="5.25"/>
<Column ss:StyleID="RptDetail" ss:AutoFitWidth="0" ss:Width="42"
ss:Span="3"/>');
--Title and Header
dbms_lob.append(v_XML_cl,
'<Row><Cell ss:MergeAcross="16" ss:StyleID="Title">
<Data ss:Type="String">EA NEC/EAD REPORT</Data></Cell>
</Row>
<Row><Cell ss:MergeAcross="16" ss:StyleID="RptDetail" >
<Data ss:Type="String">Organization:'||v_org_tx||'</Data></Cell>
</Row>
<Row>
<Cell ss:MergeAcross="11" ss:StyleID="BorderB">
<Data ss:Type="String">NEW ENLISTMENT CONTRACT STATUS</Data></Cell>
<Cell ss:Index="14" ss:MergeAcross="3" ss:StyleID="BorderB">
<Data ss:Type="String">EAD STATUS</Data></Cell>
</Row>');
...
42 of 44
XLSX (3)
Our story:
 Currently in production in reporting module as
alternative to PDF output (especially whenever PDF
formatting would be unacceptable)
Overall evaluation:
 Lots of manual coding, but solved exactly what
needed to be solved
 Very functional because lots of people still prefer to
do their own calculations in Excel (especially senior
level management folks)
43 of 44
Summary
It is possible to manage documents directly in
the database
 … although, it may often be counterintuitive.
It is possible to have flexible reporting
 … by utilizing repository-based solutions.
There are even some third-party tools
(commercial and free) to make your life simpler
 … so you don’t need to reinvent the wheel. 
44 of 44
Contact Information
 Paul Dorsey – paul_dorsey@dulcian.com
 Michael Rosenblum – mrosenblum@dulcian.com
 Website – www.dulcian.com
 Misha’s blog – wonderingmisha.blogspot.com
 Latest books:
 Oracle PL/SQL Performance Tuning Tips & Techniques,
McGraw-Hill
 Oracle PL/SQL for Dummies

Mais conteúdo relacionado

Mais procurados

Etl overview training
Etl overview trainingEtl overview training
Etl overview trainingMondy Holten
 
Lecture 04 - Granularity in the Data Warehouse
Lecture 04 - Granularity in the Data WarehouseLecture 04 - Granularity in the Data Warehouse
Lecture 04 - Granularity in the Data Warehousephanleson
 
Rando Veizi: Data warehouse and Pentaho suite
Rando Veizi: Data warehouse and Pentaho suiteRando Veizi: Data warehouse and Pentaho suite
Rando Veizi: Data warehouse and Pentaho suiteCarlo Vaccari
 
Data warehouse design
Data warehouse designData warehouse design
Data warehouse designines beltaief
 
Teradata Aggregate Join Indices And Dimensional Models
Teradata Aggregate Join Indices And Dimensional ModelsTeradata Aggregate Join Indices And Dimensional Models
Teradata Aggregate Join Indices And Dimensional Modelspepeborja
 
Database performance tuning and query optimization
Database performance tuning and query optimizationDatabase performance tuning and query optimization
Database performance tuning and query optimizationUsman Tariq
 
Module 02 teradata basics
Module 02 teradata basicsModule 02 teradata basics
Module 02 teradata basicsMd. Noor Alam
 
Data Warehouse Testing: It’s All about the Planning
Data Warehouse Testing: It’s All about the PlanningData Warehouse Testing: It’s All about the Planning
Data Warehouse Testing: It’s All about the PlanningTechWell
 
Lecture 02 - The Data Warehouse Environment
Lecture 02 - The Data Warehouse Environment Lecture 02 - The Data Warehouse Environment
Lecture 02 - The Data Warehouse Environment phanleson
 
Introduction to Data Warehousing
Introduction to Data WarehousingIntroduction to Data Warehousing
Introduction to Data WarehousingJason S
 
Data modeling star schema
Data modeling star schemaData modeling star schema
Data modeling star schemaSayed Ahmed
 
business analysis-Data warehousing
business analysis-Data warehousingbusiness analysis-Data warehousing
business analysis-Data warehousingDhilsath Fathima
 
Data warehousing interview_questionsandanswers
Data warehousing interview_questionsandanswersData warehousing interview_questionsandanswers
Data warehousing interview_questionsandanswersSourav Singh
 
Struggling with data management
Struggling with data managementStruggling with data management
Struggling with data managementDavid Walker
 
Data Warehouses & Deployment By Ankita dubey
Data Warehouses & Deployment By Ankita dubeyData Warehouses & Deployment By Ankita dubey
Data Warehouses & Deployment By Ankita dubeyAnkita Dubey
 

Mais procurados (20)

Etl overview training
Etl overview trainingEtl overview training
Etl overview training
 
Lecture 04 - Granularity in the Data Warehouse
Lecture 04 - Granularity in the Data WarehouseLecture 04 - Granularity in the Data Warehouse
Lecture 04 - Granularity in the Data Warehouse
 
Rando Veizi: Data warehouse and Pentaho suite
Rando Veizi: Data warehouse and Pentaho suiteRando Veizi: Data warehouse and Pentaho suite
Rando Veizi: Data warehouse and Pentaho suite
 
Data warehouse design
Data warehouse designData warehouse design
Data warehouse design
 
Teradata Aggregate Join Indices And Dimensional Models
Teradata Aggregate Join Indices And Dimensional ModelsTeradata Aggregate Join Indices And Dimensional Models
Teradata Aggregate Join Indices And Dimensional Models
 
Database performance tuning and query optimization
Database performance tuning and query optimizationDatabase performance tuning and query optimization
Database performance tuning and query optimization
 
Teradata sql-tuning-top-10
Teradata sql-tuning-top-10Teradata sql-tuning-top-10
Teradata sql-tuning-top-10
 
Module 02 teradata basics
Module 02 teradata basicsModule 02 teradata basics
Module 02 teradata basics
 
Data Warehouse Testing: It’s All about the Planning
Data Warehouse Testing: It’s All about the PlanningData Warehouse Testing: It’s All about the Planning
Data Warehouse Testing: It’s All about the Planning
 
Lecture 02 - The Data Warehouse Environment
Lecture 02 - The Data Warehouse Environment Lecture 02 - The Data Warehouse Environment
Lecture 02 - The Data Warehouse Environment
 
Introduction to Data Warehousing
Introduction to Data WarehousingIntroduction to Data Warehousing
Introduction to Data Warehousing
 
Presentation
PresentationPresentation
Presentation
 
Data modeling star schema
Data modeling star schemaData modeling star schema
Data modeling star schema
 
business analysis-Data warehousing
business analysis-Data warehousingbusiness analysis-Data warehousing
business analysis-Data warehousing
 
Data warehousing interview_questionsandanswers
Data warehousing interview_questionsandanswersData warehousing interview_questionsandanswers
Data warehousing interview_questionsandanswers
 
Data Warehouse 101
Data Warehouse 101Data Warehouse 101
Data Warehouse 101
 
Struggling with data management
Struggling with data managementStruggling with data management
Struggling with data management
 
data warehousing
data warehousingdata warehousing
data warehousing
 
Data Warehouses & Deployment By Ankita dubey
Data Warehouses & Deployment By Ankita dubeyData Warehouses & Deployment By Ankita dubey
Data Warehouses & Deployment By Ankita dubey
 
ETL
ETLETL
ETL
 

Destaque

PL/SQL User-Defined Functions in the Read World
PL/SQL User-Defined Functions in the Read WorldPL/SQL User-Defined Functions in the Read World
PL/SQL User-Defined Functions in the Read WorldMichael Rosenblum
 
Snowplow Analytics and Looker at Oyster.com
Snowplow Analytics and Looker at Oyster.comSnowplow Analytics and Looker at Oyster.com
Snowplow Analytics and Looker at Oyster.comyalisassoon
 
Estudio satisfacción clientes 2014
Estudio satisfacción clientes 2014Estudio satisfacción clientes 2014
Estudio satisfacción clientes 2014Svenson España
 
02. начало служения
02. начало служения02. начало служения
02. начало служенияchucho1943
 
P 1b-el texto y sus propiedades
P 1b-el texto y sus propiedadesP 1b-el texto y sus propiedades
P 1b-el texto y sus propiedadescmlobo
 
Guru Pandyar Characteristics of a Successful Entrepreneur
Guru Pandyar Characteristics of a Successful EntrepreneurGuru Pandyar Characteristics of a Successful Entrepreneur
Guru Pandyar Characteristics of a Successful EntrepreneurPrasad Rao Pandyar Guru
 
Actividad 2 tita
Actividad 2 titaActividad 2 tita
Actividad 2 titaphapi70
 
Final_Project_Report_DT021_4_2011_Charlie_Weld
Final_Project_Report_DT021_4_2011_Charlie_WeldFinal_Project_Report_DT021_4_2011_Charlie_Weld
Final_Project_Report_DT021_4_2011_Charlie_WeldCharlie Weld
 
síndrome de disetres respiratorio del r/n y aspiración de meconio
síndrome de disetres respiratorio del r/n y aspiración de meconiosíndrome de disetres respiratorio del r/n y aspiración de meconio
síndrome de disetres respiratorio del r/n y aspiración de meconiojulian salvador
 
A New View of Database Views
A New View of Database ViewsA New View of Database Views
A New View of Database ViewsMichael Rosenblum
 
Організація навчально виховного процесу гіперактивної дитини
Організація навчально виховного процесу гіперактивної дитиниОрганізація навчально виховного процесу гіперактивної дитини
Організація навчально виховного процесу гіперактивної дитиниNatalyVeremieva
 
HXR 2016: Tracking the Body: Devices, Consumer Genomics, and Sensors- Samir Q...
HXR 2016: Tracking the Body: Devices, Consumer Genomics, and Sensors- Samir Q...HXR 2016: Tracking the Body: Devices, Consumer Genomics, and Sensors- Samir Q...
HXR 2016: Tracking the Body: Devices, Consumer Genomics, and Sensors- Samir Q...HxRefactored
 
HXR 2016: Designing to Support Mental Health -Scott R. Cousino, myStrength
HXR 2016: Designing to Support Mental Health -Scott R. Cousino, myStrengthHXR 2016: Designing to Support Mental Health -Scott R. Cousino, myStrength
HXR 2016: Designing to Support Mental Health -Scott R. Cousino, myStrengthHxRefactored
 
ROO 8B - Marketing Operations Fletcher
ROO 8B - Marketing Operations FletcherROO 8B - Marketing Operations Fletcher
ROO 8B - Marketing Operations FletcherDan Fletcher
 
Classroom mang
Classroom mangClassroom mang
Classroom manghayes120
 
апрель 2016 9 группа
апрель 2016 9 группаапрель 2016 9 группа
апрель 2016 9 группаivelena
 

Destaque (19)

PL/SQL User-Defined Functions in the Read World
PL/SQL User-Defined Functions in the Read WorldPL/SQL User-Defined Functions in the Read World
PL/SQL User-Defined Functions in the Read World
 
Snowplow Analytics and Looker at Oyster.com
Snowplow Analytics and Looker at Oyster.comSnowplow Analytics and Looker at Oyster.com
Snowplow Analytics and Looker at Oyster.com
 
JD CV
JD CVJD CV
JD CV
 
Estudio satisfacción clientes 2014
Estudio satisfacción clientes 2014Estudio satisfacción clientes 2014
Estudio satisfacción clientes 2014
 
Aborto
AbortoAborto
Aborto
 
02. начало служения
02. начало служения02. начало служения
02. начало служения
 
P 1b-el texto y sus propiedades
P 1b-el texto y sus propiedadesP 1b-el texto y sus propiedades
P 1b-el texto y sus propiedades
 
Guru Pandyar Characteristics of a Successful Entrepreneur
Guru Pandyar Characteristics of a Successful EntrepreneurGuru Pandyar Characteristics of a Successful Entrepreneur
Guru Pandyar Characteristics of a Successful Entrepreneur
 
Actividad 2 tita
Actividad 2 titaActividad 2 tita
Actividad 2 tita
 
Final_Project_Report_DT021_4_2011_Charlie_Weld
Final_Project_Report_DT021_4_2011_Charlie_WeldFinal_Project_Report_DT021_4_2011_Charlie_Weld
Final_Project_Report_DT021_4_2011_Charlie_Weld
 
síndrome de disetres respiratorio del r/n y aspiración de meconio
síndrome de disetres respiratorio del r/n y aspiración de meconiosíndrome de disetres respiratorio del r/n y aspiración de meconio
síndrome de disetres respiratorio del r/n y aspiración de meconio
 
A New View of Database Views
A New View of Database ViewsA New View of Database Views
A New View of Database Views
 
Організація навчально виховного процесу гіперактивної дитини
Організація навчально виховного процесу гіперактивної дитиниОрганізація навчально виховного процесу гіперактивної дитини
Організація навчально виховного процесу гіперактивної дитини
 
HXR 2016: Tracking the Body: Devices, Consumer Genomics, and Sensors- Samir Q...
HXR 2016: Tracking the Body: Devices, Consumer Genomics, and Sensors- Samir Q...HXR 2016: Tracking the Body: Devices, Consumer Genomics, and Sensors- Samir Q...
HXR 2016: Tracking the Body: Devices, Consumer Genomics, and Sensors- Samir Q...
 
HXR 2016: Designing to Support Mental Health -Scott R. Cousino, myStrength
HXR 2016: Designing to Support Mental Health -Scott R. Cousino, myStrengthHXR 2016: Designing to Support Mental Health -Scott R. Cousino, myStrength
HXR 2016: Designing to Support Mental Health -Scott R. Cousino, myStrength
 
ROO 8B - Marketing Operations Fletcher
ROO 8B - Marketing Operations FletcherROO 8B - Marketing Operations Fletcher
ROO 8B - Marketing Operations Fletcher
 
Classroom mang
Classroom mangClassroom mang
Classroom mang
 
апрель 2016 9 группа
апрель 2016 9 группаапрель 2016 9 группа
апрель 2016 9 группа
 
Construction equipments and methods
Construction equipments and methodsConstruction equipments and methods
Construction equipments and methods
 

Semelhante a Printing without printers

ISBG 2015 - Infrastructure Assessment - Analyze, Visualize and Optimize
ISBG 2015 - Infrastructure Assessment - Analyze, Visualize and OptimizeISBG 2015 - Infrastructure Assessment - Analyze, Visualize and Optimize
ISBG 2015 - Infrastructure Assessment - Analyze, Visualize and OptimizeChristoph Adler
 
engage 2015 - - 2015 - Infrastructure Assessment - Analyze, Visualize and Op...
engage 2015 -  - 2015 - Infrastructure Assessment - Analyze, Visualize and Op...engage 2015 -  - 2015 - Infrastructure Assessment - Analyze, Visualize and Op...
engage 2015 - - 2015 - Infrastructure Assessment - Analyze, Visualize and Op...Christoph Adler
 
ICS UserGroup - 2015 - Infrastructure Assessment - Analyze, Visualize and Opt...
ICS UserGroup - 2015 - Infrastructure Assessment - Analyze, Visualize and Opt...ICS UserGroup - 2015 - Infrastructure Assessment - Analyze, Visualize and Opt...
ICS UserGroup - 2015 - Infrastructure Assessment - Analyze, Visualize and Opt...Christoph Adler
 
Bridging the Gap: from Data Science to Production
Bridging the Gap: from Data Science to ProductionBridging the Gap: from Data Science to Production
Bridging the Gap: from Data Science to ProductionFlorian Wilhelm
 
Electronic patients records system based on oracle apex
Electronic patients records system based on oracle apexElectronic patients records system based on oracle apex
Electronic patients records system based on oracle apexJan Karremans
 
EPM Logs 101 - Hyperion Focus 17
EPM Logs 101 - Hyperion Focus 17EPM Logs 101 - Hyperion Focus 17
EPM Logs 101 - Hyperion Focus 17Datavail
 
Data Engineer's Lunch #85: Designing a Modern Data Stack
Data Engineer's Lunch #85: Designing a Modern Data StackData Engineer's Lunch #85: Designing a Modern Data Stack
Data Engineer's Lunch #85: Designing a Modern Data StackAnant Corporation
 
Building Applications using Apache Hadoop
Building Applications using Apache HadoopBuilding Applications using Apache Hadoop
Building Applications using Apache HadoopC4Media
 
Forms 2 Future - the ongoing journey into the future for Oracle based organiz...
Forms 2 Future - the ongoing journey into the future for Oracle based organiz...Forms 2 Future - the ongoing journey into the future for Oracle based organiz...
Forms 2 Future - the ongoing journey into the future for Oracle based organiz...Lucas Jellema
 
Drupal 7 Feeds Intro Drupal Camp Indianapolis 2011
Drupal 7 Feeds Intro Drupal Camp Indianapolis 2011Drupal 7 Feeds Intro Drupal Camp Indianapolis 2011
Drupal 7 Feeds Intro Drupal Camp Indianapolis 2011jbarclay
 
Essential Data Engineering for Data Scientist
Essential Data Engineering for Data Scientist Essential Data Engineering for Data Scientist
Essential Data Engineering for Data Scientist SoftServe
 
ConfluentMinds - Auto-creating logic execution hierarchy from source code and...
ConfluentMinds - Auto-creating logic execution hierarchy from source code and...ConfluentMinds - Auto-creating logic execution hierarchy from source code and...
ConfluentMinds - Auto-creating logic execution hierarchy from source code and...Ashok Panigrahi
 
Whats new in Oracle Database 12c release 12.1.0.2
Whats new in Oracle Database 12c release 12.1.0.2Whats new in Oracle Database 12c release 12.1.0.2
Whats new in Oracle Database 12c release 12.1.0.2Connor McDonald
 
ConnectED 2015 BP302: Future-Proofing Enterprise IT
ConnectED 2015 BP302: Future-Proofing Enterprise ITConnectED 2015 BP302: Future-Proofing Enterprise IT
ConnectED 2015 BP302: Future-Proofing Enterprise ITDaniel Reimann
 
IT for HR professionals
IT for HR professionalsIT for HR professionals
IT for HR professionalsMiguel Pinto
 
Hadoop project design and a usecase
Hadoop project design and  a usecaseHadoop project design and  a usecase
Hadoop project design and a usecasesudhakara st
 

Semelhante a Printing without printers (20)

ISBG 2015 - Infrastructure Assessment - Analyze, Visualize and Optimize
ISBG 2015 - Infrastructure Assessment - Analyze, Visualize and OptimizeISBG 2015 - Infrastructure Assessment - Analyze, Visualize and Optimize
ISBG 2015 - Infrastructure Assessment - Analyze, Visualize and Optimize
 
engage 2015 - - 2015 - Infrastructure Assessment - Analyze, Visualize and Op...
engage 2015 -  - 2015 - Infrastructure Assessment - Analyze, Visualize and Op...engage 2015 -  - 2015 - Infrastructure Assessment - Analyze, Visualize and Op...
engage 2015 - - 2015 - Infrastructure Assessment - Analyze, Visualize and Op...
 
ICS UserGroup - 2015 - Infrastructure Assessment - Analyze, Visualize and Opt...
ICS UserGroup - 2015 - Infrastructure Assessment - Analyze, Visualize and Opt...ICS UserGroup - 2015 - Infrastructure Assessment - Analyze, Visualize and Opt...
ICS UserGroup - 2015 - Infrastructure Assessment - Analyze, Visualize and Opt...
 
Bridging the Gap: from Data Science to Production
Bridging the Gap: from Data Science to ProductionBridging the Gap: from Data Science to Production
Bridging the Gap: from Data Science to Production
 
Electronic patients records system based on oracle apex
Electronic patients records system based on oracle apexElectronic patients records system based on oracle apex
Electronic patients records system based on oracle apex
 
Pranabesh Ghosh
Pranabesh Ghosh Pranabesh Ghosh
Pranabesh Ghosh
 
EPM Logs 101 - Hyperion Focus 17
EPM Logs 101 - Hyperion Focus 17EPM Logs 101 - Hyperion Focus 17
EPM Logs 101 - Hyperion Focus 17
 
Data Engineer's Lunch #85: Designing a Modern Data Stack
Data Engineer's Lunch #85: Designing a Modern Data StackData Engineer's Lunch #85: Designing a Modern Data Stack
Data Engineer's Lunch #85: Designing a Modern Data Stack
 
Building Applications using Apache Hadoop
Building Applications using Apache HadoopBuilding Applications using Apache Hadoop
Building Applications using Apache Hadoop
 
Forms 2 Future - the ongoing journey into the future for Oracle based organiz...
Forms 2 Future - the ongoing journey into the future for Oracle based organiz...Forms 2 Future - the ongoing journey into the future for Oracle based organiz...
Forms 2 Future - the ongoing journey into the future for Oracle based organiz...
 
Drupal 7 Feeds Intro Drupal Camp Indianapolis 2011
Drupal 7 Feeds Intro Drupal Camp Indianapolis 2011Drupal 7 Feeds Intro Drupal Camp Indianapolis 2011
Drupal 7 Feeds Intro Drupal Camp Indianapolis 2011
 
Essential Data Engineering for Data Scientist
Essential Data Engineering for Data Scientist Essential Data Engineering for Data Scientist
Essential Data Engineering for Data Scientist
 
ConfluentMinds - Auto-creating logic execution hierarchy from source code and...
ConfluentMinds - Auto-creating logic execution hierarchy from source code and...ConfluentMinds - Auto-creating logic execution hierarchy from source code and...
ConfluentMinds - Auto-creating logic execution hierarchy from source code and...
 
Whats new in Oracle Database 12c release 12.1.0.2
Whats new in Oracle Database 12c release 12.1.0.2Whats new in Oracle Database 12c release 12.1.0.2
Whats new in Oracle Database 12c release 12.1.0.2
 
ConnectED 2015 BP302: Future-Proofing Enterprise IT
ConnectED 2015 BP302: Future-Proofing Enterprise ITConnectED 2015 BP302: Future-Proofing Enterprise IT
ConnectED 2015 BP302: Future-Proofing Enterprise IT
 
IT for HR professionals
IT for HR professionalsIT for HR professionals
IT for HR professionals
 
Database project
Database projectDatabase project
Database project
 
Insync10 anthony spierings
Insync10 anthony spieringsInsync10 anthony spierings
Insync10 anthony spierings
 
Hadoop project design and a usecase
Hadoop project design and  a usecaseHadoop project design and  a usecase
Hadoop project design and a usecase
 
Session 203 iouc summit database
Session 203 iouc summit databaseSession 203 iouc summit database
Session 203 iouc summit database
 

Mais de Michael Rosenblum

Building a Generic Search Screen using Dynamic SQL
Building a Generic Search Screen using Dynamic SQLBuilding a Generic Search Screen using Dynamic SQL
Building a Generic Search Screen using Dynamic SQLMichael Rosenblum
 
Managing the Earthquake: Surviving Major Database Architecture Changes (rev.2...
Managing the Earthquake: Surviving Major Database Architecture Changes (rev.2...Managing the Earthquake: Surviving Major Database Architecture Changes (rev.2...
Managing the Earthquake: Surviving Major Database Architecture Changes (rev.2...Michael Rosenblum
 
Managing Unstructured Data: Lobs in the World of JSON
Managing Unstructured Data: Lobs in the World of JSONManaging Unstructured Data: Lobs in the World of JSON
Managing Unstructured Data: Lobs in the World of JSONMichael Rosenblum
 
Hidden Gems of Performance Tuning: Hierarchical Profiler and DML Trigger Opti...
Hidden Gems of Performance Tuning: Hierarchical Profiler and DML Trigger Opti...Hidden Gems of Performance Tuning: Hierarchical Profiler and DML Trigger Opti...
Hidden Gems of Performance Tuning: Hierarchical Profiler and DML Trigger Opti...Michael Rosenblum
 
Server-Side Development for the Cloud
Server-Side Developmentfor the CloudServer-Side Developmentfor the Cloud
Server-Side Development for the CloudMichael Rosenblum
 
Developer's Approach to Code Management
Developer's Approach to Code ManagementDeveloper's Approach to Code Management
Developer's Approach to Code ManagementMichael Rosenblum
 
The Hidden Face of Cost-Based Optimizer: PL/SQL Specific Statistics
The Hidden Face of Cost-Based Optimizer: PL/SQL Specific StatisticsThe Hidden Face of Cost-Based Optimizer: PL/SQL Specific Statistics
The Hidden Face of Cost-Based Optimizer: PL/SQL Specific StatisticsMichael Rosenblum
 
Why is the application running so slowly?
Why is the application running so slowly?Why is the application running so slowly?
Why is the application running so slowly?Michael Rosenblum
 
Data Tracking: On the Hunt for Information about Your Database
Data Tracking: On the Hunt for Information about Your DatabaseData Tracking: On the Hunt for Information about Your Database
Data Tracking: On the Hunt for Information about Your DatabaseMichael Rosenblum
 

Mais de Michael Rosenblum (9)

Building a Generic Search Screen using Dynamic SQL
Building a Generic Search Screen using Dynamic SQLBuilding a Generic Search Screen using Dynamic SQL
Building a Generic Search Screen using Dynamic SQL
 
Managing the Earthquake: Surviving Major Database Architecture Changes (rev.2...
Managing the Earthquake: Surviving Major Database Architecture Changes (rev.2...Managing the Earthquake: Surviving Major Database Architecture Changes (rev.2...
Managing the Earthquake: Surviving Major Database Architecture Changes (rev.2...
 
Managing Unstructured Data: Lobs in the World of JSON
Managing Unstructured Data: Lobs in the World of JSONManaging Unstructured Data: Lobs in the World of JSON
Managing Unstructured Data: Lobs in the World of JSON
 
Hidden Gems of Performance Tuning: Hierarchical Profiler and DML Trigger Opti...
Hidden Gems of Performance Tuning: Hierarchical Profiler and DML Trigger Opti...Hidden Gems of Performance Tuning: Hierarchical Profiler and DML Trigger Opti...
Hidden Gems of Performance Tuning: Hierarchical Profiler and DML Trigger Opti...
 
Server-Side Development for the Cloud
Server-Side Developmentfor the CloudServer-Side Developmentfor the Cloud
Server-Side Development for the Cloud
 
Developer's Approach to Code Management
Developer's Approach to Code ManagementDeveloper's Approach to Code Management
Developer's Approach to Code Management
 
The Hidden Face of Cost-Based Optimizer: PL/SQL Specific Statistics
The Hidden Face of Cost-Based Optimizer: PL/SQL Specific StatisticsThe Hidden Face of Cost-Based Optimizer: PL/SQL Specific Statistics
The Hidden Face of Cost-Based Optimizer: PL/SQL Specific Statistics
 
Why is the application running so slowly?
Why is the application running so slowly?Why is the application running so slowly?
Why is the application running so slowly?
 
Data Tracking: On the Hunt for Information about Your Database
Data Tracking: On the Hunt for Information about Your DatabaseData Tracking: On the Hunt for Information about Your Database
Data Tracking: On the Hunt for Information about Your Database
 

Último

SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AISyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AIABDERRAOUF MEHENNI
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providermohitmore19
 
5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdfWave PLM
 
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...OnePlan Solutions
 
Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionDiamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionSolGuruz
 
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...harshavardhanraghave
 
A Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxA Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxComplianceQuest1
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsAlberto González Trastoy
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVshikhaohhpro
 
How To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsHow To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsAndolasoft Inc
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...panagenda
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsJhone kinadey
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...ICS
 
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...MyIntelliSource, Inc.
 
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerThousandEyes
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfkalichargn70th171
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfkalichargn70th171
 

Último (20)

SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AISyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service provider
 
5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf
 
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
 
Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionDiamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with Precision
 
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
 
A Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxA Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docx
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
 
Microsoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdfMicrosoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdf
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTV
 
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS LiveVip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
 
How To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsHow To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.js
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial Goals
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
 
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
 
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
 
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
 

Printing without printers

  • 1. 1 of 44 #1563 Printing Without Printers: A Database-Centric Approach to Document Exchange and Reporting Michael Rosenblum & Dr. Paul Dorsey Dulcian, Inc. www.dulcian.com
  • 2. 2 of 44 Who Am I? – “Misha” Oracle ACE Co-author of 3 books  PL/SQL for Dummies  Expert PL/SQL Practices  Oracle PL/SQL Performance Tuning Tips & Techniques (Rosenblum & Dorsey, Oracle Press, July 2014) Known for:  SQL and PL/SQL tuning  Complex functionality  Code generators  Repository-based development
  • 3. 3 of 44 Who Am I? – “Dr.Paul”  Been Around FOREVER  Spoke at almost every big Oracle conference since ’93  First inductee to SELECT Hall of Fame  Wrote lots of books  Designer, Developer, JDeveloper, PL/SQL  Won lots of awards  One of initial 6 ACE Directors  First one fired  Built lots of big systems  Air Force Recruiting  Ethiopian Ministry of Finance and Economic Development Budget System  Known for:  Thick Database approach  Business Rules
  • 4. 4 of 44 Documents??? Why bother?  Standards  For example - government, medical  High importance  Legally binding  Physical limitations  Sorry, no scrollable parchments anymore 
  • 5. 5 of 44 Documents… What are they?  Formal representation of available data  Non-interactive  Self-contained What about them?  Data representation on the screen is NOT the same as on paper  … always present is the notion of “translation”  something will be “lost in translation”
  • 7. 7 of 44 Documents ?!?! Being done forever!!! Topic, please!!! Boring! Ancient history… So what?
  • 8. 8 of 44 Well… “…as we know, there are known knowns; there are things we know we know. We also know there are known unknowns; that is to say we know there are some things we do not know. But there are also unknown unknowns – the ones we don't know we don't know.” © D. Rumsfeld
  • 9. 9 of 44 Known Knowns Data  Every database can store text.  ... And some of them are even explicitly made to be document-based  All scalar datatypes can be converted to text.  … to be fair, with some potential data loss Formats  DOC, DOCX, PDF, XLSX… (you name it!)
  • 10. 10 of 44 Known Unknowns Where to merge data and formatting  Schools of thought:  Front-end  Middle-tier  Back-end  Different implementations:  Open-source vs. commercial solutions Costs How to merge  Acceptable data loss when formatting  Performance considerations
  • 11. 11 of 44 Unknown Unknowns How can you predict and support future requirements?  … because changes can just “happen” Where do you draw the line between regular reporting and ad-hoc querying?  …because both of these areas quickly blur in actual production environments.
  • 12. 12 of 44 So? You need to solve known unknowns.  Choosing the wrong environment can be very costly! You need to build systems that are:  Flexible enough  Customizable enough
  • 13. 13 of 44 Technology Decisions
  • 14. 14 of 44 Client-Side (1) Pros:  Shifts workload to the client  Minimizes network traffic Cons:  Deployment nightmare!  Unpredictable performance Current state:  Rarely used (only in tightly controlled environments)
  • 15. 15 of 44 Client-Side (2)  Real world example:  What: Client-based document viewer (now called IBM Lotus Forms)  Client software requires installation on every working laptop.  All forms must be local (and current!) on every laptop.  How:  Viewer accepts master form plus XML-formatted data.  Viewer allows edits which are shipped back to server as XML.  When: Early 2000 / 2014  Lessons learned:  Real deployment nightmare, but offloading merging to clients  less server resources needed
  • 16. 16 of 44 Middle Tier (1) Pro:  Convenient - if accessing multiple data sources Cons:  Frequently inefficient mechanisms for accessing data sources  Multiple roundtrips to database  High memory utilization  Often overkill (adds complexity) Current state:  The most commonly used solution
  • 17. 17 of 44 Middle Tier (2)  Real world example:  What: Same client-based document viewer, but together with Lotus Forms Server  Client software requires installation on every working laptop.  Server does the merging and returns the document.  How:  Viewer just shows final document (real-only).  Editing is done using a web-based application.  When: 2014 / 2017 (being gradually retired)  Lessons learned:  Large documents (20+ pages, 600+ fields) are expensive to merge (both memory- and CPU-wise)  resource tuning is very important.
  • 18. 18 of 44 Server-Side (1) Pros:  Formatting is brought to data - not vice versa  No extra round-trips  Complete access to available data Cons:  Counter-intuitive  Increased server workload Current state:  Deployed and working in production 
  • 19. 19 of 44 Server-side (2)  Real world example:  What: Database generates PDFs directly.  Many browsers already understand PDFs directly (no need for Adobe products)  How:  Database stores fillable PDF forms, merges data (Java-based merger) and ships the final document out.  Viewer just shows final document (real-only).  Editing is done using a web-based application.  When: 2015+ (replacing previous implementation)  Lessons learned:  Database workload increase appears to be less than expected.  Fillable PDFs use JavaScript internally even for basic calculations (security no-go!)  more work that expected
  • 20. 20 of 44 Why use the database? Fewer roundtrips mean less workload  … no resource waste to manage connections, environments, etc. Less software to configure  … because each piece of software has its own setting issues (+corresponding learning curve) Single integration mechanism (PL/SQL)  … plus various PL/SQL access mechanisms
  • 22. 22 of 44 Getting Agile Goal:  Use flexible reporting  Parameters should be customizable enough  end users feel their power  Documents should be well-formatted  end users get what they need  Avoid “ad-hoc” trap  Adequate performance  Predictable (and manageable number of query permutations)
  • 23. 23 of 44 Repository-Based Development Solution:  Developers/Architects register available data sources plus all extras:  Columns/aggregates  Filters (run-time and design-time)  Output formats  End users can define customized reports (or use pre- existing ones):  Inputs are stored.  Execution is timed.  Errors are stored.  Results are stored (if needed).
  • 24. 24 of 44 Data model (Main)
  • 25. 25 of 44 Data model (Access)
  • 26. 26 of 44 Maintenance UI Example
  • 27. 27 of 44 Running UI Example
  • 28. 28 of 44 Important Lessons Avoid over-generalizations:  … because your own developers should be able to understand the repository. Don’t be afraid of project-specific data elements  … because it makes your code much more maintainable. Never ever reuse attributes from a generic model for alternative purposes  … because at some point you may have to migrate to a different solution.
  • 29. 29 of 44 Existing Solutions and Case Studies
  • 30. 30 of 44 Tools Overview JSON generation  PL/SQL-based [PL/JSON]  Free PDF generation  PL/SQL-based [PL/PDF]  Commercial  Java-based [ITEXT]  “Sort of” free (AGPL) XSLX/XML generation  PL/SQL-based  Our own (meaning free )
  • 31. 31 of 44 PL/JSON (1)  Used for:  Very granular manipulation of JSON data  100% PL/SQL-based  Various extra APIs for printing/converting to XML/table access etc.  Info:  Developed by Jonas Krogsboell and Lewis Cunningham  Github: https://github.com/pljson/pljson  Current version: 1.0.5  Works even in Oracle 12c, but some people prefer customization of names to avoid clashing with Oracle’s own JSON datatype
  • 32. 32 of 44 PL/JSON (2) Code sample declare obj pljson.json:=pljson.json(); begin obj.put('A', 'a little string'); obj.put('B', 123456789); obj.put('C', true); obj.put('D', false); obj.put('F', json_value.makenull); obj.remove('C'); obj.put('Nested JSON', pljson.json('{"lazy construct": true}')); obj.put('An array', pljson.json_list('[1,2,3,4,5]')); obj.print; end;
  • 33. 33 of 44 PL/JSON (3) Our story:  Currently in production to manipulate reasonably large (up to 1 MB) JSON documents from a medical provider  JSON is multi-level (and often very deep).  Manipulations are very intense.  Because PL/JSON is using Oracle objects and object-collections, it has a very noticeable impact on server memory usage  needed to make sure that server has enough resources. Overall:  Saved us from reinventing the wheel!  Written by people who REALLY know the business
  • 34. 34 of 44 PL/PDF (1) Used for:  Procedural constructor of PDF documents  100% PL/SQL-based (source code is wrapped  )  Various extensions Info:  Commercial product (but prices are OK)  Company website: http://plpdf.com/plpdf.php  Current version: 4.1.0  Important feature: works even on XE!  Also includes PL/DOCX (but we didn’t evaluate it)
  • 35. 35 of 44 PL/PDF (2) Code sample procedure InitDefault (l_blob OUT blob) is begin -- create new doc (with default settings) and first page plpdf.Init; plpdf.NewPage(); -- set font and add text plpdf.SetPrintFont( p_family => 'Arial', -- Font family: Arial p_style => null, -- Font style: Regular p_size => 12 -- Font size: 12 ); plpdf.PrintoutText(p_x => 20,p_y => 30,p_txt => 'Hello!'); -- close document and create PDF as BLOB plpdf.SendDoc(p_blob => l_blob); end;
  • 36. 36 of 44 PL/PDF (3)  Our story:  Currently in production and used for multiple purposes: 1. Server-generated emails with attached documents 2. Highly customizable reports (where defining a single template is too difficult) 3. Transmitting sensitive information (PDFs can be encrypted and password-protected)  Very limited support of fillable fields   Overall evaluation:  Same issue as PL/JSON – significant memory footprint  Very convenient substitution of extremely complex reporting tools  Somewhat time consuming to develop because every line has to be scripted.
  • 37. 37 of 44 IText (1) Used for:  Procedural constructor of PDF documents  100% Java-based Info:  “Sort of” free (AGPL), but also there are commercial implementations (http://itextpdf.com/)  SourceForge: https://sourceforge.net/projects/itext/  Current version: 5.5.9
  • 38. 38 of 44 IText (2)  Code sample public class HelloWorldNarrow { /** Path to the resulting PDF file. */ public static final String RESULT = "results/part1/chapter01/hello_narrow.pdf"; public static void main(String[] args) throws DocumentException, IOException { // step 1 // Using a custom page size Rectangle pagesize = new Rectangle(216f, 720f); Document document = new Document(pagesize, 36f, 72f, 108f, 180f); // step 2 PdfWriter.getInstance(document, new FileOutputStream(RESULT)); // step 3 document.open(); // step 4 document.add(new Paragraph( "Hello World! Hello People! " + "Hello Sky! Hello Sun! Hello Moon! Hello Stars!")); // step 5 document.close(); } }
  • 39. 39 of 44 IText (3) Our story:  Currently in production as a part of PL/SQL-based solution (no wrapped code)  Still under AGPL (or at least that’s what I’ve been told  )  Creates PDF documents with fillable fields (in DEV)  Merges data to created PDFs (in PROD) Overall evaluation:  Very convenient and flexible  AGPL license may be a show-stopper for many organizations  Reasonably low performance impact (definitely cheaper than roundtrips to an application server)
  • 40. 40 of 44 XLSX (1) Our own solution  … yes, this time we reinvented the wheel, but:  XLSX is generic enough to be generated  All built-in computations are reasonably straightforward. Used for:  Procedural constructor of Excel reports in XLSX format (including multi-worksheet)  Also needed for reports that are wider than normal pages  100% PL/SQL-based
  • 41. 41 of 44 XLSX (2) Code sample --header dbms_lob.append(v_XML_cl,vc_style_tx); dbms_lob.append(v_XML_cl, '<Worksheet ss:Name="EA NETRES EAD REPORT"><Table> <Column ss:Width="200"/> <Column ss:StyleID="RptDetail" ss:AutoFitWidth="0" ss:Width="42" ss:Span="9"/> <Column ss:Index="12" ss:StyleID="RptDetail" ss:Width="50.25"/> <Column ss:AutoFitWidth="0" ss:Width="5.25"/> <Column ss:StyleID="RptDetail" ss:AutoFitWidth="0" ss:Width="42" ss:Span="3"/>'); --Title and Header dbms_lob.append(v_XML_cl, '<Row><Cell ss:MergeAcross="16" ss:StyleID="Title"> <Data ss:Type="String">EA NEC/EAD REPORT</Data></Cell> </Row> <Row><Cell ss:MergeAcross="16" ss:StyleID="RptDetail" > <Data ss:Type="String">Organization:'||v_org_tx||'</Data></Cell> </Row> <Row> <Cell ss:MergeAcross="11" ss:StyleID="BorderB"> <Data ss:Type="String">NEW ENLISTMENT CONTRACT STATUS</Data></Cell> <Cell ss:Index="14" ss:MergeAcross="3" ss:StyleID="BorderB"> <Data ss:Type="String">EAD STATUS</Data></Cell> </Row>'); ...
  • 42. 42 of 44 XLSX (3) Our story:  Currently in production in reporting module as alternative to PDF output (especially whenever PDF formatting would be unacceptable) Overall evaluation:  Lots of manual coding, but solved exactly what needed to be solved  Very functional because lots of people still prefer to do their own calculations in Excel (especially senior level management folks)
  • 43. 43 of 44 Summary It is possible to manage documents directly in the database  … although, it may often be counterintuitive. It is possible to have flexible reporting  … by utilizing repository-based solutions. There are even some third-party tools (commercial and free) to make your life simpler  … so you don’t need to reinvent the wheel. 
  • 44. 44 of 44 Contact Information  Paul Dorsey – paul_dorsey@dulcian.com  Michael Rosenblum – mrosenblum@dulcian.com  Website – www.dulcian.com  Misha’s blog – wonderingmisha.blogspot.com  Latest books:  Oracle PL/SQL Performance Tuning Tips & Techniques, McGraw-Hill  Oracle PL/SQL for Dummies

Notas do Editor

  1. 44