Dark Mode for Sumatra PDF

Windows: version 10
Sumatra PDF: version 3.2 64-bit

A dark mode for Sumatra PDF is really easy – you just need to tinker with 3 lines of code in the settings.

Why Use Sumatra PDF?

In my opinion, it’s the best PDF reader. It’s small in size, super-fast and doesn’t have any annoying cruft.

Why a Dark Mode (Night Mode)?

If you code for long periods of time, then it’s really great to have your code editor run in dark mode. This greatly reduces the strain on the eyes.

But let’s say you are also following along an e-book, maybe a PDF and you switch to Sumatra PDF. The default setting is black text on white background. Immediately your eyes are shocked with bright luminescent white light. It’s as if you were relaxing in a room with the lights switched off and suddenly someone walked in and abruptly turned the lights on.

As you are coding along you have to switch back and forth multiple times between your PDF reader and code editor. It can be really jarring for the eyes and nerves.

How to Enable Dark Mode?

In Sumatra PDF, click on the Menu -> Settings -> Advanced Options

This should open the SumatraPDF-settings.txt file in your text editor. Change the following 3 lines under the heading FixedPageUI:

TextColor = #eeeeee
BackgroundColor = #111111
GradientColors = #000000

TextColor changes the text color of the PDF document. Background color changes, well the background color of the PDF document. GradientColors will change the background window of Sumatra PDF.

XAMPP Upgrade Tasks

I usually have 3 simple and separate tasks for a XAMPP upgrade or any general development environment migration (for example when moving to a new Windows or Mac hardware).

  1. Moving the source codes, files and assets: copy the www folder with all the project source codes local virtual host domains
  2. Apache configuration: edit the httpd.conf and httpd-vhosts.conf files
  3. MySQL migration: migrate the database

Source files

Usually I have a separate www folder configured with vhosts.

Apache Configuration

I only change the following line in httpd.conf because I like to develop on port 8080.

Listen 8080

And as a habit (Debian and FreeBSD) check if the vhosts file is included:

Include conf/extra/httpd-vhosts.conf

The httpd-vhosts.conf file has multiple entries (for each project or local domain name):

<VirtualHost *:8080>
    ServerName client1.san
    ServerAlias www.client1.san
    DocumentRoot C:/xampp/www/client1
</VirtualHost>

MySQL Migration

A fresh copy of a pristine MySQL installation with PHPMyAdmin has the following databases:

  • information_schema
  • mysql
  • performance_schema
  • phpmyadmin
  • test

So when migrating I try to avoid copying over those five databases / schema.

Preview(opens in a new tab)

While it might be OK to dump the database via PHPMyAdmin, it’s not a good idea to restore it via a web interface. For example my combined database size is almost 1 GB.

So ensure you have a decent max_allowed_packet size in specified in my.ini:

max_allowed_packet=16M

Then run the database restore command manually from the command line. For example:

mysql -u root < databases_to_migrate.sql

Using URLSearchParams in IE 11

Microsoft Edge has been around for a while, but IE 11 is not dead! There are people in the real world who still use IE 11, so the development process especially JavaScript implementation has to account for it.

While there are many Github projects and NPM packages providing Polyfill for URLSearchParams, the easiest way to use it is using a CDN link to one of the Polyfill implementations. Here is one from:

https://cdnjs.com/libraries/url-search-params

Then link from your code like this:

<script src="https://cdnjs.cloudflare.com/ajax/libs/url-search-params/1.1.0/url-search-params.js"></script>

MySQL Workbench 8.0 – Set the Default Time Zone

MySQL Workbench 8.0.19
MySQL Server 8.0.19

Summary

Here is a single screenshot summary of the actions you need to take in 6 labelled steps to change the time zone via MySQL workbench:

Detailed Steps

A detailed list of steps follow below.

Step 1 & 2

Either click from the main navigation menu -> Server -> Options File:

Or from the left navigation Administration tab -> Options File:

Step 3, 4 & 5

Then under General tab scroll down to the International field set, then locate the default-time-zone field, set it to your preferred zone:

Step 6

Then click on the Apply button:

You will get a confirmation box, hit the Apply button.

Directly Edit Config File my.ini

An alternative would be to directly edit the my.ini file and set the property:

default_time_zone = +8:00

In Windows 10, you can find the file here:

C:\ProgramData\MySQL\MySQL Server 8.0\my.ini

Set the JDK Path in GlassFish

GlassFish version: 5.1.0
Windows version: 10

Motivation

You may have several version of the JDK installed on your machine. By default you may be using JDK 11 or even 13, but GlassFish requires JDK 8.

Issue

Running asadmin generates the following error

Exception in thread “main” java.lang.NullPointerException
at com.sun.enterprise.module.common_impl.AbstractModulesRegistryImpl.initializeServiceLocator(AbstractModulesRegistryImpl.java:128)
at com.sun.enterprise.module.common_impl.AbstractModulesRegistryImpl.newServiceLocator(AbstractModulesRegistryImpl.java:120)
at com.sun.enterprise.module.common_impl.AbstractModulesRegistryImpl.createServiceLocator(AbstractModulesRegistryImpl.java:194)
at com.sun.enterprise.module.common_impl.AbstractModulesRegistryImpl.createServiceLocator(AbstractModulesRegistryImpl.java:200)
at com.sun.enterprise.module.single.StaticModulesRegistry.createServiceLocator(StaticModulesRegistry.java:64)
at com.sun.enterprise.admin.cli.CLIContainer.getServiceLocator(CLIContainer.java:193)
at com.sun.enterprise.admin.cli.CLIContainer.getLocalCommand(CLIContainer.java:231)
at com.sun.enterprise.admin.cli.CLICommand.getCommand(CLICommand.java:207)
at com.sun.enterprise.admin.cli.AdminMain.executeCommand(AdminMain.java:347)
at com.sun.enterprise.admin.cli.AdminMain.doMain(AdminMain.java:282)
at org.glassfish.admin.cli.AsadminMain.main(AsadminMain.java:33)

Fix

Edit: ~\glassfish\config\asenv.bat
Assuming JDK 8 installation path is C:\Program Files\Java\jdk1.8.0_241

Add the line:

set AS_JAVA=C:\Program Files\Java\jdk1.8.0_241

How to Disable Windows Volume Popup

You are working on code or writing something important, you are in the flow, you reduce or increase the volume a bit for the perfect sound-level and pops-up this ugly big annoying Windows 10 volume control disrupting not only your thought process but captures the screen real-estate for 5 seconds before it fades away.

This is down-right evil and will no longer be tolerated 🙂
Well thanks to Marcus Venturi there is a way to disable this.

Download and install the small (about 300 KB) software “HideVolumeOSD” from his site at: http://wordpress.venturi.de/?p=1

It lives happily in the tray or you can hide it completely and it will disable the volume popup.

Maven Error Return code is: 501, ReasonPhrase: HTTPS Required

Windows 10
NetBeans 8.2
JDK 1.8.0_241
GlassFish Server 4.1.1
Maven 3.0.5 (bundled with NetBeans 8.3)

Issue

In NetBeans IDE, trying to run a Maven project on GlassFish generates the following Maven Error:

Return code is: 501 , ReasonPhrase:HTTPS Required

Cause

Effective January 15, 2020, the Maven Central Repository no longer accepts non-SSL HTTP connections. You have to use TLS, i.e. the HTTPS protocol. Upgrading to a more recent version of Maven resolves the error.

Fix

Use a non-bundled recent version of Maven installed on your system. Download directly from the Maven site and install on your system.

Then in NetBeans 8.2, go to Tools -> Options, then select the Java tab and then the Maven tab:

Note the outdated version. Click the drop-down box and select the stand-alone version that you installed.

Upgrading to the later Maven version, for example 3.6.3 resolves the error.

Cannot run program “cmd”, Malformed argument has embedded quote

Windows 10
NetBeans 8.2
JDK 1.8.0_241
GlassFish Server 4.1.1

Issue

While trying to run a Maven project, the following error is generated in NetBeans IDE:

Cannot run program “cmd”, Malformed argument has embedded quote

Fix

Edit:
C:\Program Files\NetBeans 8.2\etc\netbeans.conf

Append to “netbeans_default_options”:
-J-Djdk.lang.Process.allowAmbiguousCommands=true

For example:
netbeans_default_options=”-J-client -J-Xss2m -J-Xms32m -J-Dapple.laf.useScreenMenuBar=true -J-Dapple.awt.graphics.UseQuartz=true -J-Dsun.java2d.noddraw=true -J-Dsun.java2d.dpiaware=true -J-Dsun.zip.disableMemoryMapping=true -J-Djdk.lang.Process.allowAmbiguousCommands=true”

The cause of this error is due to the Java update mentioned here:

https://www.oracle.com/technetwork/java/javase/13-0-1-relnotes-5592797.html#JDK-8221858