Retaining original app name after a high replication datastore migration - google-app-engine

I seem to have 2 separate applications on GAE, the original one with the fictitious name xyz and an hrd one with the name xyz-hrd. I only want one with the name xyz but I want it to use the high resolution datastore. I am trying to use the instructions here.
I am near the end of the HRD migration stage on xyz and have clicked on "Activate Read-only". In step 11 the instructions say the following.
You will be notified when the migration tool is ready to alias the application (by email if you chose that, or by a message when your refresh the browser window). Click Finish Migration to complete the migration. At this point, the new HRD application begins serving incoming requests.
When I launch xyz at appspot.com, there are no changes.
When I launch xyz-hrd at appspot.com, there are changes, but only new data items.
Do I click on "Finish Migration" or not, and when I do, how will I get all the changes and all of the data items under the application name xyz? I am very nervous about this because the instructions say there is not way to revert after clicking on "Finish Migration".
By the way, in my "dashboard" I can select from among my applications which lists both xyz and xyz-hrd. When I select xyz I (still) see 2 warnings, but no warnings are present when I select xyz-hrd. Below are the 2 warnings.
A version of this application is using the Python 2.5 runtime, which is deprecated!
This application is using the Master/Slave datastore which is deprecated!

There is no way to reclaim the old app url for the new one. I know, its lame.
To avoid that in the future, map the appspot to a google apps domain so it has a fixed url.
For now, at most you can upload a new version to the old app which redirects to the new one.
Before migration you are supposed to stop using the old one by making it readonly. Otherwise changes there wont migrate.

Related

How to deal with changing user_pseudo_id?

I have a mobile app and I use firebase and BigQuery to download data for analysis. Recently the 'user_pseudo_id' has been changing when 'app_remove' event is triggered. When I emailed firebase, they replied that 'user_pseudo_id' changes when app cache is cleared.
We rely on 'user_pseudo_id' to calculate app removes in new users (daily). Can you suggest a solution to this problem?
We cannot use the 'user_id' as it will not be triggered for 'first_open' event using which we find daily new users.
For Apps, user_pseudo_id is the app_instance_id. The app_instance_id is updated with each app install. This means, when an App is removed/uninstalled from a device, the app_remove is the final event for an app_instance_id. If an app is reinstalled on a device, that 'app instance' will have a new app_instance_id i.e. a new user_pseudo_id. This is working as intended, has always been this way, and is not a recent change.
For your use case, you need to fully articulate: "We rely on 'user_pseudo_id' to calculate app removes in new users (daily).". e.g. How are you defining new users?
Since you do not want to use user_id, the only way for you to define new users is by using user_pseudo_ids.
If you want to calculate new users who are uninstalling the app in their first session, you can write a query for that.

How can I avoid write operations while deleting the all data from Google App Engine datastore?

I am new to Google App Engine development. We have developed application with android and Google App Engine.We tried to delete all data but write operations became 100% and we can not simply delete further records. How can we manage to delete the data without exceeding 100%.
Can someone please explain us so we can follow the steps.
Thanks,
Prashant
You simply cannot delete records without accounting it for in the quota.
Ref: https://cloud.google.com/appengine/pricing#costs-for-datastore-calls
Entity Delete (per entity) --> 2 writes + 2 writes per indexed property value + 1 write per composite index value
So if you are in free-quota, you cannot delete or write any further, without enable billing.
Work around
Google allows 25 free app-engine projects to each user id. Create a new project and upload the old project code to new project id. If your daily traffic is within the free quota, you can use it as long as you want.

RSS feed of new entries in Active directory

tldr: if details are changed or new accounts added in active directory we want to update an RSS feed.
Our organisation has a good deal of staff changes so it can be slightly crazy to keep track of who's in what role and new staff that have joined us.
I'm currently interested in setting up a feed which will show staff changes which I could then have show up on our intranet site (internal only so no privacy issues there). Something like: Jane Doe has started working for CompanyName in DepartmentName, here's a link to her staff profile [LINK]. Or Bill from accounting now works in building management.
Basically person x now works for us, or person y has changed roles.
We handle our login authentication with active directory (which I don't know heaps about), any time someone comes to work for us they get a login; when they change roles they would have their details changed in active directory.
What I want is an RSS feed which would have new items added to it dynamically any time that a new user is added or a staffmember's details are changed on AD.
a particular item in the feed would look something like this
<item>
<title>[username] [now works here / has changed roles]</title>
<link>.../staff.aspx?uid=[username]</link>
<description> follow the link to see their staff profile</description>
</item>
how can I get the feed xml file automatically updated when one of those changes is made in active directory?
Thanks for your time.
I would recommend setting up a service to poll for the changes that then writes them somewhere else for you to pick up and manipulate for your RSS feed.
Ryan Dunn has a great post discussing how to do this in .Net, specifically with Change Notifications. Personally, I'd recommend using DirSync as it's pretty easy to setup, but his post does a great job with pros/cons of each method.
This is quite a complicated question. Active Directory has a "last modified" attribute and a "created" attribute. So you could query the timestamp on created and then update an RSS file from that to get your new users. However, just because an AD entry has been modified doesn't mean the job title has changed, so you're going to have to cache the Active Directory somewhere locally, say into a database and then do a check against that to see if a job title has changed.
You'll need to write some LDAP queries (See here, for example: http://www.selfadsi.org/extended-ad/search-user-accounts.htm) to find all the accounts and then process them.
What language are you looking to use?

How can I serve a file only if the user has purchased my product, on Google App Engine

My data files include a demo version of my program as long as a complete, unlocked one. Google App Engine is used to serve webpages to the user. A database records whether the users have purchased a product, and based on that, I’d like to serve them file A-demo.exe or A-completeVersion.exe
I thought about calling self.redirect( A-completeVersion.exe ) according to the purchase flag, but that would let the user see the URL of the complete version in his browser.
Is there something I could do to proceed with this download without the URI appearing in clear?
PS: by the way, I’m using the Python 2.7 version.
If you're requiring the users to log in, serve the "full" version from the blobstore. That would allow you to easily check that they've got a valid license before downloading the file.
If you're not requiring login, you could generate single use URLs that you serve the application from. Once they have completed the purchase, generate a uuid and write an entity to the datastore with that uuid as the key. When they try to download, check and see if that key is valid. If it is, update the entity to reflect that it was used and then send the blob.

How to configure Django to reinitialize and populate the entire database on startup?

Let's assume that you are working at the first version of a new Django application and you are keep adding changing the models.
Being a data-driven application you are mostly working to customize django admin.
In this case syncdb is not too useful because it will fail to update models. South was interesting but it does not make too much sense when you are working at the first version.
Deleting database and reinitializing it require several commands and also you manually entering the new admin account.
How do you propose to set your development environment so you can:
auto-restart django server when files changed
auto-reinitialize database when django is restarted
As a result, I expect to be able to add a new attribute to a model, switch to the browser and refresh the admin page and see the new attribute.
Providing initial data for models
It’s sometimes useful to pre-populate your database with hard-coded data when you’re first setting up an app. There’s a couple of ways you can have Django automatically create this data: you can provide initial data via fixtures, or you can provide initial data as SQL.
In general, using a fixture is a cleaner method since it’s database-agnostic, but initial SQL is also quite a bit more flexible.
http://docs.djangoproject.com/en/dev/howto/initial-data/

Resources