First lets get out of the way who is complaining. Hi, I am Marco Peereboom and I write open source code for fun. I have been involved in several projects and the google will tell you which ones. I am by no stretch of the imagination a great programmer but I have been around and I have written a couple of things.
Recently I got involved in writing some code that requires secure communications and I figured that there was no better way to get cranking than to use a well known and widely used library.
Essentially my problem boils down to this:
The debate is not about the merit of this idea but this is where the journey started. It sounded simple enough so off to the web looking for documentation and code snippets, this is obviously going to be a walk in the park since all these problems have been solved before.
After messing around with this code for about a month I decided to write this up for the tubes in the hope that I can save some souls. I have come to the conclusion that OpenSSL is equivalent to monkeys throwing feces at the wall. It is, bar none, the worst library I have ever worked with.  Since circa 1998 the whole world has been trusting their secure communications to this impenetrable morass that calls itself the "OpenSSL" project. I bet that the doctors that work on that shitshow can not prescribe anything useful either!
Day 1:
Hmmm can't find a whole bunch of code at all. What I do find doesn't help me with my CA problem at all. Everything I do find is basically a whole bunch of HOWTOS written by people who don't seem to grasp the underlying problems. They mean well but really hurt the community as a whole by providing recipes for disaster. Alright no problem off to Barnes & Nobles and lets see what we can find.
Crap! Nothing really. I found 2 books and they were mostly about using the command line tool. One had some code examples but nothing advanced at all. Apparently people only seem to care about using openssl "the tool".
I had peeked at the code and it gave me vertigo so I stepped away from it. Anyway at this point I was starting to suspect that this might not be as easy as I had hopped. Time to go home anyway and drink a cold one.
Day 2:
Alright screw it! I'll look at the damn code; I mean all books and examples on the web use it. At least it'll point me to what functions I need to call and I'll be able to find those in the fine documentation. First I obviously need to figure out how to use openssl "the tool".
8 hours later...
Phew I got something that works after reading endless HOWTOS, specs and postings on the tubes. The documentation was, how does one say that? Really really bad! Let me share with you my labor of love. I created 3 scripts to illustrate my problem of having a CA that signs client and server certificates.
#/bin/sh mkdir -p ca/private chmod 700 ca/private openssl req -x509 -days 3650 -newkey rsa:1024 -keyout ca/private/ca.key -out ca/ca.crtcreate_server
#/bin/sh mkdir -p server/private chmod 700 server/private openssl genrsa -out server/private/server.key 1024 openssl req -new -key server/private/server.key -out server/server.csrcreate_client
#/bin/sh mkdir -p client/private chmod 700 client/private openssl genrsa -out client/private/client.key 1024 openssl req -new -key client/private/client.key -out client/client.csrenough for a day. Time to go home.
Day 3: Alright, that openssl "the tool" stuff out of the way lets dig into that code. Hmmm, where is main? How does it call the individual modules? Random camel capitalization mixed with underscores wow! Ugh MAIN macro, great. *WASH_Eyes_outWith_soap*
Ok we are going to need some serious tags to be able to navigate this morass. After a couple of hours of digging through the code I kind of get the hang of it (thanks vim!). Now it is time to start walking this code backwards and see if I can generate a CA without having to use openssl "the tool". A few more hours go by and the incomplete man pages, no man pages, poorly written man pages really start to wear on me. No help from google, bing, yahoo etc. The documentation is simply non-existent and what does exist is outdated and does not match reality. Screw it, I am going home!
Day 4:
I start writing some code based on what I find in openssl "the tool". Progress is painfully slow due to the embarrassingly bad style, indentation and don't get me started about impenetrable #ifdef goo. Speaking of #ifdefs I saw several dangling ones that would eat an instruction; e.g.
#ifdef (OMG) if (moo) { ... } else #endif /* OMG */ yeah();This is actually the pretty version. The one I ran into was over a couple hundred lines of code with indentation that makes a grown man cry. Lets also get one other thing out of the way. If you think
if (moo) { dome_something_dumb(); } else { or_not(); }or
if ( moo) { blah(); }
if (bad) goto err; ... if (0) { err: do_something_horrible(); }is readable I suggest you visit an optometrist. Possibly even a proctologist. Lets look at a few real examples
if ((OBJ_obj2nid(obj) == NID_pkcs9_emailAddress) && (str->type != V_ASN1_IA5STRING)) { BIO_printf(bio_err,"\nemailAddress type needs to be of type IA5STRING\n"); goto err; } if ((str->type != V_ASN1_BMPSTRING) && (str->type != V_ASN1_UTF8STRING)) { j=ASN1_PRINTABLE_type(str->data,str->length); if ( ((j == V_ASN1_T61STRING) && (str->type != V_ASN1_T61STRING)) || ((j == V_ASN1_IA5STRING) && (str->type == V_ASN1_PRINTABLESTRING))) { BIO_printf(bio_err,"\nThe string contains characters that are illegal for the ASN.1 type\n"); goto err; } }Here is an example of a function stack; vim to the rescue!
if (!SSL_CTX_use_certificate_file(ctx, "server/server.crt", SSL_FILETYPE_PEM)) ctrl ] ... else if (type == SSL_FILETYPE_PEM) { j=ERR_R_PEM_LIB; x=PEM_read_bio_X509(in,NULL,ctx->default_passwd_callback,ctx->default_passwd_callback_userdata); ctrl ] ... #define PEM_read_bio_X509(bp,x,cb,u) (X509 *)PEM_ASN1_read_bio( \ (char *(*)())d2i_X509,PEM_STRING_X509,bp,(char **)x,cb,u) ctrl ] ... if (!PEM_bytes_read_bio(&data, &len, NULL, name, bp, cb, u)) return NULL; ctrl ] ... if (!PEM_read_bio(bp,&nm,&header,&data,&len)) { ctrl ] ... i=BIO_gets(bp,buf,254); ctrl ] ... i=b->method->bgets(b,in,inl);That spanned 5 files, 6 indirections and all that to open and fgets the contents of a file. And we still are doing an indirect call. All this work and jumping around when all I wanted is to have a function that can translate a PEM (NOT in a file!!!) cert into a X509 structure. But between the million or so functions nothing handy like that exists; or so I suspect but since there are no docs I really have to guess. I can't rob you guys from this gem either:
#ifndef OPENSSL_NO_STDIO /*! * Load CA certs from a file into a ::STACK. Note that it is somewhat misnamed; * it doesn't really have anything to do with clients (except that a common use * for a stack of CAs is to send it to the client). Actually, it doesn't have * much to do with CAs, either, since it will load any old cert. * \param file the file containing one or more certs. * \return a ::STACK containing the certs. */ STACK_OF(X509_NAME) *SSL_load_client_CA_file(const char *file) { BIO *in; X509 *x=NULL; X509_NAME *xn=NULL; STACK_OF(X509_NAME) *ret = NULL,*sk; sk=sk_X509_NAME_new(xname_cmp); in=BIO_new(BIO_s_file_internal()); if ((sk == NULL) || (in == NULL)) { SSLerr(SSL_F_SSL_LOAD_CLIENT_CA_FILE,ERR_R_MALLOC_FAILURE); goto err; } if (!BIO_read_filename(in,file)) goto err; for (;;) { if (PEM_read_bio_X509(in,&x,NULL,NULL) == NULL) break; if (ret == NULL) { ret = sk_X509_NAME_new_null(); if (ret == NULL) { SSLerr(SSL_F_SSL_LOAD_CLIENT_CA_FILE,ERR_R_MALLOC_FAILURE); goto err; } } if ((xn=X509_get_subject_name(x)) == NULL) goto err; /* check for duplicates */ xn=X509_NAME_dup(xn); if (xn == NULL) goto err; if (sk_X509_NAME_find(sk,xn) >= 0) X509_NAME_free(xn); else { sk_X509_NAME_push(sk,xn); sk_X509_NAME_push(ret,xn); } } if (0) { err: if (ret != NULL) sk_X509_NAME_pop_free(ret,X509_NAME_free); ret=NULL; } if (sk != NULL) sk_X509_NAME_free(sk); if (in != NULL) BIO_free(in); if (x != NULL) X509_free(x); if (ret != NULL) ERR_clear_error(); return(ret); } #endifWow! that one does it all! unreadable, lots of indirection and no clear direction as to what the function is trying to achieve. Got to love the if (0) construct! I mean that obviously wins all the beauty, aesthetics & NIH awards. You have to be overjoyed to know that this type of code runs a lot of our "secure" internet.
Silly me to just want to have a function to read certs from LDAP or memory so that I can write the LDAP code myself. Not much code got written, I need to go home and go into some sort of drunken stooper.
 Armed with a fresh headache I get with the coding part. After a couple of hours of reading and rereading some openssl "the tool" code I came up with this:
int create_ca(char *retstr, size_t retlen) { int rv = 1; int days = 365 * 10; char *password = NULL; EVP_PKEY pkey, *tmppkey = NULL; BIGNUM bn; RSA *rsa = NULL; X509_REQ *req = NULL; X509_NAME *subj; X509 *x509 = NULL; BIO *out = NULL; /* generate private key */ if ((rsa = RSA_new()) == NULL) ERROR_OUT(ERR_SSL, done); bzero(&bn, sizeof bn); if (BN_set_word(&bn, 0x10001) == 0) ERROR_OUT(ERR_SSL, done); if (RSA_generate_key_ex(rsa, 1024, &bn, NULL) == 0) ERROR_OUT(ERR_SSL, done); bzero(&pkey, sizeof pkey); if (EVP_PKEY_assign_RSA(&pkey, rsa) == 0) ERROR_OUT(ERR_SSL, done); /* setup req for certificate */ if ((req = X509_REQ_new()) == NULL) ERROR_OUT(ERR_SSL, done); if (X509_REQ_set_version(req, 0) == 0) ERROR_OUT(ERR_SSL, done); subj = X509_REQ_get_subject_name(req); if (validate_canew(subj, &password)) { snprintf(last_error, sizeof last_error, "validate_canew failed"); ERROR_OUT(ERR_OWN, done); } /* set public key to req */ if (X509_REQ_set_pubkey(req, &pkey) == 0) ERROR_OUT(ERR_SSL, done); /* generate 509 cert */ if ((x509 = X509_new()) == NULL) ERROR_OUT(ERR_SSL, done); bzero(&bn, sizeof bn); if (BN_pseudo_rand(&bn, 64 /* bits */, 0, 0) == 0) ERROR_OUT(ERR_SSL, done); if (BN_to_ASN1_INTEGER(&bn, X509_get_serialNumber(x509)) == 0) ERROR_OUT(ERR_SSL, done); if (X509_set_issuer_name(x509, X509_REQ_get_subject_name(req)) == 0) ERROR_OUT(ERR_SSL, done); if (X509_gmtime_adj(X509_get_notBefore(x509), 0) == 0) ERROR_OUT(ERR_SSL, done); if (days == 0) { snprintf(last_error, sizeof last_error, "not enough days for certificate"); ERROR_OUT(ERR_OWN, done); } days *= 60 * 60 * 24; if (X509_gmtime_adj(X509_get_notAfter(x509), days) == 0) ERROR_OUT(ERR_SSL, done); if (X509_set_subject_name(x509, X509_REQ_get_subject_name(req)) == 0) ERROR_OUT(ERR_SSL, done); if ((tmppkey = X509_REQ_get_pubkey(req)) == NULL) ERROR_OUT(ERR_SSL, done); if (X509_set_pubkey(x509, tmppkey) == 0) ERROR_OUT(ERR_SSL, done); if (X509_sign(x509, &pkey, EVP_sha1()) == 0) ERROR_OUT(ERR_SSL, done); /* write private key */ out = BIO_new(BIO_s_file()); if (BIO_write_filename(out, CA_PKEY) <= 0) ERROR_OUT(ERR_SSL, done); if (chmod(CA_PKEY, S_IRWXU)) ERROR_OUT(ERR_LIBC, done); if (PEM_write_bio_PrivateKey(out, &pkey, EVP_des_ede3_cbc(), NULL, 0, NULL, password) == 0) ERROR_OUT(ERR_SSL, done); BIO_free_all(out); /* write cert */ out = BIO_new(BIO_s_file()); if (BIO_write_filename(out, CA_CERT) <= 0) ERROR_OUT(ERR_SSL, done); if (PEM_write_bio_X509(out, x509) == 0) ERROR_OUT(ERR_SSL, done); BIO_free_all(out); rv = 0; done: if (tmppkey) EVP_PKEY_free(tmppkey); if (x509) X509_free(x509); if (req) X509_REQ_free(req); if (rsa) RSA_free(rsa); return (rv); }As you can see I create an awful mechanism to at least get some sort of usable fault stack to trace errors. Here is the macro in its full horror:
/* errors */ #define ERR_LIBC (0) #define ERR_SSL (1) #define ERR_OWN (2) #define ERROR_OUT(e, g) do { push_error(__FILE__, __FUNCTION__, __LINE__, e); goto g; } while(0)Dear $DEITY I beg your forgiveness for I have sinned.
Let me show the other bits to make this work just for completions sake and to hope I can help another lost soul that has to put up with this poo. The functions that play with this garbage:
char * geterror(int et) { char *es; switch (et) { case ERR_LIBC: strlcpy(last_error, strerror(errno), sizeof last_error); break; case ERR_SSL: es = (char *)ERR_lib_error_string(ERR_get_error()); if (es) strlcpy(last_error, es, sizeof last_error); else strlcpy(last_error, "unknown SSL error", sizeof last_error); break; default: strlcpy(last_error, "unknown error", sizeof last_error); /* FALLTHROUGH */ case ERR_OWN: break; } return (last_error); } void push_error(char *file, char *func, int line, int et) { struct error *ce; if ((ce = calloc(1, sizeof *ce)) == NULL) fatal("push_error ce"); if ((ce->file = strdup(file)) == NULL) fatal("push_error ce->file"); if ((ce->func = strdup(func)) == NULL) fatal("push_error ce->func"); if ((ce->errstr = strdup(geterror(et))) == NULL) fatal("push_error ce->errstr"); ce->line = line; SLIST_INSERT_HEAD(&ces, ce, dlink); }Here are the remaining utility functions to make it all "work":
int cert_find_put(char *entry, X509_NAME *subj, ssize_t min, ssize_t max) { struct valnode *v; int rv = 1; v = find_valtree(entry); if (v && v->length > 0) { if (min != -1 && v->length < min) { snprintf(last_error, sizeof last_error, "%s minimum constraint not met %lu < %lu", entry, v->length, min); ERROR_OUT(ERR_OWN, done); } if (max != -1 && v->length > max) { snprintf(last_error, sizeof last_error, "%s maximum constraint not met %lu > %lu", entry, v->length, max); ERROR_OUT(ERR_OWN, done); } if (X509_NAME_add_entry_by_txt(subj, entry, MBSTRING_ASC, v->value, -1, -1, 0) == 0) ERROR_OUT(ERR_SSL, done); } else { log_debug("cert_find_put: %s not found", entry); goto done; } rv = 0; done: return (rv); } int validate_canew(X509_NAME *subj, char **pwd) { struct valnode *password, *password2; int rv = 1; password = find_valtree("password"); password2 = find_valtree("password2"); if (password && password2) { if (strcmp(password->value, password2->value) || password->length == 0) { snprintf(last_error, sizeof last_error, "invalid password"); ERROR_OUT(ERR_OWN, done); } *pwd = password->value; } if (password == NULL && password2 == NULL) { snprintf(last_error, sizeof last_error, "password can't be NULL"); ERROR_OUT(ERR_OWN, done); } if (cert_find_put("C", subj, 2, 2)) { snprintf(last_error, sizeof last_error, "invalid country"); ERROR_OUT(ERR_OWN, done); } cert_find_put("ST", subj, -1, -1); cert_find_put("L", subj, -1, -1); cert_find_put("O", subj, -1, -1); cert_find_put("OU", subj, -1, -1); cert_find_put("CN", subj, -1, -1); cert_find_put("emailAddress", subj, -1, -1); rv = 0; done: return (rv); }Jubilation! We have a CA OMG!!!oneONE!!!111~ Time to go home!
Day 6:
I'll get to writing stuff into LDAP later. I need to work on something else for a while. So next up, a client/server app that negotiates SSL/TLS. First I try various examples on the net.
Big bag of FAIL
Well, then we'll look at the man pages, I mean they totally come with an example!

Third big bag of FAIL
Enough, I am going home.
Day 7:
Alright, time to go back into my by now favorite piece of code! openssl "the tool" has s_server and s_client and if you push the buttons it sort of seems to work. These are the magic commands I came up with:
openssl s_server -CAfile ca/ca.crt -cert server/server.crt -key server/private/server.key -Verify 1 openssl s_client -CAfile ca/ca.crt -cert client/client.crt -key client/private/client.keyThat connects over SSL/TLS according to it and it seemed ok in tcpdump as well. So lets start coding! I'll present you here with my test code, again I am hoping to do other folks a favor and hope that a few murders can be averted. First up the server:
#include <stdio.h> #include <stdlib.h> #include <err.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include "openssl/bio.h" #include "openssl/ssl.h" #include "openssl/err.h" void fatalx(char *s) { ERR_print_errors_fp(stderr); errx(1, s); } int main(int argc, char *argv[]) { SSL_CTX *ctx; BIO *sbio; SSL *ssl; int sock, s, r, val = -1; struct sockaddr_in sin; SSL_load_error_strings(); OpenSSL_add_ssl_algorithms(); ctx = SSL_CTX_new(SSLv23_server_method()); if (ctx == NULL) fatalx("ctx"); if (!SSL_CTX_load_verify_locations(ctx, "ca/ca.crt", NULL)) fatalx("verify"); SSL_CTX_set_client_CA_list(ctx, SSL_load_client_CA_file("ca/ca.crt")); if (!SSL_CTX_use_certificate_file(ctx, "server/server.crt", SSL_FILETYPE_PEM)) fatalx("cert"); if (!SSL_CTX_use_PrivateKey_file(ctx, "server/private/server.key", SSL_FILETYPE_PEM)) fatalx("key"); if (!SSL_CTX_check_private_key(ctx)) fatalx("cert/key"); SSL_CTX_set_mode(ctx, SSL_MODE_AUTO_RETRY); SSL_CTX_set_verify(ctx, SSL_VERIFY_PEER | SSL_VERIFY_FAIL_IF_NO_PEER_CERT, NULL); SSL_CTX_set_verify_depth(ctx, 1); /* setup socket */ if ((sock = socket(AF_INET, SOCK_STREAM, 0)) == -1) err(1, "socket"); bzero(&sin, sizeof sin); sin.sin_addr.s_addr = INADDR_ANY; sin.sin_family = AF_INET; sin.sin_port = htons(4433); setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &val, sizeof val); if (bind(sock, (struct sockaddr *)&sin, sizeof sin) == -1) err(1, "bind"); listen(sock, 0); for (;;) { if ((s = accept(sock, 0, 0)) == -1) err(1, "accept"); sbio = BIO_new_socket(s, BIO_NOCLOSE); ssl = SSL_new(ctx); SSL_set_bio(ssl, sbio, sbio); if ((r = SSL_accept(ssl)) == -1) fatalx("SSL_accept"); printf("handle it!\n"); } return (0); }and the client:
#include <stdio.h> #include <stdlib.h> #include <err.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <netdb.h> #include "openssl/bio.h" #include "openssl/ssl.h" #include "openssl/err.h" void fatalx(char *s) { ERR_print_errors_fp(stderr); errx(1, s); } int main(int argc, char *argv[]) { SSL_CTX *ctx; BIO *sbio; SSL *ssl; struct sockaddr_in addr; struct hostent *hp; int sock; SSL_load_error_strings(); OpenSSL_add_ssl_algorithms(); ctx = SSL_CTX_new(SSLv23_client_method()); if (ctx == NULL) fatalx("ctx"); if (!SSL_CTX_load_verify_locations(ctx, "ca/ca.crt", NULL)) fatalx("verify"); if (!SSL_CTX_use_certificate_file(ctx, "client/client.crt", SSL_FILETYPE_PEM)) fatalx("cert"); if (!SSL_CTX_use_PrivateKey_file(ctx, "client/private/client.key", SSL_FILETYPE_PEM)) fatalx("key"); if (!SSL_CTX_check_private_key(ctx)) fatalx("cert/key"); SSL_CTX_set_mode(ctx, SSL_MODE_AUTO_RETRY); SSL_CTX_set_verify(ctx, SSL_VERIFY_PEER, NULL); SSL_CTX_set_verify_depth(ctx, 1); /* setup connection */ if ((hp = gethostbyname("localhost")) == NULL) err(1, "gethostbyname"); bzero(&addr, sizeof addr); addr.sin_addr = *(struct in_addr *)hp->h_addr_list[0]; addr.sin_family = AF_INET; addr.sin_port = htons(4433); if ((sock = socket(AF_INET, SOCK_STREAM, 0)) == -1) err(1, "socket"); if (connect(sock, (struct sockaddr *)&addr, sizeof addr) == -1) err(1, "connect"); /* go do ssl magic */ ssl = SSL_new(ctx); sbio = BIO_new_socket(sock, BIO_NOCLOSE); SSL_set_bio(ssl, sbio, sbio); if (SSL_connect(ssl) <= 0) fatalx("SSL_connect"); if (SSL_get_verify_result(ssl) != X509_V_OK) fatalx("cert"); return (0); }Not my best work but it works and someone might be helped by this. Going home!
Day 8:
Looking some more on how to make those damned files work within LDAP. Between meetings and other lame things I gave up and wrote this rant instead. I'll continue to update this as I make more progress. I shall overcome the excrement flinging ape that is OpenSSL.
The opinions of the author expressed herein do not necessarily state or reflect those of anyone else.
Opinion and code © 2009 Marco Peereboom.
Code snippets from the OpenSSL project are © 1998-2009 The OpenSSL Project.


The scripted creator is declared by default by DWR as follows: <creator id="script" class="org.directwebremoting.create.ScriptedCreator"/>
This creator uses BSF to execute scripts that return some bean, for example:
<allow> ... <create creator="script" javascript="EmailValidator"> <param name="class" value="org.apache.commons.validator.EmailValidator"/> <param name="language" value="beanshell"/> <param name="script"> import org.apache.commons.validator.EmailValidator; return EmailValidator.getInstance(); </param> </create> ... </allow>
The script creator accepts the following parameters:
| Parameter | DWR Version | Description |
|---|---|---|
| language | 1.0 | The language that we are scripting in. This string is passed to BSF. For example 'beanshell'. Required when specifying an inline script. When scriptPath is specified BSF can infer the language from the script file. |
| class | 1.0 | The type of object that is created. This is required for security reasons if useDynamicClasses is false. If useDynamicClasses is true this should not be set as it will result in exceptions. |
| script | 1.0 | The script to execute which will return a Java Object to remote. (required unless scriptPath is used) |
| useDynamicClasses | 1.0 | Are we using dynamic classes (i.e. classes generated by BeanShell or similar)? In this case we want to reuse class definitions. |
| scriptPath | 1.1 | The path to a script stored in a file either from the classpath or the ServletContext. (required unless script is used). |
| reloadable | 1.1 | Should the ScriptedCreator check for changes to scripts loaded using scriptPath? (optional, defaults to true) |
In order to use this creator, you will need to place into your WEB-INF/lib folder: a download of the BSF JAR file along with a jar file for whatever scripting language you wish to use.
If there is a class that the script creates where the scope is session (or application), and you change the script, The class in the session is no longer going to match the class generated by the script and errors will occur. The container doesn't have to be restarted but the user has to log out (or clear the session somehow) and log back in.
Also when the class param is not null and is used to create a new instance, it simply calls the class.newInstance() method. This is ok unless the script is creating a new class with certain parameters or calling certain functions to configure the class. Unfortunately, re-evaluating the script each time causes the issue above to happen every request.


Hi! I'm Koray
Front-end Developer
self learner, productive, team player, friendly and caffeine addicted
Get In Touch


class: center, middle, inverse, title-slide # Session 7 (preview) ## A gentle introduction to mrautomatr ### Global TIES for Children ### 2021-09-07 ---  # Motivation -- - Have you ever been frustrated by transporting tables from Mplus and Stata to Word? -- - Have you ever spent hours fiddling with table formatting in Word? -- - Have you imagined that one day you can get all the tables and plots the minute you finish your analysis? -- .aligncenter[ **Now is your chance to try** ### `mrautomatr`### ] -- .aligncenter[  ] --- # Use `mrautomatr` for TIES work -- - NYU Global TIES for Children (2021). “Understanding and improving the learning and development of children in low-income and crisis-affected countries: Toward research impact at scale.” *Proposal to NYUAD Research Institute for renewed core support.* - Strategy 5: Development and sharing of global public goods -- - Building consistent and streamlined measurement reports for the measurement library and for donors and collaborators -- - Efficient generation of intermediate test reports for results compiling and internal reporting purposes at any stage of your analysis -- - Consistent [**naming rules**](https://nyu.app.box.com/s/ate5l7wmw164u7xjg3g8x1vrfhwnt0ax) of variables and files --- # What is `mrautomatr`? -- - It is an R package powered by `flextable` and `rmarkdown`, two wonderful open-source R pacakges. -- - It takes your master dataset (`.csv/.dta/.xlsx`) and your Mplus output file (`.out`) and generates a measurement report for you. -- - It requires *very few* prior knowledge in R programming. -- - All you need to do is: -- -- - Put your files in place -- - Fill in an excel sheet indicating - Where the files are located - The name of your measure and items - What data/output files to use - Some descriptions of your measure -- - Run a few lines of code in R -- - And **BOOM!**, you get yourself a well-formatted measurement report in Microsoft Word! --- # A simple roadmap .aligncenter[  ] The preparation of files takes about **5-10 minutes**. Generating one report in R typically takes **less than 2 minutes** once you get familiar with the package. --- .aligncenter[  ] --- .aligncenter[### Let's take a look at [**the report**](https://nyu.box.com/s/jgoa9suhsfli34ce0q7xkonpuyzw2sno)! ] -- - If you are interested in learning more about `mrautomatr`, feel free to: - Join the next R workshop exclusively designed to introduce this package in a not-so-technical way (date TBD) - Visit the package bookdown website, and follow all the steps: https://bookdown.org/wuzezhen33/mrautomatr/ - Try the package on your own data and let us know what works and what does not by opening a new GitHub issue at https://github.com/nyuglobalties/mrautomatr/issues. -- - What is next: - Potential integration with the `kfa` (k-fold factor analysis) R package that the UNC team is developing - Potential integration with Stata and SEM analysis software besides Mplus - Potential extension to include reporting of IRT models --- # Thank you!


--- layout: archive title: Zulip Chat Archive permalink: /stream/113488-general/topic/new.20maintainers.html ---
We have two new additions to the mathlib maintainers list: @Gabriel Ebner and @Yury G. Kudryashov . Welcome, guys!
And a reminder to everyone: even though maintainers have merge rights, we're very happy to see PR reviews from any and everybody.
Thank you!
This is great news. Thanks to both Gabriel and Yury.
Congrats, and thanks to all of the maintainers for your hard work.
{% endraw %}Last updated: Apr 24 2020 at 19:02 UTC


A series of reference application demo videos created to showcase the potential of the kiteworks secure content platform with working sample code.
ER App for Google Glass
Built using the secure kiteworks mobile SDK, the ER App for Google Glass helps the ER physician quickly retrieve patient data and consult with specialists while constantly keeping her focus on the patient.
Oops! Insurance App for iOS
Built using the secure kiteworks mobile SDK, the Oops! Insurance app for iOS automates the many interactions and processes that occur between an insurance agent and a policyholder after a car accident.


The Vikings are one of the greatest franchises in all of sports. The Minnesota Vikings are one of the oldest Franchises in the NFL with one of the most loyal franchises and is part of one of the toughest and most competitive divisions in football... The NFC North.
This website is dedicated to what makes the Minnesota Vikings the Vikings. Here we will be talking about different topics such as history of the franchise, key players of the past and today, historic moments, and have a fan application for you to fill out at the end.


In an isometric display, it can be tricky to draw boxes of various sizes in the correct order to keep them appropriately in front of or behind one another. The figure below shows an example. The blue box should be drawn first, then green, then red.
We will explore a simple solution for determining the correct order to draw a given set of boxes. But first, we must define what we mean by boxes.
We define boxes as axis-aligned and non-intersecting rectangular prisms. Take a look at the above Figure 1 again. Each box is parallel to the x, y, and z axis (i.e. axis-aligned). Also, note that the boxes are next to each other but do not intersect.
First of all, if two boxes do not overlap on the screen, then we do not have to worry about which one is drawn first. This is the first test we must perform, which we explore in this section.
The silhouettes of the 3D boxes become 2D hexagons in the isometric view, as seen below. We use the outline of these silhouettes to test for overlap.
We take advantage of the fact that the hexagon sides are always parallel to some axis. This allows us to easily determine if the hexagons overlap by checking for intersection of their regions on each axis. We add an h (horizontal) axis to help.
Now that we have outlined our concept for determining if two boxes overlap on the screen, we will fill in the details necessary for implementing it.
The act of flattening the 3D box into a 2D hexagon involves getting rid of the Z coordinate. Notice that increasing a point's Z coordinate by 1 is the same as incrementing both X and Y coordinates by 1. Thus, we can add Z to both X and Y and drop Z completely. Shown below is the source code for a function that performs this conversion.
// Convert a 3D space position to a 2D isometric position.
function spaceToIso(spacePos) {
// New XY position simply adds Z to X and Y.
var isoX = spacePos.x + spacePos.z;
var isoY = spacePos.y + spacePos.z;
return {
x: isoX,
y: isoY,
// Compute horizontal distance from origin.
h: (isoX - isoY) * Math.cos(Math.PI/6),
// Compute vertical distance from origin.
v: (isoX + isoY) / 2;
};
}
And finally, after determining the bounds of each hexagon, we can determine if they overlap by using the source code below.
function doHexagonsOverlap(hex1, hex2) {
// Hexagons overlap if and only if all axis regions overlap.
return (
// test if x regions intersect.
!(hex1.xmin >= hex2.xmax || hex2.xmin >= hex1.xmax) &&
// test if y regions intersect.
!(hex1.ymin >= hex2.ymax || hex2.ymin >= hex1.ymax) &&
// test if h regions intersect.
!(hex1.hmin >= hex2.hmax || hex2.hmin >= hex1.hmax));
}
Now that we have determined if two boxes overlap on the screen, we can begin exploring how to determine which box is in front of the other.
Recall that our boxes do not intersect each other. we can visualize their separation as a thin plane between them (see Figure 5 below). After identifying this plane, we can determine which box is in front by selecting the one on the correct side of this plane.
We can find this plane of separation by looking at each axis individually. In particular, we look for an axis which has non-intersecting box ranges (see Figure 6 below).
In Figure 6 above, we have chosen a coordinate system which make lesser values of x and y to be closer to the camera. Though not shown, the z axis is positive in the up direction, so a greater value makes it closer to the camera.
The following is a javascript function for determining if the first block is in front of the second:
function isBoxInFront(box1, box2) {
// test for intersection x-axis
// (lower x value is in front)
if (box1.xmin >= box2.xmax) { return false; }
else if (box2.xmin >= box1.xmax) { return true; }
// test for intersection y-axis
// (lower y value is in front)
if (box1.ymin >= box2.ymax) { return false; }
else if (box2.ymin >= box1.ymax) { return true; }
// test for intersection z-axis
// (higher z value is in front)
if (box1.zmin >= box2.zmax) { return true; }
else if (box2.zmin >= box1.zmax) { return false; }
}
In general, a box should not be drawn until all the ones behind it are drawn. Thus, we begin by drawing the boxes that have nothing behind them. Then, we can draw the boxes that are only in front of those that are already drawn. This process continues until all boxes are drawn. (See Figure 4 below for an example.)
To implement this algorithm, each box must know exactly which boxes are behind it. We have already determined how to do this in the last section. A search must be implemented so that each box has a list of boxes behind it.
You are now armed with everything you need to know to render isometric boxes in the correct order.
It is possible to have a situation seen in the figure below. The aforementioned drawing methods dictate that we first draw the box with nothing behind it, but this example illustrates a case where this cannot be done.
The figure above cheats by segmenting the orange box into two. This is one method of breaking this type of cycle.
There are formal methods used for detecting such cycles mentioned in the appendix. After detection of a cycle, the blocks in that cycle could be drawn with special clipping regions to respect front boxes or to segment a block or blocks that will break the cycle. These are solutions that I will be exploring and updating this article as my experiments progress.
This is a special case of the Painter's Algorithm, which handles occlusion by drawing back-to-front.
For those who are interested, our method for determining if hexagons and boxes are overlapping is a result of the hyperplane separation theorem.
Also, the way in which we determined the drawing order of the boxes is known in graph theory as a topological sort, which is essentially a depth-first search of a directed graph.
You can build a directed graph of the boxes, with directed edges to the boxes that are behind it. Topologically sorting this graph will produce an ordered list of boxes that can be drawn in that exact order.
Mathematicians will recognize this directed graph as a partially ordered set.
Finally, to prevent the aforementioned cycle conundrum, we can use Tarjan's strongly connection components algorithm. After computing these cycles, one could either split a block to prevent a cycle, or to use a clipping region to prevent drawing over any blocks that are supposed to be in front of it.
You may be able to just use Z-buffering, though drawing order is still important for transparent sprites. Also, if all bounding boxes are unit cubes, sorting is much simpler.
All the diagrams above were created using a simple isometric box renderer written in Javascript, which applies all the techniques described in this article. You can study the fully annotated source code on IsometricBlocks project on GitHub.
Thanks to Ted Suzman at buildy for introducing this problem and solution to me. And thanks to adamhayek for further insight on a general solution. And thanks to Slime0 at reddit for pointing out errors in this article by illustrating the cycle example shown in this article, and for illustrating why we cannot deduce relative drawing order between two non-overlapping boxes. Thanks to Mark Nelson for extra context on painter's algorithm and z-buffering.


Create new workbench plugins, i.e. perspectives, screens, editors, splash-screens and dynamic menus through a programmable interface.
Perspectives can also be laid out by means of a drag-and-drop interface.


Comments
-
Greg Hurrell
Thanks for reporting this... never would have noticed this one myself seeing as I'm in Spain... Will see if I can find out what's going wrong.
-
Greg Hurrell
Ok, found out the problem here and fixed it. Adding the fixed-in-prerelease keyword.
Looks to me to be a bug in the new Interface Builder that comes with Leopard. New projects always default to English, but it looks like if you create a new nib file then it defaults to language on which you're running. This is a regression, in my opinion, seeing as it's a discrepancy from the behaviour in 10.4, (and 10.3, 10.2).
Somewhat bizarrely, not all of the menus were in Spanish, only some of them. I don't actually think that's the fault of Interface Builder, however; I think I edited those items and translated them to English without even thinking about it (one of the problems with being bilingual, sometimes you don't even realize what language you're speaking/reading/writing). I just created a new nib and confirmed that everything was in Spanish, so that's definitely what happened.
Keep your eyes out for a new release which includes the fix, 3.5a4, very soon.
-
bugzilla user 150
Excellent news :) Thanks for creating such a great product
-
Greg Hurrell
Ok, 3.5a4 is out, so will mark this as FIXED/CLOSED.
https://wincent.com/a/products/synergy-classic/download/
https://wincent.com/a/products/synergy-classic/history/#3.5a4
Add a comment
Comments are now closed for this issue.


Fatma Ocal
Home
|
About Me
|
Blogs
|
Professional Experience
|
Education
|
Projects
|
Let's Connect
Technical Blog - 1
Hello, this is my first Blog!!!! My reflections are in the comments :) ....


--- layout: post title: Mobile application downloads date: 2004-07-20 00:00:00 category: mobile ---
There's an interesting report from Handango here, giving details of the most popular mobile application purchases recently. It's all very US-focused (and PDA-heavy), but there's some interesting bits in here:


Country music often has simple forms, folk lyrics, and extensively used blues modes. The music is often used for dance or as a ballad.
Country music instrumentation often includes instruments like banjos, fiddles, harmonicas, acoustic and steel guitars, and others. Newer, modernized forms of country may also use drums and different modern instruments, but these are a center of controversy since some country music-lovers think they aren't "pure". Vocals, like in pop and rock, are very important as they drive the message of the lyrics home.
Here, we're going to leave some examples of country music and their artists for you to listen to! We hope you enjoy the soothing country vibes. After this comes the quiz - Make sure you prepare for it. Note: you may have to view the videos on YouTube since video embed was disabled by the publishers.


We will check iTunes for all {{ vendor.name }} apps every day:
Paid App Prices
In-app Purchases
Bundle Prices
We don't support in-app purchases or bundles.
Disconnect iTunesSlack is connected.
{{else}}Keep your team on track with download metrics posted into Slack.
Connect Slack {{/if}}Emails will be sent every morning by 7am (California time).
{{else}}Stay informed by having download metrics directly to your inbox.
{{/if}}


Most of this article is not directly about THREE.js but is rather about debugging JavaScript in general. It seemed important in that many people just starting with THREE.js are also just starting with JavaScript so I hope this can help them more easily solve any issues they run into.
Debugging is a big topic and I probably can't begin to cover everything there is to know but if you're new to JavaScript then here's an attempt to give a few pointers. I strongly suggest you take some time to learn them. They'll help you enormously in your learning.
All browsers have developer tools. Chrome, Firefox, Safari, Edge.
In Chrome you can click the the ⋮
icon, pick More Tools->Developer Tools
to get to the developer tools. A keyboard shortcut is also shown there.
In Firefox you click the ☰
icon, pick "Web Developer", then pick
"Toggle Tools"
In Safari you first have to enable the Develop menu from the Advanced Safari Preferences.
Then in the Develop menu you can pick "Show/Connect Web Inspector".
With Chrome you can also use Chrome on your computer to debug webpages running on Chrome on your Android phone or tablet. Similarly with Safari you can use your computer to debug webpages running on Safari on iPhones and iPads.
I'm most familiar with Chrome so this guide will be using Chrome as an example when referring to tools but most browsers have similar features so it should be easy to apply anything here to all browsers.
Browsers try to reuse data they've already downloaded. This is great for users so if you visit a website a second time many of the files used to display the site will not have be downloaded again.
On the other hand this can be bad for web development. You change a file on your computer, reload the page, and you don't see the changes because the browser uses the version it got last time.
One solution during web development is to turn off the cache. This way the browser will always get the newest versions of your files.
First pick settings from the corner menu
Then pick "Disable Cache (while DevTools is open)".
Inside all devtools is a console. It shows warnings and error messages.
READ THE MESSAGES!!
Typically there should be only 1 or 2 messages.
If you see any others READ THEM. For example:
I mis-spelled "three" as "threee"
You can also print your own info to the console with with console.log
as in
console.log(someObject.position.x, someObject.position.y, someObject.position.z);
Even cooler, if you log an object you can inspect it. For example if we log the root scene object from the gLTF article
{ const gltfLoader = new GLTFLoader(); gltfLoader.load('resources/models/cartoon_lowpoly_small_city_free_pack/scene.gltf', (gltf) => { const root = gltf.scene; scene.add(root); + console.log(root);
Then we can expand that object in the JavaScript console
You can also use console.error
which reports the message in red
in includes a stack trace.
Another obvious but often overlooked way is to add

or

tags
and put data in them.
The most obvious way is to make some HTML elements
<canvas id="c"></canvas> +
 +
x:
 +
y:
 +
z:
 +

Style them so they stay on top of the canvas. (assuming your canvas fills the page)

And then looking the elements up and setting their content.
// at init time const xElem = document.querySelector('#x'); const yElem = document.querySelector('#y'); const zElem = document.querySelector('#z'); // at render or update time xElem.textContent = someObject.position.x.toFixed(3); yElem.textContent = someObject.position.y.toFixed(3); zElem.textContent = someObject.position.z.toFixed(3);
This is more useful for real time values
Another way to put data on the screen is to make a clearing logger. I just made that term up but lots of games I've worked on have used this solution. The idea is you have a buffer that displays messages for only one frame. Any part of your code that wants to display data calls some function to add data to that buffer every frame. This is much less work than making an element per piece of data above.
For example let's change the HTML from above to just this
<canvas id="c"></canvas>

And let's make simple class to manage this clear back buffer.
class ClearingLogger { constructor(elem) { this.elem = elem; this.lines = []; } log(...args) { this.lines.push([...args].join(' ')); } render() { this.elem.textContent = this.lines.join('\n'); this.lines = []; } }
Then let's make a simple example that every time we click the mouse makes a mesh that moves in a random direction for 2 seconds. We'll start with one of the examples from the article on making things responsive
Here's the code that adds a new Mesh
every time we click the mouse
const geometry = new THREE.SphereGeometry(); const material = new THREE.MeshBasicMaterial({color: 'red'}); const things = []; function rand(min, max) { if (max === undefined) { max = min; min = 0; } return Math.random() * (max - min) + min; } function createThing() { const mesh = new THREE.Mesh(geometry, material); scene.add(mesh); things.push({ mesh, timer: 2, velocity: new THREE.Vector3(rand(-5, 5), rand(-5, 5), rand(-5, 5)), }); } canvas.addEventListener('click', createThing);
And here's the code that moves the meshes we created, logs them, and removes them when their timer has run out
const logger = new ClearingLogger(document.querySelector('#debug pre')); let then = 0; function render(now) { now *= 0.001; // convert to seconds const deltaTime = now - then; then = now; ... logger.log('fps:', (1 / deltaTime).toFixed(1)); logger.log('num things:', things.length); for (let i = 0; i < things.length;) { const thing = things[i]; const mesh = thing.mesh; const pos = mesh.position; logger.log( 'timer:', thing.timer.toFixed(3), 'pos:', pos.x.toFixed(3), pos.y.toFixed(3), pos.z.toFixed(3)); thing.timer -= deltaTime; if (thing.timer <= 0) { // remove this thing. Note we don't advance `i` things.splice(i, 1); scene.remove(mesh); } else { mesh.position.addScaledVector(thing.velocity, deltaTime); ++i; } } renderer.render(scene, camera); logger.render(); requestAnimationFrame(render); }
Now click the mouse a bunch in the example below
Another thing to remember is that webpages can have data passed into them either via query parameters or the anchor, sometimes called the search and the hash.
https://domain/path/?query#anchor
You can use this to make features optional or pass in parameters.
For example let's take the previous example and make it so
the debug stuff only shows up if we put ?debug=true
in the URL.
First we need some code to parse the query string
/** * Returns the query parameters as a key/value object. * Example: If the query parameters are * * abc=123&def=456&name=gman * * Then `getQuery()` will return an object like * * { * abc: '123', * def: '456', * name: 'gman', * } */ function getQuery() { return Object.fromEntries(new URLSearchParams(window.location.search).entries()); }
Then we might make the debug element not show by default
<canvas id="c"></canvas> +

Then in the code we read the params and choose to un-hide the
debug info if and only if ?debug=true
is passed in
const query = getQuery(); const debug = query.debug === 'true'; const logger = debug ? new ClearingLogger(document.querySelector('#debug pre')) : new DummyLogger(); if (debug) { document.querySelector('#debug').style.display = ''; }
We also made a DummyLogger
that does nothing and chose to use it if ?debug=true
has not been passed in.
class DummyLogger { log() {} render() {} }
You can see if we use this url:
there is no debug info but if we use this url:
debug-js-params.html?debug=true
there is debug info.
Multiple parameters can be passed in by separating with '&' as in somepage.html?someparam=somevalue&someotherparam=someothervalue
.
Using parameters like this we can pass in all kinds of options. Maybe speed=0.01
to slow down our app for making it easier to understand something or showHelpers=true
for whether or not to add helpers
that show the lights, shadow, or camera frustum seen in other lessons.
Every browser has a debugger where you can pause your program step through line by line and inspect all the variables.
Teaching you how to use a debugger is too big a topic for this article but here's a few links
NaN
in the debugger or elsewhereNaN
is short for Not A Number. It's what JavaScript will assign
as a value when you do something that doesn't make sense mathwise.
As a simple example
Often when I'm making something and nothing appears on the screen
I'll check some values and if I see NaN
I will instantly have a
place to start looking.
As an example when I first started making the path for the
article about loading gLTF files I made
a curve using the SplineCurve
class which makes a 2D curve.
I then used that curve to move the cars like this
curve.getPointAt(zeroToOnePointOnCurve, car.position);
Internally curve.getPointAt
calls the set
function
on the object passed as the second argument. In this case that
second argument is car.position
which is a Vector3
. Vector3
's
set
function requires 3 arguments, x, y, and z but SplineCurve
is a 2D curve
and so it calls car.position.set
with just x and y.
The result is that car.position.set
sets x to x, y to y, and z to undefined
.
A quick glance in the debugger looking at the car's matrixWorld
showed a bunch of NaN
values.
Seeing the matrix had NaN
s in it suggested something like position
,
rotation
, scale
or some other function that affects that matrix had bad
data. Working backward from their it was easy to track down the issue.
In top of NaN
there's also Infinity
which is a similar sign there
is a math bug somewhere.
THREE.js is Open Source. Don't be afraid to look inside the code! You can look inside on github. You can also look inside by stepping into functions in the debugger.
requestAnimationFrame
at bottom of your render function.I see this pattern often
function render() { requestAnimationFrame(render); // -- do stuff -- renderer.render(scene, camera); } requestAnimationFrame(render);
I'd suggest that putting the call to requestAnimationFrame
at
the bottom as in
function render() { // -- do stuff -- renderer.render(scene, camera); requestAnimationFrame(render); } requestAnimationFrame(render);
The biggest reason is it means your code will stop if you have an error. Putting
requestAnimationFrame
at the top means your code will keep running even if you
have an error since you already requested another frame. IMO it's better to find
those errors than to ignore them. They could easily be the reason something is
not appearing as you expect it to but unless your code stops you might not even
notice.
This basically means knowing for example when to use degrees vs when to use radians. It's unfortunate that THREE.js does not consistently use the same units everywhere. Off the top of my head the camera's field of view is in degrees. All other angles are in radians.
The other place to look out is your world unit size. Until recently 3D apps could choose any unit size they wanted. One app might choose 1 unit = 1cm. Another might choose 1 unit = 1 foot. It's actually still true that you can chose any units you want for certain applications. That said, THREE.js assumes 1 unit = 1 meter. This is important for things like physically based rendering which uses meters to compute lighting effects. It's also important for AR and VR which need to deal with real world units like where your phone is or where the VR controllers are.
If you decide to ask a question about THREE.js it's almost always required for you to provide an MCVE which stands for Minimal, Complete, Verifiable, Example.
The Minimal part is important. Let's say you where having an issue with the path movement in the last example of the loading a gLTF article. That example has many parts. Listing them out it has
That's pretty huge. If your question is only about the path following part you
can remove most of the HTML as you only need a <canvas>
and a


--- layout: null section-type: about title: About --- ## About
ENUSEC is a student society interested in all aspects of security. The society was started in 2015 by a small collective of students and staff associated with the excellent cybersecurity courses at Edinburgh Napier University. The goal of the society was, and still is, to provide the students and surrounding cybersecurity practitioners with an outlet for them further their learning and understanding as well as to foster a friendly community.
The society boasts over 70 active members, who have an exemplary track record of attending, presenting, hosting and competing at events worldwide. Despite our association with Edinburgh Napier University, our events and membership are open to all, student or not.


Release Notes for 1.26
This page contains the release notes for the patches of the 1.26 release.
Version 1.26.12 (June 2015)
A patch for the rel-1.26 code line. It contains the following fixes for the UI5 Core and Controls:
Core
- [FIX] core.Popup: Setting Focus in Internet Explorer After Open Fixed
Inbox
- [FIX] Close button on WebDynpro closes entire NWBC tab
Version 1.26.11 (April 2015)
A patch for the rel-1.26 code line. It contains the following fixes for the UI5 Core and Controls:
Core
- [FIX] DeriveMetamodel: Restore 'id' property in metamodel and templates
- [FIX] ODataAnnotations: Alias replacement in AnnotationsPath Collections
- [FIX] ODataModel: Don't destroy metadata when model is destroyed
- [FIX] v2.ODataModel: Fix autorefresh with GET parameters
- [FIX] v2.ODataModel: callFunction prameter not recognized if mode not set in metadata
Mobile
- [FIX] m.ListBase: Swipe content changes should not invalidate the list.
- [FIX] sap.m.Dialog: Opening animation is changed from css to jquery animation
- [FIX] sap.m.IconTabBar: Left padding is now correct
- [FIX] sap.m.Input: Changed ValueHelp icon size in compact mode
- [FIX] sap.m.Link: Link without href doesn't trigger beforeunload anymore
- [FIX] sap.m.NavContainer - removes removed pages from its navigation stack.
- [FIX] sap.m.Tile: Proper handling of events onsapspace and onsapenter
Others
- [FIX] sap.ui.unified.FileUploader: Setting content-type for IE repaired
Version 1.26.10 (April 2015)
A patch for the rel-1.26 code line. It contains the following fixes for the UI5 Core and Controls:
Core
- [FIX] Device API: Windows 8 with touch is now recognized as a tablet
- [FIX] sap.ui.core.Popup: Saving of "_followOfHandler" fixed
- [FIX] sap.ui.core.RenderManager: Visible DOM elements in preserve area avoided
Desktop
- [FIX] sap.ui.commons.Dialog: Inital setting of focus fixed
- [FIX] sap.ui.ux3.ToolPopup: Fixed popup position after changing its size
Mobile
- [FIX] sap.m.ListBase: Swipe content changes do not invalidate the list
- [FIX] sap.m.Input: Width of F4 button on compact mode adjusted
- [FIX] sap.m.Input: Suggestion opens only if minimal input was made
- [FIX] sap.m.Popover: Closes if virtual keyboard is open and 'of' element is out of viewport
- [FIX] sap.m.Popover: Arrow color corrected
- [FIX] sap.m.Text: When text in an editable form is empty, min-height is added
- [FIX] sap.m.UploadCollection: Fix for search and in app item navigation
- [FIX] sap.m.ViewSettingsDialog: Sorting options are now clearly separated
Others
- [FIX] sap.ui.commons.ComboBox: Fixed text alignment in Internet Explorer 10
- [FIX] sap.ui.unified.FileUploader: Internet Explorer change event handling fixed
- [FIX] sap.ui.unified.FileUploader: Setting content-type for Internet Explorer repaired
Version 1.26.9 (March 2015)
A patch for the rel-1.26 code line. It contains the following fixes for the UI5 Core and Controls:
Core
- [FIX] Handlebars Templating: Support for named models in properties
- [FIX] ODataListBinding: Fire change event if context is set to null
- [FIX] Refresh ODataContextBinding now refreshes dependent bindings
- [FIX] sap.ui.core.routing.Router: Hash is not parsed if router is destroyed
- [FIX] v2.ODataModel: URL parameters in callFunction encoded
Desktop
- [FIX] SimpleForm: Fixes problem with empty form containers on removeContent
- [FIX] Splitter: Autoresize on bar move end enabled
- [FIX] sap.ui.commons.RoadMap: Error avoided when scrolling to first visible step, in case the step is not yet rendered
- [FIX] sap.ui.commons.TextField /ComboBox /DropdownBox: liveChange event
- [FIX] sap.ui.table.*: The row header tooltip is corrected (for rows without binding context)
- [FIX] ux3.ToolPopup & sap.ui.commons.Dialog: Focusable elements fixed
Mobile
- [FIX] sap.m.Input: removeAggreagtion: Returns correct value
- [FIX] sap.m.ComboBox: Input events suppressed of read-only fields (Internet Explorer 11)
- [FIX] sap.m.ComboBoxBase: Overlapping issue of the text on Internet Explorer 10 fixed (sap_bluecrystal theme)
- [FIX] sap.m.DateRangeSelection: Change event not fired if nothing is changed
- [FIX] sap.m.IconTabBar: Corrected invalidation flow
- [FIX] sap.m.MultiInput: Placeholder covering ValueHelp button in Internet Explorer fixed
- [Fix] sap.m.FacetFilter: Icon issue solved
Others
- [FIX] sap.ui.unified.FileUploader: Invisible + % width bug solved
Version 1.26.8 (March 2015)
A patch for the rel-1.26 code line. It contains the following fixes for the UI5 Core and Controls:
Core
- [FIX] Coldwater: Non-empty name prefixes now end with '/'
- [FIX] Internet Explorer 9: Theme-Parameters when stylesheet limit reached are now loaded
- [FIX] datajs: withCredentials flag after xhr.open call is set
- [FIX] sap.ui.core.Device: Tablet with Samsung stock browser is now recognized correctly
- [FIX] sap.ui.core.IconPool: Incorrectly mirrored icons in RTL (right-to-left) mode fixed
- [FIX] sap.ui.core.Popup: autoclose now works when popup opened from another popup
- [FIX] ux3.ToolPopup: TabChaining with TabStrip implemented
Desktop
- [FIX] Tree: Selection after model change restored
- [FIX] sap.ui.commons.Dialog: Unnecessary CSS-class removed
- [FIX] sap.m.DatePicker, sap.ui.commons.DatePicker: Keyboard navigation issues corrected
- [FIX] sap.ui.AnalyticalTable: Selection of rows is now usable
- [FIX] sap.ui.Table: Problem with toggling scrollbars solved
- [FIX] sap.ui.Table: GroupHeader label no longer has incorrect positioning
- [FIX] sap.ui.Table: Icons are now placed in the middle
- [FIX] sap.ui.Table: Issue when resizing columns with frozen cols solved
- [FIX] sap.ui.layout.form.Form: Keyboard navigation issues solved
- [FIX] sap.ui.table.*: SHIFT+TAB now works (except for the column header)
- [FIX] sap.ui.table.*: The table can be tabbed in non-accessibility mode
- [FIX] sap.ui.table.AnalyticalTable: Row selection when grouped columns are invisible corrected
- [FIX] ux3.ToolPopup: TabChaining with TabStrip implemented
Mobile
- [FIX] sap.m.CustomListItem: Text selection is now allowed
- [FIX] sap.m.Table: Table popins fields are now positioned in the middle
- [FIX] sap.sap.m.Bar: Issue when used in the context of sap.m.Dialog solved
- [FIX] sap.m.Button: In HCB in Compact mode line height is now fixed
- [FIX] sap.m.DatePicker, sap.ui.commons.DatePicker: Keyboard navigation issues solved
- [FIX] sap.m.Dialog: Horizontal scrolling is now kept after dialog reposition
- [FIX] sap.m.FeedListItem: Long name and text cut off on popover corrected
- [FIX] sap.m.FeedListItem: Text wrapping for Internet Explorer 10 solved
- [FIX] sap.m.IconTabBar: Invalidation flow is now correct
- [FIX] sap.m.IconTabBar: The first text is no longer clipped on mobile devices when the first filter is "showAll:true"
- [FIX] sap.m.Input: The selected suggestion item can now be used
- [FIX] sap.m.Input: ValueHelp icon on incorrect position if description used corrected
- [FIX] sap.m.Input: Suggestion popup on tablets is no longer used
- [FIX] sap.m.Popover: Popover is no longer closed when the right border of openby control stays
- [FIX] sap.m.Popover: No error is now logged when popover is autoclosed
- [FIX] sap.m.UploadCollection: CSS adaptation for the first and last list item - the space between the items fits
- [FIX] sap.m.UploadCollection: Call of Method setFileType with undefined parameter no longer triggers error
- [FIX] sap.m.UploadCollection: Default tooltip of the FileUploader suppressed; Filename without any dot now possible
- [FIX] sap.m.UploadCollection: Buttons no longer lie over text at resizing
- [FIX] sap.m.UploadCollection: Conversion of file extension to lower case solved
Others
- [FIX] sap.m.Select: Overlapping issue of the text solved (sap_bluecrystal theme)
- [FIX] sap.ui.AnalyticalTable: Rendering in non-compact mode corrected
- [FIX] sap.ui.unified.FileUploader: buttonOnly mode when container is invisible corrected
- [Fix] sap.ui.unified.FileUploader: Width for buttonOnly mode corrected
Version 1.26.7 (February 2015)
A patch for the rel-1.26 code line. It contains the following fixes for the UI5 Core and Controls:
Core
- [FIX] Keyboard handling: F6 navigation enabled for nested tabbable elements
- [FIX] ODataMetadata: Check added to get navigation properties
- [FIX] QUnit error reporting: Source info added
- [FIX] sap.ui.core.Popup: Removal of the Old DOM-Ref
- [FIX] sap.ui.core.ScrollEnablement: Resize listener de-registered during cleanup
- [FIX] sap.ui.test.Opa5: waitFor#visible now also works if you only specify view or control type and the controls were not rendered yet
- [FIX] v2.OdataModel: urlParameters not included in request url
Desktop
- [FIX] SimpleForm: Explored examples corrected
- [FIX] ux3.NavigationBar: Overflow not checked if in inactive state
- [FIX] ux3.NavigationBar: Overflow check removed on exit
Mobile
- [FIX] sap.m.Input: Home and End key brings error
- [FIX] !P13nColumnsPanel.qunit.html: Reset stubbed timer functionality
- [FIX] sap.m.FeedInput: Removed "…" from placeholder text
- [FIX] sap.m.MultiComboBox: Placeholder overlays token (Internet Explorer)
- [FIX] sap.m.SelectDialog: Focus changed after fixing liveChange event
- [FIX] sap.m.SplitContainer: Master button handled when nav container is added to detail area
- [FIX] sap.m.UploadCollection: Last item in the list deleted
- [FIX] sap.m.UploadCollection: Link opens in a new tab
- [FIX] sap.m.UploadCollection: qUnits - 'Display' replaced by 'display'
- [FIX] sap.m.UploadCollection: Set multiple to 'false' for 1.26 version
- [FIX] sap.m.UploadCollection: 'fileName' and 'files' used instead of value
Others
- [FIX] sap.ui.unified.FileUploader: Content-Type for Internet Explorer header added
- [FIX] sap.ui.unified.Menu: Scrolling in Platinum Theme enabled


Reset Score
Player X plays now!
Play Again


Why Home Inspections are Important
You've seen the shiny buffed floors and sparkling granite countertops, and maybe you've even flushed all the toilets, but before you put down a deposit and agree to take on a huge mortgage, you need to make sure that everything you don't see is in good working order. You'll want to make sure the heating or A/C unit isn't about to die, the foundation isn't silently cracking, and the roof isn't about to spring a huge leak. If you arrange for a house inspection by a professional before the sale goes through, the problem is still the seller's. If you choose not to have a home inspection done, the problem, unfortunately, becomes yours.
- The number of home inspections performed increases each year and according to the American Society of Home Inspectors (ASHI), over 90% of home sales involving a house inspection. While this number doesn't differentiate between a seller-based inspection and buyer-based inspection, it certainly indicates the significance of home inspections in the buying process.
- According to home inspectors, homes are sometimes not particularly well cared for by homeowners, who are slow to fix leaky faucets, replace heating or A/C filters, or clunky furnaces. If homes with homeowners living in the property can be uncared for, imagine what conditions a foreclosed home can hide. Mold can grow if the water hasn't been turned off and the environment becomes moist. If the home is boarded up and there is no ventilation for weeks or months, black mold can grow fairly quickly.
- Because of the importance of a proper house inspection, you should make the purchase of the home contingent on your approval of a home inspector's report. When making a written offer for the home, simply make the home inspection a condition of the purchase. If your home inspection comes back clean, you can proceed with the sale with confidence. And if the report is negative, you can reduce your offer, make the seller pay for any repairs, or even back out of the contract altogether.


3 references to GetMemberCollection
System.Management.Automation (3)
engine\MshObject.cs (2)
248
return
GetMemberCollection
(viewType, null);
1965
GetMemberCollection
(PSMemberViewTypes.All, backupTypeTable));
engine\serialization.cs (1)
1895
PSObject.
GetMemberCollection
(PSMemberViewTypes.Extended, _typeTable);


QUIC status
- QUIC Enabled:
- Origins To Force QUIC On:
- Connection options:
- Consistent Port Selection Enabled:
- Load Server Info Timeout Multiplier:
- Enable Connection Racing:
- Disable Disk Cache:
- Prefer AES:
- Maximum Number Of Lossy Connections:
- Packet Loss Threshold:
- Delay TCP Race:
- Store Server Configs In Properties File:
- Idle Connection Timeout In Seconds:
- Disable PreConnect If 0RTT:
- Disable QUIC On Timeout With Open Streams:
QUIC sessions
None
View live QUIC sessions
| Host |
Secure |
Version |
Peer address |
Connection UID |
Active stream count |
Active streams |
Total stream count |
Packets Sent |
Packets Lost |
Packets Received |
Connected |


**MEDICAL HISTORY: It is of utmost importance that all illness other than minor afflictions should be stated.
The Company is entitled to refuse any claim for treatment, cost or any other insured benefits if a complete statement
of all previous illness has not been given. If yes, please provide following details.


Automatically reassign tickets for agents who are out of office. Stop letting tickets slip through the cracks. Coming 10/2019


Refresh the page to try again. If the error persists then please alert someone in the CHIRP Tech dept and summarize what you were trying to do.


Struct ColorKey
Define a color key to build the color scale. It defines a Color at a relative position within the scale (% from first color in scale).
Implements
Inherited Members
Namespace: CatsHelpers.ColorScales
Assembly: CatsHelpers.dll
Syntax
public struct ColorKey : IEquatable<ColorKey>
Remarks
Equatable structure
Properties
| Improve this Doc View SourceARGBValue
Declaration
public Color ARGBValue { get; set; }
Property Value
| Type | Description |
|---|---|
| Windows.UI.Color | Get or set Color value for the key. |
Position
Key position
Declaration
public double Position { get; set; }
Property Value
| Type | Description |
|---|---|
| System.Double | Get or set relative position of the key within the scale. |
Remarks
Value is a percentage and must be between 0 and 1.
Exceptions
| Type | Condition |
|---|---|
| System.ArgumentOutOfRangeException | Position Must be in the [0 - 1] range |
Methods
| Improve this Doc View SourceCompare(ColorKey, ColorKey)
Allow a comparison of two color keys based on their relative position withtin the scale.
x
is greater than y
if its relative position is greater than y
relative position.
Compliant with Comparison<T> delegate for list sorting.
Declaration
public static int Compare(ColorKey x, ColorKey y)
Parameters
| Type | Name | Description |
|---|---|---|
| ColorKey | x | First key |
| ColorKey | y | Second key |
Returns
| Type | Description |
|---|---|
| System.Int32 | -1 : x < y ; 0 : x = y ; 1 x > y |
Remarks
Static method
Equals(ColorKey)
Indicates whether this instance and another one are equal
Declaration
public bool Equals(ColorKey other)
Parameters
| Type | Name | Description |
|---|---|---|
| ColorKey | other | The other ColorKey |
Returns
| Type | Description |
|---|---|
| System.Boolean | True if equal |
Remarks
Keys are equal if their position and color are equal.
Equals(Object)
Indicates whether this instance and another object are equal
Declaration
public override bool Equals(object obj)
Parameters
| Type | Name | Description |
|---|---|---|
| System.Object | obj | The other System.Object |
Returns
| Type | Description |
|---|---|
| System.Boolean | True if object is a ColorKey and if keys are equal |
Overrides
Remarks
Keys are equal if their position and color are equal.
GetHashCode()
Return the hash code for this instance
Declaration
public override int GetHashCode()
Returns
| Type | Description |
|---|---|
| System.Int32 | System.Int32 The hash code |
Overrides
Operators
| Improve this Doc View SourceEquality(ColorKey, ColorKey)
Equality operator
Declaration
public static bool operator ==(ColorKey left, ColorKey right)
Parameters
| Type | Name | Description |
|---|---|---|
| ColorKey | left | |
| ColorKey | right |
Returns
| Type | Description |
|---|---|
| System.Boolean | True if |
Inequality(ColorKey, ColorKey)
Inequality operator
Declaration
public static bool operator !=(ColorKey left, ColorKey right)
Parameters
| Type | Name | Description |
|---|---|---|
| ColorKey | left | |
| ColorKey | right |
Returns
| Type | Description |
|---|---|
| System.Boolean | True if |


Home
My Profile
My Stylist
Logout
Book appointment
Select a hairstyle
×
Select a Hairstyle
(Please select)
Women's Haircut
Men's Haircut
Kid's Haircut
Hair Dye
Perm
Confirm
Cancel
Select Style
Please select
Select a location
(Please select)
489 Albert St N
2315 Victoria Ave.
Cornwall Centre
Golden Mile Mall
Select Stylist
×
Select a Hairstylist
Stylist Name
Stylist Name
Stylist Name
Stylist Name
Stylist Name
Confirm
Cancel
Set as My Stylist
Select Stylist
Please select
photo of desired hairstyle
enter appointment time*
Add
Pay Now
×
CANCEL
Gallery


CDM Data
:navtop
:heading Grid Subset Monitor
The Grid Subset Monitor allows a site administrator to automatically create a subset of a newly
created grid data file using RAMADDA's
monitor facility.
:p
When logged in to RAMADDA go the Admin->Monitors page and select New Grid Subset Action.
In the Search Criteria section specify what grid entries are to be matched on.
For example, if you are adding Gridded Data to a particular folder
called Models you can specify the Grid Subset Action is applied to new Gridded File entries
under the Models folder.
:p
In the Actions section specify the target folder to add the new subsetted grid
file under and a set of subset arguments. To specify the subset arguments go to an example
of one of the source grid files and choose the Subset Grid view. Specify your subset, e.g., spatial
bounds, time range, parameters, etc. Then at the bottom of the page click on the
link. This copies to your clipboard the arguments.
You can then go to your Grid Subset Action and paste the arguments into the form field.
If you want all of the grid fields to be added and don't want to select all of them with the checkboxes
in the Grid Subset form then add "allvars=true" to your Grid Subset Arguments.
:p
Now, if everything works whenever a new gridded file is added to RAMADDA that matches your search criteria
the subset will be applied and a new file will be created.
:heading NetCDF Point Subset Type
RAMADDA provides a NetCDF Point Subset entry type that takes as input the
URL for the Thredds Data Server (TDS) Netcdf Point Subset Service. To use this
got to the TDS subset form, e.g.
http://thredds.ucar.edu/thredds/ncss/grib/NCEP/GFS/Global_onedeg/GFS_Global_onedeg_20190206_0600.grib2/pointDataset.html,
enter latitude/longitude values and specify csv for the format. Ignore the time range:
Select the fields you are interested in.
Note: the subset service will only work with fields that are on the same vertical coordinate system. If you choose fields that have multiple vertical levels then specify the level you'd like to use.
At the bottom of the page copy the generated URL:
Now, back in RAMADDA create a NetCDF Point Subset Type entry type. All you need to do is paste the URL
into the URL field:
Some of the field values will be automatically converted to different units. For example, Kelvin is
converted to Celisus, Pascals are converted to Hectopascals.
The display shows the point subset at the specified lat/lon. The map is clickable, new data for the given
lat/lon will be displayed.


{{template "head.html" .}}
Need help? Here's how
The link should point directly to an ASCII-armored text


{% from 'analytics/navigation.html' import navigation %} {% from 'analytics/css_import.html' import css_import %} {% from 'analytics/js_import.html' import js_import %}


...are going to kick bum! I have set it up so that I can control monsters as groups or individuals. As a group, monsters will act intelligently as a team--for example, a monster "hunting party" with two warrior-types and a healing mage will behave like you expect: the warriors get up close and bash, the healer heals them and itself, and tries to stay far away. There are several other types that I am planning, such as a summoning team (two mages that summon minions and resurrect one another), archery units (ranged-weapon users that try to stay back and line up to hit you), and more!
Anywho, I am doing my best to get them finalized today. I have two brand new kinds of monsters that will be in the next version, too. After I get the monsters online and tested (probably end of tomorrow) I will post some screenshots and at LEAST one video. Then, I have to re-add items and it's time for pre-beta!


Recommended Reading
Here are things you can read to understand and use Axis better. Remember,
you also have access to all the source if you really want to find out how
things work (or why they don't).
Axis installation, use and internals
-
Web Services with JAX-RPC and Apache Axis.
by Pankaj Kumar.
Starting with a 10000 ft. view of Web Services, prior technologies, current and emerging
standards, it quickly gets into the nitty-gritties of using JAX-RPC and Apache Axis
for writing and executing programs. Has a nice coverage of different invocation styles -
generated stubs, dynamic proxy and dynamic invocation interface. A good place to start
if you are new to Web Services and Axis.
The author also maintains a
Web Services Resource Page.
- Apache Axis SOAP for Java
Dennis Sosnoski covers Axis. This is another good introductory guide.
-
Enabling SOAPMonitor in Axis 1.0.
Dennis Sosnoski on how to turn the SOAP monitor on and off, and use it to log your
application.
-
Axis in JRrun
Macromedia authored coverage of using Axis from inside JRun.
-
Ask the magic eight ball
Example of using an Axis service with various
caller platforms/languages.
-
Configure Axis Web Services
Kevin Jones talks a bit about configuring axis, showing how to return
handwritten WSDL from the ?wsdl query.
-
Different WSDL Styles in Axis
Kevin Jones looks at the document and wrapped styles of WSDL2Java
bindings.
-
Web Services Security with Axis
This sample chapter from J2EE Security for Servlets,
EJBs and Web Services book explains use of username/password based authentication,
SSL and Servlet security mechanisms for securing the transport and
WS-Security for securing the messages with Apache Axis. To illustrate use of handlers for
enforcing security, it describes the implementation of a bare-bones WS-Security mechanism
using
VeriSign's TSIK and JAX-RPC handlers. You can also
view or
download the complete sources
discussed in the chapter.
Specifications
-
SOAP Version 1.1
Remember that SOAP1.1 is not an official W3C standard.
-
SOAP Version 1.2 Part 0: Primer
This and the follow-on sections cover what the W3C think SOAP
is and how it should be used.
-
Web Services Description Language (WSDL) 1.1
-
RFC 2616: Hypertext Transfer Protocol -- HTTP/1.1
This is HTTP. You really do need to understand the basics of how this
works, to work out why your web service doesn't :)
-
SOAP with Attachments API for Java (SAAJ)
SAAJ enables developers to produce and consume messages conforming to
the SOAP 1.1 specification and SOAP with Attachments note.
-
Java API for XML-Based RPC (JAX-RPC)
The public API for Web Services in Java.
JAX-RPC enables Java technology developers to develop SOAP based
interoperable and portable web services. JAX-RPC provides the core API
for developing and deploying web services on the Java platform.
-
XML Schema Part 0: Primer
The W3C XML Schema, (WXS) is one of the two sets of datatype SOAP
supports, the other being the SOAP Section 5 datatypes that predate
WXS. Complicated as it is, it is useful to have a vague understanding
of this specification.
-
Java API for XML Messaging (JAXM)
JAXM enables applications to send and receive document oriented XML
messages using a pure Java API. JAXM implements Simple Object Access
Protocol (SOAP) 1.1 with Attachments messaging so that developers can
focus on building, sending, receiving, and decomposing messages for
their applications instead of programming low level XML communications
routines.
Explanations, articles and presentations
-
A Gentle Introduction to SOAP
Sam Ruby tries not to scare people.
-
A Busy Developer's Guide to WSDL 1.1
Quick intro to WSDL by the eponymous Sam Ruby.
-
Axis - an open source web service toolkit for Java
by Mark Volkmann, Partner, Object Computing, Inc. A very good introduction
to SOAP and Axis. Highly Recommended.
-
When Web Services Go Bad
Steve Loughran tries to scare people.
A painful demonstration how deployment and system management are
trouble spots in a production service, followed by an espousal of a
deployment-centric development process. Remember, it doesn't have to
be that bad.
-
JavaOne 2002, Web Services Today and Tomorrow
(Java Developer connection login required)
-
The Java Web Services Tutorial: Java API for XML-based RPC
This is part of Sun's guide to their Java Web Services Developer Pack.
The examples are all based on their JWSDP, but as Axis also implements
JAX-RPC, they may all port to Axis.
-
Using Web Services Effectively.
Blissfully ignoring issues such as versioning, robustness and security and
all the other details a production Web Service needs, instead pushing EJB as
the only way to process requests, this is Sun's guide to
using web services in Java. It also assumes Java is at both ends, so manages
to skirt round the interop problem.
-
Making Web Services that Work
A practical but suspiciously code free paper on how to get web
services into production. As well as coverage of topics such as
interop, versioning, security, this (57 page) paper looks at the
deployment problem, advocating a fully automated deployment process
in which configuration problems are treated as defects for which
automated test cases and regresssion testing are appropriate.
Happyaxis.jsp is the canonical example of this. The author, Steve
Loughran also looks a bit at what the component model of a federated
web service world would really be like.
Interoperability
-
To infinity and beyond - the quest for SOAP interoperability
Sam Ruby explains why Interop matters so much.
-
The Wondrous Curse of Interoperability
Steve Loughran on interop challenges (especially between .NET and Axis),
and how to test for them.
Advanced topics
-
Requirements for and Evaluation of RMI Protocols for Scientific Computing
-
Architectural Styles and the Design of Network-based Software Architectures
The theoretical basis of the REST architecture
-
Investigating the Limits of SOAP Performance for Scientific Computing
-
Architectural Principles of the World Wide Web
The W3C architects say how things should be done.
Books
-
Beginning Java Web Services
Meeraj Kunnumpurath et al, Wrox Press, September 2002.
An introductory book, with the early chapters focusing on Axis.
The
sample chapter shows how to install Axis with Tomcat 4.0: we do not believe
that their approach is the best. It is easier to drop jaxrpc.jar and
saaj.jar into the CATALINA_HOME/common/lib dir than it is to add all
axis jars to the classpath by hand. The book is based on Axis Beta-3.
-
Java development with Ant
by Erik Hatcher and Steve Loughran, Manning Press, July 2002.
A book on Ant development which covers Web Service development with Axis,
along with other topics relevant to Java developers using Ant. The Web Service
chapter,
chapter 15, is free to download, and was the birthplace of
happyaxis.jar.
The book is based on Axis Beta-2; the web site contains updated
documentation where appropriate.
-
AXIS: Next Generation Java SOAP
by Romin Irani and S Jeelani Bashna, Wrox Press, May 2002.
The first nothing-but-Axis book.
It is based on Beta-1. This is a reasonable book, despite is apparent thinness and
relative age. If it has a major weakness it believes everything works as intended,
which regular Axis users will know is not quite true yet. Maybe they didn't want
to fault missing features and other gotchas, assuming they would be fixed by the time
the product shipped, but the effective result is that you can get into minor trouble working
from this book, trying to use bits that aren't there, or just don't work (yet).
-
Building Web Services with Java: Making Sense of XML, SOAP, WSDL and UDDI
Steve Graham et al, December 2001.
Covering very early versions of Axis
along with other aspects of Web Service technologies. One of the
authors, Glen Daniels, is an Axis committer and active contributor, so
the quality of the Axis coverage is high. Good explanations of SOAP, UDDI, and the like.
-
J2EE Security for Servlets, EJBs and Web Services
Pankaj Kumar, Prentice Hall, September 2003.
A book on using Java security APIs, tools and mechanisms for building secure
enterprise applications. The chapter on Web Services Security
uses Axis-1.1RC1
for illustrations. Besides Web Services, it covers security aspects of Java RMI,
Servlet and JSP based Web Applications and EJBs.
Authors, publishers: we welcome additions to this section of any books which
have some explicit coverage of Axis. Free paper/pdf copies and other forms of bribery accepted.
External Sites covering Web Services
-
IBM developerWorks Web Services corner
There are lots of interesting articles on Web Services here, many of which are
Axis related. There is also a
listing of
"all current open standards and specifications that define the Web services family of protocols",
though Soap with Attachments is mysteriously absent.
-
MSDN Web
Services
These are the microsoft pages; little Axis coverage but plenty on
Web Service specifications.
- WebServices.xml.com
The O'Reilly site is always up to date, interesting and useful. It
doesn't advocate a single technology (REST, SOAP, RDF...), or a single
product. As such, it retains its independence and value.


We explore the mathematics topics of logic through three side topics:
Bodily Autonomy
When Life Starts
Inequalities in Abortion Discussions
Specifically, we investigate mathematical statements, combinations of statements, truth tables, arguments, and fallacies framed within the social debate of abortion access.
in-context


The Dapp SDK like TypeScript
In order to make smart-contract programming simpler, we provide TypeScript interface.
Just like you are familiar with.
In order to make smart-contract programming simpler, we provide TypeScript interface.
Just like you are familiar with.
We introduces blockchain unified api, which makes blockchains to connect and communicate cross chains.
If you need distributed storage service, we integrate this function.
Optionally embeds BeeChat open api library via config setting, allows Dapp manipulation using BeeChat.
Can be used as third party payment services by Blockchain Wallet


Add Alert
Test alert
Your deployment of Angular 2 Seed worked perfectly! Click about (above) to get your reward!


Title 1
The spring is sprung
The grass is riz
I wonder where
The birdies is!
Title 2
The bird is on the wing
Which is very odd
Because I always heard
The wing is on the bird!


IR-2013-82, Oct. 22, 2013
WASHINGTON — The Internal Revenue Service today announced a delay of approximately one to two weeks to the start of the 2014 filing season to allow adequate time to program and test tax processing systems following the 16-day federal government closure.
The IRS is exploring options to shorten the expected delay and will announce a final decision on the start of the 2014 filing season in December, Acting IRS Commissioner Danny Werfel said. The original start date of the 2014 filing season was Jan. 21, and with a one- to two-week delay, the IRS would start accepting and processing 2013 individual tax returns no earlier than Jan. 28 and no later than Feb. 4.
The government closure came during the peak period for preparing IRS systems for the 2014 filing season. Programming, testing and deployment of more than 50 IRS systems is needed to handle processing of nearly 150 million tax returns. Updating these core systems is a complex, year-round process with the majority of the work beginning in the fall of each year.
About 90 percent of IRS operations were closed during the shutdown, with some major workstreams closed entirely during this period, putting the IRS nearly three weeks behind its tight timetable for being ready to start the 2014 filing season. There are additional training, programming and testing demands on IRS systems this year in order to provide additional refund fraud and identity theft detection and prevention.
“Readying our systems to handle the tax season is an intricate, detailed process, and we must take the time to get it right,” Werfel said. “The adjustment to the start of the filing season provides us the necessary time to program, test and validate our systems so that we can provide a smooth filing and refund process for the nation’s taxpayers. We want the public and tax professionals to know about the delay well in advance so they can prepare for a later start of the filing season.”
The IRS will not process paper tax returns before the start date, which will be announced in December. There is no advantage to filing on paper before the opening date, and taxpayers will receive their tax refunds much faster by using e-file with direct deposit. The April 15 tax deadline is set by statute and will remain in place. However, the IRS reminds taxpayers that anyone can request an automatic six-month extension to file their tax return. The request is easily done with Form 4868, which can be filed electronically or on paper.
IRS processes, applications and databases must be updated annually to reflect tax law updates, business process changes, and programming updates in time for the start of the filing season.
The IRS continues resuming and assessing operations following the 16-day closure. The IRS is seeing heavy demand on its toll-free telephone lines, walk-in sites and other services from taxpayers and tax practitioners.
During the closure, the IRS received 400,000 pieces of correspondence, on top of the 1 million items already being processed before the shutdown.
The IRS encourages taxpayers to wait to call or visit if their issue is not urgent, and to continue to use automated applications on IRS.gov whenever possible.
“In the days ahead, we will continue assessing the impact of the shutdown on IRS operations, and we will do everything we can to work through the backlog and pent-up demand,” Werfel said. “We greatly appreciate the patience of taxpayers and the tax professional community during this period.”


Essential Tools is an collection of user interface components used to create interactive
ASP.NET MVC applications. Essential Tools can be used to create robust and high
performance ASP.NET MVC application interfaces using Editors (including Masked-Edit,
Numeric and Percentage text box) and much more.
Essential Chart is a business-oriented charting component. It offers an innovative
data object model that makes it easy to populate the chart with any kind of data
source. Essential Chart features an advanced styles architecture that makes complex
multi-level formatting very easy.


A client tasked me with recreating a two up slideshow that fades out on each side at different times.
We went with a standard auto carousel for the mobile experience.


The International School of English is a quality professional school dedicated to delivering the highest Educational standards in International student care. It has been operating successfully since 1997. We are a dedicated Student Management team who pride ourselves on making your experience memorable and worthwhile while achieving your personal student goals. Our experienced and qualified teachers ensure a friendly and professional language learning experience. Lessons are lively and communicative, helping you to progress and develop your English language skills. Students are given weekly progress tests to monitor progress, and tutorials every 6 weeks to assess development and offer suggestions on how to improve.
Sign in to see it.