Friday, March 30, 2012

Understanding SuperAgent Network Regions

I've found that many people don't understand the concept of regions in a network definition in SuperAgent.  Given the power of a region to make defining networks easier and give more granular reports, I'm actually quite surprised that it hasn't been evangelized a bit more.  So, here's my explanation:

SuperAgent organizes data according into buckets.  SA could store the analysis data for every single client IP address in its own bucket in the database, but that's kind of the point of MTP.  Also, having reports that are that granular are only helpful if you already know where the problem is.  In addition, if you think about it, storing the analysis of two client IP addresses in two individual buckets in the database doesn't make sense if those two client IP addresses are connected to the same switch, which is using the same router to get to the WAN which is coming into the same network hardware in the datacenter.  If the two clients are using all the same network hardware, measuring two different network round trip times for those two clients is virtually impossible.  Think about it, the only thing that is different is the client's NIC, which doesn't really affect SA metrics, due to modern technologies like TCP offload engine (TOE) which bring the ACK turn around time on the NIC down to sub-millisecond.

Ok, so there's the reason to summarize networks according to the network path.  If a bunch of IP addresses use the same network path to get back to the servers monitored by SA, there's not much value in storing the analysis on a per-IP basis.

However, for groups of IP addresses that do use different network infrastructure, it is imperative to separate them so that the differentiating network hardware can be isolated and therefore identified and troubleshot (troubleshooted?).

Therefore SA provides the ability to define client networks.  Each client network instructs SA how to group IP address blocks together and treat them as one unit for analysis and storage.  Each network definition should only contain the IP addresses that share all of their network infrastructure.

This is nice because it cuts down on the amount of configuration required in SA.  To illustrate, let me give an example.  A US company has decided that its IP address scheme is to allocate an entire /10 block of IP addresses to each time zone (e.g. 10.0.0.0/10 for Eastern, 10.64.0.0/10 for Central, 10.128.0.0/10 for Mountain, and 10.192.0.0/10 for Pacific).  It then decides to allocate an entire /19 block of IP addresses to each site within that time zone (e.g. 10.30.0.0/19 for NYC, 10.74.32.0/19 for Chicago, & 10.200.128.0/19 for LAX, among others).  This is actually really easy to configure in SA.  The networks would be defined in SA as such:
Network NameNetworkMask
EST10.0.0.010
CST10.64.0.010
MST10.128.0.010
PST10.192.0.010
NYC10.30.0.019
......19
CHI10.74.32.019
......19
LAX10.200.128.019
......19
Each of the time zone IP address blocks should be configured so that any clients in the time zone that don't match a site definition get categorized somewhere.  Any traffic showing up in those networks is an indicator that a site is missing.  On a side note, the time zone networks could be given their own network type and special, tighter thresholds could be applied so that incidents trip immediately for any amount of NRTT.  A special network incident response could be setup to send an email to the SA admin to notify him/her that traffic has been seen on a time zone network (indicating a site network definition that is either missing or incomplete).

While this is great, the network administrators at the US based company decided that a standard of 32 VLANs should be implemented at every site.  Each VLAN should be a /24 subnet and each VLAN has a standard use (floor 1, floor 2, floor 3, printers, servers, wireless, etc.).  With the networks above defined in SA, the network administrator won't be able to differentiate between bad performance on a wireless VLAN and bad performance on a wired VLAN.  At this point the administrator has two options: 1) either he can rebuild all the network definitions defining every single /24 subnet or 2) he can define 32 regions in each of the site network definitions.  The better option is #2.  Here's why:

Defining 32 regions on a /19 network definition in SA is equivalent to defining all 32 /24 sub-subnets within that /19 network.  It's shorthand.  Once defined, the /19 network definition will have a plus sign (+) next to it.  When clicked, the admin can see that SA actually has 32 networks defined within that /19.  The nice thing is that they are all grouped together according to site (/19 network).

One disadvantage is that the name originally assigned to the /19 network is the same one originally assigned to all the sub-subnets (regions).  This however can be overcome by expanding a /19 (hitting the plus sign) and renaming the VLANs as necessary.  Each region can be named individually.  The way to get around this is to use option 1 and create a CSV containing all the /24 networks each with a site name prefix and a VLAN designator (name and/or VLAN number).

Thursday, March 29, 2012

Understanding SA Discovery and Pruning/Grooming

First of all, a little conceptual history around SuperAgent:
SuperAgent was meant to automate the task of analyzing packet captures for essential metrics indicating server or network latency.  An engineer wanted a better way to do it than manually and SA was born.  Since its inception, it has grown by leaps and bounds increasing its capabilities.  Despite the growth, one major concept has remained: SA is meant to automate a manual process for your top applications.  This is not a scalability issue.  It's something fundamental to the through process behind every revision of the product.  SA is meant to analyze the transactions of applications of interest to determine where latency lies.

With the most recent version, SA added a feature that automatically discovers and configures applications.  This opened up a whole new area of SA since admins didn't have to automatically configure the applications they were interested in.  All they had to do was identify the servers that might be involved and SA did the rest.  Expectations began to rise since admins could now easily increase the bounds of what was considered an 'application of interest'.

In order to prevent performance problems that might arise in very complex environments, the developers imposed a limit on the discovery process.  When the discovery process has discovered and configured 1000 servers or 1000 applications (whichever comes first) a pruning process will begin.  This algorithm reevaluates the active combinations every 5 minutes to determine which 1000 servers and which 1000 applications will remain in the configuration.  This doesn't affect any applications configured by the administrator and shouldn't affect the largest, most active applications.  Administrators have to understand that this is by design and that the applications configured in SA don't necessarily represent all the applications hosted by a server.

Luckily, the server and application limits can be raised with a simple query in the database.  To view the current limits execute the following query:
select * from parameter_descriptions where parameter like 'maxNumAuto%';
Updating those values will change the limits.  Remember, those limits were put into place to prevent performance problems.  Also SA hasn't been tested by CA's QA department with any limit other than 1000, so if you run into any problems after changing those limits, you'll get push back from support because of it.  This is one of the things included in the CIG, which is basically required for every case, so support will know that you did it.  

I have increased the limits by 500 in some cases, just to push the envelope a little.  I didn't experience severe, immediate problems.  If you need much more than that, consider more infrastructure (read more SA master consoles).

Wednesday, March 21, 2012

Disabling SuperAgent Relationship Groups

When an application is configured in SuperAgent, the application actually consists of two parts: the application configuration item itself and the servers assigned to the application.  In order to grant permissions to specific applications, administrators would need to create a group in NPC containing both the application configuration item and the servers.  The problem with this is that the group that would be created would be static; any time the application configuration changed in SuperAgent, the group would have to be updated.

The answer to this problem is a pair of group sets created by SuperAgent that contain these items.  One set contains a group for every application in SuperAgent containing the application CI and the servers assigned to it.  The other set contains a group for every server containing the server and any application CIs the server belongs to.

This worked well in the past when applications were manually configured.  This only resulted in twice as many groups as the number of applications/servers that the admin was willing to configure.  However, with the advent of automatic application discovery and configuration in SuperAgent, it is possible that the number of these groups could skyrocket.  This high number of groups can degrade the performance of NPC sync.  As a result, there is a need to disable them.  The only bad part about disabling them is that you no longer can take advantage of the dynamic groups for permissions purposes.

In order to disable these groups, you have to go to SuperAgent and execute a couple of queries.  Before executing any queries you find on the internet, you should backup your database.  There.  You have been warned.
REPLACE INTO parameter_descriptions(Parameter, Level, Type, DefaultValue, Description) VALUES ('SyncRelationshipGroups',   'ProductSync', 'boolean', 'false', 'Sends App/Svr relationship groups to the performance center'), ('SyncRelationshipsEnabled', 'ProductSync', 'boolean', 'true',  'Sends App/Svr relationship combinations to the performance center');
UPDATE parameter_descriptions SET DefaultValue = '0' WHERE Parameter IN ('pullLastFullSyncTime', 'pushLastFullSyncTime', 'pullLastIncrSyncTime', 'pushLastIncrSyncTime');
UPDATE parameter_descriptions SET DefaultValue = 'true' WHERE Parameter = 'pullForceFullSync';
After running these queries, kick off a full resync of NPC.  It may take some time for all those groups to get deleted from NPC.  I don't suggest doing this on multiple SA MCs at once.  Do them one at a time and let NPC sync with one before moving on to the next.

Friday, March 16, 2012

How to Build or Modify Groups in NPC by using XML

In a previous post, I discussed how to build application reporting groups using dynamic system groups.  While this strategy is the recommended way of building application reporting groups, it can become tedious to actually copy and paste all the system groups into your application group.  Especially if you have the most recent version of SuperAgent and it has discovered a ton of applications and networks.  Luckily, there is an unpublished easier way: XML.  NPC has the ability to use XML to modify the group structure.  This includes the ability to put referential copies of system groups into custom application reporting groups.

The following is an excerpt from some documentation I wrote about how to use the web service to modify various portions of the NetQoS systems:

Group management in NPC is performed through the AdminCommand web service (found at PortalWebService/AdminCommandWS.asmx?WSDL ).  Adding or removing groups and adding or removing members from groups is accomplished by invoking the UpdateGroups operation (found at PortalWebService/AdminCommandWS.asmx?op=UpdateGroups).  Three main parameters are required: (1)useIDs, (2)allowDeletes, and (3) XML defining the groups (the groups to be added/removed/updated).  Groups themselves are defined explicitly in the XML while membership of groups is managed by a set of rules applied to each group.  Managed objects that match the rules are included as members of the group, objects that don’t match are excluded.  
The first two parameters are global and don’t change often.  The parameter useIDs instructs the operation whether or not to use the group ID values from the XML definition when identifying the group to be updated.  The useIDs parameter will need to be set to ‘true’ to ensure the correct groups are updated.  The only time a value of false would be used is when a single XML file is being used to import a group structure from one NPC system to another.

Thursday, January 19, 2012

Fighting SOPA and PIPA

SOPA and PIPA are two pieces of legislation aimed at decreasing the amount of illegal piracy that happens on the internet.  They could, if passed in their current version, grant the government powers that could cause problems for legitimate web sites.  I can't say it much better than Wikipedia and Google.  Read the information available before making any decision.

One thing I can do is help spread the message.  If you have a Twitter account and live in Texas, the following links will tweet a message to the Texas congressmen and women asking them to represent their constituents by opposing SOPA/PIPA.

Brought the bill to the house:
Lamar Smith

Texan representatives on Twitter:
Joe Barton
Kevin Brady
Michael Burgess
John Culberson
John Carter
John Cornyn
Henry Cuellar
Quico Canseco
Lloyd Doggett
Bill Flores
Kay Granger
Gene Green
Charlie Gonzalez
Louie Gohmert
Al Green
Ruben Hinojosa
Kay Hutchison
Jeb Hensarling
Sheila Jackson Lee
Eddie Johnson
Michael McCaul
Kenny Marchant
Randy Neugebauer
Pete Olson
Ron Paul
Ted Poe
Silver Reyes
Pete Sessions

Friday, January 13, 2012

How to Use Poll Instance Properties in a View


If you aren't completely, 100% comfortable with manipulating the database manually, stop reading this post now.  If you continue reading this post, you do so at your own risk.

In NV (and NPC if you've jailbroken it), you can create views using the NV Custom View Wizard.  One of the things the developers did but didn't really publicize is that you can pull poll instance properties into those views.  This includes any custom properties you may have added to the poll instance.  By default all poll instances have at least two properties: 'Name' and 'Description'.  Built in dataset poll instances (like ifstats) will have other properties which you can also use.  The trick is that you have to manipulate the database slightly in order to instruct the view to even look at the properties.  It isn't too bad, but like I said before, if you don't know how to do this with your eyes closed, don't try it.
  1. First you have to get the control id of the view (technically called a control) you have just created and will be modifying.  This is pretty easy to get, just open the view in the wizard and look in the url for the controlid parameter.  In this example, the id is 1200031.
  2. Next you need to get into the database and take a look at the control properties for your control.  Something like this: 'select * from control_properties where controlid=1200031 order by pageid, propertiesid, userid, propertyname;'
That should result in something like the following.

ControlID PageID PropertiesID UserID PropertyName PropertyType PropertyValue Editable Enabled
1200031 0 0 0 ColumnNames string latencymin,latencyaverage,latencymax Y Y
1200031 0 0 0 ControlType string PollInstance Y Y
1200031 0 0 0 Create.Date string Added at 1/13/2012 9:05:07 AM by nqadmin Y Y
1200031 0 0 0 data.chartType string Table Y Y
1200031 0 0 0 DataSetName string ISILONPerf Y Y
1200031 0 0 0 Description string This report focuses on the worst values for the specified parameter and therefore may be more prone to problems or failure. Y Y
1200031 0 0 0 DisplayFormats string ms|ms|ms Y Y
1200031 0 0 0 DisplayNames string Minimum,Average,Maximum Y Y
1200031 0 0 0 drillDown.target string Y Y
1200031 0 0 0 FieldNames string latencymin;latencyaverage;latencymax Y Y
1200031 0 0 0 FieldNames2 string Y Y
1200031 0 0 0 FieldNames3 string Y Y
1200031 0 0 0 FieldNames4 string Y Y
1200031 0 0 0 FieldNames5 string Y Y
1200031 0 0 0 Filepath string /nqWidgets/Poller/wptTopN.ascx Y Y
1200031 0 0 0 footer.text string Y Y
1200031 0 0 0 Limit string 10 Y Y
1200031 0 0 0 MibTables string ISILON_MIB.nodeProtocolPerfEntry Y Y
1200031 0 0 0 OrderBy string latencyaverage DESC Y Y
1200031 0 0 0 PropertyNames string Description,Name Y Y
1200031 0 0 0 RedThreshold string Y Y
1200031 0 0 0 Title string Isilon Node Performance Table by Protocol Y Y
1200031 0 0 0 Wizard.Action string ReportWizard('/npc/ReportWizard.aspx?PageID={PageID}&CtrlID={CtrlID}&PropertiesID={PropertiesID}'); Y Y
1200031 0 0 0 yaxis2.ColumnNames string Y Y
1200031 0 0 0 yaxis2.DisplayColors string Y Y
1200031 0 0 0 yaxis2.DisplayFormats string Y Y
1200031 0 0 0 yaxis2.DisplayNames string Y Y
1200031 0 0 0 YellowThreshold string Y Y

  1. You'll notice that I have a property called PropertyNames.  This is the entry you need to add to this table.  The propertyname will be 'PropertyNames' as shown.  The propertyvalue will be a comma separated list of the properties you would like to be available to this view.  For example, since I want both the description and the name properties available to this view, I added them both in there.
    You would normally add this record using an insert SQL statement.  A 0 in the pageid, propertyid, and/or userid fields represents a wildcard.  Technically, a view can exist multiple times on a page.  If it does, the pageid will contain the id of the page on which the control instance(s) exist(s).  The propertyid refers to which instance of the view on the page.  The userid refers to any properties that the user may have modified and saved to only their account.  If you want this change to apply to all instances of the view, the easiest would be to make the change to the default (pageid=0, propertyid=0, userid=0) then re-customize any views that have been customized.
  2. Once you've got that done, you can go back to the view wizard.  Go to the 4th step.  You can now use the property values within expressions or the 'Where' field.  The syntax is as follows: p_PropertyName.property_value, where PropertyName is the name from the comma separated list you entered into the database.  In my case, if I wanted to display the description, I would create an expression called 'Description' and the expression formula would be 'p_Description.property_value'.
One of the nice things about exposing properties is that you can use the properties in the 'Where' field of the view.  The where field allows you to pre-filter the view so that only certain objects show up.  For example, if I knew that the description contained an enumerated set of values (cifs, nfs, http, other), I could create a view that only shows the cifs objects by putting "p_Description.property_value = 'cifs'" in the Where field.

Unfortunately, this doesn't work for device properties like sysLocation, sysContact, sysName, sysObject, etc.  However, there is a script floating around that will take those parameters and store them in custom poll instance properties, which could then be exposed using this method.

Monday, January 9, 2012

How to convert VHS to DVD

We don't have that many VHS tapes lying around our house.  However, our wedding video is one important exception.  As a present for my wife on our 10 year anniversary, I decided to see if I had enough junk in my garage to do a conversion to a digital format so we could watch it.  Turns out I do.

The first think I would obviously need is a VHS player, also known as a VCR.  Fairly simple, nothing special.  I might have gotten a little better quality if the VCR had an S-video output instead of RCA composite video.  Maybe.

Friday, January 6, 2012

How to Wipe a Computer

I find myself leaving another job in favor of a better job.  Has happened quite a bit recently.  I wonder what that says about the economy?

Anyway, I've got another laptop I need to wipe clean before I can turn it back into my previous employer.  I figure, while I'm doing it, I might as well write down the various techniques.  You may want to do this anytime you're turning in an old computer or recycling it or giving it away.  Who wants to leave all that personal information on a computer!?

There are basically two options, the preference will be up to you.

Thursday, January 5, 2012

How to get Free HD TV

I hinted in my previous post that I made Hulu obsolete at our house at the time that I installed my Apple TV.  I didn't perform any real magic, but I do want to explain how I did it in case anyone out there is looking to do the magic that I do.

I normally only watch Hulu for ABC shows since I don't get good reception on our TV for the ABC affiliate here in Houston.  Let me explain.  Before I added the Apple TV to the mix, I used an antenna mounted in my attic which fed a signal to a pair of USB HDTV tuners connected to a pc connected to my TV.  I used Windows Media Center (WMC: a free piece of software included in every version of Windows Vista and Windows7) to watch and record TV.  WMC has a free guide built in and since I used two tuners, I could record/watch up to two shows at one time.  It was great.  I could pause live TV, I could schedule my favorite shows to record, and since it was a full blown PC, I could watch Netflix and use Hulu Desktop for online content.  I could even watch general conference via the internet browser.

All of this was great, except that the position of the antenna didn't give me great reception on ABC and I only got fair reception on some channels, missing out on the secondary channels altogether in some cases.  So, at the same time that I installed the Apple TV, I chose to get one other piece of hardware to alleviate the need of having a PC connected to the TV.  After all, I had to have the PC turned on all the time in order to ensure that all my shows would get recorded.  That combined with a big external hard drive that I had hooked up for TV show storage added to the power and heat inside my little entertainment cabinet.  I knew that I could use my XBOX as a media center extender, so I knew I could shift the load from the TV PC to my office PC.  The only problem was that I would have to run coax cable from the antenna down to my office and then plug in the two USB HDTV tuners.  I didn't want to have to run more cable through the wall.

The solution was to get a SiliconDust HD HomeRun Dual.  I found it used on the internet (thank you Amazon) for around $75.  The advantage of this device is that it combines the two tuners into one device and it uses Ethernet as opposed to USB for connectivity to the Windows Media Center PC.  This means that instead of running a coax cable from the antenna through the walls to my office PC, I could just run an Ethernet cable from the antenna/HomeRun Dual to my home router.  Since this is much easier due to the placement of my router, this became the optimum solution.

So, I installed the HomeRun Dual in the attic and connected it to the antenna.  I ran an Ethernet cable from there down to my punch-down and from there patched it into my router.  I installed the little utility on my office PC and fired up WMC.  WMC found the tuner on the network without any real work and before I knew it, I was watching TV on my office PC.  As it turns out, any other PC on my network can use one or both of the tuners as long as another PC isn't using them.  They are a pool of tuners available to everyone on the network.  Awesome!

The only problems was that the reception had changed.  I wasn't getting all the channels I was getting before or I was getting them, but not well enough to watch.  This wasn't unexpected since any time you change wiring in regards to an antenna, things can change.  I decided I needed to get my antenna higher so it would get better reception for those channels.  I mounted the antenna on the chimney and checked things out.  Lo and behold, I got wonderful reception on all the channels I used to get and I also now get very good reception on ABC and the affiliates.  I even now get 3 sub-channels to PBS!

Now that I get ABC, I don't really need Hulu.  If there is something I want to watch that I don't get through Netflix, over the air HDTV, or isn't in my collection of DVDs, I can always check Hulu.  If all else fails, Amazon and gohastings.com are always there to help with a used DVD.

Wednesday, November 23, 2011

NPC Application Groups

As mentioned in a previous series of posts, when building groups in NPC, there needs to be a 'Reporting Groups' group.  Expanding on the need for reporting groups, I figured I'd detail exactly what should go into that group and how to work with it.

The most important group that should exist in the reporting groups is an application group.  This application group doesn't contain any objects of itself and really isn't used for any reporting.  It's just there to assist in managing the groups that it will contain, namely application groups.  While the strategies outlined in my previous posts build the groups needed to organize the geographical layout of your infrastructure, the Applications group is where the logical layout of your applications is built to facilitate reporting on individual applications.

Monday, November 21, 2011

What a unified object model means

After spending some time talking with customers at CA World, I've realized that not everyone gets the vision of a unified object model.  The other observation is that even though QR codes are everywhere (and I mean everywhere people, open your eyes!), half of the self proclaimed "techies" out there have no clue what a QR code is.  To continue with this tangent, I can't wait until we have 3D detectors on our phones and can keep them in our pockets.  Along the same line, just wait until a phone in your pocket can pickup and store the information encoded in 3D QR codes you pass by every day.  But I digress.

A unified object model is a method of designing systems so that they all have a concept of the types of data objects with which they will all interact.  For example, gohastings.com knows what a DVD is.  When I search, I can search for just DVD's or I can include books and video games.  This is a simple example, but the fundamentals are the same.

As for network monitoring software, it is essential that any user interaction interface know about the different types of objects contained there.  It is my understanding that this is one of the main goals of the Catalyst project at CA.  Before anyone out there begins to argue, I'm not saying that this is the most technically direct definition. I'm trying to boil it down.

NPC actually already utilized a somewhat unified object model, implementing a concept called context.  Context is refers to the object of focus of a control or page.  For example, one type of context in NPC is the interface context.  The interface context allows NPC to understand what an interface is and what products report data pertaining to interfaces.  ReporterAnalyzer (aka NFA), eHealth, and NetVoyant all deliver interface based statistics.  Since NPC knows what an interface is due to the object model implemented, it can deliver a mix of information from all three products.  The object model in NPC has its limitations, however CA has promised to expand that model (Catalyst).

For me, some of the most important contexts are group, site, application, server, router, switch, generic IP based device, interface, CPU, and memory, among others.  While it would be good to have a complete list of all the basic and intermediately complex contexts, what is most important is that context be extensible.

NetVoyant actually accomplished this in part due to the nature of the self certification process.  While top level contexts were fixed (group, router, switch, server), the child objects could be extended by building a new certification.  The advantage of this is that NetVoyant knew about every different type of child object.  Whether it was a temperature probe, a UPS battery, or a server case intrusion detection switch.  Also, every context had its own set of pages.  Which meant that when I drill into a battery, I always see battery related data.  When I drill into an interface, I always see the same interface report with the same layout, with the same types of graphs.  The only difference was the object focused on.

One of the limitations of the NetVoyant object model was that it only partially allowed for different types of devices.  While drilling into a server, a switch, or a router took me to their individually designed and tailored pages, any other type of device (firewall, WAP, wan accelerator, et al) would always take me to the same set of 'generic device' pages.

To some extent, this is the point of a unified object model.  Implementing the knowledge of how objects interact with each other and what kind of data is associated with each type of object.  Along with this, Catalyst seeks to unify how systems interact with each other when requesting information about each type of data.  By unifying and classifying this data and standardizing how the data is shared, more integrations can be made with less effort.  And that's the whole point of a unified object model.

Thursday, October 27, 2011

Automatically Tweeting with a QR Code

To continue with my QR fever, I've been looking into what can be easily automated using QR codes.

Twitter
The first thing I found is how to tweet from a QR.  This is fairly easy since any QR can contain a URL; So, the only thing needed is a URL that will tweet.  A quick search on the web revealed this.

http://twitter.com/home?status=insert%20your%20message%20here

Use these codes for special characters – (%20 is a space) (%40 is @) (%25 is #) (More here).  Given that, you could even include a mention, a hash tag, or even a tiny url.  I'm trying to figure out how to include a location in a tweet, but that's proving more difficult.  If anyone knows how to do that, please let me know.  Once you have the text, you can put it into the QR code generator on Google's chart API.

Facebook
The next thing I found is how to make a QR code to get someone to Facebook.  Unfortunately, there's not really an easy way to get people to 'like' something on Facebook by just scanning the code.  What you can do is point people to your Facebook page (or to any URL really) and hope they like it from there.  One thing you can do is point them directly to a 'like' page within Facebook.  This is accomplished by creating a URL like this:

https://www.facebook.com/plugins/like.php?href=http://stuart.weenig.com

Click on the link above to see what this looks like.  You can replace the href=http://stuart.weenig.com with your own URL (like href=http://www.facebook.com/NetQoS).  This will bring up a very small like button that the user can then click on.  The nice thing about this is that if they're already logged into Facebook in their browser, they'll get a richer experience.

LinkedIn
Turns out sharing something to LinkedIn is pretty easy.  I used the qr generator at QR Stuff to figure out the link:

http://www.linkedin.com/shareArticle?mini=true&url=http%3A//stuart.weenig.com


I thought it was weird that the colon needed to be translated but that the forward slashes did not.  If you find that you need it, the URL code for a forward slash is %2F.  As you can see by clicking on the link above, the forward slashes do not need to be encoded for the share to work.

Locations
My next goal will be to figure out how to enable location based check-ins through Facebook and twitter.  If anyone already knows how to do that, let me know.

Wednesday, October 26, 2011

Using QR Codes to Share Contact Information

I recently saw a QR code at the entrance to a local hobby store here in town and decided to see what would happen if I scanned it with my camera. Since I already have a QR reader app on my phone, I fired it up and took the shot. I was startled to see that my phone now had a contact screen showing the contact information for the store, hours, website, etc. It was pretty cool, especially since the store is a local store that has nothing to do with high technology.

Since then, I've decided to get ready for CA World by seeing how hard it would be to put my own contact information into a QR code. Then I could paste the QR code onto my badge and quickly and easily share my contact information with other people at the convention. It took a while and I learned a little bit, but here are the results:

The best place I've found to generate a barcode was (surprise, surprise) Google. They have a chart API that you can use to build charts and display them on web pages. Very cool. As it turns out, all QR codes are really just text. You start by embedding contact information in a very simple markup (popularized by NTT DoCoMo), then pasting that into the QrCode chart type.  Tweak the parameters and you end up with a nice little code that can be read by most scanners.

The trickiest part is to format the text using the markup language.  For example:
MECARD:N:Stuart Weenig;URL:http://stuart.weenig.com;

would result in this QR Code:


In order to embed more information into the code, just add fields.  For example, you can add one or more telephone numbers.
NameN:Designates a text string to be set as the name in the phonebook. (0 or more characters) When a field is divided by a comma (,), the first half is treated as the last name and the second half is treated as the first name
Phone NumberTEL:Designates a text string to be set as the telephone number in the phonebook. (1 to 24 digits)
Video Phone NumberTEL-AV:Designates a text string to be set as the videophone number in the phonebook. (1 to 24 digits)
E-mailEMAIL:Designates a text string to be set as the e-mail address in the phonebook. (0 or more characters)
MemoNOTE:Designates a text string to be set as the memo in the phonebook. (0 or more characters)
BirthdayBDAY:Designates a text string to be set as the birthday in the phonebook. (8 digits) The 8 digits consist of the year (4 digits), month (2 digits) and day (2 digits), in order.
AddressADR:Designates a text string to be set as the address in the phonebook. (0 or more characters) The fields divided by commas (,) denote PO box, room number, house number, city, prefecture, zip code and country, in order.
URLURL:Designates a text string to be set as the homepage URL in the phonebook. (0 or more characters)
NicknameNICKNAME:Designates a text string to be set as the nickname in the phonebook. (0 or more characters)

Another idea I had was to tape a QR code on the back of my phone. So that in case it gets lost, someone can at least know who it originally belonged to. This would also make it easier to share contact information with just about anybody.

Thursday, October 20, 2011

Techno Nursery

We're getting ready for 2 pair of little feet destined to arrive around February.  As such, I've been preparing the nursery.  I finished the moulding (still need to touch up a couple places) and got some bookshelves in.  As usual, I wasn't satisfied.  I needed to tech-ify the room.  So, I had a couple ideas:

Idea #1: Remote Lullaby
Over the last few months, I started collecting lullaby music into a playlist (thanks, Jewel for the inspiration and the starting tracks).  I even burned a CD so I could pop it into the little CD player/radio we put in there.  However, I knew that wouldn't do.  So, I dusted off the old Dell Hybrid pc and installed it behind some books on one of the bookshelves.  I dropped a network jack into that room and set it up as a headless pc.  The idea is to connect some small speakers and use the remote app on my iPhone to control the streaming of the lullaby playlist from my desktop to the nursery.  The idea being that I could roll over in bed and start up a lullaby without even getting out of bed.  So far so good.  Just gotta pick the speakers that are going to be connected to the pc.

Idea #2: Baby Monitor
Luckily for me, someone had already come up with a good way of doing this.  It only took about 20 minutes of searching on the web before I found JumiTech.  They have built an agent and an iOS app that work together to stream video from a webcam to an iOS device.  So, I installed their agent, plugged in a very, very old webcam from the garage, spent 20 minutes getting a driver that would install, and installed the app on my phone.  I started up the agent then started up the app on my phone.  After a couple of clicks (no serious configuration) I was looking at my face on my iPhone from the point of view of my little old webcam.  Very slick.  Next step is to purchase a night vision enabled webcam to see if it will work.  I should also be able to view the webcam from anywhere on the internet, thanks to UPnP.  I've disabled that for now, but we'll see if it becomes something I will enable later.  The agent supports audio, but since the webcam doesn't have a microphone and also since it only streams audio when connected, this won't work as a complete baby monitor replacement.  However, it's very cool that I can just rollover to my nightstand and within a couple clicks see into my nursery.

If you have any ideas for cool technology improvements for the nursery, I'd love to hear about them.  What else can I do with a network connected PC in the nursery?


Tuesday, October 11, 2011

How to use APD


APD (Application Performance Dashboard) is a very useful widget in NPC.  It allows the report designer to create a crosstab-like report showing the performance of a single set of networks when connecting to multiple applications.  The nice thing about this is that application traffic can be consolidated into a single view that is easy to troubleshoot.
The first thing you do is determine which network group to focus on.  If you've followed my best practice and created and 'All Sites' group, this usually becomes a great group to use for the network.
The next thing to do is to configure which applications these networks should connect to.  In order to see which of your SA configured applications are your front end, you can go to SA and look at the performance map filtered by the 'All Sites' network group.  The applications listed with the highest observation counts are probably your front ends.
After that, you can configure the back end applications.  The easiest way to do this is within the wizard itself.  Click 'add second tier' and look for the application with the highest observation counts.  APD counts a second tier application whenever it sees the server(s) of a front tier application acting as a network and connecting to the second tier application.  The same applies to a third tier application.

If you have a load balancer that only changes the destination address (and not the source address) on incoming packets, the true second tier application will appear as a first tier application.  In that case, add the true second tier application as a first tier application to the APD.

Friday, October 7, 2011

Hiding the D: drive (the restore drive) from Windows

Most computers today come with the hard drive split to look like 2 hard drives.  The reason manufacturers are doing this is because one is used for the computer and the other contains all the files necessary to restore the PC to factory settings (reimage the pc).  Since that partition is usually sized so that it doesn't have that much free space, nobody ever uses it as extra storage space.  As a result, it's pretty much a useless drive until you need it.  So, why not hide it from the operating system?  It could be done, but the manufacturers don't want to take the time to do it.
Taken from howtogeek.com:
Open regedit and navigate to HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer
The NoDrives key most likely does not exist by default, so you’ll need to create it with right-click \ new 32-bit DWORD and name it NoDrives.
This value is a 32 bit number, and the bits are arranged in reverse order with a value of 1 hiding that drive. For example, if we wanted to hide drives A: and F: we would arrange it like this:
Z Y X W V U T S R Q P O N M L K J I H G F E D C B A
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1

Converting 100001 to decimal we end up with a decimal value of 33 or a hex value of 0×21, so if you double-click on the key in the registry editor, choose Decimal and then enter 33 into the value field.
In order to see these changes, you’ll need to restart explorer.exe, which you can do easily from Task Manager or the longer way by just logging off and back on.

Thursday, October 6, 2011

NPC Sites and Groups 7 of 7: GXMLG - Exporting the Configuration Files

Part of a series of posts.  To see all posts, click here.

Once the sites and networks are completely configured in the tool, configuration files can be generated for NPC, NetVoyant, SuperAgent, and UCMonitor.

Before an NPC configuration XML file can be generated, the tool need s to know the path to the ‘All Sites’ group. If an XML file was imported that was exported from an existing ‘All Sites’ group, the tool extracted this information from the XML. If a CSV was imported or the Sites/Networks list was built manually within the tool, this setting must be input manually on the ‘Import’ tab of the tool.

Three other settings of importance exist on the ‘Import’ tab: NVDatasource, SADatasource, and UCMDatasource. If the values of these fields are set to ‘true’ the tool will include rules in the NPC XML for that type of datasource. The tool will also include CSV outputs for those data source types. Setting the value to anything other than ‘true’ will exclude that type of data source output.

There are two options for exporting the configuration files. On the ‘Export Config Files’ tab, the ‘Export All Config Files…’ button will prompt for a location to output the files. The tool will save the XML and CSV files in that target folder. Those files can then be imported into their corresponding products.

The other option for export is to click the individual generation buttons. These will generate the output and place it into a text box in the tool. The text could then be copied and pasted into a text editor to save the files.

Wednesday, October 5, 2011

NPC Sites and Groups 6 of 7: GXMLG - Automatic Config File Generation

Part of a series of posts.  To see all posts, click here.

At this point, this is all the information strictly needed to start with a Sites/Networks list and end up with a fully populated Sites group in NPC, a NetVoyant that should be discovering all devices at all sites, a SuperAgent that only needs an active monitor port, and a UCMonitor that only needs an active monitor port (if monitoring only Cisco telephony).

The obvious next step is to implement this into the product in such a way that this configuration is done in NPC and synchronized to the sub-products. However, since CA is currently sans an NPC Product manager, we’ll have to suffice ourselves with a third party tool.

Tuesday, October 4, 2011

First impressions of the iPhone 4S

I just finished watching the keynote video for the iPhone 4S. I have to say I am impressed. I am really excited about the release of the new iPhone, but I think I'm more excited about the release of iOS 5.  In my household there are two iPhones and an iPad, so the release of a new operating system is more exciting to me than a new device.
The release of Siri could turn out to be revolutionary or it could flop. There have been other voice recognition technologies, however none have used real English language commands. For example, Windows 7 and Vista both include voice recognition technology, but in order to use that you have to stick to a pre-defined list of commands.  The fact that Apple's new device allows you to speak to it in normal words could mean success where others have failed.
iOS is set to release next Wednesday, so, I'll give a full review of the new features when I get it installed.

In the mean time, I've promised a review of the Boxwave clip-on keyboard for my iPhone.
All in all, it's what I expected.  I hoped for a physical keyboard.  Here are the pros:

Pros

  • It was incredibly easy to setup.  I have used Bluetooth before, so I was familiar with the general pairing process.  It wasn't any different from any other Bluetooth device I had ever used.  
  • It's Bluetooth, so it doesn't require any cables and it doesn't occupy my sync port.
  • It is a physical keyboard, so typing on it has been an improved experience over the virtual screen keyboard because of the added real estate and because of the tactile nature of a physical keyboard.
  • It has a 'show/hide keyboard' button that allows me to show or hide the virtual keyboard just in case I ever want to go back temporarily.  I've actually had occasion where using the virtual keyboard was better (I'll explain in the cons).
  • It has arrow keys!  I can use the arrow keys to move the cursor around.  This is especially helpful when i'm editing text that I've typed incorrectly.  I can go back to the mistake without having to erase everything after the mistake and do it again.  The arrow keys also allow for 'home' and 'end' functions, especially helpful when typing.
Cons
  • Charging - while the keyboard is charging, there's a light.  When it's done charging, all the lights go off.  This is disconcerting because I came back after an hour of charging it the first time and I thought the charger had become unplugged and it hadn't been charging.  I discovered that about 20 seconds after unplugging it and plugging it back in, the charge light went out, hopefully indicating a full charge.  After a few charge cycles, this is indeed the behavior.  It was not documented anyway.  Boxwave, put a green light on there that lights up when it's fully charged.
  • They keyboard is not lit - the keys on the keyboard are not lit up which means that when it's dark, I can't use the keyboard.  I fumble around for the 'show/hide keyboard' button (or just power off the keyboard) to force the virtual keyboard to come up and I can use it like normal.  So basically, when it's dark, the keyboard is dead weight.
  • The apostrophe requires a function key to be pressed.  This is annoying since there are other keys, like the equals sign, that don't require a function key.  The apostrophe is going to be much more utilized than the equals sign.
  • Function/Shift keys - the keyboard has a plethora of function keys to allow numerals and additional characters, which is great.  However, when typing in a long string of numbers or special characters (think :-)), I can't just hold down the function key.  I can either press and depress the function key between each character (frustrating) or I can double tap the function key to go into function lock (double tap again to undo function lock).  While both of those options are great, I'd also like the ability to just hold down the function key and put in all the special characters I want.  Same goes for the shift key.  That way, it acts more like the keyboards I've been using for the last 30 years.
  • Autocorrect - now that I'm using an external keyboard, iOS' internal auto correct feature doesn't always work.  For example, if I type 'i', it doesn't get corrected to 'I', nor dont to don't.  Nor does it automatically capitalize the first word in new sentences.
That's pretty much it for now.  If I come across any other glaring problems, I'll post them.

NPC Sites and Groups 5 of 7: UCMonitor Locations and SuperAgent Networks

Part of a series of posts.  To see all posts, click here.


UCMonitor Locations
As mentioned before, the relationship between NPC Sites and UCMonitor Locations should be a 1-to-1 relationship. Locations should be named the same way the locations are named in NPC. All that remains is to ensure that the networks that correspond to each site are added to each corresponding location.

UCMonitor locations can be imported via a CSV file. The syntax is described in the Installation Steps documentation and is shown below: