Friday, July 3, 2015

Adding audio delay keyboard shortcuts to PLEX

I've recently learned that there is a possibility to add audio delay keyboard mappings for the Plex Home Theater on windows.

To do this, edit the file located in:
C:\Program Files (x86)\Plex Home Theater\system\keymaps\keyboard.xml

Add these entries:
<keymap>
  <global>
    <keyboard>
      <j>AudioDelayMinus</j>
      <k>AudioDelayPlus</k>
      <j mod="ctrl">SubtitleDelayMinus</j>
      <k mod="ctrl">SubtitleDelayPlus</k>
    <keyboard>
  <global>
<keymap>

to the file. That is, add he AudioDelayMinus and AudioDelayPlus under the existing "keyboard" tag if it exists, or create a new keyboard.xml file and write the above in it.

This will assign the keyboard buttons j and k to the AudioDelayMinus and AudioDelayPlus respectively.

To put this together with my Plex + Harmony + FLIRC configuration, I then assigned the channel up and channel down buttons of my "Plex" device (actually configured as a Panasonic TC-P65VT30, as mentioned in: http://programming-headbanging.blogspot.co.il/2014/08/configuring-plex-home-theater-with.html) on the harmony remote to the j and k keyboard keys to be able to change the audio delay while watching a movie through Plex.

There are other short-cuts available as well, generally, all those that were in XBMC's keymap:
http://kodi.wiki/view/keymap

Saturday, June 13, 2015

Connecting to a DHCP disabled router

Recently I had a need to connect 2 routers together to create a single LAN. The main reason for me was actually laziness, since I didn't want to pull another Ethernet cable through the walls.

In order to configure them correctly I followed the instructions found in:

What I didn't follow correctly, was step (3), which is to change the secondary router's IP to one in the main router's IP range.
All was working well, except when I wanted to reconfigure the secondary router, and was unable to do so.

You see, my main router was in the 10.0.0.X range, and the secondary was in the 192.168.2.X range. Since my PC was now receiving an IP in the main router's range, it couldn't connect to the secondary router's web service.

An easy solution would've been to reset the router to the factory settings where the DHCP is enabled. Unfortunately, the reset button on my router didn't work.

To get around that I had to get my PC to change to the secondary router's subnet:
  1. Disconnect the secondary router from the main router
  2. Go into my PC's network adapter
    1. Search for Network Connections
    2. Right-click the Local Area Connection
    3. Click Properties
    4. Click Internet Protocol Version 4 and go into its properties
    5. Change to "Use the following IP address:"
    6. Enter
      1. IP address: an IP in the secondary router's range (for instance 192.168.2.5 in my example) which isn't the IP of the router
      2. Subnet mask: in my case it was 255.255.255.0, but even doing 255.255.0.0 works
      3. Default gateway: the IP of the secondary router in its domain
    7. Press OK until you get back to the Local Area Connection
    8. Right-click the Local Area Connection
    9. Click Disable
    10. Double-click the connection to re-enable it
Now, all that remained was to type the router's IP in my browser and I could now enter it as I should.

To not have to do this again every time I want to access my secondary router, I then changed the IP to be one in the main router's range, and rebooted the secondary router. I then undid the changes above (changing the adapter's option to "Obtain and IP address automatically"), connected the secondary router to the main one's LAN port, and connected the PC to the secondary's LAN port.

At this point, I could enter the secondary router's web service through the new IP I gave it.


Saturday, June 6, 2015

AutoHotKey

A while ago I wanted to find a way to create keyboard short-cuts that weren't available out of the box for my windows PC. Looking around, I came by AutoHotKey (AHK) which seems to not only allow for keyboard short-cuts, but much more. AHK allows you to control all sorts of things on your PC, be it through keyboard inputs, or through scripts running on your machine that pick up changes on the PC to be used in any way you like. 

AutoHotKey can be downloaded here:
After installation it is a simple matter of right clicking a script file and selecting “compile script” to create an executable from it.

The main reason I started using AHK was for helping me use my harmony universal remote to control my PC, and mainly, to use it to open and control my PLEX client. More on this can be found here:

This brings me to my first script, which was naturally, opening the PLEX home theater:
This one uses a SHIFT+ALT+F10 key combination to open the file in:
“C:\Program Files (x86)\Plex Home Theater\Plex Home Theater.exe”, if the PLEX Home Theater executable isn't already running.

Here are the rest of the scripts I've written since then:

KeyPad-Letters: This had to do with my problem finding a way to enter letters in the PLEX search box from my remote, which had only a numpad.
So, with the help of this script, I essentially created a phone-like numpad. The script sends letters while pressing the number buttons of the remote repeatedly like you usually do on the TV or older phones with no keyboard.
So, for instance, if I want to write abg3 I'll be able to do that with the remote by: pressing 2, wait a second (or press Alt-Shift-F8), pressing 2 twice, pressing 4 once, pressing 3 four times.
the Keypad-Letters script can be found at:
This script also uses Alt-Shift-F8 (which I mapped through FLIRC, as explained in the other blog post I mentioned earlier) to stop the 1 second timer so that you could write other characters from the same number immediately without having to wait a second between each letter.

Close Display: By far my most used keyboard short-cut, this one uses WIN-q to close my PC’s display screen just as it would when the computer usually goes to sleep or shuts down. This is extremely useful when you've left your PC for a little while, and don’t want it to go to sleep or shut down. It saves power used by the display, and also protects it from being “burned” if your screen-saver takes a while to start. In general, it makes me feel better knowing that my display isn't sitting there waiting for someone who is not around.

Change Resolution: This script uses WIN-w to immediately set your current display to use a resolution of 1920 x 1200 (which is what my PC display should be using). This was useful to me when using PLEX, as it was run on my 1080p TV, and would sometimes keep my other display in this same resolution after I closed PLEX.

Change PC volume by resolution: This script listens to a resolution change event from the windows operating system, and sets the PC’s volume accordingly. As it happened, the volume I heard on my PC’s headphones was much louder than that heard from my other audio output to my receiver, which was used when watching PLEX on my 1080p TV. Instead of always increasing the volume manually, I created this script to automatically change the volume when my resolution was set to 1080p (which automatically happens when starting PLEX in my case).

One script to include them all (and in a single executable run them):
In order to run all these scripts together, and not as separate executables, I created one other script which essentially includes all the rest. This is simply done by creating another AHK script file that has this:
#Include c:\full\path\to\ahk\script\file\to\be\included.ahk

And to finish this whole thing off, I’ll give you a small tip on how to run scripts that need admin rights. Sometimes, you want a keyboard shortcut in AHK to run a program that needs admin rights. Instead of having to authorize to use it with admin rights every time you run the keyboard shortcut for it, you could run a VBS script that would require the admin rights only once (on startup for instance). After doing it once, it will keep those rights as long as it runs. Saving you unnecessary clicks and hassles. Of course, be wary not to give your admin rights away to any third party executable you know nothing about.
Just create a file with a “vbs” extension, such as ahk_scripts.vbs and add these lines:

Set UAC = CreateObject("Shell.Application") 
UAC.ShellExecute " c:\full\path\to\ahk\executable\to\run\with\admin\rights.exe", "", "", "runas", 1


 As you can see, AHK lets you have a lot more power over your PC. Almost anything you want to do with your PC has a way to do it, and I hope the examples above will give you a few good tools to start building the scripts you need.



Saturday, August 23, 2014

Plex + FLIRC + harmony

Here's my account on how I went about configuring the Plex Home Theater with FLIRC and a harmony ultimate.

I decided to have a look at PLEX since i'm going to be moving to an apartment where the PC will be connected directly to the TV. Since it will be directly connected, I won't be using my streamer, and I thought I should look into using a nice looking media player/server.

Already having a harmony ultimate remote, I looked around for various ways to get it to control the PLEX Home Theater, and i decided on FLIRC.

FLIRC is a cool piece of USB driven hardware that translates IR (Infra-Red) signals to keyboard clicks. Since it does the translating for you, it means the PC/Streamer or whatever you're using it on doesn't need to know anything about IR translation, It gets normal keyboard inputs as if from a regular keyboard.

In order to configure the harmony remote to control PLEX I used the old approach that doesn't include the FLIRC-PLEX profile in the harmony remote. Using this approach, we configure the harmony with a device that has a lot of IR codes that are different from one another. This approach lets me do all sorts of things with keyboard shortcuts, namely using AutoHotKey (AHK) to configure commands not in the PLEX command list.
Here's a word document with my mappings using the Panasonic TC-P65VT30 device in the harmony remote:

About the AHK scripts:
The script that directly affects PLEX, and is aptly named StartPlex.ahk, always runs on the PC (it is in my startup folder) and the extra keyboard shortcuts in it do this:
Alt-Shift-F10 - opens the plex client (theater)
It expects the PLEX Home Theater to be in:
“C:\Program Files (x86)\Plex Home Theater\Plex Home Theater.exe”. if it is not in the same location on your PC, change the ahk file and recompile it to create the executable (literally 2 clicks once you have AHK installed).

other than this one script, i urge you to have a look at my other scripts since they may fit your particular case as they did mine (posted here: http://programming-headbanging.blogspot.co.il/2015/06/awhile-ago-i-wanted-to-find-way-to.html)
. Things such as changing the PC volume automatically when starting PLEX, or changing the PC resolution with a keyboard click.
All my scripts are updated in this post:
 Now, all that's left is to sit back, click the PLEX activity on the remote and watch TV till we drop.


Debugging Tools

Here are a few very useful tools I've run across during my time programming:


Beyond compare (also for MAC, woohoo)
I find beyond compare to be the best compare tool around, so i was ecstatic when i found they finally had a MAC version as well:


Adding colors in XCode debug log


LogExpert. Perhaps the best freeware log tail tool around. Too bad it is only for windows


Using the MAC firewall to block ports/IPs (Up to Yosemite unfortunately)
Blocking port $1:
Sudo ipfw add deny tcp from any to any src-port $1
sudo ipfw add deny tcp from any to any dst-port $1

You will see after each line the rule number. To unblock:
sudo ipfw delete 200
sudo ipfw delete 100


XCode breakpoint in nested projects
How to add breakpoints in XCode for projects included in another project:
1.     Add the breakpoint in the nested project, then go to the breakpoints tab, right click the breakpoint you want, click move to -> user. After this step, the breakpoint will be visible in all projects which are open under "User".
2.     It is also possible to add a breakpoint through the lldb:                        (lldb) b client.m:42


Getting the most out of the MAC's magic mouse
better touch tool for MAC - http://www.boastr.net/


MAC Outlook email attach through a file's context menu


github chrome plugin
https://chrome.google.com/webstore/detail/octotree/bkhaagjahfmjljalopjnoealnfndnagc


Multiple Eclipse instances on a MAC
A plugin for eclipse on MAC that allows you to launch more than one instance:
1.       First install the eclipse marketplace:
2.       Help --> Install new Software… --> Add --> http://download.eclipse.org/mpc/indigo/


3.       Help --> Eclipse MarketPlace --> Search: OS X Eclipse Launcher