Freitag, 2. September 2016

Passport in-person checklist for the U.S. Consulate in Frankfurt


Official Checklist: for comparison.


Summary and take-away follows.


Do bring:

  • Appointment (alternative link) printed out.
  • Printed, filled out but unsigned Form DS-11 (A4 paper is ok)
  • Social Security Number
  • Pre-paid, filled out courier envelope:  DHL Express Easy Brief
  • Evidence of U.S. Citizenship (e.g. expired passport)
  • Present Identification (e.g. German Personalausweis)
  • Photocopy of Identification (I was not asked for this)
  • Photo (2 x 2 inches - 51 x 51 mm)
  • Around $135 dollars in cash or a credit card

Do NOT bring any electronic devices. They are 100 % strict about this.
There is a little shop ~500 meters next to consulate which takes the mobile phone in safe keeping for €2 in case you forget. You get a numbered plastic card to get the phone back later.


Notes:
The appointment is "only" for the front gate. You will get a number from the front gate and later inside they will call your number. Waiting time inside is up to and around 45 minutes.

Present Identification: This one is interesting. The official checklist states that an expired passport would be sufficient. But in my case they wanted another ID so I used my German Personalausweis.

Montag, 29. August 2016

Top 10 missing features from the Audible Android App

I love audio books and I love Audible.

The choice and prices are great, the Audible productions use great narrators and are high quality and
the support is top notch and always helpful!

With everything else being so great it is surprising that there is a product which is not up to par.
That product is the Audible App for Android which is severely lacking in organizational features for users with large libraries.

This post is intended to reach out  to the Audible mobile app developers and give them some feedback and ideas for the future.

Without further ado here are the top 10 missing features from the Audible Android App
  1. Let us organize our books by tags, Don't just show them all in a single long list.
  2. At least show folders for books of a series and make it easy to buy the missing ones.
  3. Let us tag books and filter by tags. The current filters are practically useless.
  4. Allow users to sort their library by user rating, bestselling and a percentage count showing how many users have finished the book.
  5. Show the user rating and top comment in the book description popup.
  6. I want my cloud book list to filter the finished titles out and the device book list to show the finished books so I can easily delete them. So basically remember that filter setting per list!
  7. Let users add a custom sleep mode time, 30 is too long and 15 too short!
  8. Allow us to shake the phone to reset the sleep timer
  9. Synchronize play time position between devices not only on the first play.
  10. Consider open sourcing parts of the App so the community can help adding these features!

Explanation


At the heart of this list is the desire for more organizational and discovery features.

User with large libraries are overwhelmed by the single large book list with few useful filter options.

Collapse

Let us organize and collapse books by a common feature like a folder or tags.

Folders are great but maybe to limiting for audio books, so tags are a more powerful concept and allow for greater organizational flexibility. For example The Crossing from Michael Connelly is both a part of the Harry Bosch as well as the Mickey Haller series. So let's tag it with both.

Filter

Let us filter by tags so the lists becomes manageable again.

Sort

User with large libraries usually have not heard all their books, so we would like to discover our "next best listen" from our existing library. To do that we need better sorting options.
For example by best selling, by rating and by a percentage of how many other users have completed the book.

Use a combination of all three values to calculate a new popularity rating and allow sorting by that.

Summary

In essence treat our library as you treat your shop!

Thanks for reading :)



Dienstag, 29. Januar 2013

On JavaScript inheritance

I have struggled for quite some time to find the right inheritance strategy for me considering all the available blog posts about this topic and the many many different approaches.

After many searches I finally found this stackoverflow post:
http://stackoverflow.com/questions/7486825/javascript-inheritance

And in particular:
http://stackoverflow.com/questions/7486825/javascript-inheritance/10245829

This looked like a very nice approach.

The new thing for me was the D.call(this) idea.
( This solved the problem with the shared matrix attribute from my Spatial class in Spatial child classes.)

This led me to:
https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Function/call

With this information I realized that there was a slight draw back with the new approach:
The class constructors were being called twice.
Once: D.call(this); and again: new D();

This led me to Object.create:
https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/create

To learn about the difference between new and Object.create I read this:
http://stackoverflow.com/questions/1646698/what-is-the-new-keyword-in-javascript
and this:

understanding-the-difference-between-object-create-and-new-somefunction-in-javascript


But the answer in the second link was not accurate as one commenter pointed out. He had a link to the EcmaScript 5 specification: http://es5.github.com/#x15.2.3.5

This made it finally clear and I started to understand these lines in some inheritance examples:
Child.prototype = Object.create(Parent.prototype);

This basically avoids the unneeded call to the constructor.
Here is a complete example:
http://jsfiddle.net/9Dxkb/1/
or:
http://stackoverflow.com/questions/7486825/javascript-inheritance/12816953

Donnerstag, 27. Dezember 2012

On writing my own WebGL engine


So I did try out Threejs and CubicVR JS and while they are really powerful, I got stuck on using a 6 picture based Skybox with both of them. Threejs does it in a weird - two pass way I didn't like and CubicVR only supports an all-in-one picture approach I didn't like either.

So I tried to add a new Skybox object to CubicVR based on the "Cube with Multiple Materials" example.
But I failed horribly. Both because I didn't understand the inner workings of CubicVR enough and because I didn't understand WebGL.

It has been my personal experience, that to truly use a framework to its maximum potential you should understand the underlying concepts it is trying to abstract anyways.

So after I have stayed away from OpenGL for my entire life, I decided to finally learn it. ( OpenGL ES 2.0 to be specific ) and I am happy to report that it has payed of big time - I am in love !

While the old OpenGL (1.0 and maybe 2.0 )  without shaders was truly ugly, the new shader based OpenGL is easy to learn, understand and like. While I still believe this is an API that would benefit incredibly if converted to an object oriented API it is easy enough to build one yourself now and not cry in pain over all the ugly fixed functions because there are only so few left :-)


WebGL rocks

So I started playing around with WebGL. And it became clear to me that this is the future.
Screw Flash and Unity Webplayer and all the other plugins, this is it !

Here is why WebGL rocks:

  • Everyone can play the game right away in a secure environment.
  • No installation.
  • You can combine it with HTML5 Video and Audio and WebSockets.
  • You can make your WebGL application fullscreen with the new Fullscreen API.
  • You can lock the mouse if you develop a first person game.
  • Texturing is so easy, all the formats the browser understands you can use as textures.
  • Dynamic texturing is easy, just use a HTML 5 2D canvas, paint on it and use it as input for your texture.
  • Scripting ? Haha, it's built in !
  • Based on the amazing Open GL ES 2.0 standard. They removed all of the cruft and left only the essential tools in. ( i.e. everything revolves around using Shaders ! )
  • Amazing WebGL engines for free: Threejs.org and CubicVR JS among many others !
  • Dart support !
AND HERE COMES THE KICKER:
  • FREE USER INTERFACE CONTROLS
    Yes, you read that correctly: you can mix and match WebGL with normal HTML.
    Just position a DIV with HTML inputs over the WebGL canvas !
    Anyone familiar with the pain on how to get a good OpenGL UI will appreciate this !

"But Shaders look so scary!"
Yeah, I thought so too, but these are the basic 2 shaders you need to get started:

1. Vertex shader:
void main(void) {
gl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition, 1.0);
}

2. Fragment shader:
void main(void) {
gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.s, vTextureCoord.t));
}

They will carry you a long way !
( I removed the variables for clarity, you can get the full versions at learningwebgl.com )

Everything is there now in the Browser !
  • High performance 2D and 3D Graphics
  • Sound
  • Background music
  • Networking
  • Mouse lock
  • Fullscreen
The guys at Mozilla and Google did it !
Great job guys !


If I made you curious here are some great places to learn WebGL:

Start with:
http://learningwebgl.com/blog

Then head over to:
http://blog.tojicode.com/p/demos.html

For more resources check out:
http://www.khronos.org/webgl/wiki/Main_Page
and
webgl.com

Have Fun and Start Coding !





Mittwoch, 10. Oktober 2012

Why Tom Hanks is the best actor of all time


The reason is, no one else has such a list of exceptional movie performances.

Here is the list:

1986 6.0 The Money Pit - movie carrying, signatur comedy performace
1988 7.2 Big - movie carrying, signatur childrens movie performace
1993 6.7 Sleepless in Seattle - movie carrying, signatur romantic comedy performace
1993 7.6 Philadelphia - movie carrying, signature, oscar winning drama performace ( best male actor )
1994 8.7 Forrest Gump - movie carrying, oscar winning romantic comedy performace ( best male actor )
1995 7.5 Apollo 13 - movie carrying, flawless drama performance
1995 8.3 Toy Story - movie carrying, signature voice acting performance
1998 8.9 From the Earth to the Moon - movie carrying, signature narration performance
1998 8.6 Saving Private Ryan - movie carrying, oscar nominated drama performace ( best male actor )
1999 8.5 The Green Mile - movie carrying, flawless drama performance
2000 7.6 Cast Away - movie carrying, oscar nominated drama performace ( best male actor )
2002 7.8 Road to Perdition - movie carrying, flawless drama performance
2004 7.2 Terminal - movie carrying, flawless romantic comedy performance

PS: the second column is the IMDB rating as of this posting.

Donnerstag, 26. Mai 2011

A simple XSL Transformation (XSLT) for docbook xml files

<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:d="http://docbook.org/ns/docbook">

<xsl:template match="/">
<html><head><title><xsl:value-of select="d:book/d:info/d:title" /></title></head><body style="font-family:Verdana">
<xsl:apply-templates select="d:book/d:preface"/>
<xsl:apply-templates select="d:book/d:chapter"/>
</body></html>
</xsl:template>

<xsl:template match="d:info/d:author">
<b><xsl:value-of select="." /></b>
</xsl:template>

<xsl:template match="d:preface">
<h1><xsl:value-of select="d:title"/></h1>
<xsl:apply-templates select="d:para"/>
<xsl:apply-templates select="d:itemizedlist"/>
<xsl:apply-templates select="d:orderedlist"/>
</xsl:template>

<xsl:template match="d:chapter">
<h1><xsl:value-of select="d:title"/></h1>
<xsl:apply-templates select="d:para"/>
<xsl:apply-templates select="d:itemizedlist"/>
<xsl:apply-templates select="d:orderedlist"/>
<xsl:apply-templates select="d:section"/>
</xsl:template>

<xsl:template match="d:para">
<p><xsl:value-of select="."/></p>
</xsl:template>

<xsl:template match="d:itemizedlist">
<ul><xsl:apply-templates select="d:listitem"/></ul>
</xsl:template>

<xsl:template match="d:orderedlist">
<ol><xsl:apply-templates select="d:listitem"/></ol>
</xsl:template>

<xsl:template match="d:listitem">
<li><xsl:value-of select="."/></li>
</xsl:template>

<xsl:template match="d:section">
<h2><xsl:value-of select="d:title"/></h2>
<xsl:apply-templates select="d:para"/>
<xsl:apply-templates select="d:itemizedlist"/>
<xsl:apply-templates select="d:orderedlist"/>
</xsl:template>

</xsl:stylesheet>