Install ShabadOS on Windows 10

As of December 2018, latest version of ShabadOS doesn’t come packaged as a binary/executable to install in Windows or any other OS. You must use the steps below.

If node/npm is missing on command line:

  • Install Chocolatey
  • Optional
    • In administrative shell (same thing used above to install chocolate), run choco install chocolateygui
    • Run chocolateygui
  • Install nvm Chocolatey (or the GUI).
  • nvm install 10.14.5

To install ShabadOS

  • In “elevated” command prompt, run npm i -g --production windows-build-tools --vs2015
    • Be very patient!
    • Using the vs2015 allows us to be able to install sqlite3, which doesn’t work with the newest version of windows-build-tools (vs2017).
  • git clone ShabadOS-desktop
  • cd ShabadOS-desktop
  • npm install
  • npm run dev to run on default development port 3000.
    • NOTE: npm run pack or npm run dist do not work.


  • To get a Windows shortcut for this. Create a .bat file with contents:
cd ShabadOS-desktop
set PORT=42424 # i.e. the port you want it to run on. 3000 is useful enough to keep for your daily development needs.
npm run dev

Raspberry Pi Zero as ShabadOS display

Source: Useful Git repo

  1. Get Raspberry Pi Zero W.
  2. Download Raspbian.
  3. Install the above .img file on an microSD card using Etcher.
  4. Avoid using a keyboard by setting up Rasbian to work over ssh.
    1. Create wpa_supplicant.conf file in root of the mounted drive.
    2. Create ssh file in the root of the mounted drive.
  5. SSH to the IP address (you can find “raspberry pi” on your devices list)
    1. Default username pi and password raspberry.
    2. Run passwd to reset the password from the default.
  6. VNC or remote display
    1. sudo raspi-config > 5 Interfacing Options > Enable VNC
      1. May have to restart the server. Be patient!
    2. Connect to VNC using the same IP (192.168.1.whatever:5900), username/password with software like RealVNC Viewer.
  7. When you first load the screen, you will be presented with “Welcome to Raspberry Pi” setup.
    1. Update all the software in this wizard.
    2. Customize to your locale, etc.
  8. Test if ShabadOS over wifi works:
    1. Open Raspberry Pi icon in upper-left corner, chose Internet > Chromium Web Browser.
    2. Load the http://IP-of-ShabadOS-search-machine:42424.
  9. To implement autoload on boot:
    1. mkdir -p ~/.config/lxsession/LXDE-pi/
    2. cp /etc/xdg/lxsession/LXDE-pi/autostart ~/.config/lxsession/LXDE-pi/autostart
    3. Edit ~/.config/lxsession/LXDE-pi/autostart file:
      # Old lines
      @lxpanel --profile LXDE-pi
      @pcmanfm --desktop --profile LXDE-pi
      # @xscreensaver -no-splash # Commented out (i.e. disabled) using # to get rid of screen saver
      # New lines
      @xset s off
      @xset -dpms
      @xset s noblank
      @unclutter &
      @chromium-browser --start-fullscreen --kiosk --incognito --noerrdialogs --disable-translate --no-first-run --fast --fast-start --disable-infobars --disk-cache-dir=/dev/null --disable-session-crashed-bubble


  • I’m more productive with vim than the default vi, so I’ll install vim: sudo apt-get install vim
  • Assign static IP to the ShabadOS server/remote device. The Display will always connect to that static IP.
    • is the static IP as shown above in autostart file.

Can’t disable phone number contact in LinkedIn job interests

LinkedIn has over the years done some shady stuff. Baiting customers to share their phone contact details repeatedly is something I’ll never forget. Or, maybe they won’t let me forget, since they still nag me every now and then.

Recently, I marked my profile to only receive Job Interests in specific field/roles. I was tired of receiving invitations/offers that I would have to politely refuse.

Problem is that once you mark your yourself for “Get contacted by phone” and put your phone number in the input box. I know, my fault for clicking through without reading. There is no way to remove it or save an empty field (i.e. no way to overwrite it). They require that you provide another phone number in its place. Yet in their help pages, they erroneously suggest to just uncheck the “Contact me via phone” checkbox: Uhh, yeah that’s not how dark patterns work. 🙂


Get a fake phone number for verification from Verify it through the LinkedIn page for Job Interests. Boom! Recruiters will be calling some useless phone number. Sorry for wasting your time, but I have no choice to save my sanity from cold calls.

Note: number did not work for me.

Avoiding PageKite limit on requests

PageKite proxy accounts may at times experience dropping connections. When using Pagekite as a callback for a service, it sometimes rejects connections with a failure like the following pasted. If you notice it says rejected=ips_per_sec, this means we’re facing throttling. Please note that the PageKite cli command is usually reporting “<< [flying] Kites are flying and all is well.”, while this error happens, so there is no chance that it is a problem with the machine running pagekite client.

There is a limit placed on all accounts to tackle spam and phishing. Email PageKite support to put your premium/paying account on the unthrottled list, so that you can avoid this artificial limit.


<frameset cols="*">

<frame target="_top" src=";where=FE&amp;proto=http&amp;;relay=::ffff:;rejected=ips_per_sec" />


<h1>Sorry! (fe)</h1>

<p>The HTTP

<a href="">


</a> for

<b></b> is unavailable at the moment.


<p>Please try again later.</p>

<!--  -->




More details about why this change was made can be found on the PageKite blog.

100 US Citizenship Interview Questions in Punjabi (Civics)


Read more100 US Citizenship Interview Questions in Punjabi (Civics)

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.
      1. NOTE for 4k Firestick (or maybe never devices): You must use 1.1.7 (which is not on the above Aptoide link). Download from modapkdown or
    2. Download from random sites using google. 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.


  • + More customizable: the home screen, widgets, launcher, unknown source apps, etc.
  • + Better notifications system. Ability to dismiss things easily enough compared to iOS. Notification groupings! Reply within notifications. Etc!
  • + Awesome integrations with lots of password managers. Personally I prefer LastPass to keep them synchronized with all my devices.
  • + Change default apps for anything.
  • + 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.


  • + Faster apps loads with better graphics
  • + Smooth camera operation
  • – Annoying notifications seem to never go away. Tough to dismiss all of them.
  • – 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.