LG G6 review

Just wanted to keep a log of complaints with my LG G6. Things a person wouldn’t know until they buy it.

  • – Default message limit means your messages will start getting automatically deleted in the background after the limit reaches. I’ve lost so much history this way.
  • – No flash on low battery. At least give me the option to use flash in low-battery mode.
  • – Low light or over-sharp photos. This is probably a problem with almost every phone ever.
  • – Android 8 is not coming I think. Promised at launch. It’s been over a year.
  • + Knock to start or wake immediately after it goes dark is awesome.

How to install stbemu pro on Fire TV 4k?

It was tough piecing together all the instructions to install stbemu pro on Fire TV 4k. Here’s my current working process:

  1. Install stbemu pro apk. Several ways:
    1. Easiest: Download from Aptoide.
    2. Download from random sites. Good luck!
    3. Extract it yourself. 🙂
  2. Enable Settings > Device > Developer options > Unknown sources > ON.
  3. Enable Settings > Device > Developer options > ADB > ON.
  4. Find IP of Fire TV. It will look like 192.168.X.X. Two ways:
    1. Check the router for amazon-HASH device’s IP address.
    2. Open Fire TV’s About > Network to look for IP address field.
  5. Install ADBlink for PC or MAC.
  6. Open ADBlink, put your IP address in the field, and hit Connect.
    1. NOTE: You will need to accept this connection on the Fire TV. You should see a popup there.
  7. Once connected, choose “Install APK” from buttons. Select the APK downloaded in step #1.
  8. Finally, your app icon may not show on the home screen. Follow this tutorial. Steps outlined below:
    1. Choose Settings > Applications > Manage Installed Applications > App Store > Force stop, Clear data, Clear cache one after another.
    2. Choose Settings > My Account > Sync Amazon Content.
  9. You should have an icon under “Your apps and games” section for stbemu.
    1. It may be at the end. Here’s how to bring it front:
      1. Highlight stbemu icon. Choose options button on remote and “Move to front”.
  10. Protip: Make stbemu run on Fire 4k boot.

iPhone vs Android

I’ve used Android phones most of my smartphone life. I started with Google’s G1, then came Google Nexus 5, Google Nexus 5X, Samsung Galaxy, LG G6. I’m very familiar with the Android ecosystem. I’ve dabbled with plenty of ROMs, like CyanogenMod, Cataclysm, etc. Along with my regular smartphone usage, I’ve developed apps for both Android and iOS. My only exposure to iOS has been an iPod Touch before smartphone days and my development experience with the emulators

Recently, I was given the opportunity to use an iOS device, iPhone SE, since MetroPCS offered free ones on no-contract signup. I figured I should give it a shot for a few months. I want to detail some pros and cons for both ecosystems.

Android:

  • + More customizable: the home screen, launcher, unknown source apps, etc.
  • + Better notifications system. Ability to dismiss things easily enough compared to iOS.
  • + Awesome integrations with lots of password managers. Personally I prefer LastPass to keep them synchronized with all my devices.
  • + Consolidated Google Now to keep up with appointments, shipments, NBA/NFL scores, news. Automatically pieced together from my emails.
  • + Google Assistant able to pick up any accent you can throw at it. My family has thick Punjabi/Indian accents.
  • – Slow and inconsistent apps. Seem like second citizens compared to iOS apps from the same brands/app-makers.

iOS

  • + Faster apps loads with better graphics
  • + Smooth camera operation
  • – Annoying notifications seem to never go away.
  • – No integration with password managers like LastPass. Each app has to subscribe to specific password managers. In other words, no app ever happens.
  • – Limited browsers. Every browser runs the Webkit backend, so if a website is broken in your browser, you’re out of luck.
  • – Default iOS keyboard has no swiping. And it will keep coming up for apps that don’t want to use custom keyboards (i.e. Contacts, almost all the iOS apps, any financial app, logins/passwords). Inconsistent and NO thanks!!!

TLDR: I can’t wait to go back to my “slow yet complete” smartphone that is Android.

Best way to avoid ads in exercise apps

I’ve found that the best way to avoid ad-infested apps for exercising is to use official apps from popular brands. They’re better because they bother you again and again about non-exercise-related matters (ads, social sharing, etc)

For example the following apps are great alternatives to popular ad-filled apps:

  1. Nike Run Club – Much better than C25k (Couch-to-5k).
  2. J&J 7 Minute Workout – Alternative to 7 Minute Workout.

Composer stuck on installing private GitHub repos

I was trying to install some GitHub repos as dependencies using composer. Composer kept getting stuck on installing the private ones.

composer.json:

    "repositories": [
        {
            "type": "vcs",
            "url": "git@github.com:inderpreet99/private.git"
        }
    ],
    "require-dev": {
        "inderpreet99/private": "1.0.1"
    }

Log:

$ composer install
Loading composer repositories with package information

[Composer\Downloader\TransportException]
The "https://api.github.com/repos/inderpreet99/private" file could not be downloaded (HTTP/1.1 404 Not Found)

install [--prefer-source] [--prefer-dist] [--dry-run] [--dev] [--no-dev] [--no-custom-installers] [--no-autoloader] [--no-scripts] [--no-progress] [--no-suggest] [-v|vv|vvv|--verbose] [-o|--optimize-autoloader] [-a|--classmap-authoritative] [--apcu-autoloader] [--ignore-platform-reqs] [--] []...

Solution:

  1. Go to your GitHub profile.
  2. Under Developer Settings > Personal access tokens, generate a new token.
  3. In cli:
    $ export GITHUB_ACCESS_TOKEN="gibberisheaab78ab18285b9something"
    $ composer config -g github-oauth.github.com $GITHUB_ACCESS_TOKEN
    

Composer should work much more smoothly now.

Webmin bug copying SSL certificates to Virtualmin panel

When you generate a SSL certificate for an nginx site through the Virtualmin interface for a virtual (sub-)server, the button “Copy to Webmin” incorrectly triggers the “Copy to Usermin” feature.

On the other hand, the Webmin interface to generate the SSL certificate also fails, because it does not allow for generation for nginx hosts (only Apache hosts).

Trick:

  1. Generate the SSL certificate using Let’s Encrypt in Virtualmin for the virtual (sub-)server.
  2. Run the following command as root to copy the certificate to Webmin:
    virtualmin install-service-cert --domain yourdomain.com --service webmin

Unrar split RARs on Windows using Cygwin

Sometimes out of dire circumstances one may download a huge set of rars. Unraring all the scene release files in split rar format in each separate directory with their separate subtitles (idx/sub files) is a cumbersome task.

  1. Install unrar from http://gnuwin32.sourceforge.net/packages/unrar.htm
  2. cd into the base season directory using cygwin.
  3. Unrar recursively:
    find /path/to/dir-of-rars -iname "*.rar" -exec sh -c 'dir=`dirname {}` && echo "$dir" && unrar -o- e "{}" $dir' \;
  4. You may need to run this multiple times to catch the rars that the rars may create.

Avoid email submission on SHOUTcast DNAS download

SHOUTcast makes you submit a valid email each time you want to download SHOUTcast DNAS or DSP. I’ve put links below that let you to download x86 (32-bit) and x64 (64-bit) straight without nag screens. These links will not get outdated because they always point to the latest.

Linux x64 link

Windows, BSD, Mac OSX, ARM and DSP links can also be found in the parent directory index.

Things learned from Wordcamp 2012

I attended most of the developer track presentations at Boston’s Wordcamp 2012. I learned about some interesting tools and techniques that I’d like to document for myself and others.

Talk Optimizing for Speed by Ben Metcalfe

  1. YouGetSignal’s Reverse IP Lookup – Shows you how many other hosts live on the same IP Address. This can be helpful for anyone using shared hosting or maybe VPS.
  2. Debug Bar – Get debugging information from each page WordPress page load.
  3. Google XML Sitemaps – Delete this plugin if you have it. (I had it.)
  4. YSlow – Get load times and optimization tips of a page request.

WordPress as a Web Framework by Sam Hotchkiss

  1. MVC frameworks for WordPress
    1. WP MVC – Provides a singleton object and eliminates the metadata bottleneck by providing tables indexed by post IDs.
    2. Tina MVC
  2. _s Theme – Use Automattic’s Blank Theme as a good starting point.

Automating frontend workflow by Aaron Jorbin (blog post, slides)

  1. Autojump – Jump to frequently used directories
  2. Commander.js (nodejs) – Script working with CLI
  3. watch (nodejs) – Watch files/dirs
  4. mockjax – Fake your ajax calls (good for protyping or testing un-related, yet dependent functionality)
  5. Travis CI – continuous integration service (wordpress plugin tests)
  6. Glue – generate css sprites

Microdata for SEO by Dave Ross

  1. Add itemprop, itemscope, etc to any identifiable schema
  2. Google Rich Snippets Tool – Test your microdata
  3. Examples: SiteNavigation element for navigation, Blog element for blog posts, etc
  4. Some quick tidbits: Bing rates sites with microdata higher than sites without, and Google uses the microdata in search results

Enterprise WordPress by Jake Goldman (1up)

  1. Sites to show clients: showcase, WordPress VIP
  2. Maintaining a beautiful WordPress admin

Shortcodes by Jon Bishop

  1. Use oembed rather than plugins to support embedding media from sites like youtube, facebook, etc

Codex by Erick Hitler

  1. Use santize_* functions to save to db: santize_text_field(), sanitize_title()
  2. Use esc_* functions to show data to user (esc_url_raw() is the exception, it is the opposite of esc_url())

Javascript hooks by Luke Gedeon (1up)

  1. Javascript custom events are coming, they will provide functionality similar to WordPress’ action and filter hooks (list of hooks)

Command line python script to get context lines on a search string

grep -B and -B flags don’t work when grep is used on the command line with readline support. So I created this little script that does work on the command line. use -h flag to learn. Here’s how I’ve used it:

ls -al | ./printcontext.py -b 1 -a 1 -d test.txt

This finds the test.txt file and prints the 2 files around it.


#!/usr/bin/python
# print context when using a python script with readline support (command line piping)
# by inderpreetsingh.com

import sys, re
from optparse import OptionParser

def main():
    usage = "usage: %prog [options] needle"
    parser = OptionParser(usage)
    parser.add_option("-b", "--before", type="int", dest="before", default=0,
            help='Before context lines (a la grep)')
    parser.add_option("-a", "--after", type="int", dest="after", default=0,
            help='After context lines')
    parser.add_option("-d", "--debug", action="store_true", dest="debug", default=False,
            help='Debug information.')

    #Not implemented
    #parser.add_option("-o", "--output", type="string", dest="output")
    
    (options, args) = parser.parse_args()
    
    if len(args) != 1:
        parser.error("Specify what you want to search")
    
    needle = args[0]
    if options.debug:
        print "\nNeedle: %s\nBefore context lines: %s\nAfter context lines: %s\n" % (needle, options.before, options.after)
    

    lines = sys.stdin.readlines()
    lines = [x.strip() for x in lines]
    
    lastline = ''
    i = 0
    for line in lines:
        if needle in line:
#        if re.search(needle, line):
            first = max(0, i - options.before)
            last = min(len(lines), i + options.after + 1)
            
            if options.debug:
                print "Found '%s' on line %d, printing line %d to %d" % (needle, i, first, last)
                
            for println in lines[first:last]:
                print println
            print ""
        lastline = line
        i += 1

if __name__ == "__main__":
    main()