Warning: session_start(): open(/var/lib/php/sessions/sess_eihjce1j9pqh6ob0u438pp1evr, O_RDWR) failed: No space left on device (28) in /var/www/tb-usercake/models/config.php on line 51
Warning: session_start(): Failed to read session data: files (path: /var/lib/php/sessions) in /var/www/tb-usercake/models/config.php on line 51
!7
static double aiCacheInterval = 30;
static new ThreadLocal white;
static new ThreadLocal ctc;
static int nComments = 30;
static int nRelations = 5;
sS searchQueriesUniverse = "crefwbbhvngkmicy";
static TimedCache news = new TimedCache(60);
concept Search {
S q, ip;
}
concept CookieToConcept {
S cookie, concept;
*() {
if (!_loading()) concept = aGlobalID();
}
}
concept UserTruth {
S user, text;
}
concept Comment {
S commentID, conceptID, user, text;
*() {
if (!_loading()) commentID = aGlobalID();
}
}
p {
db();
//loadAIConcepts_alwaysFromDisk = true;
aiConceptsMap_fastLoad = loadTruth_fastLoad = true;
startAIConceptsHere();
startTruthTableHere();
}
html {
print("domain: " + domain());
if (eqic(domain(), "code.ai1.lol"))
ret hrefresh("http://snippets.tinybrain.de");
long time = sysNow();
white.set(false); // !oneIn(10));
S cookie = cookieFromUser();
CookieToConcept ctc = null;
if (nempty(cookie)) {
ctc = uniq(CookieToConcept, +cookie);
if (!hasAIConcept(ctc.concept))
createAIConcept_listed(ctc.concept, "-> an anonymous cookie", "created automatically", searchQueriesUniverse);
}
main.ctc.set(ctc);
if (nempty(params.get("news"))) news.clear();
if (eq(uri, "/structure/comments"))
ret serveText(structure(list(Comment)));
if (eq(uri, "/structure/concepts"))
ret serveText(structure(exportableAIConcepts()));
new Matches m;
if (startsWith(uri, "/structure/conceptsByTokens/", m))
ret serveText(structure(exportableAIConcepts(aiConceptsByTokens(urldecode($1)))));
if (startsWith(uri, "/structure/", m)) {
if (possibleGlobalID($1)) {
AIConcept c = getAIConcept($1);
if (c != null)
ret serveText(structure(exportableConcept(c)));
}
ret "";
}
if (eq(uri, "/structure/statements"))
ret serveText(structure(loadTruth_cached()));
S s = hmobilefix() +
hcommentSafe("Cookie: " + cookie
+ (ctc != null ? ", concept: " + ctc.concept : ""))
+ (white! ? "" : hcss("a:link, a:visited, a:hover, a:active { color: white; }"))
+ hbody(htmlImpl(uri, params), style := white!
? "background: white"
: "text-shadow: -1px 0 black, 0 1px black, 1px 0 black, 0 -1px black; color: white; background-color: #262626");
// : "text-shadow: -1px 0 black, 0 1px black, 1px 0 black, 0 -1px black; color: white; background-image: url(\"" + snippetImageGIFURL(#1007679) + "\"); background-repeat: no-repeat; background-position: 50% 0; background-color: #262626");
// : "text-shadow: -1px 0 black, 0 1px black, 1px 0 black, 0 -1px black; color: white; background-image: url(\"" + snippetImageGIFURL(#1007907) + "\"); background-repeat: no-repeat; background-position: 50% 0; background-color: #141414");
ret s + p(hsmall((sysNow()-time) + " ms", style := "color: #EEEEEE"), style := "text-align: right");
}
static O htmlImpl(S uri, final SS params) {
print("Wiki URI: " + uri);
S vis = registerVisitor();
uri = dropSuffix("/", uri);
uri = dropPrefix("/", uri);
S userConcept = userConcept();
processActions(params);
if (eq(uri, "sleep")) {
sleepSeconds(5);
ret "Slept 5, just for you.";
}
S q = trim(params.get("q"));
S qname = q, qcomment = "";
new Matches m;
if (flexMatch("* [*]", q, m)) {
qname = $1;
qcomment = $2;
}
if (nempty(q)) {
cset(uniq(Search, +q, ip := getClientIP()), lastSeen := now());
if (findAIConceptByNameAndCommentIC(qname, qcomment) == null) {
S universe = or2(qname.startsWith("->") ? userConcept : null, searchQueriesUniverse);
createAIConcept(qname, qcomment, universe);
//if (!loadAIConcepts_alwaysFromDisk) clearAICaches();
}
}
if (eq(uri, "import")) {
triggerStandardAIImport();
ret "OK" + hrefresh(1, "/wiki/");
}
if (eq(uri, "export")) {
triggerStandardAIExport();
ret "OK" + hrefresh(1, "/wiki/");
}
if (eq(uri, "searches")) {
ret htitle_h2("Latest Searches")
+ htable(map(func(Search s) { litorderedmap(Query := dynamize(s.q),
IP := dynamize(s.ip)) }, takeFirst(10, sortedByFieldDesc("lastSeen", list(Search)))), false);
}
clearAICaches(aiCacheInterval);
final Map map = aiConceptsMap_cached();
if (possibleGlobalID(uri))
ret renderConcept(uri, params);
// Serve main page
S results = "";
if (nempty(q)) {
L l = imSearch(q);
if (empty(l))
results = h3("No search results for " + htmlencode(quote(q)));
else
results = h3("Search results for " + htmlencode(quote(q)))
+ ul(map(f aiConceptToHTML, l));
}
L l = withoutArrowConcepts(sortedByFieldDesc(values(map), "touched"));
/*S question = "";
pcall {
question = makeQuestion();
question = toUpper(conceptLanguageToEnglish_xyz_noquote(question));
}*/
bool didAddComment = eq("addComment", params.get("action"));
S randomConcept = "";
/*pcall {
S id = randomNonTechnicalConcept();
randomConcept =
hform(
hhidden(action := "addComment")
+ hhidden(conceptID := id)
+ "What do you think about "
+ b(dynamize("\"" + conceptToName(id) + "\""))
+ "? "
+ hinputfield("text", "", autofocus := didAddComment ? "1" : null, style := "text-align: center") + " " + hsubmit("Submit spontaneous comment"));
}*/
S search =
h3("Search")
+ p("Search term, question or statement:")
+ hform(
htextinput("q", q, autofocus := !didAddComment ? "1" : null, style := "text-align: center", onfocus := "this.select()") + " "
+ hsubmit("Go"),
"accept-charset" := "UTF-8");
S auth = "";
if (webAuthed())
auth = " " + ahref("/wiki/import", "Import.")
+ " " + getExportSnippetID(aiConceptsProgram()) + "/"
+ getExportSnippetID(truthTableProgram()) + ". "
+ ahref("/wiki/export", "Export.");
S line = "See " + ahref("https://www.youtube.com/watch?v=gTlgZkc95IU", "Video") + ". " + ahref("http://ai1.lol/new", htmlencode("More videos & articles")) + ". " + ahref("http://tinybrain.de/x30.jar", "Download.")
+ auth;
bool all = nempty(params.get("all"));
L conceptsToShow = all ? l : selectRandomUpTo(l, 20);
S concepts = ul(map(f aiConceptToHTML, conceptsToShow));
L allStatements = reversed(loadTruth_cached());
bool allRelations = nempty(params.get("allrelations"));
L statements = allRelations ? allStatements : takeFirst(nRelations, allStatements);
S relations = ul(map(f statementToHTML, statements));
bool showAllComments = nempty(params.get("allcomments"));
L allComments = sortedByFieldDesc(list(Comment), "created");
L lcomments = showAllComments ? allComments : takeFirst(nComments, allComments);
S comments = ul(map(f commentToHTML2, lcomments));
BigInteger[] ints = extractIntsFromString(vis);
BigInteger today = getBigInt(ints, 0), yesterday = getBigInt(ints, 2);
S load = formatDoubleFull(systemLoad(), 1);
S drive = iceil(userDirDriveFullness()) + "%";
S s = "";
if (nempty(userConcept))
s = "You are: " + dynamize(userConcept) + " / ";
s += today + " : " + yesterday + " / " + load + " / " + drive;
S exp = "Visitors today: " + today + ", yesterday: " + yesterday + ", system load: " + load + ", drive use: " + drive;
S visBox = hdiv(hsmall(s), style := "position:absolute; top: 2px; right: 2px", title := exp);
S latest = "";
int nLatest = parseIntOpt(params.get("latest"));
if (nLatest != 0) nLatest = min(nLatest, 1000); else nLatest = 3;
if (!all) {
L ll = takeFirst(nLatest, withoutArrowConcepts(sortedByFieldDesc(values(map), "created")));
latest = h3("Latest concepts " + (nLatest < 100 ? ahref("?latest=100", "(more)") : ""))
+ ul(map(f aiConceptToHTML, ll));
}
long nc = numComputers();
S slogan = p(
// span(l(l) + " Concepts", style := "font-size: 40px")
span(
targetBlank("https://www.twitch.tv/stefan_reich", "LET'S TWITCH.")
//targetBlank("http://all-computers.tinybrain.de", (nc == 0 ? "MANY" : str(nc)) + " COMPUTERS"),
+ "
" + targetBlank("http://ai1.lol/1002018/raw", "JOIN SLACK!"),
style := "font-size: 40px")
+ "
"
+ hsmall(b(ahref("http://ai1.lol/wiki/", "THE MACHINE")
+ " " + ahref(progLink(#1007674), "understands Fibonacci numbers") + ", " + ahref(progLink(#1007649), "letters to mom")
+ ", " + ahref(progLink(#1007814), "Scandinavian breakfast")
+ " and " + ahref(progLink(#1008300), "products")
+ " :-)") + "
" + line)
+ "
"
+ "We're working on reducing the insanity. " + ahref("mailto:info@ai1.lol", "Mail.")
+ " " + ahref("https://www.meetup.com/Artificial-Intelligence-Meetup/", "Hamburg.")
+ " " + ahref("https://slides.com/stefanreich", "Presentations (German/English).")
+ "
"
+ "Currently working on " + targetBlank(progLink(#1007924), "reading Wikipedia") + " & " + targetBlank(progLink(#1007987), "general super-parsing") + "."
// + b(ahref("http://tinybrain.de/1007649", "Demo 1.") + " "
// + ahref("http://tinybrain.de/1007674", "Demo 2."))
);
ret htitle("Intelligence Machine")
+ visBox
+ hdiv(visitorsChart(""), style := "position:absolute; left: 2px; right: 2px; width: 150px; height: 110px;", title := "Visitors Chart")
+ hcenter2(
(white! ? "" : slogan)
+ (white! ? p(ahref("http://ai1.lol/", hTBImage(white! ? #1007526 : #1002549, "title", "Intelligence Machine"))) : "")
+ (white! ? slogan : "")
//+ p("It seems we're moving towards actual applications. New contacts!")
+ news.get(func -> S { loadSnippet(#1008166) })
+ youtubeEmbedSideBySide("KXPLUaaVPIw", /*"wuz8yhnN9fs",*/ "UVMiYHeotFE")
//+ p(htbimg(#1008147))
//+ p(htbimg(#1008146))
// + p(dynamize(question))
+ randomConcept
+ search)
+ results
//+ hcenter2(latestDrawing() + randomDrawing())
+ "
"
+ htableRaw_valignTop(ll(ll(
latest +
hdiv(_defaultAd(), style := "float: left; margin-right: 30px; margin-bottom: 20px") +
h3(
(all ? "Concepts (" + lstr(l)
: "Random concepts (" + l(conceptsToShow) + " of " + ahref("?all=1", l(l)))
+ ")") + concepts,
//hdiv(_defaultAd(), style := "float: right; margin: 10px") +
h3(showAllComments ? "All Comments (" + l(lcomments) + ")"
: "Latest Comments (" + l(lcomments) + " of " + ahref("?allcomments=1", l(allComments)) + ") - YOU can comment too")
+ comments
+ h3(allRelations
? "All Relations (" + l(statements) + ")"
: "Latest Relations (" + l(statements) + " of " + ahref("?allrelations=1", l(allStatements)) + ") - We should clean them up some time ^^")
+ relations)), "border", "0")
+ hcenter2(htableRaw_valignTop(ll(ll(latestDrawing(), randomDrawing())), "cellspacing", 20))
;
}
static S aiConceptToHTML(AIConcept c) {
ret (nempty(c.imageMD5) ? "[w/image] " :
hasSuggestedImage(c) ? "[w/sugg. image] " : "") +
dynamize(c.globalID) + " - " + dynamize(aiConceptToString2(c));
}
static S statementToHTML(Statement s) {
ret ahref("http://ai1.lol/" + s.globalID, "*") + " " + dynamize(or2(s.possibleEnglishTranslation, "?") + " - " + s.text);
}
static S commentToHTML(Comment c) {
ret hsafeComment(c.commentID) + dynamize(c.user + " says: " + c.text);
}
// for start page
static S commentToHTML2(Comment c) {
ret ahref(intelligenceMachineLink(c.conceptID), dynamize(conceptToName(c.conceptID)))
+ dynamize(
//c.user + " says on " + c.conceptID + ": " + c.text
": " + c.text
);
}
sS renderConcept(S uri, SS params) {
// Serve concept
final Map map = aiConceptsMap_cached();
final AIConcept c = map.get(toLower(uri));
Statement st = findWhere(loadTruth_cached(), globalID := toLower(uri));
if (st != null) ret renderStatement(c, st, params);
if (c == null) ret "Concept not found: " + toLower(uri);
S html = htitle(c.name + " [" +
(nempty(c.comment) ? c.comment + " / " : "") + c.globalID + "]")
+ h2(dynamize(aiConceptToString(c)));
html += ul(
"Universe: " + dynamize(c.originatingUniverse),
eq(c.originatingUniverse, userConcept()) ? "You made this" : null,
//"Image MD5: " + htmlencode(c.imageMD5)
"Created: " + formatDateAndTime(c.created),
"Touched: " + formatDateAndTime(c.touched),
c.imported != 0 || nempty(c.importedFrom) ? "Imported: " + formatDateAndTime(c.imported) + " from " + dynamize(c.importedFrom) : null
);
if (nempty(c.imageMD5) && imageServerHas(c.imageMD5))
html += p(himg(imageServerJPEGLink(c.imageMD5)));
if (c.suggestedImage.has()) {
print("PNG path: " + c.suggestedImage->pngPath);
BufferedImage img = c.suggestedImage->getImage();
if (img != null) {
uploadToImageServerIfNotThere(img, aiConceptToString(c));
if (empty(c.suggestedImageMD5))
c.suggestedImageMD5 = imageMD5(img);
}
}
if (nempty(c.suggestedImageMD5))
html += h3("Suggested image (from Google search)") + p(himg(imageServerJPEGLink(c.suggestedImageMD5));
L statements = [Statement s : loadTruth_cached() | containsIgnoreCase(s.text, c.globalID)];
if (nempty(statements))
html += h3("Statements about this") + ul(map(f statementToHTML, statements));
L comments = conceptsWhere(Comment, conceptID := c.globalID);
html += h3("Comments") + ul(map(f commentToHTML, comments));
html += h3("Add comment") + hform(
hhidden(action := "addComment")
+ hhidden(conceptID := c.globalID)
+ htableRaw_valignTop(ll(
ll("Your Comment", hinputfield("text")),
ll("", hsubmit("Add comment"))
)));
html += p(ahref("http://ai1.lol/wiki", "[Home]"));
ret html;
}
sS hselectNode(Map map, O... params) {
ret hselect(orderMapByValue(mapValues(f nodeToString, map)), params);
}
sS renderStatement(AIConcept c, Statement st, SS params) {
if (nempty(params.get("retranslate"))) {
RemoteDB db = new RemoteDB(truthTableProgram());
db.xset(db.rc(st.id), possibleEnglishTranslation := null);
db.close();
st.possibleEnglishTranslation = null;
}
bool hasTranslation = nempty(st.possibleEnglishTranslation);
S html = htitle_h2("Statement " + st.globalID)
+ ul(
"English (machine-generated): " + dynamize(or2(st.possibleEnglishTranslation, "?")),
"Computer Language: " + dynamize(st.text),
st.imported != 0 || nempty(st.importedFrom) ? "Imported: " + formatDateAndTime(st.imported) + " from " + dynamize(st.importedFrom) : null)
+ (!hasTranslation ? "" : p(ahref("?retranslate=1", "Request retranslation")));
html += p(ahref("http://ai1.lol/wiki", "[Home]"));
ret html;
}
svoid processActions(SS params) {
S action = params.get("action");
if (eq(action, "addRelation")) {
S id1 = params.get("concept1");
S id2 = params.get("concept2");
S rel = params.get("rel");
if (nempty(id1) && nempty(rel))
createStatement(conceptQuote(rel) + " " + conceptQuote(id1) + " " + conceptQuoteOpt(id2));
}
if (eq(action, "addComment")) {
S conceptID = params.get("conceptID");
S text = trim(params.get("text"));
if (possibleGlobalID(conceptID) && nempty(text)) {
S user = ctc->concept;
uniq(Comment, +user, +conceptID, +text);
}
}
}
static S latestDrawing() {
L metas = getDrawings();
ret empty(metas) ? "" :
h3("Latest Drawing")
+ renderDrawing(first(metas));
}
sS renderDrawing(O meta) {
ret p(renderMeta(meta) + "
"
+ hsmall(ahref(progLink(#1007609), "Make your own.")
+ " " + ahref("http://ai1.lol/images", "More drawings.")));
}
static S randomDrawing() {
O meta = random(dropFirst(getDrawings()));
if (meta == null) ret "";
ret h3("Random Drawing")
+ renderDrawing(meta);
}
static L getDrawings() {
pcall {
O imageServer = getBot(#1004590);
L metas = cast call(get(imageServer, "mainConcepts"), "list", "ImageMeta");
metas = [O meta : metas | startsWithIC(getString(meta, "name"), "Drawing ")];
metas = sortedByFieldDesc(metas, "created");
ret metas;
}
ret ll();
}
static S renderMeta(O meta) {
S md5 = getString(meta, "md5");
S jpg = imageServerJPEGLink(md5);
ret ahref(jpg, himg(jpg,
//style := "zoom: 50%" // works only on Chrome
onload := "this.width *= 0.7; this.onload=null;"
));
}
static L exportableAIConcepts(Collection l) {
ret map(f exportableConcept, l);
}
static L exportableAIConcepts() {
ret exportableAIConcepts(aiConcepts());
}
static Concept exportableConcept(AIConcept c) {
Concept cc = unlisted(Concept);
cc.className = "AIConcept";
cc.created = c.created;
copyConceptFields(c, cc, "globalID", "name");
if (nempty(c.comment)) copyConceptFields(c, cc, "comment");
ret cc;
}
static S userConcept() {
ret ctc! != null ? ctc->concept : "";
}
static long numComputers() {
ret getLong(getBot(#1003253), "numComputers");
}
!include #1007812 // Question Maker