Categories
Geeky/Programming

Windows 7: All My Fonts Are Italic!

Last week, I uninstalled some software on my Windows machine, a Dell “reader” app. I reboot. Right away I notice something is wrong, all my fonts that were usually just normal Times New Roman or Arial were italic. WTF?

I figured that removing the app somehow also removed or reset my default font’s on the machine. I had someone export out some reg settings and I added them back to mine and things returned back to normal. Attached is the reg file. YMMV. I’m not responsible for your machine getting hosed, or anything related to this fix. Backup your registry, yada yada. win7fontfix

Some apps are just downright destructive when uninstalling. I think back to DLL hell and some of the wacky things that could happen there. System DLL’s removed when uninstalling an app. Just horrible. It seems even with Microsoft’s latest OS, things can still get jacked by a bad app install/uninstall.

I could have also probably went back to a snapshot, but figured I would give it the 10 minute try to fix it approach first. Seems to have worked.

Categories
Geeky/Programming

Lync Configuration Information

Cool tip. If you are running Lync 2010, and want to see the current Configuration Information. In the systray, the icon, hold CTRL and right click, and you will get a configuration information menu. Click that and you get your info

From here you can see your URL’s and if everything is set up the way you want it to be. One thing to note, the “refresh” button doesn’t seem to do anything. You need to close the window and reopen it to see changes.

(As a note, you can do the same with with Outlook, and get to the testing menu to test connectivity and configuration)

Categories
Geeky/Programming Product Reviews

Moving to Office 365 from Google Apps: Follow Up

Earlier I blogged about Moving to Office 365 from Google Apps, and some of my woes.

In the time since, things have been straightened out. First off, what happened to me sucked, but was resolved. I think Microsoft knows they have some initial bugs and they will work it out. What does stand out is that the customer service is top notch. Their forum moderators replied. Their twitter account @Office365 replied. They actually CALLED me and walked through fixing the issue. This was great. They made sure it was working before leaving me hanging.

After I got the issues resolved, I switched my GoDaddy DNS to MSFT DNS name servers and away we go. I reset up my iPhone, iPad syncing with my new Office365 stuff, worked great, found the server url, etc. Android I had to type it in (to find it, log into web mail and go to about off the help icon). I set it up with Outlook 2010 and it works great. Also Mail.app on Mac, works great there too.

I haven’t done much more than just use it. Some things I miss or want? First, in Gmail, you can archive mail right from iOS. Exchange doesn’t have this, but in Outlook you can set up quick steps to do it, so I did that. The OWA interface doesn’t have quick steps, which would be nice. I haven’t used Lync yet as I don’t have anyone to talk to on it, I will dork around with that later. Haven’t used the SharePoint or Office Web Apps yet, it has been more Mail, Contacts, Calendar to start.

I would like to point my mail.domain.com to the Office365 portal for easy access, haven’t looked into it yet.

One other thing I noticed, is that some mail still comes to my old Google Apps account. Facebook mail alerts for sure. They might have a slow DNS change time as most all other mail comes to Office365. More to come as I get into things though.

Categories
Geeky/Programming Reviews

Moving from Google Apps to Office 365

I have been using Google Apps premier since 2007. Almost 4 years. Before that I used hotmail and tried to use the Microsoft ecosystem as I had a Windows Mobile phone, many of them actually. Before Windows Mobile was “cool”. The thing with Google Apps is that it only offered the “core” apps for a loooong time. (Mail, Calendar, Docs, Chat). Recently they allowed you to “transition” to more Google services (apps), such as Reader, Voice, etc, etc.

Now, this sounds great right? Yeah, except in the last 4 years I had to create a regular gmail account to use most of the Google services (YouTube, voice, Reader), and now I have 4 years of content and what not built up with that account. Google wants me to “start fresh” with my Google Apps account? Doesn’t sound like much fun. Also Google+ just came out, and it doesn’t work with Google Apps accounts, another great way for Google to alienate paying customers, and rewarding free ones. You can’t be signed into both a Google Apps and Google Account at the same time (at least without problems) So I end up having to run one browser with Google account and one with Google Apps? No thanks again.

What I decided to do is try something new. There aren’t many options.

1. Hotmail
2. Yahoo
3. Hosted Exchange (Rackspace, etc)
4. Office 365
5. Other

With Hotmail.. It works, I actually changed it over in a hour or so.. but, there is no 1st class citizen mail client on Mac. Mail, other 3rd party, even Outlook, only connect with POP, not with IMAP. iOS at least uses Activesync. This is somewhat of a deal breaker for me, as I like to use a client on the desktop, or at least try them out.

Yahoo is just out, well, because it is Yahoo. Hosted Exchange looks promising, but too much $$ for not the same features I currently get. Office 365 seems like the logical choice.

I was in the beta for Office 365 and dorked around with it a little bit. I decided to take the plunge.

It is a little more expensive than Google Apps a year, but really no other choices. My first concern was with my Google Talk with my Google Apps. Probably not going to work. Why? Well, with Office 365, if you are on the small business plan, you have to delegate your DNS to Office 365. You can create CNAME and A records, but not TXT or SRV records, etc. Google Apps GTalk needs SRV records in your DNS.

Also, when you sign up for Office 365, you get a weird account, not a Windows Live ID, but Online Services ID, like blah@domain.onmicrosoft.com .. and then you have to set up your custom domain inside the Office 365 web app.

Currently, this is where I am at, and I hope to have a follow up to this..

I made all the DNS changes for Office 365. I created another account in my system, and assigned it a license. I made the account admin, so I had 2 admin accounts. Everything was working.

I decided to cleanup the onmicrosoft.com account, by removing the mailbox and account. It had the same “Full Name” as my regular account, Steve Novoselac. I went to delete and it said “Do you want to remove Steve Novoselac”, I was weary but figured it was keyed on email address of the account record, not name.

Boom, it deleted both the records on my account. Currently I can’t even login to my account. Even better with the small business account you don’t get 24/7 support. Just “service tickets” and the community forum. I did put in a service request and a forum post, and I am working through the issue, but it seems ridiculous. Why?

First off, you shouldn’t be able to remove the “last admin” from an account. Second, it should delete by email address and not full name. We will see how and when I get this resolved, but currently I just switched my DNS back to Google Apps so I can continue to receive email.

Another unknown is the Lync online. It is federated with WLM, but I am curious to see how that is all going to work. Giving support a few days and hopefully will have it all sorted out. More to come..

Categories
Agile Geeky/Programming

Agile: Tech Debt Sprint

In software development, the biggest thing you can do for the users of your product is deliver value. Adding business value is critical to maintaining a good product and keeping users happy. But there is another group you need to keep happy as well, and that is your development team.

Technical Debt (think of it like real money debt) is the extra WTF’s that add up in your codebase over time. You add a new feature, and take some shortcuts, you say “we will fix it later” but later never comes. You end up with untested (Unit Tests/Developer Tests) code and with “legacy code” that is hard to maintain. How do you get rid of all that? You have to pay down your debt, that is where Tech Debt Sprints come in.

Just like paying down regular debt or even how people keep regular debt, you usually have some. People have mortgages, or car loans, that they pay down. So in any app you end up having tech debt, but you need to keep paying it down instead of just adding more and more debt, because sooner later you’d have to declare technical bankruptcy, which is no good. (Close Shop? Rewrite? etc).

What I like to do is balance tech debt in two ways.

1. First, in every sprint, there should be a percentage of points dedicated to technical debt. 15-25% is a good number.

2. Second, every X sprints you should flip that percentage. So if you usually do 70% enhancements, 10% bugs, and 20% tech debt, every 4-6 sprints, you should flip it around: 70% tech debt, 10% bugs, and 20% enhancements. I might most later on the concept of another type of sprint, a “Hardening Sprint” where you dedicate 70% to just bugs to “harden” your app.

Now, you may have to negotiate with your Product Owner, which after a while they might get high on the drug that is enhancements and business value. Most reasonably Product Owners though, will realize that the code and developers need to pay down tech debt to make the overall application better and also make it easier to get future enhancements to market faster.

You may even get some stories that I like to call “Trifecta” stories. What are they? Well it is that “magical” story that satisfies three causes, Enhancement, Bugs, and Tech Debt. An example might be a crappy custom control that you’ve had in your app that you can replace with built in functionality or a better architected 3rd party control. Users will get the added functionality (enhancement), crazy bugs from your custom code are gone (bug fixes) and tons of crappy code is just dropped from the codebase (tech debt). Everybody is a winner!

I blogged previously on using User Voice to track your tech debt items at a higher level and have devs vote on them, it works somewhat, better than nothing. Usually stories come out of each “idea”. The bottom line though is to make sure you dedicate time and effort to paying down your technical debt. Far too often dev shops ignore this or always put it off till some mythical “later” that never comes. You need to just do it. It will make your code and app better, your devs happy, and keep things moving forward.

Categories
Geeky/Programming

What is an Operating System?

This is a core question. Might sound stupid or you might even ask yourself why I would blog this. But seriously, we need to take a look at the Operating System our code is running on. Windows? Mac OS? iOS? Linux, etc. But beyond that, what is core and what is “cruft” in the OS?

I think Microsoft got a hard lesson some years ago from the DoJ on what can or can’t be included in the OS from a monopolistic perspective. But even then, Apple adds things to their OS and bundles them, etc. So what am I getting at?

If you develop native apps (more so for OS X or Windows, not the Mobile OS’s) then you are going to run into compatibility problems. Hardware, software, OS level stuff. DLL Hell, the whole bit.

As a developer or even “product” you can only do so much, you have to mostly code for the “happy path” – and give some documentation and direction to your users. ex:

– This software only works with .NET 4.0
– This software only works on Windows XP SP3 and Windows 7
– You must have a sound card to make use of the features of this software
– You must have an internet connection to make use of this software
– This software only runs on versions SQL Server 2008 R2
– Running an anti-virus package or malware detector on the files the program reads and writes to constantly is going to slow performance.
– Port xxxxx must be open for external devices to connect

You get the idea. You can code some checks into your setup/installer or program on start up of the exe, but beyond that, you have to leave some things to the user. You can’t ever think of every scenario.

If some other program (albeit even an add on you can download after installing your OS from the vendor of the OS) is going to conflict with your program, then the user has to decide which program they want to use or come up with some compromise.

From a Microsoft Windows point of view, the OS is what you get from Microsoft. Not what you get from Dell or HP or whatever. No, Adobe Flash isn’t part of the OS. Either is Windows Live Messenger or Windows Live Photo Gallery or any add on you download later. Hell even .NET wasn’t part of the OS until Vista/7.

When developing your applications, focus on what is going to give your users more functional and business value rather than coding for things you have no control over. Leave it to support and documentation to handle the infinite unknown scenarios.

Code for a fresh Operating System, and supported patches as they come out. You might have a few RARE scenarios you code around but I would suggest against it. The user’s and other programs that might screw up your users OS’s, you can’t do anything about either.

After all that, it is more clear why Apple’s iOS is appealing, sandboxed applications make more sense. You worry about your stuff and I worry about mine type of deal. Less room for support nightmares because of misconfigured operating systems. I wonder if Microsoft will ever “get there”, but I don’t see it anytime soon.


Categories
Geeky/Programming Product Reviews

Thoughts on Windows 8 Details

Yesterday at All Things D, Microsoft announced Windows 8 (codename of course) details, and a first glimpse on video
 

Windows 8 Video #1

My initial reactions to this, as a consumer and as a development manager of an app that at this time is completely windows desktop .NET based:

HTML5/JS Apps

First reaction? Why not just use a browser? and How are they going to interact with the OS? What level’s of rights will they have to read/write file system, etc, etc. Also, what happens to Silverlight? C++/Winforms apps? Yeah they show old apps running “behind” the new UI, but what is MIcrosoft’s stance on development of these other technologies? WPF? They have told devs to build using these tech’s for desktop for years, now, lets go HTML5/JS? WTF? Will apps run in browser too? On a mac? iOS?

Tiles

First reaction? Looks like an exploded Windows Phone UI, WP7. Which at first blush looks cool but I have found usability to be painful. Seems to be more of a shell UI on top of Windows 7 (or whatever). They should call it Windows Blinds Smile

In General

I think that this will be a good refresh for the OS, but it might take a few iterations for this new UI to be used heavily. My take? Users will get the OS installed and (hopefully there will be an option to) turn off the new UI and go back to what they have used for years. Slowly but surely the new UI will take hold with some cool apps and more and more people will use that and get used to it, abstracted away from the core OS explorer, etc.

Looking forward to trying it out in beta, and when it goes live. I will give MSFT this, they keep things changing so devs have to keep learning! Oh yeah, and PDC is no longer, it is now BUILD – http://www.buildwindows.com/

Categories
Geeky/Programming SharePoint SQLServerPedia Syndication

SharePoint 2010: Track User Profile Changes Over Time Using MERGE

I recently blogged about a report you can write to see what users don’t have managers in SharePoint 2010 (get your Org Browser fixed!). Well, how about tracking who get’s added or deleted every day, or edited? You could probably look at the ForeFront Identity Manager that SharePoint 2010 uses and do some logging or use the API to log things, but that is.. well, harder than this.

What I wanted to do was keep logs for debugging and reporting. Who is getting added to SharePoint 2010 user profile sync? Is last user added to Active Directory a valid user, or a system account? Now, you could query Active Directory (just like finding users without managers) but I am guessing that most SharePoint Admins don’t have AD access, so they need another way.

What I did was create another database on my database server where the SharePoint content and profile databases are stored, so I can use it as a dumping ground.

What you need to do is create a table to dump the profile table and then every day do a SQL MERGE into it and save the changes. This is where it gets interesting

First, create your table (for this example I am only tracking NTName and PreferredName, so “domainusername” and “Name, User”, but you could easily add other columns.)

CREATE TABLE [dbo].[SharePointUserTracking](
	[RecordId] [bigint] NOT NULL,
	[NTName] [nvarchar](400) NULL,
	[PreferredName] [varchar](256) NULL,
 CONSTRAINT [PK_SharePointUserTracking] PRIMARY KEY CLUSTERED
(
	[RecordId] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

Once you have your table, you are ready to create your MERGE query, track the changes, and the get it scheduled up. So what we want to do is MERGE our UserProfile_Full data from our ProfileDB into our new table, tracking INSERT, UPDATE, and DELETE’s as well, in a tracking table. Let’s create our “tracking changes” table:


CREATE TABLE [dbo].[SharePointUserProfileDelta](
	[ExistingRecordId] [bigint] NULL,
	[ExistingNTName] [nvarchar](400) NULL,
	[ExistingPreferredName] [varchar](256) NULL,
	[ActionTaken] [nvarchar](10) NULL,
	[NewRecordId] [bigint] NULL,
	[NewNTName] [nvarchar](400) NULL,
	[NewPreferredName] [nvarchar](256) NULL,
	[LogDate] [datetime] NULL
) ON [PRIMARY]

GO

Notice the column “ActionTaken” to track what we do, INSERT, UPDATE, DELETE.

Now, for the super merge (note, the profile DB might not be named the same, also note the collation thing you need to do.. may or may not to do this in your environment)

  MERGE dbo.SharePointUserTracking AS target
    USING
            (SELECT RecordId,NTName,PreferredName FROM SP2010_ProfileDB.dbo.UserProfile_Full) AS source
            (RecordId,NTName,PreferredName) ON (target.RecordId = source.RecordId)
    WHEN MATCHED AND target.NTName  source.NTName COLLATE SQL_Latin1_General_CP1_CI_AS OR target.PreferredName  source.PreferredName COLLATE SQL_Latin1_General_CP1_CI_AS THEN
        UPDATE SET
                  NTName = source.NTName,
                  PreferredName = source.PreferredName
      WHEN NOT MATCHED THEN
          INSERT (RecordId,NTName,PreferredName)
          VALUES (source.RecordId,source.NTName, source.PreferredName)
      WHEN NOT MATCHED BY SOURCE THEN
            DELETE
      OUTPUT deleted.*, $action, inserted.*,GETDATE() INTO dbo.SharePointUserProfileDelta;

Now, you can schedule that to run after your daily user profile sync job in SharePoint and then you have a running log of changes, which you could make an SSRS report off of easily or do whatever you want with it. Pretty cool! Just know, you can use this method to track changes to any table.. slowly changing dims and even more.

Categories
Geeky/Programming

LINQPad to MS CRM 2011

This morning I blogged about using LINQPad to query an XML file. Well did you know you can also query a Microsoft Dynamics CRM 2011 (in the cloud?!?) version directly from LINQPad? Pretty sweet.

The use of LINQ has become more and more prevelant in the last few years, from .NET Developers using LINQ2SQL, and just using LINQ for object queries, and everything in between (when is there going to be a LINQ2OLAP??)

First, you need to install LINQPad, and then you need to download and configure the
LINQPad Plugin for Microsoft Dynamics CRM 2011.

Once you have that all set you can go and get your LINQ Query on.

The possibilities are pretty much endless here, but yeah, now you can run ad-hoc queries against your CRM installation, which is pretty cool. If you want more samples, install the CRM SDK and do some code diving, you will find some LINQ queries they do in the SDK, which is how I initially got the idea to try using LINQPad.

Categories
Geeky/Programming

Create a Word Cloud From Your Twitter Feed

I love playing with data. My data makes it even more fun. Wordle has been around for a long time, and so has Twitter (in Internet years anyways). I have always been fascinated by word clouds and visualizing text patterns, etc.

I figured that hey, there has got to be some analyzer for your twitter stream, and I am sure there are a ton, but I didn’t stumble upon any with some easy Googling, so I did it the hard way.

First goal? Get your Twitter feed and/or data somehow. Multiple ways to do this, but I stumbled upon a pretty cool site. http://tweetbook.in that let’s you create an eBook from your Twitter feed and favorites. It let’s you publish out as a PDF or XML file, so I figured that would work. It is a busy site and you may have to wait to get in but once you do you just oAuth it up to Twitter and grab your data.

Now, once you have your data, you need to do something with it. The data would be in XML so you need to parse out the data you want, for instance, I wanted to analyze my “favorites” so I wanted to get the text out of the XML. Here is my first favorite on Twitter (by the way, it will only go back 3200, I think – I only have 2600 or so faves)

  881539697
  A "Manager" class is like my grandmother's junk drawer.
  Fri Aug 08 14:23:56 +0000 2008
  web
  jeremydmiller
 

Well I just want to grab that <text> value, and without having to do any programming or powershell or C#, I fired up trusty old LINQPad (more on this tool in future posts for sure). I then just wrote a quick little query against the XML file like so:

var xml = XElement.Load (@"c:fave.xml");

var query =
  from e in xml.Elements()
  select e.Element("text").ToString().Replace("","").Replace("","").Replace("RT ","");

query.Dump();

As you can see, I am just loading up the xml file and doing some text cleanup (removing the xml text blocks and removing RT’s, the old syntax which muddies up the results). Note in LINQPad you need to change the query type to C# Statements instead of the default C# Expression.

Once I had my values in the results I wanted, I did a quick CTRL+A, CTRL+C (it still baffles me how many people don’t know CTRL+A is “Select All”) and then pasted it into notepad++, to view, and cleaned up some html characters there (quotes, etc) and then pasted it into Wordle. Here is what I got back:

wordle_of_my_favorites

You can see I really like to favor SQL Server, Microsoft, iPhone, Blogs, sqlpass, Google, SharePoint, Twitter, and pretty much everything geeky. Pretty dang cool. Why doesn’t Twitter offer something like this? I think it would be cool. What other cool things have you done with your “data” – what cool things would you like to see?