Wednesday, July 22, 2015 reddit alternative written in AppEngine

My latest app engine project a reddit alternative called is written in python backend. Currently it's basically clone of reddit. It has up and down votes, subs, moderation, nested comments and same reddit hot algorithm. You can check the rules in /h/announcements.
Sunday, August 24, 2014

After Several Months on Ting Here is My Review

I switched to and has been happy with their service. I currently have 3 lines with them and my average monthly usage is $30/month. My highest bill was around $45 which was around the time when we were moving and used a lot of data. This can be very expensive if you use a lot of data. The good thing is you can actually just setup an alert that will disable your minutes, sms or data if you are going over a specific rate. Ting recommends adding a bit of buffer since usage is not updated instantly, so for example I add subtract 50mb of data on the plan I want to stop it. Same with call and sms.

The only drawback here that I encountered once is if you go over a few minutes, for example I went over 6 minutes on a plan and I was charged the next plan for a full amount.A good feature to have would be to create alerts base on some variable usage so you can disable a plan if you are close to your closing date and you only have few minutes left.

Even with that bad experience I would still recommend ting since I still saved a lot of money. If you use my referral on ting by clicking you get $25 credit to use for your service.
Tuesday, June 10, 2014

AppLauncher Auto Organizer

I have recently switched to an Android phone coming from an iPhone 5 and I totally didn't miss my apple (except for one tiny app I loved the most in iOS - Plant Nanny! - helps me get motivated to drink enough water) due to many cool Android apps which just fits my need. Plus, Google apps runs better with Android as expected.

However, since smartphones stormed the planet, I am missing one feature which was usually part of the default settings ages ago - TADA! - the categories. Today's vanilla feature of the Android platform presents apps into a grid of icons spanning into pages as needed - not bad at all - but if you are app-packed, it may take you a few seconds longer to go to that utility app you are looking for.

Good thing, there are tons of launcher/organizers out there made by the geeks of our planet (or are they really from around here?!?). I used to like GO Launcher but later on realized that it has too much features that I don't need. I am just a simple person and the only thing I want is to organize my apps so I can look for specific app I need based on categories - and I wanted it done automatically.

And when I say categories - I meant this:

Here comes AppLauncher! It organizes your apps automatically based on Google Play store categories and lets you do more customization if you want.

AppLauncher Drawer showing Google Play categories
After selecting a category from the drawer, you will see the narrowed down list under that category - in this shot, it is the Tools category - and I call this view Drawer Interior.
Those two were all I need. But for those who needs more, there are other features such as Themes, Quick Launch (Paid version), Advanced Shortcuts, and other settings tweak you can find in the app's menu (the three vertical dots lying on the upper right corner of the app when in full-screen view - just in case you are new in Android and needed that guide ^^,)

AppLauncher+ Settings

Let me say walk you through the features.

Theme Settings

This section lets you play around the colors of the application's key areas: the Drawer, the Grid, and the Quick Launch. You can also apply a background image and enable/disable the old layout as you please.

AppLauncher Theme Settings
By tweaking the colors and transparency, you can create different themes as your mood/personality requires. In the following sections, I will feature two themes: Fiery and Girly - please note that these does not come as defaults in the AppLauncher, I just tweaked and named them for easier reference in this article.

Drawer Theme

The "Drawer Theme" decides on the color and transparency of the main Drawer (the one showing category list) and the Drawer Interior (the narrowed down view). 

A Fiery Drawer
A Girly Drawer
A Girly Drawer Interior
The following list breaks down the settings:
  • Base color - decides the title and the left bar showing the number of apps in a category 
  • Minor color - decides the color in the background of the category texts
  • Label color - decides the color of the labels/texts
  • Main color - decides the background color of the Drawer Interior - I don't have a sample shot because I turned on the "Change background image" setting for all the tweakings I did - that's why we can see Ace of One Piece and Asuna and Kirito of Sword Art Online instead. BUT, if you check on the Old Layout sample I have in this post, you will see it - because, right now, the old layout doesn't use Background Image
Apps Grid Theme and Quick Launch

These settings are available in Pro Version. 

The Apps Grid in Fiery theme
The Apps Grid (center) and the Quick Launch bar (right) in a Girly theme
There are two (2) main settings common to apps grid and quick launch:

  • Background - the color of the icons' background, I set them to red orange and pink to be able to create the fiery and girly theme respectively
  • Label - the color of the apps' label/text, I set them to white for both theme I played around with

The Old Layout

The old layout pertains to the initial version layout of AppLauncher where you have the Drawer and the Interior together in one view. See sample screen below.

Old layout drawer in girly theme!
 The old layout's color is decided by the "Drawer Theme" settings. Background image is currently not supported in this layout (as of this writing).

Advanced Shortcuts

This setting is available for those who wants further customization in their categories - however, currently, this is only available to pro version. There are three (3) ways to create advanced shortcuts: Categories, Applications, Combined Categories.

Advance Shortcuts setting


If you want to choose a few apps and make it easily available in one tap, then this is an option for you. In this example, I created a shortcut named "Family Time" which consists of the apps Charades, Logo Quiz and YouTube.

An advanced shortcut of applications


Creating an advanced shortcut of categories lets you group categories into one shortcut. For example, in the screenshot below, I created a shortcut named "Essentials" which launches a grid of categories I consider essential - the Games, Arcade & Action, Brain & Puzzle, Casual Games and Health & Fitness.

An advanced shortcut of categories

Combined Categoris

I don't have a screenshot, but this option lets you group two or more categories into one shortcut. For instance, if you want Brain & Puzzles and Arcade & Action to be grouped into one "My Favorite Kind of Games" shortcut, then it can be done. You will then see your Whats My IQ and Zombie Smash into one category.

The Quick Launch

The quick launch enables you to access AppLauncher at any time while using your Android mobile. In my configuration, I can access the Categories Bar by swiping up the icon from the lower right corner of my screen and the Apps Grid by swiping to the left.

Categories Bar accessible by swiping up the icon
Apps Grid accessible by swiping the icon to the left or by tapping the category from the categories bar
 The quick launch can be customized further under settings. The Icon Size can be changed into small, medium or large size. The actions can be changed or disabled accordingly.

You can also add categories shortcuts into your home screen. The following image shows all my categories in my home screen with the Health & Fitness shortcut currently selected.

One more thing, the icons can be customized. This is specially useful if you have installed icon packs.

More Features To Come

As of this writing, I know that the geek behind this great app is currently working on a few more improvements to the current versions. 

Visit these links for more information.

AppLauncher Free
Also, just in case you are wondering, my current theme is Fire in the Dark - nothing fancy - its just the images shown under "Here comes AppLauncher" in this article. I know I said I am just a simple person who only wants the auto organization - but since I tweaked the theme for this article, I realized I liked Ace there in my launcher, too. ^^,

Sunday, March 30, 2014

Globe Customer Service - Suggestions for Improvements

I had a chat with a Globe agent today and it did not feel right so I had to share it somehow hoping to enlighten folks in customer service fields. This is not that BIG but I think there are still lessons which can be taken from this experience.

I was seeking their support because I tested my internet's speed and it seemed a bit off.  I had 2.02, 1.02 and 2.24 Mbps download stream results in a series of speedtests for a 3Mbps subscription plan. During the conversation, I kept retesting and looking at the modem page and the speed improved so I cancelled my complaints.

However, I noticed three (3) things that needed to be improved:
  1. Use of words. Whatever happened to "please" and "kindly"? Instead, the agent used "I want you to..." as if he was my commanding officer. It might be hard to really express yourself through a chat conversation but these basic things can help a lot.
  2. Avoid asking repeatedly as if you are a bot. The agent repeatedly asked me to disconnect my router (acting as a signal booster) and directly connect my computer to the Globe provided router. I think that if an agent thinks that the customer did not understand the first time they ask, at least rephrase and explain nicely. Using the same exact words (copied/pasted) in this situation is offending. Moreover, he broke down the sentences and it insinuated that the customer cannot comprehend what was said the first time. It might be because they are using pre-formed texts  that can be easily sent to the customer in one click. But still, it did not look nice.
  3. Follow Protocol.  In this conversation, after I told the agent that my connection then seemed fine, he sent me the thank you line and ended the session immediately. I thought it was a protocol to ask the customer if there are other concerns before ending the session? It might be a personal preference but I always wanted to reach the point where I can say my thanks to my agent and apologize if I have been mean at anytime during our conversation. Also, I could have told him he could improve the way he handles customers. But because I was cut off immediately, this blog post had to happen.
Transcript of the conversation with the Globe agent

As for me, I also have something I need to improve - keep calm. I really told myself even before starting the session that no matter what happen, I will remain calm. But what would I do? I expected customer service and it really disappointed me to have not found a nice one.  In terms of sales, I am the kind who can be sold out by the way the customer service is executed. If I walk-in a shop and given a good customer service experience, 50% of my decision to buy the item is secured - I tend to walk-out, otherwise.

I firmly believe that if you are a person working in customer service field, you have to mean it - provide customer service. Treat your customers nicely.
Wednesday, September 11, 2013

What Graphics Card Fit In Shuttle XPC SZ77R5

Earlier this year (2013) I bought a mini pc that will be dedicated for serving plex media server. I got the ShuttleXPC SZ77R5 because it was small enough for me and it works with the Intel Core i7-3770K since this need to handle multiple 1080p streams on my home network on different devices at the same time. The thing that I did not plan for is the video card. So I can make it a dedicated gaming pc for the most recent games and run it flawlessly. But these kind of cards are huge and usually won't fit this case without modifications.

So after some research I got this card,  Sapphire Radeon HD 7970 OC with Boost 3GB DDR5 DL-DVI-I/SL-DVI-D/HDMI/DP PCI-Express Graphics Card 11197-03-40G which barely fits and when you close the case it would probably overheat. Also you will have to remove the hard drive/cd rom rack to fit this card. I moved my hard drive on top of the case, there is a bunch of holes there where you can just attach it in. Then the hard part was cutting the case to have an opening in same place where the fan of the graphics cards are. I never really tried running it without that opening so I can't say if it would overheat.

It doesn't look that good now with the hole but it works fine.

For anyone that is interested on what else is in there here is the complete list specs.

Wednesday, August 14, 2013

Host Static Website on Google App Engine But With Flexibility of Templating System

If you already know how to use google app engine you can skip to the github project and the short summary will be enough for you to get started on creating static websites. I created this because google sites will stop supporting google adsense and I have a bunch of static sites for my projects that is using google adsense.

If you are new to google app engine and would like a way to create static websites with ability to do stuff like server side includes to avoid duplicating your headers/navigation and everything that you can do with jinja2 templating system and starts your hosting for free with daily quota and competitive pricing, by the time of this writing is (1GB/day free and 12cents/GB after).

First you need python 2.7 installed in your system, you can download at:
Choose the one for your system, then install google appengine sdk at:
The last thing you'll need is the github project above or download zip at:

Once you got all the things in place, install python, extract/install app engine sdk then extract master.
On mac and/or maybe windows there is a GUI where you can simply add the project extracted "app-engine-static-master" to on the appengine sdk and run it for testing. You should go to:

change the port on where it is running, and /dev/ is where all your dynamic website is shown, whatever you see here is what will be generated static files under gen folder. Now you can start building your website inside the templates/ directory, however you structure this will be how it will serve on your url.

    _layout/main.html (mapping is ignored on underscore(_) prefixes)
    docs/tutorial1.html (url maps to /docs/tutorial1.html and if hide_html_ext = True on it maps to /docs/tutorial1)
    about.html (maps to /about.html)
    index.html (maps to / your homepage)

The "hide_html_ext" will just generate the files under a folder and index.html to emulate the clean url designs but by default its using the .html which should be just as good. You would just usually touch the templates directory and then run:


Then it will create static files under gen folder which should serve directly from your running development server, when everything looks good deploy your app, if you need to modify anything you'll have to do it in templates/* then re-run python then redeploy your app.

For more info on how to make use of jinja2 check their official site:

Other app-engine-static specific features includes:

Jinja2 Filters:
{{ link('/about.html') }} - use this for any linking between pages variables:
use_index_paths - hides index.html on generated static files
hide_html_ext - hides all .html and generated files are all under folder/index.html

static/ - should contain all your other non-generated static files such as css/js/images and other files
Friday, July 12, 2013

Cookie-less Domain and Static Files versioning with Google App Engine

Cookieless domains are one of the must have optimization when you are serving a lot of static files. The reason is that if you have a cookie in the same domain it sends those cookies in the request headers if you are serving your static files on the same domain. Those build up and unnecessary. If you have your cookie in domain level and using appspot domain for your main domain this won't work. This will also version your files so in your app.yaml you can leave (default_expiration: "30d") all the time. Each deploy will prefix your static urls with different version. Here is how I did it:

import os
from google.appengine.api import app_identity

VERSION_ID = os.environ.get('CURRENT_VERSION_ID', '1.1').split('.')
APP_ID = app_identity.get_application_id()

IS_DEV = os.environ.get('SERVER_SOFTWARE', 'Development/%s' % VERSION_ID).startswith('Dev')
IS_BACKEND = backends.get_backend() is not None

def static_url(num=0):

    if not IS_DEV:
        return 'http://%s' % '.'.join([
            VERSION if not IS_BACKEND else 'cdn',

    return ''

Then in all your static js/css etc prefix all with static_url(1) 2, 3 so it loads in parallel. Modern browsers should now load stuff in parallel but still helpful. The reason this works is cause in app engine you can have multiple versions of your app serving in like (version).(app-id) so what I did here is get the unique version of currently deployed app and prefix it like: (for-parallel-loading-number).(unique-deployed-app-version).(app-version).(app-id), (unique-deployed-app-version) is a version number that only changes when you do an app deployment so this is what we use for versioning the static file, so this will never change until your app is ready and deployed, but I'm not really sure if about it if this is something that can get used while other instance is not ready and request goes through an instance that is not ready yet.

This is also built-in to my app-engine-starter.