Skip to content

Instantly share code, notes, and snippets.


Angel Leon gubatron

View GitHub Profile
gubatron /
Last active Nov 28, 2022
How to build your Docker image using the same Dockerfile regardless of the host architecture

How to build your Docker image using the same Dockerfile regardless of the host architecture


If you are now using docker on a Mac M1 (arm64 platform), you don't want to use amd64 as the architecture for your Linux Images.

You could have 2 lines on your Dockerfile and comment each one depending on where you're building the image


# Building on Apple Silicon host
gubatron /
Created Sep 12, 2022
script to build php8.1.10 from source so that we can link to openssl1.1.1 (new ubuntu 22.04 makes use of openssl 3 and it breaks a lot of stuff that depended on weaker ciphers)
sudo apt install build-essential autoconf libtool bison re2c pkg-config libwebp-dev libxml2-dev libsqlite3-dev libbz2-dev libcurl4-openssl-dev libpng-dev libjpeg-dev libfreetype-dev libonig-dev libedit-dev libreadline-dev libzip-dev
cd php-8.1.10
#builds configure file if there isn't one
#./configure --help for full list of options
./configure --with-curl \
--disable-cgi \
gubatron /
Last active Apr 19, 2022 - Decent brute force 8 queens state finder (takes about 235k iterations)
from random import shuffle
This module tries to solve the 8 queens problem.
identity_rows = [0, 1, 2, 3, 4, 5, 6, 7]
def queens_attack_each_other(queen_a, queen_b):
'''True if 2 queens face each other'''
return queen_a[0] == queen_b[0] or queen_a[1] == queen_b[1] or abs(queen_a[0] - queen_b[0]) == abs(queen_a[1] - queen_b[1])
gubatron / complex.js
Created Apr 14, 2022
Class to represent a Complex number and a few operations that can be done with them
View complex.js
class Complex {
constructor(real, imag) {
this.real = real
this.imag = imag
length() {
return Math.sqrt(this.real * this.real + this.imag * this.imag)
gubatron /
Created Mar 23, 2022
Crates a Merkle Tree using the given data, per light Clients for Lazy Blockchains paper by Ertem Nusret Tas et. al
import hashlib
import binascii
def H(data):
if type(data) == str:
data = str.encode(data)
if type(data) == int:
data = data.to_bytes(4, 'big')
return hashlib.sha256(data).digest()
gubatron /
Last active Mar 6, 2022
remove repeated entries on a sqlite3 table (there's no delete limit 1 in sqlite3, you gotta do a select within the delete statement)
import sqlite3
# python script to cleanup double entries on the marketsnapshots table.
#CREATE TABLE marketsnapshots (
# symbol TEXT,
# ...
# lastupdatetime INTEGER);
def symbolList(cur):
gubatron / gist:c8ecee2d54033a0b131812324e5a7a33
Created Jan 6, 2022
Fixing "configure: error: ACC conformance test failed. Stop." when building ucl on macos with M1 (arm64) CPU
View gist:c8ecee2d54033a0b131812324e5a7a33
git clone
cd ucl
./configure CFLAGS="$CFLAGS -Wno-error=implicit-function-declaration"
make -j 10
sudo make install
gubatron / int_as_array.cpp
Last active Nov 12, 2021
Access and manipulate an int via char array using an union. C Plus plus
View int_as_array.cpp
#include <iostream>
int main() {
union {
unsigned int a; // 32 bit number, 4 bytes
unsigned char aa[4]; // access a's bytes as an array
a = 0xaabbccdd;
printf("a: 0x%x\n", a); // a: 0xaabbccdd
gubatron /
Created Sep 12, 2021
How to isolate crashes with `ndk-stack` from `adb logcat` output

adb logcat | ndk-stack -sym <path to folder with .so files>

Example: adb logcat | ndk-stack -sym ~/workspace.frostwire/frostwire-jlibtorrent/swig/bin/release/android/armeabi-v7a

gubatron / random_squares.html
Created Aug 22, 2021
Bouncing random colored squares in Javascript using basic canvas 2D api
View random_squares.html
<!DOCTYPE html>
<meta charset="utf-8"/>
<title>Canvas tutorial</title>
<script type="text/javascript">
const max_x = 2048
const max_y = 2048
const bgcolor = 'rgb(0,0,0)'
const fgcolor0 = 'rgb(200, 0, 0)'