logo enkisoftware
Independent game developer making AVOYD
en  fr

Presskit for Google App Engine

Juliette Foucaut - 23 Jan 2014 - edited 06 May 2017


[Update 06 May 2017 - We no longer maintain our presskit() for Google App Engine project. The Github repository is deprecated and the installer is no longer available.]

presskit() is a free, open-source tool that enables game studios to present information to the press in a unified format. However the current php implementation doesn't work on Google App Engine (GAE). Recently, Leonard Ritter started the ball rolling, showing it could be done and offering some code changes. After Rami Ismail mentioned that it would indeed be useful, and since we needed it ourselves, Doug and I decided to do the port.

If you would like to use presskit() on GAE, I'll explain in this post how to download and install our implementation. As an example see our presskit() at press.enkisoftware.com.

Warning: our code is in beta. We've only tested the installation ourselves, on Windows. Any feedback you can give us (use the comments below or email me), successful or not, would be very helpful: it'll enable us to fix remaining issues with the build or the documentation.

presskit() runs on Google App Engine presskit() runs on Google App Engine

We're currently hosting the installer whilst we wait for feedback about integrating our code with Rami Ismail's implementation (Github references are at the end of this post).

Installing presskit() for GAE

  1. Install the Python 2.7 (required for the tools) and the App Engine SDKs following the instructions here: https://developers.google.com/appengine/docs/php/gettingstarted/installing.
    Note: you don't need mySQL as presskit() doesn't require it.

  2. download dopresskit_install.zip.
    Note: as stated above we're temporarily hosting the installer on our website.

  3. Extract the contents of dopresskit_install.zip to a directory of your choice (we'll call it [..\myPresskitDir]).
    You should now have 2 files in your [..\myPresskitDir] folder: app.yaml and install.php.

  4. Open the Google App Engine Launcher.

    • Select File > Add Existing Application…. Set the Application Path to [..\myPresskitDir] and press Add.
    • An application with the name [my-presskit-app] is listed in the GAE Launcher. Select and Run it.
    • Take note of the [port number] (it should be 4 to 5 digits, e.g. 8080)

  5. In a browser, navigate to http://localhost:[port number]/install.php (e.g. http://localhost:8080/install.php)

  6. Follow the instructions on the page.
    Note: this part is not GAE specific.

  7. Edit the app.yaml file:

    • replace the application name [my-presskit-app] with a unique name you can use for your application.
      Note: the application identifier should meet certain requirements: only lower-case letters, digits, and - characters are allowed; the application id should not begin with -.
    • For each project (game) folder: copy and paste the images and trailers handlers which have the [game1] folders and change [game1] to your project name.

  8. You should now have a locally working version of Presskit().
    Note: the 'Request Press Copy' feature won't send emails when running on the local development environment.

  9. If you want a site icon add a favicon.ico to your root directory.

  10. Create an application with the name you used to replace [my-presskit-app] following the instructions here: https://developers.google.com/appengine/docs/php/gettingstarted/uploading

  11. Upload to Google App Engine.

  12. Test your online presskit() page(s) by going to [my-presskit-app].appspot.com.

Updating presskit() for GAE

Editing presskit is not possible on the GAE server: changes have to be made locally and the result uploaded. The instructions to update presskit are as follows:

  1. Place install.php is in your [..\myPresskitDir] directory (you can get install.php from dopresskit_install.zip - warning: do not overwrite your app.yaml with the one that's in the zip file!)

  2. Same as during installation: run the application locally using the GAE launcher, open the page in your browser and make your changes. When ready, delete install.php and upload the files to Google App Engine.

Known issue in GAE

Don't use push-to-deploy (= having your git repository hosted at Google/github, automatically deploy whenever the repository gets pushed). Here's the report for this issue for tracking when Google eventually fixes this: GAE issue 10939: application_readable app.yaml directive ignored when using push-to-deploy with PHP.
Thanks to Sebastian Mayer for finding the issue!

Code changes and technical information

We've forked the current version of dopresskit from Rami Ismail's repository on Github. We tried to make as little change to the code as possible. Our current implementation should work both on traditional servers and GAE (it auto-detects the platforms it runs on). Details of our implementation and fixes are split into two branches:

  • Branch: main (source code on Github), contains no code related to GAE.

    • fixed the 'Request Press Copy' email: improved feedback on invalid email address entry, error sending message and success sending message.

      presskit() email validation message: invalid emailFeedback to the user: invalid email

      presskit() email success message: email successfully sentFeedback to the user: email successfully sent

    • fixed the projects pages title: replaced COMPANY_TITLE with GAME_TITLE.
      This fixes the heading of the project (games) pages. It also fixes an issue with the subject and body of emails sent through the 'Request Press Copy': it now mentions which game a copy was requested for. You'll receive an email looking like this:

      subject: [Request] my2ndGameName Press Copy For ExamplePressCompany
      body: someone@examplepresscompany.com of ExamplePressCompany has requested a Press Copy for my2ndGameName through the press kit interface.

    • fixed the projects pages left-handside navigation: replaced "projects" with "features".

  • Branch: GAE (source code on Github), same fixes as in main branch +

    • Added conditional code to detect whether running on GAE or not to index.php, sheet.php and mail.php. As a result, if running on GAE, it'll use the appropriate API for GAE.

    • added app.yaml

    • modified install.php so that at installation, archive.zip is retrieved from our server (https://www.enkisoftware.com/downloads/dopresskit/) instead of Rami's (http://www.ramiismail.com/kit/press/).
      Note: if/when our code is merged back with the default dopresskit we'll revert this feature and stop hosting the installer dopresskit_install.zip and archive.zip on our server.

Credits

Thanks to Rami Ismail and Leonard Ritter for making presskit and encouraging us to port it to GAE!

  • presskit() was created by Rami Ismail of Dutch independent game studio Vlambeer. All the information about presskit() is available on the dopresskit.com website.
  • Leonard Ritter of independent game studio Duangle did the original port to GAE. You can visit the presskit for Duangle and their game Nowhere. It is already running on GAE.
  • Doug Binks and Juliette Foucaut (writing this post), we continued work on the port, fixed the mailing error handling and other small issues. We modified the installer, tested it and documented the installation process. We're currently hosting the installer on our website.

In conclusion

you can find the source code for presskit() on Google App Engine forked on Github (GAE and Mainr branches). We hope that it will eventually be merged with Rami Ismail's original code, but in the meantime we'll continue to host the installer on our website. Also, feel free to visit press.enkisoftware.com to see the result!

If you're curious about why -and how to- host a website on GAE, see this blog post.

And finally, if you implement your presskit() on GAE, send me the link and I'll add it to a list of examples.

[Edit 26 Jan 2014: added instructions for updating presskit]
[Edit 26 Jun 2014: added GAE push-to-deploy issue]
[Edit 06 May 2017: project deprecated, the installer is no longer available]

2023
 › Optimising Voxel Meshes for Games Using Blender
 › Implementing a GPU Voxel Octree Path Tracer
 › Avoyd Release Streams and Minecraft Lit Materials
 › Avoyd Beta Stream
2022
 › Isometric Render of a Minecraft Map in Avoyd Voxel Editor
2021
 › Importing Minecraft maps in Avoyd Voxel Editor improved
2020
 › Runtime Compiled C++ Dear ImGui and DirectX11 Tutorial
2019
 › Boxes in Space: procedural generation of abstract worlds in Avoyd
 › Procedural python word generator: making user names out of 4 syllables
 › In-game building
 › Player-deployable turrets in Avoyd
2018
 › Avoyd Game Singleplayer and Coop Multiplayer Test
 › Voxel Editor Evolved
2017
 › Speeding up Runtime Compiled C++ compile times in MSVC with d2cgsummary
 › Multiplayers toxic last hit kill and how to heal it
 › Avoyd Editor Prototype
2016
 › Black triangles and Peter Highspot
 › Colour palettes and lighting
 › Concept art by Rebecca Michalak
2015
 › Internals of a lightweight task scheduler
 › Implementing a lightweight task scheduler
 › Feral Vector
 › Normal generation in the pixel shader
2014
 › Python Google App Engine debugging with PyCharm CE
 › Lighting voxel octrees and procedural texturing
 › Patterns and spheres
 › Python Google App Engine debugging with PyTools
 › Interview
 › Domain masking using Google App Engine
 › Octree streaming - part 4
 › Black triangles and nervous_testpilot
 ›› Presskit for Google App Engine 
 › Octree streaming - part 3
 › Octree streaming - part 2
 › Octree streaming
2013
 › LAN discovery with multiple adapters
 › Playing with material worlds
 › Developer Diary archive
 › Website redesign
 › First Person Editor
 › First Avoyd tech update video
 › Implementing a static website in Google App Engine
 › Multiplayer editing
 › First screenshots
 › Thoughts on gameplay modes
 › Back in 1999
2002
 › ECTS 2002
 › Avoyd Version 1.6.1 out
 › Avoyd Version 1.6 out
2001
 › Biting the bullet
 › Avoyd version 1.5 out
 › Monday Mayhem
 › Avoyd version 1.5 alpha 1 out
 › Avoyd version 1.4 out
 › ECTS 2001
 › Fun with Greek letters
 › Closer just a little closer
 › Back already
 › Artificial Humanity
 › Products and promises
 › Ecommerce
 › Explosions galore
 › Spring fixes
 › Open source and ports to other operating systems
 › Avoyd LAN Demo Version 1.1 is out
 › Thanks for the support
 › Avoyd LAN Demo Ready
 › Game Tech
 › Optimising Voxel Meshes for Games Using Blender
 › Implementing a GPU Voxel Octree Path Tracer
 › Importing Minecraft maps in Avoyd Voxel Editor improved
 › Runtime Compiled C++ Dear ImGui and DirectX11 Tutorial
 › Boxes in Space: procedural generation of abstract worlds in Avoyd
 › Procedural python word generator: making user names out of 4 syllables
 › Speeding up Runtime Compiled C++ compile times in MSVC with d2cgsummary
 › Internals of a lightweight task scheduler
 › Implementing a lightweight task scheduler
 › Normal generation in the pixel shader
 › Lighting voxel octrees and procedural texturing
 › Octree streaming - part 4
 › Octree streaming - part 3
 › Octree streaming - part 2
 › Octree streaming
 › LAN discovery with multiple adapters
 › enkiTS
 › Internals of a lightweight task scheduler
 › Implementing a lightweight task scheduler
 › RCC++
 › Runtime Compiled C++ Dear ImGui and DirectX11 Tutorial
 › Speeding up Runtime Compiled C++ compile times in MSVC with d2cgsummary
 › Web Tech
 › Procedural python word generator: making user names out of 4 syllables
 › Python Google App Engine debugging with PyCharm CE
 › Python Google App Engine debugging with PyTools
 › Domain masking using Google App Engine
 ›› Presskit for Google App Engine 
 › Implementing a static website in Google App Engine
 › Avoyd
 › Implementing a GPU Voxel Octree Path Tracer
 › Avoyd Release Streams and Minecraft Lit Materials
 › Avoyd Beta Stream
 › Isometric Render of a Minecraft Map in Avoyd Voxel Editor
 › Importing Minecraft maps in Avoyd Voxel Editor improved
 › Boxes in Space: procedural generation of abstract worlds in Avoyd
 › In-game building
 › Player-deployable turrets in Avoyd
 › Avoyd Game Singleplayer and Coop Multiplayer Test
 › Voxel Editor Evolved
 › Multiplayers toxic last hit kill and how to heal it
 › Avoyd Editor Prototype
 › Black triangles and Peter Highspot
 › Colour palettes and lighting
 › Concept art by Rebecca Michalak
 › Feral Vector
 › Patterns and spheres
 › Interview
 › Black triangles and nervous_testpilot
 › Playing with material worlds
 › Website redesign
 › First Person Editor
 › First Avoyd tech update video
 › Multiplayer editing
 › First screenshots
 › Thoughts on gameplay modes
 › Back in 1999
 › Avoyd 1999
 › Developer Diary archive
 › Back in 1999
 › ECTS 2002
 › Avoyd Version 1.6.1 out
 › Avoyd Version 1.6 out
 › Biting the bullet
 › Avoyd version 1.5 out
 › Monday Mayhem
 › Avoyd version 1.5 alpha 1 out
 › Avoyd version 1.4 out
 › ECTS 2001
 › Fun with Greek letters
 › Closer just a little closer
 › Back already
 › Artificial Humanity
 › Products and promises
 › Ecommerce
 › Explosions galore
 › Spring fixes
 › Open source and ports to other operating systems
 › Avoyd LAN Demo Version 1.1 is out
 › Thanks for the support
 › Avoyd LAN Demo Ready