Monthly Archives: April 2019

A Case for Classroom trainings

Every once in a while I see an advertisement on LinkedIn about companies that conduct online Trainings. Each time I see such ads I am reminded of how people have adopted technology to make their lives better as well as worse. In this post I am going to dissect what is wrong about online trainings. Coming from an IT background you would think I’d be happy to see how technology has become so pervasive in our lives. I would argue that technology is great when it serves the core purpose for which it was designed. This argument extends to other fields like data science, big data etc. Every problem has a digital solution but that doesn’t mean the digital solution is the best.

Let’s look at how the digital experience helps us first and then see how it applies to Training in particular. You can see that the below points apply just as well to online Banking as they do to trainings or even blood pressure monitoring.

Ease of use

A digital solution be it a wallet a Fitbit or mobile app is always more convenient. We all know this to be true, it’s the convenience of such solutions that has resulted in smart phones being universal today. Netflix has overcome TV because you get to watch content your way.

It is Cheaper

Naturally with automation comes lowers costs. The internet is cheap and doing things on the internet is cheaper still. Why go through the trouble of purchasing from a shop when you can get great bargains at home via the internet. It’s a volume game and so the more people using a service the cheaper it gets.

At your pleasure

Unlike shopping or banking in a brick and mortar shop online experiences let you do things in the middle of the night from the comfort of your own home. Who wouldn’t want that?

The above points are also the most commonly quoted advantages for online trainings. While writing this post I found a number of links that listed more advantages but they seem frivolous to me (one said its eco-friendly, another that it helps students concentrate). To be honest it felt like they were reaching. So I’ve stuck with the most obvious and common sense ones I found.

Here is my argument against online trainings.

It doesn’t work for the participant. Often I hear from companies, their LnD teams, the Project Managers, the training vendors that a training needs to be conducted online. They often site the above advantages as reasons for why they consider the online training the best fit. However during the course of our conversation no one ever talks about the impact the training has on the participants and how they will be able to leverage what they learnt to further their careers. The LnD, project manager and Training vendor measure the success of a training by Cost first and the feedback second.

The learning benefits for the participants is often an afterthought.

If trainings were so effective online I would argue that we could provide schooling the same way. But that’s not how it works. The ability of a person to stare at a screen is far shorter than the ability to be engaged in a classroom. Most importantly the benefits of online training are secondary to the first and most important criteria:-

Did the training help the participant learn something that makes them better tomorrow than they were today?

Without meeting the core objective the advantages listed above are just money down the drain. It would be like hiring an Uber who is very kind, punctual, great conversationalist but dropped you off at the wrong location. Many secondary benefits are not the same as a primary benefit.

A classroom training provides that atmosphere, the level of engagement and the interactive session needed for a group to learn from a trainer as well as each other. If you need further proof. The pilots of the Boeing 787 max were certified after watching a video to get type certified instead of simulator training as for other planes. When it comes to learning the cheaper options matter only if the core objective is met first.

 

 

 

Uninstalling Kingsway Soft Integration Toolkit – SSIS productivity pack

A long time back I installed the above Kingsway Soft Integration Toolkit on my laptop. It was basically installed to explore a functionality of transferring files from cloud to on premise etc. It was not what I was looking for but I left it cluttering my VS instance assuming I could use it for something else later. AS time went by it became obvious I was never going to use it so I tried to uninstall it via Control panel. But low and behold it required the original installer file. Too bad I didn’t have it so I thought I would download it from their archive.

Sadly the archive didn’t have the installer available. Naturally the next option available was to try and upgrade the existing version and see if I could uninstall after the upgrade? However after upgrade it still didn’t let me remove the components from MY Visual Studio. Resetting the tool box and unchecking the assemblies via VS also did help.

It started to dawn on me that maybe Kingsway Soft didn’t want you to uninstall their software. But I thought the least I should do I check out the FAQs. And there I find the reason why. Not one word on uninstalling the software expect that if you have trouble you should contact support for the dirt cheap rate of 180$ per ticket.

So the next obvious step was going to be a hard uninstall by manually deleting the files from Program Files Directory but that didn’t do the trick. So after searching a bit I figured I’d try IObit uninstaller too. As expected this too didn’t work. Finally I was left with no choice but to navigate and directly access the transformation tasks assemblies under DTS folder > Tasks as shown in the screenshot below. Searched for anything that said KingswaySoft and deleted it off.

One sneaky thing they did was install assemblies in all VS Version directories so make sure you check all folder and delete them from all locations. Once done restarted system and launch Visual Studio and you should be good to go.

The way Kingswaysoft has gone out of their way to make it difficult to uninstall their software makes me think it’s nothing short of a virus even if it “technically” isn’t one.

Drawing triangles using SQL Server – Fractals

If you play sports you know how much fun it is to do trick shots every once in a while. Occasionally I find myself with time on my hands and I end up doing things on SQL Server that have absolutely no database value but it’s a fun exercise. This is one such time.

Fractals are a repetitive pattern that uses a single block that extends across multiple axis, a snowflake is one of the most relatable examples. Its most common use for most people would be art but it has powerful scientific applications as well e.g. Chaos Theory. One of the more famous such examples is Barnsleys Fern.

In the below example I use a similar approach to create a basic design. The idea here being we let chance decide what action we take but still end up with a very structured pattern. Here I use the Rand function in SQL server to pick a random number and then if it is 1,2,3 go half way to point 1 from wherever the origin is. If it is 4,5,6 then we move halfway to point 2 from the last position, if it is 7,8,9 then point 3 and so on. The end result will look like below

The script is attached below just for fun. You can obviously modify it to get other shapes and patterns for example you can start with four corners etc.

/** CREATE A TABLE TO STORE THE BOUNDARY COORDINATES.
THIS IS WHAT DEFINES THE KIND IMAGE YOU MIGHT END UP WITH***/
CREATE TABLE vertex 
( 
vertexid INT,
vertexgroup VARCHAR(100),
vertexdata NVARCHAR(1000)
)
GO 
 
/**INSERT A  JSON TEXT THAT DEFINES THE THREE POINTS 
WE WILL MOVE TOWARDS BASED ON THE RAND FUNCTION OUTPUT **/
 
INSERT INTO vertex
SELECT 1 , 'Triangle' , 
N'{
	"info":{
		"point1":{"xcor":"0","ycor":"0"},
		"point2":{"xcor":"10000","ycor":"0"},
		"point3":{"xcor":"0","ycor":"10000"}
			}
	}'
GO
/**CREATE A TABLE TO STORE THE POSITIONS GENERATED BY OUR LOGIC**/
CREATE TABLE tracks ( 
id INT IDENTITY(1,1) ,  
drawingid UNIQUEIDENTIFIER , 
sourcepoint geometry , 
destinationpoint geometry ) 
GO
-- HOUSE KEEPING FOR MULTIPLE RUNS, COPY EVERYTHING BELOW INTO A NEW WINDOW
TRUNCATE TABLE tracks
go
DECLARE @origin geometry  = geometry::Point(200,500,0)
DECLARE @p1xcor INT
DECLARE @p1ycor INT
DECLARE @p2xcor INT 
DECLARE @p2ycor INT 
DECLARE @p3xcor INT 
DECLARE @p3ycor INT 
DECLARE @drawingid UNIQUEIDENTIFIER =newid()
-- start WITH OUR SEED POSITION - IT CAN BE ANYWHERE WE LIKE
INSERT INTO tracks 
SELECT  @drawingid , geometry::Point(0,0,0), @origin
-- FETECH POSITIONS FROM OUR BOUNRDAY TABLE
SELECT 
@p1xcor= JSON_VALUE(vertexdata,'$.info.point1.xcor')  ,
@p1ycor =JSON_VALUE(vertexdata,'$.info.point1.ycor')  ,
@p2xcor= JSON_VALUE(vertexdata,'$.info.point2.xcor')  ,
@p2ycor= JSON_VALUE(vertexdata,'$.info.point2.ycor')  ,
@p3xcor= JSON_VALUE(vertexdata,'$.info.point3.xcor')  ,
@p3ycor= JSON_VALUE(vertexdata,'$.info.point3.ycor')  
FROM vertex 
WHERE ISJSON(vertexdata) > 0
AND vertexid= 1
 
DECLARE @p1 geometry  = geometry::Point(@p1xcor ,@p1ycor,0)
DECLARE @p2 geometry  = geometry::Point(@p2xcor ,@p2ycor,0)
DECLARE @p3 geometry  = geometry::Point(@p3xcor ,@p3ycor,0)
 
DECLARE @COUNT INT =0
WHILE @COUNT < 1000 -- MORE ITERATIONS THE BETTER BUT SSMS CANT DISPLAY IT
-- SO USE POWERBI AND SCATTER PLOT INSTEAD
BEGIN 
 
DECLARE @RAND INT = ROUND(RAND()*10,0)
 
IF @RAND in ( 1 ,2 , 3) 
	BEGIN 
		INSERT INTO tracks 
		SELECT TOP 1  @drawingid,   
		destinationpoint,
		geometry::Point((destinationpoint.STX + @p1.STX)/2 ,(destinationpoint.STY+@p1.STY)/2,0)  
		FROM tracks 
		ORDER BY id DESC 
	END
 
IF @RAND in ( 4,5,6) 
	BEGIN 
		INSERT INTO tracks 
		SELECT TOP 1  @drawingid , 
		destinationpoint,
		geometry::Point((destinationpoint.STX + @p2.STX)/2 ,(destinationpoint.STY+@p2.STY)/2,0)  
		FROM tracks 
		ORDER BY id DESC 
	END
 
IF @RAND in ( 7,8,9) 
	BEGIN 
		INSERT INTO tracks 
		SELECT TOP 1  @drawingid ,   
		destinationpoint,
		geometry::Point((destinationpoint.STX + @p3.STX)/2 ,(destinationpoint.STY+@p3.STY)/2,0)  
		FROM tracks 
		ORDER BY id DESC 
	END
 
SET @COUNT= @COUNT+1 
 
END 
-- SEE THE FINAL RESULT 
 
SELECT * FROM tracks