Skip to content

Instantly share code, notes, and snippets.

View bitsmanent's full-sized avatar

Claudio Alessi bitsmanent

  • Italy
View GitHub Profile
@bitsmanent
bitsmanent / mkview.js
Last active January 25, 2018 16:22
Build a view from a template and a data set. Replace %{key} with the corresponding value.
function mkview(tpl, d) {
var ret = tpl, re, k;
for(k in d) {
re = new RegExp("%{"+k+"}", "g");
ret = ret.replace(re , d[k]);
}
return ret;
}
@bitsmanent
bitsmanent / strgeo
Last active October 17, 2015 10:07
Take a string representing a location and returns a formatted political name and coordinates
function strgeo($target) {
$str = rawurlencode($target);
$uri = "http://maps.googleapis.com/maps/api/geocode/json?address=${target}&sensor=true";
$d = json_decode(file_get_contents($uri), 1);
$d = (@$d['results'][0]);
if(!$d)
return NULL;
return [
'targetf' => $d['formatted_address'],
'coords' => $d['geometry']['location'],
@bitsmanent
bitsmanent / mysql_exec.c
Last active September 16, 2016 09:50
Run a parametrized MySQL query (printf()-like).
MYSQL_RES *
mysql_exec(const char *sqlstr, ...) {
MYSQL_RES *res;
va_list ap;
char *sql;
int sqlen;
va_start(ap, sqlstr);
sqlen = vasprintf(&sql, sqlstr, ap);
va_end(ap);
@bitsmanent
bitsmanent / deepset.js
Last active September 24, 2016 09:02
Build a hierarchic object. Used in collects().
function deepset(obj, hier, val, _i) {
var k;
if(!_i)
_i = 0;
k = hier[_i];
if(!hier[_i + 1]) {
if(obj[k] !== undefined) {
if(typeof obj[k] == "string")
obj[k] = [obj[k]];
@bitsmanent
bitsmanent / onoff.js
Last active October 10, 2016 17:37
(Un)Install event handlers - Provides on() and off() functions. WIP
var eventsmap = [];
function on(elems, evnm, callback) {
var i, len, uuid;
if(elems.length == undefined)
elems = [elems];
len = elems.length;
if(!len)
return;
@bitsmanent
bitsmanent / extend.js
Created October 2, 2016 19:40
Merge two JavaScript objects
function extend(dst, src) {
var k;
for(k in src)
dst[k] = src[k];
}
@bitsmanent
bitsmanent / trigger.js
Last active October 10, 2016 17:32
Trig a JavaScript event
function trigger(elems, evnm, data) {
var ev, i, len;
if(typeof elems == 'object' && elems.length == undefined)
elems = [elems];
len = elems.length;
if(!len)
return;
ev = new CustomEvent(evnm, {detail:data});
for(i = 0; i < len; ++i)
@bitsmanent
bitsmanent / append.js
Created October 9, 2016 11:01
Append a node inside another taking care of scripts.
function append(where, what) {
var i, len, scripts, script, p, att;
where.appendChild(what);
scripts = $("script", what);
len = scripts.length;
for(i = 0; i < len; ++i) {
script = document.createElement("script");
script.innerHTML = scripts[i].innerHTML;
for(att in scripts[i].atts)
@bitsmanent
bitsmanent / strftime.js
Last active December 3, 2018 13:29
JavaScript strftime() implementation
function pad(s, len, c, pr) {
var rest;
/* prevent arithmetic issues */
s = s.toString();
c = c.toString();
rest = len - s.length;
if(rest <= 0)
return s;
[...Array(rest)].forEach(() => s=pr ? s+c : c+s);
@bitsmanent
bitsmanent / sleepu.c
Created May 3, 2017 18:03
POSIX compliant replacement for usleep(2)
int
sleepu(double usec) {
struct timespec req, rem;
int r;
req.tv_sec = 0;
req.tv_nsec = usec * 1000;
while((r = nanosleep(&req, &rem)) == -1 && errno == EINTR)
req = rem;
return r;