Friday, August 22, 2014

Gaming: NVidia Shield Portable

NVidia just recently released their new gaming portable, the NVidia Tablet. I just picked one up and will give my thoughts on it separately. This article is about it predecessor, the NVidia Shield, recently renamed the NVidia Shield Portable. Let me first go on to say, after a full year of using this device, I absolutely LOVE, LOVE, LOVE this device. It has become a constant companion for me wherever I go. Seriously. I do a lot of business travel these days, and I bring the NVidia Shield Portable with me more than I do my laptop. When I am around the house, I use the Shield more than I do any of my gaming consoles. I play it from bed, I play it when sitting on the couch. When I travel, the HDMI output goes right into the hotels TV, and if they have something stupid blocking it to try to force hotel content on you, I use my little Brookstone pico projector. So what makes this device so useful? I could go on about ram, storage, Tegra processors, blah blah blah. This is covered more in depth by the many gaming and tech sites out there. I don't need to cover that, its a dead horse at this point. What makes this so useful to me is games. In particular, emulators. I have been waiting for a device like this since the late 90's when the first emulators for NES and SNES hit the scene, when Nesticle and Genecyst first came out and made light year leaps and bounds over the slow and buggy emulators at the time and made console gaming on a PC a reality, I have been waiting for the day when it would hit a handheld form and have every retro system I love in one package. The PSP did a damned good job of this, but it required a hacked PSP. While nowadays it's childs play to hack the PSP, the Shield does everything I want out of the box and more. Emulates every system from the 2600 - PSOne full speed? Check. N64 most games at full speed, including Super Smash Bros, check. Netflix? Check. XBMC? Check. Mame arcade emulator? Check. Touch screen for supporting all games available for the Android? Check. A set of exclusives that take advantage of the awesome power of the Tegra processor, including support for the controller built into it? Check. Support for external controllers, through both bluetooth and USB (this includes the two bluetooth controllers that go with the Gamestick?)? Check. Ability to emulate a PC via PC emulators, so I can use a bluetooth keyboard and mouse and play old PC games? Check. All the other Android capabilities, such as web browser, email, and anything else in the App Store? The next thing is the form factor. A lot of people gripe about the clamshell design. For me, it works surprisingly well. Because it is portable and the screen folds out, I can play this in bed, or close the screen and hook up the HDMI and not have the Shield in the way. I only have one gripe about the device. 1 Single gripe. And that is the cross on the controller. For everything else that is so perfect about this device, that cross tends to "slide", making control with the cross a huge pain. Sometimes games will register an "up" instead of a "left" push because the cheap plastic on it has shifted to the top left. For most games, this is not a problem. But with certain precision games on the NES and SNES where timing of certain movements is key, it tends to flake, leaving a lot of reloaded save states. I hate having to use save states, but it becomes a necessity when you know that darn cross is going to get you killed. If I am using an XBox wires controller or the Gamesticks bluetooth controller, this isn't a problem. But I shouldn't have to rely on an external controller for precision control. Overall, this NVidia Shield Portable is, without a doubt, my favorite gaming device of all time. It has replaced my modded Wii and PSP as my goto gaming device for emulation. When I'm stuck in some crappy hotel, and I don't want to game, I can fire up Netflix and watch the new season of the Killing or House of Cards, or fire up XBMC and watch that last episode of Bobs Burgers that is sitting on my DVR at home and I can't get to. While I am excited to try out the NVidia Shield Tablet due to it's increased speed, I don't know that it will be replacing my Shield Portable simply because a tablet form factor isn't more convenient for me. When I spend some time with it I will write up a review and let you know.

Thursday, September 05, 2013

First Tutorial Video Release: BIRT Report Examples View

We started releasing a series of tutorial videos on YouTube. The first one, starring yours truly, is up right now. It covers a little known and under utilized area of the BIRT Designer containing a whole set of example reports. Check it out.

Thursday, August 08, 2013

BIRT: Using JSON

This topic has come up quite a bit. Using JSON in BIRT Reports. This comes up for just about everything, from using as a Data Source to serializing large amounts of parameters for use in a report design. Seriously, lots of stuff.

Since the Rhino engine has not been updated to a version passed 1.7R4, there is no access to the nice Rhino JSON methods. So, we have have a few options. Since Rhino can use anything in the Java JVM, we can use any 3rd party JSON parser out there. My preference is Google GSON library. The caveat is that you must build the object structure beforehand in Java, and then use the GSON to parse a string into the object representation.

 There are other options as well, such as these: 
http://www.birt-exchange.org/devshare/_/designing-birt-reports/1053-scripted-data-source-using-json

 I ran across the old school method of using an eval() statement to do the same thing. While not as safe, this is a much simpler, quicker method, and will suffice in most cases. And example can be found here: http://www.birt-exchange.org/devshare/_/designing-birt-reports/birt-json-scripted-data-set-and-parameter-parsing-r1484

 Update: Kristopher Clark, whom is a very talented member of the BIRT community, posted something similar. In his example, he is using Apache Commons to stream in a JSON file and use as a scripted data source. This showcases BIRT's ability to leverage anything within the Java Classpath in a report execution.

BIRT: BIRT DaVinci Plugin

Recently, I had the opportunity to catch up with the author of BIRT Chart DaVinci, Keith Howard, at a BIRT get together in the Bay Area. I had previously blogged about Chart DaVinci, so it's no secret that I like it. But there was always one little issue for me, and that was the manual application of the scripts. So, after chatting with Keith, we came up with a solution. Why not build a plugin for BIRT that displays all the styles in Chart DaVinci in a gallery that the user can select and apply to a report, and the plug-in does all the work. And that is exactly what I built. So, without further ado, the BIRT Chart DaVinci Plugin is available over at the BIRT Exchange. Follow the instructions and start applying some slick, pre-done styles to your BIRT charts.

Wednesday, July 17, 2013

BIRT: Report to get available Emitter ID's

Below is an example report that demonstrates how to get a list of available Emitters and their ID's and Formats from the Report Engine within a BIRT Report. Good thing the entire Report Engine API and Design Engine API are available within a report.


<?xml version="1.0" encoding="UTF-8"?>
<report xmlns="http://www.eclipse.org/birt/2005/design" version="3.2.23" id="1">
    <property name="createdBy">Eclipse BIRT Designer Version 4.2.1.v201209101448 Build &lt;4.2.1.v20120912-1721></property>
    <property name="units">in</property>
    <property name="iconFile">/templates/blank_report.gif</property>
    <property name="bidiLayoutOrientation">ltr</property>
    <property name="imageDPI">96</property>
    <styles>
        <style name="report" id="4">
            <property name="fontFamily">sans-serif</property>
            <property name="fontSize">10pt</property>
        </style>
        <style name="crosstab-cell" id="5">
            <property name="borderBottomColor">#CCCCCC</property>
            <property name="borderBottomStyle">solid</property>
            <property name="borderBottomWidth">1pt</property>
            <property name="borderLeftColor">#CCCCCC</property>
            <property name="borderLeftStyle">solid</property>
            <property name="borderLeftWidth">1pt</property>
            <property name="borderRightColor">#CCCCCC</property>
            <property name="borderRightStyle">solid</property>
            <property name="borderRightWidth">1pt</property>
            <property name="borderTopColor">#CCCCCC</property>
            <property name="borderTopStyle">solid</property>
            <property name="borderTopWidth">1pt</property>
        </style>
        <style name="crosstab" id="6">
            <property name="borderBottomColor">#CCCCCC</property>
            <property name="borderBottomStyle">solid</property>
            <property name="borderBottomWidth">1pt</property>
            <property name="borderLeftColor">#CCCCCC</property>
            <property name="borderLeftStyle">solid</property>
            <property name="borderLeftWidth">1pt</property>
            <property name="borderRightColor">#CCCCCC</property>
            <property name="borderRightStyle">solid</property>
            <property name="borderRightWidth">1pt</property>
            <property name="borderTopColor">#CCCCCC</property>
            <property name="borderTopStyle">solid</property>
            <property name="borderTopWidth">1pt</property>
        </style>
    </styles>
    <page-setup>
        <simple-master-page name="Simple MasterPage" id="2">
            <page-footer>
                <text id="3">
                    <property name="contentType">html</property>
                    <text-property name="content"><![CDATA[<value-of>new Date()</value-of>]]></text-property>
                </text>
            </page-footer>
        </simple-master-page>
    </page-setup>
    <body>
        <text-data id="7">
            <expression name="valueExpr">var x = 0;&#13;
var emitterInfo = reportContext.getReportRunnable().getReportEngine().getEmitterInfo();&#13;
&#13;
var sb = new Packages.java.lang.StringBuilder();&#13;
&#13;
for (x = 0; x &lt; emitterInfo.length; x++)&#13;
        {&#13;
            var info = emitterInfo[x];&#13;
            &#13;
            var id = info.getID();&#13;
            var format = info.getFormat();&#13;
            &#13;
            sb.append(id + " - " + format + "&lt;br>\n");&#13;
        }&#13;
        &#13;
sb.toString();</expression>
            <property name="contentType">html</property>
        </text-data>
    </body>
</report>

Thursday, December 13, 2012

BIRT: Writing BIRT ODA's

New article on writing ODA's for BIRT has been published on IBM Developerworks. As an added bonus, learn about the BIRT Data Extraction Task. Two kinds of awesome in one place. Check it out.

http://www.ibm.com/developerworks/library/ba-birtextpoints/