├── .gitignore
├── Makefile
├── README.md
├── package.json
├── s3.exclude
├── tools
├── fuse.coffee
├── server.coffee
└── site-src
│ ├── 404.jade
│ ├── _templates
│ ├── default.jade
│ ├── footer.jade
│ ├── head.jade
│ ├── header.jade
│ └── scripts.jade
│ ├── assets
│ ├── images
│ │ └── h2o-home.png
│ ├── styles
│ │ ├── font-awesome.min.css
│ │ ├── futura-mock.css
│ │ ├── github.css
│ │ ├── icomoon.css
│ │ └── screen.css
│ └── vendor
│ │ ├── bootstrap
│ │ ├── css
│ │ │ ├── bootstrap-theme.css
│ │ │ ├── bootstrap-theme.css.map
│ │ │ ├── bootstrap-theme.min.css
│ │ │ ├── bootstrap.css
│ │ │ ├── bootstrap.css.map
│ │ │ └── bootstrap.min.css
│ │ ├── fonts
│ │ │ ├── glyphicons-halflings-regular.eot
│ │ │ ├── glyphicons-halflings-regular.svg
│ │ │ ├── glyphicons-halflings-regular.ttf
│ │ │ └── glyphicons-halflings-regular.woff
│ │ └── js
│ │ │ ├── bootstrap.js
│ │ │ └── bootstrap.min.js
│ │ ├── fastclick.min.js
│ │ ├── imagesloaded.pkgd.js
│ │ ├── jquery-1.11.1.js
│ │ ├── jquery-1.11.1.min.js
│ │ ├── jquery-1.11.1.min.map
│ │ ├── jquery.actual.min.js
│ │ ├── jquery.html5support.min.js
│ │ ├── jquery.slimscroll.min.js
│ │ ├── jquery.touchwipe.min.js
│ │ ├── jquery.vticker.min.js
│ │ └── modernizr.min.js
│ └── index.md
└── tutorials
├── Training_img
├── AUC1.png
├── AUC2.png
├── ClusterStatus.png
├── ConfMtx1.png
├── ConfMtx2.png
├── CreateFrame1.png
├── CreateFrame2.png
├── Export.png
├── GLMResults.png
├── GainsLift.png
├── GainsLift1.png
├── GainsLift2.png
├── HitRatio.png
├── IOStatus.png
├── Import.png
├── Import2.png
├── Impute1.png
├── Impute2.png
├── Inspect1.png
├── Inspect2.png
├── Interaction1.png
├── Interaction2.png
├── Jobs.png
├── Logs.png
├── NetworkTest.png
├── PCAScore.png
├── POJO.png
├── Parse.png
├── PerfBar.png
├── Predict1.png
├── PredictModel.png
├── PredictResults.png
├── Profiler.png
├── Profiler2.png
├── Quantiles1.png
├── Quantiles2.png
├── STEAMtabular.png
├── SplitFrame.png
├── SplitFrame2.png
├── StackDump.png
├── Summary1.png
├── Summary2.png
├── Tasks.png
├── Timeline.png
├── Training.md
├── UDPDrop.png
├── Upload1.png
├── Upload2.png
└── View.png
├── advanced
├── binaryClassificationHelper.R.md
├── features
│ └── features.R.md
├── higgs
│ ├── .DS_Store
│ ├── higgs.R.md
│ └── images
│ │ └── higgs.png
└── tools
│ └── tools.R.md
├── basics
└── basics.R.md
├── bigdataenv
└── H2OinBigDataEnvironments.pdf
├── devel
├── droplets
│ ├── images
│ │ ├── 1-OpenProject.png
│ │ ├── 2-JavaDroplet.png
│ │ ├── 3-RebuildProject.png
│ │ ├── 4-RunTest.png
│ │ └── 5-TestPassed.png
│ └── tutorial.md
├── hacking
│ ├── Grep.md
│ ├── KMeans.md
│ └── Quantiles.md
└── sparkling_water
│ ├── images
│ ├── h2o-ui.png
│ ├── rstudio.png
│ └── spark-ui.png
│ └── tutorial.md
├── extab
├── excel.md
├── images
│ ├── excel01.png
│ ├── excel02.png
│ ├── excel03.png
│ ├── excel04.png
│ ├── tableau_dashboard.png
│ ├── tableau_data_connection1.png
│ ├── tableau_data_connection2.png
│ ├── tableau_execute.png
│ ├── tableau_execute2.png
│ ├── tableau_execute3.png
│ ├── tableau_execute4.png
│ ├── tableau_h2o_parameters.png
│ ├── tableau_r_connection1.png
│ ├── tableau_r_connection2.png
│ └── workflow.png
└── tableau.md
├── hive_udf_template
├── GBM-example.R
├── README.md
├── localjars
│ └── h2o-model.jar
├── pom.xml
└── src
│ ├── main
│ └── java
│ │ └── com
│ │ └── h2o
│ │ └── hive
│ │ └── udf
│ │ ├── GBMPojo.java
│ │ └── ScoreDataUDF.java
│ └── test
│ └── java
│ └── com
│ └── h2o
│ └── hive
│ └── udf
│ └── UDFExampleTest.java
├── marketing_usecases
├── h2o_training_yan_2014.pdf
├── h2o_world_Vinod.pdf
└── marketing_usecases.R.md
├── setup
├── images
│ ├── 01_virtualbox.png
│ ├── 02_vb_menu.png
│ ├── 03_select_file.png
│ └── 04_import_wizard.png
└── install.md
├── streaming
└── storm
│ ├── H2OStormStarter.java
│ ├── README.md
│ ├── TestH2ODataSpout.java
│ ├── example.R
│ ├── images
│ ├── cats_n_dogs.png
│ ├── h2o_storm.png
│ ├── ij_1.png
│ ├── ij_10.png
│ ├── ij_11.png
│ ├── ij_2.png
│ ├── ij_3.png
│ ├── ij_4.png
│ ├── ij_6.png
│ ├── ij_7.png
│ ├── ij_8.png
│ └── ij_9.png
│ ├── live_data.csv
│ ├── premade_generated_model
│ ├── GBMPojo.java
│ └── h2o-genmodel.jar
│ ├── training_data.csv
│ └── web
│ ├── cat.png
│ ├── cloud.png
│ ├── dog.png
│ ├── index.html
│ └── out
├── supervised
├── classification
│ ├── classification.R.md
│ └── images
│ │ ├── glm_f1_cutoff_0.png
│ │ ├── glm_f1_cutoff_1.png
│ │ ├── glm_roc_0.png
│ │ ├── glm_roc_1.png
│ │ └── metrics.png
├── deeplearning
│ └── deeplearning.R.md
├── gbm
│ └── gbm.R.md
├── glm
│ └── glm.R.md
├── randomforest
│ └── randomforest.R.md
└── regression
│ ├── images
│ └── rand_glm_coef.png
│ └── regression.R.md
├── troubleshooting
├── images
│ ├── Clusterstattunnel.png
│ ├── TroubleshootingHadoopAmbariNodeMgr.png
│ ├── TroubleshootingHadoopAmbariyarnscheduler.png
│ ├── TroubleshootingHadoopClouderayarnnodemgr.png
│ ├── TroubleshootingHadoopClouderayarnscheduler.png
│ └── UpdateR.png
└── troubleshooting.md
├── unsupervised
├── anomaly
│ ├── anomaly.R.md
│ └── images
│ │ ├── autoencoder.png
│ │ ├── bad_both.png
│ │ ├── good_both.png
│ │ └── ugly_both.png
├── clustering
│ └── clustering.R.md
└── dimreduction
│ ├── dimreduction.R.md
│ └── images
│ └── mnist_pca_sdev.png
└── web_ui
└── tutorial.md
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules/
2 | build/
3 |
4 |
--------------------------------------------------------------------------------
/Makefile:
--------------------------------------------------------------------------------
1 | build: node_modules build/site-src
2 | node_modules/.bin/coffee tools/fuse.coffee build/site-src build/site
3 |
4 | run: node_modules
5 | @echo "Go to http://localhost:8080/"
6 | node_modules/.bin/coffee tools/server.coffee build/site
7 |
8 | # After 'make run' you can do this to get to the web site.
9 | browser_on_mac:
10 | open http://localhost:8080
11 |
12 | clean:
13 | rm -rf build
14 |
15 | node_modules: package.json
16 | npm install
17 |
18 | build/site-src:
19 | rsync -rupE tools/site-src build/
20 | rsync -rupE tutorials/ build/site-src/
21 |
22 | mrproper: clean
23 | rm -rf node_modules/
24 |
25 | install:
26 | rm -rf /opt/h2o-training
27 | cp -r build/site/ /opt/h2o-training
28 |
29 | test:
30 | s3cmd sync --dry-run --delete-removed --acl-public --exclude-from s3.exclude build/site/ s3://train.h2o.ai/
31 |
32 | push:
33 | s3cmd sync --delete-removed --acl-public --exclude-from s3.exclude build/site/ s3://train.h2o.ai/
34 |
35 | .PHONY: build run clean test push build/site-src test
36 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Please go to the h2o-tutorials repository instead!
2 |
3 | ## This repository is now outdated, and contains material for H2O World 2014 training using H2O 2.8.
4 |
5 | ---
6 |
7 | H2O Training
8 | ============
9 |
10 | ## Follow tutorials
11 |
12 |
13 | ## Build a site
14 |
15 | * Run `make build` to build a site
16 | * Run `make run` to run a web server
17 | * Go to [http://localhost:8080/](http://localhost:8080/) to see generated site
18 |
19 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "0xdata.com",
3 | "version": "0.0.0",
4 | "description": "0xdata Public Website",
5 | "main": "index.js",
6 | "scripts": {
7 | "test": "echo \"Error: no test specified\" && exit 1"
8 | },
9 | "repository": {
10 | "type": "git",
11 | "url": "https://github.com/0xdata/0xdata.com.git"
12 | },
13 | "keywords": [
14 | "0xdata.com",
15 | "website"
16 | ],
17 | "author": "Prithvi Prabhu ",
18 | "license": "ISC",
19 | "bugs": {
20 | "url": "https://github.com/0xdata/0xdata.com/issues"
21 | },
22 | "homepage": "https://github.com/0xdata/0xdata.com",
23 | "devDependencies": {
24 | "highlight.js": "~8.2.0"
25 | },
26 | "dependencies": {
27 | "escape-html": "~1.0.1",
28 | "twit": "~1.1.18",
29 | "coffee-script": "~1.7.1",
30 | "jade": "~1.5.0",
31 | "js-yaml": "~3.1.0",
32 | "marked": "~0.3.2",
33 | "fs-extra": "~0.10.0",
34 | "connect": "~3.1.0",
35 | "serve-static": "~1.5.0",
36 | "dateformat": "~1.0.8-1.2.3",
37 | "underscore": "~1.6.0"
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/s3.exclude:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | .git/*
3 | *.swp
4 |
--------------------------------------------------------------------------------
/tools/fuse.coffee:
--------------------------------------------------------------------------------
1 | fs = require 'fs'
2 | fp = require 'path'
3 | fse = require 'fs-extra'
4 | jade = require 'jade'
5 | marked = require 'marked'
6 | yaml = require 'js-yaml'
7 | dateformat = require 'dateformat'
8 | underscore = require 'underscore'
9 | highlight = require 'highlight.js'
10 |
11 | SIM = no
12 |
13 | SITEMAP_XML = '''
14 |
15 |
16 | {{urls}}
17 |
18 | '''
19 |
20 | marked.setOptions
21 | smartypants: yes
22 | highlight: (code, lang) ->
23 | (highlight.highlightAuto code, [ lang ]).value
24 |
25 | isYaml = (ext) -> ext.toLowerCase() is '.yml'
26 | isJade = (ext) -> ext.toLowerCase() is '.jade'
27 | isMarkdown = (ext) -> ext.toLowerCase() is '.md'
28 | isContent = (ext) -> (isMarkdown ext) or (isJade ext)
29 | readFile = (path) -> fs.readFileSync path, 'utf8'
30 | writeFile = fse.outputFileSync
31 | copyFile = fse.copySync
32 |
33 | formBin = (src) ->
34 | if isContent src.ext
35 | if src.dir is '.' and (src.slug is 'index' or src.slug is '404')
36 | path: fp.join src.dir, "#{src.slug}.html"
37 | else
38 | if 0 < src.slug.indexOf '_'
39 | tokens = src.slug.split /_+/g
40 | tokens.unshift src.dir
41 | tokens.push 'index.html'
42 | path: fp.join.apply null, tokens
43 | else
44 | path: fp.join src.dir, "#{src.slug}.html"
45 | #path: fp.join src.dir, src.slug, 'index.html'
46 | else
47 | path: src.path
48 |
49 | #TODO turn this into a plugin
50 | createSitemapTxt = (targetDir, urls) ->
51 | writeFile (fp.join targetDir, 'sitemap.txt'), urls.join '\n'
52 |
53 | #TODO turn this into a plugin
54 | createSitemapXml = (targetDir, urls) ->
55 | writeFile (fp.join targetDir, 'sitemap.xml'), SITEMAP_XML.replace '{{urls}}', (urls.map (url) -> "#{url}").join '\n'
56 |
57 | createCategorySlug = (category) ->
58 | category
59 | .toLowerCase()
60 | .replace /[^a-z0-9 ]/g, ''
61 | .replace /\s+/g, '-'
62 |
63 | _templates = {}
64 | loadTemplate = (path, cache=yes) ->
65 | if cache and template = _templates[path]
66 | template
67 | else
68 | template = jade.compileFile path,
69 | filename: path
70 | if cache
71 | _templates[path] = template
72 | template
73 |
74 | forEachPage = (node, go) ->
75 | for name, child of node
76 | if child.__fuse__
77 | go node, child
78 | else
79 | forEachPage child, go
80 | return
81 |
82 | walkSources = (sourceDir, currentDir, node) ->
83 | for name in (fs.readdirSync currentDir) when name[0] isnt '.'
84 | path = fp.join currentDir, name
85 | stat = fs.statSync path
86 | if stat.isDirectory() or stat.isFile()
87 | relpath = fp.relative sourceDir, path
88 | if stat.isDirectory()
89 | if name isnt '_templates'
90 | node[name] = leaf = {}
91 | walkSources sourceDir, path, leaf
92 | else
93 | ext = fp.extname path
94 | slug = fp.basename path, ext
95 | dir = fp.dirname relpath
96 |
97 | src =
98 | dir: dir
99 | slug: slug
100 | ext: ext
101 | path: relpath
102 |
103 | bin = formBin src
104 | path = bin.path.split fp.sep
105 | path.pop() if path[path.length - 1] is 'index.html'
106 |
107 | unless (isContent ext) and slug[0] is '_' and not slug is '_sidebar'
108 | node[name] =
109 | __fuse__: yes
110 | src: src
111 | bin: bin
112 | ext: if ext[0] is '.' then (ext.substr 1).toLowerCase() else ext.toLowerCase()
113 | url: '/' + path.join '/'
114 | path: path
115 | node
116 |
117 | fuse = (context, sourceDir, targetDir) ->
118 | unless fs.existsSync sourceDir
119 | throw new Error 'Source directory does not exist: ' + sourceDir
120 |
121 | unless fs.statSync(sourceDir).isDirectory()
122 | throw new Error 'Not a directory: ' + sourceDir
123 |
124 | tree = walkSources sourceDir, sourceDir, {}
125 |
126 | tree.find = (path) ->
127 | node = tree
128 | for slug in path
129 | unless node = node[slug]
130 | return null
131 | node
132 |
133 | console.log 'Parsing files...'
134 |
135 | forEachPage tree, (parent, item) ->
136 | sourcePath = fp.join sourceDir, item.src.path
137 | if isMarkdown item.src.ext
138 | console.log 'Parsing ' + sourcePath
139 | content = readFile sourcePath
140 | if content[0 ... 3] is '---'
141 | result = content.match /^-{3,}\s([\s\S]*?)-{3,}(\s[\s\S]*|\s?)$/
142 | if result?.length is 3
143 | [ match, metadata, markdown ] = result
144 | else
145 | markdown = content
146 | else
147 | markdown = content
148 |
149 | if metadata
150 | properties = yaml.safeLoad metadata
151 | for k, v of properties
152 | item[k] = if k is 'date' then new Date v else v
153 |
154 | if markdown
155 | item.content = marked markdown
156 |
157 | else if isYaml item.src.ext
158 | console.log 'Parsing ' + sourcePath
159 | item.content = yaml.safeLoad readFile sourcePath
160 |
161 | console.log 'Building site...'
162 |
163 | forEachPage tree, (parent, page) ->
164 | if isMarkdown page.src.ext
165 | if page.src.slug[0] isnt '_'
166 | console.log 'Processing: ' + page.src.path
167 | template = loadTemplate fp.join sourceDir, '_templates', "#{page.template or 'default'}.jade" #TODO
168 | html = template
169 | context: context
170 | pages: tree
171 | page: page
172 |
173 | binPath = fp.join targetDir, page.bin.path
174 | console.log "#{page.src.path} --> #{binPath}"
175 | writeFile binPath, html unless SIM
176 |
177 | else if isJade page.src.ext
178 | if page.src.slug[0] isnt '_'
179 | console.log 'Processing: ' + page.src.path
180 |
181 | sourcePath = fp.join sourceDir, page.src.path
182 | render = loadTemplate sourcePath, no
183 | page.content = render
184 | context: context
185 | pages: tree
186 | page: page
187 |
188 | template = loadTemplate fp.join sourceDir, '_templates', 'default.jade' #TODO
189 | html = template
190 | context: context
191 | pages: tree
192 | page: page
193 |
194 | binPath = fp.join targetDir, page.bin.path
195 | console.log "#{page.src.path} --> #{binPath}"
196 | writeFile binPath, html unless SIM
197 | else
198 | console.log 'Copying: ' + page.src.path
199 | srcPath = fp.join sourceDir, page.src.path
200 | binPath = fp.join targetDir, page.bin.path
201 | console.log "#{srcPath} --> #{binPath}"
202 | copyFile srcPath, binPath unless SIM
203 |
204 | if SIM
205 | console.log 'Dumping...'
206 | writeFile 'fuse.dump', JSON.stringify tree, null, 2
207 |
208 |
209 | urls = []
210 | forEachPage tree, (parent, page) ->
211 | if isContent page.src.ext
212 | urls.push 'http://train.h2o.ai' + page.url
213 |
214 | console.log 'Creating sitemaps...'
215 | createSitemapTxt targetDir, urls
216 | createSitemapXml targetDir, urls
217 |
218 | console.log 'Done!'
219 |
220 | [ runtime, script, sourceDir, targetDir ] = process.argv
221 |
222 | context =
223 | underscore: underscore
224 | formatDate: dateformat
225 |
226 | fuse context, sourceDir, targetDir
227 |
228 | return
229 |
--------------------------------------------------------------------------------
/tools/server.coffee:
--------------------------------------------------------------------------------
1 | connect = require 'connect'
2 | serveStatic = require 'serve-static'
3 | connect()
4 | .use serveStatic process.argv[2]
5 | .listen 8080
6 |
--------------------------------------------------------------------------------
/tools/site-src/404.jade:
--------------------------------------------------------------------------------
1 | h1 Whoops
2 | h3 Looks like what you're looking for can't be found.
3 |
--------------------------------------------------------------------------------
/tools/site-src/_templates/default.jade:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | html(lang="en")
5 |
6 | head
7 | include head.jade
8 |
9 | body.single
10 | main.content
11 | include header.jade
12 |
13 | .container(class='path-#{page.path[0]}')
14 | if page.title
15 | h1= page.title
16 | != page.content
17 |
18 | include footer.jade
19 | include scripts.jade
20 |
21 |
--------------------------------------------------------------------------------
/tools/site-src/_templates/footer.jade:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/h2oai/h2o-world-2014-training/63a7ddebceafd32130e5852108a0e00f035824f0/tools/site-src/_templates/footer.jade
--------------------------------------------------------------------------------
/tools/site-src/_templates/head.jade:
--------------------------------------------------------------------------------
1 | meta(charset="UTF-8")
2 | meta(name='viewport', content='width=device-width, initial-scale=1.0')
3 | - var pageTitle = page.title
4 | title!= '0xdata' + (pageTitle ? ' - ' + pageTitle : '')
5 | meta(name='description', content='0xdata, makers of H2O - The Open Source In-Memory Prediction Engine for Big Data Science')
6 | link(rel='publisher', href='https://plus.google.com/109486779212435464374/')
7 | meta(property='og:title', content='0xdata, makers of H2O - The Open Source In-Memory Prediction Engine for Big Data Science')
8 | meta(property='og:type', content='article')
9 | meta(property='og:image', content='http://0xdata.com/assets/images/h2o.png')
10 | meta(property='og:url', content='http://0xdata.com')
11 | meta(property='og:description', content='H2O makes Hadoop do Math! H2O scales statistics, machine learning and math over Big Data. H2O keeps familiar interfaces like R, Excel & JSON so that big data enthusiasts and experts can explore, munge, model and score data sets using a range of simple to advanced algorithms.')
12 | link(rel='shortcut icon', href='/img/favicon.ico')
13 | link(rel='stylesheet', type='text/css', href='/assets/vendor/bootstrap/css/bootstrap.min.css', media='screen')
14 | link(rel='stylesheet', type='text/css', href='/assets/styles/icomoon.css', media='screen')
15 | link(rel='stylesheet', type='text/css', href='/assets/styles/font-awesome.min.css', media='screen')
16 | link(rel='stylesheet', type='text/css', href='/assets/styles/screen.css', media='screen')
17 | link(rel='stylesheet', type='text/css', href='/assets/styles/github.css', media='screen')
18 |
19 |
20 | //- Remove this TypeKit is used
21 | //link(rel='stylesheet', type='text/css', href='/assets/styles/futura-mock.css', media='screen')
22 | //- /end Remove this TypeKit is used
23 |
24 |
29 |
30 |
40 |
41 |
--------------------------------------------------------------------------------
/tools/site-src/_templates/header.jade:
--------------------------------------------------------------------------------
1 | header.content-header
2 | .site-logo
3 | .container
4 |
5 |
--------------------------------------------------------------------------------
/tools/site-src/_templates/scripts.jade:
--------------------------------------------------------------------------------
1 | script(type='text/javascript', src='/assets/vendor/jquery-1.11.1.min.js')
2 | script(type='text/javascript', src='/assets/vendor/modernizr.min.js')
3 |
4 |
7 |
8 | script(type='text/javascript', src='/assets/vendor/bootstrap/js/bootstrap.min.js')
9 |
10 | script(type='text/javascript').
11 | Modernizr.load([
12 | {
13 | test: (Modernizr.touch),
14 | yep: ['/assets/vendor/fastclick.min.js'],
15 | complete: function() {
16 | if (Modernizr.touch) {
17 | $('body').append("
7 |
8 |
9 |
16 |
17 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
cat
90 |
91 |
92 |
93 |

94 |

95 |
0
96 |

97 |
0
98 |
99 |
207 |
208 |
209 |