Latest Entries »

Of Inkwells and Blogs

Learning to write was and still is a journey.  I recall a school desk with a round hole in the upper-right-hand corner.  Each of us was given a new dip pen, a new bottle to put in that hole, and a blotter.  No pigtail dipping allowed.  We practiced Palmer Method cursive writing with that dip pen.  No, we’re not talking 1800s here, it was the early 1950s.  Legible writing, spelling, and grammar were drilled into each of us daily.  It worked.  Sadly, the days of dip pens were numbered, and the following year or two was wooden pencils and cartridge fountain pens.  Ball-point followed well through high school and college, but the lessons learned were never forgotten.

My first computer?  A Radio Shack TRS-80 MC-10 with a chiclet keyboard and built-in Basic programming language.  4K RAM, and it plugged into a TV.  If you wanted to save your program, a cassette recorder was the best answer.  Next, the big time – a Zenith EZ-PC.  Black and white monitor, two 720K floppy drives – no hard drive.  Believe it or not, it ran Wordperfect, AutoCAD, DBase III+ and Lotus 1-2-3.  Modems?  What for?  No internet existed outside university testing labs.

…and here I am writing a Blog?

I’ve worked in IT for almost 30 years now, learning as I went, breaking things just so I could figure out how to fix them.  Exploring – always exploring.  I’m a firm believer in the axiom that each day is worthwhile only if you learn something new.

Always do your best, take pride in your work, and keep learning!

Rejoice, Rejoice!

A pet peeve of mine as a long-time church music director/organist has been hymn phrasing. My favorite example is the Christmas hymn/carol ‘O come Emmanuel’. Here’s my reasoning.

Do worshipers even think about what they’re singing, or is it by rote? As the de facto congregational hymn leader as organist, I must phrase my playing to the meaning of the text.

What I hear from countless renditions of the chorus of the popular carol is:

Rejoice, rejoice. [take a deep breath] Emmanuel. [take a deep breath]. (Okay, it sounds like we’re telling Emmanuel (God with us) to rejoice (I think, but it could be construed as two partial sentences) – why are we commanding God to rejoice?)

Followed by two nonsensical non-sentences “Shall come to thee. [big breath] Oh Israel.”


So far, we’ve got:

Rejoice! Rejoice, Emmanuel.

Shall come to thee.

Oh Israel.


Try it this way (yes, it’s okay to sing it to yourself – it actually makes more sense if you do):

Rejoice, rejoice! (a command for the faithful to be glad) [breathe here]

Emmanuel shall come to thee, (oh) Israel. [the savior, God with us] is coming to the faithful anticipating God’s return to his chosen people].

The bottom line is that we must think about and understand the words we’re singing. Otherwise, it’s just nice music.

Just sayin’…

Make no mistake – Democrats don’t want to help their constituents, nor do they care about them. They only want to control you and make you subservient to them. The government is NOT Santa Claus, it’s not Mommy and Daddy. They want to dictate what they think is best for you, not what you actually need. Individual freedoms – out the window – it’s what they dictate you will do, say, and think. There is no free education, no free handouts for the chronically lazy, no free healthcare, no matter what they tell you. They’ll take from workers and give to the non-workers. The more they take, the fewer incentive workers have to produce. Think about it. The mid-term election is this Tuesday – do you want freedom, or do you want every facet of your life controlled? The more they get, the more they’ll take.
I’ll take freedom, thank you very much. Vote Republican. #WalkAway

With IT groups becoming more security-conscious, I have been asked repeatedly if it is possible to have lower-level IT personnel install GP workstations without causing security risks by giving out the SQL sa password.
I tested a user created in GP solely for GP installs, and it did work in 2018R2.  I have not tested it in other versions at this point.
I created a user in GP named GPADMIN and set the password for the user.  I purposely also did not grant any company access or security.  I then edited the dex.ini SYNCHRONIZE= to TRUE to force dictionary synchronization with the DYNAMICS account framework (this would emulate the activity of running Utilities following a client install).  I then ran Dynamics Utilities ‘as administrator’ and logged in as GPADMIN, and it did successfully synchronize the dictionaries.
I then ran Dynamics and was able to log in successfully as far as the company selection screen.  Since I granted no company access, there were none on the drop-down.
It appears that you could use this to allow installers to run a template install and keeping the sa and DYNSA accounts secure.
Note that this will only work for workstation installs or service pack updates.  For adding companies in GP Utilities, you will need to use either sa or DYNSA.  Make certain DYNSA is dbo for DYNAMICS and all companies listed in the SY01500 table.  To take it one step further, the initial installation and database creation must be done using the sa account, since the installer needs to create DYNSA and set the login as dbo for Dynamics-related databases.
DYNSA has security to log into GP, log into companies, and perform most maintenance tasks.  GPADMIN (or whatever name you choose) will be able to install or update clients.  Neither will be able to log into SSMS (SQL Server Management Studio) since their passwords are encrypted in the DYNAMICS database.

One of Microsoft’s buried SQL gems.  I was working with a client with serious inter-server Dynamics GP performance issues, so slow as to be virtually unusable, but GP ran fine at the SQL Server.  We discovered SQL ODBC was communicating using Named Pipes only.

Without getting into troubleshooting detail, their IT group changed the default SQL port for Microsoft SQL 2016, and Microsoft, in all their infinite wisdom, removed port selection settings from the client ODBC DSN Configuration interface a number of versions back.  So how do you tell ODBC what port to connect to?

The answer is simple.  During configuration, when you select the server, enter the SQL Server and instance followed by a comma (,) followed by the port number it will connect with – no spaces.

For example, If your SQL Server is on CONTOSO1\GP, but needs to use TCP/IP Port 12345, enter CONTOSO1\GP,12345 in the Server line. If SQL is on the default instance, it would be CONTOSO1,12345.  It’s that simple.

Evil Incarnate

There is overwhelming evidence that the recently uncovered priestly perversions happen wherever the Roman Catholic Church exists, not just in Pennsylvania. Their superiors and their superior’s superiors say ‘shame, shame’, but do nothing to clean the sewer they have made, polluted, and continue to live in. The Roman Catholic religion, although almost as old as Christianity itself, is a perverted sham of a religion with the little biblical fact authenticating it to what God through Jesus Christ anticipated. Their belief in Mary as the ‘mother of god’, worshipping a dead Christ on the cross, indulgences, relics, and all manner of devil-inspired lies, many of which make witchcraft pale in comparison. This ‘church’ needs to be fumigated from the top down, its leaders exposed for what they are, and the rotting corpse on their cross torn down to reveal the living Christ seated at the right hand of the living God, not the god of this world that they worship and adore.
Other ‘religions’ are just as guilty of perverting the Gospel. From the mainstream Western religions to the supposedly enlightened non-denominational spirit-filled churches, each has strayed and cannot see its own hypocrisy (see my earlier post – )

This is an additional post on the perils of network performance, hardware, and file placement as related to Dynamics GP’s client/server processing algorithm.

While I could use posting, reporting, or data entry as an example, I will use SmartList as an example, since it provides a generic platform for non-technical analysis.

Let’s consider a simple action in Dynamics GP – the version is irrelevant for this scenario, other than the fact that SmartList was introduced in early versions of Great Plains Dynamics and CS+ and is commonly used.

  1. A normal system – our baseline:
    a. You request a Payables Transaction SmartList.
    b. The request is sent to the SQL Server Database Engine.
    c. Relevant data returns to the user’s temp folder in small packets (25 records each) for processing and temporary storage pending query completion.
    d. Results display to screen for further user interaction.
  2. A normal client with active antivirus scanning enabled
    a. You request a Payables Transaction SmartList
    b. The request is sent to the SQL Server Database Engine
    c. Relevant data returns
    d. Packet 1 – antivirus scans packet to ensure it is safe, then writes and stores in temp
    e. Packet 2 – antivirus engine scans packet
    f. Packet 3-400 (assuming default ‘first 1000 records’)
    g. Results display to screen
  3. A client with a low-bandwidth NIC (100Mb, Wireless)
    a. You request a Payables Transaction SmartList
    b. The request is sent to the SQL Server Database Engine
    c. Relevant data returns, but is unable to process as fast due to data backed up waiting its turn to get through. Think of the data as water, with the server 1GB+ NIC as a garden hose. With the 100MB NIC we are trying to force all the water passing through the garden hose into a drinking straw. Once the water is shut off (SQL processing finished), the hose will empty, but held back by the diameter of the straw.
    d. Packets arrive and results display on screen slowly

4. A client (or server) with slow disk drives or drives busy with other activities
a. You request a Payables Transaction SmartList
b. The request is sent to the SQL Server Database Engine
c. Query runs on server, writes to temporary tables, but both reading and writing data are slowed by the rate the server disks are able to read, write, and process the request. This is most noticeable in 5400RPM drives, but still noticeable in 7200RPM HDDs. If multiple databases are written to simultaneously, performance drops even more. That’s why data and log files, and tempdb should be on their own physical drives or drive arrays.
d. Relevant data returns, but is again hindered by a drive that cannot write fast enough to keep up with the data returned, or writing is hindered by the disk being busy writing other processes to disk, calculating spreadsheets, rendering drawings, etc.

5. Client with roaming profiles
a. You request a Payables Transaction SmartList
b. The request is sent to the SQL Server Database Engine
c. Relevant data returns to the temp folder on a different server
d. Client queries and processes data in the temp folder across the network. This will take many bundles of data, and we’re now shuffling data to another server.
e. Data returns to client and displays on screen for further processing

As you can see from the above examples, there are numerous ways in which data can be slowed down, backed up, or bottlenecked. Keep in mind that any combination of the above scenarios is also possible.

It’s also easy to alleviate many of these trouble spots.
In scenario #2, create Antivirus exceptions for known temporary files.
* In the %temp% folder:
* TNT*.dat
* TNT*.idx
* TNT*.tmp
* In a %temp%\TNT* subfolder:
* ASI*.dat
* ASI*.idx

In scenario #3, make sure the NIC is a minimum of 1GB, and any hubs (old) or switches support 1GB throughput. Most new computers already comply. If you’re connecting to your network on a wireless connection, plug in a network cable. If your notebook doesn’t have a NIC port, there are USB adapters.

In scenario #4, the faster the drive, the better the performance. A Solid-State Drive is fastest. Increased productivity will quickly offset the additional cost of an SSD.

In scenario #5, if your IT requires roaming profiles, make sure your network is as fast as possible, but ask if it’s available to store temp files locally rather than on another server.

PC Confusion

Today’s world is a confused and confusing mess.  I don’t want to be ‘woke’ – I’m already very much awake, thank you.

The following observations are from reality, not from dreams or some utopian fantasy.

  1. There are two (2) sexes – Male and Female – got it?  Biological fact.  Men’s facilities are for males, women’s facilities are for female.  Thinking there are nine (or however many you dream up) are in your head.  Wrong thinking.  We’d have a lot fewer problems if people would accept this reality.  Gender-fluidity is wrong thinking and born from deranged minds of the sort they used to lock in rubber rooms for the benefit of normal people.  Today they’re either courted by the media, part of the media, courted by politicians, or they are politicians.
  2. Today’s #MeToo frenzy confuses me.  It started out as a good thing.  I don’t condone rape in any way, shape, or form, and anyone that sexually assaults another should be punished.  But…  It’s gone too far.  Now we have women (or men) coming forward to say “[name goes here] touched my arm when we were at a restaurant in 1986, and I didn’t ask for it, so [name goes here] should be ashamed of themselves, and publically shamed as well.  You know what?  If you don’t want to be touched or, heaven forbid, hugged, don’t step out in public.  Ever.  Oh, yes, ladies, if you don’t want to be treated like a sexual object, don’t dress like one.  As in my first point above, men are biologically attracted to females, and the more you flaunt and tease, the more they’ll want.
  3. Christianity vs Islam – oil and water don’t mix.  No, certainly not all Muslims are terrorists, but their beliefs are not compatible with Christian beliefs and social structure.  The Pope is wrong.  I’m not Roman Catholic, but I know a Socialist when I see and hear one.  Holy Wars were fought in the name of eradicating the cancer known as Islam, but the Pope wants his sheep to hug it out with them instead.  Islam’s creed?  Fight the infidel until there are none left.  When the only people left are Muslim, then there will be the peace their religion claims.  No way.
  4. Racism.  God made us in many shades, all of them beautiful.  Be nice to me, I’ll be nice to you.  The end.  There is no White Supremacy.  If there was, we’d have NAAWP, a Congressional White Caucus, and White Lives Matter.  You know what?  We’re all human, let’s drop the color barriers.  Yes, I saw the evidence in Tennessee when I visited Nashville 50 years ago.  I was shocked then and can’t believe anyone ever saw a reason for it to continue beyond 1870.
  5. Celebrity culture.  Look, celebrities, no one cares what you think.  If we watch you or listen to you, it’s for your particular talent, not because you have something to say.  You’re super-rich, entitled, and want your lowly public to hang on your every word.  We don’t.  Act, or sing, and leave it at that.
  6. Pro Sports.  Same as other celebrities.  We don’t care what your causes are, we watch you because of your sports prowess.  Disrespect my flag, you’re dung.  My wish is that they would shut down the NFL and let players actually work for a living.  Play sports at night or on weekends, but you aren’t worth the millions you are paid.

Just sayin…


Dynamics GP Process Server, available since the early versions of Great Plains Dynamics, has been pretty much ignored by most of us throughout the years.  Yet it can do so much to assist in many situations.

Since most GP users (and honestly, many GP consultants) have never heard of Dynamics Process Server, let’s begin by explaining its purpose.  As explained in a previous post, Dynamics GP is a Client-Server application, meaning that processing is done on both the client and in SQL Server database processing.  We insist on fast servers and great server performance, yet overlook the performance of the equally-important workstation component.  Many of the posting and printing functions are done at the workstation, and if the workstation is underpowered, has too many other applications open in the background, or even if the user needs to push on to the next task quickly but is blocked by other GP tasks already running on the client, many times these workstation-intense tasks can be sent to a Dynamics Process Server (which we will refer to as DPS going forward).

A DPS ‘server’ is nothing more than a GP client installed on a workstation or server either on a dedicated or an as-needed basis, possibly a part-time employee’s workstation, or a user who is out for the day.  Specific tasks are assigned to these servers through the setup window in GP.  The good news?  There’s nothing to install since the files are already on every GP client workstation by default.

Where DPS can really make a difference is in boosting both actual and perceived performance.  Faster clients can be used to process long-running, processor or RAM-intense tasks not only making the user’s workstation available for additional tasks immediately but distributing the workload.  As an example of this, consider a GP user who needs to run Accounts Receivable Aging, process statements, and enter Sales Orders.  Without DPS, the user would run the aging, wait until completed, process statements, wait until completed, then enter sales orders.  Even if these tasks could be run concurrently on the same workstation, RAM, CPU, and disk activity would slow further activity to a crawl, or possibly even crash the application.  With DPS in place, the user sets up the processes as usual, but rather than clicking the process button, they have the option to offload the processing to DPS.  At that point, they can proceed to the next task with no processing overhead on the workstation.

I will expand on this topic in upcoming posts.


I have a perfect answer for the children protesting gun rights. After checking several sources, it seems there is an average of 11 teenagers killed each day by other teenagers texting or talking and driving. Taking these children’s logic to a relatively logical step forward, we just take away all cell phones and their cars! Phones and cars are killers and these children should not be allowed to apply for the use of one until they’re at a responsible age.  There are far more deaths by phone than guns any day of the year.

Let’s take this one more logical step.  Eleven deaths a day doesn’t include the number of suicides every year caused by shaming and bullying, much of it texted or messaged on these over-entitled children’s phones. Given that, it makes sense to take phones away until they’re old enough to respect the power in their hands.

Kids might actually have to interact with those around them face-to-face.  Without phones, they’d have time for homework, sports, and time with their families.  Compare that to what I see every day – kids from grade school through high school walking to and from the bus with shoulders slumped, staring down at their phones as they text ignoring the world and even those around them, not to mention the vehicles swerving to avoid them as they cluelessly wander down the middle of the street in a chatroom fog.

Helicopter parents worried about where their children are don’t need to give them phones.  A simple GPS tracker will suffice to locate them at school and around the neighborhood if you feel the need, or even better – old-fashioned parenting and trust when deserved.  Yes, you read correctly.  When. Deserved.  Not because they whine, cry and throw tantrums – when. deserved. period.

Let’s get these instruments of destruction out of our children’s hands!

Just sayin…

The official System Requirements for Microsoft Dynamics GP 2018 document from Microsoft does not give Network requirements. So some companies may forget to ask or be tempted to think it doesn’t matter.

In fact, you must be aware that:

Dynamics GP is supported only when client and SQL databases are on the same Local Area Network (LAN).

Wide Area Networks (WAN), Virtual Private Networks (VPN), or any other variant is not supported and will cause at minimum poor performance, and at worst corrupted data.

A minimum of 1GBps LAN is required for normal GP performance.  This also means that notebook users should be discouraged from using Wi-Fi to run Dynamics GP.  CAT5 cabling is the minimum acceptable connection.

If you have a mix of speeds with LAN and WAN/VPN users, it gets even scarier.  Dynamics GP tags each transaction with a Dex Row ID and that next number is reserved until the transaction is complete.  If you have a local (fast connection) client and a remote (slow connection) client processing orders simultaneously, there is a possibility that these IDs could be assigned to the wrong transaction depending on whose transaction completes faster, which would corrupt the transaction.  That is a very simplified layman’s description but should serve to show the importance.

As faster internet speeds become more cost-effective it gets more tempting to put space between client and servers or put the SQL server in a data center, but even if your network card says 1Gbps, it is not going to achieve that speed over a lossy WAN or VPN with a likely maximum of 50-200Mbps.

  • If you are implementing Microsoft Dynamics GP for the first time, make sure you review the system AND network requirements carefully.
  • If you are already running Microsoft Dynamics GP and you are thinking of making a change to your network make sure you contact your Dynamics GP Partner to review your plans BEFORE making any changes.

Additional resources:

short article on the problem of running database applications over WAN. Terminal Services is one solution when users and the database(s) reside in different locations.  The Dynamics GP Web Client is another solution, but still requires a second collocated server for the underlying GP Client, IIS, and connection management database.

This article by Dave Musgrave is the best explanation on the subject of WAN ODBC communications.