Skip to content

Instantly share code, notes, and snippets.

View nghiaht's full-sized avatar

Huỳnh Trọng Nghĩa nghiaht

View GitHub Profile
# load USA state-level spatial data
# download from
# click the 'download' tab
# select county = 'united states', file format = 'R', click ok
# download 'level 1' for state-level data
nghiaht / gist:d0ec99debc61cfab95a6e4c4767949ea
Last active August 8, 2018 08:23
Delete Redis keys by patterns
redis-cli --raw keys "$PATTERN" | xargs redis-cli del
nghiaht /
Created September 13, 2018 03:30
Generate RSA keypair (public, private + pkcs8) using openssl command
# Private key
openssl genpkey -algorithm RSA -out private.pem -pkeyopt rsa_keygen_bits:2048
# Public key
openssl rsa -pubout -in private.pem -out public_key.pem
# Private key in pkcs8 format (for Java maybe :D)
openssl pkcs8 -topk8 -in private.pem -out private_key.pem
## nocrypt (Private key does have no password)
tar -xzf <file>.tar.gz
nghiaht / 3des_using_node_builtin_crypto.js
Last active March 11, 2022 22:11
Sample codes for encrypting and decrypting by 3DES using node-forge or built-in crypto module
const crypto = require("crypto");
* Encrypt 3DES using Node.js's crypto module *
* @param data A utf8 string
* @param key Key would be hashed by md5 and shorten to maximum of 192 bits,
* @returns {*} A base64 string
function encrypt3DES(data, key) {
const md5Key = crypto.createHash('md5').update(key).digest("hex").substr(0, 24);
nghiaht /
Created October 18, 2018 03:32
Check keystore expiration date
keytool -list -v -keystore keystore.jks
# Enter password
# Check the line "Valid from..."
nghiaht /
Last active October 30, 2018 04:51
Setup steps for python mysqlclient
cd ~
mkdir virtualenvs
cd virtualenvs
pip install virtualenv
virtualenv default # or virtualenv -p python3 default (depends on environments)
sudo apt-get install -y python-dev # or python3-dev
sudo apt-get install -y libmysqlclient-dev
source default/bin/activate
nghiaht / jest_enzyme_material_ui_select_on_change.js
Last active December 6, 2018 08:06
Jest Enzyme: onChange for material-ui Select (SelectInput - react-admin)
const handleSubmit = sinon.spy();
const wrapper = mount(
<Provider store={store}>
<MyForm onSubmit={handleSubmit} />
// Assume MyForm having a platform select input whose name is "platform"
const elem = wrapper.find("Select[name='platform']");
elem.prop("onChange")("iOS"); // Get onChange and call directly instead of the traditional elem.simulate("change", {target: {value: "iOS"}}) for <select> or <input>
nghiaht /
Created March 21, 2019 09:09
Testing Django Rest Framework with multipart/form-data request
from django.test import TestCase
from rest_framework.test import APIClient
class FileUploadTestCase(TestCase):
def test_upload(self):
client = APIClient()
client.credentials(HTTP_AUTHORIZATION='Token ' + self.token.key)
# or self.client (Django
response ='upload-file'), {
nghiaht / replace_multiple_regex_matches.js
Created July 24, 2019 10:23
replace multiple regex matches in Javascript
var r = /t\-test|test/g; // Note: /g
var input = "these are test t-test";
var output = input.replace(r, "") // Replace matched with ""