FT232 USB UART driver installation step by step installed. For TinyDuino board.

About 7 years ago, I bought a Tiny Duino board.  It seemed like the perfect way for me to work on some cool Arduino projects. It’s modular and tiny! By modular I mean that there are modules for LED’s, wifi, IO ports, battery power, sensors and more.  All without any soldering.  It got left in a drawer though as I had problems getting it up and running at the time.  But I’ll get to that later because I know most of you just want me to get to the good stuff.  How do you get this thing working in Windows 10?  The supplied Arduino drivers don’t work. 

Windows sees this as a FT232 USB UART device under the “Unknown Devices” node of device manager.  In fact, if you are unlucky like I was, it might not see it at all.  The Tinyduino setup page actually writes this out in black and white.  Not all USB cables are created equally.  Some are made to deliver power only for charging.  They may not all be created to handle data transfer.  This caught me out six or seven years ago and it caught me out tonight as well.  I tried two cables before I decided to take the warning on this page into account.  I just thought they were being over cautious.  But after rummaging in my daughters room for the cable from her camera, I was delighted and a little frustrated to find that this worked perfectly but the other two cables from my stash did not.  She will not be happy when she finds out I’ve robbed her cable.

I was just about to celebrate when I heard Windows moan that it couldn’t fully install the driver for an FT232 USB UART device.  But fortunately a big of Googling quickly took me to the download page for that driver.  I extracted the zip file into a folder and told Windows to look in a specific location for the driver files. I assume that if you are working on a device like this that you probably know how to update a driver but just in case:

  1.  Go to start
  2. Type
    Device manager
  3. Expand Unknown Devices
  4. Right click the FT232R USB UART device
  5. Click Update Driver
  6. Choose the second option in the wizard to install the driver locally.
  7. Browse to the location where you have extracted the zip file to
  8. Follow the remainder of the wizard.

Are you following this to get the TinyDuino working?  If so, you will notice that you still don’t have a serial port available. 
But Darragh, How do I get my serial port?  That’s simple too.

  1.  Click start
  2. Type
    cmd
  3. In the prompt type the following command then press enter:
    chgport

You will either see a com port or a message saying that no com ports were found.  If you don’t see a com port, you need to go back and update another driver. 

Go back into your device manager, refresh the list and under Unknown Devices you will find a serial adapter.   Right click this, click Update Driver and follow the steps shown above.  Now you havea serial adapter.

You might want to do one more thing if you are working on the TinyDuino board.  You need to configure the Arduino IDE to use the right com port and board.  Select the Arduino Pro under the board type. 

However, I’m not using the Arduino IDE because it’s a horrible, steaming pile of crap.  Instead, I’m using the Platform.IO extension in VSCode.  This is beautiful.  It works so nicely.  Unfortunately, I needed to have the Arduino IDE installed as well but that can just sit on the disk gathering dust.  There’s one thing you need to do in the platform.IO ini file in your project.

Add the correct board and port.
board = pro16MHzatmega328

upload_port=COM3

It will likely find the port automatically but after the other trouble I had, I didn’t want to leave this to chance.

I hope that helps you.  But I usually write these blog posts more for my benefit than anything else.  So I hope this helps me out in the future.  No doubt in a few years I’ll come back to this and will have forgotten all about what I had to do tonight to make it work.

Pictures of the TinyDuino from two angles.

PowerShell script to obtain the health of your domain. Passed back as a single object.

I have used a script for a few years now to check the health of the active directory domain that I’m responsible for in work.  It’s a very useful report written using PowerShell that highlights servers that need attention.  There’s a problem though.  One of the good kind of problems.  The domain hasn’t had a single problem relating to services, FSMO or replication in about four years. So this report is largely ignored.  Every few weeks I go and check it or if something goes wrong and I have any kind of suspicion it could be replication related, I’ll go glance at it really quickly but overall, it’s left there.  This means that potentially something small could go wrong with a component of active directory and I could miss it.  This doesn’t sit right with me.  So as part of a few PowerShell scripts I’ve been writing lately, this regular task was up for review.  My aim is very simple.  Export the report as an object.  Save that object as a JSON formatted file.  Then every hour, go check that JSON file and verify there are no differences.  If a difference is failed, then alert the world that something horrible has happened. The script checks the areas that need to be checked.  This includes DNS, Netlogon, FSMO, replication, advertisements, NTDS, Syslog and ping. I got the original script from here.  It has been modified over the years.


Function GetDomainHealth {
   ###########################Define Variables
   $timeout = "60"
   $DomainHealthReport = @()

   #####################################Get ALL DC Servers
   $getForest = [system.directoryservices.activedirectory.Forest]::GetCurrentForest()

   $DCServers = $getForest.domains | ForEach-Object { $_.DomainControllers } | ForEach-Object { $_.Name } 


   ################Ping Test######

   foreach ($DC in $DCServers) {
      $LogEntry = New-Object -TypeName PSObject   
      $Identity = $DC
      if ( Test-Connection -ComputerName $DC -Count 1 -ErrorAction SilentlyContinue ) {
         $LogEntry | Add-Member -Type NoteProperty `
            -Name Server -Value $Identity -Force
         $LogEntry | Add-Member -Type NoteProperty `
            -Name Ping -Value "Success" -Force

         ##############Netlogon Service Status################
         $serviceStatus = start-job -scriptblock { get-service -ComputerName $($args[0]) -Name "Netlogon" -ErrorAction SilentlyContinue } -ArgumentList $DC
         wait-job $serviceStatus -timeout $timeout
         if ($serviceStatus.state -like "Running") {
            $NetlogonStatus = $serviceStatus.state
            $LogEntry | Add-Member -Type NoteProperty `
               -Name Netlogon -Value $NetlogonStatus -Force
            stop-job $serviceStatus
         }
         else {
            $serviceStatus1 = Receive-job $serviceStatus
            if ($serviceStatus1.status -eq "Running") {
            
               $svcName = $serviceStatus1.name 
               $svcState = $serviceStatus1.status          
               $LogEntry | Add-Member -Type NoteProperty `
                  -Name Netlogon -Value $svcState -Force
            }
            else { 
               $svcName = $serviceStatus1.name 
               $svcState = $serviceStatus1.status          
               $LogEntry | Add-Member -Type NoteProperty `
                  -Name Netlogon -Value $svcState -Force
            } 
         }
         ######################################################
         ##############NTDS Service Status################
         $serviceStatus = start-job -scriptblock { get-service -ComputerName $($args[0]) -Name "NTDS" -ErrorAction SilentlyContinue } -ArgumentList $DC
         wait-job $serviceStatus -timeout $timeout
         if ($serviceStatus.state -like "Running") {
            $NTDSStatus = $serviceStatus.state
            $LogEntry | Add-Member -Type NoteProperty `
               -Name NTDS -Value $NTDSStatus -Force
            stop-job $serviceStatus
         }
         else {
            $serviceStatus1 = Receive-job $serviceStatus
            if ($serviceStatus1.status -eq "Running") {
               $svcName = $serviceStatus1.name 
               $svcState = $serviceStatus1.status          
               $LogEntry | Add-Member -Type NoteProperty `
                  -Name NTDS -Value $svcState -Force
            }
            else { 
            
               $svcName = $serviceStatus1.name 
               $svcState = $serviceStatus1.status          
               $LogEntry | Add-Member -Type NoteProperty `
                  -Name NTDS -Value $svcState -Force
            } 
         }
         <# ######################################################
      ##############DNS Service Status################
      $serviceStatus = start-job -scriptblock { get-service -ComputerName $($args[0]) -Name "DNS" -ErrorAction SilentlyContinue } -ArgumentList $DC
      wait-job $serviceStatus -timeout $timeout
      if ($serviceStatus.state -like "Running") {
         
         
         stop-job $serviceStatus
      }
      else {
         $serviceStatus1 = Receive-job $serviceStatus
         if ($serviceStatus1.status -eq "Running") {
            
            $svcName = $serviceStatus1.name 
            $svcState = $serviceStatus1.status          
            
         }
         else { 
            
         	  $svcName = $serviceStatus1.name 
         	  $svcState = $serviceStatus1.status          
         	  
         } 
      }
      ###################################################### #>

         ####################Netlogons status##################
         add-type -AssemblyName microsoft.visualbasic 
         $cmp = "microsoft.visualbasic.strings" -as [type]
         $sysvol = start-job -scriptblock { dcdiag /test:netlogons /s:$($args[0]) } -ArgumentList $DC
         wait-job $sysvol -timeout $timeout
         if ($sysvol.state -like "Running") {
            $LogEntry | Add-Member -Type NoteProperty `
               -Name Sysvol -Value "Timeout" -Force
            stop-job $sysvol
         }
         else {
            $sysvol1 = Receive-job $sysvol
            if ($cmp::instr($sysvol1, "passed test NetLogons")) {
               $LogEntry | Add-Member -Type NoteProperty `
                  -Name Sysvol -Value "Passed" -Force
            }
            else {
               $LogEntry | Add-Member -Type NoteProperty `
                  -Name Sysvol -Value "Failed" -Force
            }
         }
         ########################################################
         ####################Replications status##################
         add-type -AssemblyName microsoft.visualbasic 
         $cmp = "microsoft.visualbasic.strings" -as [type]
         $sysvol = start-job -scriptblock { dcdiag /test:Replications /s:$($args[0]) } -ArgumentList $DC
         wait-job $sysvol -timeout $timeout
         if ($sysvol.state -like "Running") {
            $LogEntry | Add-Member -Type NoteProperty `
               -Name Replication -Value "Timeout" -Force
            stop-job $sysvol
         }
         else {
            $sysvol1 = Receive-job $sysvol
            if ($cmp::instr($sysvol1, "passed test Replications")) {
               $LogEntry | Add-Member -Type NoteProperty `
                  -Name Replication -Value "Passed" -Force
            }
            else {
               $LogEntry | Add-Member -Type NoteProperty `
                  -Name Replication -Value "Failed" -Force
            }
         }
         ########################################################
         ####################Services status##################
         add-type -AssemblyName microsoft.visualbasic 
         $cmp = "microsoft.visualbasic.strings" -as [type]
         $sysvol = start-job -scriptblock { dcdiag /test:Services /s:$($args[0]) } -ArgumentList $DC
         wait-job $sysvol -timeout $timeout
         if ($sysvol.state -like "Running") {
            $LogEntry | Add-Member -Type NoteProperty `
               -Name Services -Value "Failed" -Force
            stop-job $sysvol
         }
         else {
            $sysvol1 = Receive-job $sysvol
            if ($cmp::instr($sysvol1, "passed test Services")) {
               $LogEntry | Add-Member -Type NoteProperty `
                  -Name Services -Value "Passed" -Force
            }
            else {
               $LogEntry | Add-Member -Type NoteProperty `
                  -Name Services -Value "Failed" -Force
            }
         }
         ########################################################
         ####################Advertising status##################
         add-type -AssemblyName microsoft.visualbasic 
         $cmp = "microsoft.visualbasic.strings" -as [type]
         $sysvol = start-job -scriptblock { dcdiag /test:Advertising /s:$($args[0]) } -ArgumentList $DC
         wait-job $sysvol -timeout $timeout
         if ($sysvol.state -like "Running") {
            $LogEntry | Add-Member -Type NoteProperty `
               -Name Advertising  -Value "Timeout" -Force
            stop-job $sysvol
         }
         else {
            $sysvol1 = Receive-job $sysvol
            if ($cmp::instr($sysvol1, "passed test Advertising")) {
               $LogEntry | Add-Member -Type NoteProperty `
                  -Name Advertising  -Value "Passed" -Force
            }
            else {
               $LogEntry | Add-Member -Type NoteProperty `
                  -Name Advertising  -Value "Failed" -Force
            }
         }
         ########################################################
         ####################FSMOCheck status##################
         add-type -AssemblyName microsoft.visualbasic 
         $cmp = "microsoft.visualbasic.strings" -as [type]
         $sysvol = start-job -scriptblock { dcdiag /test:FSMOCheck /s:$($args[0]) } -ArgumentList $DC
         wait-job $sysvol -timeout $timeout
         if ($sysvol.state -like "Running") {
            $LogEntry | Add-Member -Type NoteProperty `
               -Name FSMO -Value "Timeout" -Force
            stop-job $sysvol
         }
         else {
            $sysvol1 = Receive-job $sysvol
            if ($cmp::instr($sysvol1, "passed test FsmoCheck")) {
               $LogEntry | Add-Member -Type NoteProperty `
                  -Name FSMO -Value "Passed" -Force
            }
            else {
               $LogEntry | Add-Member -Type NoteProperty `
                  -Name FSMO -Value "Failed" -Force
            }
         }
      
                
      } 
      else {
      
         $LogEntry | Add-Member -Type NoteProperty `
            -Name Server -Value $Identity -Force
         $LogEntry | Add-Member -Type NoteProperty `
            -Name Ping -Value "Failed" -Force
         $LogEntry | Add-Member -Type NoteProperty `
            -Name Netlogon -Value "Failed" -Force
         $LogEntry | Add-Member -Type NoteProperty `
            -Name NTDS -Value "Failed" -Force
         $LogEntry | Add-Member -Type NoteProperty `
            -Name Sysvol -Value "Failed" -Force
         $LogEntry | Add-Member -Type NoteProperty `
            -Name Replication -Value "Failed" -Force
         $LogEntry | Add-Member -Type NoteProperty `
            -Name Services -Value "Failed" -Force
         $LogEntry | Add-Member -Type NoteProperty `
            -Name Advertising -Value "Failed" -Force
         $LogEntry | Add-Member -Type NoteProperty `
            -Name FSMO -Value "Failed" -Force     
      }                
      $DomainHealthReport += $LogEntry
   } 
   Return $DomainHealthReport

}
GetDomainHealth

2020. You weren’t the worst.

Very good friends of mine have been devastated by 2020. Their livelihoods have been decimated, career plans have been ruined, long standing and successful businesses that even endured the harsh bight of recession have drowned in the deafening silence of quiet streets.  Professional musicians continue to feel let down and forgotten by the government, pubs and even the people they entertained.  It is a horrible time for many people.  It has been no walk in the park for me either. But with all this said, 2020 was quite okay for me.  I write this post knowing that many people who are very good friends are having a terrible time of it right now. My intention is not to diminish or disrespect the situation that they are in.  This post is mainly for me.  It will remind me in the years to come that 2020 was for many reasons a year that I could be reasonably happy with. 

Maybe it is because I started 2020 with a horrible sense of dread and
sorrow.  I was looking at the imminent retirement of Nama, my previous
guide dog with no successor lined up. There were situations in work that I felt
uncertain about, music in Drogheda had come to a standstill for me since the
departure of the Fleadh and still musicians all over the country were posting
to Facebook about the joy they were having several nights a week by simply
playing music in their hometown.   So last year, I put a brave face
on things and launched myself into a new year.

I had meant to write this post before now. But I did not bother. 
Mainly because I was trying to give myself some time away from typing. 
But it is actually timely that I write this today.  This day last year, I
was sitting in my kitchen.  It was 6:52am.  I know this because I
have a rigid morning routine and I can time it all exactly so that I know
exactly when I need to leave for the bus.  I got up at 6:40, fed Nama,
took him out to relieve himself, prepared breakfast that consisted of a few
Weetabix and a coffee, told Alexa to play my flash briefing and finally sat
down for no more than 10 minutes before I had to jump into the shower. 
The flash briefing ends after 10 minutes so I know to get moving.  Anyway.
I digress as usual.  The flash briefing thatday had the normal daily tech
news etc. But as I like keeping up with global news, I had the BBC world
service lined up next.  I remember the presenter; a stern sounding woman
talk about this thing called the Corona virus that had broken out in Wuhan China.  I remember
thinking that I was just hoping that something more relevant would come
up.   Three months later, I would understand that news article was
going to change the world in significant ways.  Even now, the significance
of this is probably still not known to it is fullest around the world.

But this is not a Covid-19 blog post.  I cannot really help it.  I am a glass half full kind of person. Or maybe that’s just because things have turned out quite well for me.  The first thing that happened was we were all asked to work from home.  This worked out well for me. I love working from here.  I have a fantastic office.  It is large, quiet and I have a 5.1 surround sound speaker system that keeps me motivated. I also have a computer here that blows anything in work away.  2 Xeon CPU’s. 8 cores each with 32gb of RAM.  There’s also 4tb of solid-state storage on an array of several disks for high performance. I also have a particularly nice keyboard, plenty of desk space and did I mention it is perfectly quiet?  I worked from home years ago, so I have noise insulation in the walls. There are also 4 doors between me and the rest of the house so there is a very specific barrier between me and everyone else.  I also love what I do so there is no need for any kind of incentive to create a structure where I must be in the office at a certain time.  In fact, the problem I have regularly encountered is when I should switch off.  However, ……… I was going to say that I am going to get better at switching off but the only person I am fooling with that sentence is me.

Moving on.

One other thing that happened around the end of February was Nama retired.  This was very difficult for me.  Taking the fact that I really liked Nama’s character and that we clicked immediately out of the equation, I really missed him as a guide.  I hate using the cane. I feel slow and inaccurate with it. Lock down made my life easier in many ways.  Not commuting every day removed a major stress point.

During lock down, I decided to spend some time in the evenings refurbishing my back yard.  I have a tiny scut of a back yard but still, it was the last part of the house that we had not renovated since buying the house in 2008.  So armed with a few shovels, a pick, a sledgehammer, two wheelbarrows, a nail bar, and a saw, I set about ripping up the old rotten deck.  Each day I spent about 20 minutes during lunch prying up more wood. In the evening, I would do more for an hour or so. Then I started digging it out.  Each time I had a wheelbarrow full, I set up a ramp so that Emma and I could then wheel it through the house to get dumped in a pile at the side of the driveway. While wheeling it through the house, Emma steered the wheelbarrow, and I went at the front.  Walking forward, I angled my hands to grab the wheelbarrow. I took the weight of it going through the house.  Six months later, I still wake up without the ability to move my ring finger and my middle finger on my right hand.  I have probably damaged it.  But at the time, I was trying to not let the weight of the wheelbarrow crack the tiles in the hall. I am a strong enough fella so at the time, it did not feel heavy but looking back on it, I had a very heavy object pulling out of my fingers several times a day for a few weeks.  It was a very stupid thing to do. But it is grand. The job got done.  Finally, after weeks of work fitting it in here and there, I cleared the deck and the soil.  Yes. I am not ashamed to say it took me that long. When I was doing this, the weather started getting warmer, exams were starting so I was busy in work and, I am not used to this kind of manual work. It was difficult.  Very enjoyable, but hard. Then, I got builders in to finish the rest of it.  They removed two very old telephone poles from the space, used a cango hammer to dig down through the old concrete and remove the old dog run.  They then took in a few tons of 408 stone, compacted it and lay wires for the lights.  I also ran two cables for Ethernet as I have a server running in a little watertight shed at the back. Finally, we put down porcelain tiles, added 16 up lights and put in a slightly better dog run.  The lights are using smart bulbs so the colour can change, and we can turn them on using various voice assistants.  I am happy with the job. The area is now much more modern, it feels larger and I saved a lot of money by clearing it myself.  I even managed to get rid of almost all the topsoil, the old tiles, and the phone poles without it costing me anything.  I asked people if they wanted the wood for burning, then I asked someone else if he wanted the tiles to fill in a big hole, I knew he had from old foundations. Finally, I asked online if anyone wanted soil. I had people pulling up in cars for over a week.  It was at the height of lockdown, so no one came in, no one rang the door. They just pulled up, took as much soil as they wanted then drove away again.  Finally, the remaining wood from the deck was taken in our car by loading it up as much as we could to the recycle centre.  3 Euro and it was all disposed of.  We spent time removing nails etc and Emma got to use a jigsaw to cut the wood into much smaller lengths, but a few hours of work saved us a fortune on jumbo bins.  It was also more environmentally friendly as all the unwanted rubble and soil is now reused.

In the summer, Kaiser arrived. This has made a huge difference to my life.  I had been very busy over May, June, and July. So, I admit. I probably walked a maximum of 3km a week.  Since Kaiser arrived, I started walking about 6km a day. Now I am walking 8 to 10km a day. It is not just about the exercise although that is incredibly important.  It is about simply having the independence to get out alone. From March to May, I was walking almost every day with Emma, Rían and Méabh. But we were walking at a very slow pace and I could not really strike out on my own.  Now, I want to say at this point that Méabh although she was just 6 at the time took great delight in guiding me during these walks.  Rían got in on it then as well of course.  Most days, I had one child hanging on to each hand. But instead of me taking them for a walk, they were taking me for a walk.  I got to bring them all over Drogheda.  Because I was finishing work before 6, by 6pm, we were already out the door enjoying the spring weather.  We walked around places that they would never have reason to visit before. We even walked through areas that we would drive through regularly just so they had a moment to stand and look around from time to time.  Exploring your hometown by foot is very different to driving through it all the time. I valued these walks.  Again, going back to my point about commuting earlier, by the time I got home, got something to eat, took the dog out to relieve himself and said hello to everyone, it was at least 10 to 7. During a school night, the children go to bed at 7:30 so there is not much point going for a walk.  I relished the extra time that lock down gave me to spend with them.  Sorry. I keep going off track.  Going back to Kaiser.  I have written about him before.  He is so much more involved with the family compared to Nama.  Nama and I had a great bond. But he would ignore everyone else at home.  It is lovely to see Kaiser engage with Emma, Méabh and Rían so much more.  Of course, he knows who feeds him and who walks him so when I go to my office to start work in the morning, he is still my shadow waiting to follow me in. But I am delighted that he knows when it is time to collect Rían. I bring him out around lunch time, and he knows that it is time to walk to the bus.  He stands at the harness waiting to go.  Kaiser and Rían have a very close bond. They are both very relaxed in each other’s company.

Finally, in 2020, I was given the promotion to senior Systems Engineer.  This comes with some additional responsibility and some extra reward as well.  It is nice to be acknowledge for something that you particularly like doing. I will not write much about that as I do not want to be unfair to readers who are not having such a great time right now.

You will notice that there is absolutely nothing about music in this post. That is very unusual for me when writing a year in review.  But 2020 was void of music for the most part.  I did some nice gigs at the start. I have also featured on a few videos in the latter part of 2020. But there is nothing that has really given me the satisfaction of a good roaring gig. I miss the distraction that music gives me.  I have said before that playing the uilleann pipes is like a drug.  A drug that requires you to become hyper-focused on one specific act.  When playing them in a good gig where there is a connection between the musicians and the audience, there is only one thing on your mind. That is the instrument in your hands. Nothing else is important and every problem gets pushed aside. It is one of the most freeing things. If you do not play music, I wish for your sake that you could experience what I am talking about.

There you have it.  My rambling year in review.  2020 was difficult, it was different, it was even disastrous for many people around the world. But for me in my little corner, it has been decent. Maybe it is because I started it with very low expectations. But overall, I am reasonably happy with the hand I was dealt.

I hope you have a good 2021.  I hope I have a good 2021 as well. I am worried about the situation now. I have no intention of traveling to Dublin for the foreseeable future. I am walking Kaiser every day; I am spending time with my family and I’m continuing to learn.  I am happy with that right now.  I hope wherever you are, that you are doing well.

Seems that I forgot a few things. I had just published this, gone back inside and set the alarm for the night when Emma reminded me of a few important items. firstly, we bought a new car in August. We got a caravan in March as well. So with the caravan and the new car, we have had a few really nice short holidays in Donegal and Galway. Pictures will follow in a later post. Now, I’m typing no more as this last part has been reluctantly tapped out on my phone.

Checking Covid-19 national test result figures

I don’t really like just relying on news papers and online media for information. especially when it’s as important as trends relating to the spread of Covid-19. So I’m working on some very simple PowerShell scripts to get the information from the HPSE. Feel free to grab this and add it to something more interesting. It is just the very basics at the moment but it’s a nice way of finding out what happened on a given date or a given location.

$RawCovidTestData = invoke-RestMethod https://opendata.arcgis.com/datasets/f6d6332820ca466999dbd852f6ad4d5a_0.geojson
$TestFeatures = $RawCovidTestData.Features
$TestResults = $TestFeatures.Properties

2021/01/01 11:00:00+00
$TestResults | Where-object {$_.Date_HPSC -eq '2021/01/01 11:00:00+00'}


$CovidByCounty = invoke-RestMethod https://opendata.arcgis.com/datasets/4779c505c43c40da9101ce53f34bb923_0.geojson
$FeaturesByCounty = $CovidByCounty.Features
$CovidCountyDetails = $FeaturesByCounty.Properties
$CovidCountyDetails | Where-Object {$_.CountyName -eq 'Louth'}

Home server hosting when it’s -3 degrees with 92% humidity

The reason that this is so interesting is technically this server is hosted outside. The damn thing was far too noisy so I built a special place for it. You can watch this video to see what’s going on. There’s also a link in the description of that video to the very first demonstration where I show my unique way of hosting this server.

Elf on the Shelf 2020. Maybe some ideas for you?

Why oh Why did this persecuting, annoying and messing elf decide to pay us a visit? I can tell you one thing! He must have had way too much time on his hands. Zipidy was his name and although he arrived a little late, he certainly remained active for the 17 nights that he lodged in our house. He must have relented when he heard Méabh and Rían jibberjabber every day after school about other elves in the area. Let’s face it, Elves aren’t always the most creative pests so for other elves that might be reading this, here are the antics of what he got up to. I think it might be a little entertaining. All I can say is, I’m hoping that he doesn’t return next year.😢😢  Move your mouse over the pictures for descriptions. Or long press.

Tech video idea.

I don’t really know if this is going to work out overall. The first one was quite easy. But I’m aware of quite a few areas in it that require urgent improvement if I’m going to make any kind of seriously compelling content. But here goes. Video one. It’s not as much informative as it is a test of the set up and the editing / publishing process.

Christmas 2020. Not that different really.

Invariably, Christmas ends every year and the topic of conversation turns to that annual question:

So how was your Christmas?

Answer:

Grand. Quiet as usual.

So really, every Christmas is usually quiet. Especially when you have a young family. So really, this blog post is no different to a post that would be recorded any other year. We cooked and cleaned, the hcildren played with their toys, we called to family and although we stood outside, we still got to do what matters. Show them that they were considered during Christmas.

I don’t usually record a blog post over Christmas. But I wasn’t happy with the mono audio captured on Christmas eve. I was very frustrated to find that the microphone switched back to using mono after the first recording. I certainly didn’t configure that. I shouldn’t need to check the settings before every recording but I think i’ll need to get into that routine.

The night before Christmas – 2020

Here goes. The next in the series of podcasts about the night before Christmas in this Ó Héiligh household. The stars of the show as usual are Méabh who is 7 this year and Rían who is 5. I am continually proud of Méabh. Her ambition to constantly improve herself is just stunning. But it must be said that this year Rían has blown my expectations out of the water. His speech, confidence, caring nature and sense of what he thinks is funny have all developed way faster than I anticipated. I was going to narate over the audio but I decided against it. I have listened back to previous years and I came to the decision that this is about the children. It’s about their energy on the night before Christmas. I will relish the time when they are adults when I can show them all of the memories that we made as a family during this great time of year.

I would like to take a moment to wish you all a very happy Christmas. May 2021 bring everything you would like for you and your family.

Microsoft Dynamics basics – Day 2.

I was saying during my blog post yesterday that I am finding the training on Dynamics fundamentals to be very interesting. Today we were only scheduled to look at the field agent’s functionality and data exports and exports.  But we flew through those parts of the course, so I got to spend some time investigating some of the pros and cons of model-based apps verses canvas apps. Firstly, both kind of apps are very data driven.  They also support this notion of (low code). That means you can get up and running with quite a decent app without writing a single line of code.  But if there is something you want to do like refreshing the form when a button is clicked for example, you have the option of using JavaScript.  The interesting thing I took from the comparison of model driven verses canvas was the fact that both are using strongly typed datasets. Okay. The model is exposed directly to the model-based app even at run time but even in a canvas app, it is still using the data model of the solution that it is built on so that for example, if you create a canvas app based on a table, the fields are presented by default.  So too are default actions like select, insert, update and delete.  It reminds me of creating a strongly typed model using entity framework.  If you want, you can have it create default actions that you can use in your controllers.  Sure, there is no customization in these methods, they just select everything for example instead of a subset of the rows in that table, but it is still really nice that this is done by default. It also makes understanding some of this a little easier as they share concepts across technologies.

Oh, one thing that we covered yesterday but that I completely forgot about is the same connection strings that allow you to connect Power BI to Dynamics could also be used for connecting SQL Server Management studio.  But wait.  Before you go poking around your live Dynamics database, be aware that this locks the tables when you are connected! Yeah. I am glad that we covered that.  This is probably something I would have done just to go poking around.  However, I also learned today that canvas apps can use connections to different solutions.  So, you could even create an app on one tenancy and connect that to a Dynamics solution in another tenancy. That is quite nice.   However, it is not possible to do this in a model driven app. That little nugget blows one of my earlier ideas out the window.

Another interesting thing I learned today Is solutions can be exported and imported.  Solutions contain the Common Data model, the views, graphs, dashboards and everything else excluding the data that makes up a Dynamics installation.  The CDS Common data Service is still something I am not sure of.  According to the documentation this is stored in the solution. But that just does not make logical sense to me.    Sorry. I am going off point.  What I am trying to say is this is fantastic for a few reasons.  Firstly, it makes migrating changes along the dev to release pipeline easy.  Your version your solutions and just export / import them from dev to test staging to production.  What is even better is you can tie in Git hub to regularly back up your solutions.  Again, that contains your CDM, CDS, views, dashboards, graphs, site aps and everything else (excluding the data) in your Dynamics instance.  When you export the solution, it arrives on your computer as a repository of XML files. So, you could even run comparisons on these files.

There is a great way of kicking the tires on this.  I wish every service were as open.  Go to https://trials.dynamics.com  and sign up for each dynamics component you want to test.

It is very clear as I go through this system more and more each day that it is interconnectivity with Power platform is now at the core of dynamics.  Now with the unification of the UI to match that of Power Platform, it is becoming hard to see where one ends and the other begins.  Of course, with any UI migration, it has not done and dusted over night, but I think I said this last night.  It seems that I am coming to the Dynamics world at a really good time.