SlideShare a Scribd company logo
A Divine Data Comedy Mike Harris
–Dante (tr. Longfellow), Inferno

Canto I, Lines 1-3
Midway upon the journey of our life

I found myself within a forest dark,

For the straightforward pathway had been lost.
Canto
• Data Flow in a System
• The Language of Data Flow Manipulations
• Data Flow in Context
Canto
• Data Flow in a System
• The Language of Data Flow Manipulations
• Data Flow in Context
Example Data Set
create table stock_price (
symbol varchar(5) not null
,price_date date not null
,price money not null
);
insert into stock_price
(symbol, price_date, price)
values
('ZVZZT', '2017-01-03', 10.02)
,('CBO' , '2017-01-03', 18.99)
,('ZVZZT', '2017-01-04', 9.99)
,('CBO' , '2017-01-04', 19.01)
;
Example Data Set
Symbol Price Date Price
ZVZZT 2017-01-03 10.02
CBO 2017-01-03 18.99
ZVZZT 2017-01-04 9.99
CBO 2017-01-04 19.01
SQL Statement
select symbol, price
from stock_price
where symbol = 'ZVZZT'
order by price_date
;
Symbol Price Date Price
ZVZZT 2017-01-03 10.02
ZVZZT 2017-01-04 9.99
Logical Order of a T-SQL Statement
1. FROM
2. ON
3. JOIN
4. WHERE
5. GROUP BY
6. WITH ROLLUP
7. HAVING
8. SELECT
9. DISTINCT
10.ORDER BY
11.TOP
Logical Order of a T-SQL Statement
1. FROM
2. ON
3. JOIN
4. WHERE
5. GROUP BY
6. WITH ROLLUP
7. HAVING
8. SELECT
9. DISTINCT
10.ORDER BY
11.TOP
Extract
Aggregate
Map
Filter
Order
Logical Order of a T-SQL Statement
1. FROM
2. ON
3. JOIN
4. WHERE
5. GROUP BY
6. WITH ROLLUP
7. HAVING
8. SELECT
9. DISTINCT
10.ORDER BY
11.TOP
SQL Statement Data Flow
from where select
order

by
SQL Statement
select symbol, price
from stock_price
where symbol = 'ZVZZT'
order by price_date
;
Symbol Price Date Price
ZVZZT 2017-01-03 10.02
ZVZZT 2017-01-04 9.99
2
1
3
4
Folded SQL
Folded SQL Statement
select max(price_date) as price_date
from stock_price
;
Price Date
2017-01-04
Logical Order of a T-SQL Statement
1. FROM
2. ON
3. JOIN
4. WHERE
5. GROUP BY
6. WITH ROLLUP
7. HAVING
8. SELECT
9. DISTINCT
10.ORDER BY
11.TOP
Folded SQL Statement Data Flow
from select max
Folded SQL Statement
select max(price_date) as price_date
from stock_price
;
Price Date
2017-01-04
1
2
Group By Folded SQL
Group By Folded SQL Statement
select
symbol
,max(price_date) as price_date
from stock_price
group by symbol
;
Symbol Price Date
CBO 2017-01-04
ZVZZT 2017-01-04
Logical Order of a T-SQL Statement
1. FROM
2. ON
3. JOIN
4. WHERE
5. GROUP BY
6. WITH ROLLUP
7. HAVING
8. SELECT
9. DISTINCT
10.ORDER BY
11.TOP
Group By Folded SQL Statement Data Flow
from
group

by
select max
Group By Folded SQL Statement
select
symbol
,max(price_date) as price_date
from stock_price
group by symbol
;
Symbol Price Date
CBO 2017-01-04
ZVZZT 2017-01-04
2
1
3
Window Folded SQL
Window Folded SQL Statement
select distinct
symbol
,max(price_date) over(
partition by symbol) as price_date
from stock_price
;
Symbol Price Date
CBO 2017-01-04
ZVZZT 2017-01-04
Logical Order of a T-SQL Statement
1. FROM
2. ON
3. JOIN
4. WHERE
5. GROUP BY
6. WITH ROLLUP
7. HAVING
8. SELECT
9. DISTINCT
10.ORDER BY
11.TOP
Window SQL Statement Data View
max(price_date) over(
partition by symbol) as price_date
Symbol Price_Date
CBO 2017-01-03
CBO 2017-01-04
Price_Date
2017-01-04
2017-01-04
Window SQL Statement Data Flow
from select window max distinct
Window Folded SQL Statement
select distinct
symbol
,max(price_date) over(
partition by symbol) as price_date
from stock_price
;
Symbol Price Date
CBO 2017-01-04
ZVZZT 2017-01-04
1
2
Window SQL
Window SQL Statement
select
symbol
,price
,lag(price, 1) over (
partition by symbol
order by price_date) as prev_price
,price - lag(price, 1) over (
partition by symbol
order by price_date) as price_change
,lead(price, 1) over (
partition by symbol
order by price_date) as next_price
from stock_price
;
Window SQL Statement
Symbol Price prev_price price_change next_price
CBO 18.99 (null) (null) 19.01
CBO 19.01 18.99 0.02 (null)
ZVZZT 10.02 (null) (null) 9.99
ZVZZT 9.99 10.02 -0.03 (null)
Window SQL Statement Data View
lag(price, 1) over (

partition by symbol

order by price_date) as prev_price
Symbol Price_Date Price
CBO 2017-01-03 18.99
CBO 2017-01-04 19.01
prev_price
(null)
18.99
Window SQL Statement Data View
lead(price, 1) over (

partition by symbol

order by price_date) as next_price
Symbol Price_Date Price
CBO 2017-01-03 18.99
CBO 2017-01-04 19.01
next_price
19.01
(null)
Logical Order of a T-SQL Statement
1. FROM
2. ON
3. JOIN
4. WHERE
5. GROUP BY
6. WITH ROLLUP
7. HAVING
8. SELECT
9. DISTINCT
10.ORDER BY
11.TOP
Window SQL Statement Data Flow
from select window funcs
Window SQL Statement
select
symbol
,price
,lag(price, 1) over (
partition by symbol
order by price_date) as prev_price
,price - lag(price, 1) over (
partition by symbol
order by price_date) as price_change
,lead(price, 1) over (
partition by symbol
order by price_date) as next_price
from stock_price
;
1
2
Canto
• Data Flow in a System
• The Language of Data Flow Manipulations
• Data Flow in Context
Imperative Example
var s = "Midway in our life's journey, I went astray";
var count = 0;
foreach(var word in s.Split(' '))
{
var stripped =
Regex.Replace(word, "('s)|W+", "");
if (stripped.Length > 2)
count++;
}
Imperative Data Flow
foreach
count
s split
length > 2
increment
mutate
Nested Example
var s = "Midway in our life's journey, I went astray";
var count = Enumerable.Count(
Enumerable.Where(
Enumerable.Select(
s.Split(' '),
word => Regex.Replace(
word, "('s)|W+", "")),
stripped => stripped.Length > 2));
count
filter
Nested Data Flow
map
mutate
split s
Piped Example
var count = "Midway in our life's journey, I went astray”
.Split(' ')
.Select(word =>
Regex.Replace(word, "('s)|W+", ""))
.Where(word => word.Length > 2)
.Count();
Piped Data Flow
s
map
mutatesplit filter count
The Language of Data Flow Manipulations
• map
• bind
• filter
• fold
• mutate
• group by
• order by
The Language of Data Flow Manipulations
• map: Select
• bind: SelectMany
• filter: Where
• fold: Aggregate
• mutate: ForEach
• group by: GroupBy
• order by: OrderBy
The Language of Data Flow Manipulations
• map
• bind
• filter
• fold
• mutate
• group by
• order by
Map
n map n
Map Example
var numbers = new [] {3, 9, 10}
.Select(x => x * 10)
.Select(x => x + 3);
output>

new [] {33, 93, 103}
Map Data Flow
c map map
Select Source Code
private sealed class SelectArrayIterator<TSource, TResult> : Iterator<TResult>, IPartition<TResult>
{
private readonly TSource[] _source;
private readonly Func<TSource, TResult> _selector;
public SelectArrayIterator(TSource[] source, Func<TSource, TResult> selector)
{
// ... assert we have something
_source = source;
_selector = selector;
}
public override bool MoveNext()
{
if (_state < 1 | _state == _source.Length + 1)
{
Dispose();
return false;
}
int index = _state++ - 1;
_current = _selector(_source[index]);
return true;
}
// ... and more
https://github.com/dotnet/corefx/blob/7a673547563dc92f1f4cad802d7b57483cdf7500/src/System.Linq/src/System/Linq/Select.cs#L199-L226
Select Source Code - constructor
private sealed class SelectArrayIterator
<TSource, TResult> : Iterator<TResult>,
IPartition<TResult>
{
private readonly TSource[] _source;
private readonly Func<TSource, TResult> _selector;
public SelectArrayIterator(
TSource[] source,
Func<TSource, TResult> selector)
{
// ... assert we have something
_source = source;
_selector = selector;
}
https://github.com/dotnet/corefx/blob/7a673547563dc92f1f4cad802d7b57483cdf7500/src/System.Linq/src/System/Linq/Select.cs#L199-L226
Select Source Code
public override bool MoveNext()
{
if (_state < 1 | _state == _source.Length + 1)
{
Dispose();
return false;
}
int index = _state++ - 1;
_current = _selector(_source[index]);
return true;
}
https://github.com/dotnet/corefx/blob/7a673547563dc92f1f4cad802d7b57483cdf7500/src/System.Linq/src/System/Linq/Select.cs#L199-L226
Map Example
var numbers = new [] {3, 9, 10}
.Select(x => x * 10)
.Select(x => x + 3);
output>

new [] {33, 93, 103}
The Language of Data Flow Manipulations
• map
• bind
• filter
• fold
• mutate
• group by
• order by
Bind
n bind n↑
Bind Example
var list = new [] {
"Midway in our life's journey,",
"I went astray"
}
.SelectMany(s => s.Split(' '))
.Select(w => Regex.Replace(w, "('s)|W+", ""));
output>

new [] { "Midway", "in", “our",
"life", "journey", “I",
“went", "astray" }
Bind Query Syntax Example
var list =
from sentences in
new [] {
"Midway in our life's journey,",
"I went astray"
}
from words in sentences.Split(' ')
select Regex.Replace(words, "('s)|W+", "");
output>

new [] { "Midway", "in", “our",
"life", "journey", “I",
“went", "astray" }
Bind Query Syntax Data Flow
s map
bind
split
SelectMany Source Code - constructor
private sealed class SelectManySingleSelectorIterator

<TSource, TResult> : Iterator<TResult>
,IIListProvider<TResult>
{
private readonly IEnumerable<TSource> _source;
private readonly Func<TSource, IEnumerable<TResult>> _selector;
private IEnumerator<TSource> _sourceEnumerator;
private IEnumerator<TResult> _subEnumerator;
internal SelectManySingleSelectorIterator(

IEnumerable<TSource> source,

Func<TSource, IEnumerable<TResult>> selector)
{
// ... assert we have something
_source = source;
_selector = selector;
}
// ... and more
https://github.com/dotnet/corefx/blob/7a673547563dc92f1f4cad802d7b57483cdf7500/src/System.Linq/src/System/Linq/SelectMany.cs#L127-L223
SelectMany Source Code
public override bool MoveNext()
{
switch (_state)
{
case 1:
// Retrieve the source enumerator.
_sourceEnumerator = _source.GetEnumerator();
_state = 2;
goto case 2;
case 2:
// Take the next element from the source enumerator.
https://github.com/dotnet/corefx/blob/7a673547563dc92f1f4cad802d7b57483cdf7500/src/System.Linq/src/System/Linq/SelectMany.cs#L127-L223
SelectMany Source Code
case 2:
// Take the next element from the source enumerator.
if (!_sourceEnumerator.MoveNext())
{
break;
}
TSource element = _sourceEnumerator.Current;
// Project it into a sub-collection and get its enumerator.
_subEnumerator = _selector(element).GetEnumerator();
_state = 3;
goto case 3;
case 3:
// Take the next element from the sub-collection and yield.
https://github.com/dotnet/corefx/blob/7a673547563dc92f1f4cad802d7b57483cdf7500/src/System.Linq/src/System/Linq/SelectMany.cs#L127-L223
SelectMany Source Code
case 3:
// Take the next element from the sub-collection and yield.
if (!_subEnumerator.MoveNext())
{
_subEnumerator.Dispose();
_subEnumerator = null;
_state = 2;
goto case 2;
}
_current = _subEnumerator.Current;
return true;
https://github.com/dotnet/corefx/blob/7a673547563dc92f1f4cad802d7b57483cdf7500/src/System.Linq/src/System/Linq/SelectMany.cs#L127-L223
Bind Example
var list = new [] {
"Midway in our life's journey, I went astray"
}
.SelectMany(s => s.Split(' '))
.Select(w => Regex.Replace(w, "('s)|W+", ""));
output>

new [] { "Midway", "in", “our",
"life", "journey", “I",
“went", "astray" }
The Language of Data Flow Manipulations
• map
• bind
• filter
• fold
• mutate
• group by
• order by
Filter
n filter n↓
Filter Example
var numbers = new [] {3, 9, 10, 33, 100}
.Where(n => n % 2 != 0);
output>

new [] {3, 9, 33}
Filter Data Flow
c filter
Where Source Code - constructor
internal sealed class WhereArrayIterator<TSource>

: Iterator<TSource>, IIListProvider<TSource>
{
private readonly TSource[] _source;
private readonly Func<TSource, bool> _predicate;
public WhereArrayIterator(

TSource[] source,
Func<TSource, bool> predicate)
{
// ... assert we have something
_source = source;
_predicate = predicate;
}
https://github.com/dotnet/corefx/blob/7a673547563dc92f1f4cad802d7b57483cdf7500/src/System.Linq/src/System/Linq/Where.cs#L198-L255
Where Source Code
public override bool MoveNext()
{
int index = _state - 1;
TSource[] source = _source;
while (unchecked((uint)index < (uint)source.Length))
{
TSource item = source[index];
index = _state++;
if (_predicate(item))
{
_current = item;
return true;
}
}
Dispose();
return false;
}
// ... and more
https://github.com/dotnet/corefx/blob/7a673547563dc92f1f4cad802d7b57483cdf7500/src/System.Linq/src/System/Linq/Where.cs#L198-L255
Filter Example
var numbers = new [] {3, 9, 10, 33, 100}
.Where(n => n % 2 != 0);
output>

new [] {3, 9, 33}
The Language of Data Flow Manipulations
• map
• bind
• filter
• fold
• mutate
• group by
• order by
Fold
n
fold 1
seed
Fold Example
var sum = new [] {3, 9, 10, 33, 100}
.Aggregate(0, (m, n) => m + n);
output>

155
Fold Data Flow
seed
fold
+
c
Aggregate Source Code
public static TAccumulate Aggregate<TSource, TAccumulate>(

this IEnumerable<TSource> source,

TAccumulate seed,

Func<TAccumulate, TSource, TAccumulate> func)
{
// ... assert we have something
TAccumulate result = seed;
foreach (TSource element in source)
{
result = func(result, element);
}
return result;
}
https://github.com/dotnet/corefx/blob/7a673547563dc92f1f4cad802d7b57483cdf7500/src/System.Linq/src/System/Linq/Aggregate.cs#L40-L59
Fold Example
var sum = new [] {3, 9, 10, 33, 100}
.Aggregate(0, (m, n) => m + n);
output>

155
The Language of Data Flow Manipulations
• map
• bind
• filter
• fold
• mutate
• group by
• order by
Mutate
n mutate
Mutate Example
var visited = new List<int>();
new [] {3, 9, 10, 33, 100}
.Where(n => n % 3 == 0)
.ToList()
.ForEach(n => visited.Add(n));
output>

//void


var visited = new [] {3, 9, 33}
Mutate Data Flow
c toList
mutate
writefilter
ForEach Source Code
public void ForEach(Action<T> action)
{
// ... assert we have something
int version = _version;
for (int i = 0; i < _size; i++)
{
if (version != _version)
{
break;
}
action(_items[i]);
}
// cannot alter list
if (version != _version)
throw new InvalidOperationException(

SR.InvalidOperation_EnumFailedVersion);
}
https://github.com/dotnet/corefx/blob/bffef76f6af208e2042a2f27bc081ee908bb390b/src/System.Collections/src/System/Collections/Generic/
List.cs#L598-L618
Mutate Example
var visited = new List<int>();
new [] {3, 9, 10, 33, 100}
.Where(n => n % 3 == 0)
.ToList()
.ForEach(n => visited.Add(n));
output>

//void


var visited = new [] {3, 9, 33}
The Language of Data Flow Manipulations
• map
• bind
• filter
• fold
• mutate
• group by
• order by
Group By
n
group

by
n↓
Group By Example
var groups = new [] {3, 9, 10, 33, 100}
.GroupBy(n => n % 2 == 0)
.ToDictionary(g => g.Key, g => g.ToList());
output>

new Dictionary<bool, List<int>>()
{
{true, new List<int>() {10, 100}},
{false, new List<int>() {3, 9, 33}}
}
Group By Data Flow
c convert
group by
even?
GroupBy Source Code
internal static Lookup<TKey, TElement> Create(

IEnumerable<TElement> source,
Func<TElement, TKey> keySelector,

IEqualityComparer<TKey> comparer)
{
// ... assert we have something
Lookup<TKey, TElement> lookup =

new Lookup<TKey, TElement>(comparer);
foreach (TElement item in source)
{
lookup.GetGrouping(

keySelector(item),create: true).Add(item);
}
return lookup;
}
https://github.com/dotnet/corefx/blob/7a673547563dc92f1f4cad802d7b57483cdf7500/src/System.Linq/src/System/Linq/Lookup.cs#L88-L100
Group By Example
var groups = new [] {3, 9, 10, 33, 100}
.GroupBy(n => n % 2 == 0)
.ToDictionary(g => g.Key, g => g.ToList());
output>

new Dictionary<bool, List<int>>()
{
{true, new List<int>() {10, 100}},
{false, new List<int>() {3, 9, 33}}
}
The Language of Data Flow Manipulations
• map
• bind
• filter
• fold
• mutate
• group by
• order by
Order By
n
order

by
n
Order By Example
var unordered = new [] {33, 9, 100, 3, 10}
.OrderBy(n => n);
output>

new [] {3, 9, 10, 33, 100}
Order By Data Flow
c
order by
identity
OrderBy Source Code
internal int[] Sort(TElement[] elements, int count)
{
int[] map = ComputeMap(elements, count);
QuickSort(map, 0, count - 1);
return map;
}
https://github.com/dotnet/corefx/blob/f17f1e847aeab830de77f8a46656339d7b0f1b43/src/System.Linq/src/System/Linq/OrderedEnumerable.cs#L508-
L513
Order By Example
var unordered = new [] {33, 9, 100, 3, 10}
.OrderBy(n => n);
output>

new [] {3, 9, 10, 33, 100}
Canto
• Data Flow in a System
• The Language of Data Flow Manipulations
• Data Flow in Context
–Dante (tr. Barolini), Paradiso

Canto XVII, Lines 55-60
You shall leave everything you love most dearly:
this is the arrow that the bow of exile

shoots first. You are to know the bitter taste

of others’ bread, how salt it is, and know

how hard a path it is for one who goes
descending and ascending others’ stairs.
Domain and Codomain
domain f codomain
Domain and Codomain
x f y
x ∈ X
Symbols
Natural

Language
X is domain of f
y ∈ Y Y is codomain of f
Functional Composition
Y g (X x)
{
return y;
}
x g f z
Z f (Y y)
{
return z;
}
Functional Composition
x g f z
f º g
Example of Composed Functions
string G (int x)
=> x.ToString();
bool F (string y)
=> int.TryParse(y, out int _);
Example of Composed Functions
int G F bool
Example of Composed Functions
new [] { 33 }
.Select(G)
.Select(F)
.First();
Context
Functions in Context
Lift Remove
Example of Composed Functions
class Identity
{
public static T [] Of<T>(T x)
=> new [] { x };
}
Identity.Of(33)
.Select(G)
.Select(F)
.First();
Identity
Example of Composed Functions
int G F bool
Context
Example of Composed Functions
Identity.Of(33)
.Select(G)
.Select(F)
.First(); Remove
Lift
Functions in Context Example
var count = Identity.Of(
"Midway in our life's journey, I went astray”)
.SelectMany(s => s.Split(' '))
.Select(word =>
Regex.Replace(word, "('s)|W+", ""))
.Where(word => word.Length > 2)
.Aggregate(0, (number, _) => number + 1);
output>

6
Identity
Functions in Context Data Flow
s
map
mutate filter
bind
split
fold
count
Context
Functions in Context Example
var count = Identity.Of(
"Midway in our life's journey, I went astray”)
.SelectMany(s => s.Split(' '))
.Select(word =>
Regex.Replace(word, "('s)|W+", ""))
.Where(word => word.Length > 2)
.Aggregate(0, (number, _) => number + 1);
output>

6
Remove
Lift
String in Context Example
output>

6
var count =
“Midway in our life's journey, I went astray”
.Split(' ')
.Select(word =>
Regex.Replace(word, "('s)|W+", ""))
.Where(word => word.Length > 2)
.Count();
Context
String in Context Example
var count =
“Midway in our life's journey, I went astray”
.Split(' ')
.Select(word =>
Regex.Replace(word, "('s)|W+", ""))
.Where(word => word.Length > 2)
.Count();
output>

6
Remove
Lift
Thank you!
Mike Harris



@MikeMKH

http://comp-phil.blogspot.com/
Next Steps
• StrangeLoop (conference)

https://www.thestrangeloop.com/
• Brian Lonsdorf - Professor Frisby Introduces Composable Functional JavaScript
(video series)

https://egghead.io/courses/professor-frisby-introduces-composable-functional-
javascript
• Aditya Bhargava - Functors, Applicatives, And Monads In Pictures (blog post)

http://adit.io/posts/2013-04-17-
functors,_applicatives,_and_monads_in_pictures.html
• Scott Wlaschin - F# for Fun and Profit (blog series)

http://fsharpforfunandprofit.com/series/thinking-functionally.html
• Dixin Yan - LINQ and Functional Programming via C# (blog series)

https://weblogs.asp.net/dixin/linq-via-csharp
Code from C# Source Code
• Select, https://github.com/dotnet/corefx/blob/7a673547563dc92f1f4cad802d7b57483cdf7500/src/
System.Linq/src/System/Linq/Select.cs#L199-L226
• SelectMany, https://github.com/dotnet/corefx/blob/7a673547563dc92f1f4cad802d7b57483cdf7500/
src/System.Linq/src/System/Linq/SelectMany.cs#L127-L223
• Where, https://github.com/dotnet/corefx/blob/7a673547563dc92f1f4cad802d7b57483cdf7500/src/
System.Linq/src/System/Linq/Where.cs#L198-L255
• Aggregate, https://github.com/dotnet/corefx/blob/7a673547563dc92f1f4cad802d7b57483cdf7500/
src/System.Linq/src/System/Linq/Aggregate.cs#L40-L59
• ForEach, https://github.com/dotnet/corefx/blob/bffef76f6af208e2042a2f27bc081ee908bb390b/src/
System.Collections/src/System/Collections/Generic/List.cs#L598-L618
• GroupBy, https://github.com/dotnet/corefx/blob/7a673547563dc92f1f4cad802d7b57483cdf7500/
src/System.Linq/src/System/Linq/Lookup.cs#L88-L100
• OrderBy, https://github.com/dotnet/corefx/blob/f17f1e847aeab830de77f8a46656339d7b0f1b43/src/
System.Linq/src/System/Linq/OrderedEnumerable.cs#L508-L513
Code
• SQL Code, http://sqlfiddle.com/#!6/50442/6
• C# Code, https://gist.github.com/MikeMKH/
cabd17faa9290d6f15592c5df8eded9f
• PowerShell Code, https://gist.github.com/MikeMKH/
97b38013b1871f98ba1ed843efcca6f9
Biography
• Barolini, Teodolinda. Commento Baroliniano, Digital Dante. New York, NY: Columbia University Libraries, 2017.
https://digitaldante.columbia.edu/dante/divine-comedy/
• Ben-Gan, Itzik. Microsoft SQL Server 2012 high-performance T-SQL using Window functions: Microsoft Press, 2012.
• Byham, Rick. Microsoft Docs. https://docs.microsoft.com/en-us/sql/t-sql/queries/select-transact-sql
• Cook, William R. and Herzman, Ronald B. Dante's Divine Comedy. The Great Courses. http://
www.thegreatcourses.com/courses/dante-s-divine-comedy.html
• Equity Regulatory Alert #2016 - 3 Guidance On Test Stock Usage https://www.nasdaqtrader.com/MicroNews.aspx?
id=ERA2016-3
• Petricek, Tomas. Beyond the Monad fashion (I.): Writing idioms in LINQ- http://tomasp.net/blog/idioms-in-linq.aspx/
• Securities Industry Automation Corporation. New York, 10 September 2015. https://www.nyse.com/publicdocs/
ctaplan/notifications/trader-update/CTS_CQS%20%20NEW%20DEDICATED%20TEST%20SYMBOL_09102015.pdf
• Wickham, Hadley, and Garrett Grolemund. R for data science : import, tidy, transform, visualize, and model data.
Sebastopol, CA: O'Reilly Media, 2016. http://r4ds.had.co.nz/
Images
• By Domenico di Michelino - Jastrow, Self-photographed, Public Domain, https://
commons.wikimedia.org/w/index.php?curid=970608
• By Sailko - Own work, CC BY 3.0, https://commons.wikimedia.org/w/index.php?curid=49841035
• By Lua - Sotheby's, London, 17 December 2015, lot 22, Public Domain, https://
commons.wikimedia.org/w/index.php?curid=32782393
• By Sailko - Own work, CC BY 3.0, https://commons.wikimedia.org/w/index.php?curid=56266161
• By William Blake - http://www.blakearchive.org/exist/blake/archive/work.xq?
workid=but812&java=no, Public Domain, https://commons.wikimedia.org/w/index.php?
curid=27118518
• By Salvatore Postiglione - http://www.hampel-auctions.com/en/92-325/onlinecatalog-detail-
n229.html, Public Domain, https://commons.wikimedia.org/w/index.php?curid=26540023
• Di Giovanni Stradano - Opera propria, 2007-10-25, Pubblico dominio, https://
commons.wikimedia.org/w/index.php?curid=2981981

More Related Content

What's hot

R Programming: Export/Output Data In R
R Programming: Export/Output Data In RR Programming: Export/Output Data In R
R Programming: Export/Output Data In R
Rsquared Academy
 
R Programming: Learn To Manipulate Strings In R
R Programming: Learn To Manipulate Strings In RR Programming: Learn To Manipulate Strings In R
R Programming: Learn To Manipulate Strings In R
Rsquared Academy
 
Java Data Migration with Data Pipeline
Java Data Migration with Data PipelineJava Data Migration with Data Pipeline
Java Data Migration with Data PipelineNorth Concepts
 
Dplyr and Plyr
Dplyr and PlyrDplyr and Plyr
Dplyr and Plyr
Paul Richards
 
Hive Functions Cheat Sheet
Hive Functions Cheat SheetHive Functions Cheat Sheet
Hive Functions Cheat Sheet
Hortonworks
 
RDataMining slides-time-series-analysis
RDataMining slides-time-series-analysisRDataMining slides-time-series-analysis
RDataMining slides-time-series-analysis
Yanchang Zhao
 
Spark 4th Meetup Londond - Building a Product with Spark
Spark 4th Meetup Londond - Building a Product with SparkSpark 4th Meetup Londond - Building a Product with Spark
Spark 4th Meetup Londond - Building a Product with Spark
samthemonad
 
Stefan Hochdörfer - The NoSQL Store everyone ignores: PostgreSQL - NoSQL matt...
Stefan Hochdörfer - The NoSQL Store everyone ignores: PostgreSQL - NoSQL matt...Stefan Hochdörfer - The NoSQL Store everyone ignores: PostgreSQL - NoSQL matt...
Stefan Hochdörfer - The NoSQL Store everyone ignores: PostgreSQL - NoSQL matt...
NoSQLmatters
 
Merge Multiple CSV in single data frame using R
Merge Multiple CSV in single data frame using RMerge Multiple CSV in single data frame using R
Merge Multiple CSV in single data frame using R
Yogesh Khandelwal
 
Map reduce: beyond word count
Map reduce: beyond word countMap reduce: beyond word count
Map reduce: beyond word count
Jeff Patti
 
Cassandra data structures and algorithms
Cassandra data structures and algorithmsCassandra data structures and algorithms
Cassandra data structures and algorithms
Duyhai Doan
 
4 R Tutorial DPLYR Apply Function
4 R Tutorial DPLYR Apply Function4 R Tutorial DPLYR Apply Function
4 R Tutorial DPLYR Apply Function
Sakthi Dasans
 
C - aptitude3
C - aptitude3C - aptitude3
C - aptitude3Srikanth
 
P2 2017 python_strings
P2 2017 python_stringsP2 2017 python_strings
P2 2017 python_strings
Prof. Wim Van Criekinge
 
Data warehouse or conventional database: Which is right for you?
Data warehouse or conventional database: Which is right for you?Data warehouse or conventional database: Which is right for you?
Data warehouse or conventional database: Which is right for you?
Data Con LA
 
MongoDB Aggregation
MongoDB Aggregation MongoDB Aggregation
MongoDB Aggregation
Amit Ghosh
 
Stata cheat sheet: data processing
Stata cheat sheet: data processingStata cheat sheet: data processing
Stata cheat sheet: data processing
Tim Essam
 
Data Exploration and Visualization with R
Data Exploration and Visualization with RData Exploration and Visualization with R
Data Exploration and Visualization with R
Yanchang Zhao
 
Stata Programming Cheat Sheet
Stata Programming Cheat SheetStata Programming Cheat Sheet
Stata Programming Cheat Sheet
Laura Hughes
 
Introduction to data.table in R
Introduction to data.table in RIntroduction to data.table in R
Introduction to data.table in R
Paul Richards
 

What's hot (20)

R Programming: Export/Output Data In R
R Programming: Export/Output Data In RR Programming: Export/Output Data In R
R Programming: Export/Output Data In R
 
R Programming: Learn To Manipulate Strings In R
R Programming: Learn To Manipulate Strings In RR Programming: Learn To Manipulate Strings In R
R Programming: Learn To Manipulate Strings In R
 
Java Data Migration with Data Pipeline
Java Data Migration with Data PipelineJava Data Migration with Data Pipeline
Java Data Migration with Data Pipeline
 
Dplyr and Plyr
Dplyr and PlyrDplyr and Plyr
Dplyr and Plyr
 
Hive Functions Cheat Sheet
Hive Functions Cheat SheetHive Functions Cheat Sheet
Hive Functions Cheat Sheet
 
RDataMining slides-time-series-analysis
RDataMining slides-time-series-analysisRDataMining slides-time-series-analysis
RDataMining slides-time-series-analysis
 
Spark 4th Meetup Londond - Building a Product with Spark
Spark 4th Meetup Londond - Building a Product with SparkSpark 4th Meetup Londond - Building a Product with Spark
Spark 4th Meetup Londond - Building a Product with Spark
 
Stefan Hochdörfer - The NoSQL Store everyone ignores: PostgreSQL - NoSQL matt...
Stefan Hochdörfer - The NoSQL Store everyone ignores: PostgreSQL - NoSQL matt...Stefan Hochdörfer - The NoSQL Store everyone ignores: PostgreSQL - NoSQL matt...
Stefan Hochdörfer - The NoSQL Store everyone ignores: PostgreSQL - NoSQL matt...
 
Merge Multiple CSV in single data frame using R
Merge Multiple CSV in single data frame using RMerge Multiple CSV in single data frame using R
Merge Multiple CSV in single data frame using R
 
Map reduce: beyond word count
Map reduce: beyond word countMap reduce: beyond word count
Map reduce: beyond word count
 
Cassandra data structures and algorithms
Cassandra data structures and algorithmsCassandra data structures and algorithms
Cassandra data structures and algorithms
 
4 R Tutorial DPLYR Apply Function
4 R Tutorial DPLYR Apply Function4 R Tutorial DPLYR Apply Function
4 R Tutorial DPLYR Apply Function
 
C - aptitude3
C - aptitude3C - aptitude3
C - aptitude3
 
P2 2017 python_strings
P2 2017 python_stringsP2 2017 python_strings
P2 2017 python_strings
 
Data warehouse or conventional database: Which is right for you?
Data warehouse or conventional database: Which is right for you?Data warehouse or conventional database: Which is right for you?
Data warehouse or conventional database: Which is right for you?
 
MongoDB Aggregation
MongoDB Aggregation MongoDB Aggregation
MongoDB Aggregation
 
Stata cheat sheet: data processing
Stata cheat sheet: data processingStata cheat sheet: data processing
Stata cheat sheet: data processing
 
Data Exploration and Visualization with R
Data Exploration and Visualization with RData Exploration and Visualization with R
Data Exploration and Visualization with R
 
Stata Programming Cheat Sheet
Stata Programming Cheat SheetStata Programming Cheat Sheet
Stata Programming Cheat Sheet
 
Introduction to data.table in R
Introduction to data.table in RIntroduction to data.table in R
Introduction to data.table in R
 

Similar to A Divine Data Comedy

Refactoring to Macros with Clojure
Refactoring to Macros with ClojureRefactoring to Macros with Clojure
Refactoring to Macros with ClojureDmitry Buzdin
 
Python Programming.pptx
Python Programming.pptxPython Programming.pptx
Python Programming.pptx
SudhakarVenkey
 
Introduction to Dating Modeling for Cassandra
Introduction to Dating Modeling for CassandraIntroduction to Dating Modeling for Cassandra
Introduction to Dating Modeling for Cassandra
DataStax Academy
 
Introduction to R
Introduction to RIntroduction to R
Introduction to R
Sander Kieft
 
Big Data Mining in Indian Economic Survey 2017
Big Data Mining in Indian Economic Survey 2017Big Data Mining in Indian Economic Survey 2017
Big Data Mining in Indian Economic Survey 2017
Parth Khare
 
Seminar PSU 10.10.2014 mme
Seminar PSU 10.10.2014 mmeSeminar PSU 10.10.2014 mme
Seminar PSU 10.10.2014 mme
Vyacheslav Arbuzov
 
NOSQL and Cassandra
NOSQL and CassandraNOSQL and Cassandra
NOSQL and Cassandrarantav
 
Postgresql 9.3 overview
Postgresql 9.3 overviewPostgresql 9.3 overview
Postgresql 9.3 overview
Aveic
 
Cheat Sheet for Stata v15.00 PDF Complete
Cheat Sheet for Stata v15.00 PDF CompleteCheat Sheet for Stata v15.00 PDF Complete
Cheat Sheet for Stata v15.00 PDF Complete
TsamaraLuthfia1
 
SQL Windowing
SQL WindowingSQL Windowing
SQL Windowing
Sandun Perera
 
AWS July Webinar Series: Amazon Redshift Optimizing Performance
AWS July Webinar Series: Amazon Redshift Optimizing PerformanceAWS July Webinar Series: Amazon Redshift Optimizing Performance
AWS July Webinar Series: Amazon Redshift Optimizing Performance
Amazon Web Services
 
Getting started with Pandas Cheatsheet.pdf
Getting started with Pandas Cheatsheet.pdfGetting started with Pandas Cheatsheet.pdf
Getting started with Pandas Cheatsheet.pdf
SudhakarVenkey
 
Pumps, Compressors and Turbine Fault Frequency Analysis
Pumps, Compressors and Turbine Fault Frequency AnalysisPumps, Compressors and Turbine Fault Frequency Analysis
Pumps, Compressors and Turbine Fault Frequency Analysis
University of Illinois,Chicago
 
Lecture05sql 110406195130-phpapp02
Lecture05sql 110406195130-phpapp02Lecture05sql 110406195130-phpapp02
Lecture05sql 110406195130-phpapp02
Lalit009kumar
 
UKOUG Tech14 - Using Database In-Memory Column Store with Complex Datatypes
UKOUG Tech14 - Using Database In-Memory Column Store with Complex DatatypesUKOUG Tech14 - Using Database In-Memory Column Store with Complex Datatypes
UKOUG Tech14 - Using Database In-Memory Column Store with Complex Datatypes
Marco Gralike
 
Pumps, Compressors and Turbine Fault Frequency Analysis
Pumps, Compressors and Turbine Fault Frequency AnalysisPumps, Compressors and Turbine Fault Frequency Analysis
Pumps, Compressors and Turbine Fault Frequency Analysis
University of Illinois,Chicago
 
Designing a database like an archaeologist
Designing a database like an archaeologistDesigning a database like an archaeologist
Designing a database like an archaeologist
yoavrubin
 
R Cheat Sheet
R Cheat SheetR Cheat Sheet
R Cheat Sheet
Dr. Volkan OBAN
 
Stata Cheat Sheets (all)
Stata Cheat Sheets (all)Stata Cheat Sheets (all)
Stata Cheat Sheets (all)
Laura Hughes
 

Similar to A Divine Data Comedy (20)

Refactoring to Macros with Clojure
Refactoring to Macros with ClojureRefactoring to Macros with Clojure
Refactoring to Macros with Clojure
 
Python Programming.pptx
Python Programming.pptxPython Programming.pptx
Python Programming.pptx
 
Introduction to Dating Modeling for Cassandra
Introduction to Dating Modeling for CassandraIntroduction to Dating Modeling for Cassandra
Introduction to Dating Modeling for Cassandra
 
Introduction to R
Introduction to RIntroduction to R
Introduction to R
 
Big Data Mining in Indian Economic Survey 2017
Big Data Mining in Indian Economic Survey 2017Big Data Mining in Indian Economic Survey 2017
Big Data Mining in Indian Economic Survey 2017
 
Seminar PSU 10.10.2014 mme
Seminar PSU 10.10.2014 mmeSeminar PSU 10.10.2014 mme
Seminar PSU 10.10.2014 mme
 
NOSQL and Cassandra
NOSQL and CassandraNOSQL and Cassandra
NOSQL and Cassandra
 
Postgresql 9.3 overview
Postgresql 9.3 overviewPostgresql 9.3 overview
Postgresql 9.3 overview
 
Cheat Sheet for Stata v15.00 PDF Complete
Cheat Sheet for Stata v15.00 PDF CompleteCheat Sheet for Stata v15.00 PDF Complete
Cheat Sheet for Stata v15.00 PDF Complete
 
SQL Windowing
SQL WindowingSQL Windowing
SQL Windowing
 
AWS July Webinar Series: Amazon Redshift Optimizing Performance
AWS July Webinar Series: Amazon Redshift Optimizing PerformanceAWS July Webinar Series: Amazon Redshift Optimizing Performance
AWS July Webinar Series: Amazon Redshift Optimizing Performance
 
Unit3 C
Unit3 C Unit3 C
Unit3 C
 
Getting started with Pandas Cheatsheet.pdf
Getting started with Pandas Cheatsheet.pdfGetting started with Pandas Cheatsheet.pdf
Getting started with Pandas Cheatsheet.pdf
 
Pumps, Compressors and Turbine Fault Frequency Analysis
Pumps, Compressors and Turbine Fault Frequency AnalysisPumps, Compressors and Turbine Fault Frequency Analysis
Pumps, Compressors and Turbine Fault Frequency Analysis
 
Lecture05sql 110406195130-phpapp02
Lecture05sql 110406195130-phpapp02Lecture05sql 110406195130-phpapp02
Lecture05sql 110406195130-phpapp02
 
UKOUG Tech14 - Using Database In-Memory Column Store with Complex Datatypes
UKOUG Tech14 - Using Database In-Memory Column Store with Complex DatatypesUKOUG Tech14 - Using Database In-Memory Column Store with Complex Datatypes
UKOUG Tech14 - Using Database In-Memory Column Store with Complex Datatypes
 
Pumps, Compressors and Turbine Fault Frequency Analysis
Pumps, Compressors and Turbine Fault Frequency AnalysisPumps, Compressors and Turbine Fault Frequency Analysis
Pumps, Compressors and Turbine Fault Frequency Analysis
 
Designing a database like an archaeologist
Designing a database like an archaeologistDesigning a database like an archaeologist
Designing a database like an archaeologist
 
R Cheat Sheet
R Cheat SheetR Cheat Sheet
R Cheat Sheet
 
Stata Cheat Sheets (all)
Stata Cheat Sheets (all)Stata Cheat Sheets (all)
Stata Cheat Sheets (all)
 

More from Mike Harris

Combinators - Lightning Talk
Combinators - Lightning TalkCombinators - Lightning Talk
Combinators - Lightning Talk
Mike Harris
 
C# 7
C# 7C# 7
Hiking through the Functional Forest with Fizz Buzz
Hiking through the Functional Forest with Fizz BuzzHiking through the Functional Forest with Fizz Buzz
Hiking through the Functional Forest with Fizz Buzz
Mike Harris
 
Coding f#un
Coding f#unCoding f#un
Coding f#un
Mike Harris
 
All You Need is Fold in the Key of C#
All You Need is Fold in the Key of C#All You Need is Fold in the Key of C#
All You Need is Fold in the Key of C#
Mike Harris
 
All You Need is Fold
All You Need is FoldAll You Need is Fold
All You Need is Fold
Mike Harris
 
There and Back Again
There and Back AgainThere and Back Again
There and Back Again
Mike Harris
 
The Marvelous Land of Higher Order Functions
The Marvelous Land of Higher Order FunctionsThe Marvelous Land of Higher Order Functions
The Marvelous Land of Higher Order Functions
Mike Harris
 
Testing the Next Generation
Testing the Next GenerationTesting the Next Generation
Testing the Next Generation
Mike Harris
 
Learn You a Functional JavaScript for Great Good
Learn You a Functional JavaScript for Great GoodLearn You a Functional JavaScript for Great Good
Learn You a Functional JavaScript for Great Good
Mike Harris
 

More from Mike Harris (10)

Combinators - Lightning Talk
Combinators - Lightning TalkCombinators - Lightning Talk
Combinators - Lightning Talk
 
C# 7
C# 7C# 7
C# 7
 
Hiking through the Functional Forest with Fizz Buzz
Hiking through the Functional Forest with Fizz BuzzHiking through the Functional Forest with Fizz Buzz
Hiking through the Functional Forest with Fizz Buzz
 
Coding f#un
Coding f#unCoding f#un
Coding f#un
 
All You Need is Fold in the Key of C#
All You Need is Fold in the Key of C#All You Need is Fold in the Key of C#
All You Need is Fold in the Key of C#
 
All You Need is Fold
All You Need is FoldAll You Need is Fold
All You Need is Fold
 
There and Back Again
There and Back AgainThere and Back Again
There and Back Again
 
The Marvelous Land of Higher Order Functions
The Marvelous Land of Higher Order FunctionsThe Marvelous Land of Higher Order Functions
The Marvelous Land of Higher Order Functions
 
Testing the Next Generation
Testing the Next GenerationTesting the Next Generation
Testing the Next Generation
 
Learn You a Functional JavaScript for Great Good
Learn You a Functional JavaScript for Great GoodLearn You a Functional JavaScript for Great Good
Learn You a Functional JavaScript for Great Good
 

Recently uploaded

BoxLang: Review our Visionary Licenses of 2024
BoxLang: Review our Visionary Licenses of 2024BoxLang: Review our Visionary Licenses of 2024
BoxLang: Review our Visionary Licenses of 2024
Ortus Solutions, Corp
 
Globus Connect Server Deep Dive - GlobusWorld 2024
Globus Connect Server Deep Dive - GlobusWorld 2024Globus Connect Server Deep Dive - GlobusWorld 2024
Globus Connect Server Deep Dive - GlobusWorld 2024
Globus
 
Beyond Event Sourcing - Embracing CRUD for Wix Platform - Java.IL
Beyond Event Sourcing - Embracing CRUD for Wix Platform - Java.ILBeyond Event Sourcing - Embracing CRUD for Wix Platform - Java.IL
Beyond Event Sourcing - Embracing CRUD for Wix Platform - Java.IL
Natan Silnitsky
 
How Recreation Management Software Can Streamline Your Operations.pptx
How Recreation Management Software Can Streamline Your Operations.pptxHow Recreation Management Software Can Streamline Your Operations.pptx
How Recreation Management Software Can Streamline Your Operations.pptx
wottaspaceseo
 
How Does XfilesPro Ensure Security While Sharing Documents in Salesforce?
How Does XfilesPro Ensure Security While Sharing Documents in Salesforce?How Does XfilesPro Ensure Security While Sharing Documents in Salesforce?
How Does XfilesPro Ensure Security While Sharing Documents in Salesforce?
XfilesPro
 
Designing for Privacy in Amazon Web Services
Designing for Privacy in Amazon Web ServicesDesigning for Privacy in Amazon Web Services
Designing for Privacy in Amazon Web Services
KrzysztofKkol1
 
Multiple Your Crypto Portfolio with the Innovative Features of Advanced Crypt...
Multiple Your Crypto Portfolio with the Innovative Features of Advanced Crypt...Multiple Your Crypto Portfolio with the Innovative Features of Advanced Crypt...
Multiple Your Crypto Portfolio with the Innovative Features of Advanced Crypt...
Hivelance Technology
 
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
Juraj Vysvader
 
top nidhi software solution freedownload
top nidhi software solution freedownloadtop nidhi software solution freedownload
top nidhi software solution freedownload
vrstrong314
 
Enhancing Research Orchestration Capabilities at ORNL.pdf
Enhancing Research Orchestration Capabilities at ORNL.pdfEnhancing Research Orchestration Capabilities at ORNL.pdf
Enhancing Research Orchestration Capabilities at ORNL.pdf
Globus
 
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...
Shahin Sheidaei
 
Visitor Management System in India- Vizman.app
Visitor Management System in India- Vizman.appVisitor Management System in India- Vizman.app
Visitor Management System in India- Vizman.app
NaapbooksPrivateLimi
 
Advanced Flow Concepts Every Developer Should Know
Advanced Flow Concepts Every Developer Should KnowAdvanced Flow Concepts Every Developer Should Know
Advanced Flow Concepts Every Developer Should Know
Peter Caitens
 
Large Language Models and the End of Programming
Large Language Models and the End of ProgrammingLarge Language Models and the End of Programming
Large Language Models and the End of Programming
Matt Welsh
 
Cyaniclab : Software Development Agency Portfolio.pdf
Cyaniclab : Software Development Agency Portfolio.pdfCyaniclab : Software Development Agency Portfolio.pdf
Cyaniclab : Software Development Agency Portfolio.pdf
Cyanic lab
 
Why React Native as a Strategic Advantage for Startup Innovation.pdf
Why React Native as a Strategic Advantage for Startup Innovation.pdfWhy React Native as a Strategic Advantage for Startup Innovation.pdf
Why React Native as a Strategic Advantage for Startup Innovation.pdf
ayushiqss
 
Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024
Paco van Beckhoven
 
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
informapgpstrackings
 
A Comprehensive Look at Generative AI in Retail App Testing.pdf
A Comprehensive Look at Generative AI in Retail App Testing.pdfA Comprehensive Look at Generative AI in Retail App Testing.pdf
A Comprehensive Look at Generative AI in Retail App Testing.pdf
kalichargn70th171
 
Explore Modern SharePoint Templates for 2024
Explore Modern SharePoint Templates for 2024Explore Modern SharePoint Templates for 2024
Explore Modern SharePoint Templates for 2024
Sharepoint Designs
 

Recently uploaded (20)

BoxLang: Review our Visionary Licenses of 2024
BoxLang: Review our Visionary Licenses of 2024BoxLang: Review our Visionary Licenses of 2024
BoxLang: Review our Visionary Licenses of 2024
 
Globus Connect Server Deep Dive - GlobusWorld 2024
Globus Connect Server Deep Dive - GlobusWorld 2024Globus Connect Server Deep Dive - GlobusWorld 2024
Globus Connect Server Deep Dive - GlobusWorld 2024
 
Beyond Event Sourcing - Embracing CRUD for Wix Platform - Java.IL
Beyond Event Sourcing - Embracing CRUD for Wix Platform - Java.ILBeyond Event Sourcing - Embracing CRUD for Wix Platform - Java.IL
Beyond Event Sourcing - Embracing CRUD for Wix Platform - Java.IL
 
How Recreation Management Software Can Streamline Your Operations.pptx
How Recreation Management Software Can Streamline Your Operations.pptxHow Recreation Management Software Can Streamline Your Operations.pptx
How Recreation Management Software Can Streamline Your Operations.pptx
 
How Does XfilesPro Ensure Security While Sharing Documents in Salesforce?
How Does XfilesPro Ensure Security While Sharing Documents in Salesforce?How Does XfilesPro Ensure Security While Sharing Documents in Salesforce?
How Does XfilesPro Ensure Security While Sharing Documents in Salesforce?
 
Designing for Privacy in Amazon Web Services
Designing for Privacy in Amazon Web ServicesDesigning for Privacy in Amazon Web Services
Designing for Privacy in Amazon Web Services
 
Multiple Your Crypto Portfolio with the Innovative Features of Advanced Crypt...
Multiple Your Crypto Portfolio with the Innovative Features of Advanced Crypt...Multiple Your Crypto Portfolio with the Innovative Features of Advanced Crypt...
Multiple Your Crypto Portfolio with the Innovative Features of Advanced Crypt...
 
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
 
top nidhi software solution freedownload
top nidhi software solution freedownloadtop nidhi software solution freedownload
top nidhi software solution freedownload
 
Enhancing Research Orchestration Capabilities at ORNL.pdf
Enhancing Research Orchestration Capabilities at ORNL.pdfEnhancing Research Orchestration Capabilities at ORNL.pdf
Enhancing Research Orchestration Capabilities at ORNL.pdf
 
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...
 
Visitor Management System in India- Vizman.app
Visitor Management System in India- Vizman.appVisitor Management System in India- Vizman.app
Visitor Management System in India- Vizman.app
 
Advanced Flow Concepts Every Developer Should Know
Advanced Flow Concepts Every Developer Should KnowAdvanced Flow Concepts Every Developer Should Know
Advanced Flow Concepts Every Developer Should Know
 
Large Language Models and the End of Programming
Large Language Models and the End of ProgrammingLarge Language Models and the End of Programming
Large Language Models and the End of Programming
 
Cyaniclab : Software Development Agency Portfolio.pdf
Cyaniclab : Software Development Agency Portfolio.pdfCyaniclab : Software Development Agency Portfolio.pdf
Cyaniclab : Software Development Agency Portfolio.pdf
 
Why React Native as a Strategic Advantage for Startup Innovation.pdf
Why React Native as a Strategic Advantage for Startup Innovation.pdfWhy React Native as a Strategic Advantage for Startup Innovation.pdf
Why React Native as a Strategic Advantage for Startup Innovation.pdf
 
Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024
 
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
 
A Comprehensive Look at Generative AI in Retail App Testing.pdf
A Comprehensive Look at Generative AI in Retail App Testing.pdfA Comprehensive Look at Generative AI in Retail App Testing.pdf
A Comprehensive Look at Generative AI in Retail App Testing.pdf
 
Explore Modern SharePoint Templates for 2024
Explore Modern SharePoint Templates for 2024Explore Modern SharePoint Templates for 2024
Explore Modern SharePoint Templates for 2024
 

A Divine Data Comedy

  • 1. A Divine Data Comedy Mike Harris
  • 2.
  • 3.
  • 4.
  • 5.
  • 6. –Dante (tr. Longfellow), Inferno
 Canto I, Lines 1-3 Midway upon the journey of our life
 I found myself within a forest dark,
 For the straightforward pathway had been lost.
  • 7. Canto • Data Flow in a System • The Language of Data Flow Manipulations • Data Flow in Context
  • 8. Canto • Data Flow in a System • The Language of Data Flow Manipulations • Data Flow in Context
  • 9. Example Data Set create table stock_price ( symbol varchar(5) not null ,price_date date not null ,price money not null ); insert into stock_price (symbol, price_date, price) values ('ZVZZT', '2017-01-03', 10.02) ,('CBO' , '2017-01-03', 18.99) ,('ZVZZT', '2017-01-04', 9.99) ,('CBO' , '2017-01-04', 19.01) ;
  • 10. Example Data Set Symbol Price Date Price ZVZZT 2017-01-03 10.02 CBO 2017-01-03 18.99 ZVZZT 2017-01-04 9.99 CBO 2017-01-04 19.01
  • 11. SQL Statement select symbol, price from stock_price where symbol = 'ZVZZT' order by price_date ; Symbol Price Date Price ZVZZT 2017-01-03 10.02 ZVZZT 2017-01-04 9.99
  • 12. Logical Order of a T-SQL Statement 1. FROM 2. ON 3. JOIN 4. WHERE 5. GROUP BY 6. WITH ROLLUP 7. HAVING 8. SELECT 9. DISTINCT 10.ORDER BY 11.TOP
  • 13. Logical Order of a T-SQL Statement 1. FROM 2. ON 3. JOIN 4. WHERE 5. GROUP BY 6. WITH ROLLUP 7. HAVING 8. SELECT 9. DISTINCT 10.ORDER BY 11.TOP Extract Aggregate Map Filter Order
  • 14. Logical Order of a T-SQL Statement 1. FROM 2. ON 3. JOIN 4. WHERE 5. GROUP BY 6. WITH ROLLUP 7. HAVING 8. SELECT 9. DISTINCT 10.ORDER BY 11.TOP
  • 15. SQL Statement Data Flow from where select order
 by
  • 16. SQL Statement select symbol, price from stock_price where symbol = 'ZVZZT' order by price_date ; Symbol Price Date Price ZVZZT 2017-01-03 10.02 ZVZZT 2017-01-04 9.99 2 1 3 4
  • 18. Folded SQL Statement select max(price_date) as price_date from stock_price ; Price Date 2017-01-04
  • 19. Logical Order of a T-SQL Statement 1. FROM 2. ON 3. JOIN 4. WHERE 5. GROUP BY 6. WITH ROLLUP 7. HAVING 8. SELECT 9. DISTINCT 10.ORDER BY 11.TOP
  • 20. Folded SQL Statement Data Flow from select max
  • 21. Folded SQL Statement select max(price_date) as price_date from stock_price ; Price Date 2017-01-04 1 2
  • 23. Group By Folded SQL Statement select symbol ,max(price_date) as price_date from stock_price group by symbol ; Symbol Price Date CBO 2017-01-04 ZVZZT 2017-01-04
  • 24. Logical Order of a T-SQL Statement 1. FROM 2. ON 3. JOIN 4. WHERE 5. GROUP BY 6. WITH ROLLUP 7. HAVING 8. SELECT 9. DISTINCT 10.ORDER BY 11.TOP
  • 25. Group By Folded SQL Statement Data Flow from group
 by select max
  • 26. Group By Folded SQL Statement select symbol ,max(price_date) as price_date from stock_price group by symbol ; Symbol Price Date CBO 2017-01-04 ZVZZT 2017-01-04 2 1 3
  • 28. Window Folded SQL Statement select distinct symbol ,max(price_date) over( partition by symbol) as price_date from stock_price ; Symbol Price Date CBO 2017-01-04 ZVZZT 2017-01-04
  • 29. Logical Order of a T-SQL Statement 1. FROM 2. ON 3. JOIN 4. WHERE 5. GROUP BY 6. WITH ROLLUP 7. HAVING 8. SELECT 9. DISTINCT 10.ORDER BY 11.TOP
  • 30. Window SQL Statement Data View max(price_date) over( partition by symbol) as price_date Symbol Price_Date CBO 2017-01-03 CBO 2017-01-04 Price_Date 2017-01-04 2017-01-04
  • 31. Window SQL Statement Data Flow from select window max distinct
  • 32. Window Folded SQL Statement select distinct symbol ,max(price_date) over( partition by symbol) as price_date from stock_price ; Symbol Price Date CBO 2017-01-04 ZVZZT 2017-01-04 1 2
  • 34. Window SQL Statement select symbol ,price ,lag(price, 1) over ( partition by symbol order by price_date) as prev_price ,price - lag(price, 1) over ( partition by symbol order by price_date) as price_change ,lead(price, 1) over ( partition by symbol order by price_date) as next_price from stock_price ;
  • 35. Window SQL Statement Symbol Price prev_price price_change next_price CBO 18.99 (null) (null) 19.01 CBO 19.01 18.99 0.02 (null) ZVZZT 10.02 (null) (null) 9.99 ZVZZT 9.99 10.02 -0.03 (null)
  • 36. Window SQL Statement Data View lag(price, 1) over (
 partition by symbol
 order by price_date) as prev_price Symbol Price_Date Price CBO 2017-01-03 18.99 CBO 2017-01-04 19.01 prev_price (null) 18.99
  • 37. Window SQL Statement Data View lead(price, 1) over (
 partition by symbol
 order by price_date) as next_price Symbol Price_Date Price CBO 2017-01-03 18.99 CBO 2017-01-04 19.01 next_price 19.01 (null)
  • 38. Logical Order of a T-SQL Statement 1. FROM 2. ON 3. JOIN 4. WHERE 5. GROUP BY 6. WITH ROLLUP 7. HAVING 8. SELECT 9. DISTINCT 10.ORDER BY 11.TOP
  • 39. Window SQL Statement Data Flow from select window funcs
  • 40. Window SQL Statement select symbol ,price ,lag(price, 1) over ( partition by symbol order by price_date) as prev_price ,price - lag(price, 1) over ( partition by symbol order by price_date) as price_change ,lead(price, 1) over ( partition by symbol order by price_date) as next_price from stock_price ; 1 2
  • 41. Canto • Data Flow in a System • The Language of Data Flow Manipulations • Data Flow in Context
  • 42. Imperative Example var s = "Midway in our life's journey, I went astray"; var count = 0; foreach(var word in s.Split(' ')) { var stripped = Regex.Replace(word, "('s)|W+", ""); if (stripped.Length > 2) count++; }
  • 43. Imperative Data Flow foreach count s split length > 2 increment mutate
  • 44. Nested Example var s = "Midway in our life's journey, I went astray"; var count = Enumerable.Count( Enumerable.Where( Enumerable.Select( s.Split(' '), word => Regex.Replace( word, "('s)|W+", "")), stripped => stripped.Length > 2));
  • 46. Piped Example var count = "Midway in our life's journey, I went astray” .Split(' ') .Select(word => Regex.Replace(word, "('s)|W+", "")) .Where(word => word.Length > 2) .Count();
  • 48. The Language of Data Flow Manipulations • map • bind • filter • fold • mutate • group by • order by
  • 49. The Language of Data Flow Manipulations • map: Select • bind: SelectMany • filter: Where • fold: Aggregate • mutate: ForEach • group by: GroupBy • order by: OrderBy
  • 50. The Language of Data Flow Manipulations • map • bind • filter • fold • mutate • group by • order by
  • 52. Map Example var numbers = new [] {3, 9, 10} .Select(x => x * 10) .Select(x => x + 3); output>
 new [] {33, 93, 103}
  • 53. Map Data Flow c map map
  • 54. Select Source Code private sealed class SelectArrayIterator<TSource, TResult> : Iterator<TResult>, IPartition<TResult> { private readonly TSource[] _source; private readonly Func<TSource, TResult> _selector; public SelectArrayIterator(TSource[] source, Func<TSource, TResult> selector) { // ... assert we have something _source = source; _selector = selector; } public override bool MoveNext() { if (_state < 1 | _state == _source.Length + 1) { Dispose(); return false; } int index = _state++ - 1; _current = _selector(_source[index]); return true; } // ... and more https://github.com/dotnet/corefx/blob/7a673547563dc92f1f4cad802d7b57483cdf7500/src/System.Linq/src/System/Linq/Select.cs#L199-L226
  • 55. Select Source Code - constructor private sealed class SelectArrayIterator <TSource, TResult> : Iterator<TResult>, IPartition<TResult> { private readonly TSource[] _source; private readonly Func<TSource, TResult> _selector; public SelectArrayIterator( TSource[] source, Func<TSource, TResult> selector) { // ... assert we have something _source = source; _selector = selector; } https://github.com/dotnet/corefx/blob/7a673547563dc92f1f4cad802d7b57483cdf7500/src/System.Linq/src/System/Linq/Select.cs#L199-L226
  • 56. Select Source Code public override bool MoveNext() { if (_state < 1 | _state == _source.Length + 1) { Dispose(); return false; } int index = _state++ - 1; _current = _selector(_source[index]); return true; } https://github.com/dotnet/corefx/blob/7a673547563dc92f1f4cad802d7b57483cdf7500/src/System.Linq/src/System/Linq/Select.cs#L199-L226
  • 57. Map Example var numbers = new [] {3, 9, 10} .Select(x => x * 10) .Select(x => x + 3); output>
 new [] {33, 93, 103}
  • 58. The Language of Data Flow Manipulations • map • bind • filter • fold • mutate • group by • order by
  • 60. Bind Example var list = new [] { "Midway in our life's journey,", "I went astray" } .SelectMany(s => s.Split(' ')) .Select(w => Regex.Replace(w, "('s)|W+", "")); output>
 new [] { "Midway", "in", “our", "life", "journey", “I", “went", "astray" }
  • 61. Bind Query Syntax Example var list = from sentences in new [] { "Midway in our life's journey,", "I went astray" } from words in sentences.Split(' ') select Regex.Replace(words, "('s)|W+", ""); output>
 new [] { "Midway", "in", “our", "life", "journey", “I", “went", "astray" }
  • 62. Bind Query Syntax Data Flow s map bind split
  • 63. SelectMany Source Code - constructor private sealed class SelectManySingleSelectorIterator
 <TSource, TResult> : Iterator<TResult> ,IIListProvider<TResult> { private readonly IEnumerable<TSource> _source; private readonly Func<TSource, IEnumerable<TResult>> _selector; private IEnumerator<TSource> _sourceEnumerator; private IEnumerator<TResult> _subEnumerator; internal SelectManySingleSelectorIterator(
 IEnumerable<TSource> source,
 Func<TSource, IEnumerable<TResult>> selector) { // ... assert we have something _source = source; _selector = selector; } // ... and more https://github.com/dotnet/corefx/blob/7a673547563dc92f1f4cad802d7b57483cdf7500/src/System.Linq/src/System/Linq/SelectMany.cs#L127-L223
  • 64. SelectMany Source Code public override bool MoveNext() { switch (_state) { case 1: // Retrieve the source enumerator. _sourceEnumerator = _source.GetEnumerator(); _state = 2; goto case 2; case 2: // Take the next element from the source enumerator. https://github.com/dotnet/corefx/blob/7a673547563dc92f1f4cad802d7b57483cdf7500/src/System.Linq/src/System/Linq/SelectMany.cs#L127-L223
  • 65. SelectMany Source Code case 2: // Take the next element from the source enumerator. if (!_sourceEnumerator.MoveNext()) { break; } TSource element = _sourceEnumerator.Current; // Project it into a sub-collection and get its enumerator. _subEnumerator = _selector(element).GetEnumerator(); _state = 3; goto case 3; case 3: // Take the next element from the sub-collection and yield. https://github.com/dotnet/corefx/blob/7a673547563dc92f1f4cad802d7b57483cdf7500/src/System.Linq/src/System/Linq/SelectMany.cs#L127-L223
  • 66. SelectMany Source Code case 3: // Take the next element from the sub-collection and yield. if (!_subEnumerator.MoveNext()) { _subEnumerator.Dispose(); _subEnumerator = null; _state = 2; goto case 2; } _current = _subEnumerator.Current; return true; https://github.com/dotnet/corefx/blob/7a673547563dc92f1f4cad802d7b57483cdf7500/src/System.Linq/src/System/Linq/SelectMany.cs#L127-L223
  • 67. Bind Example var list = new [] { "Midway in our life's journey, I went astray" } .SelectMany(s => s.Split(' ')) .Select(w => Regex.Replace(w, "('s)|W+", "")); output>
 new [] { "Midway", "in", “our", "life", "journey", “I", “went", "astray" }
  • 68. The Language of Data Flow Manipulations • map • bind • filter • fold • mutate • group by • order by
  • 70. Filter Example var numbers = new [] {3, 9, 10, 33, 100} .Where(n => n % 2 != 0); output>
 new [] {3, 9, 33}
  • 72. Where Source Code - constructor internal sealed class WhereArrayIterator<TSource>
 : Iterator<TSource>, IIListProvider<TSource> { private readonly TSource[] _source; private readonly Func<TSource, bool> _predicate; public WhereArrayIterator(
 TSource[] source, Func<TSource, bool> predicate) { // ... assert we have something _source = source; _predicate = predicate; } https://github.com/dotnet/corefx/blob/7a673547563dc92f1f4cad802d7b57483cdf7500/src/System.Linq/src/System/Linq/Where.cs#L198-L255
  • 73. Where Source Code public override bool MoveNext() { int index = _state - 1; TSource[] source = _source; while (unchecked((uint)index < (uint)source.Length)) { TSource item = source[index]; index = _state++; if (_predicate(item)) { _current = item; return true; } } Dispose(); return false; } // ... and more https://github.com/dotnet/corefx/blob/7a673547563dc92f1f4cad802d7b57483cdf7500/src/System.Linq/src/System/Linq/Where.cs#L198-L255
  • 74. Filter Example var numbers = new [] {3, 9, 10, 33, 100} .Where(n => n % 2 != 0); output>
 new [] {3, 9, 33}
  • 75. The Language of Data Flow Manipulations • map • bind • filter • fold • mutate • group by • order by
  • 77. Fold Example var sum = new [] {3, 9, 10, 33, 100} .Aggregate(0, (m, n) => m + n); output>
 155
  • 79. Aggregate Source Code public static TAccumulate Aggregate<TSource, TAccumulate>(
 this IEnumerable<TSource> source,
 TAccumulate seed,
 Func<TAccumulate, TSource, TAccumulate> func) { // ... assert we have something TAccumulate result = seed; foreach (TSource element in source) { result = func(result, element); } return result; } https://github.com/dotnet/corefx/blob/7a673547563dc92f1f4cad802d7b57483cdf7500/src/System.Linq/src/System/Linq/Aggregate.cs#L40-L59
  • 80. Fold Example var sum = new [] {3, 9, 10, 33, 100} .Aggregate(0, (m, n) => m + n); output>
 155
  • 81. The Language of Data Flow Manipulations • map • bind • filter • fold • mutate • group by • order by
  • 83. Mutate Example var visited = new List<int>(); new [] {3, 9, 10, 33, 100} .Where(n => n % 3 == 0) .ToList() .ForEach(n => visited.Add(n)); output>
 //void 
 var visited = new [] {3, 9, 33}
  • 84. Mutate Data Flow c toList mutate writefilter
  • 85. ForEach Source Code public void ForEach(Action<T> action) { // ... assert we have something int version = _version; for (int i = 0; i < _size; i++) { if (version != _version) { break; } action(_items[i]); } // cannot alter list if (version != _version) throw new InvalidOperationException(
 SR.InvalidOperation_EnumFailedVersion); } https://github.com/dotnet/corefx/blob/bffef76f6af208e2042a2f27bc081ee908bb390b/src/System.Collections/src/System/Collections/Generic/ List.cs#L598-L618
  • 86. Mutate Example var visited = new List<int>(); new [] {3, 9, 10, 33, 100} .Where(n => n % 3 == 0) .ToList() .ForEach(n => visited.Add(n)); output>
 //void 
 var visited = new [] {3, 9, 33}
  • 87. The Language of Data Flow Manipulations • map • bind • filter • fold • mutate • group by • order by
  • 89. Group By Example var groups = new [] {3, 9, 10, 33, 100} .GroupBy(n => n % 2 == 0) .ToDictionary(g => g.Key, g => g.ToList()); output>
 new Dictionary<bool, List<int>>() { {true, new List<int>() {10, 100}}, {false, new List<int>() {3, 9, 33}} }
  • 90. Group By Data Flow c convert group by even?
  • 91. GroupBy Source Code internal static Lookup<TKey, TElement> Create(
 IEnumerable<TElement> source, Func<TElement, TKey> keySelector,
 IEqualityComparer<TKey> comparer) { // ... assert we have something Lookup<TKey, TElement> lookup =
 new Lookup<TKey, TElement>(comparer); foreach (TElement item in source) { lookup.GetGrouping(
 keySelector(item),create: true).Add(item); } return lookup; } https://github.com/dotnet/corefx/blob/7a673547563dc92f1f4cad802d7b57483cdf7500/src/System.Linq/src/System/Linq/Lookup.cs#L88-L100
  • 92. Group By Example var groups = new [] {3, 9, 10, 33, 100} .GroupBy(n => n % 2 == 0) .ToDictionary(g => g.Key, g => g.ToList()); output>
 new Dictionary<bool, List<int>>() { {true, new List<int>() {10, 100}}, {false, new List<int>() {3, 9, 33}} }
  • 93. The Language of Data Flow Manipulations • map • bind • filter • fold • mutate • group by • order by
  • 95. Order By Example var unordered = new [] {33, 9, 100, 3, 10} .OrderBy(n => n); output>
 new [] {3, 9, 10, 33, 100}
  • 96. Order By Data Flow c order by identity
  • 97. OrderBy Source Code internal int[] Sort(TElement[] elements, int count) { int[] map = ComputeMap(elements, count); QuickSort(map, 0, count - 1); return map; } https://github.com/dotnet/corefx/blob/f17f1e847aeab830de77f8a46656339d7b0f1b43/src/System.Linq/src/System/Linq/OrderedEnumerable.cs#L508- L513
  • 98. Order By Example var unordered = new [] {33, 9, 100, 3, 10} .OrderBy(n => n); output>
 new [] {3, 9, 10, 33, 100}
  • 99. Canto • Data Flow in a System • The Language of Data Flow Manipulations • Data Flow in Context
  • 100. –Dante (tr. Barolini), Paradiso
 Canto XVII, Lines 55-60 You shall leave everything you love most dearly: this is the arrow that the bow of exile
 shoots first. You are to know the bitter taste
 of others’ bread, how salt it is, and know
 how hard a path it is for one who goes descending and ascending others’ stairs.
  • 102. Domain and Codomain x f y x ∈ X Symbols Natural
 Language X is domain of f y ∈ Y Y is codomain of f
  • 103. Functional Composition Y g (X x) { return y; } x g f z Z f (Y y) { return z; }
  • 105. Example of Composed Functions string G (int x) => x.ToString(); bool F (string y) => int.TryParse(y, out int _);
  • 106. Example of Composed Functions int G F bool
  • 107. Example of Composed Functions new [] { 33 } .Select(G) .Select(F) .First();
  • 109. Example of Composed Functions class Identity { public static T [] Of<T>(T x) => new [] { x }; } Identity.Of(33) .Select(G) .Select(F) .First();
  • 110. Identity Example of Composed Functions int G F bool
  • 111. Context Example of Composed Functions Identity.Of(33) .Select(G) .Select(F) .First(); Remove Lift
  • 112. Functions in Context Example var count = Identity.Of( "Midway in our life's journey, I went astray”) .SelectMany(s => s.Split(' ')) .Select(word => Regex.Replace(word, "('s)|W+", "")) .Where(word => word.Length > 2) .Aggregate(0, (number, _) => number + 1); output>
 6
  • 113. Identity Functions in Context Data Flow s map mutate filter bind split fold count
  • 114. Context Functions in Context Example var count = Identity.Of( "Midway in our life's journey, I went astray”) .SelectMany(s => s.Split(' ')) .Select(word => Regex.Replace(word, "('s)|W+", "")) .Where(word => word.Length > 2) .Aggregate(0, (number, _) => number + 1); output>
 6 Remove Lift
  • 115. String in Context Example output>
 6 var count = “Midway in our life's journey, I went astray” .Split(' ') .Select(word => Regex.Replace(word, "('s)|W+", "")) .Where(word => word.Length > 2) .Count();
  • 116. Context String in Context Example var count = “Midway in our life's journey, I went astray” .Split(' ') .Select(word => Regex.Replace(word, "('s)|W+", "")) .Where(word => word.Length > 2) .Count(); output>
 6 Remove Lift
  • 117.
  • 119. Next Steps • StrangeLoop (conference)
 https://www.thestrangeloop.com/ • Brian Lonsdorf - Professor Frisby Introduces Composable Functional JavaScript (video series)
 https://egghead.io/courses/professor-frisby-introduces-composable-functional- javascript • Aditya Bhargava - Functors, Applicatives, And Monads In Pictures (blog post)
 http://adit.io/posts/2013-04-17- functors,_applicatives,_and_monads_in_pictures.html • Scott Wlaschin - F# for Fun and Profit (blog series)
 http://fsharpforfunandprofit.com/series/thinking-functionally.html • Dixin Yan - LINQ and Functional Programming via C# (blog series)
 https://weblogs.asp.net/dixin/linq-via-csharp
  • 120. Code from C# Source Code • Select, https://github.com/dotnet/corefx/blob/7a673547563dc92f1f4cad802d7b57483cdf7500/src/ System.Linq/src/System/Linq/Select.cs#L199-L226 • SelectMany, https://github.com/dotnet/corefx/blob/7a673547563dc92f1f4cad802d7b57483cdf7500/ src/System.Linq/src/System/Linq/SelectMany.cs#L127-L223 • Where, https://github.com/dotnet/corefx/blob/7a673547563dc92f1f4cad802d7b57483cdf7500/src/ System.Linq/src/System/Linq/Where.cs#L198-L255 • Aggregate, https://github.com/dotnet/corefx/blob/7a673547563dc92f1f4cad802d7b57483cdf7500/ src/System.Linq/src/System/Linq/Aggregate.cs#L40-L59 • ForEach, https://github.com/dotnet/corefx/blob/bffef76f6af208e2042a2f27bc081ee908bb390b/src/ System.Collections/src/System/Collections/Generic/List.cs#L598-L618 • GroupBy, https://github.com/dotnet/corefx/blob/7a673547563dc92f1f4cad802d7b57483cdf7500/ src/System.Linq/src/System/Linq/Lookup.cs#L88-L100 • OrderBy, https://github.com/dotnet/corefx/blob/f17f1e847aeab830de77f8a46656339d7b0f1b43/src/ System.Linq/src/System/Linq/OrderedEnumerable.cs#L508-L513
  • 121. Code • SQL Code, http://sqlfiddle.com/#!6/50442/6 • C# Code, https://gist.github.com/MikeMKH/ cabd17faa9290d6f15592c5df8eded9f • PowerShell Code, https://gist.github.com/MikeMKH/ 97b38013b1871f98ba1ed843efcca6f9
  • 122. Biography • Barolini, Teodolinda. Commento Baroliniano, Digital Dante. New York, NY: Columbia University Libraries, 2017. https://digitaldante.columbia.edu/dante/divine-comedy/ • Ben-Gan, Itzik. Microsoft SQL Server 2012 high-performance T-SQL using Window functions: Microsoft Press, 2012. • Byham, Rick. Microsoft Docs. https://docs.microsoft.com/en-us/sql/t-sql/queries/select-transact-sql • Cook, William R. and Herzman, Ronald B. Dante's Divine Comedy. The Great Courses. http:// www.thegreatcourses.com/courses/dante-s-divine-comedy.html • Equity Regulatory Alert #2016 - 3 Guidance On Test Stock Usage https://www.nasdaqtrader.com/MicroNews.aspx? id=ERA2016-3 • Petricek, Tomas. Beyond the Monad fashion (I.): Writing idioms in LINQ- http://tomasp.net/blog/idioms-in-linq.aspx/ • Securities Industry Automation Corporation. New York, 10 September 2015. https://www.nyse.com/publicdocs/ ctaplan/notifications/trader-update/CTS_CQS%20%20NEW%20DEDICATED%20TEST%20SYMBOL_09102015.pdf • Wickham, Hadley, and Garrett Grolemund. R for data science : import, tidy, transform, visualize, and model data. Sebastopol, CA: O'Reilly Media, 2016. http://r4ds.had.co.nz/
  • 123. Images • By Domenico di Michelino - Jastrow, Self-photographed, Public Domain, https:// commons.wikimedia.org/w/index.php?curid=970608 • By Sailko - Own work, CC BY 3.0, https://commons.wikimedia.org/w/index.php?curid=49841035 • By Lua - Sotheby's, London, 17 December 2015, lot 22, Public Domain, https:// commons.wikimedia.org/w/index.php?curid=32782393 • By Sailko - Own work, CC BY 3.0, https://commons.wikimedia.org/w/index.php?curid=56266161 • By William Blake - http://www.blakearchive.org/exist/blake/archive/work.xq? workid=but812&java=no, Public Domain, https://commons.wikimedia.org/w/index.php? curid=27118518 • By Salvatore Postiglione - http://www.hampel-auctions.com/en/92-325/onlinecatalog-detail- n229.html, Public Domain, https://commons.wikimedia.org/w/index.php?curid=26540023 • Di Giovanni Stradano - Opera propria, 2007-10-25, Pubblico dominio, https:// commons.wikimedia.org/w/index.php?curid=2981981