40 Simple Minus Questions
See the Pen Simple Minus by DevilKazuya99 (@devilkazuya99) on CodePen.
40 Simple Addition Questions
See the Pen Simple Plus by DevilKazuya99 (@devilkazuya99) on CodePen.
I created this snippet to generate math questions for my kids. Click the [Print] button to print the questions and answers. It should fit nicely in 2 A4 pages. Refresh the page to regenerate a new set of Q/A.
See the Pen More 2 Steps Plus Multiply by DevilKazuya99 (@devilkazuya99) on CodePen.
mvn io.quarkus:quarkus-maven-plugin:1.3.0.Final:create \
-DprojectGroupId=org.acme \
-DprojectArtifactId=rest-json-quickstart \
-DclassName="org.acme.rest.json.FruitResource" \
-Dpath="/fruits" \
-Dextensions="resteasy-jackson"
cd rest-json-quickstart
However, my goal, in the end, is to package the application into a native binary. Including an external library as above will make Graalvm complain. So I need to go for plan B --> Firestore REST API.
Put both files in src/main/resources folder. When calling TokenUtils.generateTokenString(kid, timeClaims); it should give me a signed JWT token.
$ cordova create myapp1 com.otccomputing.myapp1 "My App 1"
Creating a new cordova project with name "My App 1" and id "com.otccomputing.myapp1" at location "/Users/guest/apps/myapp1"
$http.put('organization', {name: $scope.name}).success(
function(data){
alert('Success');
});
the GET, POST and DELETE will be more or less the same. $http.get(), $http.post(), $http.delete().addRouting(
"/secured/{entity}",
"/secured/rest?entity={entity}");
addRouting(
"/secured/{entity}/{resourceId}",
"/secured/rest?entity={entity}&resourceId={resourceId}");
package smis.controller.secured;
import java.io.BufferedReader;
import java.lang.reflect.Method;
import java.util.List;
import org.apache.log4j.Logger;
import org.slim3.controller.Controller;
import org.slim3.controller.Navigation;
import org.slim3.datastore.Datastore;
import org.slim3.datastore.ModelMeta;
import com.google.appengine.api.datastore.Key;
public class RestController extends Controller {
private Logger logger = Logger.getLogger(getClass());
@Override
public Navigation run() throws Exception {
String entityName = asString("entity");
String resourceId = asString("resourceId");
// hack class name. :p
entityName = entityName.substring(0, 1).toUpperCase()
+ entityName.substring(1);
Class entityClass = Class.forName("smis.model." + entityName);
Class modelMetaClass = Class.forName("smis.meta." + entityName
+ "Meta");
Method method = modelMetaClass.getMethod("get");
Object modelMetaInstance = method.invoke(null);
logger.debug(entityClass);
logger.debug(modelMetaClass);
logger.debug(modelMetaInstance);
logger.debug("Method = " + request.getMethod());
if (isGet()) {
if (resourceId == null) {
return handleList((ModelMeta) modelMetaInstance);
} else {
return handleDetail(entityClass,
(ModelMeta) modelMetaInstance);
}
} else if (isPost()) {
return handleCreate((ModelMeta) modelMetaInstance);
} else if (isPut()) {
return handleCreate((ModelMeta) modelMetaInstance);
} else if (isDelete()) {
return handleDelete(entityClass);
}
return null;
}
private Navigation handleDelete(Class entityClass) throws Exception {
Key key = asKey("resourceId");
Datastore.delete(key);
Object t = Datastore.get(entityClass, key);
logger.debug(t == null);
response.setContentType("text/plain");
response.setCharacterEncoding("UTF-8");
response.getWriter().print(t == null);
response.flushBuffer();
return null;
}
private Navigation handleCreate(ModelMeta modelMeta) throws Exception {
StringBuffer jb = new StringBuffer();
String line = null;
try {
BufferedReader reader = request.getReader();
while ((line = reader.readLine()) != null)
jb.append(line);
} catch (Exception e) { /* report an error */
e.printStackTrace();
}
String json = jb.toString();
logger.debug(json);
Object t = modelMeta.jsonToModel(json);
boolean isComplete = Datastore.put(t).isComplete();
logger.debug(isComplete);
response.setContentType("text/plain");
response.setCharacterEncoding("UTF-8");
response.getWriter().print(isComplete);
response.flushBuffer();
return null;
}
private Navigation handleDetail(Class entityClass, ModelMeta modelMeta)
throws Exception {
Key key = asKey("resourceId");
logger.debug(key);
Object t = Datastore.get(entityClass, key);
String json = modelMeta.modelToJson(t);
logger.debug(json);
response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
response.getWriter().print(json);
response.flushBuffer();
return null;
}
private Navigation handleList(ModelMeta modelMeta) throws Exception {
List list = Datastore.query(modelMeta).asList();
String json = modelMeta.modelsToJson(list);
logger.debug(json);
response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
response.getWriter().print(json);
response.flushBuffer();
return null;
}
}
Because my lazy nature, I use reflection to create the Class for my entity and also the instance of the Meta class. Thanks to how slim3 name the model and meta class. There is a high security risk here! Not recommended for production, OK?StringBuffer jb = new StringBuffer();
String line = null;
try {
BufferedReader reader = request.getReader();
while ((line = reader.readLine()) != null)
jb.append(line);
} catch (Exception e) { /* report an error */
e.printStackTrace();
}