Posts

Showing posts from 2015

Enabling Microsoft Application Insights for Mule ESB monitoring

Image
Microsoft Azure Application Insights requires Mule 3.7 or later. Application Insights depends on org.apache httpclient and httpcore versions that are first bundled with Mule 3.7 Application Insights is an Azure based application performance dashboard that can monitor applications deployed inside, or outside, Azure.  Application Insights SDKs are available for a variety of languages with a heavy focus on standard library web driven applications or services. This blog entry describes how easy it is to enable Application Insights for a Mule ESB application that does not use any of the out-of-the-box supported web hooks. In this case, we monitoring the out-of-the-box JMX beans provided by Mule. Performance information is gathered by Application Insights where it is displayed in the Azure Portal. Mule exposes performance data about applications and flows via JMX.  Any of this can be forwarded to the Application Insights Dashboard. Steps Create an Application Insights in Azure

Enabling Microsoft Application Insights for JMX monitoring of a Spring wired Java application

Image
Application Insights is an Azure based application performance dashboard that can monitor applications deployed inside, or outside, Azure.  Application Insights SDKs are available for a variety of languages with a heavy focus on standard library web driven applications or services. This blog entry describes how easy it is to enable Application Insights for a Spring wired Java application that does not use any of the out-of-the-box supported web hooks. In this case, we are enabling Java / JMX monitoring of a custom Spring application running in my home lab. Performance information is gathered by Application Insights where it is displayed in the Azure Portal. I did this work as part of building a message driven application that had no true web interface. The application runs in a container that does not support tomcat or web filters normally used to enable Application Insight. Microsoft does a good job of describing how to monitor Java Tomcat, Struts, Spring MVC and other standar

How TFS 2013 Calculates Story points for Velocity Graphs

Image
TFS 2013 grafts Agile on top of their traditional task model.  The TFS web interface is significantly more functional than previous iterations. Sprint-to-Sprint Velocity TFS Scrum and Agile templates automatically calculate per sprint velocity  based on the  Story Points of User Stories with the current iteration path. Setting the Iteration Path essentially commits  the team to the User Story for that sprint. The following diagram shows the number of story points for User Stories committed to over the last 5 sprints. Green represents story points for C ompleted stories Blue represents  story points for Active  stories.  Previous stories can have some blue if stories were left open at the end of previous tasks. TFS Story Point Calculation Commitment Issues Teams commit  to certain stories in the sprint by putting them in the sprint Iteration Path.  They base the number of committed stories the sum of the story points for those stories. Many teams commit to User Storie

Cloning a Mac / Bootcamp disk to a larger drive

OWC and others recommend that you do a fresh installation when moving a Mac with Windows BootCamp to a larger drive.  That is probably a good idea. Sometimes you just decide to do things the hard way. This is what I did for my Macbook Air when I bought a larger SSD.  It had OS/X on the first partition and Windows 7 on the second partition. Backup your data. Create a Clozilla bootable thumb drive. Get an OWC drive with external case. Plug in the new drive in the external case. Boot Clonezilla from the thumb drive.  Clone the internal disk to the new, larger, external disk. Make an exact copy of the disk using Clonezilla. This exact copy will not make use of the full drive. Power off the machine Remove the old disk.  Install the new disk inside your machine. Boot into the mac OS on the disk you just installed. Move GPT bookkeeping data to the actual end of the disk. Download and use gdisk to copy the MBR/GPT info to the end of the new drive. You may be able to do thi

Fix partition issues relatively safely with P2V and V2P

Image
I foolishly decided to convert a Windows operating system drive from MBR partitioned to GPT partitioned. That conversion didn't go right. The boot portion of the drive was erased or destroyed. The partitions were still there and no data was destroyed.   I tried to convert the drive back to MBR.  That didn't work easier.  This is usually the point where you might start panicking. The cycle time is pretty long when you try and fix the boot portion of a physical disk.  There are continual physical machine restarts.  There is also risk that data will be lost while attempting to fix this. I wanted to attempt drive repair without risking destruction of data on the drive I was working on. In addition, I didn't want to work on this drive without access to the internet. My target laptop laptop has two bootable drives in it.  I realized that I could convert the trashed disk from Physical to Virtual using Paragon Drive Copy. Then I could hack on the virtual drive without risking

Trust No One Architectures

A Trust No One   Architecture is one where each organizational unit minimizes accidental risk by owning as much of their processes as possible.  Companies end up with a  Trust No One  architecture where each sub-organization is most likely to meet its' goals if it controls as much of its development, technical and operational processes as possible. Each division / operational unit acts as an independent entity with loose coupling at the edges and just enough cooperation to meet the company goals.  I recently attended a talk of a Departmental Information Officer for a large bank who said their software process accelerated and their business deliverables came in earlier when they pulled architecture, operations and infrastructure back from the corporate level to the department level. The bank traded costs, standards and duplicate work for time to market  and agility. This was in strong opposition to the previous attempt at minimizing risk by centralizing functions. Trust No

Protect RabbitMQ data by encrypting the Mnesia database on Windows Server

Image
RabbitMQ is one of the many caching and messaging tools that uses local disk persistent storage or as a backing store for in memory data.  These systems normally put data to disk in some format that is optimized for speed and not for security. Ex: RabbitMQ, ActiveMQ, Coherence, Gemfire, MongoDB. This can cause issues when trying to comply with policies around protecting Personally Identifiable Information  , making systems Payment Card Industry Data Security Standard (PCI DSS) compliant or when implementing S/Ox controls. RabbitMQ Installation We assume that you are running RabbitMQ under the local system account.  Users who run RabbitMQ under different accounts or in different locations must change certain commands or settings.  The RabbitMQ team has a good set of documentation on their web site. Windows installation instructions:  https://www.rabbitmq.com/install-windows.html Windows quirks:  https://www.rabbitmq.com/windows-quirks.html Database and configuration fil

IPad, Chromebook, Windows 8 Tablet long term family test

Image
We've been conducting a long term "family" test on our coffee table for the past year or so. Our test subjects include an IPad (2), an HP Chromebook 14' and a Windows 8 (Winbook) 10" tablet. The devices are primarily used for web surfing, news reading, basic word games, social media and research when people need to prove they are right as part of a discussion. Our previous coffee table device was a Macbook Air that has been appropriated for other uses. Chromebook #1 Coffee Table We've been surprised how much we like this device. A Chromebook takes some getting used to at first because you don't install any software on it and you don't have to do any patches.  Software hacks like me are initially completely lost when getting a new Chromebook.  You don't have to install software because you can't install software.  It is the closest thing to an appliance.  This Wi-Fi and T-Mobile enabled Chromebook has become the house go-to devic

Curse of the Project's Gold

Image
I've worked for a few different companies, worked in pre-sales calling on lots of vendors and taught classes and did training with from teams from many different organizations.  This is my current list "curses" based on those experiences.  You can find lots of project warnings using a little google foo. Here are mine: I worked a team where everyone got a box of gold treasure. Knowing when it is better to leave the gold in the chest... No one is sure who the business owner is. The original "primary business problem" is not addressed by the project. The company believes it is immune to the three legged stool of "Cost", "Quality" and "Time". More bodies are added in order to make the project go faster in the current sprint. An egregious version of  Brook's Law The project expands to justify the cost.  See  Escalation of Commitment The CIO says that "they have never had a project come in late". Upper man

C# IOIO and I2C devices

Image
The IOIO C# library on GitHub now has basic I2C support.  Protocol support and resource management is lifted from the Java library.  The upper API is message based rather than object based. TWI/I2C/SPI is managed via outbound messages. Data from I2C devices and message acknowledgements from the IOIO come back asynchronously via inbound Messages. Hardware This was tested with an IOIO V1, Bluetooth module, a  JeeLabs Expander Plug  and an old Computer power LED.   I2C device The Expander Plug is based on the  MicroChip MCP23008  port expander.  Programming examples are available on the Jee Labs web site. The Microchip web site has the chip programming guide. The LED assembly already had a current limiting resistor. I just plugged it in across the "+" pin on the expansion port and the port pin next to the power pin. The port expander default address is 0x20.  It has 10 registers that control behavior and transfer data. JeeLabs makes a bunch of 3.3v I2C devic

Sometimes your first impressions are correct

Sometimes you run across interesting outfits when interviewing or working with other organizations. You know you should slide away from an opportunity when... You think in the interview: "If these guys were an airline..." "The countryside would be littered with flaming wreckage." An interviewer describes their new approach and conversation goes something like: Interviewer : We're moving more of our software development off shore. You : That doesn't improve success rate if you don't change the way you do other things. Interviewer : Yes, but our failures will cost less They may not be as Agile as they think they are when They describe their agile SCRUM process: "They have one 3 month sprint per release" "They made the managers the SCRUM managers since they assign work anyway"  It may not be the technical opportunity they described... The senior architect interview includes: Writing Tower of Hanoi pseudo code in

Controlling a Servo attached to an IOIO from Windows WPF application

Image
The IOIO C# library on GitHub now includes a very basic Windows WPF application that lets you control a Servo with your mouse. The program assumes your IOIO is attached to your PC via Bluetooth and that you have a servo on Pin 3. Run the program from inside Visual Studio. Step through the disconnect exception if you run this with debugging enabled.

Backup the drivers when installing Windows 10 on a Winbook TW100

Yes, you can install Windows 10 on a Winbook TW100 or other BayTrail tablet.  There are postings on the Microcenter support web site where folks describe how to to this on other WinBook tablets like the tw700. I have only a couple minor things to add. The tablet has a 64 bit processor and a 32 bit BIOS/EFI.  Use the 32 bit Windows 10 ISO available from Microsoft. Windows 10 32 bit ISOs became available in January 2015. It only has 2GB of memory so a 32 bit OS is fine. I installed the enterprise version.  The standard version didn't work for me but it was probably pilot error Build a restore medea or backup the TW100 driver directory using one of the available tools. It would be best to build a restore media instead of backing up the drivers. This would let you go back to Windows 8.  I was unable to do this with any of my flash drives. I instead used a tool off of sourceforge to back up the drivers. I now Windows 10+ forever. Make a copy of TouchSettings.gt in C:\Windows\inf.  

Message Routing using Double Dispatch with C#

Image
This post describes message routing inside an application. It does not describe message routing across message brokers or across systems. Message driven, or push based notification, systems stream Messages from message sources to interested parties ( Observers) .  There are often multiple message types  routed to multiple observers.  Message types are represented in code as Message interfaces/classes. Message Observers are often interested in some subset of the messages and implement some type of interface or registration scheme that tells the message routing module which message types they are interested in. Scenarios One use case for this is a User Interface that streams UI events (M essages ) from various components to event handlers (O bservers ).  The message sources create messages specific to that event type. The event handlers may receive and process messages of one or more types. Another use case might be some type of IoT device like an IOIO that creates events at sc

Extremely Rough Cut at C# based IOIO Library

Image
I've pushed a very rough C# port of the Java IOIO library to GitHub github.com/freemansoft/IOIODotNet/   It communicates with the IOIO as a COM device over Bluetooth. IOIODotNet is a plain old Windows Library. I tried making it a Portable library but .Net portable libraries to don't support Serial devices. The library is a mess of pieces-parts right now with some unit tests that show how it works. There is also a WPF app. Tests and the WPF app poll serial ports to find a Bluetooth attached IOIO. This is a message based API Inbound traffic packed into messages and  routed to inbound handlers. You can add your own or you can poll the ones that exist. Outbound traffic can be sent directly via the API or through a message based API.  I intend that the Message API is the future of the library once resource management has been added. Look at the Integration tests to play with it. They expect at least one IOIO V5xx on a COM port with pins 31 and 32 tied together.

log4net configuration with MSTest and Visual Studio 2013

Image
I use log4net because it gives me easy class level control over logging levels and it has a lot of outbound (appender) types.  Folks that dislike log4net will not find this post useful. Visual Studio test output can be pretty confounding. There are way to many forum discussions around viewing test logs in Visual Studio. It sort of makes sense because some of the normal logging channels don't make sense in the test environment.  Phones, web apps, console apps, services all log in different environments.  The Visual Studio team changed the location of the logging views in VS2013 (or possibly 2012). Here is my "how did I do that last time" version of configuring log4net logging for unit tests.   Viewing Test Output Visual studio has an Output  window and an Immediate  window buty my output never shows up in either. I've tried routing the console output to the Immediate  window via the preferences. My output never shows up there. It seems like unit test output