Skip to content

Instantly share code, notes, and snippets.

View apua's full-sized avatar
💭
Seeking next epic moment

Apua Juan apua

💭
Seeking next epic moment
View GitHub Profile
@apua
apua / cross-origin-proxy.html
Last active April 14, 2023 08:29
Cross origin front-end HTTP API proxy
<script type="module">
window.addEventListener('message', async(event) => {
if (event.origin.match(/jenkins.internal.sifive.com/)) return;
if (! event.origin.match(/^http:\/\/localhost:|internal.sifive.com/)) return;
const path = event.data;
const resp = await fetch(path);
const json_data = await resp.json();
window.parent.postMessage(json_data, event.origin);
});
/*
* The main purpose of code structure is
* (1) to handle different upstream with different strategies, and
* (2) to dispatch groups to build and test
* (3) with common essential information delivered from upstream.
*/
def build_only(kwargs) {
build(job: params.DOWNSTREAM_JOB, propagate: false, wait: false, parameters: [
/* Common parameters */
@apua
apua / __main__.py
Last active March 11, 2023 11:07
A snippet that make Python package integrate argument parsers of its sub packages
# file path: `mod/__main__.py`
import argparse, importlib, inspect, sys
prog = sys.argv[0]
if prog.endswith('__main__.py'):
prog = f'python -m {__package__}'
else:
prog = prog.rsplit('/',1)[-1]
r"""
Ref: https://www.pttweb.cc/bbs/Python/M.1398877470.A.1E7
>>> data = list(range(22)); seglen = 4
>>> list(map(lambda E,T=[0]:T.__setitem__(0,E[1]+(E[0]%seglen and T[0])) or T[0], enumerate(data)))
[0, 1, 3, 6, 4, 9, 15, 22, 8, 17, 27, 38, 12, 25, 39, 54, 16, 33, 51, 70, 20, 41]
>>> x = []
>>> for i, v in enumerate(data):
... x.append(v+x[i-1] if i%seglen!=0 else v)
...
r"""
>>> cases = [
... ('', ''), (' ', ''),
... ('11 111 010 000 0', 'MORSE'),
... ('11111 01111 00111 00011 00001', '01234'),
... ('00000 10000 11000 11100 11110', '56789'),
... ]
...
>>> for stream, result in cases:
... assert ''.join(decode_stream(stream)) == result
"""
file: /tmp/qwer.py
>>> @ensure_paths_exist
... def a(p: Path, *a, pp: Path): pass
...
>>> a('/tmp/qwer', pp='/tmp/qwer.py')
>>> a('/tmp/qwer.py', 1,2, pp='/tmp/qwer')
Traceback (most recent call last):
...
@apua
apua / Jenkinsfile.template.groovy
Last active May 6, 2023 02:16
Jenkinsfile Template
pipeline {
agent any
stages {
stage('Fixed Parallel') { failFast true; parallel {
stage('para1') { steps { echo '' /* sh 'exit 1' //build 14 */ } }
stage('Para2') {
stages {
stage('p-2-1') { steps { echo '' } }
stage('p-2-2') { steps { echo '' } }
@apua
apua / proxy.pac
Last active December 2, 2023 07:22
function FindProxyForURL(url, host) {
if (dnsDomainIs(host, "internal.sifive.com")) {
return "SOCKS localhost:5566";
}
//return "DIRECT";
}
@apua
apua / error_string.c
Created February 4, 2022 15:30
error strings
// #include <string.h>
// for (int i=0; i<128; i++) printf("%d-%s\n", i, strerror(i));
1-Operation not permitted
2-No such file or directory
3-No such process
4-Interrupted system call
5-Input/output error
6-Device not configured
7-Argument list too long
8-Exec format error
"""
>>> gen(10)
[0, [1, [2, [3, [4, [5, [6, [7, [8, [9, []]]]]]]]]]]
>>> rev_by_recur(gen(10))
[9, [8, [7, [6, [5, [4, [3, [2, [1, [0, []]]]]]]]]]]
>>> rev_by_loop(gen(10))
[9, [8, [7, [6, [5, [4, [3, [2, [1, [0, []]]]]]]]]]]
"""
def gen(n):