Skip to content

Instantly share code, notes, and snippets.

🦄
I currently have a lot of PRs to review. I promise I'll get to yours eventually.

Sindre Sorhus sindresorhus

🦄
I currently have a lot of PRs to review. I promise I'll get to yours eventually.
Block or report user

Report or block sindresorhus

Hide content and notifications from this user.

Learn more about blocking users

Contact Support about this user’s behavior.

Learn more about reporting abuse

Report abuse
View GitHub Profile
@sindresorhus
sindresorhus / NativeButton.swift
Created Oct 11, 2019
Example of using NSButton in SwiftUI to access missing features like `keyEquivalent` (for example, to make the button the default and highlighted). Stack Overflow answer: https://stackoverflow.com/a/58337529/64949
View NativeButton.swift
/**
```
struct ContentView: View {
var body: some View {
NativeButton("Submit", keyEquivalent: .return) {
// Some action
}
.padding()
}
}
@sindresorhus
sindresorhus / ShowForAppRuns.swift
Created Oct 10, 2019
SwiftUI modifier to show a view only a given amount of app runs.
View ShowForAppRuns.swift
// Depends on https://github.com/sindresorhus/Defaults
@available(macOS 10.15, *)
private struct ShowForAppRuns: ViewModifier {
private static var runCounts = [String: Int]()
private let count: Int
private let startShowingFromAppRun: Int
private let runCount: Int
init(count: Int, id: String, startShowingFromAppRun: Int = 1) {
View puppeteer-with-adblock.js
'use strict';
const puppeteer = require('puppeteer');
(async () => {
/* PRECONDITION:
0. download ublock, I used https://github.com/gorhill/uBlock/releases/download/1.14.19b5/uBlock0.chromium.zip
1. run $PATH_TO_CHROME --user-data-dir=/some/empty/directory --load-extension=/location/of/ublock
2. enable block lists you want to use
*/
@sindresorhus
sindresorhus / libdispatch-efficiency-tips.md
Created Feb 1, 2019 — forked from tclementdev/libdispatch-efficiency-tips.md
Making efficient use of the libdispatch (GCD)
View libdispatch-efficiency-tips.md

libdispatch efficiency tips

I suspect most developers are using the libdispatch inefficiently due to the way it was presented to us at the time it was introduced and for many years after that, and due to the confusing documentation and API. I realized this after reading the 'concurrency' discussion on the swift-evolution mailing-list, in particular the messages from Pierre Habouzit (who is the libdispatch maintainer at Apple) are quite enlightening (and you can also find many tweets from him on the subject).

My take-aways are:

  • You should have very few queues that target the global pool. If all these queues are active at once, you will get as many threads running. These queues should be seen as execution contexts in the program (gui, storage, background work, ...) that benefit from executing in parallel.
View keybase.md

Keybase proof

I hereby claim:

  • I am sindresorhus on github.
  • I am sindresorhus (https://keybase.io/sindresorhus) on keybase.
  • I have a public key whose fingerprint is 9167 E91F 3DA4 65D0 020A 48B3 5A35 FFDB 8B07 983A

To claim this, I am signing this object:

View EmptyInitializable.swift
/// Types that can be initialized without any parameters
protocol EmptyInitializable {
init()
}
extension Int: EmptyInitializable {}
extension Int8: EmptyInitializable {}
extension Int16: EmptyInitializable {}
extension Int32: EmptyInitializable {}
extension Int64: EmptyInitializable {}
@sindresorhus
sindresorhus / dividable.swift
Created Oct 17, 2017 — forked from moiseev/dividable.swift
If you really really miss the `/` from `Numeric`...
View dividable.swift
public protocol Dividable {
static func / (lhs: Self, rhs: Self) -> Self
}
extension Int : Dividable {}
extension Double : Dividable {}
extension Sequence where Element : Numeric & Dividable {
func average() -> Element {
var i: Element = 0
@sindresorhus
sindresorhus / average.swift
Last active Oct 17, 2017 — forked from fcanas/average.swift
Abstracted average function in Swift
View average.swift
extension Sequence where Element: ExpressibleByIntegerLiteral {
private func abstractAverage<T>(sum: (T, T) -> T, div: (T, T) -> T) -> T where Element == T {
var i: T = 0
var total: T = 0
for value in self {
total = sum(total, value)
i = sum(i, 1)
}
You can’t perform that action at this time.