Ist vermietet:




Ist vermietet:
Labels: Realwelt
Mein Interview zum Galactic Developments Open Source Science Fiction Projekt ist online auf dem Flyficfiction Fantasy Blog.
_happy_reading()
Labels: SciFi
![]() |
Diese informative Grafik soll zeigen, wie man aus einer schönen Umsatzentwicklung durch zusätzliche Pfeile eine bedenkliche Marktsättigung herbeiargumentieren kann. (Quelle: FAZ.net) |
Labels: SciFi
Recently I was programming with WebKit. I am trying to handle all errors, log them appropriately and discovered an error, that should not happen. If WebKit navigates to a URL and the navigation is cancelled by another navigation, then WebKit throws an error. A pseudo error. Quite a normal approach.
It would be nice, if my error handler could distinguish between real errors and pseudo error Fortunately the error handler gets an error code. The code is -999. A strange number. Could it be, that there are 1000 error cases and just by chance NAVIGATION_CANCELLED is number -999. Probably not.
Stepping a bit closer to the error source, we discover in WebFrame.cpp:
ResourceError WebFrame::cancelledError(const ResourceRequest& request)
{
// FIXME: Need ChickenCat to include CFNetwork/CFURLError.h to get these values
// Alternatively, we could create our own error domain/codes.
return ResourceError(String(WebURLErrorDomain), -999, request.url().string(), String());
}
Looks like -999 is a hack. Other error condition have "real" codes:
ResourceError WebFrame::blockedError(const ResourceRequest& request)
{
// FIXME: Need to implement the String descriptions for errors in the WebKitErrorDomain and have them localized
return ResourceError(String(WebKitErrorDomain), WebKitErrorCannotUseRestrictedPort, request.url().string(), String());
}
Labels: Code
Als CTO der Deutschen Messe Interactive (DMI), einer neuen Tochter der Deutschen Messe AG in Hannover, suche ich für die IT-Abteilung mehrere Leute:
Labels: Jobs
While searching for prior art for Eolas' claims, that the U.S. Patent No. 7,599,985 covers AJAX, I just discovered this:
Print.c(310): PrintHistoryItem(conn, style, "22.05.1998", "1.13.6", "hw", "Split off Primitives from Command, added module HtmlUI");
Print.c(308): PrintHistoryItem(conn, style, "22.06.1998", "1.14", "hw", "response=application/x-html-formencoded response data");
Response.c(363): #define RESPONSECODER_FORM_HEAD "<HTML>\n<BODY BGCOLOR=\"#%s\">\n<FORM name=\"%s\">\n" #define RESPONSECODER_FORM_ITEM "<INPUT name=\"%s\" type=\"hidden\" value=\"%s\">\n" //#define RESPONSECODER_FORM_ITEM "<INPUT name=\"%s\" type=\"text\" value=\"%s\"><br>\n" #define RESPONSECODER_FORM_TAIL "</FORM>\n</BODY>\n</HTML>\n" Response.c(524): int CBResponseCoder_Add(ResponseCoder *coder, char *name, char *value) { int ok= false; if (coder == NULL) return ok; if (! strcasecmp(coder->codertype, QUERYARG_RESPONSE_VALUE_FORM)) { if (coder->cnt+ strlen(name)+ strlen(value)+ strlen(RESPONSECODER_FORM_ITEM) +1 < coder->size) { sprintf(&(coder->buf[coder->cnt]), RESPONSECODER_FORM_ITEM, name, value); coder->cnt+= strlen(&(coder->buf[coder->cnt])); ok= true; } else { TRACE(TR_ERR, "CBResponseCoder_Add: RESPONSECODER_MAX_ITEM_LEN exceeded"); } } else if (! strcasecmp(coder->codertype, QUERYARG_RESPONSE_VALUE_JSCOOKIE)) { if (coder->cnt+ 64+ strlen(name)+ strlen(value)+ strlen(RESPONSECODER_JSCOOKIE_ITEM) + strlen(gMyDomainName) + 1 < coder->size) { char gCookieDomainName[MAX_HOST_NAME_SIZE]; sprintf(&(coder->buf[coder->cnt]), RESPONSECODER_JSCOOKIE_ITEM, name, value, assert2dots(gCookieDomainName, gMyDomainName)); coder->cnt+= strlen(&(coder->buf[coder->cnt])); ok= true; } else { TRACE(TR_ERR, "CBResponseCoder_Add: RESPONSECODER_MAX_ITEM_LEN exceeded"); } } else if (! strcasecmp(coder->codertype, QUERYARG_RESPONSE_VALUE_KEYVALUE)) { if (coder->cnt+ strlen(name)+ strlen(value)+ strlen(RESPONSECODER_KEYVALUE_ITEM) + 1 < coder->size) { sprintf(&(coder->buf[coder->cnt]), RESPONSECODER_KEYVALUE_ITEM, name, value); coder->cnt+= strlen(&(coder->buf[coder->cnt])); ok= true; } else { TRACE(TR_ERR, "CBResponseCoder_Add: RESPONSECODER_MAX_ITEM_LEN exceeded"); } } else { if (coder->cnt+ strlen(value)+ 1 < coder->size) { sprintf(&(coder->buf[coder->cnt]), RESPONSECODER_PLAIN_ITEM, value); coder->cnt+= strlen(&(coder->buf[coder->cnt])); ok= true; } else { TRACE(TR_ERR, "CBResponseCoder_Add: coder->size exceeded"); } } return ok; } Command.c(1203): if (!strncasecmp(subsubsection->part, SUBSUBSECTION_PROPERTIES, strlen(SUBSUBSECTION_PROPERTIES))) { // GET /users/<id>/properties/<propertyname> PropertyList *propertylist= NULL; // ListHdr cmd_params; // ResponseCoder *coder= NULL; // ClearList(&cmd_params); // StringPartArgs2List(theJob->args, &cmd_params); if (subsubsection->next != NULL) { name= subsubsection->next->part; TRACE(TR_CMD, "GET /%s/%s/%s/%s\n", notnullptr(section->part), notnullptr(subsection->part), notnullptr(subsubsection->part), notnullptr(name)); if ((propertylist= CBClient_GetProperties(theClient)) != NULL) { value= CBProperty_FindPropertyInList(propertylist, name); if (value != NULL) { Elem *param= NULL; if (FindCaseNamedElemInList(CMD_PARAM_RESPONSE, (Elem**) ¶m, &cmd_params)) { coder= CBResponseCoder_New(ReadStrElem(param)); } else { coder= CBResponseCoder_New(""); } if (coder != NULL) { CBResponseCoder_Open(coder, "get_single_property_response"); CBResponseCoder_Add(coder, name, value); CBResponseCoder_Close(coder); JobResponse(theJob, HTTP_OK, CBResponseCoder_GetType(coder), CBResponseCoder_GetData(coder), CBResponseCoder_GetLength(coder)); CBResponseCoder_Dispose(coder); } else JobResponse(theJob, HTTP_INTERNALERROR, HTTP_CONTENT_HTML, "CBResponseCoder_New failed", 0); } else JobResponse(theJob, HTTP_NOTFOUND, HTTP_CONTENT_HTML, "no such property available", 0); } else JobResponse(theJob, HTTP_NOTFOUND, HTTP_CONTENT_HTML, "no properties available", 0); ...
Labels: Ajax, Code, virtual presence