This gist's comment stream is a collection of webdev apps for OS X. Feel free to add links to apps you like, just make sure you add some context to what it does — either from the creator's website or your own thoughts.
— Erik
# Requires the GitHub Copilot CLI from GitHub Next | |
# https://www.npmjs.com/package/@githubnext/github-copilot-cli#installation-and-setup | |
# This needs to be set up as a function in your fish config. You can use `funced -s q` to do this. | |
# Options: | |
# q -g --git: Use github-copilot-cli git-assist | |
# q -h --gh: Use github-copilot-cli gh-assist | |
# Defaults to using what-the-shell (general command assist) if neither option is provided | |
# Completions for your Fish config: |
#! /bin/bash | |
mkdir ./arm64 | |
mkdir ./x86_64 | |
find "./" -name '*.framework' -type d | while read -r FRAMEWORK | |
do | |
echo "Preparing framework: $FRAMEWORK" | |
FRAMEWORK_EXECUTABLE_NAME=$(/usr/libexec/PlistBuddy -c "Print CFBundleExecutable" "$FRAMEWORK/Info.plist") | |
func animation(from notification: Notification) -> Animation? { | |
guard | |
let info = notification.userInfo, | |
let duration = info[UIResponder.keyboardAnimationDurationUserInfoKey] as? Double, | |
let curveValue = info[UIResponder.keyboardAnimationCurveUserInfoKey] as? Int, | |
let uiKitCurve = UIView.AnimationCurve(rawValue: curveValue) | |
else { | |
return nil | |
} |
# Copyright (c) 2020 Eugene Berdnikov | |
# | |
# 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 |
#include <uwsgi.h> | |
static int spinningfifo_hook(char *arg) { | |
int fd; | |
char *space = strchr(arg, ' '); | |
if (!space) { | |
uwsgi_log("invalid hook spinningfifo syntax, must be: <file> <string>\n"); | |
return -1; | |
} | |
*space = 0; |
user www-data; | |
worker_processes 1; | |
pid /var/run/nginx.pid; | |
events { | |
worker_connections 1024; | |
} | |
http { | |
sendfile on; |
var pushRight = slate.operation("push", { | |
"direction": "right", | |
"style": "bar-resize:screenSizeX/2" | |
}); | |
var pushLeft = slate.operation("push", { | |
"direction": "left", | |
"style": "bar-resize:screenSizeX/2" | |
}); |
@import "compass/css3/shared"; | |
// NOTE: | |
// All mixins for the 2009 spec have been written assuming they'll be fed property values that | |
// correspond to the standard spec. Some mixins can be fed values from the 2009 spec, but don't | |
// rely on it. The `legacy-order` mixin will increment the value fed to it because the 2009 | |
// `box-ordinal-group` property begins indexing at 1, while the modern `order` property begins | |
// indexing at 0. | |
// if `true`, the 2009 properties will be emitted as part of the normal mixin call |
function shExpMatch(url, pattern) { | |
var pCharCode; | |
var isAggressive = false; | |
var pIndex; | |
var urlIndex = 0; | |
var lastIndex; | |
var patternLength = pattern.length; | |
var urlLength = url.length; | |
for (pIndex = 0; pIndex < patternLength; pIndex += 1) { | |
pCharCode = pattern.charCodeAt(pIndex); // use charCodeAt for performance, see http://jsperf.com/charat-charcodeat-brackets |