Friday, 20 May 2016

ParseServer: managing mLab test environment

Prerequisites

  1. You have completed the setup of a production mLab database.
  2. You have mongoLab client installed in your computer so that you can run these
    1. mongodump
    2. mongorestore

Objective

Copy from mLab production database to another mLab staging database.

mLab cloud backup vs local backup

The copy of production database to test database is achieved using backup and restore mechanism. mLab provides cloud based backup and restore functionality using the web based admin page.  However, each backup cost 50 cents.  Alternatively, you can achieve this free of charge by installing your own mongoLab client in your computer and perform backup to your local computer and then restore to another test database in mLab.

Copy mLab database from production to staging using local backup

You will first need to run a mongodump to backup your mLab production database to your local PC.  After that you run mongorestore to restore your local PC database backup to another mLab staging database.  

MongoDB provides two mechanisms for importing and exporting data. One way is via the mongoimport and mongoexport utilities. These allow you to import and export JSON and CSV representations of your data. The other way is with mongorestore and mongodump utilities which deal with binary dumps.

The commands to dump, delete all tables/data and restore are as follows:
  1. mongodump -h <production-hostname> -d <production-database-name> -u <user> -p <password> -o <output directory>
  2. mongo <staging-hostname>/<staging-database-name> -u <user> -p <password> --eval "db.dropDatabase();"
  3. mongorestore -h <staging-hostname> -d <staging-database-name> -u <user> -p <password> <input db directory>

ParseServer: managing Heroku test environment

Prerequisites

You have completed the setup of app in both
  1. local, i.e your own computer
  2. hosted on heroku, i.e this is the app that you deployed using "git push heroku master"
Refer to this heroku page for the details on creating staging, integration environments for the same application.  All the command below need to be ran in the heroku directory.  Heroku toolbelt is installed and you are logon using your heroku credential.

Objective

Setup a staging Heroku application.  A staging application is useful for testing new features in a production lookalike environment before releasing to production.

Checking your existing Git Remote

All applications on heroku are created with the default git remote as "heroku".  You can check the git remote using this command:
git remote -v
The command returns remotes as follows.  The heroku remote is the app that I deployed to the heroku.  The origin remote came from the git clone command when I clone from the parse-server-example git.
> origin    https://github.com/ParsePlatform/parse-server-example.git (fetch)
> origin    https://github.com/ParsePlatform/parse-server-example.git (push)
> heroku    https://git.heroku.com/elochallenge.git (fetch)
> heroku    https://git.heroku.com/elochallenge.git (push)
 

In this setup, I want to create elochallengestaging app from elochallenge app.  After the setup, I will have these 2 applications in Heroku.
  1. elochallenge
  2. elochallengestaging

Creating a Staging Environment

Run the following command to create a staging environment.
heroku fork --from elochallenge --to elochallengestaging
Add a new git remote using this command.
git remote add elochallengestaging https://git.heroku.com/elochallengestaging.git
Run this again to confirm that remote is created successfully.
 git remote -v

Setting Configuration Variables

After the new environment is created.  You will need to set the configuration variables.  Run these command line.
  1. heroku config:set DATABASE_URI=xxx --remote  elochallengestaging
  2. heroku config:set MASTER_KEY=xxx --remote  elochallengestaging
  3. heroku config:set SERVER_URL=xxx --remote  elochallengestaging
You can also update the configuration variable using Heroku web admin page.

Publish Changes to Staging and Production Environment

When you are ready to test your code in staging, run the following command to push to staging.
git push elochallengestaging master
After testing in the staging environment is completed, you may push your changes to production.
git push heroku master

Pulling latest code from ParseServer github

The git remote that you checked out the source code via "git clone" will be updated with new releases.  Once you are ready to get the latest release, run one of the git pull command below from your local git folder.

  • git pull https://github.com/ParsePlatform/parse-server-example.git
  • git pull origin

If you see conflicts, check for the filename with conflict and use editor to resolve the merge conflict manually.  For example, this is a conflict in package.json
remote: Counting objects: 11, done.
remote: Total 11 (delta 6), reused 6 (delta 6), pack-reused 5Unpacking objects: 100% (11/11), done.
From https://github.com/ParsePlatform/parse-server-example   5eea333..084fa07  master     -> origin/master * [new branch]      parse-server-version -> origin/parse-server-versionAuto-merging package.json
CONFLICT (content): Merge conflict in package.json
Auto-merging index.jsAutomatic merge failed; fix conflicts and then commit the result.

After resolving conflicts, run the npm to get the latest.
  • npm outdated : to list the outdated modules. Sample output as follows.
Package       Current  Wanted  Latest  Locationexpress        4.13.4  4.13.4  4.14.0  express parse-server   2.2.10  2.2.14  2.2.14  parse-server
  • npm update : to get the latest modules to local computer
  • npm list : to list all the modules installed locally
Once you are ready, do a git add, git commit and deploy it to the staging environment by using git push command.
  • git push elochallengestaging master

Setting Git Defaults

You can set the git push defaults to the staging environment.  Run the following command to list all the git config.
git config -l
Run this to setup the push default to elochallengestaging.
git config push.default elochallengestaging
After setting up the default, you can push to the elochallengestaging by running this command.
git push

Friday, 24 October 2014

123 Dandelion - a fun way to learn odd, even numbers and times table

I designed this game for lower primary school children to learn odd numbers, even numbers and times table.
Click here to download from Apple AppStore
Choose a number series
The game starts with 5 numbers
More numbers at higher levels



Wednesday, 15 October 2014

123 Dandelion Terms of Use

Terms of Use

Thank you for choosing 123 Dandelion App! This is an agreement between you and App creator  that describes the terms of use for 123 Dandelion App and services.  You should review the entire agreement because all of the terms are important and together create this contract that applies to you.

Warranties

Please note we do not provide warranties.

Limitation of Liability

Whilst every effort has been made in building this 123 Dandelion App, I am not to be held liable for any special, incidental, indirect or consequential damages or monetary losses of any kind arising out of or in connection with the use of the this App and information derived from this App.

This 123 Dandelion App is here purely as a service to you, please use it at your own risk. Do not use the App information for anything where loss of life, money, property, etc.

Privacy Policy

We collect personal and activity data, which may be linked.
We use technologies like cookies (small files stored on your browser), web beacons, or unique device identifiers to identify your computer or device so we can deliver a better experience. Our systems also log information like your browser, operating system and IP address.

We also may collect personally identifiable information that you provide to us, such as your name, address, phone number or email address. With your permission, we may also access other personal information on your device, such as your phone book, calendar or messages, in order to provide services to you. If authorized by you, we may also access profile and other information from services like Facebook.

Our systems may associate this personal information with your activities in the course of providing service to you (such as pages you view or things you click on or search for).

We do not knowingly contact or collect personal information from children under 4. If you believe we have inadvertently collected such information, please contact us so we can promptly obtain parental consent or remove the information.

We collect or share your location only with permission.
In serving you, we may use or store your precise geographic location, if you give us permission to do so. We do not use or share this data for any other purpose. Many devices will indicate through an icon when location services are operating. We only share this location information with others as approved by you.

You can request to see your personal data.
You can sign into your account to see any personally identifiable information we have stored, such as your name, email, address or phone number. You can also contact us by email to request to see this information.

We may keep data indefinitely.
We may keep data indefinitely.

We don't share your personal information with marketers.
We generally do not share personally identifiable information (such as name, address, email or phone) with other companies for marketing purposes.

No ad companies collect data through our service.
We do not allow advertising companies to collect data through our service for ad targeting.

You can ask privacy questions.
If you have any questions or concerns about our privacy policies, please contact us:
nebitrams@gmail.com

Vendors access data on our behalf.
In order to serve you, we may share your personal and anonymous information with other companies, including vendors and contractors. Their use of information is limited to these purposes, and subject to agreements that require them to keep the information confidential. Our vendors provide assurance that they take reasonable steps to safeguard the data they hold on our behalf, although data security cannot be guaranteed.

We take steps to protect personal information.
We take reasonable steps to secure your personally identifiable information against unauthorized access or disclosure. We encrypt transmission of data on pages where you provide payment information. However, no security or encryption method can be guaranteed to protect information from hackers or human error.

Information we collect may be stored or processed on computers located in any country where we do business.

Special situations may require disclosure of your data.
To operate the service, we also may make identifiable and anonymous information available to third parties in these limited circumstances: (1) with your express consent, (2) when we have a good faith belief it is required by law, (3) when we have a good faith belief it is necessary to protect our rights or property, or (4) to any successor or purchaser in a merger, acquisition, liquidation, dissolution or sale of assets. Your consent will not be required for disclosure in these cases, but we will attempt to notify you, to the extent permitted by law to do so.

You can review more privacy-related information.
This privacy policy was last updated on 15 October 2014. Our privacy policy may change from time to time. If we make any material changes to our policies, we will place a prominent notice on our website or application. If the change materially affects registered users, we will send a notice to you by email, push notification or text.

Thursday, 8 May 2014

Spelling 1942 Version 1.5.0 - a fun way to learn spelling

Spelling 1942, provides a fun way to learn spelling.  Every school gives out spelling list.  Your children can learn the school spelling list in this app and reinforce the learning by playing game this simple game.

The spelling lists are contributed by parents and teachers.  It is organised into Country, School, Level hierarchy.  School teachers are encouraged to submit their spelling list in MS Word file by email and I will make it available in this game.

A player can play the game in practise and challenge mode.  The practise mode is useful for the learning the words.  The challenge mode is designed to encourage children to aim for higher score and avoid making mistake.

In level 1 game play, player listen to pronunciation and shot the aeroplane which carry the pronounced word.  If the player is confident enough, he/she can shoot a helicopter and spell the pronounced word to get 10x the score.
Shoot helicopter and spell the word
to get 10x score

In level 2 game play, the game is more difficult because some "mutated" words will be appear as distractions.  For example, a word "spad" will appear instead of "sped" to test whether the player can pick up the right word.  If the player shoot the wrong word, he/she will get a penalty score.
Level 2 game play with "mutated" words

The game supports English, Chinese and Malay language.  It should be able to support any language in iPhone Siri.  Feel free to drop me a request on a new language if you are interested in.

Wednesday, 26 March 2014

Pebble Watchface - Chinese Calligraphy Clock

I got my Pebble Smart Watch on Sunday. I really like it since I can read SMS and see incoming calls from the watch. On Monday, I moved on to play with the sample code for 2 days. On Wednesday, I published a Chinese calligraphy watch face on Pebble Store. The Pebble development environment is well designed. It is quite easy to pick up if you have C language background. Next, I will try to create educational game. Drop me a note if you have some ideas :-)

This is the designed Pebble Watchface in 168 x 144 pixels.


You can download this Watchface (Chinese Clock) into your Pebble watch using iPhone or Android.  I like the watch and the programming environment.  Now, I am looking for ideas to create educational games :-)

This is my Chinese Clock Watchface on Pebble Appstore



Saturday, 8 February 2014

Spelling 1942 - a fun way to learn spelling

Spelling 1942, provides a fun way to learn spelling.  Every school gives out spelling list.  Your children can learn the school spelling list in this app and reinforce the learning by playing game this simple game.

So far it supports English, Chinese and Malay language.  It should be able to support any language in iPhone Siri.  Feel free to drop me a request on a new language if you are not sure.

Listen to pronunciation and shoot the word
During the game play, the children will listen to the pronunciation and shoot the correct word.  The children will gain and lose points depending on whether he shoots the right words.

Spelling List Picker
The spelling list is organised into Country, School, Level hierarchy.  First you will choose a country, followed by a school and a level.  You can then choose the spelling list available.

Words in a spelling list
In this screen, you can do revision on the words in the spelling list.

If you cannot find your children school's spelling list, you may download iLoveSpelling and start creating spelling list for your own children.
Download iLoveSpelling
Link to iLoveSpelling in Settings
The spelling list that you created will also benefits the other children since it will be shared to all.  iLoveSpelling App was launched in 2012 and it benefits my sons and other children.  It provides an easy channel to share spelling list among parents and students.  One of my neighbour loves it since the mother doesn't read Chinese and the father who know Chinese language always help to enter the Chinese spelling list in iLoveSpelling App.  This way, the mother can still provide the coaching for her son.