Skip to content

Instantly share code, notes, and snippets.

View jackhftang's full-sized avatar

Jack Tang jackhftang

View GitHub Profile
@jackhftang
jackhftang / register.php
Last active February 16, 2019 09:16
The infamous php if hell refactoring
<?php
function register()
{
if (empty($_POST)) {
return register_form();
}
if (($msg = validate($_POST)) !== null) {
$_SESSION['msg'] = $msg;
There is a colony of 8 cells arranged in a straight line where each day every cell competes with its adjacent cells(neighbour). Each day, for each cell, if its neighbours are both active or both inactive, the cell becomes inactive the next day,. otherwise itbecomes active the next day.
Assumptions: The two cells on the ends have single adjacent cell, so the other adjacent cell can be assumsed to be always inactive. Even after updating the cell state. consider its pervious state for updating the state of other cells. Update the cell informationof allcells simultaneously.
Write a fuction cellCompete which takes takes one 8 element array of integers cells representing the current state of 8 cells and one integer days representing te number of days to simulate. An integer value of 1 represents an active cell and value of 0 represents an inactive cell.
@jackhftang
jackhftang / tweetnacl.c
Last active February 8, 2019 02:21
A memory-reduced version of scalarmult(), marginally be able to run on arduino uno (2K bytes memroy). Original [tweetnacl](https://tweetnacl.cr.yp.to/20140427/tweetnacl.c)
#define FOR(i, n) for (i = 0;i < n;++i)
#define sv static void
typedef unsigned char u8;
typedef unsigned long u32;
typedef unsigned long long u64;
typedef long long i64;
typedef i64 gf[16]; // 1024-bit = 128 bytes
static const gf _121665 = {0xDB41, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
@jackhftang
jackhftang / lamport_timestamp.js
Last active January 20, 2019 04:37
Verification on causuality provided by Lamport timestamp
const cluster = require('cluster')
const N = 8
if(cluster.isMaster){
let workers = {}
let globals = []
for(let i=0; i<N; i++) workers[i] = cluster.fork({id: i});
cluster.on('message', (worker, {message, timestamp, to}) => {
globals.push({timestamp, message})
globals.sort(function(x,y){
const cluster = require('cluster');
const minions = ['alpha', 'beta'];
const tHeartBeat = 1000
const tCheck = 1000
const tTimeout = 3000
if (cluster.isMaster) {
for (let id of minions) cluster.fork({id});
let lastHeartbeat = {}

Keybase proof

I hereby claim:

  • I am jackhftang on github.
  • I am jackhftang (https://keybase.io/jackhftang) on keybase.
  • I have a public key whose fingerprint is 8C74 60F5 FC28 D7A2 89CA 10E0 02FE BC30 FFA2 E954

To claim this, I am signing this object:

@jackhftang
jackhftang / merge_sort.py
Last active April 5, 2018 14:24
parallel merge sort using fork, wait and shared array.
#!/usr/bin/env python3
from multiprocessing import Array
from os import fork, wait, _exit
from random import randint
def merge_sort(type, arr):
N = len(arr)
# create shared array
lis = {1, 2, 3, 4};
all = Flatten[
Outer[ List,
lis, lis, lis, lis, lis,
lis, lis, lis, lis, lis
], 9
];
q2[l_] :=
l[[2]] == 1 && l[[5]] == 3 ||
@jackhftang
jackhftang / tag_count.sql
Last active October 3, 2017 09:21
mysql procedure for counting comma delimited varchar
-- base table
CREATE TABLE IF NOT EXISTS tags (
id INT PRIMARY KEY AUTO_INCREMENT,
tags VARCHAR(128)
);
-- prepare data
INSERT INTO tags(tags) VALUES (",3,47,1,5,"), ("1,2,3"), (",4,5,6,7"), ("3,4,6,");
-- create procedure
@jackhftang
jackhftang / todo.html
Created September 29, 2017 17:21
A taste of rxjs + d3
<div>
<ul class="list"></ul>
Item: <input type="text" class="input_todo"/>
<button class="btn_push">Push</button>
<button class="btn_pop">Pop Last</button>
<br>
<span class="msg"></span>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/5.4.3/Rx.min.js"></script>