Sunday, June 9, 2024

QuickBooks Desktop Pro 2016 blurry on my old monitor after adding new 4k monitor


I got some new 4k monitors, they're great but QB doesn't scale well on them which is understandable and I don't care. BUT, it should look the same on my old monitor (1920x1200) in my multi-monitor setup. However, it seems that just HAVING a 4k monitor (maybe as a main display) hooked up to my system messes up the way QBD looks on the old monitor where it was working fine for years. It took some Googling but I came across this (actually helpful) Microsoft article

https://answers.microsoft.com/en-us/windows/forum/all/what-would-make-the-text-blurry-on-some-of-my/463bd024-bc73-4bfc-be62-11891ae9721c

The gist of it is, do this:

1. Find the QBD executable. On my system it's 

    C:\Program Files (x86)\Intuit\QuickBooks 2016\QBW32.exe

2. Right-click on it and choose Properties

3. Click on the Compatibility tab

4. Click the Change high DPI settings button

5. Check the Override high DPI scaling behavior checkbox and choose Scaling performed by: 

  • System - Looks like it did before on my old monitor. On the 4k, scaling is still weird (everything is small, but that makes sense because it's a high resolution)
  • System (Enhanced) - Looks like it did before on my old monitor and scaled much better on the 4k monitor but is blurry.
  • Application - It scaled and made everything HUGE on the old monitor and tiny on the 4k monitors. I do not recommend this setting.






Restart QBD to see the changes. No need to reboot.


Tuesday, February 27, 2024

Error 0xc0000409 on Windows 11 Update 22H2

Just a quick post here because all the Microsoft threads relating to this error were unhelpful to me and also locked so I could not respond.

I got this error while trying to upgrade my Win10 machine to Windows 11. I tried every solution I could find on the web including:
  • Making sure my machine was up to snuff (PC Health check said was good to go)
  • Performed all Windows 10 updates
  • Removed unnecessary hardware
  • Removed the one and only yellow triangle from device manager... it was something to do with Hyper-V which I am not using.
  • Removed unneeded print drivers

I looked through some log files in C:\Windows\Log\MoSetup and saw some entries in some xml files about files belonging to an old user profile. This particular machine has been around for a while and I've added/removed users including one that was attached to a domain for a while (Windows 10 Pro). So, I cleaned up those files (in C:\Users\<username>) and followed the directions in this post: https://www.alphr.com/delete-user-profile-windows-10/ to remove the profile. I had to reboot to finish clearing out the files because some of them (ntuser.dat) were connected to the registry. After removing the registry entries and rebooting, I was able to delete the files.
After all that, I tried the upgrade again (using Windows Installation Assistant), let it run overnight and in the morning I was on Windows 11, yay!

Unrelated but I want to keep somewhere

While my desktop machine booted to Windows 11, the ethernet connection wouldn't stay up for more than a minute or so... making it difficult to fix by using Windows Update. I fixed it by changing the driver on the Realtek PCIe GbE Family Controller from the Microsoft driver to the Realtek driver in Device Manager.

Other small issues with Windows 11

I have 3 monitors. I often use the calendar pop-up (by clicking on the time in the taskbar) and I don't always do it from the same monitor. Apparently, that's not supported anymore. You only get the calendar pop-up (along with notifications) by clicking on the taskbar clock on the PRIMARY monitor. 

3/5/2024 My ancient version of MS Office (Pro 2013) required activation (again). This time, however, the online activation failed and the telephone option stated that the product no longer supports telephone activation. I found a phone number, however (800-642-7676), and called it. The robot lady walked me through speaking all the codes, then receiving the new codes and it got activated again, whew! She said to save the codes as they can be used again. We'll see.

Wednesday, February 21, 2024

QuickBooks (desktop) Pro 2016 on Windows 11 - Does it work? (spoiler... YES, for me!)

 

Why is this even a question? Because...


Microsoft states:
"Our promise states that apps that worked on Windows 7/8.1/10 will work on Windows 11"

Intuit states

"…upgrading to Windows 11 might result in compatibility issues since QuickBooks Desktop 2022 and later versions are the only ones compatible with the new OS"

Every other post answered by Intuit (that I found) follows the company line. They won't say that it works and they won't say WHY (or if) it won't work, just that it MIGHT result in compatibility issues. If there's some feature that I don't care about that doesn't work with Windows 11, then I'd like to know about that and upgrade anyway.

So, which is it? Will it work or not? I Googled around for a long time looking for someone who tried it (besides Microsoft or Intuit) who could tell me if it worked, and if not then what exactly failed. I couldn't find a single source. So, I just tried it on a test machine first, before modifying my work computer, to make sure it would work. The short answer is that yeah (for my use-case), it works and was pretty painless (unlike my previous experience getting QB Pro 2006 to work on  Vista/Windows 7).

Method and caveats

  • I only tested UPGRADING an existing Windows 10 Pro machine, with QBD already installed, to a Windows 11 Pro machine. I did not try a fresh QB 2016 Pro install on a Windows 11 machine. I thought that Internet Explorer might be a problem because it is not installed (or just disabled) in Win 11. Maybe because I upgraded a machine that already has IE, that's why it worked?
  • I am an Administrator on my own machine... that might help... or not, I didn't try being a non-Admin.
  • My requirements/features needed for QB are limited as I run a small, service-only company. I need/use:
    • Basic accounting (ledgers)
    • Reports
      • Export to Excel (test machine doesn't have Excel but tested export to CSV)
      • Save as PDF
    • Enter my own payroll
    • Weekly timesheet
    • Invoicing (worked, had to move logo image to test machine)
    • Tax lines for producing reports that help with taxes
    • Customers
    • Vendors
    • Employees
            Features I don't use/need but did some basic testing and they work:
    • Online help (works as well as it did before. I.e. shows up with errors about running scripts)
            I DO NOT use/need/test:
    • Online payroll
    • Connect to banks
    • Accept credit cards
    • Any other online service or add-on
    • Sales tax
    • Create estimates
    • Print checks
    • Multiple users/server setup
    • Messenger (didn't even know it has this until I started looking around to make this list)
I went through the normal Windows 11 upgrade process (I downloaded the installer and ran it). It went smoothly, didn't ask me a bunch of dumb questions and Win 11 was up and running. So, I clicked on my QB shortcut and was greeted with this:


I don't understand why my Win 10 was TLS 1.2 compliant and Win 11 wasn't... I suspect it's really a QB thing (or maybe an IE thing?), not a Windows thing but I clicked the link (https://quickbooks.intuit.com/learn-support/en-us/help-article/product-delivery/tls-1-2-quickbooks-desktop-windows/L78OazXXB_US_en_US) which had me download and install the QuickBooks Tool Hub (I had never heard of this before).


Following the directions from the link above, I ran the TLS 1.2 thing, got green checkmarks and exited.


I then tried again to start QB and it came up with no error messages. The only thing different that I could see was the Special Offers menu item (which I think is actually due to it being a new QB install on my test machine before the upgrade). Other than that, everything looks the same.


Also, the button bar highlights differently now, not a big deal


Will other versions of QuickBooks Desktop work?

I dunno. But given that my version is pretty old I suspect that most others will work just fine. Don't hold me to it though.

Conclusion

If you found this page, then you already know that Intuit wants everyone to switch to their online system (or fork out the big bucks for QB Enterprise). I just don't want to and I don't like being pressured/manipulated to do so, 'nuff said. But eventually, QBD will be completely obsolete. The writing has been on the wall for a long time with price increases, hard to find pages on their web site, and constant ads to try QB Online. Getting it to run on newer Windows versions will buy you some time and for me, it might just buy me all the time I need.
I have not installed on my main machine yet but if something different comes up, I'll edit this post accordingly.

UPDATE: It worked on my main machine as well although I did need to tweak some things:
1. QuickBooks Save to PDF functionality did not work. Turns out that it needs the XPS Doc writer (which used to be a print driver). In Windows 11, run this command: optionalfeatures to open the legacy optional features dialog and install the XPS Document Writer.



Tuesday, March 13, 2018

SSIS Package Template Location for Visual Studio 2017 Pro

If you've been looking around already, here's the short answer:

For the Pro version:
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\CommonExtensions\Microsoft\SSIS\ProjectItems\DataTransformationProject\DataTransformationItems

For the Community version:
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\CommonExtensions\Microsoft\SSIS\ProjectItems\DataTransformationProject\DataTransformationItems

To learn more, read the existing articles that got me almost there... except for the VS 2017 Pro-specific part.



Friday, January 12, 2018

Isomorphic SmartClient with TypeScript

Short version: Check out the Isomorphic SmartClient TypeScript type defnition library on GitHub.

Longer version (how I get here):
I started out programming thick-client Windows applications for enterprises. The demand for that has significantly decreased over the last 10 years as web technologies have improved immensely. So now I'm an enterprise web application developer. But, coming from a thick-client background, I don't much care for slow, full page refresh applications. And, coming from an Object Oriented Programming background, I don't much care for JavaScript as it lets me make all kinds of mistakes which I do consistently. What to do?

With my first attempt at a single page application (SPA) in 2008-ish, I chose to use GWT and with it the Isomorphic SmartGWT library which contains a ton of widgets that all work together nicely. I learned a lot with that project including Java, GWT, the Isomorphic SmartClient/GWT library, the Net Beans IDE etc. and it worked. Maintaining that application, however, was difficult because I only worked on it once in a while and every time I came back to it, I spent hours updating my environment: Visual Studio, NetBeans, browsers, libraries, GWT etc. and usually at least one of those things would cause my application or development environment to break. So before I could even get to the fixes/enhancements I had planned for the day, I spent hours fixing bugs introduced (or exposed) by the environment updates and then of course testing those fixes.

While I really liked programming in Java compared to JavaScript, the GWT environment seemed unstable to me. It started off with browser plug-ins for debugging which were always behind the browser versions, much of the time it didn't even work with Google's own browser, Chrome, so I was using Firefox sometimes and Chrome other times. The compiler was really slow (with good reason) which slowed down my development cycle. Debugging in the IDE was great when it worked but then it changed to what they called 'Super Dev Mode' which was really just debugging in the browser with map files. I know that Google has many applications using GWT so I know it's a good system... just maybe not for a guy who programs mostly with Microsoft stuff and who's not using it everyday to keep everything up-to-date.

So, for my next attempt at a SPA, I decided to bite the bullet and use JavaScript so that I could still use the Isomorphic SmartClient library (the JavaScript version) and not worry about maintaining multiple IDEs, web servers, plug-ins etc. I could do everything with Visual Studio and IIS. Also, my client probably would not have accepted introducing Java into the house. This worked well also. All I had to do was maintain a bunch of JavaScript instead of Java and only one IDE. Debugging is done in the browser, just like with GWT, just no map files.

But then the application started to get more complicated and maintaining the JavaScript was troublesome. It's no fun to refactor JavaScript because you never know what you're going to break... until you test of course. Yes, there are ways of maintaining OOP-like JavaScript (that's what the SmartClient library does) but that was beyond my pain threshold. So, I looked for alternatives like TypeScript, CoffeeScript etc. that wouldn't require a new IDE. I settled on TypeScript because:
  1. It was created by Microsoft, fully supported in Visual Studio and I work in a Microsoft shop so I knew there wouldn't be any backlash.
  2. It's really gaining in popularity (a la Angular).
  3. There are already a bunch of type definition libraries available for JavsScript libraries like JQuery which makes it really easy to use existing JavaScript libraries.
Unfortunately, there was no type definition library for SmartClient, by far the largest JavaScript library I was using and the face of my application.... bummer. I proceeded anyway figuring I could convert everything except the SmartClient stuff to TypeScript. Since JavaScript is TypeScript, the SmartClient JavaScript still works, it's just not typed and thus still prone to JavaScript errors (of which I had many). I had actually considered TypeScript at the beginning of the project but decided not to go that route because there were no type definitions for SmartClient, figuring someone would build one and then I would switch over. Well, that never happened.

Fortunately I had recently gained a lot of experience with code generation and Isomorphic published an XML file for their documentation that had all the information necessary to build TypeScript typedef libary. I just had to build a code generator to read the file and build the library. It took a while and required some help from Isomorphic to fix up the XML file but it worked. You can find the library on my GitHub page at https://github.com/kylemwhite/isc. The library has been working well for me and my client such that we now have a good sized single page application written in C# on the back-end and TypeScript on the client. It has proven to be much easier to maintain and more robust than the JavaScript version.

Now that TypeScript is becoming more mainstream, Isomorphic has announced that they will begin supporting TypeScript in their next version (http://blog.isomorphic.com/5-more-release-12-0-features/) which is of course what I was hoping for all along. Everybody wins!

What is an Enterprise Application?

When I tell people who are not in the I.T. industry that I develop enterprise applications, I am typically facing a gentle nod and a blank stare. Sometimes I get the same reaction from people who ARE in the I.T. world. I think Enterprise Application is one of those terms that people think they should know... but don't.

So, I thought I'd share what I mean by Enterprise Application. Of course, it will differ from other  definitions because we all work in different places with different technologies etc.

According to Wikipedia:
Enterprise software, also known as enterprise application software (EAS), is computer software used to satisfy the needs of an organization rather than individual users. Such organizations would include businesses, schools, interest-based user groups, clubs, charities, or governments.[1] Enterprise software is an integral part of a (computer-based) information system.
Ok, but what does that really mean? Let's start with the word "enterprise". No, it's not the starship on a 5 year mission. An enterprise is a large organization... like a big company or government agency. We (almost) all know what an application is. It's the term we used before it got shortened to 'app' (also known as a program or software). So, an enterprise application is an app for a company or government agency (or department, office, bureau, ministry etc.) or some other type of large organization.

How is that different from any other kind of application? It is unique in at least two ways:
  1. It is not meant for general public use. It belongs to the organization to help them do their business, whatever that is, and is specific to that organization - either because it was specifically developed for the organization or it is an off-the-shelf product that has been configured for the organization.
  2. It is typically used to get data into and out of a database. So, it is not usually for creating images (like Photoshop) nor connecting drivers to people who need a ride (Uber, Lyft) nor is it used for creating complicated documents (Word, PowerPoint, Excel) although reports are typically involved. 
Large organizations typically need to keep track of all kinds of data, usually with databases. Sometimes it is very general stuff that many organizations use; such as contracts, invoices, bills, checks, employee records etc. For these applications, there are often commercial off-the-shelf  (COTS) systems that can handle it. Examples include accounting, ERP (Enterprise Resource Planning), and HR software.

Another common case is the need for something very specific to the organization. For example, a government agency that regulates pesticides may have a database of different pesticides and companies that produce pesticides etc. Since this is so specialized, there are probably no off-the-shelf systems to keep track of it. A custom developed enterprise application for this agency would facilitate the data entry and reporting on this data to meet business and/or regulatory requirements.

Other common properties of enterprise software include:
  • Security - It should use the enterprise's default authentication mechanism (but doesn't always).
  • Density - May have more dense (more stuff per square inch of screen space) and look busy. Consumer applications try to not look too dense because it scares people off. In an enterprise, the users are typically forced to use the application even if it looks scary. What is more important is that it uses the screen efficiently.
  • Maintainability - Should be easily maintainable by the I.T. department.
  • User load - Probably doesn't need to handle a high user load like GMail although certainly some applications in very large organizations will face a high load.
  • Style - In consumer applications, arguably, form is more important than function because it has to sell. So, a lot of work goes into making a consumer application look good. For an enterprise application, function is much more important. That doesn't mean an enterprise application HAS to be ugly. I certainly try to make them look good.
  • Predictable network - An enterprise should have a reliable LAN and an enterprise application will probably take advantage of that. Usually it doesn't need to work over a dial-up connection or cell phone so there may not be as much effort put into network efficiency. Although I certainly try to make my applications efficient. I assume that some day they will have to work over a public network subject to slowness and outages.
I build Enterprise Applications and I make them network efficient, good looking, maintainable and scale-able, just in case they become very successful and end up with millions of users.

Tuesday, August 20, 2013

Easy way to enable, disable & hide jQuery UI tabs

While searching on how to hide a jQuery UI tab, I found that a lot of other people were also looking for ways to easily enable, disable, show and hide tabs using the jQuery UI tabs control. Unfortunately, the built-in way to do it is cumbersome at best (although I know it helps keep the code small). So, I created this small plug-in to make it easier. To use it, just copy the text to a file (I name jquery-ui-tab-utils.js) and reference it in your code.

Scroll to the bottom if you just want to see it work.

/**
 * jQuery-ui-tab-utils.js - Utilities to help with the jquery UI tab control
 * Date: 08/20/2013
 * @author Kyle White - kyle@kmwTech.com
 * @version 0.1
 * Built for and tested with jQuery UI 1.9.2
 * License: Use at your own risk and feel free to use this however you want.
 *
 * USAGE: 
 * $('MyTabSelector').disableTab(0);        // Disables the first tab
 * $('MyTabSelector').disableTab(1, true);  // Disables & hides the second tab
 * $('MyTabSelector').enableTab(1);         // Enables & shows the second tab
 * 
 * For the hide option to work, you need to define the following css
 *   li.ui-state-default.ui-state-hidden[role=tab]:not(.ui-tabs-active) {
 *     display: none;
 *   }
 */
(function ($) {
    $.fn.disableTab = function (tabIndex, hide) {
 
        // Get the array of disabled tabs, if any
        var disabledTabs = this.tabs("option""disabled");
 
        if ($.isArray(disabledTabs)) {
            var pos = $.inArray(tabIndex, disabledTabs);
 
            if (pos < 0) {
                disabledTabs.push(tabIndex);
            }
        }
        else {
            disabledTabs = [tabIndex];
        }
 
        this.tabs("option""disabled", disabledTabs);
 
        if (hide === true) {
            $(this).find('li:eq(' + tabIndex + ')').addClass('ui-state-hidden');
        }
 
        // Enable chaining
        return this;
    };
 
    $.fn.enableTab = function (tabIndex) {
 
        // Remove the ui-state-hidden class if it exists
        $(this).find('li:eq(' + tabIndex + ')').removeClass('ui-state-hidden');
 
        // Use the built-in enable function
        this.tabs("enable", tabIndex);
 
        // Enable chaining
        return this;
    }; })(jQuery);
If you have suggestions on making it better (or making it work for use-cases I haven't tested), please let me know. Here's an embedded JSFiddle to demonstrate how it works: