Clint Patterson's Blog

rss

Read the thoughts and musings of a cultured redneck here


DNN Prompt: Making DNN Admins Power Admins via the Command Line
Specify Alternate Text

At DNN Summit I learned of a new tool created by Kelly Ford called “DNN Prompt”. I first saw it in a session that Peter Donker gave and it immediately caught my attention. Since then I’ve learned more about it and want to share some initial thoughts on it.

Peter was demoing something related to the persona bar in his session on React.js when he mentioned that he was going to try a “new trick” he’d just learned from Kelly Ford. He then opened a panel up and a command line was visible. He typed in something like “new-extension” and voila, just like that a new extension was created. He closed the panel and moved on with this session, while I was left in amazement wondering what had just happened.

As one of the hosts of DNN Summit I was in and out of rooms all day, taking pictures and tweeting them, and just busy helping out in general. It was hard for me to pay attention to things, but whatever Peter had just done definitely caught my eye. I turned to the person beside me and asked them what was that panel he just used. I thought it may have been some Powershell script or something. The person to my left didn’t know either.

Enter DNN Prompt
After asking around and nagging enough people I learned that this new feature was called “DNN Prompt”. Prompt is the latest and greatest from Kelly Ford who most of the DNN Community knows as being the creator of XMod

Thinking back on it I think I remember hearing whispers around the DNN Community that Kelly had been working on something that was really cool, but yet I never heard any details. Now I’d seen it in action and was connecting the dots.  At first glance I thought it was black magic of sorts.

In the time since DNN Summit I’ve been able to connect with Kelly and the team of people working on DNN Prompt and actually use the tool. It is definitely neat. In this blog I want to provide a quick intro video on DNN Prompt and relevant links for those who are interested.

The Return to the Command Line
It seems there’s been a recent trend going back to the command line among developers. If you look around at NPM, Node.js, etc. you’ll find the command line being used more and more. Even Kelly’s recent presentation to the Southern Fried DNN User Group here in Charlotte referred to this notion as his title was “How Something Old Can Make DNN New Again”. 

Although the user interface for the command line is not as “user friendly” as a wizard based approach it does allow for faster execution of tasks. When you think about it, it really makes sense because the users of this kind of tool are typically admins or developers… not content editors… and they love this kind of power at their fingertips. Don't get me wrong though, this tool is more than just about speed. The vision Kelly has for the tool is very forward thinking and one to get excited about.

DNN Prompt is a Game-Changer
From my first few times using DNN prompt and from seeing people's reactions at the Southern Fried DNN User Group meeting (both in-person and online) I think it’s a game changer for DNN. Everyone's minds were spinning and it didn't take developer's long to see what this could mean for DNN as the tool is extensible. I think Prompt will be a DNN Administrator’s best friend. Normal DNN administrators will now be “Power Administrators” once they use DNN Prompt enough to know the commands by heart. At conferences in the future you’ll see everyone having Prompt installed, using, and referencing it. I plan on using it a lot in my own DNN sites and think that you will end up using it too! Kelly's goal is to get this into the core of DNN Platform and I hope he is successful with that goal.

As you saw in the video, DNN Prompt has the potential to be a game changer for DNN. It will impact the DNN platform, community, and ecosystem. Also, just as Kelly’s earlier DNN creation (XMOD) has done, I believe Prompt could follow a similar path and potentially spawn a new sub-ecosystem for DNN developers and administrators. DNN Prompt could open a new era for development within the DNN ecosystem as the possibilities are endless. Imagine doing all your daily tasks via the command line or imagine modules and other extensions having their own hooks into Prompt. What if you could instantly shut down registrations across 100 portals with one single command or script out batch commands to do whatever you want within your site… it could get interesting quickly!

Get Involved
Kelly ended his presentation with asking people to get involved. He wants to know your feedback, how you envision using the tool, the commands that would be important to you, etc. The good news is taht DNN Prompt is open source and active on GitHub! I know that the team of people developing the solution would love to have more people contributing to the code base and pushing the solution forward.

Here are some links for those of you interested in participating and knowing more:


3 Reasons to Attend DNNCon Baltimore
Specify Alternate Text
DNNCon Baltimore Banner

 

It’s DNNCon week! The DNN Community is ramping up with excitement about the conference this upcoming weekend. I know that our Carolina based crew is looking forward to the road trip to the DC/Baltimore area, the convos/sessions/parties at the conference, and most of all the fellowship with everyone in the community.

That said, if you’re still on the fence about attending I think you should give a go and here are 3 reasons why:

  1. You’ll Meet People Who Can Help You Learn
    If you’re looking to learn there is no place better to be. Whether you are a DNN guru or a new person in the DNN Community there is so much knowledge to soak in that you should definitely attend. One of the things I’ve always enjoyed is learning how other people go about solving the same challenges that I was facing. Literally everyone around you at the conference has some sort of experience or knowledge that you can benefit from. All you have to do is ask… don’t be shy! 
  2. Node / SPA / MVC / JWT / IOT
    If you’re in the loop on trending technologies then you’ve probably heard of Node JS, Single Page Applications, the Model View Contoller programming style, JSON Web tokens, and the Internet of Things. However, if you’re like me you probably don’t know how to use all of those like a rock star just yet. Well the good news is that there are sessions on all these subjects during the conference! Where else can you go and find this type of knowledge in one day that is all linked to DNN? I’m excited to learn more about these technologies and their integrations with DNN and you should be too!
  3. Open Source is Free & Awesome and DNNCon Is Too!
    DNN is an open source platform and as such you are able to freely download the code and contribute/modify/update as you wish (DNN Platform on GitHub). There is a lot of power, energy, and community in open source and in the DNN Community specifically. This weekend you can experience all that and more simply by showing up at the event. You may even win some of the awesome swag that’s available too! I’ve seen tweets about XBOX’s, Drones, and more! The future is open source, join the movement!
I also heard there was going to be an interesting keynote + some creative Ignite sessions as well! We hope to see you this weekend at DNNCon Baltimore!


Using TypeKit in DotNetNuke
Specify Alternate Text
TypekitLike many web designers I’m constantly working on some side project or rebuilding/redesigning one of my sites.  I’m currently in the process of redesigning a site and since I’m a member of Adobe’s Creative Cloud I figured I should freshen up some of the fonts that I use on the site via Adobe’s Typekit. Typekit makes it really simple to integrate custom fonts into your site. In this blog I’ll walk through how to incorporate custom fonts through Typekit in your DotNetNuke site.

The first thing to do is navigate to the TypeKit.com site. Once you’re logged in you can browse the font gallery and select the font(s) of your choice.  I chose the “Atrament web” font style for the site I’m redesigning. The image below shows the screen where you view and choose the font(s) you want to use.

Once you choose a font you can click to the “Type Tester” section to see how any specific words you type will look in your selected font. You can easily increase or decrease the font with the slider and you can also view how the font looks in various browsers on the “Browser Samples” tab as shown in the screenshot below.

Browser Samples in Typekit

Typekit uses “kits” to organize fonts for usage by designers. It’s really easy to create a new kit. Simply hover the kit section and click “Add New Kit”. As you can see from the screenshot below, I've created a kit for each site on which I use custom fonts. You can see how to add a new kit in the below screenshot. 

Add a new kit in Adobe's Typekit

Now that the "kit" is ready I need to add some fonts to it. Once you decide on a font you simply hover over the font and click “Add to Kit” and the font will be added to the kit for which you are currently viewing as denoted in the below image.

Adding a font to a kit in Adobe's Typekit

After you add a font to a kit you can go into the "kit editor" to further customize. Once you’re inside the kit editor you can customize various settings and styles that make the custom fonts appear on your site. You can simply add the CSS selectors that you’re using on your site & they will then render showing the custom font that you've just selected in Typekit. Notice in the below screenshot where I'm adding " .ANewSelector " class in Typekit's editor.

Adding a new CSS Selector in Adobe's Typekit

Now at this point you’re probably wondering what is linking your site & Typekit together so that the selectors know which font face to use. In the kit editor Typekit gives you 2 lines of JavaScript that you need to include in order to make things work. Just copy and paste that script (shown in the below screenshot) into your code and you’ll be ready to rock. 

Copy & Paste JavaScript from Typekit

If you wanted to access specific weights & styles via your skin.css file you can click on the “Using weights & fonts in your CSS” option which will give you the below screen allowing you to copy the CSS necessary for your specific font & weight.

Using fonts & weights in Typekit

Now if you did click the “Copy CSS” option you would end up with some CSS that resembled the below:

font-family: "atrament-web",sans-serif; font-style: normal; font-weight: 400;

Once you click publish you will be ready to go. I should also mention that if you want to develop or test out styles locally you can also enter “localhost” in your kit editor settings and that will make your local sites work with the new custom fonts.

Using LocalHost in TypeKit

If you were concerned about how your styles would display on mobile devices you can click into the "Mobile Settings" section of the Typekit editor as seen in the below screenshot.

Typekit's mobile settings

Now to make all of this active we need to click the big green “Publish” button at the bottom right hand corner of the kit editor screen which you can see in the below screenshot. 

Adobe's Typekit

At this point we’ve successfully chosen our fonts and published them linking the custom fonts to our site. Now we just need to reference them in our skin's .ascx file, the skin.css or specific modules. In my skin’s .ascx file I’ve added the 2 lines of JavaScript to reference TypeKit.

Embedding TypeKit's JavaScript References in my DotNetNuke skin

Then in my HTML Module I simply referenced the CSS classes that I specified earlier in the Typekit selectors area.

Using CSS classes in my DotNetNuke module

And that's all it takes to get everything lined up. You can see an example of the redesigned home page (running locally) using the custom font “Atrament web” that I selected earlier.

WeHuntSC.com using new custom fonts via Adobe's Typekit

Typekit makes it extremely easy to use custom fonts in your site. If you’re a Creative Cloud member you should check it out. I hope this blog has been helpful to you with integrating custom fonts in your DotNetNuke sites.

Regards,

Clint



Custom styles in the DotNetNuke Telerik Rad Editor
Specify Alternate Text

If you ever need to put some custom styles in the Telerik Rad Editor of DotNetNuke HTML module it can be a little frustrating if you don't know exactly where to put the files. It's actually a simple process. I cut a quick video walking through this process and wanted to post here in hopes of helping someone who may encounter this same issue.

 


TEDxCharlotteEd
Specify Alternate Text

TEDxCharlotteEd
About a month ago a friend of mine named Jason Fararooei told me I should submit a session to the TEDxCharlotteEd event here in Charlotte. I had no idea what this event was about so I took a look at the site. TEDxCharlotteEd’s web site describes the event as “an event that highlights innovative partnerships that are strengthening our community and enriching the lives of students in the Charlotte area.” The web site had a “Call for Speakers” section where they asked speakers from the community to submit their ideas & topics for sessions at the event.
 
Jason had previously worked with me on a video where I spoke in a local high school to some computer programming and web design classes about Microsoft’s Open Source web platform DotNetNuke. He knew that I was passionate about both technology and education so he encouraged me to enter a submission to the event. 
 
Below is the video of me speaking to the high school class

 
 
I thought about Jason’s suggestion for a while and decided to submit a topic. I submitted a topic titled “Open Source + Education = Brighter Future”. Upon submitting my idea I viewed the source code for the site and noticed that TEDxCharlotteEd’s site was running on an open source web platform… perfectly ironic.
 
   TEDxCharlotteEd - Twitter announcement of speakers via tweetingTEDxCharlotteEd - Twitter Announcment of speakers via
  Following the link I guess this tweet means I didn't get picked
I’ve posted this blog because I wanted to share my idea even though I didn’t get selected to be a presenter… at least I don’t think I got selected. I got an email saying that my submission was received and being reviewed, but I did not get one saying that I had or had not been selected. Though, given a twitter update from the TEDxCharlotteEd Twitter account announcing the event speakers I didn’t see my name listed and figured it was ok to share the idea here on my blog. I already had the idea conceptualized in my mind so I'm just blogging it instead.
 
Education
I should probably back up and say that I grew up with parents who were both educators and later administrators in school systems in South Carolina. Today I have several close friends who are teachers and administrators in schools in the greater Charlotte community and one friend who is a former principal who now mentors principals in Charlotte.  I also had a brief stint teaching at Weddington High School in 2005-2006. Growing up in an educational environment, having previously taught, still helping coach my old high school football team, and having friends who are active within the education system makes me familiar with some of the challenges faced in education.  I know that there isn’t a ton of money to throw around and there aren’t a lot of resources available for school districts to utilize. Teachers are held to high standards and are compensated with low wages. To make it worse, recent budget cuts have forced many great teachers out of the profession as well as made it difficult for students to use cutting edge technologies simply because the school systems can’t afford them along with the materials needed to teach. Our school systems need help in a lot of different forms...one of which is our community.
 
The Web, Open Source, & DotNetNuke
Along with growing up with an educational background I grew up with a passion for the web. I can remember first surfing the internet back in the 90’s on a 56k modem and loving it. The web was a catalyst to my imagination and it still keeps the gears in my mind turning. 
 
As I learned more and more about web design and development I quickly realized that the tools one uses to build web sites can quickly become expensive. To build anything of significance a web designer has to have the right tools (software & hardware) and a good deal of knowledge. This sometimes brought on road blocks for me. I never had a ton of money to throw at software and computers and I also didn’t have a wealth of knowledge. 
 
DotNetNuke LogoOne day I accidentally bumped into DotNetNuke while looking into some style sheets while on my job which was, at that time, Queens University of Charlotte.  I became interested in the technology and decided to further investigate the platform.  
 
A week or two later I had the “aha” moment where I realized that somewhere, somebody was putting out a whole content management system (CMS) for free on the net. In my mind these people (whoever they were) were crazy to put this stuff out there for free.  With little cash and little knowledge this was like a dream come true for me. I could leverage the power of this system without creating it! It was a moment that changed my life.  Now days every time I use the system I know that I’m essentially standing on the shoulders of knowledge of many different developers from around the world.
 
Since researching and learning more I’ve become really enthusiastic about open source technologies, particularly DotNetNuke. Let me describe DotNetNuke a little more… DotNetNuke is a platform that allows for rapid creation of web sites and web applications. It’s very flexible, scalable, easy to learn, and most importantly it’s free! If you don’t speak “tech” lingo then you should research what open source means. In short, open source means that anyone can download the source code for the application, edit it, modify it, contribute to it, use it, etc. 
 
DotNetNuke an agile platform   
DotNetNuke helps businesses be agile  
After getting involved with DotNetNuke and interacting with the global community behind the platform I realized that my initial reaction of “these people are crazy” was very wrong. Turns out, these people are brilliant. By being open sourced, DotNetNuke taps into creativity and innovation from a vast audience of web designers and developers in a unique way. Many high level developers enjoy freely giving their code contributions to the greater good of the platform because they know that through the contributions of the greater body will stem a greater platform. This model touches on some levels of Systems Theory. This level of synergy is tough to find in a typical for-profit organization where people work because they have to rather than because they want to. I know this statement doesn't apply to every single organization, but I would say it applies to the majority.
 
Developers from all around the world come together to create the greater DotNetNuke Community.  The community is part of an ecosystem that helps push the platform forward. The ecosystem consists of many entities such as user groups, hosting companies, the corporation that formed around DotNetNuke, vendors, consultants, designers, developers, and integrators.  The result of the ecosystem's synergy is an awesome Content Management System and web application framework.  There’s a reason why DotNetNuke is the #1 open source CMS for .NET technologies.  Did I mention we have a thriving DotNetNuke user group here in Charlotte?
 
Education + Open Source
Why is all of this important to the education system in the greater Charlotte area or in any school system open to change? Simply put, business is changing, technology is changing, and the way we interact with technology is changing the world. Everyone is reacting to the impetus of change and school systems should too! How will our students compete with the global workforce of competition that awaits them upon graduation? The resources for learning cutting edge technologies (such as DotNetNuke) are available and are at the finger tips of our students. The only thing standing between the students and these resources is the school systems reacting to the change that’s going on around them and adjusting course. It can be done and it isn’t expensive.
 
With the growth of the web and web technologies, Microsoft started offering “Express” versions of their software. These “Express” versions of their software are free.  What this means is that all the software needed to develop a DotNetNuke site locally is completely free!  By “locally” I mean on a computer sitting in a classroom in any school… no networking or school system servers needed for students to learn and create their own web sites.  
 
Most schools already have computer labs on which these softwares can run. Check out SQL Server Express, Visual Studio Express, WebMatrix, & DotNetNuke and see if you can’t get any or all of those up and running for free within a day.  All of this software and technology is sitting out there available to anyone with the motivation to use it. If school systems got motivated and embraced these open source technologies students would benefit in the long run and hopefully the technology sector in Charlotte (or any city) would too. Decisions that administrators make surrounding curriculum today could directly affect the economy of Charlotte tomorrow, if not sooner.
 
I mentioned that we have a thriving DotNetNuke User Group here in Charlotte.  We meet once a month at Microsoft Charlotte and our group would love to have any and all interested students join us once a month to learn more about the framework. We bring in guest speakers, have free food, and free prizes as well. As technologies change so does the platform so there is always more to learn and relationships to be built.  Surely students in our region can learn from people who use the technology on a daily basis.
 
Charlotte is also home to at least 3 DotNetNuke specific web firms (that I know of) and guess what…those web firms come to our user group to connect and sometimes they hire talent that shows up at our user group.  It’s happened before and it can happen again. If a student was motivated enough to learn DotNetNuke and got a good handle on it then I feel sure they could find somewhere to get plugged in, utilize their skills, and get some extra gas money… that is if they didn’t decide to create a web firm while they’re still in school.  If the student continued to learn and grow with the platform you never know what they might create in the future that could potentially change our city or the world in some way.
 
TEDxCharlotteEd
 
TEDxCharlotteEd sought “innovative partnership that could strengthen our community” and I feel that for education a partnership or simply embracing open source technologies could achieve this. Being fair I should mention that there are other open source technologies out there, but I know that there is a strong DotNetNuke presence in the Charlotte area that could assist and partner with the school systems in the movement.  
 
Many of the training resources and ancillary materials that are being cut out of budgets within education are free and available online, you just have to know where to look and be motivated about it.  Need training materials for your teacher’s lesson plans or for students who want to know more? There’s a whole free video library full of them in DotNetNuke’s online video library.  Have a question that you can’t answer? Just use the hashtag #DotNetNuke on Twitter or make a post in the DotNetNuke Forums or Community Exchange and you’ll find help sooner than later. From an educational perspective these resources are like "live tutors" offering real-time assistance. Need a professional web developer to speak on real life applications of DotNetNuke to your students? We’ve got a whole user group full of them who would love to present.  Want your students to learn from reputable developers from around the globe? Have them attend our user group as homework… if they can’t make it they can join the online stream. There are a great number of resources out there available for learning DotNetNuke in Charlotte and beyond. 
 
In sum, if the school systems in the Charlotte area, or any area for that matter, incorporated open source technologies such as DotNetNuke into their curriculum then software costs would most likely be lessened, students would benefit from utilizing cutting edge technologies, students would be better equipped for college or employment, and students and teachers alike could tap into a global community of innovation that’s all free of charge.  Embracing these technologies could greatly benefit the students and Charlotte in the long-run.  Why can’t Charlotte be a hot-bed for technology startups in the future? Take a look at Packard Place... it’s already starting a little. The decision to adjust course and embrace change could be the difference.
 
If you agree that Open Source + Education = A Brighter Future (and that this is an idea worth spreading) then give this page a tweet!
 
Regards,
 
 
Clint
 
 

Why you shouldn?t host a DotNetNuke site in a sub-folder
Specify Alternate Text
 
Skin folder structureI first encountered DotNetNuke incidentally.  The Admissions office at the University where I was employed was using an outside vendor for an admissions application and the application ran off DotNetNuke.  I had heard the term ?DotNetNuke? before, but didn?t have any experience with it.  It didn?t take long before the Admissions team asked us to add their logo into the background.  I was caught in the situation that many web/IT people find themselves...that?s the ?Hey you mess with computers so come do this? situation where you have no clue and have to learn something new to complete a task.
 
All the Admissions team wanted was their logo in the background of the site.  I started using the Firebug plug-in to look at the styles of the site and eventually I traced down the background image and over wrote the file with an updated image.  This was my first look into the folder structure of DotNetNuke.  Now days I can zip through those folder paths much more quickly, but back then it was a major headache.
 
This ?DotNetNuke? thing kind of intrigued me a little, especially since I could change the background!  I figured I would try to play around with it on the side and figure out what it was all about.  After all, another request from Admissions ?Can you do this too? was inevitably in my future.  I went over to GoDaddy and set up a hosting account with the sole purpose of running a DotNetNuke site on it.  I just wanted to learn about the framework and GoDaddy offered it as a 3rd party extension.  Within a couple of days I had a test site up and running and started my path of learning DotNetNuke.
 
GoDaddy installed the 3rd party extension of DotNetNuke in a sub-folder.  At the time it didn?t matter to me, but later down the road I would come to learn that this wasn?t a good thing.  I continued tinkering around with DotNetNuke on the side for a while and got a little better handle on it. I even started a new site running DotNetNuke on a different hosting install on GoDaddy.  I was making my way along until one day I installed a bad module?a really bad module.  Upon installation of this module my site crashed.  This was back in the DNN 4.9 days I believe.  I didn?t have a ton of background in DNN and I wasn?t a strong developer so fixing this was not going to be easy.  I got in touch with GoDaddy?s support and they responded ?We don?t support 3rd party applications.?  I was dead in the water.  
 
After hours of Googling I was able to find out how to remove this bad module via FTP.  I removed it and the site instantly came back up. Looking back the situation I didn?t really like the fact that my host couldn?t support the application that was running my sites.  I researched more and found other hosts that support DotNetNuke.  It became obvious to me that PowerDNN was the top dog in the DNN hosting world?and yes, they actually can help when things go wrong.  
 
PowerDNNShortly thereafter I moved my site over to PowerDNN.  When I moved the site the tech-support guy at PowerDNN recognized my site being in a sub-folder as an indicator that I was coming from GoDaddy.  He asked me if I wanted to leave my site in the sub-folder and he also recommended to me that this was not a good practice. Though, I told him to go ahead and leave it in the sub-folder because I had some good search engine results going by that time and I didn?t want to mess up / break any links I had showing up for my site.  He advised me again that this wasn?t the best configuration for the installation, but he did what I asked and left it in the sub-folder.  Yes, I should have listened to him!
 
After moving my site to PowerDNN I noticed that my site was loading way faster and that was (and is) awesome! They obviously knew something about DNN.  Everything was going good.  Time went by and then I learned about how DotNetNuke is multiportal and how you can run more than one site off a single DNN installation. It was almost too good to be true I thought.  I followed the directions and tried to create a new parent portal to run my 2nd site.  Fail!  I kept getting errors and I tried a couple of different times to make sure I was following the directions properly.  Finally I broke down and emailed in to PowerDNN.  That?s when I was informed that my site needed to be located at the root in order for the multi-portal feature to work correctly with the way I was setting up redirects and configuring my site.  Now, you may be an IIS guru or know a lot about domains and can make it work from within a sub-folder, but for the ?Regular Joe? like me I can?t make it happen.  
 
I had to bite the bullet ? I had to move the site to the root.  It?s not that I minded it being at the root, I just didn?t want to change the path that the links in search results had and I didn?t want to break every image/hyperlink that was on my site by altering the path.  Though, in order for my site to properly run more than one portal a move was necessary.  
 
I went ahead with my fingers crossed and requested that the PowerDNN guys move my site out of the sub-folder into the root.  I was impressed with how they informed me of what would occur if I did this.  They told me all the non-relative links would break and they let me know how long it would take them to get everything moved.  It didn't take long at all and my site was up and running in the root within the hour. They were accurate with both predictions of timing and the non-relative links being broken!  
 
  Broken Image
  I had to fix hundreds of these!
Moving the site did mess up my search results, but it only messed them up for a couple of days.  Google had crawled and re-indexed my site within 3 days and the new path was now showing up in the search results.  Also, the new site I was hoping to run off the same DNN instance was working the way it was supposed to?go figure!  Along with having users emailing in saying that "The site was down" (because they had the page stored in their cache with the old address), I did have to spend a whole week going back through the skin files, pages, and blog entries cleaning up all the now-broken links that I had just created for myself.  I also had to email frustrated users back telling them how to delete their cookies/temp files and to refresh their browsers. It was not fun at all, but sometimes learning comes with pain and the pain is what helps the lesson you learn stick with you for a while!
 
When the PowerDNN tech-support guy saw my DNN site coming from a sub-folder he knew it was an artifact of hosting a site at GoDaddy.  In retrospect I really wish I had listened to him when he advised me to not put the site in a sub-folder. I can?t praise PowerDNN?s team enough for the communications, knowledge, and support they gave me through the whole process of me learning a lesson!
 
Take-aways:
  1. Don?t host a DNN site at GoDaddy
  2. Don?t host a DNN site in a sub-folder
  3. PowerDNN rocks!
 
Lesson learned. Don?t let it happen to you too!
 
Regards,
 
Clint
 

 


Clint Patterson

I also blog on other sites...

And contribute to OSS Documentation...

See my pics on UnSplash