Sunday, 28 September 2014

Outsourcing to Freelancers

As businesses begin to grow the need for outsourcing their work to meet demand becomes paramount especially if they are to meet critical timelines and achieve success. This is true for businesses within Australia, where most companies rely on outsourcing their work overseas simply because they cannot get local resources or they cannot meet deadlines.
There are numerous sites that offer outsourcing and who allow projects to be posted by employers for freelancers to bid on. This can be a very cost effective way of getting the job done especially when dealing with small projects less than $1K. There has however been many critiques on the outsourcing websites. Any user can search for the word scam and get many hits on blog articles written by disgruntled freelancers.
Sadly to say when you begin to read these articles it becomes evident that most of the issues relate to a communication breakdown. The bloggers clearly have ESL (English as their second language) and lack detail and etiquette when resolving issues. The language and lack of detail in the articles highlight a more sinister objective of the blogger which is disappointing at best.
This does not instill confidence to the business owner in the outsourcing process.Surprisingly enough most projects are starting to become more complex. The need to scope the work and micromanage the project becomes extremely important for great success. We don’t deny that outsourcing doesn’t have its issues but truthfully neither does any project you embark on.
This is where local talent can play an important role. Angelo Laris has over 15 years' experience in the IT industry mainly as a technical lead. Angelo has managed teams both locally and abroad where he has worked in countries including USA, New Zealand, Korea, Singapore, Indonesia and Thailand.
Please feel free to contact me at any time.

Cloud Data Backup

As businesses rely on technology even more than ever before the need to backup for business continuity is extremely important. With today's technology businesses now have cost - effective solutions to back up their data. Organisations can have cloud backups using either a public cloud data backup or a private cloud data backup.
Public Cloud Data Backup

With a public cloud data backup service the server setup is done entirely by the provider. Whilst the data is secure it does use public infrastructure for storing the data. For small organisations for 1-5 users where data is not extremely sensitive, i.e. a simple password protection can suffice, Microangelo recommends using the Public Cloud Data Backup.
Private Cloud Data Backup

With a private cloud data backup service the server setup can be locally or hosted in the cloud. The data is secure because not only do you own the locally/hosted secure server, the data transfer is encrypted. This is great for larger organisations i.e. 2-50 users. For this scenario Microangelo recommend using the Private Cloud Data Backup for secure backups and versioning.
Please contact me at anytime

Thursday, 18 September 2014


Introduction to ISO/IEC/IEEE IT Standards

When it comes to IT Documentation and Governance one of the best sources for compliance is the ISO/IEC/IEEE standards. They provide both standards and best practices, for a successful IT project and business. Experts from around the world contribute to the standards so they provide their experiences and insight to assist businesses provide their IT project goals.

ISO (International Organization for Standardization)
ISO is an independent, non-governmental membership organization and the world's largest developer of voluntary International Standards.

IEEE (Institute of Electrical and Electronics Engineers)
IEEE is the world's largest professional association dedicated to advancing technological innovation and excellence for the benefit of humanity. IEEE and its members inspire a global community through IEEE's highly cited publications, conferences, technology standards, and professional and educational activities.

ISO and IEEE have partnered together to provide new opportunities to adopt and jointly develop international standards to serve the global marketplace.

The following is a summary of the ISO/IEC/IEEE standards that are currently applicable to the IT Industry with links to their respective websites:

Quality Management 

ISO/IEC 9001:2015 Quality management systems — Requirements (Part of the ISO 9000) Family Quality Management Guidelines - Software Engineering
ISO/IEC 90003:2008 Software engineering — Guidelines for the application of ISO 9001:2008 to computer software

Software Quality 

ISO/IEC 9126-1:2000 Information Technology — Software Product Quality — Quality Model
ISO/IEC 9126-2:2000 Information Technology — Software Product Quality — External Metrics
ISO/IEC 9126-3:2000 Information Technology — Software Product Quality — Internal Metrics
ISO/IEC 9126-4:2000 Information Technology — Software Product Quality — Quality In Use

Metrics Software Process Assessment aka SPICE (Software Process Improvement and Capability dEtermination) 

ISO/IEC 15504-1:2008 Information Technology — Software Process Assessment — Concepts and introductory guide
ISO/IEC 15504-2:2008 Information Technology — Software Process Assessment — A reference model for processes and process capability
ISO/IEC 15504-3:2008 Information Technology — Software Process Assessment — Performing an assessment
ISO/IEC 15504-4:2008 Information Technology — Software Process Assessment — Guide to performing assessments
ISO/IEC 15504-5:2008 Information Technology — Software Process Assessment — An assessment model and indicator guidance
ISO/IEC 15504-6:2008 Information Technology — Software Process Assessment — Guide to competency of assessors
ISO/IEC 15504-7:2008 Information Technology — Software Process Assessment — Guide for use in process improvement
ISO/IEC 15504-8:2008 Information Technology — Software Process Assessment — Guide for use in determining supplier process capability
ISO/IEC 15504-9:2008 Information Technology — Software Process Assessment — Vocabulary

Software Life cycle processes 

ISO/IEC 12207 Systems and software engineering — Software life cycle processes

Systems Life cycle processes 

ISO/IEC 15288 Systems and software engineering — Systems life cycle processes

Systems and Software Engineering 

Systems and Software Quality Requirements and Evaluation (SQuaRE)

ISO/IEC 2500n Quality Management Division
ISO/IEC 2501n Quality Model Division
ISO/IEC 2502n Quality Measurement Division
ISO/IEC 2503n Quality Requirements Division
ISO/IEC 2504n Quality Evaluation Division

ISO/IEC 25000:2014 Systems and Software Quality Requirements and Evaluation (SQuaRE) — Guide to SQuaRE
ISO/IEC 25001:2007 Systems and Software Quality Requirements and Evaluation (SQuaRE) — Planning and management
ISO/IEC 25010:2011 Systems and Software Quality Requirements and Evaluation (SQuaRE) — System and software quality models
ISO/IEC 25012:2008 Systems and Software Quality Requirements and Evaluation (SQuaRE) — Data quality model
ISO/IEC 25020:2007 Systems and Software Quality Requirements and Evaluation (SQuaRE) — Measurement reference model and guide
ISO/IEC 25021:2012 Systems and Software Quality Requirements and Evaluation (SQuaRE) — Quality measure elements
ISO/IEC 25022 Systems and Software Quality Requirements and Evaluation (SQuaRE) — Measurement of quality in use (in development)
ISO/IEC 25023 Systems and Software Quality Requirements and Evaluation (SQuaRE) — Measurement of system and software product quality (in development)
ISO/IEC 25024 Systems and Software Quality Requirements and Evaluation (SQuaRE) — Measurement of data quality (in development)
ISO/IEC 25030:2007 Systems and Software Quality Requirements and Evaluation (SQuaRE) — Quality requirements
ISO/IEC 25040:2011 Systems and Software Quality Requirements and Evaluation (SQuaRE) — Evaluation process
ISO/IEC 25041:2012 Systems and Software Quality Requirements and Evaluation (SQuaRE) — Evaluation guide for developers, acquirers and independent evaluators
ISO/IEC 25045:2010 Systems and Software Quality Requirements and Evaluation (SQuaRE) — Evaluation module for recoverability
ISO/IEC 25051:2014 Systems and Software Quality Requirements and Evaluation (SQuaRE) — Requirements for quality of Ready to Use Software Product (RUSP) and Instructions for testing
ISO/IEC 25062:2006 Systems and Software Quality Requirements and Evaluation (SQuaRE) — Common Industry Format (CIF) for usability test reports

Software Testing 

ISO/IEC/IEEE 29119-1:2013 Software and systems engineering — Software testing — Concepts & Definitions
ISO/IEC/IEEE 29119-2:2013 Software and systems engineering — Software testing — Test Processes
ISO/IEC/IEEE 29119-3:2013 Software and systems engineering — Software testing — Test Documentation
ISO/IEC/IEEE 29119-4:2014 Software and systems engineering — Software testing — Test Techniques
ISO/IEC/IEEE 29119-5:2015 Software and systems engineering — Software testing — Keyword Driven Testing

User Documentation - Agile Environment 

ISO/IEC/IEEE 26511:2011 Systems and software engineering—Requirements for managers of user documentation
ISO/IEC/IEEE 26512:2011 Systems and software engineering—Requirements for acquirers and suppliers of user documentation
ISO/IEC/IEEE 26513:2009 Systems and software engineering—Requirements for testers and assessors of user documentation
ISO/IEC/IEEE 26514:2008 Systems and software engineering—User documentation requirements for documentation designers and developers
ISO/IEC/IEEE 26515:2011 Systems and software engineering—Developing user documentation in an agile environment


Monday, 15 September 2014

IT Documentation and Governance - ISO Standards

When I have worked in the past one of the services I am offering is IT Documentation and Governance an area which I believe is extremely lacking in today's modern technology world.

Sadly to say I find in most IT projects that IT Documentation gets the least amount of attention and is rarely updated when the project changes. In most cases whenever you ask a programmer or systems administrator to document their work they reluctantly produce a document that has no standard and is rarely proof read/verified.

Yet I regularly see organisations left vulnerable when documentation is lacking. Usually the staff member(s) involved in the project have moved on to other projects both within or externally. This places the business in a vulnerable situation. Because if there is a need to support and/or provide enhancement it is unlikely someone else can fill this position with minimal downtime or disruption.

Documentation is the key communication tool used by management for business continuity. It allows any key stake holder i.e. staff member, customer, vendor to understand the system and provides better relations. Also it allows you to scale the communication from 1:1 to 1:many correspondents.

As more and more businesses interact with other businesses and the need for key stake holders to be spread across multiple locations there is a need to formalize the knowledge transfer. This is where documentation becomes important.

The importance of using ISO/IEC Standards for documentation becomes paramount for an organization as it provides best practices and is ideal to act as a reference guide for both strategies and processes. We understand the importance of having a standardized documentation thus ensuring that it is compliant to the ISO standards for maximum return on investment.

I plan to blog further in this area as I see it is an area that is lacking in the IT community.
In the meantime please visit or email to discuss your documentation needs.

Wednesday, 10 September 2014

Backup and Recovery (Microangelo)

8:51 AM
In this blog entry I thought I would start by describing a new direction in my IT career that I am embarking on. Whilst I will never quit programming and will engage on small contracts I am also embarking on providing IT consultancy services with my company Microangelo. Please visit my website developed using Umbraco at of the services I will be offering is Backup and Recovery and how it is neglected in modern businesses across the country. 

Sadly we have become so dependent on technology so much so that modern businesses cannot function without the use of technology. The thought of it failing is rarely considered by business users as most businesses have a complacent approach to failure. This is alarming considering the dependence on IT systems when conducting business.

Surprisingly enough most businesses are geared towards setting themselves up and being profitable. However once a business is successful, consideration should be placed to keep it that way. That’s why a disaster recovery and backup plan is a necessity for business continuity. So that in the event when disaster strikes, your business is prepared and all those involved can respond to it with minimal downtime. The best way to respond when disaster strikes is to have a disaster recovery and backup plan.

With cloud technology this is now becoming easier to implement and affordable. Using cloud technology, your business can have a complete backup of you IT infrastructure which can be restored in minutes when necessary. Because the cloud computing is managed by 3rd party experts you are guaranteed 99.9% SLA (guaranteed by Microsoft, Google, Amazon), as well as utilizing the very latest in technology.

Please visit my website and I will continue blogging as usual. In the meantime I include a couple of photos of a phone I use as backup in case my smartphone dies on me circa 2001.

Moral of the story is make sure you have a Backup and Recovery Plan. Speak to us  for you Backup and Recovery options at angelo.laris* or visit 

Tuesday, 22 April 2014

Creating Performance Counters in Azure Worker Roles

Creating Performance Counters in Azure Worker Roles

I have written a number of work roles and wanted to monitor these roles. Using the ms-windows framework the best approach is to create a custom performance counters. That’s fine for a windows hosted service but how do I do this in an Azure worker role. Plus how do I provide the performance counters metrics in the azure monitor page.

This blog will explain how.

Now the first bit of code is the performance counter creation. Seeing as though this is a custom performance counter we will need to create it on the OnStart method. I created a method called InstallPerformanceCounters and here is the code below.

        public bool InstallPerformanceCounters()
            if (PerformanceCounterCategory.Exists("ALAzurePerformanceCounter"))

            if (!PerformanceCounterCategory.Exists("ALAzurePerformanceCounter"))
                logger.Info("ALAzurePerformanceCounter performance counter category does not exist.");

                CounterCreationDataCollection counters = new CounterCreationDataCollection();

                // 1. counter for counting totals: PerformanceCounterType.NumberOfItems64
                CounterCreationData totalMessageCounts = new CounterCreationData();
                totalMessageCounts.CounterName = "MessageCount";
                totalMessageCounts.CounterHelp = "Total number of messages processed";
                totalMessageCounts.CounterType = PerformanceCounterType.NumberOfItems64;

                // create new category with the counters above
                logger.Info("Creating ALAzurePerformanceCounter performance counters");

                PerformanceCounterCategory.Create("ALAzurePerformanceCounter", "ALAzurePerformanceCounter Worker Role", PerformanceCounterCategoryType.MultiInstance, counters);
                logger.Info("Created ALAzurePerformanceCounter performance counters");
            return true;
­­The second bit of code updates the diagnostic configuration so we can view the performance counter in the azure portal.

        private static void ConfigureDiagnostics()
                CloudStorageAccount cloudStorageAccount = CloudStorageAccount.Parse(RoleEnvironment.GetConfigurationSettingValue("Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString"));

                var roleInstanceDiagnosticManager = CloudAccountDiagnosticMonitorExtensions.CreateRoleInstanceDiagnosticManager(

                var roleDiagnosticMonitorConfiguration = roleInstanceDiagnosticManager.GetCurrentConfiguration();

                // Copy settings from configuration.
                double workerRolePeriod;
                if (!double.TryParse(RoleEnvironment.GetConfigurationSettingValue(WorkerRolePeriodName), out workerRolePeriod))
                    Trace.WriteLine("WebRole environment diagnostics error: " + WorkerRolePeriodName + " parse failed.");

                    // Set the default to one minute.
                    workerRolePeriod = 1d;

                // Transfer diagnostic information once every webRolePeriod minutes.
                TimeSpan transferPeriod = TimeSpan.FromMinutes(workerRolePeriod);
                roleDiagnosticMonitorConfiguration.PerformanceCounters.ScheduledTransferPeriod = transferPeriod;

                double workerRoleSampleRate;
                if (!double.TryParse(RoleEnvironment.GetConfigurationSettingValue(WorkerRoleSampleRateName), out workerRoleSampleRate))
                    Trace.WriteLine("WorkerRole environment diagnostics error: " + WorkerRoleSampleRateName + " parse failed.");

                    // Set the default to ten seconds.
                    workerRoleSampleRate = 10d;
                roleDiagnosticMonitorConfiguration.PerformanceCounters.DataSources.Clear();                                roleDiagnosticMonitorConfiguration.PerformanceCounters.DataSources.Add(
                    new PerformanceCounterConfiguration()
                        CounterSpecifier = @"\ALAzurePerformanceCounter(azure)\MessageCount",
                        SampleRate = TimeSpan.FromSeconds(workerRoleSampleRate)

            catch (RoleEnvironmentException rex)
                // The connection string was missing.
                Trace.WriteLine("WorkerRole environment diagnostics error: " + rex.Message);
                logger.ErrorException("WorkerRole:Exception", rex);

            catch (InvalidOperationException iox)
                // Parse of the connection string failed.
                Trace.WriteLine("WorkerRole environment diagnostics error: " + iox.Message);
                logger.ErrorException("WorkerRole:Exception", iox);

The final code is the OnStart and OnRun whereby the OnStart is the first method called on initialisation and calls the above methods whilst the OnRun executes in a loop until shutdown. The OnRun updates the performance counter in this case it’s a counter.

        public override bool OnStart()
            // Set the maximum number of concurrent connections
            ServicePointManager.DefaultConnectionLimit = 12;
                // Setup to handle service configuration changes at runtime.
                // For information on handling configuration changes
                // see the MSDN topic at
                // Not Implemented in this case.
                //-RoleEnvironment.Changing += this.RoleEnvironmentChanging;
                //-RoleEnvironment.Changed += this.RoleEnvironmentChanged;

                // This is a sample worker implementation. Replace with your logic.
                DiagnosticMonitorConfiguration diagnosticConfig = DiagnosticMonitor.GetDefaultInitialConfiguration();

                // Transfer diagnostic information once every minute.
                TimeSpan transferPeriod = TimeSpan.FromMinutes(1d);
                diagnosticConfig.PerformanceCounters.ScheduledTransferPeriod = transferPeriod;

                // Set the diagnostic monitor configuration.
                DiagnosticMonitor.Start(WADConnectionString, diagnosticConfig);

            catch (Exception exc)
                logger.ErrorException("WorkerRole:Exception", exc);

            return base.OnStart();

        public override void Run()
            // This is a sample worker implementation. Replace with your logic.
            logger.Info("PerformanceCounter entry point called");

            string Instance = "azure";

                System.Diagnostics.PerformanceCounter _perfMessageCount = new System.Diagnostics.PerformanceCounter();//"ALAzurePerformanceCounter", "MessageCount", Instance, false);

                if (!PerformanceCounterCategory.InstanceExists(Instance, "ALAzurePerformanceCounter"))
                    _perfMessageCount.CategoryName = "ALAzurePerformanceCounter";
                    _perfMessageCount.InstanceName = Instance;
                    _perfMessageCount.CounterName = "MessageCount";
                    _perfMessageCount.MachineName = ".";
                    _perfMessageCount.InstanceLifetime = PerformanceCounterInstanceLifetime.Global;
                    _perfMessageCount.ReadOnly = false;

                while (true)
            catch (Exception exc)
                logger.ErrorException("WorkerRole:Exception", exc);

For this demonstration the C# code above is sufficient to illustrate the usage of the performance counter for the worker role.
Now we need to modify the azure worker role configuration.

1: We need to set the azure worker role to at a higher privileges.
2: We need to configure the azure diagnostic storage to an azure storage account. The azure monitor page diagnostics will look at the storage to retrieve the data.
3: We need to configure the diagnostic configuration to include the performance counter that we want to monitor
4: Set Azure Diagnostic to verbose in the Azure Portal.
Azure Worker Role Configuration

Step 1:
Modify ServiceDefinition.csdef
<ServiceDefinition name="ALPerformanceCounter" xmlns="" schemaVersion="2014-01.2.3">
  <WorkerRole name="PerformanceCounter" vmsize="Small">
    <Runtime executionContext="elevated" />
Step 2:
Modify ServiceConfiguration.Cloud.cscfg to include the diagnostic azure storage. Make sure you use https!!!
<Setting name="Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString" value="DefaultEndpointsProtocol=https;AccountName=alperformance;AccountKey=XXXXX” />
Step 3:
Modify diagnostics.wadcfg to include the performance counter
<?xml version="1.0" encoding="utf-8"?>
<DiagnosticMonitorConfiguration configurationChangePollInterval="PT1M" overallQuotaInMB="4096" xmlns="">
  <DiagnosticInfrastructureLogs />
    <IISLogs container="wad-iis-logfiles" />
    <CrashDumps container="wad-crash-dumps" />
  <Logs bufferQuotaInMB="1024" scheduledTransferPeriod="PT1M" scheduledTransferLogLevelFilter="Error" />
  <PerformanceCounters bufferQuotaInMB="512" scheduledTransferPeriod="PT1M">
    <PerformanceCounterConfiguration counterSpecifier="\ALAzurePerformanceCounter(azure)\MessageCount" sampleRate="PT1M" />
  <WindowsEventLog bufferQuotaInMB="1024" scheduledTransferPeriod="PT1M"

    <DataSource name="Application!*" />

This can also be done in visual studio.

Edit the project worker role.

Step 4:
Inside the Azure portal. Ensure the monitoring level is verbose.

Step 5:
Add the metric in the dashboard.

Step 6:
View the performance counter in the monitor page

Step 7:
Select the performance counter to create a rule.
This allows you to alert the support desk if there is an issue.