Supabase - ~52K stars
- Designed explicitly as an open source firebase alternative
- Typescript based
- Docker support
Appwrite - ~32K stars
- Written in JavaScript and PHP
- Docker based
- Realtime support across all services
| Permission is hereby granted, free of charge, to any person obtaining a copy | |
| of this software and associated documentation files (the "Software"), to deal | |
| in the Software without restriction, including without limitation the rights | |
| to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | |
| copies of the Software, and to permit persons to whom the Software is | |
| furnished to do so, subject to the following conditions: | |
| The above copyright notice and this permission notice shall be included in | |
| all copies or substantial portions of the Software. |
| // when T is any|unknown, Y is returned, otherwise N | |
| type IsAnyUnknown<T, Y, N> = unknown extends T ? Y : N; | |
| // when T is never, Y is returned, otherwise N | |
| type IsNever<T, Y = true, N = false> = [T] extends [never] ? Y : N; | |
| // when T is a tuple, Y is returned, otherwise N | |
| // valid tuples = [string], [string, boolean], | |
| // invalid tuples = [], string[], (string | number)[] |
| class KeyValueIterator<K,V> { | |
| var map:Map<K,V>; | |
| var keys:Iterator<K>; | |
| static public inline function pairs<K,V>(map:Map<K,V>) return new KeyValueIterator(map); | |
| public inline function new(map:Map<K,V>) { | |
| this.map = map; | |
| this.keys = map.keys(); | |
| } |
| /* | |
| Automatically generate dispatch functions as: | |
| public function onDoubleArguments(one:String, two:Int) { | |
| for (listener in listeners) | |
| listener.onDoubleArguments(one, two); | |
| } | |
| */ | |
| class Example extends Dispatcher<Dynamic> | |
| { |
| package; | |
| import js.Node; | |
| import pony.math.Matrix; | |
| import pony.midi.devices.Launchpad; | |
| import pony.midi.devices.LaunchpadColor; | |
| import pony.text.TextTools; | |
| import pony.time.Timer; | |
| using pony.Tools; |
Please consider using http://lygia.xyz instead of copy/pasting this functions. It expand suport for voronoi, voronoise, fbm, noise, worley, noise, derivatives and much more, through simple file dependencies. Take a look to https://github.com/patriciogonzalezvivo/lygia/tree/main/generative
float rand(float n){return fract(sin(n) * 43758.5453123);}
float noise(float p){
float fl = floor(p);
float fc = fract(p);
New repo: https://github.com/konradit/gopro-linux
| # Sublime package NVM node path configuration | |
| # Save this file in: | |
| # ~/Library/Application\ Support/Sublime\ Text\ 3/Packages/node_env.py | |
| import os | |
| os.environ["PATH"] = "/Users/YOUR_USERNAME/.nvm/v0.10.26/bin:/Users/cranemes/.nvm/v0.10.26/lib:/Users/YOUR_USERNAME/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin" | |
| print("PATH=" + os.environ["PATH"]) |
| # alias to edit commit messages without using rebase interactive | |
| # example: git reword commithash message | |
| reword = "!f() {\n GIT_SEQUENCE_EDITOR=\"sed -i 1s/^pick/reword/\" GIT_EDITOR=\"printf \\\"%s\\n\\\" \\\"$2\\\" >\" git rebase -i \"$1^\";\n git push -f;\n}; f" | |
| # completely wipe git history | |
| wipe-history = "!f() { git add . && git reset --soft $(git rev-list --max-parents=0 HEAD) && git commit --amend -m \"${1:-sup}\" && git push --force; }; f" | |
| # squash the last N commits | |
| squash = "!f(){ git reset --soft HEAD~${1} && git commit --edit -m\"$(git log --format=%B --reverse HEAD..HEAD@{1})\"; };f" |