Download Jar. Libraryless. Click here for Pure Java version (15494L/111K).
1 | !7 |
2 | |
3 | //static TimedCache<L<MediumPost>> mediumPostsCache = new TimedCache(60); |
4 | static volatile L<MediumPost> mediumPosts; |
5 | static volatile long numComputers; |
6 | static new ThreadLocal<S> visitor; |
7 | sbool getMediumPosts; |
8 | |
9 | p { |
10 | doEveryStartingNow(60000, f update); |
11 | } |
12 | |
13 | svoid update { |
14 | numComputers = numComputers(); |
15 | pcall { |
16 | if (getMediumPosts) mediumPosts = getMediumPosts("stefanreich"); |
17 | } |
18 | } |
19 | |
20 | html { |
21 | S originalURI = uri; |
22 | uri = dropSuffix("/", uri); |
23 | print("html starting, uri=" + uri + ", domain=" + domain()); |
24 | |
25 | S vis = registerVisitor(); |
26 | visitor.set(dropIncluding(vis, "<br>")); |
27 | |
28 | S domain = domain(); |
29 | if (swic(domain, "nootrobox.")) |
30 | ret hrefresh("http://ai1.space/1008316/raw"); |
31 | |
32 | if (eq(domain, "code.ai1.space")) |
33 | ret hrefresh("http://snippets.tinybrain.de"); |
34 | //ret hrefresh([[http://tinybrain.de:8080/tb/snippets.php?action=create&description=My+first+JavaX+Program%21&text=%21752%0A%0Ap+%7B%0A++showAnimation%28"%231004373"%2C+10%29%3B+++%2F%2F+10+seconds+of+applause%21%0A%7D]]); |
35 | |
36 | if (swic(domain, "smartbotschat.")) |
37 | ret hrefresh("http://botcompany.de/1011975/raw"); |
38 | |
39 | if (swic(domain, "pixelboys.")) |
40 | ret hrefresh("https://botcompany.de/"); |
41 | |
42 | if (eq(uri, "/chat")) |
43 | ret callHtmlMethod(getBot(#1008998), originalURI, params); |
44 | |
45 | if (eq(uri, "/goodies") || empty(uri) && eqic(domain, "javax.ai1.space")) { |
46 | new L<S> l; |
47 | for (S s : toLinesFullTrim(loadSnippet("#1004044"))) { |
48 | if (s.startsWith("*")) |
49 | l.add(dropPrefixTrim("*", s)); |
50 | else { |
51 | S s2 = dropPrefixSuffixTrim("<pre>", "</pre>", s); |
52 | if (neq(s, s2)) |
53 | appendToLast(l, "\n<pre style='margin-left: 50px'>" + dynamize(s2) + "</pre>"); |
54 | else |
55 | appendToLast(l, s); |
56 | } |
57 | } |
58 | S liStyle = "margin-bottom:0.2em"; |
59 | ret hmobilefix () |
60 | /*+ ahref(snippetLink("#1004132"), |
61 | himg(snippetImgLink("#1004415"), "width", 300, "style", "border: 2px solid black; border-radius: 5px; float: right; margin-left: 20px; margin-bottom: 20px", "title", "JavaX Screenshot"))*/ |
62 | + p(ahref("http://ai1.space", "<< back") |
63 | ) |
64 | + htitle_h1("JavaX Goodies!") |
65 | + ul(l, null, "style", liStyle) |
66 | + p(b(">> " + targetBlank("http://new-program.tinybrain.de/", "Get started here!"), "style", "font-size: 2em")) |
67 | + ul(ll([[ |
68 | Note: JavaX favors on-the-server development, and also public development (because both makes the world better).]], |
69 | [[Thus, the preferred way to make your first program is to |
70 | just ]] + targetBlank("http://tinybrain.de:8080/tb-usercake/login.php", "get a log-in") + " and " |
71 | + targetBlank("http://new-program.tinybrain.de/", "create your program here") + ".", |
72 | [[After hitting "Create snippet", you can immediately run the program in your local ]] + ahref("http://tinybrain.de/x30.jar", "x30.jar") + [[ (it will automatically show on |
73 | top of the list) or ]] + targetBlank("http://app-allperms.tinybrain.de", "in the app") + ".", |
74 | [[In case of any question, or if you want "private" development: I am ]] + ahref("mailto:info@ai1.space", "always glad to help") + "!"), |
75 | null, "style", liStyle) |
76 | + p(ahref("http://tinybrain.de:8080/getraw.php?id=1006863&contentType=text/html", "Privacy Policy")) |
77 | + visitorsChart("float: right; margin-left: 20px; margin-bottom: 20px"); |
78 | } |
79 | |
80 | // Serve landing page |
81 | |
82 | if (eq(uri, "/buy")) |
83 | ret callHtmlMethod(getBot("#1005215"), uri, params); |
84 | |
85 | // Load stuff |
86 | |
87 | L<MediumPost> mediumPosts = main.mediumPosts; |
88 | |
89 | mediumPosts = concatLists(mediumPosts, ll( |
90 | new MediumPost("The A.I. Super-Database", "https://medium.com/@stefanreich/the-a-i-super-database-3ba31410e21"), |
91 | )); |
92 | |
93 | if (eq(uri, "/more")) |
94 | ret htitle("Making Robots That Talk (Stefan Reich)") |
95 | + htotalcenter( |
96 | h1("Welcome To The Advent Of A.I.!") |
97 | |
98 | + h3("Stuff is happening.") |
99 | |
100 | + p("JavaX begins to think about itself (and everything else!). :)") |
101 | |
102 | + p(youtubeEmbed( |
103 | //"fCvxu5f4PeA" |
104 | //"tbHenhl-QTY" |
105 | //"WMJLcRNPUnI" |
106 | //"etSXjcQntIg" |
107 | //"zFV71gvzGqk" // me! |
108 | "YCBt-JggF2c" |
109 | //, 600, 350)) |
110 | , 400, 250)) |
111 | |
112 | /* + p(himg("http://eyeocr.sourceforge.net/filestore/filestore.php?cmd=serve&file=blob_1003828&contentType=image/gif", "alt", "JavaX-Bert!")) |
113 | + p(b("^^ That is " + rawLink("goodies", bertName()) + ". He is always where the sun is shining. ™")) |
114 | */ |
115 | |
116 | + pJavaXInstallations() |
117 | //+ p(targetBlank(rawBotLink("#1003081"), htmlencode("[>> Chat! <<]"))) |
118 | + p(ahref("/buy", "Buy an AI :)")) |
119 | + p(b(ahref("http://snippets.tinybrain.de", "LATEST CODE") + " | " + ahref("http://slides.com/stefanreich", "SLIDES"))) |
120 | + p(hsmall(visitor.get())) |
121 | |
122 | + p(b(ahref("http://medium.com/@stefanreich", "On Medium.com:"))) |
123 | + p(b(join("<br>", |
124 | map(func(MediumPost p) { |
125 | ahref(p.url, htmlencode(p.title)) |
126 | }, mediumPosts))), "style", "font-size: 1.5em; line-height: 140%") |
127 | + p(ahref("http://medium.com/@stefanreich", "[more...]")) |
128 | + p(b(ahref("http://tinybrain.de/x30.jar", "Download JavaX! [PC]") + " " + ahref("http://java.com/download", "[Get Java First]")) + "<br>" |
129 | + ahref("http://app-allperms.tinybrain.de", b("Download JavaX! [Android]")) + " " + ahref("http://tinybrain.de/javax-34.apk", "[bypass play store]") + "<br>" |
130 | + b(ahref(rawLink("goodies"), "JavaX Goodies!")) + "<br>" |
131 | + b(ahref("http://snippets.tinybrain.de", "Code Database"))) |
132 | + p(b("Some Screenshots.")) |
133 | + bigScreenshot("#1004809", "#1004778", "A Simple Expert System") |
134 | + bigScreenshot("#1004649", "#1004648", "Learning To Read") |
135 | + bigScreenshot("#1004530", "#1004528") |
136 | + p("[Thanks to the great " + targetBlank("http://dedexer.sourceforge.net/", "Dedexer") |
137 | + " by " + targetBlank("http://pallergabor.uw.hu/", "Gabor Paller") + "!]") |
138 | // + bigScreenshot("#1004294", "#1004284", "") |
139 | + h3("More screenshots") |
140 | + p(screenshotLin2("#1004618", "#1004616") + " " |
141 | + screenshotLin2("#1004555", "#1004552") + " " |
142 | + screenshotLin2("#1004494", "#1004361") + " " |
143 | + screenshotLin2("#1004359", "#1004353") + " " |
144 | + screenshotLin2("#1004330", "#1003779") + " " |
145 | + screenshotLin2("#1004280", "#1004032") + " " |
146 | + screenshotLin2("#1004267", "#1003779") + " " |
147 | + screenshotLin2("#1004135", "#1004132") + " " |
148 | + screenshotLin2("#1004090", "#1004068") + " " |
149 | + screenshotLink("#1003815", "#1003881") + " " |
150 | + screenshotLink("#1004089", "#1004088") + " " |
151 | + screenshotLink("#1003695", "#1003697") + " " |
152 | + screenshotLink("#1003678", "#1003681") + " " |
153 | + screenshotLink("#1003634", "#1003650") + " " |
154 | + screenshotLink("#1003509", "#1003514") + " " |
155 | + screenshotLink("#1003494", "#1003504") + " " |
156 | + screenshotLink("#1003486", "#1003487") + " " |
157 | + screenshotLink("#1003417", "#1003470") + " " |
158 | + screenshotLink("#1003417", "#1003428") + " " |
159 | + screenshotLink("#1003406", "#1003392")) |
160 | + p(b("Latest Video")) |
161 | + youtubeEmbed("gf7eaIWvnp8"/*"j1wbwdGrBes"*//*"HWs9F5-egOI"*/) // ("Z1dWiMPyvgQ") |
162 | + p(ahref(rawBotLink("#1003220"), "Company") |
163 | + " | " + ahref("http://medium.com/@stefanreich", "Articles") |
164 | + " | " + ahref("mailto:info@botcompany.de", "Mail") |
165 | //+ " | " + ahref(rawBotLink("#1003081"), "Chat") |
166 | + " | " + ahref("/buy", "Buy an AI :)") |
167 | ) |
168 | + p(targetBlank("https://medium.com/@stefanreich/mixing-javax-and-english-6b56f3aecd4", "Making Chatbots from English Dialog") + "<br><br>" |
169 | + targetBlank("https://medium.com/@stefanreich/a-music-player-in-javax-178-lines-ca304d3ae031", "A Music Player In JavaX: 178 Lines")) |
170 | //+ p(visitor.get()) |
171 | + p("Status: " + b("Offering Free Robots For Every Purpose")) |
172 | + p(b("Music.") + "<br>" |
173 | + join("<br>", map(func(S v) { youtubeEmbed(v, 300, 100) }, splitAtSpace( |
174 | "hxfE_-hqCE0 K8qNkFXfvIE 0FCo8vGUKuE Dd8WjeK8riE Xg1lfnyYJpc wNS-mrZvcOg KfvoR6aqcws tZB1sHlB554 zZwJL1J53LU YsTzN1_a5rg BBpGVZ4yMiE gdPwF2oMsdw")))) |
175 | // 98bgS9AuFe4 FjlPtUaXcvg |
176 | ); |
177 | |
178 | if (eq(uri, "/ever-easier")) |
179 | ret page_everEasier(); |
180 | |
181 | if (eq(uri, "/watch")) |
182 | ret page_watch(); |
183 | |
184 | if (eq(uri, "/explodingWindow")) |
185 | ret page_explodingWindow(); |
186 | |
187 | if (eq(uri, "/automaticScreenshots")) |
188 | ret page_automaticScreenshot(); |
189 | |
190 | |
191 | if (eq(uri, "/editor")) |
192 | ret page_editor(); |
193 | |
194 | if (eq(uri, "/gc")) |
195 | ret page_gc(); |
196 | |
197 | if (eq(uri, "/dynamicButtons")) |
198 | ret page_dynamicButtons(); |
199 | |
200 | if (eq(uri, "/screenshots")) |
201 | ret page_screenshots(); |
202 | |
203 | if (eq(uri, "/pastLives")) ret page_pastLives(); |
204 | if (eq(uri, "/screenLens")) ret page_screenLens(); |
205 | if (eq(uri, "/new")) ret page_new(); |
206 | |
207 | // main page |
208 | //ret callHtmlMethod(getBot(#1008998), originalURI, params); |
209 | /*ret htitle("BotCompany.de") + hfullcenter(p("Let's start again.") + p(ahref("https://botcompany.de/chat", "Chat")) |
210 | + p(" ") |
211 | + embedYoutubeWithoutLink("0EoOVvGV_aQ", 250, 150));*/ |
212 | |
213 | /*if (!subBot_isHttps_defaultToTrue()) |
214 | ret hrefresh("https://BotCompany.de" + originalURI + htmlQuery(dropNanohttpdParams(params)));*/ |
215 | |
216 | if (subBot_isHttps() || neqic(domain, "BotCompany.de")) |
217 | ret hrefresh("http://BotCompany.de" + originalURI + htmlQuery(dropNanohttpdParams(params))); |
218 | |
219 | //ret callHtmlMethod(getBot(#1013826), originalURI, params); |
220 | //ret hrefresh("https://www.botcompany.de:8443/1016323/raw"); |
221 | ret hrefresh("https://www.botcompany.de"); |
222 | } |
223 | |
224 | static S page_everEasier() { |
225 | print("html ever-easier"); |
226 | S code = hHiliteJava([[ |
227 | p-awt { |
228 | final new ImageSurface is; |
229 | showFrame(jscroll(is)); |
230 | |
231 | jHandleFileDrop(is, voidfunc(File f) { |
232 | is.setImage(loadBufferedImage(f)) |
233 | }); |
234 | } |
235 | ]], "text-align: left; width: 400px"); |
236 | |
237 | ret htitle("Ever Easier Programming | Stefan Reich") |
238 | + hmobilefix () |
239 | + hGoogleFont("Nunito Sans:900") |
240 | + hcenter2( |
241 | h1("Welcome To Ever-Easier-Programming!", "style", "font-family: 'Nunito Sans', sans-serif; margin-bottom: 50px") |
242 | |
243 | + p(b("Today: Making an image surface in " + ahref("http://javax.ai1.space", "JavaX") + " that you can drag image files into. " + ahref(snippetLink("#1006022"), "Full program."))) |
244 | |
245 | + code |
246 | |
247 | + p(" ") |
248 | |
249 | + hr() |
250 | |
251 | + mediumPosts() |
252 | |
253 | + p(youtubeEmbed("YCBt-JggF2c", 400, 250)) |
254 | |
255 | + p(ahref(rawLink("more"), "[More]") + " " + ahref("mailto:info@botcompany.de", "[Mail]")) |
256 | + p(hsmall(visitor.get())) |
257 | ); |
258 | } |
259 | |
260 | static S rest() { |
261 | ret |
262 | or2(pJavaXInstallations(), p(" ")) |
263 | + p(hsmall(visitor.get())) |
264 | + hr() |
265 | |
266 | + mediumPosts() |
267 | |
268 | + p(ahref(rawLink("more"), "[More]") + " " + ahref("mailto:info@botcompany.de", "[Mail]")) |
269 | |
270 | + p(b("Other Popular Videos.")) |
271 | + p(b(ahref(youtubeLink("kTFS3V4PnQM"), "Perfect Java Garbage Collection"))); |
272 | } |
273 | |
274 | static S mediumPosts() { |
275 | ret p(b(ahref("http://medium.com/@stefanreich", "On Medium.com:"))) |
276 | + mediumPosts2(); |
277 | } |
278 | |
279 | static S mediumPosts2() { |
280 | ret p(b(join("<br>", |
281 | map(func(MediumPost p) { |
282 | ahref(p.url, htmlencode(p.title)) |
283 | }, mediumPosts))), "style", "font-size: 1.5em; line-height: 140%"); |
284 | } |
285 | |
286 | static S page_watch() { |
287 | ret htitle("Let Your Computer Watch You! | Stefan Reich") |
288 | + hmobilefix () |
289 | + hGoogleFont("Nunito Sans:900") |
290 | + hcenter2( |
291 | h1("Let Your Computer Watch You!", "style", "font-family: 'Nunito Sans', sans-serif; margin-bottom: 50px") |
292 | |
293 | + p(himg("http://eyeocr.sourceforge.net/filestore/filestore.php?cmd=serve&file=blob_1006291&contentType=image/png")) |
294 | |
295 | + p(targetBlank("http://tinybrain.de/1006248", "Program.") + " " + ahref("http://tinybrain.de/x30.jar", "Install.") + " " + targetBlank("http://java.com/download", "Java 8.")) |
296 | |
297 | + p(b("FAQ: ") + "Does this program send any information to a server?<br>" + b("Answer: No. ") + "If you want to share your trained fonts, there is another program for that.") |
298 | |
299 | + rest()); |
300 | } |
301 | |
302 | static S page_explodingWindow() { |
303 | ret htitle("Behold The Exploding Window! | Stefan Reich") |
304 | + hmobilefix () |
305 | + hGoogleFont("Nunito Sans:900") |
306 | + hcenter2( |
307 | h1("Behold The Exploding Window!", "style", "font-family: 'Nunito Sans', sans-serif; margin-bottom: 0px") |
308 | |
309 | + htableRaw2(ll(ll(himg("http://eyeocr.sourceforge.net/filestore/filestore.php?cmd=serve&file=blob_1006358&contentType=image/png") + b("<br>(Original)"), |
310 | |
311 | himg("http://eyeocr.sourceforge.net/filestore/filestore.php?cmd=serve&file=blob_1006399&contentType=image/png") + b("<br>(Exploded)"))), ll("cellspacing", 20), null, ll("align", "center")) |
312 | |
313 | + p("Tell me this ain't grand e.g. for finding scrollbars. It's " + ahref("http://tinybrain.de/1006396", "automatic") + "!") |
314 | |
315 | + p(ahref("/watch", "Yesterday's news.")) |
316 | |
317 | + rest()); |
318 | } |
319 | |
320 | static S page_automaticScreenshot() { |
321 | S title = "Automatic Screenshots Of Windows"; |
322 | S program = "http://tinybrain.de/1006425"; |
323 | ret htitle(title + " | Stefan Reich") |
324 | + hmobilefix () |
325 | + hGoogleFont("Nunito Sans:900") |
326 | + hcenter2( |
327 | h1(title, "style", "font-family: 'Nunito Sans', sans-serif; margin-bottom: 0px") |
328 | |
329 | + p(targetBlank(program, himg("http://eyeocr.sourceforge.net/filestore/filestore.php?cmd=serve&file=blob_1006436&contentType=image/png")) |
330 | |
331 | + p(targetBlank(program, himg("http://eyeocr.sourceforge.net/filestore/filestore.php?cmd=serve&file=blob_1006427&contentType=image/png")) |
332 | |
333 | + p("Tell me this ain't grand. " + targetBlank(program, "Program.") + " " + targetBlank("http://tinybrain.de/1006408", "Program 2.") + " " + ahref("/explodingWindow", "Yesterday's news.")) |
334 | |
335 | + rest() |
336 | |
337 | + p(b("Music.")) |
338 | + p(youtubeEmbed("V5AztWseIdU", 300, 100))); |
339 | } |
340 | |
341 | static S page_editor() { |
342 | S title = "Making A Text Editor In 100 Lines"; |
343 | S program = "http://tinybrain.de/1006438"; |
344 | ret htitle(title + " | Stefan Reich") |
345 | + hmobilefix () |
346 | + hGoogleFont("Nunito Sans:900") |
347 | + hcenter2( |
348 | h1(title, "style", "font-family: 'Nunito Sans', sans-serif; margin-bottom: 0px") |
349 | |
350 | + p(youtubeEmbed("8A-25E7T8pA")) |
351 | |
352 | + p("Tell me this ain't grand. " + targetBlank(program, "Program.") + " " + targetBlank("http://tinybrain.de/1006441", "Program 2.") + " " + ahref("/automaticScreenshots", "Yesterday's news.")) |
353 | |
354 | + rest() |
355 | |
356 | + p(b("Music.")) |
357 | + p(youtubeEmbed("zigwkEgKPAk", 300, 100))); |
358 | } |
359 | |
360 | static S page_dynamicButtons() { |
361 | S title = "Dynamic Buttons In " + ahref("http://javax.ai1.space", "JavaX!"); |
362 | S program = "http://tinybrain.de/1006467"; |
363 | ret htitle(hTitleClean(title) + " | Stefan Reich") |
364 | + hmobilefix () |
365 | + hGoogleFont("Nunito Sans:900") |
366 | + hcenter2( |
367 | visitorsChart("float: left; margin-right: 20px") |
368 | + youtubeLinkFloatRight() |
369 | + h1(title, "style", "font-family: 'Nunito Sans', sans-serif; margin-bottom: 0px") |
370 | |
371 | + p(hHiliteJava([[ |
372 | static JScrollPane scroller; |
373 | |
374 | p-substance { |
375 | showFrame(scroller = new JScrollPane); |
376 | scroller.setViewportView(vstack(jbutton("1"), jbutton("2"), jbutton("3"))); |
377 | packFrame(scroller); |
378 | awtLater(scroller, 5000, r { |
379 | scroller.setViewportView(vstack(jbutton("7"), |
380 | jbutton("2"), jbutton("4"), jbutton("6"), jbutton("hello!"))); |
381 | }); |
382 | }]], "text-align: left; width: 640px")) |
383 | |
384 | + p(b("Show some buttons, after 5 seconds show another set of buttons. All with a scrollbar.")) |
385 | |
386 | + p(targetBlank(program, "Program.")) |
387 | |
388 | + h1("Programs " + ahref("https://medium.com/@stefanreich/javax-programs-can-rename-themselves-238c49f3377a", "renaming themselves"), "style", "font-family: 'Nunito Sans', sans-serif; margin-bottom: 0px") |
389 | |
390 | + p(hHiliteJava([[ |
391 | renameProgram(dropStartingFromLast(getProgramTitle(), " - ") |
392 | + " - last renamed " + ymd_hms()); |
393 | ]], "text-align: left; width: 500px")) |
394 | |
395 | + p(targetBlank("http://tinybrain.de/1006471", "Program.")) |
396 | |
397 | + p(b(ahref("/gc", "Yesterday's news."))) |
398 | + rest() |
399 | ); |
400 | } |
401 | |
402 | static S page_screenshots() { |
403 | S title = "Sharing Screenshots Between Windows & Linux In One Click"; |
404 | ret htitle(hTitleClean(title) + " | Stefan Reich") |
405 | + hmobilefix () |
406 | + hGoogleFont("Nunito Sans:900") |
407 | + hcenter2( |
408 | visitorsChart("float: left; margin-right: 20px") |
409 | + youtubeLinkFloatRight() |
410 | + h1(title, "style", "font-family: 'Nunito Sans', sans-serif; margin-bottom: 0px") |
411 | |
412 | + bigScreenshot_noTitle(#1006485, #1005411) |
413 | |
414 | + p(b(ahref("/dynamicButtons", "Yesterday's news."))) |
415 | + rest() |
416 | ); |
417 | } |
418 | |
419 | static S page_new() { |
420 | S title = "A. I. For Everyone by Stefan Reich"; |
421 | ret htitle(hTitleClean(title)) |
422 | + hmobilefix() |
423 | + hGoogleFont("Nunito Sans:900") |
424 | + hcenter2( |
425 | visitorsChart("float: left; margin-right: 20px") |
426 | + youtubeLinkFloatRight() |
427 | |
428 | + header("Welcome To The New AI!") |
429 | |
430 | + p(b(targetBlank("https://www.meetup.com/Artificial-Intelligence-Meetup/events/238795024/", "Meet-Up Apr 10, 2017"))) |
431 | |
432 | + p(ahref("http://ai1.space/wiki/", b("Intelligence Machine."))) |
433 | |
434 | + headerSmaller("A New Type Of Chess Engine") |
435 | + p(youtubeEmbed("TBTXScYgSvg", 500, 500*9/16)) |
436 | |
437 | + mediumPosts2() |
438 | |
439 | /*+ headerSmaller("Is Donald a good person?") |
440 | + p(youtubeEmbed("m4sqmHuJeC8", 400, 400*9/16))*/ |
441 | |
442 | + p(b(ahref("http://javax.ai1.space", "[JavaX]"))) |
443 | |
444 | + header("An Automatic Image Machine :)") |
445 | + p(youtubeEmbed("EJ0gdYIcdUA", 300, 200)) |
446 | |
447 | + header("Text Recognition As A Game") |
448 | + p(youtubeEmbed("j2CSTPwunvs", 300, 200)) |
449 | |
450 | + header("A Telepathic Language For Computers") |
451 | + p(youtubeEmbed("gTlgZkc95IU", 500, 350)) |
452 | |
453 | + header("More Dancing Numbers") |
454 | + p(youtubeEmbed("douXXGMHbfA", 500, 350)) |
455 | |
456 | + p(ahref(youtubeLink("oY_K_QMbfvM"), "A Heart For Cute YouTubers :)")) |
457 | |
458 | + header("Reproducing Images Without Neural Networks") |
459 | + p(youtubeEmbed("tgZbUJJTMqo", 500, 350)) |
460 | |
461 | + header("A. I. Games To Change The World / The Computer That Clicks Itself") |
462 | + p(youtubeEmbed("1HLVUxrvwcc", 500, 350)) |
463 | |
464 | + header("JavaX: Create a tiled background in one line") |
465 | + p(ahref("http://tinybrain.de/1006896", himg("http://eyeocr.sourceforge.net/filestore/filestore.php?cmd=serve&file=blob_1006899&contentType=image/png"))) |
466 | + tag("tt", dynamize([[showFrame(jTiledBackground(#1006895, withMargin(vstack(jbutton("Yo"), jbutton("Mama!")))));]])) |
467 | |
468 | + header("2 New Games") |
469 | + p(youtubeEmbed("T8UTAmqcv1Q", 500, 350)) |
470 | |
471 | + p(b(ahref("/screenLens", "Yesterday's news."))) |
472 | + rest() |
473 | ); |
474 | } |
475 | |
476 | sS header(S s) { |
477 | ret h1(s, "style", "font-family: 'Nunito Sans', sans-serif; margin-bottom: 0px"); |
478 | } |
479 | |
480 | sS headerSmaller(S s) { |
481 | ret h2(s, "style", "font-family: 'Nunito Sans', sans-serif; margin-bottom: 0px"); |
482 | } |
483 | |
484 | static S page_screenLens() { |
485 | S title = "A. I. For Everyone by Stefan Reich"; |
486 | ret htitle(hTitleClean(title)) |
487 | + hmobilefix () |
488 | + hGoogleFont("Nunito Sans:900") |
489 | + hcenter2( |
490 | visitorsChart("float: left; margin-right: 20px") |
491 | + youtubeLinkFloatRight() |
492 | |
493 | + h1("2 New Games", "style", "font-family: 'Nunito Sans', sans-serif; margin-bottom: 0px") |
494 | + p(youtubeEmbed("T8UTAmqcv1Q", 500, 350)) |
495 | |
496 | + h1("A. I. Game Solved", "style", "font-family: 'Nunito Sans', sans-serif; margin-bottom: 0px") |
497 | + p(youtubeEmbed("AUjnnDakJhM", 500, 350)) |
498 | |
499 | + h1("A New A. I. Game!", "style", "font-family: 'Nunito Sans', sans-serif; margin-bottom: 0px") |
500 | + p(youtubeEmbed("OVBDsiQbWdQ", 500, 350)) |
501 | |
502 | + h1("How To Make Your Own Personal Assistant In 1 Minute ", "style", "font-family: 'Nunito Sans', sans-serif; margin-bottom: 0px") |
503 | + p(youtubeEmbed("LetUlRSi5QI", 400, 300)) |
504 | |
505 | + h1("Let Our A.I. Play A Simple Game! / Programming Challenge", "style", "font-family: 'Nunito Sans', sans-serif; margin-bottom: 0px") |
506 | + p(youtubeEmbed("PJC4ej5-PDo", 500, 350)) |
507 | |
508 | + h1("My Screen Lens Is Watching You!", "style", "font-family: 'Nunito Sans', sans-serif; margin-bottom: 0px") |
509 | |
510 | + p(youtubeEmbed("nEeMH_HyTYE", 400, 300)) |
511 | |
512 | + h1("The Mystery", "style", "font-family: 'Nunito Sans', sans-serif; margin-bottom: 0px") |
513 | |
514 | + p(youtubeEmbed("xhlMzQAaMjo", 300, 200)) |
515 | |
516 | + h1("Database Tutorial", "style", "font-family: 'Nunito Sans', sans-serif; margin-bottom: 0px") |
517 | + p(youtubeEmbed("ChHhPgKFYy0", 300, 200)) |
518 | |
519 | + p(b(ahref("/pastLives", "Yesterday's news."))) |
520 | + rest() |
521 | ); |
522 | } |
523 | |
524 | static S page_pastLives() { |
525 | S title = "The Truth About \"Past Lives\" + What Jesus Does Today"; |
526 | ret htitle(hTitleClean(title) + " | Stefan Reich") |
527 | + hmobilefix () |
528 | + hGoogleFont("Nunito Sans:900") |
529 | + hcenter2( |
530 | visitorsChart("float: left; margin-right: 20px") |
531 | + youtubeLinkFloatRight() |
532 | + h1(title, "style", "font-family: 'Nunito Sans', sans-serif; margin-bottom: 0px") |
533 | |
534 | + p(youtubeEmbed("2gh7KsJbWj4", 450, 300)) |
535 | |
536 | + h1("Database Tutorial", "style", "font-family: 'Nunito Sans', sans-serif; margin-bottom: 0px") |
537 | + p(youtubeEmbed("ChHhPgKFYy0", 300, 200)) |
538 | |
539 | + p(b(ahref("/screenshots", "Yesterday's news."))) |
540 | + rest() |
541 | ); |
542 | } |
543 | |
544 | static S page_gc() { |
545 | S title = "Perfect Java Garbage Collection!"; |
546 | S program = "http://tinybrain.de/1006458"; |
547 | S program2 = "http://tinybrain.de/1006272"; |
548 | ret htitle(title + " | Stefan Reich") |
549 | + hmobilefix () |
550 | + hGoogleFont("Nunito Sans:900") |
551 | + hcenter2( |
552 | h1(title, "style", "font-family: 'Nunito Sans', sans-serif; margin-bottom: 0px") |
553 | |
554 | + p(youtubeEmbed("kTFS3V4PnQM", 600, 400)) |
555 | |
556 | + p(b("Enjoy! ") + targetBlank(program, "Program.") + " " + targetBlank(program2, "Program 2.") + " " + ahref("/editor", "Yesterday's news.")) |
557 | + rest() |
558 | ); |
559 | } |
560 | |
561 | static S pJavaXInstallations() { |
562 | ret numComputers == 0 ? "" : |
563 | p(ahref("http://javax.ai1.space", "JavaX") + " installations: " + b(targetBlank("http://tinybrain.de:8080/tb/all-computers.php", numComputers)) + " and counting!"); |
564 | } |
565 | |
566 | static S visitorsChart(S style) { |
567 | ret himg("http://www.botcompany.de:8080/1004435/raw?q=visitors+chart", "width", "150", "height", "110", "style", "border: 2px solid black; border-radius: 5px; " + style); |
568 | } |
569 | |
570 | static S youtubeLinkFloatRight() { |
571 | ret div(targetBlank("https://www.youtube.com/channel/UCSvK6EfxnMTajbe-Qpc6NvA", himg("http://eyeocr.sourceforge.net/filestore/filestore.php?cmd=serve&file=blob_1006478&contentType=image/jpeg", title := "YouTube", width := 57, height := 35, align := "absmiddle")), "style", "float: right"); |
572 | } |
573 | |
574 | !include #1006016 // screenshotLink etc. |
download show line numbers debug dex old transpilations
Travelled to 19 computer(s): aoiabmzegqzx, bhatertpkbcr, cbybwowwnfue, cfunsshuasjs, ddnzoavkxhuk, gwrvuhgaqvyk, irmadwmeruwu, ishqpsrjomds, jmyaexzvplwz, lpdgvwnxivlt, mqqgnosmbjvj, onxytkatvevr, pyentgdyhuwx, pzhvpgtvlbxg, sawdedvomwva, tslmcundralx, tvejysmllsmz, vouqrxazstgt, xfbsdwenvhih
No comments. add comment
Snippet ID: | #1003253 |
Snippet name: | New Homepage (LIVE) |
Eternal ID of this version: | #1003253/86 |
Text MD5: | eb632b2bd56d1713a97e9712dc6caefa |
Transpilation MD5: | 69f1011d292b73c4329063ec97b37e5a |
Author: | stefan |
Category: | javax |
Type: | JavaX source code (desktop) |
Public (visible to everyone): | Yes |
Archived (hidden from active list): | No |
Created/modified: | 2018-12-19 15:53:28 |
Source code size: | 24202 bytes / 574 lines |
Pitched / IR pitched: | No / No |
Views / Downloads: | 2240 / 10552 |
Version history: | 85 change(s) |
Referenced in: | [show references] |