Skip to content

Instantly share code, notes, and snippets.

View vpalos's full-sized avatar

Valeriu Paloş vpalos

View GitHub Profile
@vpalos
vpalos / Alarms.ts
Last active August 3, 2024 12:03
Code sketch for Broker Alarms
/**
* A Condition represents the logical test which eventually is used to trigger
* an alarm (e.g. "out-of-comm", "temperature-below-freezing" etc.). This is a
* class, because a Condition can have parameters and it has to manage them.
*/
abstract class AlarmCondition {
/**
* It can be in either "Up" state (good scenario) or "Down" state (bad scenario).
* By default (unless the constructor does something else), it starts as "Up".
*/
@vpalos
vpalos / enum-keys.ts
Last active February 25, 2020 06:46
How to use `enum` values as strictly typed object keys in TypeScript.
enum DialogButton {
YES = "yes",
NO = "no",
CANCEL = "cancel"
}
interface IDialog {
buttons: { [B in DialogButton]?: boolean },
callback: (button: DialogButton) => void
}
@vpalos
vpalos / lodash-replacements.js
Created August 10, 2019 04:05
Drop-in replacements for Lodash functions (to avoid having to include the lib in the browser).
export function _get(object, path, fallback) {
const value = path.split(".").reduce((hash, field) => hash && hash[field], object);
return typeof value === "undefined" ? fallback : value;
}
@vpalos
vpalos / font-face-mixin.scss
Last active August 10, 2019 04:03
SCSS mixing for generating @font-face constructs.
@mixin font($family, $file, $weight, $style, $locals) {
$prefix: "http://localhost:3000/fonts";
$src: null;
@each $local in $locals {
$src: append($src, local($local), comma);
}
$src: append($src, url("#{$prefix}/#{$file}.eot?#iefix") format("embedded-opentype"), comma);
$src: append($src, url("#{$prefix}/#{$file}.woff2") format("woff2"), comma);
$src: append($src, url("#{$prefix}/#{$file}.woff") format("woff"), comma);
function Main() {
Iterate {
IdentifyNextThread()
For each Thread {
PullThread()
}
}
}
---
identity:
company: DevFactory
version: 2.0
#
# This document represents an L1 specification which describes in thorough
# technical detail a single Milestone; it can consist of a single file, or
# multiple files, imported via referencing.
#
---
identity:
company: DevFactory
version: 2.0
#
# This document represents an L1 specification which describes in thorough
# technical detail a single Milestone; it can consist of a single file, or
# multiple files, imported via referencing.
#
---
#
# Some pre-defined meta-values provided for this schema (required).
#
identity:
company: DevFactory
version: 2.0
#
# All fields named `comment` simply provide a short explanatory paragraph for
@vpalos
vpalos / get-field.js
Last active December 16, 2015 05:59
Universal field getter for JavaScript objects.
/**
* Universal field getter method for JavaScript objects.
* @param {Object} _path The field path inside `this`.
* @param {...} _default The default value to be returns if field is not found.
* @return {...} Returns the found field value else `_default` else `undefined`.
*/
Object.prototype._ = Object.prototype._ || function(_path, _default) {
var value = _path.split('.').reduce(
function(hash, field) {
return hash && hash[field]
@vpalos
vpalos / filter.js
Last active February 2, 2022 21:27
JS: A simple search function designed for filtering large lists of strings.
/**
* Demo: http://vpalos.com/sandbox/filter.js/
*
* A generic search algorithm designed for filtering (very) large lists of strings; when an input string
* contains all the parts (words or characters; whitespace is ignored) of the query, spread-out over the text
* then the string is considered to be a match. It works with the way internet browsers (e.g. Firefox, Google
* Chrome) filter address-bar suggestions on user input. It is also quite fast; on my i7 laptop, filtering
* 1) a list of ~23000 items takes around 50ms (yes, milliseconds!);
* 2) a list of ~1 million text items took under 1 second.
* It works both in NodeJS as well as in browser environments (so far I only tested FF and GC).