Category Archives: Software

Simple SSL configuration for Apache-Tomcat

For the official instructions (Tomcat 8), read this page

The following instructions are for development servers only:

Step 1: Create a keystore file to store the server’s private key and self-signed certificate:

For Windows:

"%JAVA_HOME%\bin\keytool" -genkey -alias tomcat -keyalg RSA

For Unix/Linux:

$JAVA_HOME/bin/keytool -genkey -alias tomcat -keyalg RSA

You will be asked for various information. Remember the password you typed at this step.

At the end of the procedure, keytool will create a file named “.keystore” to your home directory. By default it is hidden. This file should be moved to Apache-Tomcat home directory and can be renamed (eg to “keystore”).

Step 2: Disable APR:

Edit server.xml and comment out the following line:


Step 3: Activate the SSL connector

Edit server.xml and add (or uncomment and modify) the following lines:

    sslProtocol="TLS" />

You will have you replace “12345678” with your password.

You will also have to replace “keystore” with the full path to the keystore file generated at Step 1.

Step 4: Restart Tomcat

Do not forget to restart Apache-Tomcat



Audio staggering in Windows 10

Before upgrading to Windows 10, check if there are drivers written for your hardware specifically for Windows 10. You should definitely check that drivers exists for your network card and your audio card.

This is because Windows 10 suffer from the same (and important) problem Windows 8 suffer: High DPC (deferred procedure call) latency. If the drivers do not work properly you may have high DPC latency, which may result to audio staggering, lag, clicks, drop outs even if your CPU does not reach 100%. This means that there is a high chance you won’t be able to playback movies flawlessly while using the network card! What a break dealer!!!

You can verify if your system suffers from high DPC latency by using LatencyMon. To learn what DPC latency is read this article.

If there is no Windows 10 driver for your network card, the easiest thing to do is not to upgrade to Windows 10 !!!

Now, what do we do if we have upgraded to Windows 10 and do suffer from undesired DPC latency? There are numerous solutions in the net. Most of which do not work.

Imho, You should complete the following steps by that order. If the problem is solved at any point, you don’t have to (and better not to) do the rest of the steps.

Step 1: Update your system.

Step 2: If possible, remove 3rd party antivirus and firewall software.

Step 3: Remove any software you don’t need (you should do that anyway)

Step 4: Update all drivers to latest version.

At this point, if the problem persists then most probably one of your drivers is faulty or not completely compatible with Windows 10. You can find which by using LatencyMon but you can bet it is the network/wireless driver.

The only thing you can do is rollback to an older version. So there are two more steps to do:

Step 5: Verify that the driver installed is for the correct hardware and not just for the correct hardware family. If your card is named 6200 then your driver should be for 6200. Anything else like 6201, 6205, 6300 is not acceptable.

Step 6: Find the proper driver for Windows 7 and install it

If the last step does not work, then you can try other drivers from the same family.

Lastly, if the problem still persists then there are two more steps but they are a long shot:

Step 7: Optimize BIOS :

Important settings to disable and may help are:

  • Virtualization
  • High precision timer

Step 8: Update the BIOS

Personally, I don’t think the last step helps. But many people claim it does, so you have nothing to lose.


Generate random weighted variables

In this post I describe the common problem how to generate random weighted variables. For example you have a die with 6 faces that is fixed, so the probability of an 1 is not the same with the probability of a 2 etc.

The table below shows an example:

Face Probability
1  25
2  25
3  20
4  20
5  5
6  5

One easy solution is to reduce the problem to another one with a die with 100 faces that is not fixed.

You generate a random value from 0-99 that follows the uniform distribution. Do not use the modulo function to do that. See this post instead.

Once you have that value you perform the following steps:

You check the space within which that value relies.

  1. between 0 and 24, you generate 1 as the weighted variable
  2. between 25 and 49, you generate 2 as the weighted variable
  3. between 50 and 69, you generate 3 as the weighted variable
  4. between 70 and 89, you generate 4 as the weighted variable
  5. between 90 and 94, you generate 5 as the weighted variable
  6. between 95 and 99, you generate 6 as the weighted variable




Generate uniformly distributed random variables

Formulas shown below generate values that follow uniform distribution.

Using simple modulo methods is not considered as a good solution (although used a lot by students) as the module function does not generate all the variables with the same frequency.

Random integer between [ 0, 1 ]

int r = (int) (rand()/(RAND_MAX + 0.0));

Random integer between [ 0, 1 )

int r = (int) (rand()/(RAND_MAX + 1.0));

Random integer between [ 0, N ]

int r = (int) (N * (rand() / (RAND_MAX + 0.0)));

Random integer between [ 0, N )

int r = (int) (N * (rand()/(RAND_MAX + 1.0)));

Random integer between [ M, N ]

int r = (int) (Μ + (rand()/(RAND_MAX + 0.0))*(N-M+1));

Random integer between [ M, N )

int r = (int) (Μ + (rand()/(RAND_MAX + 1.0))*(N-M+1));


The general formula is:

int r = (int) (A + (rand()/(RAND_MAX + C))*B);

Values of M, N, K are shown in the following table:

Range A B  C
 [ 0, 1 ]  0  1  0.0
 [ 0, N ]  0  N  0.0
 [ M, N ]  M  N – M + 1  0.0
 [ 0, 1 )  0  1  1.0
 [ 0, N )  0  N  1.0
 [ M, N )  M  N – M + 1  1.0