First let me say that the authors seem to really know their stuff. I enjoyed the book but it didn’t go deep enough for my tasted. As another reviewer pointed out you could get a lot of the info from the documents or manuals. But you would have spent a lot of time digging for it. I for one don’t like most documentation I find on software companies’ websites. I would rather someone else do the digging and just give me in one document the info I need and that is what this book does for me. My main goal in reading the book was to determine how the Worklight interface worked and how the framework is used to develop mobile apps and the book was a good read in that respect. While I wish it went deeper into the code, I wish that of most developer focused books so that is not really a knock on the book. I’ll end up going deeper on my own by writing code and using the debugger to figure out the parts that I need.
There were places where you could tell that English was a second language for these guys but their writing style was still informative and it didn’t detract from the book.

If interested in the book you can get it from Packt Publishing

In the past I have mentioned that I want to do more mobile and cross platform  development. I really believe that cross platform is the wave of the future. We are seeing the PC, tablet and phone markets merge in a big way. Sometimes that merging involves the user interface such as we see with Windows 8.1, the Surface, and Windows phones running a interface that looks and feels similar to the user across all of the devices. We also see corporations and end users that want to run the same software o their mobile devices as they run on the corporate or home desktop. Microsoft announced their universal apps at their Build Developers Conference last week along with a supporting Visual Studio 2013 RC update

As I move deeper into mobile and cross platform development I thought I would keep a diary of my progress and blog about some of the tools I try out. Some I end up discarding for numerous reasons and some become permanent additions to my developer’s toolbox.

The greatest issue facing developers looking to create apps for IOS, Android and Windows platforms is how to avoid multiple code bases (and multiple expensive development platforms etc.) yet still get the performance and access to the hardware such as the GPS or camera etc. There is some code that can be common between the platforms but your UI and your hardware interactions will differ for each platform and require you to maintain separate code for each platform.

But enough of the issues. If you are reading tis then you probably know  hurdles that a cross platform developer must overcome.

I have spent lots of time investigating PhoneGapSencha Touch, and Xamarin but for several reasons I have left those out of my toolbox, though PhoneGap still plays a support role and Xamarin may yet be added.

I hadn’t messed with HTML, JavaScript and CSS for 10 years or so yet I am convinced that it is the best approach for developing apps for multiple platforms. You can architect your website to work well in a mobile browser (think Bootstrap) by using a mobile first design approach. But that approach wont give you’re the hardware access or performance that you may need.

Another approach is to create a hybrid or a native app that runs on the phone or tablet using a framework like the ones I mentioned above. This is the approach I decided to take and downloading lots of 30-day trials, looking at video n Youtube and PluralSight I settled on the Telerk Platform. I’ll go more into which of their products I am using and why in Part 2 of this series. My goal is post an update  about once a week describing my progress as I become proficient with the tools.

I received this in an email late Friday:

I just wanted to inform you about an exciting campaign launched by Packt Publishing to coincide with the release of our 2000th title. During this offer Packt is giving its readers a chance to dive into their comprehensive catalog and Buy One, Get One Free across their entire range of eBooks.
The campaign began on 18th-Mar-2014 and will continue up until 26th-Mar-2014.

I have several Packt books in my library and will be adding more. I suggest you take advantage and of this offer bu following this link : "http://bit.ly/1j26nPN"

Enjoy!

I recently upgraded to Visual Studio 2013 (Ultimate) for my development needs. After doing so I installed Web Essentials to go along with all the new features and helpers that come with VS 2013.

While working on an MVC app I noticed that my form had a spelling error so I thought – Hmmmm this would be a great time to try out the Web Essentials Design Mode and see how the in-browser editing works. Big mistake!

browserview

In the .cshtml file behind my form I had used the ASP.Net MVC .html helper functions like this:

WE_before

After making the change in the browser Design mode and saving the change I noticed that my .cshtml file now had this in it:

WE_after

I fully understand what happened. The helper functions worked exactly like they were designed to work. They  produced the <SELECT>  html that you see above which is all the browser had and all that Web Essentials had for editing. So that is what was saved back to the underlying .cshtml. Its not really Web Essentials fault but it was not the behavior I had expected and it is not how I want my code to look.

I just wanted to make others aware that they need to be careful when using the Design Mode of Web Essentials – make sure you understand how it works and what the consequences will be.

 

Hire the GotSpeech Guy

Posted: January 29, 2014 in Development, Me, PowerShell
Tags:

My current assignment will end in Mid February and I am looking for another assignment. I prefer employment but contract work is an option.

I’ve worked remotely for 7 years now and it is my preferred method of working. I am primarily looking for Lync development or provisioning assignments but I am open to other options such as PowerShell and mobile development work.

If you are interested my contact information is on my About page.

Weird Lync Presence Behavior

Posted: January 28, 2014 in Lync
Tags: ,

I noticed some weird behavior with my Lync presence status the other day. I understand what happened but I am undecided if it si a good thing or a bad thing. The problem is with multiple Lync endpoints.

First let me describe my development setup. I have two laptops on my desk with a 23” monitor sitting between them and hooked up via a KVM switch to both laptops. Tis allows me to have dual monitor setup with both laptops as during the course of my day I will work of of both laptops.

I keep logged into Lync on both laptops and this normally works fine. But on this occasion I worked most of the day on laptop B and left laptop A set idle, My presence was reflected on both laptop’s Lync Clients as “Available” which was accurate as I was working on several PowerShell scripts all day on Laptop B. At the end of the day I exited Lync on laptop B as I was done and I noticed that the Lync Client on laptop A instantly showed me as “Away for 5 hours”.

I was surprised to see that as I was not really away having just logged out of Lync  on the other laptop. It would have been nice if it had just been able to show me as away for 1 minute or something which would have correctly reflected my presence. Like I said this is not a bug but rather just not the behavior I would have suspected. Once I logged out of Lync on laptop B the only endpoint left was laptop A which had been inactive for 5 hours. Lync had no way of knowing that both endpoints were actually only 2 feet apart and that I was still at my desk and “Available”. Once I switched the KVM switch back to laptop A my presence switched to “Available”. I think the biggest surprise was that it said I was away for 5 hours instead of just setting my status to “Away”.

In the few seconds it took to switch laptops I went from “Available” to “Away for 5 hours”. I just wish there was a better way of handling this.

I recently downloaded a rather large PowerShell script from the Internet and  tried to run it. I’m sure the author was quite proud of his script and his programming abilities but the script failed with multiple errors when I tried to run it. The author made a fatal assumption that just because it ran in his environment that it would work for me and everyone else. He probably thought that anyone who tried to run it would first open the Lync Server Management Shell but my preferred environment is the PowerShell ISE and that is what I was using to run the script.

The problem arose when the script tried to use one of the Lync cmdlets but the Lync module was not loaded. A PowerShell Script should always include these lines (and any other needed modules) as the first lines in the script. That way the script won’t be referencing modules that haven’t ben loaded into the environment.

if ((Get-Module ActiveDirectory) -eq $null){Import-Module ActiveDirectory}
if ((Get-Module Lync) -eq $null){Import-Module Lync}

it’s so easy to avoid the execution problems that I had by simply testing to see if  a required modules is loaded and if it isn’t then load it. Its what sets a good developer apart from a mediocre developer.

So much has been going on here at GotSpeech Central that I don’t know where to start. I’ve got a new website in development, a Microsoft Office 2013 book that I am reviewing with two other book reviews just ramping up. I also have a Windows 8 development project starting up as well as some Lync stuff going on. So, lets start with the new website.

GotMobileDev

I have stated before my desire to get into mobile development and Windows 8 development. Since getting my Surface RT I have been accelerating my training and development schedule. Now that Microsoft has lowered the Surface price I see a huge potential for developers. I don’t want to do my development under the GotSpeech banner so in keeping with past website themes I have registered GotMobileDev.com and GotMobileDev.net. The sites are still in the design and development stage but any apps I develop will be marketed under that name. The .com address will be the marketing site and the .net domain will be the technical resource site and contain how-to articles, sample code and possible discussions. No real rush to get those up but look for them in the coming weeks.

Windows 8

As a long time Microsoft developer I feel most confortable in a Windows C# environment so that is where I want to concentrate my efforts. But I want to also take my apps to the Windows Phone 8 and possibly cross platform to the IPhone and to Android. I have been doing my homework/research for a few weeks not trying to determine the best approach. I have bounced between C#/XAML and JavaScript/HTML5 and put some test apps together with both platforms I have even looked at using a SPA architecture. I have looked at Xamarin and while that platform allows me to leverage my c# skills I have decided to put it on the back burner for the moment. Xamarin has some very interesting stuff coming in the near future and I will get back to it but at the moment it is lacking in 3rd party components.

I looked at 3rd party components from Telerik (along with their Kendo UI) as well as the components from Syncfusion.   But after seeing my friend Russ Fustino speak and demo at a recent  MDUGJax meeting about ComponentOne I decided to go with the ComponentOne Ultimate for my needs. I like the breadth of their components and tools along with how polished and professional the components look. I won’t go into much detail here as I will be blogging about them every step of the way and will be doing a case study For ComponentOne. Keep following my blog and you will see those posts.

Book Reviews

I have a review copy of Microsoft Office Professional 2013 Step by Step that I received and I have been reading through in preparation for doing a book review on it which I will blog in the near future.

MSOStepbyStep I

I have been offered a copy of Getting Started with Microsoft Lync Server 2013 that I hope to be reading and reviewing in the near future. The offer was for a e-copy but I will try to get my hands on a hard copy as that is what I prefer when I am reading. Either way, that review should be coming along in the near future.

GetttingStart

As I said, there is also more Lync development on the horizon but I can’t blog about that yet. Hint: it ties in with my Windows 8 development efforts.

One of the things you may come across in administering Lync from PowerShell is the need to setup Exchange mailboxes for your users. Since you are probably like me and either do your PowerShell scripting on the Lync front end server or on a dedicated application server rather than the Exchange server you may be wondering how to do this.

In reality it is quite easy though when I first tried this I found some conflicting methods of ding this on the Internet. The old adage that you can’t believe everything you read on the Internet holds true again. Several things I read and tried simply didn’t work So, I am going to show you what worked for me.

The following code will allow you to setup a remote session from the box you are working on to Exchange server. Once you have done this then you can proceed with any Exchange PowerShell tasks that you may have.

   1: $user = "GotSpeech\Administrator"

   2: $pass = ConvertTo-SecureString -AsPlainText "SecretPassword" -Force

   3:

   4: # This version will prompt the user for credentials

   5: # $credentials = Get-Credential Gotspeech\Administrator

   6:

   7: $credentials = New-Object System.Management.Automation.PSCredential($user,$pass)

   8:

   9: # Create a new session

  10: $session = New-PSSession  -ConfigurationName Microsoft.Exchange -ConnectionUri http://um1.gotspeech.net/PowerShell/ -Credential $credentials

  11:

  12: # Now import the session object

  13: Import-psSession $session -AllowClobber |out-null

  14:

  15: # Do your script proceesing here

  16:

  17: # Cleanup

  18: Remove-PSSession  $session

That’s all there is to it. Just remember to close out the session when you  are done as there is a limit on the number of remote session you can have open at once.

In my day to day activities I normally work in the PowerShell ISE. I simply open this script in a tab with the Remove Session command commented out and then click the run arrow at the top of the editor. This causes the current script to run and I then have an active remote session to do what ever I need to do during my work day.

Tom Arbuthnot has a nifty little Lync PowerShell utility on his Lync’d Up Blog. The PowerShell script is called Get-LyncNumberAssignment and it helps you avoid those irritating “multiple results” error messages when trying to enable a user for enterprise voice etc. As you probably already know, these messages result when the phone number is already in use somewhere. The problem is that they could be anywhere; User’s, Private Lines, Exchange UM Contacts etc. The real problem is tracking down the number.

I have several PowerShell one-liner commands that I use to search for the phone number when this happens to me. But Tom has taken it several steps further; his Get-LyncNumberAssignment script searches all the places that the number could be assigned and creates a cool looking report.. This makes the annoying task of finding the duplicate a lot easier and a lot less time consuming. My hat is off to Tom for taking the time to write and share this.

However, when I run the script in my environment I get the following error which I haven’t been able to resolve:

ErrorCatch-Actions : A network-related or instance-specific error occurred while establishing a connection to
SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that
SQL Server is configured to allow remote connections. (provider: SQL Network Interfaces, error: 26 – Error Loc
ating Server/Instance Specified)

But the beauty of PowerShell is that I will just take Tom’s original script and modify it to my needs. For example, Tom’s original script can search for all phone numbers in a given area code and I would like to take that output and format it then send it to a spreadsheet (i.e a .csv file). That’s what I like about administering Lync using PowerShell scripts – I can modify the scripts to do things my way. I’ll try reaching out to Tom and see if I can resolve the issue which seems to only affect my environment and doesn’t take anything away from the work that Tom did.

Addendum: I’ve tracked the problem down to the call to Get-CsRgsWorkflow. Not sure why but I am delving deeper and I’ll update my progress later in the comments below. Also since I am in a hosting environment I have modified the script to return the CsUser’s OU information so that I know who he belongs to.