Tuesday, December 02, 2014

Mac OSX Won't Acknowledge New JDK, Set Java Version

Java on OSX has always been much messier than Java on Linux.  The very way that Apple finds the current JDK is simply in-elegant and to be honest, quite ugly.  I've been shifting Java JDK's and JVM's back and forth for quite a while now in my dev machine and ran into this problem many times.  I tried using the System Preferences to set the default Java to 1.7.  It stated that it was 1.7 but every time I went back to the Terminal, I ran "java -version" and
got the old 1.6.  I tried everything!!  Nothing seemed to work as promised.

After some research, I found this little tidbit of help that worked.  It seems that there is a file installed with OSX that tells the OS what version of Java to use.  The file is a symbolic link to the location of the Java you want to use.

To find what version of Java you have, open the Terminal and type "java -version".  The output will be something like this:

java version 1.6
Java (TM) SF Runtime Environment (build 1.6.0_22-b11)
Java HotSpot (TM) 64-Bit Server VM (build 1.6.0_22-b11 - mixed mode)

OK.  So you have already installed Java 1.7 and tried to set the JAVA-HOME environmental variable, tried the System Preferences and nothing works?  Try this.

1. Install the new version of Java.

2. Open System Preferences and click on the Java icon. Open it up and make sure that Java 1.7 is selected.

3. Open up your Terminal and navigate to /System/Library/Frameworks/JavaVM.framework/Versions/ .  This is done by using the command "cd /System/Library/Frameworks/JavaVM.framework/Versions/".

There is a file there named "CurrentJDK".  This is simply a symbolic link to the Java home directory. Do not delete it, but do the following:

4. In Terminal, type "sudo mv ./CurrentJDK ./CurrentJDK_old". This simply renames the file in case something goes wrong.  To execute a command with sudo, you will be asked for your password. This is the admin password to your computer. Go ahead and enter it.

The CurrentJDK symlink was pointing to an older Java version. Removing this file (directories are actually "files" in Unix systems)  and create a new one pointing to the new Java JDK.  Since the current directory is owned by a privileged admin, you will need to use the sudo command.

5. In the Terminal, type "sudo ln -s /Library/Java/JavaVirtualMachines/jdk1.7.0_55.jdk/Contents/ ./CurrentJDK" 

6. In the Terminal, type "ls -la" to make sure your new file was created and the old one is there, renamed.  You should see something like this:

That is it!  You may delete the old CurrentJDK_old file if you wish to.  If you now type in "java -version", you should see the new Java.

If this worked for you, please consider sharing this on Facebook or Twitter.  

Monday, December 01, 2014

Some Neo4J Training Spots Still Available!

Neo4j's Graph Academy Training provides you with the required skills to be effective with graph data and productive with Neo4j. You will gain key modeling and implementation skills to tackle graph data management on Neo4j with ease. While the course is offered using Neo4J, chosen because it is the world's most popular Graph Database, the skills learned would be applicable to other Graph Databases.

I will be leading two courses in Vancouver, BC at Hot Tomali Headquarters on December 9th and 10th of 2014.  Every course attendees will be provided with food and coffee as well as soft drinks and course materials.

The courses are as follows:

Neo4j Fundamentals - Dec 9

Who should attend? Developers, Administrators, DevOps engineers, DBAs, Business Analysts and students.

Executives and others who want an overview of the Neo4j technology. Skills taught An understanding of graph databases Install and operate Neo4j Use the Neo4j development tools productively Exploit the strengths of the Labeled Property Graph model and the Cypher query language Build confidence in building a graph enabled application.

Prerequisites: Bring a computer (laptop) and be prepared to learn.

Register Now

Graph Data Modeling with Neo4j - Dec 10

Who should attend? Developers, DBAs, Business Analysts and students.

Skills taught An understanding of the labeled property graph How to apply the property graph to common modelling problems Common graph structures for modelling sophisticated, connected data scenarios Criteria for choosing between different modelling options.

Learn how to modify an existing model to accommodate new requirements.

Prerequisites You will need some familiarity with Neo4j and Cypher.

The material from the Intro to Neo4j course is sufficient knowledge to understand this course.

Register Now

Friday, November 28, 2014

Geothermal Energy within British Columbia, a Potential Gold Mine for BC!

On Tuesday, November 25, 2014 CanGEA released the full copy of their Geothermal Report to the public. The title of the report is Geothermal: The Renewable and Cost Effective Alternative to Site CNew information and analysis contained in the CanGEA Report demonstrates that geothermal energy is a low cost, clean, viable alternative to the proposed $8 Billion Site C Dam project (“Site C”).

I have been a strong proponent of Geothermal energy since working with the United States Department of Energy on a Geothermal project alongside colleagues from the National Renewable Energy Laboratory (NREL) and others.  During the 2013 BC Provincial election, I campaigned on a platform of using Geothermal to kickstart a strong renewable energy industry in BC, creating thousands of new permanent high tech jobs and at the same time moving BC into the top quadrant for being a sustainable region with advanced energy policies and reversing the trend of a high carbon future.  I believe that actions like this, not carbon taxes, are going to be the most effective way to combat environmental pollution and moving away from fossil fuels.

Geothermal has the potential to provide firm energy at a lower cost than Site C in a manner that benefits ratepayers, taxpayers, the economy and the environment. It can provide for our regional energy needs a thousand times over.  Unlike solar and wind, Geothermal is not intermittent.  It works 24/7, day and night, all four seasons of the year to provide energy at a reasonable cost while respecting our planet.   Geothermal has a far lower carbon footprint than Site C and would provide far more jobs.  Our energy production would be diverse as well. If some radical shift in climate patterns created a situation where the rivers lowered their flow volumes, Site C would represent a catastrophic failure.  Smaller, regionally distributed Geothermal projects would meet our needs without putting al our energy eggs on one basket.

The CanGEA report identifies 10 key advantages that Geothermal has over Site C:
  1. Geothermal power has a lower Unit Electricity Cost (UEC) and capital cost.
  2. Geothermal heat is a valuable by-product.
  3. More permanent jobs are generated by geothermal operations than other alternatives.
  4. Costly BC Hydro system transmission upgrades are avoided or minimized.
  5. The power grid is strengthened through ancillary services, including geothermal energy’s unique base load and the capacity to dispatch energy.
  6. Geothermal fluids create strategically significant mineral and rare earth elements recovery opportunities.
  7. Geothermal power plants can be built to meet demand and manage or reduce the risk of project cost overruns associated with large-scale projects.
  8. Geothermal offers increased food security and price stability.
  9. The physical and environmental footprint of geothermal is small.
  10. Geothermal offers a means to “green” oil & gas and mining operations.

Based on the report findings CanGEA urges the government to adopt the following five-point plan to become a world leader in geothermal:
  1. Implement a one year moratorium on the final investment decision on Site C to allow time for further due diligence on geothermal. 
  2. Refer geothermal to the BC Utilities Commission (BCUC) for review and recommendations by November 2015 in accordance with section 5 of the Utilities Commission Act. This BCUC review would include review of our findings by independent international experts and a public hearing. 
  3. Establish a public education program on geothermal energy production in BC, which includes the development of demonstration projects.
  4. Form a task force to make recommendations on the policy and regulatory changes required to support cost effective and efficient development of a geothermal industry in BC by 2020. 
  5. Hold a government and industry sponsored international symposium on geothermal energy production in Vancouver in 2016.
Additionally, I would also argue that the BC Geothermal Resources Act needs an immediate overhaul to create conditions more friendly to Geothermal prospectors.  Note that in the ring of fire, a coastline that surrounds the entire Pacific Ocean, Canada is one of only a few nations that have no Geothermal energy production.  Since we have almost the highest capacity, this is shameful and we have to ask ourselves "how could this have happened?".  The answer is within the BC legislature.  The BC Geothermal Resources Act must be revised and we must make our region open to Geothermal energy production.  This must happen now!

I may have committed political suicide by running on this platform.  After all, why would fixing our CO2 emission problems, creating thousands of permanent high paying jobs, creating clean, renewable energy and becoming a world leader in clean energy be of any interest to the average voter. They are more concerned with running red lights in a car with children in the back seat, what happens within our labour unions and other trivial matters.  I set out to provide a solution and it did not appeal to voters.

You can get a copy of the report backgrounder here.

If you would like to show your support for CanGEA's efforts to bring a clean, renewable, and cost effective energy source to Canadians, please consider contributing to this report through our powEARTHful 2.0 campaign.

Thursday, November 27, 2014

Sitefinity Certification

At Hot Tomali we are doing some great work with Sitefinity, a Content Management System (CMS) for the .NET world.  Sitefinity is published by Telerik and Hot Tomali has been a partner in their ecosystem for a few years.  As part of the new enrolment process, many of us are being certified.

To that end, I have just been certified with the business accreditation.  I suspect the developer certification will be next in my career path.

If you are interested in Sitefinity, please drop us a line and we are happy to provide some ideas and share knowledge from our experiences.  Sitefinity is a category winner for .NET CMS in every way shape and form.  From it's ability to quickly re-purpose content for mobile apps to the fine grained access control over individual blocks of content, it delivers a solid ROI for just about any enterprise.

Contact Hot Tomali directly using this form -> https://www.hottomali.com/contact/request-a-quote.

Tuesday, September 16, 2014

A "Must-Attend" Geothermal Energy Talk

BCSEA Webinar: Geothermal Energy - BC's Enormous Potential

Join us for a free BCSEA Webinar on Tuesday September 23 at noon PDT (3:00 PM EDT)

Reserve your free Webinar seat now at: https://www2.gotomeeting.com/register/10191642
Beate Fischer Title SlideJoin us for another free BCSEA Webinar.
Our Earth stores an enormous source of renewable energy right beneath our feet: geothermal power.
Geothermal energy is delivering clean, base-load and low cost electricity in 25 countries as well as commercial heating in 70 countries.
  • is price competitive with other renewables
  • is the only renewable base-load option with higher capacity factors than other sources
  • provides a source of useful byproduct heat
  • is especially attractive for northern and remote communities
  • is found right across Canada, especially in the West and North
  • runs indefinitely with proper heat resource management
In Canada, the geothermal industry has yet to gain traction despite having world class resources. It has great promise... but what will it take to turn the promise into reality?Our guest presenter Alison Thompson has dedicated a substantial part of her career to investigating and demonstrating the technical and commercial viability of high enthalpy geothermal energy. Since 2007, she has been the Managing Director and Executive Director of the Canadian Geothermal Energy Association.
With over 15 years of experience in project management, business and technology development in the North American energy sector, Ms. Thompson has successfully sought changes in federal tax regulations that now include geothermal energy. She has also been influential in creating eligibility for geothermal projects and reports for provincial and federal government funding. She was the inaugural recipient of the Belle Mulligan Award for Leadership from the Canadian Investor Relations Institute, and is a frequent contributor to published geothermal papers.
She is Chair of Borealis GeoPower, and a board member of Deep Earth Energy Production; a past Officer of Alterra Power (formerly Magma Energy); and an external evaluator for the Canada Foundation for Innovation. Globally, she has a seat on the Executive Committee of IEA-GIA; is a board member of the IGA; and was Geothermal Energy Forum Chair at the 20th World Petroleum Congress. She has also served on the European Union’s Enhanced Geothermal Innovative Network for Europe’s (ENGINE) Stakeholders Committee. 

Ms. Thompson holds Bachelor and Master of Chemical Engineering degrees from McGill University, a Professional Engineering designation from the Association of Professional Engineers and Geoscientists of Alberta, a U.S. Engineer Intern designation, and a Master of Business Administration degree from Queen’s University. She lives in Calgary, Alberta, with her husband and son.
See BCSEA's previous webinars at http://www.bcsea.org/past-webinars 
Title: BCSEA Webinar: Geothermal Energy - BC's Enormous Potential
Date: Tuesday, September 23, 2014
Time: 12:00 PM - 1:00 PM Pacific Daylight Time (3:00 PM Eastern Daylight Time)
System Requirements
PC-based attendees - Required: Windows® 8, 7, Vista, XP or 2003 Server
Macintosh®-based attendees - Required: Mac OS® X 10.6 or newer
Mobile attendees - Required: iPhone®/iPad®/Android™ smartphone or tablet

Thursday, September 04, 2014

Google use of TLS as an SEO Ranking Signal

The Google webmaster blog has recently made it known what we at Hot Tomali/Technoracle had suspected for some time. The announcement, made last month, clarified that the Google search engine has been noting the use of HTTPS (using the Hyper Text Transfer Protocol with SSL or TLS) and providing a higher weight to those websites that use it.

Google has claimed that the adjustments to SEO scores are very minimal at the present time however we suspected they will rise in the future. The blog article seems to concur with our assessment and notes the following:

“…over the past few months we’ve been running tests taking into account whether sites use secure, encrypted connections as a signal in our search ranking algorithms. We've seen positive results, so we're starting to use HTTPS as a ranking signal. For now it's only a very lightweight signal — affecting fewer than 1% of global queries, and carrying less weight than other signals such as high-quality content — while we give webmasters time to switch to HTTPS. But over time, we may decide to strengthen it, because we’d like to encourage all website owners to switch from HTTP to HTTPS to keep everyone safe on the web…” 

Dissecting the Details 

Google is committed to security as a core principle of the future of the internet. Sites using HTTPS are providing two fundamental benefits to web users. First, they are helping keep the web more anonymous by masking the contents of data during its’ transportation. TLS uses certificates to create cypher text, a human-unreadable format for data, that can be safely transported without prying eyes seeing the content. TLS ensures your rights online are being protected and one of the core principles of the web is the right to that privacy.

Secondly, HTTPS makes sure that no one tampers with content as it is transported around the internet. This keeps the web safer and more secure.

What should you do?

If you haven’t done so, it may be beneficial to add security to your website to help with Search Engine Optimization (SEO) and security. It is not difficult for seasoned webmasters to set up.

The following steps are required: 

  • Conduct some research on the type of certificate you need: single, multi-domain, or wildcard certificates are the most common and your selection will depend on your server’s domain name structure. If you use several sub-domains (examples: ww1.foo.com; ww2.foo.com etc.), you will most likely need a wildcard certificate. 
  • Decide on the certificate strength. We like to use 2048-bit key certificates for our customers websites as they are stronger than 512-bit keys. 
  • Your webmaster will need to review your source code of our website to ensure the use of relative URLs for resources that reside on the same secure domain. Cross-domain security requests are frowned upon for obvious reasons. 
  • If you have content from other domains, make use of protocol relative URLs for such content. 
  • Read up on Google’s Site move article for more guidelines on how to change your website’s addresses. Contact Hot Tomali for help with your existing or newly planned websites. 
  • Once implemented, ensure that your HTTPS enabled content is not blocked from Google or other search engines crawling it. This can be accomplished by using the robots.txt directive. More data on the robots.txt declarations can be found at http://www.robotstxt.org
  • Also be sure to allow search engines to index your pages by avoiding the noindex robots meta tag. 

And Finally! 

Make sure to contact Hot Tomali for any website or digital enterprise needs. We make your IT work and keep it working for you by ensuring it matures with the rest of the world. From mobile applications to advanced digital branding, we can provide value for you and create new opportunities for your business.

Monday, August 18, 2014

Using "tel" as a URI scheme in web pages

With the explosive growth in website traffic originating from mobile devices, we are now using the "tel" URI scheme for hyperlinks of telephone numbers within our customers' HTML website pages. The use of the "tel" scheme for URI's indicates that an action should be taken congruent with the uses described in IETF RFC 3966. These map, in most cases, to the host operating system handing the event and actions off to the program responsible for initiating telephone calls on the device. Simply stated, this allows users of the webpage to click on the telephone number displayed on a webpage and helps their device dial the number more accurately.

While many devices detect and turn phone numbers into active links, using the scheme will greatly increase the accuracy of those user actions.
To do this successfully, simply use the following scheme within hyperlinks for phone numbers:

<a href="tel:+16048938347">(604) 893 8347</a>

When embedded in a webpage, the links look and behave as such:

Call us at (604) 893 8347.

The use of the plus sign and the country/area code helps the mobile application understand the context for the telephone request and dial from that context.  This helps calls be completed in most cases.

The RFC is available at http://www.ietf.org/rfc/rfc3966.txt.  It is worthwhile understanding more about the finer aspects of the syntax such as characters allowed and not recommended within the scheme.

Characters other than those in the "reserved" and "unsafe" sets (see RFC 2396 [RFC2396]) are equivalent to their "% HEX HEX" percent encoding.
The "tel" URI has the following syntax:

   telephone-uri        = "tel:" telephone-subscriber
   telephone-subscriber = global-number / local-number
   global-number        = global-number-digits *par
   local-number         = local-number-digits *par context *par
   par                  = parameter / extension / isdn-subaddress
   isdn-subaddress      = ";isub=" 1*uric
   extension            = ";ext=" 1*phonedigit
   context              = ";phone-context=" descriptor
   descriptor           = domainname / global-number-digits
   global-number-digits = "+" *phonedigit DIGIT *phonedigit
   local-number-digits  =
      *phonedigit-hex (HEXDIG / "*" / "#")*phonedigit-hex
   domainname           = *( domainlabel "." ) toplabel [ "." ]
   domainlabel          = alphanum
                          / alphanum *( alphanum / "-" ) alphanum
   toplabel             = ALPHA / ALPHA *( alphanum / "-" ) alphanum
   parameter            = ";" pname ["=" pvalue ]
   pname                = 1*( alphanum / "-" )
   pvalue               = 1*paramchar
   paramchar            = param-unreserved / unreserved / pct-encoded
   unreserved           = alphanum / mark
   mark                 = "-" / "_" / "." / "!" / "~" / "*" /
                          "'" / "(" / ")"
   pct-encoded          = "%" HEXDIG HEXDIG
   param-unreserved     = "[" / "]" / "/" / ":" / "&" / "+" / "$"
   phonedigit           = DIGIT / [ visual-separator ]
   phonedigit-hex       = HEXDIG / "*" / "#" / [ visual-separator ]
   visual-separator     = "-" / "." / "(" / ")"
   alphanum             = ALPHA / DIGIT
   reserved             = ";" / "/" / "?" / ":" / "@" / "&" /
                          "=" / "+" / "$" / ","
   uric                 = reserved / unreserved / pct-encoded

Each parameter name ("pname"), the ISDN subaddress, the 'extension', and the 'context' MUST NOT appear more than once.  The 'isdn-subaddress' or 'extension' MUST appear first, if present, followed by the 'context' parameter, if present, followed by any other parameters in lexicographical order.

Wednesday, August 06, 2014

New Neo4J Training - Vancouver, BC

I will be conducting another Neo Technologies sponsored, one day training class on August 29th, 2014 for the Vancouver graph database user group (join us here).  The class is designed to maximize the learning over the 8 hour course and teach students what graph databases are, how they differ from RDBMS systems, the data model (or lack thereof), Cypher - the query language and how to build and use graph databases (the bulk of the class).

About Neo4J

Neo4J is the world's leading graph database, meaning it is used by more customers than any other graph database.  It offers several advantages over fixed schema databases, especially for startups given the immaturity of their data models.  Neo4J does not require a schema like Relational DataBase Management Systems (RDBMS).  Instead, Graph databases save data as "Nodes" that are connected with "Relationships".  Nodes and relationships both have "properties" which si how humans think about concepts in the real word.  Nodes may be arbitrarily added or removed without re-writing an entire database schema, a true savings of costs and effort.

The Neo4J implementation of a graph database has become the industry standard.  Cypher itself, a language similar to the Structured Query Language (SQL) has become a sort of Pseudo standard within the space.  The course will cover the basics of Cypher and some advanced topics like sorting and filtering return values.

There are still seats available as of the time of this article.  if you will be in Vancouver at the end of August, please come out and learn some Neo4J.  The cost covers the logistics so the course is basically almost free.

Sin up here -> http://vancouver.eventful.com/events/intro-neo4j-vancouver-/E0-001-073046613-1

Tuesday, August 05, 2014

Senior vs. Junior Programmer (Developer) Definition

We have been asked many times to define the differences between Senior and Junior programmers. While there is no exact answer, this blog post attempts to clarify what we look for when hiring developers at different levels.

The labels “Senior” and “Junior” are difficult to comprehend as they can sometimes be bestowed on the same developer depending upon the context of assessment. A developer may be considered “senior” with respect to the .NET development platform while at the same time be considered “junior” at HTML5 and some of the more recent related technologies. Experience clearly plays an important role in working with multiple technologies as well. Developers who may intrinsically understand the internal nuances of a complex platform like J2EE may be lacking the full practical experience that only comes from using multiple versions of the language and migrating from one to another. In some cases, a developer who is knowledgeable about topics in great depth may actually lack the full breadth of experience. This latter experience augments the deep knowledge of more specific facets since the entire evolution of one part of that language may be a reaction to a shortfall or persistent problem a previous version had. Such context-specific assessments require those who assess developers to remain somewhat flexible in their own judgments concerning experience vs theoretical knowledge. Both help a developer get the whole picture of each language or platform.

Of course, the differences could be explained with a bit of humor. The following diagram helps non-developers understand the differences in mind-sets between the two groups.

To begin to place some formal constraints around the differences, the descriptions can be summarized as follows:

Junior developers are still acquiring many of the skills their senior counterparts possess. The reality is that the senior programmers only achieve the extra skills through experience and perseverance. Many of the skills cannot be taught in a classroom as real life experience is required to guide the developers knowledge bases. Junior programmers are often given tasks to do, but are seldom handed projects. A task takes no longer than a couple of weeks overall and often is not delivered as a customer-ready deliverable. The junior programmers often do not gather requirements and in many cases are not provided the details of “why” they are doing a certain task. They typically do not talk to customers or if they do, the interactions are often very limited. A junior programmer will not feel comfortable training other developers nor will they lead teams. They often need reviews from senior developers. On version control systems, an administrator will not provide the credentials or bestow the rights to “destroy” code or projects and are not permitted to over-write the work of others. They typically dream of working on bigger projects and are well situated to handling smaller tasks but cannot provide customer-ready solutions to business problems.

By contrast, a senior developer is given projects to do as opposed to tasks. Some projects can last up to 6 months and require the senior developer to gather requirements. They often will be part of the team that talks to customers directly and will develop “solutions” to those problems and explain their ideas to the customer. Senior programmers tutor juniors and provide paths for juniors to keep acquiring new knowledge. A senior developer will usually have “destroy” rights on version control systems and uses them to help others learn the errors of their ways. The senior developer dreams of designing, not coding but hacks all the time.

The following chart outlines some other fundamental differences we typically use to delineate a senior programmer from their junior counterparts.

Codes up a given library
Yes, task does not require knowledge of entire application.  When given the task, the API will be constrained and specified.  All work will be to ensure the library works as intended.
Yes but can also engineer the library. This means defining the API and parameter list, understand what classes or libraries may call it and how it has to be architected (static classes?  Prototypes with concrete classes inheriting?  Method signatures?)
Understands the method signatures
No – is only proved with the specification and the API signature.
Yes, additionally, the senior developer can architect the class to accept multiple parameters and figures out the correct order, data types and tests.
Junior Developers are not required to interpret UML of an entire system
Senior developer must understand the system architecture.  In addition to the class function, needs to understand the class relationships and methods. Typically uses class new diagrams, sequence diagrams and use case diagrams as well as other similar artifacts.
Class methods
Juniors usually scope everything to private.
Can determine how to mutate the access modifier to public, private, protected etc. based on class use and function. Understands the rationale behind the decisions.
Knows when to develop simple API’s vs complete web services

Data types
Does not understand which data type to use if not told.  Does not differentiate big endian vs. little endian types.
Can study a system and determine which data types are optimal for each API call.
Multi-thread experience
Basic – understands the concepts.
Advanced – uses keywords like “volatile” to denote variable uses when multiple threads may be trying to mutate values concurrently and knows how to mitigate these scenarios.
Multi-thread experience
Does not understand thread controllers
Uses thread controllers to ensure optimal operations for all class instances. Can take advantage of multi-core processors.
Abstract vs Concrete
Basic knowledge, often tries to implement abstract classes resulting in errors.
Understands when to prescribe abstract classes as prototypes and how to create concrete classes that may be instantiated based on the abstract classes.
Naming conventions
Ensures consistent naming conventions are used throughout a project.  Will flag the project if it is apparent that no one else has specified this vs the Jr. Developer who will not see the need.
Unit Testing
Has some UT skills.  Occasionally writes test is not too busy.
Uses Test-driven development and is a strict user of unit testing to ensure code can survive a code audit.
Has experience on one or two
Can decide which framework/version to use based on functional requirements.  Knows how each one performs, where strengths/weaknesses are in each framework
No – often hard codes values and binds them to buttons, frames etc
Yes – knows that any long lasting system requires localization and knows it is easier to do it once at the beginning of the project than trying to reverse engineer it in later.
Can understand some drawing/specifications but needs to have a source of knowledge to ask questions
Reads UML like their native spoken language.  Comfortable interpreting UML into code.
Architecture process
Codes first to get a head start. Can only be given tasks and not projects
Does architecture first properly to ensure the system will work as required.  Can be given entire projects and will write any missing architecture docs to ensure others have documentation.
Does not write
Knows it must be written and ensures it is done along the way.
Writes code.
Writes code to be maintainable over time.
Brings problems to Sr. programmers
Finds solutions to problems
Guesses.  Cannot envision all code in their head without writing some so cannot be accurate in estimates.  When given, estimates are often provided in < 1 hour
Can estimate a complete project, Designs complete code in mind before starting to code in order to provide a realistic estimate.  Estimates take at least one week and asks many questions to ensure complete understanding of requirements.
Needs to be motivated
Knows how to motivate other coders to complete the project and produce quality code.
Only sees what is in front of eyes
Can foresee problems others do not yet see and knows the best ways to eliminate them.  This work is often unrewarded as the product owner often thinks the problem never was, does not appreciate the Sr. Coders work in avoiding it all together.
Thinks users will only use the software as intended.  Writes code, discovers problems, fixes code, repeats multiple times.
Knows users will abuse the software and use it for other things.  Ensures components will gracefully fail without bringing down the entire system. Eliminates points of failure.
Asks “what is the difference between junior and senior developers?”, assumes they are senior and forges ahead in the wrong direction.  Na├»ve and optimistic.
Knows the difference but does not rub in in others faces.  Tries to help junior programmers. Humble.  Has scars from many IT projects.
Will often write code once and deliver it to project code base.
Will try to write code in more than one manner to determine which code runs best and will then optimize it for the solution requirements.

Friday, July 04, 2014

I hate Platform as a Service

I sit here today at work and listen to someone describe "Platform as a Service" to me.  It rubs me as badly as "Data as a Service" or any other *aaS acronym.  Why?

The OASIS Reference Model for SOA, the base standard for Service Oriented Architecture, describes the facets of a service in an abstract manner.  Part of the core service model is the "data model" associated with a service.  This data can be anything.  It may represent data that empowers a platform, software or any other item.

The service model itself is agnostic to what the data represents.  This is because the service should not care what the data is.  The services only job is to facilitate its consumption.  The proliferation of *aaS acronyms must stop unless we are planning to have Everything-as-a-Service or EaaS.

Stop it.

Wednesday, June 11, 2014

A Perspective on the new Canadian Anti-Spam Legislation

If you are a business operating within Canadian borders and you are involved in sending electronic messages to your customers, you must take the time to read the following advice. There are actions that you MUST undertake prior to the new law coming into effect on July 1. 

A quick overview of Canada’s new Commercial Electronic Message (CEM) legislation. 

Canada has recently adopted a new anti-spam legislation. The law is described in detail on this page (http://fightspam.gc.ca/eic/site/030.nsf/eng/home). This new law goes into effect July 1, 2014.

We have prepared this brief overview of the new legislation as a service to readers and also as a public service to help those who seek an understanding of the new legislation. This article is not meant to be a substitution for proper legal advice and if you have any questions about the legal nature of this legislation, it is your responsibility to contact a legal professional.

What is the Anti-spam legislation? 

Canada’s new Anti-Spam law was passed in December, 2010 and comes into effect July 1, 2014. The CRTC has published final regulations related to Canada's anti-spam legislation. A copy of the regulations can be found on the CRTC website. The name of the law is the Telecom Regulatory Policy CRTC 2012-183. 

The Regulations prescribe the form and certain information to be included in commercial electronic messages (CEMs), and requests for consent with respect to the sending of CEMs, the alteration of transmission data in electronic messages, and the installation of computer programs.

The Regulations also define SPAM as “any electronic message” – text, sound, voice, image – sent to an electronic address for the purpose of encouraging participation in a commercial activity. It includes email, but also texts, tweets and instant messages.

It is not clear to Technoracle how Twitter or Facebook posts will be interpreted as spam.

How does it affect Canadians? 

All Canadian citizens or companies with a presence in Canada that send electronic messages as described above are subject to the laws starting July 1, 2014.

What is defined as “SPAM” under the new legislation?

Without diving into the specific text of the legislation, SPAM is defined as any Commercial Electronic Message (CEM) sent to an electronic address without consent of the recipient.

What are the legal remedies and penalties for violations?

Fines of up to $1 million for individuals and $10 million for corporations are possible. Additionally, the law will also allow those affected by a contravention of the law (such as getting spammed) to launch an action in court against those who have violated the law. Once into force, the private right of action will allow an applicant to seek actual and statutory damages.

Who will enforce it? 

There are three federal agencies that will enforce the new legislation. The Canadian Radio-television and Telecommunications Commission (CRTC), the Competition Bureau and the Office of the Privacy Commissioner of Canada will be responsible for enforcement.

What does the regulation specifically prescribe? 

First and foremost, the Regulations prohibit sending Commercial Electronic Messages (CEMs) unless the recipient has given express consent, or falls into a category where there is implied consent or one of the exemptions applies. It also prescribes the form and certain information to be included in commercial electronic messages (CEMs), and requests for consent with respect to the sending of CEMs, the alteration of transmission data in electronic messages, and the installation of computer programs. Most importantly, an unsubscribe mechanism must be in place that allows any recipient to unsubscribe and stop receiving any further CEMs.

What constitutes express consent?

The recipient has to opt-in, not opt-out. The request must be clearly identified. A pre-checked opt-in box or an unchecked opt-out box will not do. The recipient must take a positive step to opt-in. Silence does not mean consent. The onus to prove consent is on the sender.

NOTE: Technoracle has a Consent Module (an HTML5 module) that can link an individual to an express consent event.  The entire transaction is hash-tied to you can prove later that your customer opted in.  If you wish to get an overview of this technology, it is available from duane (AT) technoracle (hyphen) systems.com.

What are the other requirements for getting express consent?

  • Explain the purpose for the request. 
  • Name the person or organization, or on whose behalf, you are seeking consent. 
  • Give your name, mailing address and phone number, email or website address. 
  • Provide an unsubscribe option which is readily performed and will take effect within 10 days. 
Are there any exceptions where consent is not required?

There are certain conditions that provides for exemptions under the new law. Briefly, these are:

  • If consent of the recipient can be implied 
  • For communications that are within the domain of a business 
  • Where there is an existing business relationships and/or the CEM is relevant to the recipient’s role, function or duties. 
  • If the electronic messages is sent in response to a direct request for information. 
  • To enforce a legal right or obligation. 
  • If it relates to an existing transaction. 
  • If you are a customer inquiring about a business activity. 

Is there a time limit on consent? 

  • Express consent does not expire but can be withdrawn. 
  • Implied consent often depends on a specific relationship between the parties and therefore ends when that relationship ends. It can also be withdrawn at any time. If you are relying on this, it would be a good idea to seek legal advice from a qualified attorney. 
  • CEMs to which an exception applies may only be sent within the time limits set out in the Act.  
These vary depending upon the type and nature of the communication.

What qualifies as an ‘existing business relationship’? 

Recipients are considered as having an existing business relationship for purposes of the legislation, if the recipient of the communication has:

  • Bought or leased goods or services from you within the past twenty four months; and/or 
  • Made an inquiry about a contract, purchase or other financial transaction within the past 6 months.
When may consent be implied?

Some message recipients have an implied consent to receive messages. The exact nature of this consent has not been interpreted within the courts and individuals relying on this exception are urged to seek legal advice. Consent may be implied, as defined within the legislation, where the recipient is:

  • an individual with whom the sender has a personal or family relationship; and/or
  • the recipient is an individual or entity engaged in a commercial activity and the CEM is solely related to that activity. 
  • the recipient has conspicuously published an email address or given you one and the CEM is relevant to the recipient’s business role (the ‘publication’ exception); and/or 
  • the recipient has disclosed his or her electronic address to you, has not indicated any wish not to receive unsolicited CEMs and the CEM is relevant to the recipient’s business role (the ‘business card’ exception). 

In all the above cases, if the recipient requests that you not send further messages, such requests supersede any implied consent and consent will have been deemed as withdrawn on a permanent basis or until the recipient sends communications to the contrary.

Are any non-business relationships exempted? 

The following situations may be considered exempt, as long as the recipient has not expressed a communication that you stop sending them messages.
  • if the recipient has made a donation or gift or volunteered or been a member of your club, association or voluntary organization within the past 2 years; or 
  • if the CEM is sent by or on behalf of a registered charity and the message is primarily for raising funds for the charity.

Any other notable exceptions?

You can send a CEM to someone who has been referred to you by a third party, provided the third party has a family, personal or business relationship with both you and the recipient.

What do I need to do before July 1, 2014?

If you are a customer of Technoracle, you are entitled to a free consultation for thirty minutes to ask any other questions. Customers also may have their consent-linking module installed on their website for an introductory price before July 1.

NOTE: Remember that Technoracle Advanced Systems Inc. is not a firm practicing law in the Province of British Columbia and is not a substitute for any legal opinions you should seek if you have outstanding questions. All the information provided hereinafter is strictly provided as a non-legal practitioner perspective and our interpretation of the new legislation.

We use two local law firms that we recommend:

- Venture Law Corporation (contact Alixe Cormick)
- Boughton Law Corporation (Contact Claudia Losie)

Without limiting the generalities of the foregoing,  Technoracle would advise that any persons or other entities engaged in the dissemination of electronic communications to review the following:

  • Review your current internal practices and guidelines for sending CEMs and which ones will comply with CASL. Ensure that any staff involved with these activities is informed of the changes and has a chance to ask any questions they might have to clarify their understanding. 
  • For all existing email lists, you should assess whether or not you have valid consent, either express or implied, from any recipients. If you do not, it is recommended that you refrain from sending further emails until you can obtain such consent. 
  • If you don’t have consent, decide if you fall within one of the exception, and when they lapse. You should set reminders to ensure you comply with the time constraints on any limitations. 
  • Decide whether you should try to get an express consent, which remains valid until withdrawn, before July 1, 2014. 
  • Make sure your form of consent meets the requirements. If you require help with this, Technoracle or Hot Tomali can set up the proper email channels and forms of email that comply with the legislation. 
  • Ensure that your policies and procedures are in compliance. Once more, we are here to assist you with compliance and can configure your email marketing to meet the requirements. To find out more, contact duane at technoracle-systems dot com.