More advice on how to organize an article

The Upcoming changes to Google Drive sync clients page is another excellent example of how not to organize an article.

The section How Backup and Sync users can start using Drive for desktop begins as follows: “To get started with Drive for desktop, you can move your accounts and settings from Backup and Sync to Google Drive for desktop”. At this point the more impatient readers will have already started screaming at the author of this page because no information at all on how to get started was provided. Just above this paragraph is a link to “download Drive for Desktop” so you can assume that by the time your reader gets to this point on the page they have downloaded the software and they are continuing to read the page in order to find out what to do next.

To be more precise, at this point the reader has two questions that they are eager to learn the answer to.

  1. Do I uninstall Backup and Sync first?
  2. Or do I just install Drive for Desktop without first uninstalling Backup and Sync?

In the sentence “To get started with Drive for desktop, you can move your accounts and settings from Backup and Sync to Google Drive for desktop” you have not provided an answer to that question. You have instead annoyed the hell out of your reader. The reader is now screaming “But exactly how do I get started” at the top of their lungs.

The second sentence does not make matters any better: “During the process, you’ll review and confirm the settings for the folders on your computer you’re backing up and syncing with the cloud through Backup and Sync”. The reader is now two thirds of the way through the paragraph and they still have no idea what the answers to the above two questions are.

The final sentence does provide an answer to the question but only indirectly: “Backup and Sync will be automatically uninstalled after you’ve moved your accounts to Drive for desktop”. This sentence implies the answers to the two questions are as follows.

  1. Do I uninstall Backup and Sync first?: No
  2. Or do I just install Drive for Desktop without first uninstalling Backup and Sync?: Yes

The problem is that the impatient reader may have rage quit reading the page before getting this fare because of the issues with the first two sentences in the paragraph. I know that the first time I read this page, while I did manage to restrain myself from screaming, I did rage quit reading the page before I got to this critical sentence. It was not until I returned to the page the following day that I was able to answer my questions.

If a single sentence were added to the start of this paragraph things would be much better for the impatient reader: “You do not need to uninstall Backup and Sync before installing Drive for desktop”.

If the How Backup and Sync users can start using Drive for desktop section were rewritten as follows, this page would be far more useful and far easier to read.

How Backup and Sync users can start using Drive for desktop

You do not need to uninstall Backup and Sync before installing Drive for desktop. To get started with Drive for desktop simply run the Google Drive for desktop installer, GoogleDriveSetup.exe. After the installation of Drive for desktop completes a Move accounts to Drive for desktop form will be displayed to allow you to move your accounts and settings from Backup and Sync to Google Drive for desktop. During the process, you’ll review and confirm the settings for the folders on your computer you’re backing up and syncing with the cloud through Backup and Sync. Backup and Sync will be automatically uninstalled after you’ve moved your accounts to Drive for desktop.

Advice on how to organize an article

The article What causes the ‘Your Hardware Settings Have Changed’ issue on Windows 10? is very poorly organized.

In the introduction the article explains two possible causes of the issue. This introduction is well written and provides useful, and relevant, information.

After the introduction is a Note heading. The first paragraph in this section begins as follows: “If the given solutions don’t work for you, you will have to stop Windows from updating your device drivers”.

At this point many readers will begin screaming at you in rage because you have not said a single word about how to solve the problem, you just explained what is causing the problem.

Next comes several paragraphs that explain how to “stop Windows from updating your device drivers”.

This Note section ends with the ominous warning: here be dragons. The problem is that the impatient reader who is desperately trying to get their laptop working again may never even get this far because they may have followed the instructions on how to “stop Windows from updating your device drivers” and seeing that the issue has gone away closed the web page.

It is only if you continue scrolling down the page past the ominous warning that you find the solutions. Of course some readers will never see the solution because they stopped reading after following the instructions to “stop Windows from updating your device drivers”.

This article should have been organized as follows.

  1. Causes
  2. Solutions
  3. If the given solutions don’t work for you…

The way the article is presented just pisses the reader off. It may also cause them to try the alternative without ever being aware that the article actually does suggest solutions.

Don’t be like Kevin. Please use a logical order for your articles.

The start of a journey to become my true self.

The long and winding road, taken 14 years ago, 4 km from Dodburn, Scottish Borders, Great Britain.

I am a trans woman. I have been living as a woman for sixteen years. It has been almost sixteen years since I last wore men’s clothing.

And yet I have not begun the gender transitioning process.

I finally decided to begin the gender transitioning process at the end of last year. On December 30, 2020 I did some research to determine how to go about it. I found a document on my health insurance provider’s website containing the following information: “Hormone therapy is usually initiated upon referral from a qualified mental health professional … competent in behavioral health and gender dysphoria treatment”. I also learned that my insurance provider provides various telehealth options for Sexual Orientation and Gender Identity Counseling.

So, on December 31, 2020 I scheduled an appointment with a service called MDLIVE for January 20, 2021 at 1:00 PM CST.

The appointment on January 20, 2021 was a disappointment. At the beginning of the appointment I was asked what my goals are. When I mentioned that my ultimate goal was to begin HRT I was informed the MDLIVE cannot assist with that. The therapist suggested I contact my insurance provider to request information on how to go about starting HRT.

So later that day I used the chat feature of my health insurance provider’s website to request information on how to go about starting HRT. The response was devastating: “I apologize yet Hormone replacement therapy is not a covered benefit under your medical plan since it is considered as experimental, investigation and unproven.”

I was devastated.

Fortunately my health insurance provider has this new program in which they assign their customers a Nurse Case Manager.

I was contacted by two Nurse Case Managers today.

The first Nurse Case Manager I was assigned is not familiar with Gender Dysphoria. When I mentioned to her that I am a trans woman and I am planning on starting HRT soon I was reassigned to another Nurse Case Manager who is familiar with Gender Dysphoria.

My Nurse Case Manager is named Spring.

I mentioned to Spring that I had been informed that hormone replacement therapy is not a covered benefit and she reassured me that Hormonal therapy is covered under their “Treatment of Gender Dysphoria” policy. She sent me their Gender Dysphoria Policy document.

In the document the following services are listed as “Medically necessary treatment for an individual with gender dysphoria”.

  • Behavioral health services
  • Hormonal therapy
  • Gender Reassignment Surgery (with some exceptions) including “Male to female reconstructive genital surgery”.

Unfortunately some services that are deemed to be “not medically necessary service” are not covered. This includes the following.

  • Facial Feminization
  • Breast augmentation
  • Voice therapy

I have requested a referral to an endocrinologist from my Primary Care physician. They have referred me to Texas Diabetes & Endocrinology and I should be contacted by them next week. Spring confirmed that Texas Diabetes & Endocrinology accepts my health insurance and they are considered to be an in-network provider.

In other words, I am finally becoming my true self at the age of 44. I am so happy.

It has taken me many years and a great deal of pain to get to this point.

When I was a child my parents did everything they could to beat masculinity into me (see Do not try to force boys to be masculine. You will only break them.). They kept me from even realizing that there was an option to being a man. This is why I emphasize with what Vanyel Ashkevron went through in the book Magic’s Pawn: Valdemar: The Last Herald Mage; in this book Vanyel’s weapons master and father went to great lengths to keep Vanyel from realizing that homosexual relationships were possible.

I was married, to a woman, before I ever heard the word transgender.

When I finally accepted that I am transgendered, it ruined my marriage. The first thing my wife said to me was “I did not marry a woman.” She then accused me of marrying her under false pretenses.

It has been a long, winding, and extremely painful road. Everyone in my life who should have helped me instead put up road blocks. But I am finally here.

My response to a recent tweet by @realDonaldTrump.

Today @realDonaldTrump tweeted the following.

Donald J. Trump
@realDonaldTrump
At 10:00 P.M. on Election Evening, we were at 97% win with the so-called “bookies”.

This tweet has 146.8K Likes.

The problem is that this was in fact expected and is not evidence of fraud or proof that the election results are invalid for the following reasons which I will explain in the simplest way possible.

  1. There is a currently a deadly worldwide pandemic.
  2. Voting in person during a pandemic is a health risk.
  3. Many states responded to the pandemic by encouraging Vote by Mail.
  4. In many states the law required that counting of vote by mail ballots not begin until after the election.
  5. You told your supporters that vote by mail is prone to fraud despite having no proof. Thus many of your supporters chose to vote in person despite the pandemic related health risk.
  6. Democrats encouraged to stay healthy and vote by mail. Thus many democrats did the sane thing and chose to Vote by Mail.

Thus the inevitable result is that at the end of the day the election results appeared to favor Donald Trump because the legal vote by mail ballots had not been counted yet.

Even Attorney General William Barr, a well known supporter of Donald Trump, has said that “to date, we have not seen fraud on a scale that could have effected a different outcome in the election.”

How to make it difficult to find online test results.

Many doctor’s offices have moved access to medical records online. For example, my doctor’s office emailed me today to tell me that my COVID-19 test results are available and I should go online to view them.

I need to know for certain what the results are because I have a surgery scheduled for next Monday that I would have to cancel if I have COVID-19. Whoever designed the website seems determined to make it as difficult as possible to obtain test results.

The page is designed so that on the left side of the page there are the following tabs.

  • Patient Account
  • Patient Appointments
  • Documents
  • Review Medical Record
  • Message a Provider
  • Contact Us

So far, so good. The obvious place to search for test results is the Review Medical Record tab and if it is not there, the Documents tab.

So, I clicked on the Review Medical Record and I see it is divided into the following child tabs.

  • Patient Summary
  • Allergies
  • Immunizations
  • Medical History
  • Medications
  • Orders
  • Problem List

Nothing in that list gives any indication where to find Results.

So, I clicked on the Documents tab. It has one child tab, the Community Resources tab.

Again, no indication where to find Results.

I finally found the Results after I started clicking on every single tab and child tab; there were over 50.

The Results were located in the Orders child tab of the Review Medical Record tab.

If the Orders child tab was named Results I could have found that I do not have COVID-19 in 30 seconds. As it is, it took me 30 minutes!

Why the Trump administration ordered hospitals to bypass the C.D.C. when reporting COVID-19 information

Just in case you were wondering why the Trump administration ordered hospitals to bypass the Centers for Disease Control and Prevention and send all COVID-19 patient information to a central database in Washington, it was so the they can manipulate the numbers.

They want to deceive us into believing that the United States has the “Lowest Mortality Rate” from COVID-19.

Do not believe his lies; we have the seventh highest mortality rate in the world!

Sources:

Trump was not right about Hydroxychloroquine!

Speech bubble containing the word “blah.”

Before you believe bold headlines such as the following, you need to consider the source.

The Media Sabotage of Hydroxychloroquine Use for COVID-19: Doctors Worldwide Protest the Disaster.

Media and Big Pharma are in lockstep to suppress a cheap, life-saving Covid-19 therapy in order to reap pandemic-sized profits

This drivel was published on https://www.globalresearch.ca/ which is “a Canadian conspiracy website” that was founded by Michel Chossudovsky who is currently the President of GlobalResearch and professor emeritus of economics at the University of Ottawa.

For more see Media Bias/Fact Check — Global Research and Centre for Research on Globalization.

On the existence of deities and the nature of religion.

Symbols from various world religions. Source: Wikipedia.
Symbols from various world religions. Source: Wikipedia.

I once believed that there are no deities. Then I finally discovered the shocking truth, every deity that has ever been the subject of worship actually exists.

A religion is nothing more or less than a collection of religious texts, a group of priests and priestesses, and a network of places of worship.

These items can be described in non religious terms.

  • The religious texts are works of philosophy that happen to include tales; some of these tales discuss the history of the philosophy, or at least they claim to discuss the history of the philosophy, and other tales enhance and build upon and explain the philosophy.
  • The priests and priestesses are teachers that teach the philosophy.
  • The places of worship are schools that teach the philosophy.

The deity is therefore nothing more or less than the core concept that lies at the heart of the religion.

A religion is not meant to be static. It is meant to be a living, breathing, ever changing organism. It is the duty of all true followers of a religion to try to improve the religion for the betterment of man.

This is what is wrong with Christianity. It is no longer a living, breathing, ever changing organism. It is a putrid corpse.

Debugging Tip: How to Set a Breakpoint In a Windows API Function

Introduction

This article is based on an EMail message I sent to the software development team at Vispero on August 26, 2008. I had just spent hours debugging an odd bug in JAWS®. When focus was in a particular window while JAWS was running I heard constant, rapid fire, beeping. I searched the JAWS source code for calls to the Beep and MessageBeep functions and was not able to determine the cause of the bug. I was at a loss. Then I asked the following question, is there a way I can just set breakpoints in the Beep and MessageBeep functions? This article discusses what I found during my quest for an answer to that question.

I am writing this article now because I encountered this issue again today and just spent five hours retracing my steps.

Note: After I wrote this article I learned that things are much easier in Visual Studio 2017 and Visual Studio 2019. In these versions of Visual Studio all that you need to do is open the “New Function Breakpoint” dialog box using the “Debug/New Breakpoint/Function Breakpoint…” menu item and enter the undecorated name of the function in the dialog box. If you are interested in learning how things used to be, follow me down the rabbit hole.

Falling down the rabbit hole

It turns out that it is possible to set a breakpoint in a Windows API function in Visual Studio. I do not know when this functionality was added to Visual Studio but I do know that it was available in Visual Studio 2005. The question is how.

The Set function breakpoints section of the Use breakpoints in the Visual Studio debugger page provides some relevant information; it provides very limited information on setting a breakpoint on a function with a known name. Simply use the “Debug/New Breakpoint/Function Breakpoint…” menu item to open the “New Function Breakpoint” dialog box and type a magical incantation in the “Function Name” edit.

Unfortunately, the information provided here is infuriating since it reveals that the feature is supported but it does not provide enough information to allow you to actually use the feature. In other words, it does not tell you what magical incantation to use.

Use the context operator in native C++.

{function, , [module]} [+]

Example: {MethodA, , App1.dll}+2

The article How Can I Debug Windows API Functions provides more information but it does not explain the context operator. It does reveal how to set a breakpoint in the MessageBeep function.

{,,USER32.DLL}_MessageBeep@4

This page mentions that you need to use the “decorated form of the function name” and suggests that you refer to the Viewing Decorated Names page for more information. The Viewing Decorated Names page in turn refers you to the Use a listing and Using DUMPBIN to View Decorated Names pages. Unfortunately, it turns out that neither of the techniques mentioned on the Viewing Decorated Names page will allow you to determine the decorated name for a function that is exported from a DLL. The DBH tool is supposed to be able to provide this information via the -d command-line option but in my tests using the following command it only provides undecorated names these days (bad Microsoft!).

dbh -s:srv*C:\SymbolCache*http://msdl.microsoft.com/Download/Symbols -d C:\Windows\System32\User32.dll enum *CreateWindowExW*

This command provides the following output.

Symbol Search Path: srv*C:\SymbolCache*http://msdl.microsoft.com/Download/Symbols

 index            address     name
     1            1007760 :   CreateWindowExW

Note that this is not the decorated name of the function since there is no @ character.

Unfortunately, I do not know an easy way to determine the “decorated form of the function name” other than to figure it out yourself using the information provided at Using Win32 calling conventions. Most Windows API function use the __stdcall calling convention. The general syntax for the decorated name of a __stdcall function is as follows.

_[UndecoratedFunctionName]@[SizeOfParametersInBytes]

This provides enough information for you to write the part of the magical incantation that comes after the } character, but what about the beginning of the magical incantation? Based on the example provided for the MessageBeep function one could assume that it should simply be the name of the DLL that implements the Windows API function, but is more information available?

Fortunately, the Context Operator in the Visual Studio Debugger (C++) page does provide a more detailed explanation for the first part of the magical incantation. This page reveals part of the syntax for the Context Operator.

{,,[module]} expression

Of course, this very annoyingly leaves a question unanswered. Why does this text between the { character and the } character start with two commas? What are you leaving out?

I have not been able to find official Microsoft documentation that answers that question yet. However, I do have an answer for you from Breaking on System Functions with the Context Operator. This page reveals that the full syntax of the Context Operator is as follows.

{[function],[source],[module]} expression

In most cases you will not need to worry about [function] and , you will only need to worry about the module and the expression.

Thus, the syntax for the magical incantation you will need to set the breakpoint is as follows.

{,,[module]}_[UndecoratedFunctionName]@[SizeOfParametersInBytes]

Pulling everything together.

To set a breakpoint in any Windows API function, such as the CreateWindowExW function, do the following.

  1. Look up the Windows API function in the Microsoft documentation. In the Requirements section the DLL the function is implemented in is provided; in this case it is User32.dll.
  2. Determine the size of the function parameters in bytes, as follows.
ParameterSize in bits on a 32-bit systemSize in bytes on a 32-bit systemSize in bits on a 64-bit systemSize in bytes on a 64-bit system
DWORD dwExStyle324324
LPCWSTR lpClassName324648
LPCWSTR lpWindowName324648
DWORD dwStyle324324
int X324324
int Y324324
int nWidth324324
int nHeight324324
HWND hWndParent324648
HMENU hMenu324648
HINSTANCE hInstance324648
LPVOID lpParam324648
Totals4868
  1. Fill in the blanks.

If you are debugging a 32-bit application the magical incantation is as follows.

{,,User32.dll}_CreateWindowExW@48

If you are debugging a 64-bit application the magical incantation is as follows.

{,,User32.dll}_CreateWindowExW@68
  1. Enter the appropriate magical incantation in the “Function Name” edit of the “New Function Breakpoint” dialog box and press the OK button.

Note that in order for this to work you will need to set up Visual Studio to use the Microsoft symbol server. To do this select the “Debug/Options…” menu item to open the Debugging section of the “Options” dialog box. Then select “Debugging/Symbols” in the tree view. Next press tab to move focus to the “Symbol file (.pdb) locations” check list box and check the “Microsoft Symbol Servers” item. Then press the OK button.

References

Down the Rabbit Hole (CC BY-SA 2.0) by Valerie Hinojosa