tag:blogger.com,1999:blog-13990428383768851392024-02-06T21:15:09.478-08:00Forty-TwoAnonymoushttp://www.blogger.com/profile/04957279964247475771noreply@blogger.comBlogger17125tag:blogger.com,1999:blog-1399042838376885139.post-71858532763557497692016-06-12T21:30:00.002-07:002016-06-12T21:30:26.548-07:00Fred's VR List — Games for the HTC Vive you'll want to buyIf you're reading this, you're part of the 1% who haven't been living under a rock and either altready have an <a href="http://www.htcvive.com/">HTC Vive</a>, or are debating getting one.<br />
<br />
Let's settle the debate first: if you are at all considering whether you should get one, then you need to <a href="https://www.htcvive.com/preorder">order</a> one right now. If you can't decide which VR system to get, the answer is still the same: you need to get the best VR system out there right, and that's the Vive.<br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhlvfqmcAmzlS-TM8wQuo2CNYZbdxpij-LNyaULZpaCQKafZUh3YcpdtM5F-aASMwgmXQ7DnXZhWAxOqetVoMHvmGq1QAOSKd_DeEFk6i_sWfbnKwDpPYw3IxhjZ9tR8MIvgW5IQCezyg4r/s1600/IMG_0613.JPG" imageanchor="1"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhlvfqmcAmzlS-TM8wQuo2CNYZbdxpij-LNyaULZpaCQKafZUh3YcpdtM5F-aASMwgmXQ7DnXZhWAxOqetVoMHvmGq1QAOSKd_DeEFk6i_sWfbnKwDpPYw3IxhjZ9tR8MIvgW5IQCezyg4r/s320/IMG_0613.JPG" width="320" /></a><br />
<br />
<div>
Now that that's out of the way, you'll probably want to start shopping for apps. Some of them are really good, others are equally bad. Moreover, it's not always clear at the outset which is which.</div>
<div>
<br /></div>
<div>
Since I've convinced several friends to order their own Vive, and have had several weeks to figure out which VR apps I like the most, I've been getting a lot of requests for recommendations.</div>
<div>
<br /></div>
<div>
So, I thought I'd start by sharing my list (<a href="http://fredsa.allen-sauer.com/p/freds-vr.html">Fred's VR List — Games for the HTC Vive you'll want to buy</a>) with you.</div>
<div>
<br /></div>
<div>
Once you've exhausted that list, you'll want to do you own shopping, which means deciding which of the <a href="http://store.steampowered.com/search/?term=#sort_by=Reviews_DESC&vrsupport=101&page=1">200+ HTC Vive games on Steam</a> are worth checking out. Here are a few tricks for navigating this growing list of apps:</div>
<div>
<ol>
<li>First, get your feet wet: download <a href="http://fredsa.allen-sauer.com/p/freds-vr.html">a few free apps</a> to get an idea of what you like and what you don't.</li>
<li>Although video trailers rarely do VR apps justice, try going back to watch the trailers for games you do like, so you get a better sense of what to look for.</li>
<li>Sort the list of <a href="http://store.steampowered.com/search/?term=#sort_by=Reviews_DESC&vrsupport=101&page=1">HTC Vive games on Steam</a> by user rating and start at the top.</li>
<li>For your first pass, skip anything that supports both Oculus Rift and HTC Vive. You bought the Vive to have a full room experience. In general, apps that support Oculus Rift don't support full room VR.</li>
<li>Search YouTube for other users who have recorded their game play. While the production quality of those videos is often lacking, they're pretty good at giving you a sense of the game play, which really helps with the purchasing decision.</li>
<li>Take a little risk. There are some gems out there, but you won't know untill you try.</li>
<li>If you really don't like an app you've paid for, it's okay to give up on it. Steam will generally let you return games you've played for less than two hours and purchased within the last two weeks, although you should start the return process as soon as you're sure.</li>
</ol>
</div>
If there's games not on my list that should be, <a href="mailto:fredsa@gmail.com">let me know</a>.Anonymoushttp://www.blogger.com/profile/04957279964247475771noreply@blogger.com0tag:blogger.com,1999:blog-1399042838376885139.post-47122191526108293292013-09-11T11:04:00.001-07:002013-09-11T11:04:17.302-07:00Crazyflie 10-DOF nano quadcopter repair<br />
Our crazyflie's inaugural flight was quite exciting! She quickly soared to the daring height of roughly twelve feet. In fear of imminent collision with the the ceiling we let go of the thrust control. Crazyflie responded with equal daring, quickly succumbing to gravity's pull. She headed downward at great speed. She immediately sacrificed one wing to break her fall.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUbWf1vQbrajI95mwJ1mLiIy-dwGxd3-Eq3YnNoyKA8_-dGs0DwuEZWkdb74EUac03v1X-3VD49dHBp-DDYCzzr-K_bp1iFJZ9FBe8JLRTSiI9KNIji3aim47r9KDOPIWFCWLsYiA2npjk/s1600/busted.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUbWf1vQbrajI95mwJ1mLiIy-dwGxd3-Eq3YnNoyKA8_-dGs0DwuEZWkdb74EUac03v1X-3VD49dHBp-DDYCzzr-K_bp1iFJZ9FBe8JLRTSiI9KNIji3aim47r9KDOPIWFCWLsYiA2npjk/s320/busted.jpg" width="320" /></a></div>
<br />
Now what? We were certainly prepared to do some tinkering: we expected to lose a motor or one of its mounts here and there. We had great plans for her. However, we did not expect to be presented with such a significant repair so early in her life.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.youtube.com/embed/PGTHm1PskAE?feature=player_embedded' frameborder='0'></iframe></div>
<br />
Trough some trial and error I think we came up with a fairly good design:<br />
<br />
<ul>
<li>a part that is easily manufactured in any quantity</li>
<li>trivial to install with a hot glue gun</li>
<li>maintain wing alignment</li>
<li>is light weight, shock absorbent, ...</li>
<li>but not too strong, such as to stress the main board or its components during impact</li>
</ul>
<br />
Our first repair attempt involved printing <a href="http://www.thingiverse.com/thing:95216">thingiverse 95216</a>, but this added a lot of weight and quickly broke as well:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgw0CpdCVX2h5KfFdBFVSe9EpQQ3RNP53fb9DisZbEkmfCTrfv_KJ0lObg5_qSGKkO1bTRZrLOaWbr_EDvDHUsTCqgG9D-FFLwt_LcS1cmducmQIKcSJdkXh9QMfWbSKFv953pgTUSJdsH4/s1600/Screenshot+2013-09-10+at+7.59.05+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="256" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgw0CpdCVX2h5KfFdBFVSe9EpQQ3RNP53fb9DisZbEkmfCTrfv_KJ0lObg5_qSGKkO1bTRZrLOaWbr_EDvDHUsTCqgG9D-FFLwt_LcS1cmducmQIKcSJdkXh9QMfWbSKFv953pgTUSJdsH4/s320/Screenshot+2013-09-10+at+7.59.05+PM.png" width="320" /></a></div>
<br />
After some experimenting, we ended up with a pretty good toothpick design:<br />
<ul>
<li>toothpicks are easy to acquire</li>
<li>toothpicks are very light</li>
<li>toothpicks slide snugly into the motor mount</li>
<li>toothpicks are easily mounted to the main board with hot glue </li>
</ul>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgbwJgeCw-4uiwE-id-mfHV5ay1ncb_TEQ8k6zwaYKTisgAl48DbFwCcYEwTyWjzyw8EMeOx3DuAAqdg5TZV0Blo0Sjx2ogY9w7q6yLfGmmNrLm6qOO7VaiW2QdoiZgvTWw4EIi7Ttan3F-/s1600/top+and+bottom+glued.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="150" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgbwJgeCw-4uiwE-id-mfHV5ay1ncb_TEQ8k6zwaYKTisgAl48DbFwCcYEwTyWjzyw8EMeOx3DuAAqdg5TZV0Blo0Sjx2ogY9w7q6yLfGmmNrLm6qOO7VaiW2QdoiZgvTWw4EIi7Ttan3F-/s200/top+and+bottom+glued.jpg" width="200" /></a><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhckbQinJvclmvjGQQ0zx3JY_JIE6rFuiz13MVceXrpot2bUPtJB6MB76Z4iKzTwefi4QSjqn9fla_F4E-q-30wUnNCyGoMrmQwkPPuyXzJast09Rxyk4jmzxw2NGaJ60k6lnzbKtlb_gu6/s1600/IMG_20130831_184139.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="150" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhckbQinJvclmvjGQQ0zx3JY_JIE6rFuiz13MVceXrpot2bUPtJB6MB76Z4iKzTwefi4QSjqn9fla_F4E-q-30wUnNCyGoMrmQwkPPuyXzJast09Rxyk4jmzxw2NGaJ60k6lnzbKtlb_gu6/s200/IMG_20130831_184139.jpg" width="200" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: left;">
Each toothpick would average about ten crashes before it had to be replaced. The design also had a couple of other minor issues:</div>
<div class="separator" style="clear: both; text-align: left;">
</div>
<ul>
<li>As the toothpick had to extend to the other side of the main board, the broken wing's motor and its mount ended up lower than the remaining three motors, making initial leveling trickier.</li>
<li>Because the toothpicks broke regularly, we ended up spending a lot of time with the hot glue gun: removing old toothpick and installing new ones.</li>
</ul>
<br />
<div class="separator" style="clear: both; text-align: left;">
Inspired, we took our toothpick design to the next level, with a <a href="http://www.thingiverse.com/thing:149499">3d part of our own design</a>:</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNIIW5F2SSv65yF8xosTo03Nry0Ye6IjjxfAslDZHJjNUlsKim26_z5FM-hHgJMsDtiI2SiVC-DGA5OKKJljsvb6tBUELAwKb_sSKGd4L3ZoiSAsNaUV_D9n3h7nfamT_EglaoF0gG1qp8/s1600/IMG_20130903_190638.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="150" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNIIW5F2SSv65yF8xosTo03Nry0Ye6IjjxfAslDZHJjNUlsKim26_z5FM-hHgJMsDtiI2SiVC-DGA5OKKJljsvb6tBUELAwKb_sSKGd4L3ZoiSAsNaUV_D9n3h7nfamT_EglaoF0gG1qp8/s200/IMG_20130903_190638.jpg" width="200" /></a><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkfHVv57N69KOVzcVLx5g24DlcW37MbfJrVtRQynO03t2xVPgzrsZ0PUUTOaaTiQHcdKewGC_bss3OHLVnCZRKnYtlaxMNTao4vt01kM7TOI2pNUxZoda9KILvuFc_oPmQVaUbRk30n_mq/s1600/IMG_20130903_190307.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="150" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkfHVv57N69KOVzcVLx5g24DlcW37MbfJrVtRQynO03t2xVPgzrsZ0PUUTOaaTiQHcdKewGC_bss3OHLVnCZRKnYtlaxMNTao4vt01kM7TOI2pNUxZoda9KILvuFc_oPmQVaUbRk30n_mq/s200/IMG_20130903_190307.jpg" width="200" /></a><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSHsGCCPE8BNOSTokB65jvmQeoudA42ATdQaJovo0xrrTqWLM_yp4HeIlfsDp6DlWxchU_nqk4AxfxzAwQXY9Gvz5Vtc50nxSRnDSMnUsrok7vrkb9-omORYHFdKZ0X8ZI2gVzcy8Bnz_X/s1600/IMG_20130903_190729.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="150" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSHsGCCPE8BNOSTokB65jvmQeoudA42ATdQaJovo0xrrTqWLM_yp4HeIlfsDp6DlWxchU_nqk4AxfxzAwQXY9Gvz5Vtc50nxSRnDSMnUsrok7vrkb9-omORYHFdKZ0X8ZI2gVzcy8Bnz_X/s200/IMG_20130903_190729.jpg" width="200" /></a></div>
<br />
After spending some time flying, crashing and repairing our crazyflie, I thought I'd share some thoughts on the wing design. No matter what wing design you choose, you're making an engineering trade off between strength and weight. Strength is actually a complicated subject with its own trade offs. A stiffer part will be able to withstand greater impact forcing, but will transfer those forces to the rest of the system. A weaker part with absorb more of the impact, protecting the rest of the unit, but with increased risk of itself breaking.<br />
<br />
The current crazyflie wing design has relatively thin (light) stiff wings which become wider at the point where they are attached to the main board. This means that when the wings break, they almost certainly will break at the point where their width goes from narrow to wide. When it comes to repairs, this is obviously the most inconvenient point for a break.<br />
<br />
Why not just make the wings wider (stronger), so they don't break as easily? While a stiffer design would certainly save some wings from bigger crashes, at some point we're going to start having main boards go bad because of the higher g forces during ever bigger crashes.<br />
<br />
What we really need is a sacrificial wing part. Just like the motor mounts, which were designed to sacrifice themselves in order to spare motors which would otherwise be damaged, I think we want sacrificial wings.<br />
<br />
The thing with sacrificial parts is that they, well, sacrifice themselves. They break. So, these parts need to be cheap and easily replaced, ideally without any tools. The thing I don't like about the motor mount design is that replacing a motor mount requires a soldering iron to detach and reattach the motor wires after stringing them through the mount.<br />
<br />
Here's my proposal: redesign crazyflie so that instead of four wings it has four wing mounts. Design a very simple wing which...<br />
<ul>
<li>is the most likely part to break</li>
<li>is really cheap, such that you get a whole bag of them with your crazyflie</li>
<li>is easy to make on a 3d printer</li>
<li>ideally resembles toothpick dimensions</li>
</ul>
<div>
This last point is important, because it means you can use a toothpick in a pinch.</div>
Anonymoushttp://www.blogger.com/profile/04957279964247475771noreply@blogger.com0tag:blogger.com,1999:blog-1399042838376885139.post-1279561359110204332013-07-12T14:00:00.000-07:002013-07-12T14:01:59.071-07:00Standing up a phpBB instance on Google App Engine and Cloud SQL<h2 dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 10pt;">
<span style="font-family: 'Open Sans'; font-size: 17px; vertical-align: baseline; white-space: pre-wrap;">Before we get started</span></h2>
<div>
<span style="font-family: 'Open Sans'; font-size: 13px; line-height: 1.15; white-space: pre-wrap;">I've been playing around with </span><a href="http://www.phpbb.com/" style="font-family: 'Open Sans'; font-size: 13px; line-height: 1.15; white-space: pre-wrap;">phpBB</a><span style="font-family: 'Open Sans'; font-size: 13px; line-height: 1.15; white-space: pre-wrap;"> on App Engine's new experimental PHP runtime environment, using Cloud SQL for the backend database. While it wasn't too much effort to get it a site up and running I thought it would be useful to document the steps I went through here so others can follow along. Let me know in the comments if these steps don't work for you, or if there's additional changes you ended up making to the phpBB source to address more advanced features. </span></div>
<h2 dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 10pt;">
<span style="font-family: 'Open Sans'; font-size: 17px; vertical-align: baseline; white-space: pre-wrap;">Overview</span></h2>
<h2 dir="ltr" style="margin-bottom: 0pt; margin-top: 10pt;">
<span style="font-family: 'Open Sans'; font-size: 13px; font-weight: normal; line-height: 1.15; white-space: pre-wrap;">This guide follows roughly these steps:</span></h2>
<ol style="margin-bottom: 0pt; margin-top: 0pt;">
<li dir="ltr" style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: decimal; text-decoration: none; vertical-align: baseline;"><div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Get a basic phpBB instance up and running on the App Engine SDK's dev_appserver, connected to a locally available MySQL instance</span></div>
</li>
<li dir="ltr" style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: decimal; text-decoration: none; vertical-align: baseline;"><div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Walk through phpBB's initial setup process using the local the dev_appserver</span></div>
</li>
<li dir="ltr" style="background-color: transparent; color: black; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: decimal; text-decoration: none; vertical-align: baseline;"><div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Make a couple of adjustments to the generated </span><span style="background-color: transparent; color: black; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><span style="font-family: Courier New, Courier, monospace;">config.php</span></span></div>
</li>
<li dir="ltr" style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: decimal; text-decoration: none; vertical-align: baseline;"><div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Export the local MySQL database and import it into Google Cloud SQL</span></div>
</li>
<li dir="ltr" style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: decimal; text-decoration: none; vertical-align: baseline;"><div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Deploy our application to the App Engine production environment</span></div>
</li>
</ol>
<b id="docs-internal-guid-7bb2f8e1-d434-9d9c-c974-0890f4e9d3e6" style="font-weight: normal;"><br /><span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span></b>
<br />
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">TODO: Look into caching template files in memcache.</span></div>
<b style="font-weight: normal;"><br /><span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span></b>
<br />
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Here are the step by step instructions:</span></div>
<h2 dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 10pt;">
<span style="font-family: 'Open Sans'; font-size: 17px; vertical-align: baseline; white-space: pre-wrap;">Setup your Cloud Console Project</span></h2>
<ul style="margin-bottom: 0pt; margin-top: 0pt;">
<li dir="ltr" style="background-color: transparent; color: black; font-size: 15px; font-style: normal; font-variant: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"><div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">From the </span><a href="https://cloud.google.com/console" style="font-weight: normal; text-decoration: none;"><span style="background-color: transparent; color: #1155cc; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;">Google Cloud Console</span></a><span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> create a new project. Pick a suitable project id (I used </span><span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">fredsa-phpbb</span><span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">). This cloud console project id will also serve as your App Engine app id.</span></div>
<div dir="ltr" style="font-family: Arial; line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<img height="166px;" src="https://lh3.googleusercontent.com/emNf0nuPbpigg4DrHYegvFoBYdOBZ_BemBI_ecbz58NPyuWRNO1KmAwcKf-nVhoDRQVLE3U4uW8HWgz_SPl2zZ5R51WagmZuwURqnUmIupRnYgw05PCVHb_uZg" style="font-size: 15px; line-height: 1.15;" width="427px;" /></div>
<div dir="ltr" style="font-family: Arial; font-weight: normal; line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span></div>
</li>
<li><span style="font-family: 'Open Sans'; font-size: 13px; line-height: 1.15; white-space: pre-wrap;">Enable billing on your Cloud Console project (click the gear icon in the top right and select 'Billing'). Don't forget to click the verification link the email you'll receive. Confirming your contact email will ensure you receive timely billing notifications.</span></li>
<li><span style="font-family: Open Sans; font-size: x-small;"><span style="line-height: 14px; white-space: pre-wrap;">Also enable billing for your App Engine project. Click the 'Enable Billing' button from the 'Billing Status' page from the App Engine admin console. There's a link to the App Engine console from the Cloud Console.</span></span></li>
<li><span style="font-family: 'Open Sans'; font-size: 13px; vertical-align: baseline; white-space: pre-wrap;">Within your</span><span style="font-family: 'Open Sans'; font-size: 13px; vertical-align: baseline; white-space: pre-wrap;"> cloud console project create a new Cloud Storage bucket. For convenience I chose my bucket name to be the same as my project id</span></li>
</ul>
<div style="text-align: center;">
<img height="217px;" src="https://lh5.googleusercontent.com/hLP5s30ttIfdSk8jJuyVfB-bmTDmAmJCaMGiXIaX646W_S1_K5FYeijJTeAIUsBIWMUMAKgvJPaADvwLTIRnNG-9Q8uwwgdt4yJpjCJXQB8L0ZiIGU66gzvN" style="font-family: Arial; font-size: 15px; line-height: 1.15;" width="433px;" /></div>
<ul style="margin-bottom: 0pt; margin-top: 0pt;">
<li><span style="font-family: 'Open Sans'; font-size: 13px; vertical-align: baseline; white-space: pre-wrap;">Within your </span><span style="font-family: 'Open Sans'; font-size: 13px; vertical-align: baseline; white-space: pre-wrap;">cloud console project create a new Cloud SQL instance. Again for convenience I chose and instance id which matches my project id. Instance id </span><span style="font-family: 'Courier New'; font-size: 13px; vertical-align: baseline; white-space: pre-wrap;">fredsa-phpbb</span><span style="font-family: 'Open Sans'; font-size: 13px; vertical-align: baseline; white-space: pre-wrap;"> in project <span style="font-family: 'Courier New';">fredsa-phpbb</span> can be known as </span><span style="font-family: 'Courier New'; font-size: 13px; vertical-align: baseline; white-space: pre-wrap;">fredsa-phpbb:fredsa-phpbb</span></li>
</ul>
<div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh3DxtL-hCx4VxrcwzyYWnJ6EVC0XJMOFDVtHED6gu5XNF8jXzptgFviobatK-vkkq9fMmMr9ReLfJkysjvBKr4obZUTdhSkVrjXmeuMl6cwM0h-2dXYX1W4eTdFr_Jje-QjbSGF3zkqzWO/s1600/123.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="140" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh3DxtL-hCx4VxrcwzyYWnJ6EVC0XJMOFDVtHED6gu5XNF8jXzptgFviobatK-vkkq9fMmMr9ReLfJkysjvBKr4obZUTdhSkVrjXmeuMl6cwM0h-2dXYX1W4eTdFr_Jje-QjbSGF3zkqzWO/s320/123.png" width="320" /></a></div>
<div style="text-align: center;">
<span style="font-family: Arial;"><span style="font-size: 15.199999809265137px; line-height: 13.600000381469727px;"><br /></span></span></div>
<b style="font-weight: normal;"><span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span></b><br />
<ul style="margin-bottom: 0pt; margin-top: 0pt;">
<li dir="ltr" style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"><div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Download and install the </span><a href="https://developers.google.com/cloud/sdk/" style="text-decoration: none;"><span style="background-color: transparent; color: #1155cc; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;">Cloud SDK</span></a><span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> or install each of these tools separately":</span></div>
</li>
<ul style="margin-bottom: 0pt; margin-top: 0pt;">
<li dir="ltr" style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: circle; text-decoration: none; vertical-align: baseline;"><div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">google_sql.sh </span><a href="https://developers.google.com/cloud-sql/docs/commandline" style="text-decoration: none;"><span style="background-color: transparent; color: #1155cc; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;">https://developers.google.com/cloud-sql/docs/commandline</span></a><span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span></div>
</li>
<li dir="ltr" style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: circle; text-decoration: none; vertical-align: baseline;"><div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">App Engine SDK </span><a href="https://developers.google.com/appengine/downloads" style="text-decoration: none;"><span style="background-color: transparent; color: #1155cc; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;">https://developers.google.com/appengine/downloads</span></a><span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span></div>
</li>
</ul>
</ul>
<h2 dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 10pt;">
<span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 17px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Verify Cloud SQL connectivity</span></h2>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">google_sql.py your-project-id:your-cloud-sql-instance-id</span></div>
<h2>
<span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 17px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Download phpBB 3.0.11</span></h2>
<ul style="margin-bottom: 0pt; margin-top: 0pt;">
<li dir="ltr" style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"><div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Download </span><span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">phpBB-3.0.11.zip</span><span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> from </span><a href="https://www.phpbb.com/downloads/" style="text-decoration: none;"><span style="background-color: transparent; color: #1155cc; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;">https://www.phpbb.com/downloads/</span></a><span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span></div>
</li>
<li dir="ltr" style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"><div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Extract the zip file</span></div>
</li>
</ul>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">unzip phpBB-3.0.11.zip</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">cd phpBB3</span></div>
<ul style="margin-bottom: 0pt; margin-top: 0pt;">
<li dir="ltr" style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"><div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">To easily track your changes throughout the installation process you may find it convenient to create a local git repository. This step is entirely optional:</span></div>
</li>
</ul>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">git init</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">git add -A</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">git commit -m 'initial contents of phpBB-3.0.11.zip'</span></div>
<h2 dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 10pt;">
<span style="font-family: 'Open Sans'; font-size: 17px; line-height: 1.15; white-space: pre-wrap;">(Optional) Add a favicon.ico</span></h2>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Copy your favorite </span><a href="https://appengine.google.com/favicon.ico" style="text-decoration: none;"><span style="background-color: transparent; color: #1155cc; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;">favicon.ico</span></a><span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> into the main phpBB directory (i.e the same directory where </span><span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">common.php</span><span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> can be found)</span><span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span></div>
<h2 dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 10pt;">
<span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 17px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Modify the app to be App Engine compatible</span></h2>
<ul style="margin-bottom: 0pt; margin-top: 0pt;">
<li dir="ltr" style="background-color: transparent; color: black; font-family: Arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"><div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Add a </span><span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">404.php</span><span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">, which we'll use to explicitly disallow access to certain resources, with the following contents:</span></div>
</li>
</ul>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><?</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">http_response_code(404);</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">?></span></div>
<ul style="margin-bottom: 0pt; margin-top: 0pt;">
<li dir="ltr" style="background-color: transparent; color: black; font-family: Arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"><div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Add </span><span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">php.ini</span><span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> with the following contents</span></div>
</li>
</ul>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">output_buffering = "On"</span></div>
<ul style="margin-bottom: 0pt; margin-top: 0pt;">
<li dir="ltr" style="background-color: transparent; color: black; font-family: Arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"><div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">(Optional) add </span><span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">cron.yaml</span><span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> to run cleanup tasks at a desired interval</span></div>
</li>
</ul>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"># See https://developers.google.com/appengine/docs/php/config/cron</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">cron:</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">- description: phpBB cleanup tasks</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> url: /cron.php</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> schedule: every 24 hours</span></div>
<ul style="margin-bottom: 0pt; margin-top: 0pt;">
<li dir="ltr" style="background-color: transparent; color: black; font-family: Arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"><div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Add the App Engine </span><span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">app.yaml</span><span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> configuration file, with the following contents:</span><span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span></div>
</li>
</ul>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">application: your-app-id</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">version: 1</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">runtime: php</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">api_version: 1</span></div>
<b style="font-weight: normal;"><br /><span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span></b>
<br />
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"># see https://developers.google.com/appengine/docs/php/config/appconfig</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">handlers:</span></div>
<b style="font-weight: normal;"><br /><span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span></b>
<br />
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"># Prevent users from accessing protected resources, which would otherwise be</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"># accessible because of wildcard handlers later in this files. This replaces:</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"># - .htaccess</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"># - cache/.htaccess</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"># - files/.htaccess</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"># - images/avatars/upload/.htaccess</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"># - includes/.htaccess</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"># - store/.htaccess</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">- url: /(common.php|config.php|(cache|files|images/avatars/upload|includes|store)/.*)</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> script: 404.php</span></div>
<b style="font-weight: normal;"><br /><span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span></b>
<br />
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">- url: /</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> script: index.php</span></div>
<b style="font-weight: normal;"><br /><span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span></b>
<br />
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">- url: /favicon\.ico</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> static_files: favicon.ico</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> upload: favicon\.ico</span></div>
<b style="font-weight: normal;"><br /><span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span></b>
<br />
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">- url: /(.*\.php)</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> script: \1</span></div>
<b style="font-weight: normal;"><br /><span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span></b>
<br />
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">- url: /adm/images</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> static_dir: adm/images</span></div>
<b style="font-weight: normal;"><br /><span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span></b>
<br />
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">- url: /(adm/style/.*\.(css|js))</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> static_files: \1</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> upload: adm/style/.*\.(css|js)</span></div>
<b style="font-weight: normal;"><br /><span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span></b>
<br />
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">- url: /images</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> static_dir: images</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> application_readable: true</span></div>
<b style="font-weight: normal;"><br /><span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span></b>
<br />
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">- url: /(styles/.*\.(html))</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> static_files: \1</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> upload: styles/.*\.(html)</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> application_readable: true</span></div>
<b style="font-weight: normal;"><br /><span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span></b>
<br />
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">- url: /(styles/.*\.(css|gif|jpg|js|png))</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> static_files: \1</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> upload: styles/.*\.(css|gif|jpg|js|png)</span></div>
<b style="font-weight: normal;"><br /><span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span></b>
<br />
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"># see https://developers.google.com/appengine/docs/php/config/appconfig</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">skip_files:</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"># default entries</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">- ^(.*/)?#.*#</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">- ^(.*/)?.*~</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">- ^(.*/)?.*\.py[co]</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">- ^(.*/)?.*/RCS/.*</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">- ^(.*/)?\..*</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"># custom entries, for resources we don't want to deploy to production</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">- ^cache/.*$</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">- ^install/.*$</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">- ^scripts/.*$</span></div>
<ul style="margin-bottom: 0pt; margin-top: 0pt;">
<li dir="ltr" style="background-color: transparent; color: black; font-family: Arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"><div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Review the contents of any </span><span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">.htaccess</span><span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> files (which are ignored by App Engine). Ensure that the access restrictions indicated by each file are implemented using one of the following strategies:</span></div>
</li>
</ul>
<ul style="margin-bottom: 0pt; margin-top: 0pt;"><ul>
<li dir="ltr" style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: circle; text-decoration: none; vertical-align: baseline;"><div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Outright removal of the affected files or directories. Users won't be able to access files which do not exist.</span></div>
</li>
<li dir="ltr" style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: circle; text-decoration: none; vertical-align: baseline;"><div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Use of a </span><span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">login: admin</span><span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> protected URL handler in </span><span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">app.yaml</span><span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">. This allows App Engine admins such as yourself to access administrative functions while denying access to all other users.</span></div>
</li>
<li dir="ltr" style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: circle; text-decoration: none; vertical-align: baseline;"><div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Use of a </span><span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">script: 404.php</span><span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> URL handler in </span><span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">app.yaml</span><span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">. This explicitly denies access to specific resources, including those resources which would otherwise be made accessible by later </span><span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">app.yaml</span><span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> URL handlers.</span></div>
</li>
<li><span style="font-family: 'Open Sans'; font-size: 13px; vertical-align: baseline; white-space: pre-wrap;">Use of a </span><span style="font-family: 'Courier New'; font-size: 13px; vertical-align: baseline; white-space: pre-wrap;">skip_files</span><span style="font-family: 'Open Sans'; font-size: 13px; vertical-align: baseline; white-space: pre-wrap;"> entry in </span><span style="font-family: 'Courier New'; font-size: 13px; vertical-align: baseline; white-space: pre-wrap;">app.yaml</span><span style="font-family: 'Open Sans'; font-size: 13px; vertical-align: baseline; white-space: pre-wrap;">. This prevents access to files by making sure the specified files are not deployed to the production environment.</span></li>
</ul>
</ul>
<div dir="ltr" style="font-family: 'Courier New'; font-size: 15px; line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="font-family: 'Open Sans'; font-size: 13px; vertical-align: baseline; white-space: pre-wrap;"><br /></span></div>
<div dir="ltr" style="margin-bottom: 0pt; margin-top: 0pt;">
<span style="font-size: 12.800000190734863px; line-height: 11.199999809265137px; white-space: pre-wrap;"><span style="font-family: Open Sans;">The above </span><span style="font-family: Courier New, Courier, monospace;">app.yaml</span><span style="font-family: Open Sans;"> should already take care of these phpBB 3.0.11 files, although it wouldn't hurt for you to independently verify this.</span></span></div>
<div dir="ltr" style="margin-bottom: 0pt; margin-top: 0pt;">
<span style="font-family: Open Sans;"><span style="font-size: 12.800000190734863px; line-height: 11.199999809265137px; white-space: pre-wrap;"><br /></span></span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">git ls-files | grep .htaccess</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">phpBB/.htaccess</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">phpBB/cache/.htaccess</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">phpBB/config/.htaccess</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">phpBB/files/.htaccess</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">phpBB/images/avatars/upload/.htaccess</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">phpBB/includes/.htaccess</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">phpBB/store/.htaccess</span></div>
<h2 dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 10pt;">
<span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 17px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Run and install phpBB locally</span></h2>
<ul style="margin-bottom: 0pt; margin-top: 0pt;">
<li dir="ltr" style="background-color: transparent; color: black; font-family: Arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"><div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Download and install </span><a href="http://www.mysql.com/" style="text-decoration: none;"><span style="background-color: transparent; color: #1155cc; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;">MySQL</span></a><span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">, </span><a href="https://developers.google.com/appengine/docs/php/gettingstarted/installing" style="text-decoration: none;"><span style="background-color: transparent; color: #1155cc; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;">PHP</span></a><span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> and the </span><a href="https://developers.google.com/appengine/downloads" style="text-decoration: none;"><span style="background-color: transparent; color: #1155cc; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;">App Engine PHP SDK</span></a><span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span></div>
</li>
<li dir="ltr" style="background-color: transparent; color: black; font-family: Arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"><div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Create a </span><span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">local</span><span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> MySQL database named </span><span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">phpbb</span><span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">, which we'll later export and then import into a Cloud SQL database.</span><span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span></div>
</li>
</ul>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">mysql -u root</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">mysql> </span><span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">CREATE DATABASE phpbb DEFAULT CHARACTER SET utf8;</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Query OK, 1 row affected (0.00 sec)</span></div>
<ul style="margin-bottom: 0pt; margin-top: 0pt;">
<li dir="ltr" style="background-color: transparent; color: black; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"><div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Launch the dev_appserver from the phpBB directory containing the </span><span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">app.yaml</span><span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">. Note the final argument to this command is a '</span><span style="background-color: transparent; color: black; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><span style="font-family: Courier New, Courier, monospace;">.</span></span><span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">' indicating the current directory.</span></div>
</li>
</ul>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">dev_appserver.py \</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> --php_executable_path=/usr/local/bin/php-cgi \</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> --mysql_user root \</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> .</span></div>
<ul style="margin-bottom: 0pt; margin-top: 0pt;">
<li dir="ltr" style="background-color: transparent; color: black; font-family: Arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"><div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Access the now running local phpBB instance </span><span style="background-color: transparent; color: #1155cc; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"><a href="http://localhost:8080/" style="text-decoration: none;">http://localhost:8080/</a></span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><img height="184px;" src="https://lh3.googleusercontent.com/L352c16IcO6uUM3sLM-6hL-H-GzNYGrH0IExz5BTn295putg8RTvd0ludiYgTUIpQplhLyVY1_yiWZSGYz1_D_8CPZAzg0eQD4JWl4K4yuMqQZ9K63XCBlUVWg" width="341px;" /><span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span></div>
</li>
</ul>
<ul style="margin-bottom: 0pt; margin-top: 0pt;">
<li dir="ltr" style="background-color: transparent; color: black; font-family: Arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"><div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Click the </span><span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: italic; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">install</span><span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> tab</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<img height="511px;" src="https://lh5.googleusercontent.com/xzq_q9WdX4kfZkm-W_EL8GkqEapXeZploJWLbHMLnLGrQARWmYSUeVryv7N8SXrthI8cS2tIM7d9ZDuRMR2UusBSnNBS1jnUCd2A1q1hql0wJXXVvcPzqcz1mw" width="516px;" /><span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span></div>
</li>
</ul>
<b style="font-weight: normal;"><br /><br /><span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span></b><br />
<ul style="margin-bottom: 0pt; margin-top: 0pt;">
<li dir="ltr" style="background-color: transparent; color: black; font-family: Arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"><div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Click 'Proceed to next step' and verify the installation compatibility</span></div>
</li>
<ul style="margin-bottom: 0pt; margin-top: 0pt;">
<li dir="ltr" style="background-color: transparent; color: black; font-family: Arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: circle; text-decoration: none; vertical-align: baseline;"><div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Note: In the App Engine production environment, the local file system is not writable. In the dev_appserver we initially allow phpBB to assume that local directories are writable. We'll later modify </span><span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">config.php</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<img height="863px;" src="https://lh3.googleusercontent.com/7RKunkcNvSx4HRsFsKXdqem_cE1ANl9YLOs0Hddbzjy-4faKCTgW0SsHhgJc-HJEo4tpmp2DS5xUROLaG-LppXlRoWOcX89fT7aTd1tI-TRC54iAChQ5p8jzuA" width="488px;" /><span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span></div>
</li>
</ul>
</ul>
<ul style="margin-bottom: 0pt; margin-top: 0pt;">
<li dir="ltr" style="background-color: transparent; color: black; font-family: Arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"><div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Specify the details for the local MySQL instance</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<img height="258px;" src="https://lh6.googleusercontent.com/TT8JfAO-MBfcte51cn73e0rYl2HpxZWOGf8T_0VE19mrUIQv5UFQreXwhW7v6wFv-OvqH9Zq8R6sa9bwfBr0R7e9-mJS_gzDjkYatx2Z3bG2kuTTvmJJY629sg" width="464px;" /></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><img height="84px;" src="https://lh6.googleusercontent.com/hLVElYbgHoz03tKcEANNNQmReZS_RuVmIIw_a2iMUMYGX4pcgxDZ5jdjfwOMY6fxCCbp12XxWS3YCManhIUB6UiV86tmAt5ZW5TEDNpXRvk26n91l2h8qIhb0A" width="465px;" /><span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span></div>
</li>
</ul>
<b style="font-weight: normal;"><br /><span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br /><span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span></b><br />
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> </span></div>
<ul style="margin-bottom: 0pt; margin-top: 0pt;">
<li dir="ltr" style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"><div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Configure the admin account</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<img height="203px;" src="https://lh5.googleusercontent.com/Dg51Bab7z5-wW4unBuSw053agvRk0WBgLjD8xHoyKiWRDhwbaXw4PQ5FuwijgB98e26XAntoxP49KmKFdRIwIFR86l-BhJaJCAgxG-pl9jjJ7AIYTo2FdEaT3w" width="532px;" /></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<br /></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<img height="88px;" src="https://lh5.googleusercontent.com/lFmozvlTNIBNMlIRpC0U7IoH95d1prz1izDxAl1FjWGabVbhv_ECd1lyR3m-AEgl1oo4NJOQALYjExdAAXt6eFRH8W4J0ZgOrJvJU_AgJgw5TJivQoLhKzwymg" style="font-size: 13px;" width="515px;" /><span style="font-size: 13px; vertical-align: baseline; white-space: pre-wrap;"></span><img height="64px;" src="https://lh4.googleusercontent.com/pqAj1QYpQ4PxWKxXNuIM1tTnwFdgD0nU_yKy57GNXbBIMsPD9vyoRni2LhbKe_c244tfFEzMi7g4kLBALVSlmL362VDeSvZ3WKdKWCCcxIR-NmcvnbT8cUekzQ" style="font-size: 13px;" width="516px;" /></div>
</li>
</ul>
<b style="font-weight: normal;"><span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span></b><br />
<ul style="margin-bottom: 0pt; margin-top: 0pt;">
<li dir="ltr" style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"><div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Configure your email settings:</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<img height="253px;" src="https://lh5.googleusercontent.com/mJiwf6chjaRECljPHug2zKNjLML_KN8gLYiYbZyPh0vkFY_euINp6ANQjkuX0CGveoGHEe16AM3EarKKgKStmLZ06OH4W5Rtz_zQap3OWpGRn0n_twlhqYjFyg" width="466px;" /><span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span></div>
</li>
</ul>
<b style="font-weight: normal;"><br /><span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span></b>
<br />
<ul style="margin-bottom: 0pt; margin-top: 0pt;">
<li dir="ltr" style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"><div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Configure your server URL settings:</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<img height="231px;" src="https://lh6.googleusercontent.com/2xJxK46Qj7NZS1plDUd1EPx_ANDQvXS07-FiUU52GYooiZSeORSS12w_Y7JzYjWWkBW_N4a75cIezCogzQXXTb8YO9lCVOUeaSy5Nwlf9DGxaQyx8jvDtLEMKg" width="457px;" /><span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span></div>
</li>
</ul>
<b style="font-weight: normal;"><br /><span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span></b>
<br />
<ul style="margin-bottom: 0pt; margin-top: 0pt;">
<li dir="ltr" style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"><div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Create database tables</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<img height="64px;" src="https://lh4.googleusercontent.com/g-Kkz_JMKfc5-BCAwcjir7YZKv_9-njv8ICDW1Wn006ytVxs9_N8h2wSnm6aMHKdEfKQm6M1cV8QeL7j9xx1vGQ5DGFrLTRn6kxxR86nGspG6vuLLMSOST3LfA" width="464px;" /></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><img height="202px;" src="https://lh3.googleusercontent.com/GGGHa9clzHVP80JzLQZ2tb8_ODiaDdm0FAV69T1I0BAFHbjg7Af93zgtMYLu-SH6CJkwYoMcaeTnMqowlaTkfk68vGRj55t-gZsimwYRGNeLw-1m4MSHhqFLXw" width="459px;" /><span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span></div>
</li>
</ul>
<b style="font-weight: normal;"><br /><span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span></b>
<br />
<h2 dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 10pt;">
<span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 17px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Apply App Engine specific </span><span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 17px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">config.php</span><span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 17px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> changes</span></h2>
<ul style="margin-bottom: 0pt; margin-top: 0pt;">
<li dir="ltr" style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 15px; font-style: normal; font-variant: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"><div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Modify </span><span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">phpBB/config.php</span><span style="font-family: 'Open Sans'; font-size: 12.800000190734863px; line-height: 11.199999809265137px; white-space: pre-wrap;"> as indicated in <b>bold</b>:</span><span style="font-size: x-small;"><span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span></span></div>
</li>
</ul>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><?php</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">// phpBB 3.1.x auto-generated configuration file</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">// Do not change anything in this file!</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">$dbms = 'phpbb_db_driver_mysql';</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">$dbhost = '127.0.0.1';</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">$dbport = '';</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">$dbname = 'phpbb';</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">$dbuser = 'root';</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">$dbpasswd = '';</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">$table_prefix = 'phpbb_';</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">$adm_relative_path = 'adm/';</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">$acm_type = 'phpbb_cache_driver_file';</span></div>
<b style="font-weight: normal;"><br /><span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span></b>
<br />
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">@define('PHPBB_INSTALLED', true);</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">// @define('DEBUG', true);</span></div>
<b style="font-weight: normal;"><br /><span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span></b>
<br />
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">// ************************************************************************</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">// OUR LOCAL MODIFICATION, DESPITE THE ABOVE WARNING TO NOT CHANGE ANYTHING</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">// ************************************************************************</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">$DEVAPPSERVER = preg_match('/^Development/', $_ENV['SERVER_SOFTWARE']);</span></div>
<b style="font-weight: normal;"><br /><span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span></b>
<br />
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">if ($DEVAPPSERVER) {</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> $acm_type = 'null';</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">} else {</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> $dbhost = ':/cloudsql/fredsa-phpbb:fredsa-phpbb';</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> $acm_type = 'memcache';</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">}</span></div>
<ul style="margin-bottom: 0pt; margin-top: 0pt;">
<li dir="ltr" style="background-color: transparent; color: black; font-family: Arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"><div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Optionally review the files that have been created during the installation process</span></div>
</li>
</ul>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">git status --ignored</span></div>
<h2 dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 10pt;">
<span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 17px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Copy your local MySQL instance to Cloud SQL</span></h2>
<ul style="margin-bottom: 0pt; margin-top: 0pt;">
<li dir="ltr" style="background-color: transparent; color: black; font-family: Arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"><div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<a href="https://developers.google.com/cloud-sql/docs/import_export" style="text-decoration: none;"><span style="background-color: transparent; color: #1155cc; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;">Export</span></a><span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> the local MySQL </span><span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">phpbb</span><span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> database</span></div>
</li>
</ul>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">mysqldump --databases phpbb -u root --hex-blob > phpbb.sql</span><span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span></div>
<ul style="margin-bottom: 0pt; margin-top: 0pt;">
<li dir="ltr" style="background-color: transparent; color: black; font-family: Arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"><div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Upload the resulting </span><span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">phpbb.sql</span><span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> file to your</span><span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> Cloud Storage bucket:</span></div>
</li>
</ul>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">gsutil cp phpbb.sql gs://your-cloud-storage-bucket-name/</span></div>
<ul style="margin-bottom: 0pt; margin-top: 0pt;">
<li dir="ltr" style="background-color: transparent; color: black; font-family: Arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"><div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">From the Cloud SQL console import the MySQL database dump (</span><span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">gs://your-cloud-storage-bucket-name/phpbb.sql</span><span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">)</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<img height="182px;" src="https://lh3.googleusercontent.com/_Dbv80RcNS_gtJ_HKNcCHavf3Ev_HplU6ezglNf1WTMBgUo_fcvDfYd3gBcJqEOuh_AG4Ce3FQXVsyViK4Q1ZRdivTREMhJuQCDwJidIwEUthkW5IKdzCD-Z" width="381px;" /><span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span></div>
</li>
<ul style="margin-bottom: 0pt; margin-top: 0pt;">
<li dir="ltr" style="background-color: transparent; color: black; font-family: Arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: circle; text-decoration: none; vertical-align: baseline;"><div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Confirm in the Operations Log that the import </span><span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: italic; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Status</span><span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> </span><span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">indicates </span><span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: italic; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Done</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><img height="178px;" src="https://lh3.googleusercontent.com/p5zG_FZ5e1HZFKjuRA2FSLWwLwyuw15uyHJDm8v5VsvBHLf45MxYA5jEE0DJIVkD0bWlLfeAaioxkTh2GV6Y2lF19wNAj3TPpBqTuC_DBxhrzY_asEcFgxzb" width="573px;" /><span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span></div>
</li>
</ul>
</ul>
<h2 dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 10pt;">
<span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 17px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Initial phpBB test in the App Engine production environment</span></h2>
<ul style="margin-bottom: 0pt; margin-top: 0pt;">
<li dir="ltr" style="background-color: transparent; color: black; font-family: Arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"><div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Deploy the app (again from the directory containing </span><span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">app.yaml</span><span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">)</span></div>
</li>
</ul>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">appcfg.py --oauth2 update .</span></div>
<ul style="margin-bottom: 0pt; margin-top: 0pt;">
<li dir="ltr" style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"><div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Verify that you can login as the admin using the password you specified during the phpBB installation process. Note not all functionality may be available yet (see next step)</span></div>
</li>
</ul>
<h2 dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 10pt;">
<span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 17px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Replace all uses of </span><span style="background-color: transparent; color: black; font-size: 17px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><span style="font-family: Courier New, Courier, monospace;">preg_replace()</span></span><span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 17px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> with </span><span style="background-color: transparent; color: black; font-size: 17px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><span style="font-family: Courier New, Courier, monospace;">/e</span></span><span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 17px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> (</span><a href="http://www.php.net/manual/en/reference.pcre.pattern.modifiers.php" style="text-decoration: none;"><span style="background-color: transparent; color: #1155cc; font-family: 'Courier New'; font-size: 17px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;">PREG_REPLACE_EVAL</span></a><span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 17px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">)</span></h2>
<ul style="margin-bottom: 0pt; margin-top: 0pt;">
<li dir="ltr" style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"><div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">make_clickable()</span><span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> in </span><span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">includes/functions_content.php </span><span style="font-size: 13px; vertical-align: baseline; white-space: pre-wrap;">(see </span><span style="color: #1155cc; font-size: 13px; vertical-align: baseline; white-space: pre-wrap;"><a href="https://github.com/phpbb/phpbb3/pull/1479">https://github.com/phpbb/phpbb3/pull/1479</a></span><span style="white-space: pre-wrap;">)</span></div>
</li>
</ul>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span></div>
<ul style="margin-bottom: 0pt; margin-top: 0pt;">
<li dir="ltr" style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"><div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> Use </span><span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">array_map</span><span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> instead of </span><span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">preg_replace</span><span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> in </span><span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">includes/acp/acp_*.php</span><span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> (see commit </span><a href="https://github.com/phpbb/phpbb3/commit/67b243cfc53e3f5f8bf6cd2a5eb80df475a6dd4c" style="text-decoration: none;"><span style="background-color: transparent; color: #1155cc; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;">67b243cfc53e3f5f8bf6cd2a5eb80df475a6dd4c</span></a><span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">)</span></div>
</li>
<li dir="ltr" style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"><div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Your homework: find and replace remaining uses of </span><span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">preg_replace()</span><span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> with </span><span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">/e</span><span style="font-size: 13px; white-space: pre-wrap;">, and of course share those changes with the community, preferably by submitting pull requests with your patch to the phpBB committers.</span></div>
</li>
</ul>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<br /></div>
<b style="font-weight: normal;"><span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span></b><br />
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"># 3.0.11 release - Your list of TODOs</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">git grep -l 'preg_replace(\(.\)\(.\).*\2[a-z]*e[a-z]*\1,'</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">includes/acp/acp_bbcodes.php</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">includes/bbcode.php</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">includes/message_parser.php</span></div>
<br />
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">includes/ucp/ucp_pm_options.php</span><span style="background-color: transparent; color: black; font-family: 'Open Sans'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><br /></span></div>
<div>
<span style="font-size: 12.800000190734863px; white-space: pre-wrap;">That's it!</span></div>
</div>
Anonymoushttp://www.blogger.com/profile/04957279964247475771noreply@blogger.com14tag:blogger.com,1999:blog-1399042838376885139.post-30078479012991378872011-11-18T17:34:00.001-08:002011-12-04T11:27:00.521-08:00Migrating from SVN to Git<br />
<span style="font-family: Arial, Helvetica, sans-serif;">Interested in migrating an existing Subversion (SVN) based open source project to git?</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">Here's are my migration steps I went through for my open source projects, which are up on <a href="http://code.google.com/hosting/">Google Code Project hosting</a>:</span><br />
<br />
<ul>
<li><a href="http://code.google.com/gwt-log/" style="background-color: transparent; font-family: Arial, Helvetica, sans-serif;">http://code.google.com/gwt-log/</a></li>
<li><a href="http://code.google.com/gwt-dnd/" style="background-color: transparent; font-family: Arial, Helvetica, sans-serif;">http://code.google.com/gwt-dnd/</a></li>
<li><a href="http://code.google.com/gwt-voices/" style="background-color: transparent; font-family: Arial, Helvetica, sans-serif;">http://code.google.com/gwt-voices/</a></li>
</ul>
<br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span><br />
<span style="background-color: transparent;"><span style="font-family: Arial, Helvetica, sans-serif; font-size: large;">1. Get a complete list of SVN committers</span></span><br />
<span style="background-color: transparent; font-family: 'Courier New', Courier, monospace;">for prj in gwt-log gwt-dnd gwt-voices</span><br />
<span style="font-family: 'Courier New', Courier, monospace;">do</span><br />
<span style="background-color: transparent;"><span style="font-family: 'Courier New', Courier, monospace;"> svn log -q https://$prj.googlecode.com/svn | \</span></span><br />
<span style="background-color: transparent;"><span style="font-family: 'Courier New', Courier, monospace;"> awk -F '|' '/^r/ {sub("^ ", "", $2); sub(" $", "", $2); </span></span><span style="background-color: transparent; font-family: 'Courier New', Courier, monospace;">print $2" = "$2" <"$2">"}' | \</span><br />
<span style="background-color: transparent; font-family: 'Courier New', Courier, monospace;"> sort -u >>~/authors.txt</span><br />
<span style="background-color: transparent; font-family: 'Courier New', Courier, monospace;">done</span><br />
<span style="font-family: 'Courier New', Courier, monospace;"><br /></span><br />
<span style="font-size: large;"><span style="font-family: Arial, Helvetica, sans-serif;"><br /></span></span><br />
<span style="font-size: large;"><span style="font-family: Arial, Helvetica, sans-serif;">2. Update the </span><span style="font-family: 'Courier New', Courier, monospace;">~/<span style="background-color: transparent;">authors.txt</span></span><span style="background-color: transparent; font-family: Arial, Helvetica, sans-serif;"> mapping file</span></span><br />
<span style="background-color: transparent; font-family: 'Courier New', Courier, monospace;">vi ~/authors.txt</span><br />
<div>
<span style="font-family: 'Courier New', Courier, monospace;"><br /></span></div>
<span style="background-color: transparent; font-family: Arial, Helvetica, sans-serif;">The svn username is on the left. The new git username and email are on the right. After modifications, mine looked like this:</span><br />
<span style="font-family: 'Courier New', Courier, monospace;">(no author) = (no author) <(no author)></span><br />
<span style="font-family: 'Courier New', Courier, monospace;">fredsa = Fred Sauer <fredsa@gmail.com></span><br />
<span style="font-family: 'Courier New', Courier, monospace;">fredsa@gmail.com = Fred Sauer <fredsa@gmail.com></span><br />
<span style="font-family: 'Courier New', Courier, monospace;">fredsa@google.com = Fred Sauer <fredsa@google.com></span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: large;"><br /></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: large;">3. Convert your SVN commit history into a local git repository</span><br />
<span style="background-color: transparent; font-family: 'Courier New', Courier, monospace;"># wiki</span><br />
<span style="background-color: transparent;"><span style="font-family: 'Courier New', Courier, monospace;">cd</span></span><br />
<span style="font-family: 'Courier New', Courier, monospace;">for prj in gwt-log gwt-dnd gwt-voices</span><br />
<span style="font-family: 'Courier New', Courier, monospace;">do</span><br />
<span style="font-family: 'Courier New', Courier, monospace;"> git svn clone https://$prj.googlecode.com/svn/wiki --no-minimize-url -A ~/authors.txt $prj.wiki</span><br />
<span style="font-family: 'Courier New', Courier, monospace;">done</span><br />
<span style="font-family: 'Courier New', Courier, monospace;"><br /></span><br />
<span style="font-family: 'Courier New', Courier, monospace;"># project source</span><br />
<span style="font-family: 'Courier New', Courier, monospace;">cd</span><br />
<span style="font-family: 'Courier New', Courier, monospace;">for prj in gwt-log gwt-dnd gwt-voices</span><br />
<span style="font-family: 'Courier New', Courier, monospace;">do</span><br />
<span style="font-family: 'Courier New', Courier, monospace;"> git svn clone https://$prj.googlecode.com/svn \</span><br />
<span style="font-family: 'Courier New', Courier, monospace;"> --stdlayout \</span><br />
<span style="font-family: 'Courier New', Courier, monospace;"> --ignore-paths=^wiki \</span><br />
<span style="font-family: 'Courier New', Courier, monospace;"> -A ~/authors.txt \</span><br />
<span style="font-family: 'Courier New', Courier, monospace;"> $prj</span><br />
<span style="font-family: 'Courier New', Courier, monospace;"> cd ~/$prj</span><br />
<span style="font-family: 'Courier New', Courier, monospace;"><br /></span><br />
<span style="font-family: 'Courier New', Courier, monospace;"> git svn show-ignore > .gitignore</span><br />
<span style="font-family: 'Courier New', Courier, monospace;"> git add .gitignore</span><br />
<span style="font-family: 'Courier New', Courier, monospace;"> git commit -m 'Convert svn:ignore properties to .gitignore.'</span><br />
<span style="font-family: 'Courier New', Courier, monospace;"><br /></span><br />
<span style="font-family: 'Courier New', Courier, monospace;"> # replace refs/remotes/tags/... branches with annotated tags</span><br />
<span style="font-family: 'Courier New', Courier, monospace;"> #</span><br />
<span style="font-family: 'Courier New', Courier, monospace;"> git for-each-ref \</span><br />
<span style="font-family: 'Courier New', Courier, monospace;"> --format='%(refname)' \</span><br />
<span style="font-family: 'Courier New', Courier, monospace;"> refs/remotes/tags/ | \</span><br />
<span style="font-family: 'Courier New', Courier, monospace;"> cut -d / -f 4 | \</span><br />
<span style="font-family: 'Courier New', Courier, monospace;"> while read ref</span><br />
<span style="font-family: 'Courier New', Courier, monospace;"> do</span><br />
<span style="font-family: 'Courier New', Courier, monospace;"> git tag -a \</span><br />
<span style="font-family: 'Courier New', Courier, monospace;"> -m "git-svn conversion" \</span><br />
<span style="font-family: 'Courier New', Courier, monospace;"> "$ref" "refs/remotes/tags/$ref";</span><br />
<span style="font-family: 'Courier New', Courier, monospace;"> git branch -D -r "tags/$ref";</span><br />
<span style="font-family: 'Courier New', Courier, monospace;"> done</span><br />
<span style="font-family: 'Courier New', Courier, monospace;"><br /></span><br />
<span style="font-family: 'Courier New', Courier, monospace;"> # mirror remote svn branches with local branches,</span><br />
<span style="font-family: 'Courier New', Courier, monospace;"> # so we can push those up to the new git repository</span><br />
<span style="font-family: 'Courier New', Courier, monospace;"> #</span><br />
<span style="font-family: 'Courier New', Courier, monospace;"> git for-each-ref \</span><br />
<span style="font-family: 'Courier New', Courier, monospace;"> --format='%(refname)' \</span><br />
<span style="font-family: 'Courier New', Courier, monospace;"> refs/remotes/ |</span><br />
<span style="font-family: 'Courier New', Courier, monospace;"> cut -d / -f 3 | \</span><br />
<span style="font-family: 'Courier New', Courier, monospace;"> while read ref</span><br />
<span style="font-family: 'Courier New', Courier, monospace;"> do</span><br />
<span style="font-family: 'Courier New', Courier, monospace;"> git branch "$ref" "refs/remotes/$ref";</span><br />
<span style="font-family: 'Courier New', Courier, monospace;"> done</span><br />
<span style="font-family: 'Courier New', Courier, monospace;"><br /></span><br />
<span style="font-family: 'Courier New', Courier, monospace;"> # drop svn trunk branch as we're divorcing ourselves from svn</span><br />
<span style="font-family: 'Courier New', Courier, monospace;"> git branch -d trunk</span><br />
<span style="font-family: 'Courier New', Courier, monospace;">done</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: large;">4. Validate the local git repository</span><br />
<span style="background-color: transparent; font-family: 'Courier New', Courier, monospace;">git branch -va</span><br />
<span style="font-family: 'Courier New', Courier, monospace;">git tag -l</span><br />
<span style="font-family: 'Courier New', Courier, monospace;">gitk -a</span><br />
<span style="font-family: 'Courier New', Courier, monospace;">...</span><br />
<div>
<span style="font-family: 'Courier New', Courier, monospace;"><br /></span></div>
<br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: large;">5. Flip the switch</span><br />
<span style="background-color: transparent; font-family: Arial, Helvetica, sans-serif;">Go to http://code.google.com/p/$prj/adminSource and switch each project from svn to git. The SVN repositories have now been hidden and your project has new, empty git repositories.</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: large;">6. Push your git changes</span><br />
<span style="background-color: transparent; font-family: Arial, Helvetica, sans-serif;">Push your new git commit history into the empty git repositories.</span><br />
<span style="background-color: transparent;"><span style="font-family: 'Courier New', Courier, monospace;"># wiki</span></span><br />
<span style="font-family: 'Courier New', Courier, monospace;">for prj in gwt-log gwt-dnd gwt-voices</span><br />
<span style="font-family: 'Courier New', Courier, monospace;">do</span><br />
<span style="font-family: 'Courier New', Courier, monospace;"> cd ~/$prj.wiki</span><br />
<span style="font-family: 'Courier New', Courier, monospace;"> git push --all https://code.google.com/p/$prj.wiki/</span><br />
<span style="font-family: 'Courier New', Courier, monospace;">done</span><br />
<span style="font-family: 'Courier New', Courier, monospace;"><br /></span><br />
<span style="font-family: 'Courier New', Courier, monospace;"># project source</span><br />
<span style="font-family: 'Courier New', Courier, monospace;">cd</span><br />
<span style="font-family: 'Courier New', Courier, monospace;">for prj in gwt-log gwt-dnd gwt-voices</span><br />
<span style="font-family: 'Courier New', Courier, monospace;">do</span><br />
<span style="font-family: 'Courier New', Courier, monospace;"> cd ~/$prj</span><br />
<span style="font-family: 'Courier New', Courier, monospace;"> # push commit history and branches</span><br />
<span style="font-family: 'Courier New', Courier, monospace;"> git push --all https://code.google.com/p/$prj/</span><br />
<span style="font-family: 'Courier New', Courier, monospace;"><br /></span><br />
<span style="font-family: 'Courier New', Courier, monospace;"> # push our local tags as well</span><br />
<span style="font-family: 'Courier New', Courier, monospace;"> git push --tags https://code.google.com/p/$prj/</span><br />
<span style="font-family: 'Courier New', Courier, monospace;">done</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: large;"><br /></span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">That's it. You're done.</span><br />
<div>
<br /></div>Anonymoushttp://www.blogger.com/profile/04957279964247475771noreply@blogger.com0tag:blogger.com,1999:blog-1399042838376885139.post-53218389690470293402011-10-27T10:56:00.000-07:002011-10-27T10:59:06.246-07:00Google Developer Day 2011 - Prague, Czech Republic<div style="text-align: left;">
<b style="font-family: arial; font-size: x-large;">App Engine Overview & Update</b></div>
<div style="text-align: center;">
<div style="text-align: left;">
<span style="font-size: large;"><iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.youtube.com/embed/RIA6MuO9i2I?feature=player_embedded' frameborder='0'></iframe></span></div>
</div>
<div style="text-align: center;">
<div style="font-family: Times; text-align: -webkit-auto;">
</div>
</div>
<div style="font-family: arial; text-align: center;">
<div style="text-align: left;">
<span style="font-size: large;"><br /></span></div>
<div style="text-align: left;">
<span style="font-size: large;"><br /></span></div>
</div>
<div style="text-align: center;">
<div style="text-align: left;">
<b style="font-family: arial;"><span style="font-size: large;">Building Kick-Ass Games in the Cloud</span></b></div>
</div>
<div class="separator" style="clear: both; text-align: left;">
<span style="font-size: large;"><iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.youtube.com/embed/hP7hFdjypo0?feature=player_embedded' frameborder='0'></iframe></span></div>
<div style="text-align: center;">
<div style="text-align: left;">
<b style="font-family: arial;"><span style="font-size: large;"><br /></span></b></div>
<div style="text-align: left;">
<b style="font-family: arial;"><span style="font-size: large;"><br /></span></b></div>
</div>
<div style="text-align: center;">
<div style="text-align: left;">
<b style="font-family: arial;"><span style="font-size: large;">App Engine Developer Experience</span></b></div>
</div>
<div class="separator" style="clear: both; text-align: left;">
<span style="font-size: large;"><iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.youtube.com/embed/4k2k3-Bt8ew?feature=player_embedded' frameborder='0'></iframe></span></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: arial; font-size: large;"><b><br /></b></span></div>Anonymoushttp://www.blogger.com/profile/04957279964247475771noreply@blogger.com0Prague, Czech Republic50.0878114 14.420459849.9248044 14.1046028 50.2508184 14.736316799999999tag:blogger.com,1999:blog-1399042838376885139.post-2380716530363024022009-10-19T13:27:00.000-07:002009-10-19T13:57:17.097-07:00SF JUG - GWT Can Help You Create Amazing Web Apps<div>Despite a slight cold (hope that wasn't too annoying for everyone), I really enjoyed engaging with everyone who braved the weather to attend last week's <a href="http://www.sfjava.org/">San Francisco JUG</a> to see my talk <a href="http://www.sfjava.org/calendar/11219017/?eventId=11219017&action=detail">GWT Can Help You Create Amazing Web Apps</a>.</div><br />Slides <a href="http://www.slideshare.net/fredsa/sf-jug-gwt-can-help-you-create-amazing-apps-20091013">are up on slideshare</a>:<div><div style="width:425px;text-align:left" id="__ss_2224656"><br /><object style="margin:0px" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=sfjugoct132009-gwtcanhelpyoucreateamazingapps-091014181638-phpapp01&stripped_title=sf-jug-gwt-can-help-you-create-amazing-apps-20091013"><param name="allowFullScreen" value="true"><param name="allowScriptAccess" value="always"><embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=sfjugoct132009-gwtcanhelpyoucreateamazingapps-091014181638-phpapp01&stripped_title=sf-jug-gwt-can-help-you-create-amazing-apps-20091013" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object><div style="font-size:11px;font-family:tahoma,arial;height:26px;padding-top:2px;"><span class="Apple-style-span" style="font-family:Georgia, serif;font-size:130%;"><span class="Apple-style-span" style="font-size: 16px;"><span class="Apple-style-span" style="font-family:tahoma, arial;font-size:100%;"><span class="Apple-style-span" style="font-size: 11px;"><br /></span></span></span></span></div></div><div>And the presentation is <a href="http://www.youtube.com/watch?v=T0X9BcBd-I0">up on YouTube</a>:<br /><object width="560" height="340"><param name="movie" value="http://www.youtube.com/v/T0X9BcBd-I0&hl=en&fs=1&"><param name="allowFullScreen" value="true"><param name="allowscriptaccess" value="always"><embed src="http://www.youtube.com/v/T0X9BcBd-I0&hl=en&fs=1&" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="560" height="340"></embed></object></div></div>Anonymoushttp://www.blogger.com/profile/04957279964247475771noreply@blogger.com3tag:blogger.com,1999:blog-1399042838376885139.post-61106072427038090112009-10-04T11:24:00.000-07:002009-10-04T11:26:02.454-07:00Just presented at <a href="http://www.siliconvalley-codecamp.com/">SV Code Camp 09</a>. Here are my slides:<br />
<div style="width:425px;text-align:left" id="__ss_2122372"><a style="font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;" href="http://www.slideshare.net/fredsa/gwt-introduction-and-overview-sv-code-camp-09" title="GWT Introduction and Overview - SV Code Camp 09">GWT Introduction and Overview - SV Code Camp 09</a><object style="margin:0px" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=svcodecampoct42009-gwtintroductionoverview-091004131719-phpapp02&stripped_title=gwt-introduction-and-overview-sv-code-camp-09" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=svcodecampoct42009-gwtintroductionoverview-091004131719-phpapp02&stripped_title=gwt-introduction-and-overview-sv-code-camp-09" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object><div style="font-size:11px;font-family:tahoma,arial;height:26px;padding-top:2px;">View more <a style="text-decoration:underline;" href="http://www.slideshare.net/">presentations</a> from <a style="text-decoration:underline;" href="http://www.slideshare.net/fredsa">Fred Sauer</a>.</div></div>Anonymoushttp://www.blogger.com/profile/04957279964247475771noreply@blogger.com0tag:blogger.com,1999:blog-1399042838376885139.post-8753077645373410062009-09-02T21:25:00.000-07:002009-09-02T21:25:20.758-07:00GWT for the Enterprise Developer @ JBoss World Chicago 2009I had a great time presenting at <a href="http://www.jbossworld.com/">JBoss World 2009</a> in Chicago today and had an opportunity to talk to several people using GWT. I hope to speak many more over the next two days. Make sure to tap me on my shoulder if you want to talk shop. Also, do come to tomorrow's GWT Campground session from 12-1pm (Thursday, Sep 3 2009).<br />
<br />
Here are today's slides:<br />
<br />
<div id="__ss_1945324" style="text-align: left; width: 425px;"><a href="http://www.slideshare.net/fredsa/google-web-toolkit-for-the-enterprise-developer-jboss-world-2009-1945324" style="display: block; font: 14px Helvetica,Arial,Sans-serif; margin: 12px 0 3px 0; text-decoration: underline;" title="Google Web Toolkit for the Enterprise Developer - JBoss World 2009"></a><object height="355" style="margin: 0px;" width="425"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=final-jbwsept2009-gwtfortheenterprisedeveloper-090902230358-phpapp02&stripped_title=google-web-toolkit-for-the-enterprise-developer-jboss-world-2009-1945324" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=final-jbwsept2009-gwtfortheenterprisedeveloper-090902230358-phpapp02&stripped_title=google-web-toolkit-for-the-enterprise-developer-jboss-world-2009-1945324" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object><br />
<div style="font-family: tahoma,arial; font-size: 11px; height: 26px; padding-top: 2px;"></div></div>Anonymoushttp://www.blogger.com/profile/04957279964247475771noreply@blogger.com2tag:blogger.com,1999:blog-1399042838376885139.post-15273380309210310642009-07-28T17:16:00.000-07:002009-07-28T17:33:05.937-07:00Google Developer Day (GDD) China + Japan presentations availableThe June 2009 <a href="http://code.google.com/events/developerday/2009/">Google Developer Day</a> presentations and slides are up!<br />
<br />
<div>Many of you have asked for copies of my slides and links to the YouTube videos. Here you go.</div><br />
<br />
<span style="font-size: 24px; font-weight: bold;"><br />
<span style="font-size: x-large;"> Building Complex, Scalable Applications on Google App Engine</span></span><br />
<table><tbody>
<tr><td><br />
<object height="344" width="425"><param name="movie" value="http://www.youtube.com/v/xbagiLG7qRw&hl=en&fs=1&"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/xbagiLG7qRw&hl=en&fs=1&" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object><br />
<div><b><span style="font-size: x-large;">China, June </span></b><super><b><span style="font-size: x-large;">5th</span></b></super><b><span style="font-size: x-large;">, 2009</span></b></div><a href="http://dl.google.com/gdd/2009/intl/cn/GDD2009-App-Engine_Building-scalable-complex-apps-on-App-Engine.pdf"><span style="font-size: x-large;">Download slides</span></a></td></tr>
<tr><td><br />
<object height="344" width="425"><param name="movie" value="http://www.youtube.com/v/kWEE_L3Iqao&hl=en&fs=1&"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/kWEE_L3Iqao&hl=en&fs=1&" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object><br />
<div><b><span style="font-size: x-large;">Japan, June </span></b><super><b><span style="font-size: x-large;">9th</span></b></super><b><span style="font-size: x-large;">, 2009</span></b></div><a href="http://dl.google.com/gdd/2009/intl/ja/pres/CT1.pdf"><span style="font-size: x-large;">Download slides</span></a></td></tr>
</tbody></table><br />
<br />
Thanks to Brett Slatkin's for his <a href="http://code.google.com/events/io/sessions/BuildingScalableComplexApps.html">I/O talk</a>.<br />
<br />
<br />
<br />
<hr /><br />
<span style="font-size: 24px; font-weight: bold;">From Spark Plug to Drive Train: Life of an App Engine Request</span><br />
<object height="344" width="425"><param name="movie" value="http://www.youtube.com/v/LSgOf4lUMdw&hl=en&fs=1&"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/LSgOf4lUMdw&hl=en&fs=1&" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object><br />
<b><span style="font-size: x-large;">China, June </span></b><super><b><span style="font-size: x-large;">5th</span></b></super><b><span style="font-size: x-large;">, 2009</span></b><br />
<div><b><span style="font-weight: normal;"><a href="http://dl.google.com/gdd/2009/intl/cn/GDD2009-App-Engine_From-Spark-Plug-to-Drive-Train-Life-of.pdf"><span style="font-size: x-large;">Download slides</span></a></span></b></div><br />
<b><span style="font-weight: normal;">Thanks to Alon Levi for his <a href="http://code.google.com/events/io/sessions/FromSparkPlugToDriveTrain.html">I/O talk</a>.</span></b><br />
<br />
<br />
<br />
<br />
<hr /><div><div><span style="font-size: 24px; font-weight: bold;">Google Web Toolkit Architecture: Best Practices For Architecting Your GWT App</span></div></div><div><div></div></div><object height="344" width="425"><param name="movie" value="http://www.youtube.com/v/QIyQzOnKETo&hl=en&fs=1&"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/QIyQzOnKETo&hl=en&fs=1&" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object><br />
<b><span style="font-size: x-large;">China, June </span></b><super><b><span style="font-size: x-large;">5th</span></b></super><b><span style="font-size: x-large;">, 2009</span></b><br />
<b><span style="font-weight: normal;"><a href="http://dl.google.com/gdd/2009/intl/cn/GDD2009-GWT_GWT-Architecture-Best-Practices.pdf"><span style="font-size: x-large;">Download slides</span></a></span></b><br />
<b><br />
</b><br />
<br />
<object height="344" width="425"><param name="movie" value="http://www.youtube.com/v/evne5iQb9Jo&hl=en&fs=1&"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/evne5iQb9Jo&hl=en&fs=1&" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object><br />
<b><span style="font-size: x-large;">Japan, June </span></b><super><b><span style="font-size: x-large;">9th</span></b></super><b><span style="font-size: x-large;">, 2009</span></b><br />
<b><span style="font-weight: normal;"><a href="http://dl.google.com/gdd/2009/intl/ja/pres/CT3.pdf"><span style="font-size: x-large;">Download slides</span></a></span></b><br />
<b><br />
</b><br />
<b><span style="font-weight: normal;">Thank to Ray Ryan's original <a href="http://code.google.com/events/io/sessions/GoogleWebToolkitBestPractices.html">I/O talk</a></span></b>Anonymoushttp://www.blogger.com/profile/04957279964247475771noreply@blogger.com1tag:blogger.com,1999:blog-1399042838376885139.post-74595109998366777172009-06-29T17:10:00.000-07:002009-06-29T17:10:26.620-07:00GWT Overview And Feature Preview - SV Web JUG - June 16 2009 up on YouTubeI previously <a href="http://fredsa.allen-sauer.com/2009/06/gwt-overview-and-feature-preview-sv-web.html">posted the slides</a> from my recent presentation <a href="http://www.meetup.com/sv-web-jug/calendar/10012641/">GWT Overview And Feature Preview</a> at <a href="https://sv-web-jug.dev.java.net/">SV Web JUG</a> / <a href="http://sv-gtug.org/">GTUG</a> on June 16 2009.<br />
<br />
Thanks to <a href="http://wiki.java.net/bin/view/People/KevinNilson">Kevin</a> the video is now live as well:<br><br />
<object height="340" width="560"><param name="movie" value="http://www.youtube.com/v/8qoiDJiXvfg&hl=en&fs=1&"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/8qoiDJiXvfg&hl=en&fs=1&" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="560" height="340"></embed></object>Anonymoushttp://www.blogger.com/profile/04957279964247475771noreply@blogger.com1tag:blogger.com,1999:blog-1399042838376885139.post-74861540976540922962009-06-20T23:09:00.001-07:002009-06-29T17:01:18.957-07:00GWT Overview And Feature Preview - SV Web JUG - June 16 2009Some of you have asked for the slides from my recent presentation. Here you go:<br />
<a href="http://www.slideshare.net/fredsa/gwt-overview-and-feature-preview-sv-web-jug-june-16-2009?type=presentation" style="display: block; font: 14px Helvetica,Arial,Sans-serif; margin: 12px 0 3px 0; text-decoration: underline;" title="GWT Overview And Feature Preview - SV Web JUG - June 16 2009">GWT Overview And Feature Preview - SV Web JUG - June 16 2009</a><br />
<div id="__ss_1614840" style="text-align: left; width: 425px;"><object height="355" style="margin: 0px;" width="425"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=gwtoverviewandfeaturepreview-svwebjug-june162009-090621003200-phpapp02&stripped_title=gwt-overview-and-feature-preview-sv-web-jug-june-16-2009"><param name="allowFullScreen" value="true"><param name="allowScriptAccess" value="always"><embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=gwtoverviewandfeaturepreview-svwebjug-june162009-090621003200-phpapp02&stripped_title=gwt-overview-and-feature-preview-sv-web-jug-june-16-2009" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object><br />
<div style="font-family: tahoma,arial; font-size: 11px; height: 26px; padding-top: 2px;"></div></div>Anonymoushttp://www.blogger.com/profile/04957279964247475771noreply@blogger.com0tag:blogger.com,1999:blog-1399042838376885139.post-55033194508748079522009-04-29T21:10:00.000-07:002009-04-29T21:10:39.673-07:00What the Google Plugin for Eclipse can do for youI don't know what I'd do without <a href="http://eclipse.org/">Eclipse</a>. Its very powerful, completely open source and helps me be extremely productive so I can focus most of my efforts on actually writing my app. Eclipse effortlessly and tirelessly refactors my code till the wee hours of the night. It will inline code fragments, create local variables, extract methods/classes/interfaces, change method signatures, rename identifiers and much, much more. Each of these is just a keyboard shortcut away.<br />
<br />
One of best features of Eclipse is its open plugin architecture allowing other developers to write new functionality into the platform which works seamlessly with everything else. In addition to my usual favorites <a href="http://subclipse.tigris.org/">Subclipse</a>, <a href="http://findbugs.sourceforge.net/manual/eclipse.html">Findbugs</a> and <a href="http://eclipse-cs.sourceforge.net/">Checkstyle</a>, I of course have converted all my <a href="http://code.google.com/webtoolkit/">GWT</a> and <a href="http://code.google.com/appengine">Google App Engine</a> projects to use the <a href="http://code.google.com/eclipse">Google Plugin for Eclipse</a>.<br />
<br />
The Google Plugin for Eclipse downloads and configures both GWT and App Engine SDKs for you, adds a wizard to create new projects and provides great GWT compiler configuration dialogs. Then there's easy launching of GWT Hosted Mode and the App Engine local development server and even JSNI syntax highlighting and formatting.<br />
<br />
I enjoy regularly discovering new functionality in Eclipse. My favorite short-cut key is CTRL/META-3. You'll have to try it (Eclipse 3.4 and above) and tell me if you end up using it a lot. It's also fun to discover new Quick Fixes (CTRL/META-1) and refactoring capabilities (highlight a relevant piece of code and right/META-click to learn the shortcuts).<br />
<br />
I just uncovered a little gem in the Google Plugin for Eclipse. I was creating a <a href="http://googlewebtoolkit.blogspot.com/2008/08/getting-to-really-know-gwt-part-2.html">JavaScript Overlay Type</a> when I accidentally hit CTRL/META-SPACE (=code completion). Eclipse offered to write the JSNI for me. How cool is that?<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhwkxhDPz2GUu-nr8qE5XgMrygNz9tlH4L7Z47gsB77yix4WdGijLJ2GevkVPf9wK7GKtGNXx3cuFXmJ2NYPaFngUOlFWNJMsK04qRXenFp5XIXk5gUU4h66I9LN671V6PfV1lIfTEUvHDw/s1600-h/Picture+15.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhwkxhDPz2GUu-nr8qE5XgMrygNz9tlH4L7Z47gsB77yix4WdGijLJ2GevkVPf9wK7GKtGNXx3cuFXmJ2NYPaFngUOlFWNJMsK04qRXenFp5XIXk5gUU4h66I9LN671V6PfV1lIfTEUvHDw/s400/Picture+15.png" /></a></div><br />
<br />
Here's another neat feature of the plugin. Right/META-click on the missing jar warnings and have the plugin fix the problem for you.<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6SKcS5LPbfmf5mvnvCVDQaEEethjkbRs8pQKZSP6d5q5AUSr_m_WsVra-N_1H3XoAJRIB_NQEU-vK1LBfbpnIodlGjNcEajcEB_rH2z41C6BftiYNEJRIdWnHhfI3WSadZGciqUm4GkIv/s1600-h/Picture+16.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6SKcS5LPbfmf5mvnvCVDQaEEethjkbRs8pQKZSP6d5q5AUSr_m_WsVra-N_1H3XoAJRIB_NQEU-vK1LBfbpnIodlGjNcEajcEB_rH2z41C6BftiYNEJRIdWnHhfI3WSadZGciqUm4GkIv/s400/Picture+16.png" /></a></div><br />
Of course your can right/META-click on your project on a specific <span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">*.gwt.xml</span> file in your project to launch your app.<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjsbEnfKs4o_uA9kot2Txxl-ReH2boaW_Wrf9Hlj-HqyV1zuBXeRPWyUkdA2ITX8klH80c7yUTCPxb4Ak-REFYQdd26dVkBLeGLniHhtMREkDD1aJMPUd3EwbLBJOOx9F2R2dYBs9FYe1PQ/s1600-h/Picture+17.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjsbEnfKs4o_uA9kot2Txxl-ReH2boaW_Wrf9Hlj-HqyV1zuBXeRPWyUkdA2ITX8klH80c7yUTCPxb4Ak-REFYQdd26dVkBLeGLniHhtMREkDD1aJMPUd3EwbLBJOOx9F2R2dYBs9FYe1PQ/s400/Picture+17.png" /></a></div><br />
<br />
If you've uncovered a feature worth talking about, please leave a comment.Anonymoushttp://www.blogger.com/profile/04957279964247475771noreply@blogger.com1tag:blogger.com,1999:blog-1399042838376885139.post-15997768000737929472009-04-10T12:23:00.000-07:002009-04-11T00:23:46.199-07:00Getting gwt-log to 'just work' on Google App EngineI had a few key goals in mind when I set out on my <a href="http://code.google.com/p/gwt-log/">gwt-log</a> project:<br />
<ul><li>Make it extremely easy to include debug logging in GWT client code<br />
</li>
<pre>Log.debug("This is a 'DEBUG' test message");
Log.info("This is a 'INFO' test message");
Log.warn("This is a 'WARN' test message");
Log.error("This is a 'ERROR' test message");
Log.fatal("This is a 'FATAL' test message");
</pre><li>Ensure there's zero overhead for production deployments by way of GWT compiler's dead-code elimination</li>
</ul><br />
Other goals were added along the way:<br />
<ul><li>Provide wide variety of logging destination for client code; today there's console logging, stdout, GWT hosted mode error window, a floating <span style="font-family: 'Courier New', Courier, monospace;">DIV</span> and ...</li>
</ul><ul><li>Allow client side log message to be seen on the server; this is particularly useful for mobile web app development (Android, iPhone, etc.); this is provided by the remote logger which utilizes GWT RPC to relay client side messages to the server</li>
</ul><ul><li>Provide custom log message formats; a custom formatter is assembled at compile time thanks to GWT generators</li>
</ul><ul><li>Allow the same logging statement to be used on both the client and server so that domain model objects can include logging which produce useful results on both tiers<br />
</li>
</ul><br />
I'm a big fan of <a href="http://logging.apache.org/log4j/">Apache log4j</a> so with this last requirement I wanted log messages to use log4j logging when the log4j implementation jar is present on the server. Not everyone loves log4j as much as I do so I wanted to provide <span style="font-family: 'Courier New', Courier, monospace;">java.util.logging</span> support as a fallback.<br />
<br />
Since gwt-log has supported <span style="font-family: 'Courier New';">java.util.logging</span> for quite some time I expected it to just work on <a href="http://code.google.com/appengine/">Google App Engine</a>. Unfortunately, there was a slight snag, which is that <span style="font-family: 'Courier New';">java.util.logging.ConsoleHandler</span> is not listed in the <a href="http://code.google.com/appengine/docs/java/jrewhitelist.html">JRE Class Whitelist</a>. The <a href="http://code.google.com/eclipse/">Google Plugin for Eclipse</a> does warn me at compile time which is very nice:<br />
<pre class="error">java.util.logging.ConsoleHandler is not supported by Google App Engine's Java runtime environment
</pre><br />
<br />
If I were to ignore this warning, and deploy my app to the cloud anyway I would end up with an exception in the App Engine console Logs view for my app id:<br />
<br />
<pre class="error">javax.servlet.ServletContext log: Exception while dispatching incoming RPC call
com.google.gwt.user.server.rpc.UnexpectedException: Service method '......' threw an unexpected exception: java.lang.NoClassDefFoundError: java.util.logging.ConsoleHandler is a restricted class. Please see the Google App Engine developer's guide for more details.
</pre><br />
<br />
The <a href="http://code.google.com/p/gwt-log/source/detail?r=307">fix</a> was straight forward enough: just get rid of the offending lines of code which some in the community <a href="http://groups.google.com/group/gwt-log/search?group=gwt-log&q=consolehandler&qt_g=Search+this+group">disliked</a> anyway.<br />
<br />
With that fix in place, gwt-log is humming along again with both client side and server side messages appearing in the App Engine console:<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhGhipf41LE8cYUNePsu8ghRGZY-fU7-8MopB_Dufi2C2pdq5rtTy8UT2uERIMdJDfdESeoi3eM7BCwXHFWH3PjSpfhJw9HyS8gqlunzxA-JsD6cCNrI4-vE5k3J6k4IakhHlsMa9Qg5udn/s1600-h/gwt-log+RemoteLogger+on+App+Engine.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="124" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhGhipf41LE8cYUNePsu8ghRGZY-fU7-8MopB_Dufi2C2pdq5rtTy8UT2uERIMdJDfdESeoi3eM7BCwXHFWH3PjSpfhJw9HyS8gqlunzxA-JsD6cCNrI4-vE5k3J6k4IakhHlsMa9Qg5udn/s400/gwt-log+RemoteLogger+on+App+Engine.png" width="400" /></a></div><br />
<br />
To learn more about gwt-log visit the <a href="http://code.google.com/p/gwt-log/">gwt-log home page</a> or the <a href="http://code.google.com/p/gwt-log/wiki/GettingStarted">getting started wiki</a>.<br />
<br />
<br />
Happy logging.Anonymoushttp://www.blogger.com/profile/04957279964247475771noreply@blogger.com1tag:blogger.com,1999:blog-1399042838376885139.post-87639905102928552552009-04-09T17:37:00.000-07:002009-04-11T00:12:29.135-07:001st look at App Engine using JDO persistence capable classes over GWT RPC<div>After the <a href="http://google-code-updates.blogspot.com/2009/04/new-features-for-app-engine-announced.html">exciting launch</a> of App Engine for Java at <a href="http://code.google.com/campfire/">Campfire One</a>, I wanted to create a simple <a href="http://code.google.com/webtoolkit/">GWT</a> + <a href="http://code.google.com/appengine/">App Engine</a> app using JDO persistence capable POJOs over RPC.<br />
</div><br />
<div>Getting started using the new <a href="http://code.google.com/eclipse/">Google Plugin for Eclipse</a> was easy. The plugin even downloads both the GWT and App Engine SDKs for you. Things couldn't be easier.<br />
</div><br />
<div><ul><li>In Eclipse, select 'File -> New Web Application Project' or just click on the new 'g' icon</li>
<li>Enter a project name (<span style="font-family: 'Courier New', Courier, monospace;">MyApp</span>) and a default package (<span style="font-family: 'Courier New', Courier, monospace;">fredsa.myapp</span>); click OK</li>
</ul></div><br />
<div>This give you a simple GWT/App Engine stub application to modify further. Included is a <span style="font-family: 'Courier New', Courier, monospace;">GreetingService </span>which allows the user to post messages to the server via RPC and receive a simple reply.</div><br />
<div>I want to modify the application to save the messages to the datastore. I need to introduce a data model class. <a href="http://code.google.com/appengine/docs/java/gettingstarted/usingdatastore.html">Using standard JDO annotations</a> is an easy way to turn a POJO into a class that can be easily persisted to the App Engine data store. Here's my new <span style="font-family: 'Courier New', Courier, monospace;">Message</span> class:<br />
<br />
<pre>package fredsa.myapp.client;
import com.google.appengine.api.datastore.Key;
import java.io.Serializable;
import javax.jdo.annotations.PersistenceCapable;
import javax.jdo.annotations.Persistent;
import javax.jdo.annotations.PrimaryKey;
@PersistenceCapable
public class Message implements Serializable {
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
Key id;
@Persistent
private String author;
@Persistent
private String message;
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
}
</pre></div><br />
<div>I rewrite the default <span style="font-family: 'Courier New', Courier, monospace;">GreetingService </span>interface (and also <span style="font-family: 'Courier New', Courier, monospace;">GreetingServiceAsync </span>and <span style="font-family: 'Courier New', Courier, monospace;">GreetingServiceImpl</span>) to take my new <span style="font-family: 'Courier New', Courier, monospace;">Message </span>class as an argument rather than a plain old <span style="font-family: 'Courier New', Courier, monospace;">String</span>. Everything compiles nicely in the IDE so I launch hosted mode.</div><br />
<div><ul><li>Right-click 'MyApp' project and select 'Run As' and then the new 'Web Application' option provided by the plugin</li>
</ul></div><br />
<div>Unfortunately hosted mode reports an error:<br />
<br />
<pre class="error">[ERROR] Errors in 'file:/C:/fred/MyApp/src/fredsa/myapp/client/Message.java'
[ERROR] Line 3: The import com.google.appengine cannot be resolved
[ERROR] Line 16: Key cannot be resolved to a type
</pre></div><br />
<div>What's up with that? Everything compiled just fine in the IDE?<br />
</div><br />
<div>Missing source files is a common stumbling block. What we've run into here is that the GWT compiler cannot find the <span style="font-weight: bold;">source</span> code for the <span style="font-family: 'Courier New', Courier, monospace;">com.google.appengine.Key</span> class, something Sriram Narayan alluded to in his <a href="http://blog.sriramnarayan.com/2009/04/gwt-and-jdo-on-java-appengine.html">recent post</a>.<br />
</div><br />
<div>My IDE was happy because all it needs is a <span style="font-family: 'Courier New', Courier, monospace;">*.class</span> file. GWT, however, needs access to a suitable <span style="font-family: 'Courier New', Courier, monospace;">*.java</span> file.<br />
</div><br />
<div>Usually the original source is all the GWT compiler needs. In some cases, such as the <a href="http://code.google.com/webtoolkit/doc/1.6/RefJreEmulation.html">emulated JRE classes</a>, you can provide the GWT compiler with alternative implementations so that you can do things in a browser / JavaScript friendly way. In other cases, you may not need a full implementation in client code, and a stub will suffice.</div><br />
<div>Since I'm not doing anything with the <span style="font-family: 'courier new';">Key </span>class on the client I'm going to stub it out. This actually requires a few steps and involves the <span style="font-family: 'Courier New', Courier, monospace;">super-src</span> feature of <a href="http://code.google.com/webtoolkit/doc/1.6/DevGuideOrganizingProjects.html#DevGuideModuleXml">GWT XML module files</a>. Here goes:</div><br />
<div><ul><li>In my <span style="font-family: 'Courier New', Courier, monospace;">src</span> directory create a new Java package <span style="font-family: 'Courier New', Courier, monospace;">fredsa.appengine.workaround</span></li>
<li>Right-click this package and create a new file called <span style="font-family: 'Courier New', Courier, monospace;">Datastore.gwt.xml</span> with the following contents:</li>
</ul><pre><?xml version="1.0" encoding="UTF-8"?>
<module>
<super-source path="translatable" />
</module>
</pre></div><br />
<div><ul><li>Right-click on 'MyApp' to create a new directory called <span style="font-family: 'Courier New', Courier, monospace;">super</span>; note this is a regular directory and specifically not a source directory so the icons for <span style="font-family: 'Courier New', Courier, monospace;">src</span> and <span style="font-family: 'Courier New', Courier, monospace;">super</span> will look different in the Eclipse Package Explorer</li>
<li>In the <span style="font-family: 'Courier New', Courier, monospace;">super</span> directory create a file <span style="font-family: 'Courier New', Courier, monospace;">fredsa/appengine/workaround/translatable/com/google/appengine/api/datastore/Key.java</span> with the following contents:</li>
</ul><br />
<pre>package com.google.appengine.api.datastore;
import java.io.Serializable;
public class Key implements Serializable, Comparable {
private String appId;
private long id;
private Key() {
}
public int compareTo(Object o) {
throw new UnsupportedOperationException();
}
}
</pre></div><br />
<br />
<br />
<div><ul><li>Modify <span style="font-family: 'Courier New', Courier, monospace;">MyApp.gwt.xml</span> to include the following line:</li>
</ul><br />
<pre><inherits name="fredsa.appengine.workaround.Datastore" />
</pre></div><br />
<div><ul><li>Right-click on 'MyApp' project and select 'Google ->Web Toolkit'; delete the <span style="font-family: 'Courier New', Courier, monospace;">Datastore</span> entry point module; Note, this will also remove the module from the launch configuration, which is what will avoid the following error when launching hosted mode:<br />
</li>
</ul><br />
<pre class="error">java.lang.NullPointerException
at com.google.gwt.core.ext.linker.impl.StandardLinkerContext.(StandardLinkerContext.java:164)
at com.google.gwt.dev.HostedMode.link(HostedMode.java:452)
at com.google.gwt.dev.HostedMode.doStartup(HostedMode.java:353)
at com.google.gwt.dev.HostedModeBase.startUp(HostedModeBase.java:585)
at com.google.gwt.dev.HostedModeBase.run(HostedModeBase.java:397)
at com.google.gwt.dev.HostedMode.main(HostedMode.java:232)
</pre></div><br />
<br />
<br />
<br />
<div>We're finally ready to use the <span style="font-family: 'Courier New', Courier, monospace;">Key</span> class in client code.<br />
</div><br />
<div><ul><li>Again right-click 'MyApp' project and select 'Run As -> Web Application'</li>
</ul></div><br />
<div>The application should lunch and you should be able to type a message, hit 'Send', and then see the reply come back over RPC.</div><br />
<div>Now we need to actually persist the messages to the datastore. That's easy. Using the <a href="http://code.google.com/appengine/docs/java/gettingstarted/usingdatastore.html"><span style="font-family: 'Courier New', Courier, monospace;">PMF</span> class from the JDO documentation</a> we simply add a couple of lines to <span style="font-family: 'Courier New', Courier, monospace;">GreetingServerImpl</span>:<br />
<br />
<pre>public String greetServer(Message message) {
PersistenceManager pm = PMF.get().getPersistenceManager();
pm.makePersistent(message);
String serverInfo = getServletContext().getServerInfo();
String userAgent = getThreadLocalRequest().getHeader("User-Agent");
return "Hello, " + message.getAuthor() + "! I am running " + serverInfo
+ ". It looks like you are using:" + userAgent;
}
</pre></div><br />
<br />
<br />
<br />
<div>We can now even deploy this application to the cloud with just a few clicks:<br />
</div><br />
<div><ul><li>As a workaround for the plugin upload functionality, we're going to temporarily treat the <span style="font-family: 'Courier New', Courier, monospace;">super</span> folder as a source folder; Right-click 'MyApp' project and select 'Build Path -> Use as source folder'; this will cause the project to have an error, which we will ignore:</li>
</ul><pre class="error">The declared package "com.google.appengine.api.datastore" does not match the expected package "fredsa.appengine.workaround.translatable.com.google.appengine.api.datastore"
</pre></div><br />
<br />
<div><ul><li>Right-click 'MyApp' project and select 'Google -> Deploy to App Engine'</li>
<li>Click on the 'App Engine project settings...' to enter (the missing) unique application id, which you registered at <a href="http://appengine.google.com/">http://appengine.google.com/</a></li>
<li>Enter your username/password</li>
<li>Click deploy; answer 'Yes' when asked about the error in the project</li>
</ul></div><br />
<div>Your app has now been deployed to the cloud. You can go to http://your-app-id.<your-app-id>app<your-app-id><your-app-id>spot.com, or to your own domain name if you've set that app via a <a href="http://www.google.com/a">Google Apps</a> account. Go ahead and create a couple of messages and then browse the messages you created in the datastore:</your-app-id></your-app-id></your-app-id></div><br />
<div><ul><li>Login to <a href="http://appengine.google.com/">http://appengine.google.com/</a></li>
<li>Click on your app-id</li>
<li>Select 'Data Viewer' on the left, choose 'Message' (i.e. the class name we used above in our code) in the Entity drop down</li>
</ul></div><br />
<div>I'll leave it as an exercise for you to query the datastore and display the most recent messages to the user.<br />
</div><br />
<div>Enjoy.<br />
</div>Anonymoushttp://www.blogger.com/profile/04957279964247475771noreply@blogger.com16tag:blogger.com,1999:blog-1399042838376885139.post-70155152987550657312009-02-11T11:11:00.000-08:002009-02-11T11:28:10.287-08:00OpenSocial WeekendApps Feb 20-22I hope you sign up for the <a href="http://opensocial.weekendapps.com/">OpenSocial WeekendApps</a> at the GooglePlex in Mountain View, February 20-22, 2009. This is an exciting all weekend event that breaks down as follows: Start on Friday, Beta on Saturday, Release on Sunday. Nothing like a strict timeline to get your focused!<br /><br /><div>There are a number of good <a href="http://opensocial.weekendapps.com/speakers/">speakers</a> in the lineup to fill in those coding breaks. I will be presenting a brief overview of <a href="http://code.google.com/appengine/">Google App Engine</a>. Throughout the weekend we hope to have additional App Engine content for you as well.<br /><br />See you there! Did I mention there are <a href="http://opensocial.weekendapps.com/schedule-activities/">prizes</a>?</div>Anonymoushttp://www.blogger.com/profile/04957279964247475771noreply@blogger.com0tag:blogger.com,1999:blog-1399042838376885139.post-15726488099769827232007-02-06T13:49:00.000-08:002009-02-15T15:03:30.334-08:00A snowy day in Denver<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi7hO0nFQ9mfyVG2ufB6DMQblh-mR5M-AULzgJwTNw-mgSBxTHgteOz3XqktHCgjCzqYsBKM4tEJxa7t2gTBYRaiKzXYE8SbTkS91G-pDFAySfpbeFbMOhrwjyjPdpiue_i_I2SnYh0rxdy/s1600-h/IMG_0339.JPG"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi7hO0nFQ9mfyVG2ufB6DMQblh-mR5M-AULzgJwTNw-mgSBxTHgteOz3XqktHCgjCzqYsBKM4tEJxa7t2gTBYRaiKzXYE8SbTkS91G-pDFAySfpbeFbMOhrwjyjPdpiue_i_I2SnYh0rxdy/s320/IMG_0339.JPG" alt="" id="BLOGGER_PHOTO_ID_" style="clear: both; float: left;" border="0" /></a> <div style="clear: both; text-align: left;"><a href="http://picasa.google.com/blogger/" target="ext"><img src="http://photos1.blogger.com/pbp.gif" alt="Posted by Picasa" style="border: 0px none ; padding: 0px; background: transparent none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" align="middle" border="0" /></a></div>Anonymoushttp://www.blogger.com/profile/04957279964247475771noreply@blogger.com1tag:blogger.com,1999:blog-1399042838376885139.post-23304112327611059862006-08-18T15:37:00.000-07:002006-08-18T15:38:12.360-07:00Type Less, Find More: Fast Autocompletion Search with a Succinct Index<embed style="width:400px; height:326px;" id="VideoPlayback" align="middle" type="application/x-shockwave-flash" src="http://video.google.com/googleplayer.swf?docId=7012265262667474421&hl=en" quality="best" bgcolor="#ffffff" scale="noScale" salign="TL" FlashVars="playerMode=embedded"> </embed>Anonymoushttp://www.blogger.com/profile/04957279964247475771noreply@blogger.com0