Posts

After Several Months on Ting Here is My Review

I switched to Ting.com  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...

AppLauncher Auto Organizer

Image
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 a...

Globe Customer Service - Suggestions for Improvements

Image
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: 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. Avoid asking repeatedly as if you are a bot. The agent repeatedly...

What Graphics Card Fit In Shuttle XPC SZ77R5

Image
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 cas...

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. https://github.com/faisalraja/app-engine-static 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: http://python.org/download/ Choose the one for your system, then install google appengine sdk at: https://developers.google.com/appengine/downloads?hl=d...

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('.') VERSION = VERSION_ID[0] APP_VERSION = int(VERSION_ID[1]) APP_ID = app_identity.get_application_id() IS_DEV = os.environ.get('SERVER_SOFTWARE', 'Development/%s' % VERSION_ID).startswith('Dev') IS_BACKEND = backends....

HTC One + I-Blason PowerGlider + Moga Pro Review

Image
I bought the I-Blason PowerGlider battery pack thinking that it would fit in a moga pro for extended gameplay use, because there was a review somewhere in xda that the mophie doesn't fit in the moga pro. So here is a quick video to demo it altogether. It does fit, but it can slip its heavy and hard to play while laying head up because the moga pro grip don't have a lock it might be the same issue with htc one alone. Although in the video it doesn't drop it does feel that it might, but it still fits which is the most important. Here are more photos: I used the moga tablet stand cause the HTC One + PowerGlider is too heavy to stay upright. For battery life, I've never ran out anymore, although sometimes I remove it and charge it by itself so I can still use the phone and never had to charge it directly. Beware though it only has half the mAh output of the charger, people say its fine but I really don't know how it would affect its battery. C...

Google App Engine VirtualEnv Tool that is not virtualenv for Python

When I build app engine projects and I want to include python package, what I do is download the source and symlink/include it in the project. I have tried the virtualenv approach but it didn't feel clean and I couldn't find anything that will suit my needs in a simple way. So I created this new tool called gaenv which will automate installation/linking of your installed packages to your gae project, it doesn't really need to be a gae project since what it does is just create a folder of symlinks following your requirements.txt so this can be useful to any container base deployment packages that follows symbolic links. Installation & usage: # Note that if you install on a system with multiple python, # you need to call the correct binary on which it looks up packages $ sudo pip install gaenv $ cd to/your/gae-project # Create your requirements.txt & run this to install it $ pip install -r requirements.txt $ gaenv That's it, this ...

Windows Process Monitor Script in Python

I have a windows desktop that is always tunneled to some server for reason that is not important. I use kitty.exe an improved putty with auto re-login and more, but only needed that feature that's why I'm using that. But for some reason it stops responding if a lot of traffic has passed to the tunnel and it has now happened too frequent that I just had to auto restart it, there might be softwares that does this already but here is what I did using python. This should be reusable with any process just change the variable names you want to monitor. import os import subprocess import time __author__ = 'faisal' # Change this if you want to monitor a different process process_name = 'kitty.exe' # Separate your parameters start_command = ['C:\Applications\Putty\kitty.exe', '-load', 'MyTunnelSession'] # Sleep time in seconds before checking again sleep_time = 60 while True: # Filter a list of windows process that has stopped respondi...

Backup/Sync Your Photos to Flickr Script

IF YOU JUST WANT TO USE IT PLEASE SKIP TO INSTALL PART If you haven't heard, flickr has made their free storage 1TB for your full size photos. That's a lot of storage for your photos. I have a collection of photos since year 2000, and I have only around 81GB of photos stored to my hard drive and time machine and another backup drive, but those can all fail but I have been lucky not to lose photos from hard drive failures. I was looking for a sync apps to flickr that I can leave alone and I couldn't find one. So here is a quick python script that I created. Here is how it works for backing it up: Let's say you have folder /Volumes/Storage/Pictures/ 2001   / 2001-01-01     / File1.jpg     / File2.jpg 2002 2003 When you run flickrsmartsync it will require you to login give it access then it will sync it automatically, stopping and starting it will just resume it as long as it is in the same structure. So if you sync the same structure under the roo...

Simple Mapper Class for NDB on App Engine

This class is based on the db mapper found in remote_api article. But using ndb, the purpose of this is if you want to iterate through a lot of entities but not enough time to do it on request time. So this library helps you create a map of your entities of given kind. You should use this in cases like, deleting users that requested for deletion or updating counters for specific filters. Here is the NDB version of the Mapper. I have added a bit of improvement that I have used for in the past. -Edit- I have removed the memcache ability to stop duplicates. It should just now be handled with the task scope, like taskname or different filters per task (can be done with different initial data and overriding the get_query method and use it as some filter). import logging from google.appengine.ext import deferred, ndb from google.appengine.runtime import DeadlineExceededError class Mapper(object): def __init__(self, use_cache=False): ndb.get_context().set_cache_policy...

Summary of my Android Apps

After checking the archive list of my blog I didn't see me sharing my android apps on here. So here it is, I currently have 4 active apps mostly created for myself that I published on google play. AppLauncher+ This app automatically organize your apps base on google play categories. Reason I built is cause I flash my firmware a lot at one time that reorganizing folders of my apps just takes too much time. I couldn't find one that is simple enough that would just work and I won't ever touch it again. It has now evolve to have features like: Manual Categorization (had to do it cause of too much demand) Floating launcher (for paid, you can open a folder/assign commands on what it does) Create Shortcut & Folder view on those shortcut (also paid only) Free version basically just gets an organized list with ads! :( Live Battery (Status Bar) This is a live wallpaper, you can select a static wallpaper then then it will have your borders as status bar. I did this...

JSONRPC Server & Client For Python on Google App Engine

Now that google cloud endpoints is around the corner it will and probably should be a standard way of creating web services for any types of clients for mobile, desktop or even your ajax requests. It's still experimental as the time of this writing and I will not really talk about how to use it since their documentation has some good example on it already. I will be sharing on how and what I've used to create my own web services for android clients I have created and for ajax calls. I have created my own jsonrpc client/server class for python. My own full implementation of jsonrpc standards . I have included this on my app-engine-starter code with some sample if you run it and click the JSONRPC Demo dropdown. Feel free to use it. It is still a nice simple library to use creating web services. I will give a quick sample code here on how it's used: import logging from google.appengine.ext import webapp, ndb import jsonrpc class Calculator(): def add(self, a,...

NDB Caching Queries Tips & Best Practice - Google App Engine

Update: Since keys only queries are now free, I would prefer to just cache the queries with only resulting to keys_only=True then retrieving the cached values of it with ndb.get_multi(keys). If you are creating a heavy read app engine app, that has a lot of listing/query entities it's a good idea to cache those queries so you don't get charged for reads. But you want it to also be up to date and not have to worry about invalidations. Here is some of the things I've done for caching queries. This can't be applied to all but should work on most and can be implemented on same manner with more complex queries. The idea is to have an updated field on the fields you are filtering from so you can use that as your cache key. Here is a sample code that that shows how to display user post with cached queries. from google.appengine.ext import ndb class User(ndb.Model): created = ndb.DateTimeProperty(auto_now_add=True, indexed=False) updated = ndb.DateTimeProper...

How to Build Live Wallpaper with Canvas on Android

This will be a very basic canvas live wallpaper with android. Just to get people started. Just read the comments on the code to understand how everything works. AndroidManifest.xml <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="org.altlimit.samplelivewallpaper" android:versionCode="1" android:versionName="1.0"> <uses-sdk android:minSdkVersion="15"/> <application android:label="@string/app_name" android:icon="@drawable/ic_launcher"> <activity android:name="MyActivity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> ...

Join Query on Google App Engine Datastore

App Engine Datastore is a no sql database. That means you cannot  do standard sql queries. But they do have the basic queries using GQL. It is a no SQL database which is very reliable, does not slow down even with terabytes of data, and has a nice indexing mechanism to fetch data. You can use Google Cloud SQL if you need a relational database, it's a manage mySQL database by google. By the time I'm writing this, they now support up to 100GB of mySQL database, but still limited to the limitations of a standard mySQL and it's coolness. So if you really can't avoid a de-normalize table like you want to show the name of a user in a list, I'll show you samples. This will all be using python 2.7 and ndb. from google.appengine.ext import ndb # just a sample model for how to efficiently join them class User(ndb.Model): name = ndb.StringProperty() photo = ndb.BlobKeyProperty() """ always create a text version of your blobkey and store ...

Web Scraping with Google App Engine

Here is a quick tutorial on how you can scrape google search results asynchronously with app engine and caching its result in memcache. You should not use this directly because you can get blocked by google, this is just a sample for you on scraping web pages, feeds, xml, etc. But if you do want to do something like this, I recommend adding delays, and act more like a human on your scrapes. But I believe that is against their TOS. I added the use of async here for people who don't know how to use them yet so they can learn in the process. The code below is a complete working google search scraper, read the code comments to understand everything. This is all done with python 2.7 with ndb app.yaml application: your-application-id version: 1 runtime: python27 api_version: 1 threadsafe: true handlers: - url: /.* script: main.app libraries: - name: lxml version: latest main.py import urllib from urlparse import urlparse, parse_qs from google.appengine.ext import webapp,...

Subdomain module mapping with Zend Framework

Here is a very simple config to map a subdomain to a module with Zend Framework: Samples: Going abc.example.com/hello will route to example.com/abc/hello/index resources.router.routes.module.type = "Zend_Controller_Router_Route_Hostname" resources.router.routes.module.route = ":module.example.com" resources.router.routes.module.defaults.module = "www" resources.router.routes.module.chains.index.type = "Zend_Controller_Router_Route" resources.router.routes.module.chains.index.route = ":controller/:action/*" resources.router.routes.module.chains.index.defaults.controller = "index" resources.router.routes.module.chains.index.defaults.action = "index" Just add this to your application.ini

Macbook Pro 2011 Review

Image
Update: After owning it for about 2.5 years I found out that this is actually a flawed mac model which apple has not admitted yet. There are thousands of discussion posts happening on these models with failing gpu / discrete graphics that causes it to blue screen or not pass grey screen just after the logo. A temporary fix that I do is use gfxCardStatus and set it to only use integrated graphics and it's still usable for now, but a lot of people can't pass the gray or blue screen which makes their macs brick. Until apple won't do recall or admit and replace their failed product this is probably my first and last mac. Beware also that this happened to one my friends earlier model and with another with later model. Here are links on the discussions about this: https://discussions.apple.com/message/24067593 http://www.mbp2011.com/ http://www.geek.com/apple/macbook-pro-2011-owners-experiencing-hard-freeze-problem-1330689/ http://appleinsider.com/articles/13/10/14/apples-...

Playlist maker for android using SL4A(android-scripting)

Image
NOTE: I have already created an APP that don't need android scripting installed here . This is a simple tool for your android phone to make playlist by folder using android scripting. You need SL4A with python for android for this to work. You can download it at http://code.google.com/p/android-scripting/ or with and Then just copy paste this code and run it. By default playlist is created at /music/playlist so make sure you have that folder in your sdcard. It also finds all mp3 files in your sdcard and will name the playlist by path. Here it is import android import os import string droid = android.Android() directory = None # put list of folder to gen m3u or leave empty for all folder m3upath = "/sdcard/music/playlist" musicpaths = None def createPlaylist(dir): files = os.listdir(dir) files.sort() songs="" for file in files: if file.find(".mp3") != -1: songs += file + "\n" if songs ...