This is a quick tip to show you how to get the Citrix Configuration Log, plus all the old and new property values, and convert this all to JSON.
Here is a quick tip for you. I had a need to get the Citrix Configuration Log, so I dropped into PowerShell and ran Get-CtxConfigurationLogReport. That is all good and well, but you do not get all the old and new values of the changed properties. However, converting this output to JSON will do just what I want. Plus, converting to JSON is better for me anyway as I want to push this stuff over to Splunk to do some analytics. Here is what you need to do:
Step 1 – Create your UDL file to connect to the database
This will prompt you for your SQL credentials. You can use Windows integrated security if you like, but I’m saving my creds for later use outside of my interactive PowerShell session later.
Step 2 – Get the things
# Load the Citrix Common Commands Snapin
Get-PSSnapin -Registered "Citrix.Common.Commands" | Add-PSSnapin
# Get the configuration log and convert to JSON
Get-CtxConfigurationLogReport -DataLinkPath C:\conflog.udl | ConvertTo-Json -Depth 10
Here is some sample output (notice the property old and new values)
This is the second part of the IoT workspace demo. This time, we will use proximity to kick off an Octoblu workflow without an iBeacon – mainly because this was a last minute add to the demo 😉
A Poor Man’s iBeacon
a.k.a. I needed a quick solution for proximity without an iBeacon
During the Citrix Geek Speak demo I previously blogged about, we needed a way to kick off everything. Steve and I discussed a few different ways of doing this, but we landed on using proximity – meaning when Steve walked over to the IoT workspace with a particular device, everything would light up and we would be off to the races. The correct way to do this would be an iBeacon, but this was a last minute decision and we didn’t have one. So, we used bluetooth paring on a laptop. The rest of this article explains that part in detail.
Proximity with a Laptop
My first thought was to write some code to accomplish starting an Octoblu workflow using bluetooth proximity. There are some examples out there for the pieces I needed for this (bluetooth pairing, bluetooth signal strength, curl, etc.). But then I thought that there might be something already written. Sure enough, I found 2 solutions (for Mac) – EventScripts and Bluetooth Proximity Tasker. EventScripts was more robust and felt more polished, but I ended up using Bluetooth Proximity Tasker for the simple fact that I could control exactly how strong of a bluetooth signal I needed to start/stop an action. This was important as I didn’t know ahead of time what the signal strength would be like on stage at Geek Speak Tonight (especially once the room filled up with fellow Geeks).
As you can see in the screenshot above, there is a slider that lets me choose the signal strength. The green bar you see above the slider is my actual signal strength. So, I would walk around to see what my actual strength was and set the slider appropriately.
AppleScript Kicks off the Flow
So now that we have have the bluetooth strength thing worked out, all we need is a script to kick off the Octoblu flow. Recall from my previous post that all triggers in Octoblu have a HTTP POST URL. I just used this URL and curl to work the magic. Here is the script:
say "eye oh tee, work space. activated"
set theURL to "[your trigger URL]"
do shell script "curl -X POST " & quoted form of theURL
The first line is a quasi-phonetic pronunciation for “IoT Workspace Activated”. That is about as close as I could get using AppleScript. The next two lines actually kick off the Octoblu IoT workspace in a green state.
So, there you have it. That is pretty much the complete IoT Workspace demo from my side of the desk. Octoblu is a lot of fun and I’m experimenting with other ways of using this software for business, home automation, and just plain fun (like Legos). Go experiment yourself and have fun!
Octoblu does some incredible stuff with physical things driven by software. Steve Greenberg and I did a demo during Geek Speak Tonight at Citrix Synergy triggering physical devices via a Splunk search. This article goes into some of the Splunk details.
An alternate title to this article might be “How Steve Greenberg and I Pulled off the Robo-Kitty Monitor Alerts at Citrix Synergy Geek Speak Tonight”.
In case you missed it, here it is below:
The Demo Scenario
Anyway, Octoblu does some incredible stuff with physical things driven by software. In the demo that Steve and I did, Steve set up an actual desk with various IoT devices on it. We will call this the “IoT Workspace”. The IoT Workspace had a digital picture frame, lights that can change color, a mini file cabinet (that held business cards), a maneki-neko (a.k.a. lucky cat) with several hacked features, a smoke machine, and more. We started the IoT Workspace using proximity (look for another article about how we did that soon). Then, I had a Splunk instance monitoring a Citrix stack including network, XenApp, hypervisors (XenServer, Hyper-V, and VMware), physical hardware (in this case Cisco UCS), shared storage, NetScaler, etc. At the beginning of the demonstration, the environment was all-good so everything glowed green, the Robo-Kitty was happy, and the picture frame on the desk showed an array of our favorite pictures (see below):
Then, the ICA Round Trip Time started to go up. Nothing terrible, but we used that as an indicator that our users might start seeing some lag in their sessions. This is where Splunk fired the first Octoblu trigger to go to a “yellow” state. The picture frame showed a worried Minion, lights turned yellow, and Robo-Kitty’s eyes turned yellow and started to swivel.
Next, Splunk showed problems with the XenApp servers and hypervisors in addition to the ICA Round Trip Time. So, Splunk triggered a “red” state. The Minion in the picture frame looked more worried, lights turned red, and Robo-Kitty’s eyes turned red and around faster.
Finally, the entire stack went to pot. The write latency on the storage array went through the roof, the hypervisors were not happy, the XenApp server resources were scarce, the ICA Round Trip Time was off the chart. Splunk triggered the “defcon red” state. Robo-Kitty shot lasers out of its chest, the storage cabinet on the IoT Workspace started to rattle, smoke was coming out of the desk. The culprit ended up being a write controller issue on the shared storage. Once everything was fixed, Splunk triggered the “green” state again.
How it Works
Steve did all the physical work building the IoT Workspace by hooking up Raspberry Pi, Gateblu, servos, lights, etc. Check out his article for more info -> http://www.thinclient.net/blog/?p=473. Steve also built the Octoblu flows to make all that stuff work.
I hooked up the Octoblu triggers in Splunk to kick off all these connected devices. A trigger generally initiates Octoblu flows. These triggers have HTTP POST URLs that can be used to remotely initiate the flows (see screen shot). This is how I had Splunk act upon the data seen in the Citrix stack.
I ran a Splunk real-time search and triggered a Python script that initiated the HTTP POST with data from the Splunk search to Octoblu when certain conditions happened. For example, if the ICA Round Trip Time exceeds 30ms and is less than 60ms, trigger a yellow alert condition. Here is the Splunk search:
sourcetype=ICA:RTT ICARTT > 30 ICARTT < 60 | eval url="<HTTP POST URL for the Octoblu trigger>" | eval alert_level="Yellow"
If you are interested, I have the entire Splunk/Octoblu example I used uploaded to GitHub. You can also download and use Splunk for free. There is a data generator built in there as well that will let you trigger different conditions like I did in the demo.
The magic happens in the saved search and a python scripted named octoblu_trigger.py. The saved search contains the HTTP POST url and the condition. The python script takes those parameters from the search and sends it over to Octoblu. If you want to play around with this on your own system, be sure to edit the saved search by opening the Octoblu app in Splunk and clicking Settings -> Searches, reports, and alerts:
Click on the example alert and change the URL to your Octoblu trigger URL.
Anyway, there you go. It may look kind of complicated at first, but really it is quite easy to trigger any Octoblu workflow given a variety of trigger situations.
Mobility is so ubiquitous that it is almost not even a separate thing anymore. I have had some experience building mobile apps and wanted to ponder some self-proclaimed theorems which are outlined in this article.
Mobility is so ubiquitous that it is almost not even a separate thing anymore. This creates a challenge for enterprises that offer BYOD mobile devices and corporate data access. How do you enable the mobile workforce with enterprise applications? One way is to roll your own mobile application to get the necessary data into the mobile user’s hands. I have had some experience with this and wanted to ponder some self-proclaimed theorems which are outlined below.
Mobile applications developed for native devices with native code are superior.
The following is an example of what you might need to build native mobile applications for various mobile devices:
Android SDK, Android NDK
Eclipse, NetBeans, IntelliJ IDEA
C# and others
Window 8 Metro Style Apps
Java ME + Optional Packages + API extensions
Unfortunately, BYOD makes Theorem #1 hard. If you are going to go the native code route, you have to maintain a separate code base (with separate IDE’s) for all possible devices your users will bring in. There are some other frameworks that I’ll talk about in another article that help with this, but there is always a tradeoff.
Apps that Look Better are Perceived to be Better.
Looks matter. Period. If you give an application to a user that has limited functionality but looks sexy, that application will be perceived as better than an application that has more functionality but is ugly. You know it’s true.
Therefore, do yourself a favor and use a framework like one of the following:
These frameworks make it easy to make it look like you know what you are doing (at lease design-wise)
Inverse Proportions are Everywhere.
There is always a tradeoff somewhere. Referencing the picture above, think about painting a room. I can paint a room with a paintbrush and not waste too much paint. However, to speed things up, I use a paint roller and waste more paint. Therefore, the ease/speed in which I paint a room is inversely proportional to how much paint I waste.
The same thing is true for security. If everyone in the world had a public IP address with wide open ports, things would be pretty easy if there were not bad guys/girls out here. In the real world, there are bad guys/girls out there, so we have to attempt to keep them out. The security measures can be a burden on the user. Therefore, security is inversely proportional to usability.
There, of course, is a tradeoff. Building mobile apps with abstraction layers like PhoneGap introduce translation. You may not have access to all mobile device features immediately, there can be a performance tax, and apps will tend to be bigger. Not all mobile frameworks are created equal and I will talk about some pros and cons of different frameworks (like Xamarin, Citrix Mobile SDK for Windows Apps, Intel XDK, etc.) in a separate article.
So, there you have it. My self-proclaimed theorems for mobile app development. Agree? Disagree? Or, have something else to add? Just leave a comment below.
Citrix Synergy is back in Anaheim, California this year and I will be live-blogging the keynote. You can watch the keynote live at CitrixSynergy.com as well. I am sure there will be a focus on mobility, but with the release of XenDesktop and XenApp 7.5, I am excited to see Citrix getting back to the future (again).
Starting with XenDesktop 7, Citrix stores the data the Desktop Director displays in a SQL database. Citrix opened up this data via a Monitor Service API that uses OData. I’m not going to go deep into the details of the API as it is fairly well documented at the eDocs site. The examples in the documentation show you how to access this data via web browser, Microsoft Excel, and LinqPad. What I want to do in this article is show you how to use PowerShell with this API.
To start out, let’s take a look at the Citrix Monitor Service schema (click to enlarge):
Suppose we want to get all sessions as well as the all the connection/disconnections to the session. The following URL will return the data we want in XML format.
Citrix Synergy is in Anaheim, California this year. With the recent release of Excalibur, it will be interesting to see what is revealed during the keynote. I’ll be live-blogging the keynote this year. Check it out here or on Twitter @JasonConger.
It is time for Citrix Synergy, and I will be live-blogging the keynote. With the recent release of Excalibur, I expect the keynote focus to be a lot around capabilities and features. I also expect to see some more around mobility, networking, and cloud. Be sure to stay tuned here and/or follow me on Twitter.
Citrix Synergy has returned to Barcelona, Spain. That means that I will be live blogging the keynote again this year.
Citrix Synergy has returned to Barcelona, Spain. That means that I will be live blogging the keynote again this year. Last year in Barcelona and earlier this year in San Francisco, Citrix talked a lot about public/private/personal cloud. I am looking forward to see som fruition out of their vision. I also fully expect Mark Templeton to have “one more thing” at the end of the keynote as well. Stay tuned… Continue reading “Citrix Synergy Barcelona 2012 Keynote Live Blog”
In this post, we will go over the installation steps of the Citrix XenApp 6.5 Mobile Application SDK, explorer what is added to the XenApp 6.5 server during installation, and compile one of the samples given in the SDK.
Now that we have setting up an Android emulator out of the way, let’s take a look at installing the Citrix XenApp 6.5 Mobile Application SDK and what the install does to a XenApp 6.5 server.
There are 2 parts that you need in order to develop applications that utilize mobile capabilities on a XenApp 6.5 server:
When you install the Mobility Pack, 2 new services are added to your XenApp server:
Citrix Location and Sensor Virtual Channel Service – this service enables a server side application to leverage Location and Sensor capabilities.
Citrix Mobile Receiver Virtual Channel Service – this service enables a server side application to use mobile device capabilities.
These 2 virtual channels are kept separate for security reasons. Maybe you want to have mobile device capabilities available, but you cannot enable GPS features due to security compliance. Location services are disabled on the Citrix Receiver by default. The way to enable the location capabilities is via Citrix policies. In order to use these policies, you will need to install the Citrix Group Policy Client-Side Extensions. These extensions are part of the XenApp Mobility Pack .zip file.
This policy is located under ICA\Client Sensors\Location. Notice that by default, location is disabled.
Citrix XenApp 6.5 Mobile Application SDK
So, the requirements for the Citrix XenApp 6.5 Mobile Application SDK state that you need Windows 7 64 bit (and the MSI is even named XenApp65MobileApplicationSdk64), but it installs to ..\Program Files (x86)\Citrix\MobilitySDK\. I tried installing the SDK on a Windows 7 32 bit system as well and it worked, so I’m not sure if something absolutely will not work on 32 bit.
I’m using Visual Studio for the examples. It appears that Visual Studio Express (free) will work as well, but I haven’t tested that myself.
Anyway, the documentation that comes with the SDK is pretty comprehensive so I’m not going to rehash it here. Since I will be showing you some of the examples using .Net, I do want to point out that you will need to run one of the following commands on your development machine in order for things to work:
Notice that there is a 32 bit or a 64 bit DLL register. So again, not sure why Windows 7 64bit is a requirement for development. Anyway, make sure you run the appropriate command above as administrator, otherwise you may receive an error stating “The module was loaded but the call to DllRegisterServer failed with error code 0x80070005” (which is a permissions error).
The final part of this article will focus on compiling and using the examples that come with the SDK. The one I’m going to point out here is the picker example. This example uses the native device’s UI to display a list of options. The example is actually a console application that has no graphics, so it is actually using the local device’s display mechanisms rather than trying to do some trickery on the XenApp server side. So, here we go…
Browse to \Program Files (x86)\Citrix\MobilitySDK\samples\native\showpicker
Double click on showpicker.sln to open the solution in Visual Studio
Build the solution by pressing F6
This will create an executable in \Program Files (x86)\Citrix\MobilitySDK\samples\native\Win32\Debug\showpicker.exe
Copy this showpicker.exe to your XenApp 6.5 server (I copied mine to \Program Files (x86)\Mobility\picker\showpicker.exe)
Publish the application via Citrix AppCenter
Launch the published application using an Android device (or emulator) with the latest Citrix Receiver installed.
NOTE: You may receive an error message that states “The program can’t start because MSVCR100D.dll is missing from your computer…” Here’s why – the solution was built in debug mode. Thus, debug DLL’s (notice the “D” in the DLL name) need to be on the XenApp 6.5 server. Here is what you can do:
From: \Program Files (x86)\Microsoft Visual Studio 10.0\VC\redist\Debug_NonRedist\x86\Microsoft.VC100.DebugCRT\msvcr100d.dll on your development machine
To: \Windows\SysWOW64\msvcr100d.dll on your XenApp 6.5 server
You could technically build the solution in Release mode instead of Debug mode and be okay, but to perform remote debugging, you will want to have the debug DLL on your remote machine. Speaking of debugging, here are 2 great write-ups on how to debug the mobile applications:
Once you pick one of the colors, the console application will give you feedback on the chosen item. When the appropriate receiver is available for iOS, then the native iOS selector would be shown with no code changes on the developer’s part. That is pretty cool!
In the next article on this topic, I will show you how to use mobile device orientation to change what is displayed to an end user. The example will include data and graphics. Stay tuned…
One of the coolest SDKs I’ve seen come out in quite a while is the Citrix XenApp 6.5 Mobile Application SDK. As of this writing, only the Android version of the Citrix Receiver is supported so I will show you how to set up an Android emulator with the Citrix Receiver for testing purposes.
One of the coolest SDKs I’ve seen come out in quite a while is the Citrix XenApp 6.5 Mobile Application SDK. Citrix defines the XenApp 6.5 Mobile Application SDK as “… a rich tool kit for developers to write touch-friendly, mobilized applications that are hosted on Citrix XenApp and delivered to any device with Citrix Receiver. These mobilized applications are able to leverage a wide set of mobile device functionality including GPS, sensors, cameras, and device buttons in the same way that locally running, native applications do.”
As of this writing, only the Android version of the Citrix Receiver is supported (iOS is on the way). Since I do not own any Android devices and I was anxious to get started, I had to set up an emulator and install the Citrix Receiver to get going with the SDK. Here is how I did it.
Install the Android SDK
Go to the Android SDK download page (http://developer.android.com/sdk/index.html) and pick the correct installer for your platform. I’m using Windows, so I chose the .exe installer file. After you run this .exe, you still do not have the emulator. The reason for this is the Android SDK archive initially contains only the basic SDK tools. It does not contain an Android platform or any third-party libraries. You must install the Platform-tools and at least one version of the Android platform using the SDK Manager.
I installed the Android SDK Platform-tools and all options for Android 4.0.3.
After the install completes, be sure to add %ProgramFiles%\Android\android-sdk\platform-tools to your PATH environment variable. This will be handy later for installing the Citrix Receiver.
Create an Android Virtual Device
After the installs complete, you can launch Android Virtual Device Manager (AVD Manager). This can be found in the Windows start menu under Android SDK Tools \ AVD Manager. AVD Manager is used to create various virtual devices running the Android OS.
As you can see, I created an Android 4.0.3 device with 100 MiB of local storage. The more storage you add to your AVD, the longer it will take to boot. Since this AVD is only being used for XenApp 6.5 testing, I only allocated 100 MiB. The first boot of your AVD will take a little longer than subsequent boots.
Download the Citrix Receiver for Android
Now that we have a functioning Android emulator, we need to get the Citrix Receiver installed. The first thing we need to do is download the .apk (Android Package) file. Normally, I would just go to http://www.citrix.com/receiver and choose “Android”. But, as of this writing, when you do that, you are redirected to the Android Marketplace. Unfortunately, Android Marketplace does not work on the Android Emulator. So, here is what you can do instead:
Go to http://www.citrix.com/downloads and choose “Receiver for Android” from the drop down list. From there, you can select the Android client and download the .apk.
Install the Citrix Receiver for Android
Ok, so now we have a functioning Android emulator and the Citrix Receiver downloaded. The final step is to install the Citrix Receiver onto the emulator. Here’s how:
Copy the .apk file to %ProgramFiles%\Android\android-sdk\tools
Open a command prompt and change the directory to %ProgramFiles%\Android\android-sdk\tools
With the AVD you created running, execute the following command: