Skip to content

Instantly share code, notes, and snippets.

@qnkhuat
qnkhuat / metabase_quartz.clj
Last active May 6, 2024 17:11
Quartz misfire policy bug
;; NOTE: need to update org.quartz.threadPool.threadCount to 1 in resources/quartz.properties
(require
'[metabase.task :as task]
'[metabase.util.log :as log]
'[metabase.test :as mt]
'[clojurewerkz.quartzite.scheduler :as qs]
'[clojurewerkz.quartzite.conversion :as qc]
'[clojurewerkz.quartzite.matchers :as quart.match]
'[clojurewerkz.quartzite.jobs :as jobs]
import requests, time, argparse
parser = argparse.ArgumentParser()
parser.add_argument("-n", type=int, default=100)
parser.add_argument("--host", type=str, default='http://localhost:3000', help="HOST")
args = parser.parse_args()
ORDER_QS_ID = None
PEOPLE_QS_ID = None
HOST = args.host
@qnkhuat
qnkhuat / migrate_18_to_24.py
Last active June 15, 2023 10:44
experiement migrating dashboard with grid 18 to 24 and back using excel
import random
import subprocess
from openpyxl import *
from openpyxl.styles import Side, Border, PatternFill
from openpyxl.utils import get_column_letter
# set to true if you dont' want to draw box in forward migration,
# used to set going from 24 -> 18 only
NO_FORWARD = False
@qnkhuat
qnkhuat / reverse_18_to_24.clj
Last active May 29, 2023 07:15
Reverse engineer the mapping logic from 18 to 24
;;; ------------------------- Implementation by Sasha converted to clojure ------------------------- ;;;
(def mapping {0 {:start 0 :end 0}
1 {:start 1 :end 2}
2 {:start 3 :end 3}
3 {:start 4 :end 4}
4 {:start 5 :end 6}
5 {:start 7 :end 7}
6 {:start 8 :end 8}
7 {:start 9 :end 10}
8 {:start 11 :end 11}
@qnkhuat
qnkhuat / 18_to_24.js
Last active May 23, 2023 09:43
Metabase migrate from 18 to 24 logic
const mapping = [
{
start: 0,
end: 0,
},
{
start: 1,
end: 2,
},
{
def log(func_name=""):
def decorator(func):
def wrapper(*args, **kwargs):
func_sig = f"{func_name} | " if func_name else ""
print(f"{func_sig}Args: {args} {kwargs}")
result = func(*args, **kwargs)
print(f"{func_sig}Result: {result}")
return result
return wrapper
return decorator

Here is an example of the query and the expected output of convert-timezone

(mt/with-report-timezone-id "UTC"
  (mt/with-driver :postgres
    (mt/dataset test-data
      (->> (mt/run-mbql-query
             users
             {:expressions {"login_in_HCM"      [:convert-timezone [:field (mt/id :users :last_login) nil] "Asia/Ho_Chi_Minh" "Europe/Rome"]
                            "hour_login_in_HCM" [:get-hour [:expression "login_in_HCM"]]}
              :fields      [[:expression "login_in_HCM"]
@qnkhuat
qnkhuat / mnist_reader.clj
Last active February 2, 2022 04:03
MNIST reader in clojure
;; Data download from: http://yann.lecun.com/exdb/mnist/
(ns cnn.core
(:import java.io.File
java.io.FileInputStream))
(defn u4->int [arr]
;; convert an array of 4 bytes to int
(loop [r 0 i 3 x arr]
(if (= i -1)
r
@qnkhuat
qnkhuat / hieu.py
Last active November 2, 2021 09:29
# install
# pip3 install pandas
# pip3 install xlrd
# pip3 install openpyxl
import pandas as pd
from glob import glob
import argparse
import os
from multiprocessing import Pool, cpu_count
@qnkhuat
qnkhuat / interp.scm
Created October 13, 2021 06:24
This is all you need for an interpreter
; From https://www.youtube.com/watch?v=OyfBQmvr2Hc
(define eval-expr
(lambda (expr env)
(pmatch expr
[,x (guard (symbol? x))
(env x)]
[(lambda (,x) ,body)
(lambda arg)
(eval-expr body (lambda (y)