2015-12-06

Infographic of Google Endpoints in both Scala and Scala JS

I'm no expert in infographics, but I'd tried to show how Google Endpoints is implemented in Scala and Scala JS.

Map

So there are three different languages:
  1. Scala
  2. Javascript
  3. HTML

Google Endpoints

When this is implemented in Scala on backend, it will generate Javascript. HTML needs to load the script and call a Javascript function when loaded.

Scala JS

Written in Scala, Scala JS will generate Javascript. When the Google Endpoints script is loaded, it will callback to Scala JS's script which will created either dynamic or facade representations of it.

Shared

Since Google Endpoints is implemented in Scala and frontend Javascripts in Scala JS, it's easy to share common logic with Scala code.

Code Example

A simple implementation can be found here:

2015-12-05

Dynamic and facade implementation of Google Endpoints with Scala JS

Google Endpoints generates Javascript that mirrors all REST calls to backend. With Scala JS, these scripts can be used in two different ways: dynamic or facade.

Dynamic

This is the easiest solution. If you know the names and the parameters to backend I would recomend this approch. All you need to do is to type vars and defs to js.Dynamic and then use them just as Javascript. Example of loading your API:
And to use a method with csv as parameter:
"literal(csv = validatedText)" is like Javascript "{csv : validatedText}"

Facade

This is approch needs more work since you need to mirror the Javascript generated by Google Endpoints, but will give you types and the structure of the Javascript.
Example of loading your API:
This works since you have defined the API in a facade like in this example:
You know which functions are available since you have made a complete facade. Example:
And therefore it's easy make a call with types:

2015-12-04

Scala JS with Angular and Google Endpoints

Finally done with a simple implementation with Scala JS of Angular and Google Endpoints.

Scala

All backend and frontend is done in Scala with shared logic. Made a simple validation of input which is used in frontend when trying to post, and in backend when it receives.

Google Endpoints

A Javascript is generated which mirrors all exposed methods. This is then used by Scala JS to make all requests to backend.

2015-11-17

Google Endpoints + Objectify + Scala + Scala JS + Auth0

Finally created a project with the following combination

  • Google Endpoints with Google App Engine
  • Objectify as abstract layer of the Datastore
  • Custom Auth0 authenticator for Google Endpoints
  • Scala backend
  • Scala JS to share logic between backend and frontend
You can find the project here:

2015-11-12

Objectify and Scala

Objectify and Scala

There are some learning steps to combine Objectify with Scala. One interesting piece of code is Objectify's:
ObjectifyService.ofy().loader().type(EntityClass.class);
It's not possible to type "type" or "class" in Scala. The first one needs to be escaped and the other have a predefined function:
ObjectifyService.ofy().loader.`type`(classOf[EntityClass])

Scala Example

You can find a complete example here:


2015-11-09

Google App Engine + Scala + ScalaJS + Objectify

Created a single Maven project combining Google App Engine, Scala, ScalaJS and Objectify.

Description

A Scala implementation of Filter using Objectify, a separate source directory for ScalaJS which is generating JavaScript with SBT.

2015-11-08

Google Endpoints + Objectify

Created a small project combining Google Endpoints with Objectify. Added page with a simple JavaScript introduction.

Fabric

There is a small sample for creating some data and getting it.

Creating

As a sample, it's possible to create three different entities
  • EntityId, with POST, creates a new id
  • EntityData, with POST
  • EntityPrimitives, with POST
When posting an EntityId, the response will be its new id.
When posting an EntityData or EntityPrimitives, use the same id as EntityId.

Fetching

To get each type, there's a GET path like
/entityid/123
/entitydata/123
To get the EntityId and all children with the same id, it's possible to use
/entityid/123/entitydata+entityprimitives/

2015-10-30

Google App Engine: "You do not have permission to modify this app"

Common error. Simple solution.

  1. Delete file to reset your local credentials used by appcfg
    1. Linux: rm ~/.appcfg_oauth2_tokens_java
    2. Windows: del /users/.../.appcfg_oauth2_tokens_java
  2. Upload!
    1. APPENGINE_SDK_HOME/bin/appcfg update war-directory

2015-09-23

Wide Windows 10 Command Prompt

Wide Command Prompt!

Finally it happened. Windows have an expandable command prompt! I'm starting to like you Windows 10.

0 Kill H1Z1 Battle Royale Victory!

0 Kill BR Win!

By chance, I won by zero kills!

Description

Dropped down at Bubbas gas station and got two cars. Drove through the houses south and looted to more cars. Drove to the church and looted two other cars. Drove south to the corner and looted. Drove up to the stores east of Bubba and had real-life breakfast. The gas was at the mountains. I drove north of the mountains and the final was south of the mountains at the road crossing (north of Carnberry).
There were less than 10 players left and I saw a few cars. Shoot at them and destroyed two. Drove around to find players but couldn't see any at the forest border of the road. Finally saw someone shoot and immediately die. And suddenly I won!
2nd and 3rd killed each other at the same time I arrived.
0 kills.

2015-09-22

H1Z1 User Input Control Problems

List of Problems with User Input

Camping to the final players in a Battle Royale (BR) is pretty easy, but you need to win a few dules to win the game. Except aiming which includes tapping, spraying and bullet drop compensation; you need to know the controlls very well.

List

You should know about these limitation H1Z1 have with user input a.t.m
  • The player head will cover your aim downwards
  • If you you have a granade at weapon position 1 or 2 and throw it, if no other granade takes the spot, your other weapons will move one position.
    So if you have one granade at position 1, and AK at position 2. If you throw the granade your AK will move from 2 to 1! This can be very confusing and therefore always have your granades at weapon spot 3
  • All interactions with doors, pickups, entering car etc is lagging and takes like half a second
  • When entering a vehicle you will exit the vehicle with the same weapon selected. If you enter it with a granade selected, you'll exit it. Therefore always select a gun when entering a car since you usually need to exit and fire in a duel
  • At driver seat, you cannot change selected weapon. You need to exit vehicle or change seat (ctrl-2, ctrl-3...) and then change weapon. 
  • To drop all ammunition, press shift and drag the ammunition. 
  • If you're healing, don't make a move, change weapon or reload weapon!
    I've been stressed in several duels and be forced to heal at the same time I reload. That won't work. Try to prioritize and do them in sequence.

2015-09-13

Requiem for my H1Z1 Battle Royale Victory Screens

Requiem for my H1Z1 BR Victory Screens

It's sad news that my screens of all my victories (except one) has been lost. When changing to new SSDs, I forgot those. Formated in action.

Requiem

But, since I remember them all, I'll write them down. Never forget.
  1. My first win. Running around at steep slopes down to water. I hear shoots and finally get hit by arrows. I shoot into a bush and win!
    That player probably wanted a victory with bow and arrow.
  2. Big battle at hills. People everywhere. A sudden duel at a crown. Advancing towards a rock with camper, kill in the back, number two running against me and I win the duel.
  3. Advancing by the gas border and avoid players. Hiding behind a tree and see my opponent running straight at me. I step out and kills!
  4. Forest setting with a meadow. Is pushed out but keeps cover. I flank a team and kill them both.
  5. Monster kill! Tried to play casual without headphones and it went well! Running around and in the end I spotted several in the woods. The last one was forced to run cross water and in a close shoot out, I won.
  6. Lots of firing from different directions.
    https://youtu.be/mZYovvxVvWQ
  7. Once I camped by the gas border but it closed in the middle of a city. I heard lots of shooting and at the end there was only me and one other. The circle was so tiny it wasn't possible to see which buildings were safe. When leaving my place I saw the other one on top of a building and shoot some. I ran into the building next by and into one room. By chance, my opponent rushed my building and up the stairs and I shoot it in the back!
  8. By testing a new tactic, I camped with car. Found all gear I needed at gas station at G8. It ended by the mountains where I left the car (since it was too steep) and win three duels.
  9. Straight after my first car camping win, I play again and won! Also camping with a car and looting at gas station at G8. Actually three people have a duel next to me and I kill the last one. Had loot for five people after that! It ends with a shoot out in a meadow with forest around it. My car gets shoot down and I escape. By crouching I flank and kill.
  10. The day after I try car camping again and found my second sweet spot, the fortress at B2. By camping it also ends in a open meadow in a forest. Wins at least three duels and victory is mine!
  11. Car camping and killing some in duels. It ends at some buildings and I see one at the top, shoots but only damages. I'm outside and need to push to the buildings. Standing below I finally see them, also at the ground. I throw Molotov, flank and kills a team. One of the bodies was burning and was probably hit by the Molotov.
  12. Early in the morning I play and camp with car. It ends to the west of the mountains west of Pleasant vill. I win a duel against a cop (dressed and with car), spray at car and in the end flank the last one who didn't see me.
  13. Yesterday I played with car camping. In the end I won a duel and finally gets body armor. I see that one of the last players kills a lot! Using AR and hunting rifle. And in the end it's only we two left. There's a big hill in the middle of the forest south of the big mountain. I see him on top at a rock and shooting at me with hunting rifle. I jump around to get shoot at since the hunting rifle have a longer reload time I shoot in between. But it doesn't seem to help. I jump into my damaged car and push against the sniper. Driving up I jump out of the car and wins! Probably the car ran over my opponent!

2015-09-12

App Engine + Scala + Java + SBT + Eclipse

Combining Java App Engine with Scala and SBT, and Import to Eclipse

Forked and added Eclipse plugin, to in a easy way run a App Engine project in Eclipse and with Scala.

2015-09-02

Scala JS Target Folder

Scala JS: Set Target Folder for JavaScript Build

Recently I've been interested in  Scala JS. It would be great to share logic on client and server side and to write all code in Scala. But SBT can be a bit tricky and my project setup was divided into two:

  1. One webapp with a Java web container
  2. Scala JS with logic shared between frontend and backend
To get SBT to build the JavaScript from my Scala JS project to my webapp I needed to add the following lines in my root build.sbt file:

val jsDir = "../gae/src/main/webapp"
crossTarget in (Compile, fastOptJS) := file(jsDir)

Project combining Scala JS and Java web container

You can check out my project which uses this build at


2015-09-01

Over Powered Battle Royale Tactic in H1Z1

OP BR Tactic in H1Z1

So I found out a OP tactic when playing Battle Royale mode in the zombie survival game H1Z1, it's called "Car Camping". 
Here are some guidelince to follow:
  1. Get a car
  2. Go to a remote place to loot. For instance the fortress at B2, Gas station at G9 etc
  3. Follow the circle at the edge which is as far away as possible.Remember to drive as little as possible to
    1. Save gas
    2. Not make so much noice. The car is loud and give out your position
  4. At the end you need to win some duels to win.

Driving a car

A car have many advantages:
  • Fast. Lets you loot at distant areas, change position and also easily escape the gas.
  • Running over people. Don't use turbo because there's a bigger chance you kill your opponent if you move slowly.
  • Gives you cover. Make sure to have your target on the right side of the car to use your vehicle as cover!
But some disadvantages also
  • Can blow up. If it's close to blowing up, run away as fast as possible!
  • Bigger target which means it's easy to hit it at long range. Usually you won't see the person shooting at you!
  • Can flip over. Don't use turbo in grumpy terrain, you will easily flip over.
  • Clumsy. It's hard to maneuver between trees and rocks

2015-06-20

Google App Engine + Scala with Jersey + ScalaJs

Have been interested in ScalaJs for a while and wanted to use it and Scala with Jersey in Google App Engine. This is a first try to combine them.

GitHub Repository


2015-02-05

Auth0 + Google App Engine (Java) = "Running on GAE? Fine. No cookie support for you!"

Had some troubles implementing Auth0 Java example code to Google App Engine since ...


  1. W2015-02-05 20:25:28.236
    [s~workaround-town/1.382027755131049112].<stderr>: No CookieHandler. Running on GAE? Fine. No cookie support for you!
    
    
  2. W2015-02-05 20:25:28.239
    Error for /auth0-callback/
    java.lang.ExceptionInInitializerError
     at com.auth0.Auth0ServletCallback.createResty(Auth0ServletCallback.java:168)
     at com.auth0.Auth0ServletCallback.fetchTokens(Auth0ServletCallback.java:109)
     at com.auth0.Auth0ServletCallback.doGet(Auth0ServletCallback.java:73)
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
     at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
     at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166)
     at se.ce.workaround.WorkaroundFilter.doHttpFilter(WorkaroundFilter.java:145)
     at se.ce.util.web.singlepage.DefaultFilter.doFilter(DefaultFilter.java:38)
     at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
     at com.googlecode.objectify.cache.AsyncCacheFilter.doFilter(AsyncCacheFilter.java:58)
     at com.googlecode.objectify.ObjectifyFilter.doFilter(ObjectifyFilter.java:48)
     at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
     at com.google.apphosting.utils.servlet.ParseBlobUploadFilter.doFilter(ParseBlobUploadFilter.java:125)
     at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
     at com.google.apphosting.runtime.jetty.SaveSessionFilter.doFilter(SaveSessionFilter.java:35)
     at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
     at com.google.apphosting.utils.servlet.JdbcMySqlConnectionCleanupFilter.doFilter(JdbcMySqlConnectionCleanupFilter.java:60)
     at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
     at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43)
     at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
     at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388)
     at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
     at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
     at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
     at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)
     at com.google.apphosting.runtime.jetty.AppVersionHandlerMap.handle(AppVersionHandlerMap.java:254)
     at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
     at org.mortbay.jetty.Server.handle(Server.java:326)
     at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
     at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:923)
     at com.google.apphosting.runtime.jetty.RpcRequestParser.parseAvailable(RpcRequestParser.java:76)
     at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
     at com.google.apphosting.runtime.jetty.JettyServletEngineAdapter.serviceRequest(JettyServletEngineAdapter.java:146)
     at com.google.apphosting.runtime.JavaRuntime$RequestRunnable.run(JavaRuntime.java:484)
     at com.google.tracing.TraceContext$TraceContextRunnable.runInContext(TraceContext.java:438)
     at com.google.tracing.TraceContext$TraceContextRunnable$1.run(TraceContext.java:445)
     at com.google.tracing.CurrentContext.runInContext(CurrentContext.java:220)
     at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java:309)
     at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContext(TraceContext.java:301)
     at com.google.tracing.TraceContext$TraceContextRunnable.run(TraceContext.java:442)
     at com.google.apphosting.runtime.ThreadGroupPool$PoolEntry.run(ThreadGroupPool.java:251)
     at java.lang.Thread.run(Thread.java:724)
    Caused by: java.security.AccessControlException: access denied ("java.net.NetPermission" "setDefaultAuthenticator")
     at java.security.AccessControlContext.checkPermission(AccessControlContext.java:375)
     at java.security.AccessController.checkPermission(AccessController.java:565)
     at java.lang.SecurityManager.checkPermission(SecurityManager.java:549)
     at com.google.apphosting.runtime.security.CustomSecurityManager.checkPermission(CustomSecurityManager.java:56)
     at java.net.Authenticator.setDefault(Authenticator.java:127)
     at us.monoid.web.Resty.<clinit>(Resty.java:94)
     ... 43 more
    
  3. W2015-02-05 20:25:28.241
    Nested in java.lang.ExceptionInInitializerError:
    java.security.AccessControlException: access denied ("java.net.NetPermission" "setDefaultAuthenticator")
     at java.security.AccessControlContext.checkPermission(AccessControlContext.java:375)
     at java.security.AccessController.checkPermission(AccessController.java:565)
     at java.lang.SecurityManager.checkPermission(SecurityManager.java:549)
     at com.google.apphosting.runtime.security.CustomSecurityManager.checkPermission(CustomSecurityManager.java:56)
     at java.net.Authenticator.setDefault(Authenticator.java:127)
     at us.monoid.web.Resty.<clinit>(Resty.java:94)
     at com.auth0.Auth0ServletCallback.createResty(Auth0ServletCallback.java:168)
     at com.auth0.Auth0ServletCallback.fetchTokens(Auth0ServletCallback.java:109)
     at com.auth0.Auth0ServletCallback.doGet(Auth0ServletCallback.java:73)
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
     at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
     at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166)
     at se.ce.workaround.WorkaroundFilter.doHttpFilter(WorkaroundFilter.java:145)
     at se.ce.util.web.singlepage.DefaultFilter.doFilter(DefaultFilter.java:38)
     at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
     at com.googlecode.objectify.cache.AsyncCacheFilter.doFilter(AsyncCacheFilter.java:58)
     at com.googlecode.objectify.ObjectifyFilter.doFilter(ObjectifyFilter.java:48)
     at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
     at com.google.apphosting.utils.servlet.ParseBlobUploadFilter.doFilter(ParseBlobUploadFilter.java:125)
     at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
     at com.google.apphosting.runtime.jetty.SaveSessionFilter.doFilter(SaveSessionFilter.java:35)
     at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
     at com.google.apphosting.utils.servlet.JdbcMySqlConnectionCleanupFilter.doFilter(JdbcMySqlConnectionCleanupFilter.java:60)
     at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
     at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43)
     at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
     at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388)
     at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
     at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
     at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
     at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)
     at com.google.apphosting.runtime.jetty.AppVersionHandlerMap.handle(AppVersionHandlerMap.java:254)
     at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
     at org.mortbay.jetty.Server.handle(Server.java:326)
     at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
     at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:923)
     at com.google.apphosting.runtime.jetty.RpcRequestParser.parseAvailable(RpcRequestParser.java:76)
     at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
     at com.google.apphosting.runtime.jetty.JettyServletEngineAdapter.serviceRequest(JettyServletEngineAdapter.java:146)
     at com.google.apphosting.runtime.JavaRuntime$RequestRunnable.run(JavaRuntime.java:484)
     at com.google.tracing.TraceContext$TraceContextRunnable.runInContext(TraceContext.java:438)
     at com.google.tracing.TraceContext$TraceContextRunnable$1.run(TraceContext.java:445)
     at com.google.tracing.CurrentContext.runInContext(CurrentContext.java:220)
     at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java:309)
     at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContext(TraceContext.java:301)
     at com.google.tracing.TraceContext$TraceContextRunnable.run(TraceContext.java:442)
     at com.google.apphosting.runtime.ThreadGroupPool$PoolEntry.run(ThreadGroupPool.java:251)
     at java.lang.Thread.run(Thread.java:724)
    
  4. C2015-02-05 20:25:28.244
    Uncaught exception from servlet
    java.lang.ExceptionInInitializerError
     at com.auth0.Auth0ServletCallback.createResty(Auth0ServletCallback.java:168)
     at com.auth0.Auth0ServletCallback.fetchTokens(Auth0ServletCallback.java:109)
     at com.auth0.Auth0ServletCallback.doGet(Auth0ServletCallback.java:73)
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
     at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
     at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166)
     at se.ce.workaround.WorkaroundFilter.doHttpFilter(WorkaroundFilter.java:145)
     at se.ce.util.web.singlepage.DefaultFilter.doFilter(DefaultFilter.java:38)
     at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
     at com.googlecode.objectify.cache.AsyncCacheFilter.doFilter(AsyncCacheFilter.java:58)
     at com.googlecode.objectify.ObjectifyFilter.doFilter(ObjectifyFilter.java:48)
     at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
     at com.google.apphosting.utils.servlet.ParseBlobUploadFilter.doFilter(ParseBlobUploadFilter.java:125)
     at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
     at com.google.apphosting.runtime.jetty.SaveSessionFilter.doFilter(SaveSessionFilter.java:35)
     at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
     at com.google.apphosting.utils.servlet.JdbcMySqlConnectionCleanupFilter.doFilter(JdbcMySqlConnectionCleanupFilter.java:60)
     at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
     at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43)
     at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
     at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388)
     at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
     at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
     at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
     at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)
     at com.google.apphosting.runtime.jetty.AppVersionHandlerMap.handle(AppVersionHandlerMap.java:254)
     at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
     at org.mortbay.jetty.Server.handle(Server.java:326)
     at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
     at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:923)
     at com.google.apphosting.runtime.jetty.RpcRequestParser.parseAvailable(RpcRequestParser.java:76)
     at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
     at com.google.apphosting.runtime.jetty.JettyServletEngineAdapter.serviceRequest(JettyServletEngineAdapter.java:146)
     at com.google.apphosting.runtime.JavaRuntime$RequestRunnable.run(JavaRuntime.java:484)
     at com.google.tracing.TraceContext$TraceContextRunnable.runInContext(TraceContext.java:438)
     at com.google.tracing.TraceContext$TraceContextRunnable$1.run(TraceContext.java:445)
     at com.google.tracing.CurrentContext.runInContext(CurrentContext.java:220)
     at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java:309)
     at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContext(TraceContext.java:301)
     at com.google.tracing.TraceContext$TraceContextRunnable.run(TraceContext.java:442)
     at com.google.apphosting.runtime.ThreadGroupPool$PoolEntry.run(ThreadGroupPool.java:251)
     at java.lang.Thread.run(Thread.java:724)
    Caused by: java.security.AccessControlException: access denied ("java.net.NetPermission" "setDefaultAuthenticator")
     at java.security.AccessControlContext.checkPermission(AccessControlContext.java:375)
     at java.security.AccessController.checkPermission(AccessController.java:565)
     at java.lang.SecurityManager.checkPermission(SecurityManager.java:549)
     at com.google.apphosting.runtime.security.CustomSecurityManager.checkPermission(CustomSecurityManager.java:56)
     at java.net.Authenticator.setDefault(Authenticator.java:127)
     at us.monoid.web.Resty.<clinit>(Resty.java:94)
     ... 43 more
Will create a Auth0Callback suited for Google App Engine. Take a look at my Github:
https://github.com/AIMMOTH/GAEAuth0Callback

2015-02-03

Google App Engine Deploy Error

Ran into a very confusion error when deploying a new app to App Engine.

------------ Deploying frontend ------------

Preparing to deploy:

Created staging directory at: 'C:\Users\Carl\AppData\Local\Temp\appcfg8392684210541476644.tmp'

Scanning for jsp files.

Scanning files on local disk.

Initiating update.

com.google.appengine.tools.admin.HttpIoException: Error posting to URL: https://appengine.google.com/api/appversion/create?app_id=git-app&version=1&

400 Bad Request

Error when loading application configuration:Unable to assign value 'email' to attribute 'url':Value 'email' for url does not match expression '^(?:(?!\^)/.*|\..*|(\(.).*(?!\$).)$'

Debugging information may be found in C:\Users\Carl\AppData\Local\Temp\appengine-deploy1202454373832605151.log
By chance I found that a servlet url-pattern didn't start with slash.
<url-pattern>/email</url-pattern> 

Full stacktrace:
Unable to update:
com.google.appengine.tools.admin.HttpIoException: Error posting to URL: https://appengine.google.com/api/appversion/create?app_id=git-app&version=1&
400 Bad Request
Error when loading application configuration:Unable to assign value 'email' to attribute 'url':Value 'email' for url does not match expression '^(?:(?!\^)/.*|\..*|(\(.).*(?!\$).)$'

at com.google.appengine.tools.admin.AbstractServerConnection.send1(AbstractServerConnection.java:303)
at com.google.appengine.tools.admin.AbstractServerConnection.send(AbstractServerConnection.java:254)
at com.google.appengine.tools.admin.AbstractServerConnection.post(AbstractServerConnection.java:233)
at com.google.appengine.tools.admin.LoggingClientDeploySender.send(LoggingClientDeploySender.java:47)
at com.google.appengine.tools.admin.AppVersionUpload.send(AppVersionUpload.java:1100)
at com.google.appengine.tools.admin.AppVersionUpload.beginTransaction(AppVersionUpload.java:735)
at com.google.appengine.tools.admin.AppVersionUpload.uploadFilesTransaction(AppVersionUpload.java:174)
at com.google.appengine.tools.admin.AppVersionUpload.doUpload(AppVersionUpload.java:151)
at com.google.appengine.tools.admin.AppAdminImpl.doUpdate(AppAdminImpl.java:474)
at com.google.appengine.tools.admin.AppAdminImpl.update(AppAdminImpl.java:55)
at com.google.appengine.eclipse.core.proxy.AppEngineBridgeImpl.deploy(AppEngineBridgeImpl.java:433)
at com.google.appengine.eclipse.core.deploy.DeployProjectJob.runInWorkspace(DeployProjectJob.java:158)
at org.eclipse.core.internal.resources.InternalWorkspaceJob.run(InternalWorkspaceJob.java:38)
at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)