easyAsPieDB User's Guide

R&F Consulting, Inc.

Copyright

© 2012 R&F Consulting, Inc. All rights reserved. For a complete copyright notice, please see the end of this document.

Overview

Purpose

COMPLETELY customize the information this app stores and displays. (Well, cross-reference, search and create reports, too.)

A personalized to-do list. Business transactions you care about. A coin collection with images. Anything.

Features

Modern: Local first - works offline, no cloud necessary. • Encryption - your mobile data is secure from theft. • Reliable - based on SQLite, the most widely deployed database engine in the world.

A solid selection of basic data building blocks: Barcode (scan) • Number • Currency • Date • Distance (mileage) • Drawing (signature capture, signature cards, …) • Duration • Email • Image • iOS Contact (association) • Note (multi-line) • Password (hidden text) • Phone Number • Time • Text • URL (hyperlink) • Yes/No.

Supplementary data building components: Choice lists • Users Interface (UI) Glyphs (headings, line breaks, …).

Special-purpose Appliances: Location (GPS) • Time Group (time tracking) • Expense Group (expense tracking) • Mileage Group (mileage tracking).

Power-user capabilities: Calculations and Merges (user-defined Formulas). • Record cross-references - e.g., assign a known Employee to a new Time Card. • Record sharing - have multiple Records reference the same Record, e.g. multiple Orders under the same Customer. • Record composition - include Records inside other Records, e.g. an Address inside a Contact. • Record design - define Records as Types in a generic manner and reuse those Types when designing other Records.

Data Synchronization: Synchronize across multiple desktop (macOS) and mobile (iOS) devices. • Synchronize through the cloud over a wired or wireless network connection. • Zero-setup - just log your device into Apple iCloud and tap a button. • Efficient - synchronize only the data that has changed, incrementally. • Built-in data recovery - automatically detect local device or remote cloud account replacement and automatically consolidate data. • Multi-way sync support: synchronize any number of desktop and mobile devices through a single iCloud account.

“If you look at any kind of modern organization and you think, ‘What are the foremost tools of power?’ You will find that it is information.” (Ricardo Semler)

Awards

The product has been selected as an Honorable Mention (3rd-place) Winner in the “Productivity” category for an App Challenge by The Linux Foundation and Intel at the Mobile World Congress 2014.

Subscriptions

Unlimited storage capacity and features such as reporting, cloud document exchange or time, expense and mileage tracking are available for purchase in the “App Features and Local Data” subscription.

Data synchronization across multiple devices through the cloud is available for purchase in the “App Data Synchronization” subscription.

Try before you buy for as long as 14 days.

Feedback Wanted!

The easyAsPieDB project is an invitation to collaborative design. Please let us know of any suggestions for improvement you might have or any problems you run into.

Request

Please help easyAsPieDB: rate it in the App Store or write a short review for it. Thanks!

Encouragement

Notice
easyAsPieDB can be at first somewhat challenging to get to know in depth, but once understood often turns out to be surprisingly straightforward to use. Please make sure to take the time to learn the core concepts of easyAsPieDB information definition (“How easyAsPieDB Defines Information”) and information categorization (“How easyAsPieDB Categorizes Information”).

Feature List

Data Storage

Feature
• SQLite database: Atomic, Consistent, Isolated and Durable (ACID)
• transactional integrity for data safety from memory shortage or power-loss
• virtual storage implementation for rapid access and fluid scrolling through large databases on resource-constrained mobile devices

Data Security

Feature
• Apple iOS hardware encryption and device locking integration
• proactive data protection monitoring

Data Design

Feature
• Records: object-oriented, compound Types (user-defined, reusable)
• interface Glyphs (headings, line breaks, …)
• Values: basic Types
          • Barcode (scan)
          • Big Number
          • Currency
          • Date
          • Distance (mileage)
          • Drawing (signature capture, signature cards, …)
          • Duration
          • Email
          • Fractional Number
          • Image
          • iOS Contact (association)
          • Number
          • Note (multi-line)
          • Password (hidden text)
          • Phone Number
          • Time
          • Text
          • Unsigned Number
          • URL (hyperlink)
          • Yes/No
• Calculations across numeric Values (user-defined Formulas)
• Merges across textual Values (user-defined Formulas)
• Choice lists
• Composition (containment) of compound Types
• References to shared Records of a Type
          • Type collaboration (e.g., assign an Employee to a specific Time Card, …)
• special-purpose Appliances
          • Location (GPS)
          • Time Group (time tracking)
                      • Start Time
                      • End Time
                      • Duration
                      • Break
                      • Timer
          • Expense Group (expense tracking)
                      • Quantity
                      • Cost
                      • Amount
          • Mileage Group (mileage tracking)
                      • Odometer Start
                      • Odometer End
                      • Distance
• a full-fledged data design environment on a mobile device

Data Categorization

Feature
• Tables of associated Records
• a tree-like structure of Collections of unlimited depth
• nested Collections (Collections inside Collections)

Data Visualization

Feature
• support for over 40 locales (iOS) for data input and display
• customizable images for Tables
• customizable images for Collections
• inline thumbnails of Record content (Image, Drawing)
• inline toggle of Record content (Yes/No)

Data Collection - User Interface (UI)

Feature
• multi-line (configurable) Record display
• multi-level (configurable) Record sorting
• quick-entry Field Views (Date, Time, Duration, …)
• Record count -based (vertical) scroll within a Table
• Record-by-Record (horizontal) navigation within a Table
• in-list cross-management of Referenced (linked) Records
• portrait/landscape orientation support
• splitter (dual-pane) support (phablets, tablets)
• side-by-side multitasking support
• photo capture directly inside the application
• support for auto-capitalization, auto-correction and spell checking

Data Collection - Never Enter Data Twice (NED2)

Feature
• deep-copy, compound Record duplication
• reusable, persistent Templates (partial Records)

Data Review

Feature
• time-frame -based filters (date range: a day, a week, back/forward, …)
• tag -based filters (pick list: referencing a particular Record of a Type)
• text -based filters (a search bar: content matching)
• reusable, persistent Searches with textual/numeric comparison operators (Starts With, Contains, Equals, Less Than, …)

Data Reporting

Feature
• Fields: column sets
• Summary Variables: numerical value aggregation
• Groups: row association criteria
• Footers: Group summary lines
• HTML CSS styling

Data Utilization

Feature
• publish-to-HTML
• comma-separated values (CSV) export and import
• backup and restore
• cloud document exchange
• open a Field with iOS (cross-application data sharing)

Data Synchronization

Feature
• synchronization across multiple desktop (macOS) and mobile (iOS) devices
• synchronization through the cloud over a wired or wireless network connection
• zero-setup: Apple iCloud authentication only
• efficient synchronization of data that has changed only (incremental)
• built-in data recovery: automatic detection of local device or remote cloud account replacement with automatic data consolidation

How easyAsPieDB Defines Information

Types

A Type gives a name to a piece of information, in order to describe it in a way that’s easy to understand and conceptualize. For example:

Every Type requires a Label (a textual name) to describe its purpose.

Information
In desktop PC terminology, Types correspond to file types and their extensions, for example .txt for “text” files (documents) or .jpg for “image” files (graphics).

Value Types

A Value Type is the most basic, indivisible building block of information. For example:

Value Type Label Description Sample
Barcode barcode information as text 012345678901
Big Number a whole number, positive or negative (64-bit) 90210
Currency a fractional number, positive or negative, with a currency symbol $29.95
Date a date, without the time of day January 1, 2024
Duration a time interval 2 hours, 18 minutes, 5 seconds, and 100 milliseconds
Distance distance in miles or kilometers (mileage) 150mi or 250km
Drawing an editable graphical sketch, a signature, etc.
Email an email address info@rfcons.com
Fractional Number a fractional number, positive or negative 29.95
Image a graphical image: a photograph, an icon, etc.
iOS Contact a link to an iOS Address Book Contact
Number a whole number, positive or negative (32-bit) 90210
Note multi-line text
Password single-line, masked (hidden) text
Phone Number a phone number 1 800 437 7950
Time the time of day, without a particular date 9:00 AM
Text single-line text
Unsigned Number a whole number, positive, non-negative (32-bit) 90210
URL a hyperlink, such as a web site address http://www.rfcons.com
Yes/No a true-or-false choice Yes

Only one Value can be specified at a time (or there can be no value at all).

Choice Types

A Choice Type is a collection of Alternatives. An Alternative requires a Label to describe what it represents. For example:

Choice Type Label Description Alternative Label
Major Credit Card a piece of plastic from a financial company used for payments VISA
Mastercard
American Express
Expense Category a category assigned to an expense for reporting purposes Car Rental
Entertainment
Hotel

Only one Alternative can be selected at a time (or there can be no selection at all).

An important concept to understand is that you, the user of easyAsPieDB, have the freedom to define new Choice Types and the Alternatives that are valid for a particular Choice Type.

Record Types

A Record Type is the most high-level unit of information, usually something you need to keep track of. It is a collection of Fields. A Field has a particular Type (in other words, a Field is of a particular Type): a Value Type, a Choice Type, or even another Record Type. A Field also requires a Label to describe its purpose. For example:

Record Type Label Description Field Label Field Type
Contact a person with a first name and a last name First Name Text
Last Name Text
Date of Birth Date

An important concept to understand is that you, the user of easyAsPieDB, have the freedom to define new Record Types and the Fields that are expected within it.

Information
What is the difference between an Alternative (in a Choice Type) and a Field (in a Record Type)? When it comes to a Choice Type, only one Alternative can be selected. When it comes to a Record Type, all Fields can be specified at the same time.
Notice
Please note that a Type of a Field cannot be changed, once it has been assigned. You will have to delete a Field, discarding all data for that particular Field in all Records of the modified Record Type and create a new Field with a different Type.

Composition vs. Reference

An important concept to understand is that a Field in a Record Type can involve another Record Type. Thus, an important issue comes up: how should one Record Type include another Record Type, exactly? Directly, like a quotation inside a paragraph in a text document, or perhaps indirectly, like a reference to a footnote outside of a paragraph in a text document (at the bottom of a page)? There are two alternatives here: Composition (of another Record Type) and Reference (to another Record Type).

Notice
Composition vs. Reference is the only part about easyAsPieDB that is a little bit tricky. Take your time to try to understand this topic.

Composition

In Composition, a parent Record Type includes a child Record Type as an integral part of itself. For example, a Paragraph (a parent) including a Quotation (a child): it does not make sense for a Quotation to exist on its own, outside of a Paragraph (well, a Quotation would have to be on a Page or perhaps on a Cover, but it would have to be somewhere). Moreover, only one Paragraph can include the same Quotation, all other Quotations - even if identical - would have to be copies of the first one.

In Composition, a child Record Type (composed) is also called a Composed Type.

Reference

A Reference to a Record Type is an association of a parent Record Type with a child Record Type. A child Record Type is able to exist independently of a parent Record Type. For example, a Paragraph (a parent) indicating a Footnote (a child) through a superscript (a number that is set slightly above the normal line): a Footnote can exist on its own even without any Paragraphs at all. Moreover, multiple Paragraphs can point to the same Footnote.

In a Reference, a child Record Type (pointed to) is also called a Referenced Type.

Lifecycle

In Composition, the information for a child Record Type is created and discarded at the same time as the information for a parent Record Type.

In a Reference, when the information for a parent Record Type is created, the information for a child Record Type initially does not even have to exist and can be created and associated with a parent Record Type at a later time. The information for a child Record Type is able to exist independently and survives the information for a parent Record Type, if the latter is deleted.

Cardinality

In Composition, there is always one parent Record Type and one child Record Type (one-to-one correspondence).

In a Reference, multiple parent Record Types can reference the same child Record Type (many-to-one correspondence).

More Examples

Another example of Composition would be a Contact (a parent) that includes an Address (a child). It does not make sense for an Address to exist on its own, outside of a Contact (well, an Address would have to be a part of a Map Marker or perhaps a GPS Location, but it would have to be a part of something). There is always one Contact and one Address.

Record Type Label Description Field Label Field Type
Address a particular urban location Street Text
City Text
State Choice (of all valid states)
ZIP Unsigned Number
Contact a person with a first name and a last name First Name Text
Last Name Text
Mailing Address Address (through Composition)

Another example of a Reference would be an Order (a parent) that includes a Customer (a child). A Customer can exist on its own even without any Orders at all. Also, multiple Orders can involve the same Customer.

Record Type Label Description Field Label Field Type
Customer a buyer First Name Text
Last Name Text
Company Name Text
Order an order for a buyer Purchase Date Date
Order Number Unsigned Number
Payee Customer (through a Reference)
Information
It is not possible for a Record Type to include itself (as a Composed Type) or reference itself (as a Referenced Type), either directly (as an immediate child Record Type) or indirectly (as a grandchild Record Type). A parent Record Type can work only with child or grandchild Record Types that are different from itself. Otherwise, it would copy itself or would keep pointing to itself forever in an infinite loop.

Appliance Types

An Appliance Type is really just a Record Type, but with some built-in special-purpose functionality that involves its Fields, such as mobile hardware integration (e.g., getting the current GPS location) or interdependent mathematical calculations (e.g., quantity, cost and amount). For example:

Record Type Label Description Sample
Location a geolocation (GPS) group with latitude and longitude lat: 40.753597, lon: -73.983233
Time Group a time tracking group with a timer, start time, end time, duration and breaktime 9:00 AM - 5:00 PM, 8h:00m, -0:45m
Expense Group an expense tracking group with quantity, cost and amount 3 x $0.99 = $2.97
Mileage Group a mileage tracking group with odometer start, odometer end and distance 45000 - 45075 = 75mi

Glyphs

A Glyph is the most basic, indivisible building block of easyAsPieDB User Interface (UI). It is concerned with how the information is formatted and presented, rather than what that the information really is in itself. For example:

Glyph Label Description Sample
Heading a textual header for a group of Fields Authentication (a logical grouping of a Username and a Password)
Line Break a separator breaking up a long line into multiple ones Line 1
Line 2

Formulas

See Also

A Formula is a custom recipe specified by a user that describes how to create a Field using information in other Fields within the same Record. A Formula is a collection of Elements. An Element is able to not only reference another Field, but also specify a mathematical operation, contain a predefined number, etc. Each Element of a Formula is processed one by one in the order that was specified by a user to produce a Value for a Field.

A Formula can be used for a Calculation or a Merge.

Calculations

A Formula for a Calculation can be assembled from the following Elements:

Description Sample
Field a numeric (non-textual) Field within the same Record Number, Currency, …
Constant a predefined numeric (non-textual) Value 17, $1.99, …
Special Value a predefined numeric (non-textual) mathematical Value pi, epsilon, infinity
Operator a mathematical operator + (addition), - (subtraction), * (multiplication), …
Symbol a separator, a grouping marker, … a comma, parentheses, …
Mathematical Function a mathematical function avg, floor, max, …
Trigonometric Function a trigonometric function sin, cos, deg2rad, …

The result of a Calculation is always determined as a fractional, numeric (non-textual) Value. However, the Field that is supposed to receive the result of a Calculation can be of any numeric (non-textual) Value Type, for example Number or Currency. The particular choice of a Value Type used for a Field with a Calculation is called a Result Type.

Notice
The particular Result Type chosen for the Field with a Calculation determines the final Value for that Field. For example, the Calculation of “four divided by three” results in the Value of 1.333, but if the Result Type for a Field is Number (non-fractional), the Value of 1.333 has to be converted to the nearest whole (non-fractional) number: 1, discarding the fractional part: 0.333.

Arithmetic Operators

A Formula for a Calculation can specify an Operator. An Operator is a basic mathematical operation. The following Operators are supported:

Operator Description
+ addition between x and y (e.g., x + y)
- subtraction between x and y (e.g., x - y)
* multiplication between x and y (e.g., x * y)
/ division between x and y (e.g., x / y)
% modulus of x with respect to y (e.g., x % y)
^ x to the power of y (e.g., x ^ y)

Functions

A Formula for a Calculation can specify a Function. A Function is a built-in mathematical or trigonometric calculation.

A Function always takes one or more Arguments (inputs) for the calculation it performs. Function Arguments are enclosed in parentheses. Each Argument is separated by a comma.

For example, the mathematical Function abs, “an absolute value of x” can be written as “abs(x)” and takes only one Argument: the quantity to calculate an absolute value for. The mathematical Function roundn, “round x to n decimal places” can be written as “roundn(x,n)” and takes two Arguments: the quantity to round and the desired number of decimal places.

Function Description Written as Arguments Input Output
abs an absolute value of x abs(x) the quantity to calculate an absolute value for -3 3
roundn round x to n decimal places roundn(x,n) the quantity to round and the desired number of decimal places 1.333 and 2 1.330
Mathematical Functions

The following mathematical Functions are supported:

Function Description
abs absolute value of x (e.g., abs(x))
avg average of all the inputs (e.g., avg(x,y,z,w,u,v) == (x + y + z + w + u + v) / 6)
ceil smallest integer that is greater than or equal to x
clamp clamp x in range between r0 and r1, where r0 < r1 (e.g., clamp(r0,x,r1))
equal equality test between x and y using normalized epsilon
erf error function of x (e.g., erf(x))
erfc complimentary error function of x (e.g., erfc(x))
exp e to the power of x (e.g., exp(x))
expm1 e to the power of x minus 1, where x is very small (e.g., expm1(x))
floor largest integer that is less than or equal to x (e.g., floor(x))
frac fractional portion of x (e.g., frac(x))
log natural logarithm of x (e.g., log(x))
log10 base 10 logarithm of x (e.g., log10(x))
log1p natural logarithm of 1 + x, where x is very small (e.g., log1p(x))
log2 base 2 logarithm of x (e.g., log2(x))
logn base N logarithm of x. where n is a positive integer (e.g., logn(x,8))
max largest value of all the inputs (e.g., max(x,y,z,w,u,v))
min smallest value of all the inputs (e.g., min(x,y,z,w,u))
mul product of all the inputs (e.g., mul(x,y,z,w,u,v,t) == (x * y * z * w * u * v * t))
ncdf normal cumulative distribution function (e.g., ncdf(x))
nequal not-equal test between x and y using normalized epsilon
pow x to the power of y (e.g., pow(x,y) == x ^ y)
root nth-Root of x. where n is a positive integer (e.g., root(x,3) == x^(1/3))
round round x to the nearest integer (e.g., round(x))
roundn round x to n decimal places (e.g., roundn(x,3)) where n > 0 and is an integer (e.g., roundn(1.2345678,4) == 1.2346)
sgn sign of x, -1 where x < 0, +1 where x > 0, else zero (e.g., sgn(x))
sqrt square root of x, where x >= 0 (e.g., sqrt(x))
sum sum of all the inputs (e.g., sum(x,y,z,w,u,v,t) == (x + y + z + w + u + v + t))
trunc integer portion of x (e.g., trunc(x))
Trigonometric Functions

The following trigonometric Functions are supported:

Function Description
acos arc cosine of x expressed in radians. Interval [-1,+1] (e.g., acos(x))
acosh inverse hyperbolic cosine of x expressed in radians (e.g., acosh(x))
asin arc sine of x expressed in radians. Interval [-1,+1] (e.g., asin(x))
asinh inverse hyperbolic sine of x expressed in radians (e.g., asinh(x))
atan arc tangent of x expressed in radians. Interval [-1,+1] (e.g., atan(x))
atan2 arc tangent of (x / y) expressed in radians. [-pi,+pi] (e.g., atan2(x,y)
atanh inverse hyperbolic tangent of x expressed in radians (e.g., atanh(x))
cos cosine of x (e.g., cos(x))
cosh hyperbolic cosine of x (e.g., cosh(x))
cot cotangent of x (e.g., cot(x))
csc cosecant of x (e.g., csc(x))
sec secant of x (e.g., sec(x))
sin sine of x (e.g., sin(x))
sinc sine cardinal of x (e.g., sinc(x))
sinh hyperbolic sine of x (e.g., sinh(x))
tan tangent of x (e.g., tan(x))
tanh hyperbolic tangent of x (e.g., tanh(x))
hypot hypotenuse of x and y (e.g., hypot(x,y) = sqrt(xx + yy))
iclamp inverse-clamp x outside of the range r0 and r1. Where r0 < r1. If x is within the range it will snap to the closest bound (e.g., iclamp(r0,x,r1)
inrange in-range returns ‘true’ when x is within the range r0 and r1. Where r0 < r1 (e.g., inrange(r0,x,r1)
deg2rad convert x from degrees to radians (e.g., deg2rad(x))
deg2grad convert x from degrees to gradians (e.g., deg2grad(x))
rad2deg convert x from radians to degrees (e.g., rad2deg(x))
grad2deg convert x from gradians to degrees (e.g., grad2deg(x))

A Basic Formula

For example, the Formula “take a quantity and multiply it by two” can be written as “Fractional Number * 2” and can be broken down into individual Elements as follows:

Element Description
Fractional Number Field a Field within the same Record
* Operator a mathematical operation (multiplication)
2.000 Constant a number

The Formula above would be processed in the following manner:

Element Input Output
Fractional Number 0.123
*
2.000 0.246

The input of 0.123 would result in the calculated output of 0.246.

An Advanced Formula

For example, the Formula “round a quantity to just one decimal place and add the number two to the result” can be written as “roundn(Fractional Number, 1.000) + 2.000” and can be broken down into individual Elements as follows:

Element Description
roundn Mathematical Function round a quantity to a number of decimal places
( Symbol a grouping marker
Fractional Number Field a Field within the same Record
, Symbol a separator
1.000 Constant the number of decimal places for rounding
) Symbol a grouping marker
+ Operator a mathematical operation (addition)
2.000 Constant a number

The Formula above would be processed in the following manner:

Element Input Output
roundn
(
Fractional Number 0.333
,
1.000
) 0.300
+
2.000 2.300

The input of 0.333 would result in the calculated output of 2.300.

Sample Formulas
Formula
sqrt(1 - (3 / x^2))
clamp(-1, sin(2 * pi * x) + cos(y / 2 * pi), +1)
sin(2.34e-3 * x)
inrange(-2,m,+2)
a * exp(2.2 / 3.3 * t) + c
x + sin(2.567 * pi / y)
2.123 * {pi * z} / (x + cos(y / pi))
2x + 3y + 4z + 5w
2 * x + 3 * y + 4 * z + 5 * w
3(x + y) / 2.9 + 1.234e+12
3 * (x + y) / 2.9 + 1.234e+12
(x + y)3.3 + 1 / 4.5
[x + y] * 3.3 + 1 / 4.5
(x + y[i])z + 1.1 / 2.7
(x + y[i]) * z + 1.1 / 2.7
(sin(x / pi) cos(2y) + 1)
(sin(x / pi) * cos(2 * y) + 1)
75x^17 + 25.1x^5 - 35x^4 - 15.2x^3 + 40x^2 - 15.3x + 1

Merges

A Formula for a Merge can be assembled from the following Elements:

Description Sample
Field a textual (non-numeric) Field within the same Record Text, Email, …
Text a predefined textual (non-numeric) Value “Today”, “@”, …
Information
Any Field can be used for a Merge Formula by being automatically converted to Text. For example, a Date Field will be converted to “day - month - year” (in the appropriate date format), a Time Field will be converted to “hour : minute” (in the appropriate time format), etc.

The result of a Merge is always determined as a textual (non-numeric) Value. The Field that is supposed to receive the result of a Merge has to be of the Value Type of Text. The Value Type used for a Field with a Merge is called a Result Type.

A Basic Formula

For example, the Formula “merge three Fields with custom separators in between” can be broken down into individual Elements as follows:

Element Description
Text a Field within the same Record
@ a separator
Date a Field within the same Record
, a separator
Time a Field within the same Record

The Formula above would be processed in the following manner:

Element Input Output
Text Record #1 Record #1
@ Record #1 @
Date 01/01/2024 Record #1 @ 01/01/2024
, Record #1 @ 01/01/2024,
Time 9:00 AM Record #1 @ 01/01/2024, 9:00 AM

The input of “Record #1”, “01/01/2024” and “9:00 AM” would result in the merged output of “Record #1 @ 01/01/2024, 9:00 AM”.

How easyAsPieDB Categorizes Information

Concepts

easyAsPieDB merges concepts well-known from the world of databases, such as Records, Fields and Tables, with concepts well-known from desktop computing, such as Collections. The notion of a Type (as described in the “How easyAsPieDB Defines Information” section) serves as “glue” across all those ideas.

Records

Just like a Record Type, a Record is also the most high-level unit of information, usually something you need to keep track of. It is a collection of Fields.

Record Types vs. Records

An important concept to understand is that a Record Type (information definition) is not the same thing as an actual Record (information content). The former represents what information can be stored in general; the latter represents the information that is stored in particular.

For example, if a Record Type (information definition) includes a Field labeled “Date of Birth” that is supposed to be a Date, then it is not possible for a Record (information content) to include, for example, Text for that Field instead:

Description Field Label Sample
Record Type information definition Date of Birth Date
Record information content Date of Birth January 1, 1984
Record invalid information content Date of Birth probably in nineteen eighty-four

If an explicit distinction has to made between the two, a Type of a Record is called a Record Type and an occurrence of a Record is called a Record instance.

Values

The information content that has been stored in a Field of a Record is also called a Value. A Field can include an appropriate Value, but does not have to; in that case, a Field is said to be “empty” or “undefined”.

Tables

A Table is a container. It is a collection of Records, every Record of the same Record Type. For example:

Description Field Label Sample
Record information content #1 First Name George
Last Name Williams
Record information content #2 First Name Kristy
Last Name Abercrombie

It is possible (and often preferred) to create more than one Table for Records of the same Record Type, for example:

Record Type Label Description Table Label
Table Contact personal information collection Family
Table Contact business information collection Customers

Collections

A Collection is also a container. It is a collection of Tables or other Collections. It is a cataloging structure analogous to the traditional office filing cabinet. For example:

Record Type Label Description Collection Label Table Label
Table Contact personal information collection #1 Private Family
Table Contact personal information collection #2 Private Friends
Table Contact business information collection #1 Business Customers
Table Contact business information collection #2 Business Coworkers
Information
Both Tables and Collections are called Containers, since both are used to contain and categorize information.
Information
In desktop PC terminology, Collections correspond to “directories” and Tables correspond to “documents”. Records in a Table can be thought of as “sentences” in a text document. Fields in a Record can be thought of as “words” in a sentence.

Subcollections

An important concept to understand is that Collections can contain not only Tables, but also nested Collections. Effectively, the Collections-inside-Collections capability allows for an in-depth, tree-like structure of information. For example:

[Home]
├── [Private]
│  ├── [Accounts]
│  │  ├── Banking
│  │  └── Credit Cards
│  │
│  └── [Contacts]
│    ├── Family
│    └── Friends
├── [Business]
│  └── [Contacts]
│    ├── Customers
│    └── Coworkers

Nested Collections, thus Collections-inside-Collections, are also called Subcollections.

Why Even Bother to Define Types?

Most conventional database or spreadsheet software products do not define Types, but only introduce the notion of a manual table. If you want to work with, for example, Contacts, you have to create a manual table with appropriate columns, such as a “First Name”, a “Last Name” and so on. So far the process is analogous to the way easyAsPieDB works, but easyAsPieDB defines a Record Type with Fields, rather than a manual table with columns. A Record Type is used to create a managed Table with Records for that particular Record Type.

If you wish to maintain a secondary list of Contacts with a conventional database or spreadsheet software product, you have to create another manual table and go through the process of adding all the appropriate columns all over again. Not so with easyAsPieDB: since you already defined an appropriate Record Type for Contacts, all you need to do is create a secondary managed Table with the same Record Type. Everything else happens automatically.

Some conventional database or spreadsheet software products do allow a user to predefine a blueprint for a manual table and automatically create new manual tables from such a blueprint. However, what if you need to augment the layout of the information that’s already there, for example by adding a new “Birthday” column to your Contacts? In a conventional database or spreadsheet software product, you need to edit every one of your manual tables one by one to add that new column everywhere. Not so with easyAsPieDB: since you already defined an appropriate Record Type for Contacts, all you need to do is add a new Field to that single Record Type itself. All your managed Tables for that Record Type, even if there is a hundred of them, will be updated automatically.

How easyAsPieDB Works With Information

Searches

A Search is a Record pre-filled by a user that describes a comparison (in other words, a query) against other, existing Records. It is a collection of Fields. Each Field of a Search includes an Operator and a Value. An Operator describes how exactly to perform a comparison. A Value is the content to compare against. For example:

Field Type Operator Value Description Matches
Date Today test whether a Field matches the current date the current date
Time At 9:00 AM test whether a Field is exactly the same as the specified Value 9:00 AM
Text Matching bar test whether a Field is exactly the same as the specified Value bar
Text Containing bar test whether a Field includes the specified Value as a substring barn, embargo, toolbar, …
Number Greater Than 100 test whether a Field is greater than the specified Value 101, 911, 65535, …

When searching:

Templates

A Template is a Record pre-filled by a user, out of which new Records can be created quickly. When creating a new Record from a Template (as opposed to creating a new, blank Record), not only a new Record gets created, but also all the information already available in a Template is automatically copied into the new Record, before that Record is presented to a user for further modification. For example:

Record Type Label Template Label Field Label Field Type Sample
Time Tracking My Typical Workday Start Time Time 9:00 AM
End Time Time 5:00 PM
Break Duration 1h:00m

When creating a new Record for the Time Tracking Record Type, you can either:

or:

Templatability

There might be situations when a particular Field in a Record is never particularly useful when creating a Template, since that Field is supposed to always contain unique data. For example:

Record Type Label Field Label Sample
Order Order Number 25703

When each and every Record of the Order Record Type is supposed to have a unique “Order Number”, it is never useful to have a pre-defined “Order Number” copied in automatically.

The Templatability attribute for a Field in a Record Type indicates whether that particular Field is relevant when creating a Template. When marked as “no” (false), a Field is altogether hidden away when creating a Template.

Reports

Please see the “How easyAsPieDB Reports Information” section.

How easyAsPieDB Presents Information

Views

easyAsPieDB presents different Views depending on the nature of information a user is working with at the moment. For example:

Content View
Tables and Collections Containers View
Record Types and Choice Types Types View
Records Records View

Each View consists of a top navigation bar, an item list (or other visual representation of information) in the middle and an optional toolbar at the bottom.

Views of Containers

Containers View

Path

the very first (root) View

Purpose

The Containers View is concerned with multiple Containers: Tables and Collections. It presents a list of available Containers. It allows for information categorization (see “How easyAsPieDB Categorizes Information”).

Actions

Containers

The Containers View supports two distinct modes of operation: the viewing mode and the editing mode. Each mode of operation allows for different actions.

Viewing Mode
Name Purpose Location
Back move back to the last viewed Collection navigation bar
Edit/Done switch the list of Containers across the viewing mode and the editing mode navigation bar
New navigation bar
Type create a new Record Type
Collection create a new Collection
Table create a new Table
Record Types select present a subsequent Types View and show available Types of information (filtered for Record Types) item list
Choice Types select present a subsequent Types View and show available Types of information (filtered for Choice Types) item list
Collection select drill down into a Collection and show Tables and Collections inside it item list
Table select present a subsequent Records View and show Records inside the Table item list
Home move to the topmost (root) Collection toolbar
Find toolbar
Text find Containers by Text (i.e., Container names or content inside Containers)
Reset reset search, show all Containers
Editing Mode
Name Purpose
Delete delete a Container: a Collection or a Table
Collection select present a subsequent Collection View and edit Collection attributes (e.g., a Label)
Table select present a subsequent Table View and edit Table attributes (e.g., an icon)
App
Name Purpose Location
Help toolbar
User’s Guide display a User’s Guide
Contact Us send a message to support
Rate in the App Store rate easyAsPieDB in the App Store
Tools toolbar
About present a subsequent About View and show app version
Backup backup your data to the cloud
Restore restore your data from the cloud
Synchronize synchronize data across multiple devices through the cloud
Subscriptions show license information, purchase extended app functionality
Settings present a subsequent Settings View and customize app settings

Collection View

Path

Containers View (the "New" Collection or "Edit" Collection action) >>
    Collection View

See Also

Purpose

The Collection View is concerned with a single Collection. It presents an editable list of Attributes of a Collection. It allows for Container modification.

Attributes

Name Description
Label a Label to describe a Collection (e.g., “Private”, “Business”, etc.)
Icon an icon to use for a Collection in the Containers View

Table View

Path

Containers View (the "New" Table or "Edit" Table action) >>
    Table View

See Also

Purpose

The Table View is concerned with a single Table. It presents an editable list of Attributes of a Table. It allows for Container modification.

Attributes

Name Description
Label a Label to describe a Table (e.g., “Family”, “Customers”, etc.)
Record Type a Record Type for Records stored in a Table - present a subsequent Type picker View and show a list of all available Record Types (e.g., Contact, Customer, Order, etc.)
Icon an icon to use for a Table in the Containers View
Information
When defining a Table, only Record Types can be used for its Type. Other groups of Types (Value Types, Choice Types and Appliance Types) are not available in the Type picker View, since Tables are supposed to store entire Records only. However, Records can further include individual Values, Choices and Appliances inside them.

Views of Types

Types View

Path

Containers View (the "Record Types" or "Choice Types" action) >>
    Types View

Purpose

The Types View is concerned with multiple Types: Record Types and Choice Types. It presents a list of available Types. It allows for information definition (see “How easyAsPieDB Defines Information”).

Actions

The Types View supports only one mode of operation: the editing mode. Editing can occur across two groups of Types: Record Types and Choice Types.

Editing Mode
Name Purpose Location
New create a new Type for the current Type group: a Record Type or a Choice Type navigation bar
Record/Choice switch the list of Types across Type groups: Record Types and Choice Types segmented control
Delete delete a Type: a Record Type or a Choice Type item list
Record Type select present a subsequent Record Type View and edit Record Type attributes (e.g., Fields) item list
Choice Type select present a subsequent Choice Type View and edit Choice Type attributes (e.g., Alternatives) item list
Information
To create a new Table for a particular Record Type (as opposed to creating a new Record Type), use the “New >> Table” action in the Containers View and select the desired Record Type for the new Table’s “Record Type” attribute.

Record Type View

Path

Containers View (the "Record Types" action) >>
    Types View (the "Record" group, the "New" or "Edit" action) >>
        Record Type View

See Also

Purpose

The Record Type View is concerned with a single Record Type. It presents an editable list of Attributes of a Record Type. It allows for information definition.

Attributes

Name Description
Label a Label to describe a Record Type (e.g., Contact)
Fields present a subsequent Record Type Fields View and show the Fields defined for a Record Type
Display As the Field to use when displaying a child Record inside a parent Record (e.g., a “Last Name” for a Contact displayed inside a Time Tracking ticket)

Record Type Fields View

Path

Containers View (the "Record Types" action) >>
    Types View (the "Record" group, the "New" or "Edit" action) >>
        Record Type View (the "Fields" attribute) >>
            Record Type Fields View

See Also

Purpose

The Record Type Fields View is concerned with multiple Fields of a Record Type. It presents an editable list of Fields of a Record Type. It allows for information definition.

Actions

Name Purpose Location
New present a subsequent Record Type Field View and create a new Field for a Record Type navigation bar
Field select present a subsequent Record Type Field View and edit Field attributes (e.g., a Label) for a Record Type item list

Record Type Field View

Path

Containers View (the "Record Types" action) >>
    Types View (the "Record" group, the "New" or "Edit" action) >>
        Record Type View (the "Fields" attribute) >>
            Record Type Fields View (the "New" or "Edit" action) >>
                Record Type Field View

See Also

Purpose

The Record Type Field View is concerned with a single Field of a Record Type. It presents an editable list of Attributes of a Field. It allows for information definition.

Attributes

Name Description
Label a Label to describe a Field (e.g., a “First Name” in a Contact)
Type a Type stored in a Field - present a subsequent Type picker View and show a list of all available Types (Value Types, Choice Types, Record Types, Appliance Types, etc.)
Templatable an indicator whether a Field should be available when creating a Template

Choice Type View

Path

Containers View (the "Choice Types" action) >>
    Types View (the "Choice" group, the "New" or "Edit" action) >>
        Choice Type View

See Also

Purpose

The Choice Type View is concerned with a single Choice Type. It presents an editable list of Alternatives of a Choice Type. It allows for information definition.

Attributes

Name Description
Label a Label to describe a Choice Type (e.g., a Credit Card)
Alternatives present a subsequent Choice Type Alternatives View and show the Alternatives defined for a Choice Type (e.g., “VISA”, “Mastercard”, etc.)

Views of Records

Records View

Path

Containers View (select a Table) >>
    Records View

Purpose

The Records View is concerned with multiple Records. It presents a list of Records available in a Table. It allows for information search and review.

Actions

Name Purpose Location
New create a new, empty Record navigation bar
Record select present a subsequent Record View and preview the chosen Record item list
Find toolbar
Text find Records by Text
Date Range find Records by date range
References To… find Records that reference (point to) a particular Record
Reset reset search, show all Records
Searches present a subsequent Searches View and show a list of Searches toolbar
Templates present a subsequent Templates View and show a list of Templates toolbar
Reports present a subsequent Reports View and show a list of Reports toolbar
Share toolbar
Publish (HTML) render Records in the HTML format and Open (view) or Save
Export (CSV) convert Records to the CSV format and Open (view) or Save
Import (CSV) convert data in the CSV format to Records
Options present a subsequent Options View and customize View display options toolbar
Information
To edit or delete an existing Record, either: 1.) use the swipe-from-right-to-left gesture on a particular Record along with the revealed “Edit” or “Delete” actions, or: 2.) select a Record in the Records View list to open it in a subsequent Record View and use the “Edit” or “Delete” actions in the bottom toolbar.

Record View

Path

Containers View (select a Table) >>
    Records View (select a Record) >>
        Record View

See Also

Purpose

The Record View is concerned with a single Record. It presents a read-only list of Fields available in a Record. It allows for information preview.

Actions

Name Purpose Location
Edit present a subsequent Fields View and show editable Fields of a Record navigation bar
Duplicate duplicate a Record toolbar
Delete delete a Record toolbar
Move Previous show the previous Record in the current Table toolbar
Move Next show the next Record in the current Table toolbar
Options present a subsequent Options View and customize View display options toolbar

Fields View

Path

Containers View (select a Table) >>
    Records View (select a Record) >>
        Record View (the "Edit" action) >>
            Fields View

See Also

Purpose

The Fields View is concerned with multiple Fields of a Record to be modified. It presents an editable list of Fields available in a Record. It allows for information preview or modification.

Depending on the Type of a Field, the Fields View allows for immediate, inline information editing (e.g., for Text) or will present a subsequent Field View for information modification (e.g., a calendar for a Date).

Actions

Name Purpose Location
Field select present a subsequent Field View and show the relevant Value of a Field item list

Field View

Path

Containers View (select a Table) >>
    Records View (select a Record) >>
        Record View (the "Edit" action) >>
            Fields View (select a Field) >>
                Field View

See Also

Purpose

The Field View is concerned with a single Field of a Record to be modified. It presents an editable View of a Field. It allows for information modification.

Depending on the Type of a Field, the Field View shows information-specific View and offers content-specific actions. For example:

Field Type View Sample Action
Date a calendar set to today’s date
Image an image preview take a photo with a built-in camera
Reference a list of Records available to be selected select a Record to reference

Actions

Name Purpose Location
Clear clear the current Value of a Field toolbar

Views of Resources

Resources View

Path

Containers View (select a Table) >>
    Records View (select the Find >> Advanced, Templates, or Reports action) >>
        Resources View

See Also

Purpose

The Resources View is concerned with multiple Resources: Searches, Templates, or Reports. It presents a list of available Resources. It allows for information utilization.

Actions

The Resources View supports two distinct modes of operation: the viewing mode and the editing mode. Each mode of operation allows for different actions.

Viewing Mode
Name Purpose Location
Close close the View navigation bar
Edit/Done switch the list of Resources across the viewing mode and the editing mode navigation bar
New navigation bar
Searches create a new Search
Templates create a new Template
Reports create a new Report
Resource select item list
Searches execute a Search, go back to the previous Records View and show matching Records item list
Templates copy a Template into a new Record, present a subsequent Fields View and show editable Fields of the new Record item list
Reports generate a Report from all Records in the previous Records View and show it in a subsequent Report View item list
Editing Mode
Name Purpose
Delete delete a Resource: a Search, a Template, or a Report
Resource select
Searches present a subsequent Search View and edit Search attributes (e.g., a Label)
Templates present a subsequent Template View and edit Template attributes (e.g., a Label)
Reports present a subsequent Report View and edit Report attributes (e.g., a Label)

How easyAsPieDB Reports Information

To generate a Report, choose the “Bar Chart” icon in the Records View toolbar.

Reports

A Report presents a tabular View built from information across multiple Records.

A Report is created for all Records currently visible in the Records View. Records View contents can be chosen using broad filters or precise queries (the “Magnifying Glass” icon in the Records View toolbar).

Report Attributes

A Report is defined by a set of attributes.

Fields

A list of chosen Fields of a Record. Each Field corresponds to a column in a Report. For example:

Sample Records:

Field Label Sample
Record #1 First Name George
Last Name Williams
Record #2 First Name Kristy
Last Name Abercrombie

A sample report:

First Name Last Name
George Williams
Kristy Abercrombie

Sum Variables

A list of chosen numeric Fields of a Record. Each Field creates a separate Sum Variable. Each Sum Variable is a sum of all Values in one column of a Report. For example:

Sample Records:

Field Label Sample
Record Order Number 1
Amount $1.00
Record Order Number 2
Amount $2.00

A sample report with a Sum Variable defined for the “Amount” Field:

Order Number Amount
1 $1.00
2 $2.00
Sum Variable $3.00

A Sum Variable created for the “Amount” Field accumulates all “Amount” Values for all Records processed.

Data Lines

A Yes/No choice that shows or hides individual Data Lines (rows) in a Report. Each Data Line corresponds to one Record. For example:

Sample Records:

Field Label Sample
Record Order Number 3
Amount $3.00
Record Order Number 4
Amount $4.00

A sample report with a Sum Variable defined for the “Amount” Field, with Data Lines:

Order Number Amount
Data Line 3 $3.00
Data Line 4 $4.00
Sum Variable $7.00

A sample report with a Sum Variable defined for the “Amount” Field, but without Data Lines:

Amount
Sum Variable $7.00

Only the Value of a Sum Variable is visible, while all individual Data Lines are hidden.

Groups (Levels 1-5)

A list of chosen Fields of a Record. All Fields together define criteria for a Group, which serves as its unique “signature”. All Records with the same “signature” (thus the same set of matching Fields) are brought together into the same Group. For example:

Sample Records:

Field Label Sample
Record Borough Manhattan
City New York
Country USA
Record Borough Brooklyn
City New York
Country USA
Record Borough Metro
City Albany
Country USA

Sample Groups, defined across the “City” and “Country” Fields:

City Country Group Signature Number of Records
New York USA “New York+USA” 2
Albany USA “Albany+USA” 1

Grouping can be nested at multiple Levels, thus creating Groups and Subgroups. Up to five (5) Levels can be defined.

Group Footers

A Yes/No choice that shows or hides Group Footer rows in a Report. Each unique Group Footer corresponds to one Group. For example:

Sample Records:

Field Label Sample
Record Borough Manhattan
City New York
Country USA
Population 1,628,706
Record Borough Brooklyn
City New York
Country USA
Population 2,504,701
Record Borough Metro
City Albany
Country USA
Population 1,170,483

A sample report with a Group defined across the “City” and “Country” Fields, a Sum Variable defined for the “Population” Field, with Group Footers and with Data Lines:

Borough City Country Population
Manhattan New York USA 1,628,706
Brooklyn New York USA 2,504,701
Group Footer New York USA 4,133,407
Metro Albany USA 1,170,483
Group Footer Albany USA 1,170,483

Report Design

Detail Reports

To create a Detail -style Report, choose one or more Fields to create columns. Set Data Lines to “Yes” to create rows from individual Records. (Sum Variables, Groups and Group Footers are optional.)

Summary Reports

To create a Summary -style Report, choose one or more Sum Variables to create columns. Set Data Lines to “No” to hide data from individual Records. Specify one or more Groups and set Group Footers to “Yes” to create rows from Groups of Records. (Fields are optional.)

Report Styling

The look and feel of a Report can be customized through its “CSS Style” attribute (HTML Cascading Style Sheets). For a list of available CSS properties, have a look at the output produced by the “Default [CSS]” action in the “CSS Style” Field View toolbar.

Common easyAsPieDB Tasks

The goal of this section is to: 1.) create a new Record Type representing a sample Contact, 2.) create a new Table for the Contact Record Type to hold Records, 3.) create a new Record for the Contact Record Type inside the new Table.

Sample “Contact” Record Type

Description Field Label Field Type Sample
Field a first name First Name Text George
Field a last name Last Name Text Williams
Field a date of birth Date of Birth Date January 1, 2024
Field a formatted Social Security number Social Security Text 123-45-6789

Create a New Record Type

Before proceeding, make sure to navigate to the Containers View, the very first (root) View within easyAsPieDB.

Step by Step

View Action Description
1. Containers View select the “Record Types” item line in the list opens the Types View
2. Types View select the “Plus” icon in the navigation bar creates a new Record Type
3. Record Type View specify the “Label” item, e.g. “Contact” stores a name for the new Record Type
4. Record Type View select the “Fields” item opens the Fields View
5. Fields View select the “Plus” icon in the navigation bar creates a new Field
6. “New…” View select the “Text (Value)” item line in the list chooses the Text (Value Type) for the new Field
7. Field View specify the “Label” item, e.g. “First Name” stores a name for the new Field
8. Field View choose the “Save” button in the navigation bar
View Action Description
9. Fields View choose the left arrow (chevron) icon in the navigation bar
10. Record Type View select the “Display As” item opens the Display As View
11. Display As View select the “First Name” item line in the list closes the View automatically
12. Record Type View choose the “Save” button in the navigation bar
13. Types View choose the “Close” button in the navigation bar

A new Record Type has been created. You can now create a new Table to hold Records for the Contact Record Type, as described below.

Create a New Table for a Record Type

Before proceeding, make sure to have already created a new Contact Record Type, as described above.

Step by Step

View Action Description
1. Containers View choose the “Plus” icon in the navigation bar creates a new Container
2. “New…” View select the “Table” item line in the list creates a new Table (vs. a Collection)
3. Record Type View select the Contact item line in the list closes the View automatically
4. Table View enter a name for the Table in the “Label” item, e.g. “Friends”
5. Table View choose the “Save” button in the navigation bar

A new Table has been created. You can now create a new Record inside the new Table, as described below.

Create a New Record for a Record Type

Before proceeding, make sure to have already created a new “Friends” Table, as described above.

Step by Step

View Action Description
1. Containers View select the “Friends” item line in the list opens the Table
2. Records View choose the “Plus” icon in the navigation bar creates a new Record
3. Fields View enter a first name in the “First Name” Field, e.g. “George”
4. Fields View enter a last name in the “Last Name” Field, e.g. “Williams”
5. Fields View select the “Date of Birth” Field opens the Field View
6. Field View select a date in a calendar, e.g. “January 1, 2024”
7. Field View select the left back (chevron) icon in the navigation bar
8. Fields View enter a Social Security number in the “Social Security” Field, e.g. “123-45-6789”
9. Fields View choose the “Save” button in the navigation bar

A new Record has been created. You can now create a new Report, see “How easyAsPieDB Reports Information”.

Support

For technical support, please visit the R&F Consulting, Inc. web site at http://www.rfcons.com.

Copyright

The information contained in this document represents the current view of R&F Consulting, Inc. on the issues discussed as of the date of publication. Because R&F Consulting, Inc. must respond to changing market conditions, it should not be interpreted to be a commitment on the part of R&F Consulting, Inc., and R&F Consulting, Inc. cannot guarantee the accuracy of any information presented after the date of publication.

This Guide is for informational purposes only. R&F CONSULTING, INC. MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS DOCUMENT.

Complying with all applicable copyright laws is the responsibility of the user. Without limiting the rights under copyright, no part of this document may be reproduced, stored in or introduced into a retrieval system, or transmitted in any form or by any means (electronic, mechanical, photocopying, recording, or otherwise), or for any purpose, without the express written permission of R&F Consulting, Inc.

R&F Consulting, Inc. may have patents, patent applications, trademarks, copyrights, or other intellectual property rights covering subject matter in this document. Except as expressly provided in any written license agreement from R&F Consulting, Inc., the furnishing of this document does not give you any license to these patents, trademarks, copyrights, or other intellectual property.

Unless otherwise noted, the example companies, organizations, products, domain names, e-mail addresses, logos, people, places and events depicted herein are fictitious, and no association with any real company, organization, product, domain name, email address, logo, person, place or event is intended or should be inferred.

© 2012 R&F Consulting, Inc. All rights reserved.

The names of actual companies and products mentioned herein may be the trademarks of their respective owners.