Thursday, January 22, 2026

CSP on Apache

To add CSP to root if sort of funny. The following will NOT work for most cases !!

    <LocationMatch "^/$">

       Header set Content-Security-Policy "unsafe-inline"

    </LocationMatch>

Case 1: The root (/) is associated with DocumentRoot

In this case, because you used the DocumentRoot, the 'Header set' behavior is not applied. You need to match the final resulting document, e.g.

    <LocationMatch "^/index.html$">

       Header set Content-Security-Policy "unsafe-inline"

    </LocationMatch>


Case 2: The root (/) is redirected via Rewrite rule

In this case, because it is a HTTP 301 response, the 'Header set' behavior is not applied (It only applies to HTTP 200 response by default). You need to use 'Header always set':

   <LocationMatch "^/$">

       Header always set Content-Security-Policy "unsafe-inline"

   </LocationMatch>

Thursday, October 10, 2024

Parse b3dm file content

We can use python with py3dtiles to parse the information in a b3dm file, for example:

from pathlib import Path
from py3dtiles.tileset.content import B3dm, read_binary_tile_content

filename = Path('./test.b3dm')
b3dm = read_binary_tile_content(filename)

b3dm_header = b3dm.header
print(f"\nb3dm_header.magic_value:\n{b3dm_header.magic_value}")
print(f"\nb3dm_header.version:\n{b3dm_header.version}")

print(f"\nImages in b3dm:")
for image in b3dm.body.gltf.images:
    print(image)


Tuesday, September 10, 2024

Access windows localhost from wsl

To access window's localhost from wsl, you can set networkingMode=mirrored in .wslconfig

Reference:

 https://learn.microsoft.com/en-us/windows/wsl/wsl-config#configuration-settings-for-wslconfig

Thursday, August 29, 2024

Start new tab with the current directory in windows WSL

Use the following alias:

alias nt='wt.exe -w 0 wsl'

It means starting a new  terminal (tab) in the same window (-w 0) , and run a command wsl with it.

Thursday, June 27, 2024

Node.js certificate issues

When you encountered certificate issues when using node.js, there are some workaround that can be tried:

1) Add custom CA certs

    $ export NODE_EXTRA_CA_CERTS=[your CA certificate file path]

2) Disable certificate checking

    NODE_TLS_REJECT_UNAUTHORIZED


Keep current log file when using logrotate

When using logrotate in Linux, you might encounter a situation where your log file gone when the log rotated. One of the flag that you may need to notice is the copytruncate flag. It did not remove the current log file, instead it copy the log file and then truncate it:

File name: /etc/logrotate.d/your-application

 /var/log/your-application/output.log {
    copytruncate
    rotate 5
    daily 
    compress
    delaycompress
    notifempty
    missingok
}


Thursday, May 23, 2024

Quasar failed to proxy pass via https

When failed to proxy pass with https in Quasar framework, it is very likely that the target-host HTTPS are configured incorrectly.  As a workaround, you can modify the quasar.conf.js with secure:false as following:

        "/context/path1/": {
          target: "https://target-host/path1/",
          secure: false,
          changeOrigin: true,
          pathRewrite: {
            "^/context/path1/": "",
          },
        },


Thursday, May 9, 2024

Limit CPU and Memory usage in Linux Slack

The Linux Slack consumes a lot of CPU and memory in Linux environment. To limit its resource usages, you can apply a quote via the snap command:

sudo snap set-quota slacklimit --memory=2GB --cpu=20% slack

Thursday, March 28, 2024

Sync multiple git repo at once

Use the following command in Linux will do the job:

 ls -d RepoNames* | xargs -I{} git -C {} pull

Tuesday, December 12, 2023

ffmpeg to convert MPEG4 to Animated GIF

In short, use the following command to do the conversion:

ffmpeg -i source_file.m4v -filter_complex "[0:v] split [a][b];[a] palettegen [p];[b][p] paletteuse" output_trimmed_enhanced.gif


Reference: https://www.bannerbear.com/blog/how-to-make-a-gif-from-a-video-using-ffmpeg/



CSP on Apache

To add CSP to root if sort of funny. The following will NOT work for most cases !!     <LocationMatch "^/$">        Header s...