Skip to content

Instantly share code, notes, and snippets.

@boronine
boronine / sentry2csvUA.py
Created Jun 17, 2020
Original: https://github.com/sparkmeter/sentry2csv (modified for User-Agent extraction)
View sentry2csvUA.py
#!/usr/bin/env python3
"""Export a Sentry project's issues to CSV."""
import argparse
import asyncio
import csv
import logging
import sys
from typing import Any, Dict, List, Optional, Tuple, Union
@boronine
boronine / shebang.py
Last active Feb 22, 2018
Test maximum shebang length
View shebang.py
import os
import stat
import tempfile
import subprocess
shebang_prefix = '#!/usr/bin/env DUMMY=x'
shebang_suffix = ' python\n'
shebang_length_min = len(shebang_prefix) + len(shebang_suffix)
TEST_FILE_HANDLE, TEST_FILE = tempfile.mkstemp('.py')
@boronine
boronine / edn-vs-json.cljs
Created May 15, 2015
EDN vs JSON parsing speed
View edn-vs-json.cljs
; lein new mies-node edn-vs-json
; vim edn-vs-json/src/edn_vs_json/core.cljs
; lein cljs build once
; node run.js
(ns edn-vs-json.core
(:require
[cljs.nodejs :as nodejs]
[cljs.reader :as reader]
[clojure.string :as string]))
@boronine
boronine / generate-avatar.py
Created Aug 17, 2014
Colorful display pic with HUSL
View generate-avatar.py
import math
import png
from husl import *
def mix(h1, h2, t):
return h1 * t + h2 * (1 - t)
def spiral(radius, degree, number):
n = 1.0 / number
View gist:5433006
// Asynchronous coding takes a bit of time to wrap your head around.
// I can't know for sure, but I think you misunderstand the general
// nature of a callback function. 'ajax.post' doesn't wait for the
// request to complete before returning, if it did so, there wouldn't
// be any need for a callback. **If you want something to happen AFTER
// the request completes, you have to put it in the callback function.**
// Don't think of a callback as some kind of icing on the cake, it is
// literally the continuation of your program's logic.
View persona.coffee
app.post '/api/verify', (req, res) ->
fail = ->
res.json status: 'failure'
if not req.body?
fail()
opts = {
host: "https://verifier.login.persona.org"
path: "/verify"
method: 'POST'
regectUnauthorized: true
View workaround.py
class MyResource(ModelResource):
# Workaround for this issue:
# https://github.com/toastdriven/django-tastypie/issues/518
def hydrate(self, bundle):
for field_name, field_obj in self.fields.items():
if field_name == 'resource_uri':
continue
if not field_obj.blank and not bundle.data.has_key(field_name):
raise ApiFieldError("The '%s' field has no data and doesn't allow a default or null value." % field_name)
return bundle
View model_resource.py
class CompanyResource(ModelResource):
class Meta:
resource_name = 'companies'
api_name = 'v1'
detail_uri_name = 'domain'
queryset = Company.objects.all()
def prepend_urls(self):
return [
url(r"^(?P<resource_name>%s)/(?P<domain>[\w\d_.-]+)/$" %
self._meta.resource_name,
View max_chroma.coffee
# For a given Lightness, Hue, RGB channel, and limit (1 or 0),
# return Chroma, such that passing this chroma value will cause the
# given channel to pass the given limit.
maxChroma = (L, H) ->
hrad = H / 360 * 2 * Math.PI
sinH = Math.sin hrad
cosH = Math.cos hrad
sub1 = Math.pow(L + 16, 3) / 1560896
sub2 = if sub1 > 0.008856 then sub1 else L / 903.3
(channel) ->
@boronine
boronine / livefilter.js
Created Sep 25, 2012
Backbone collection live filtering (untested)
View livefilter.js
Backbone.Collection.prototype.liveFilter = function(attributes) {
// Make a clone of the collection instantiated with all the filtered items
var _org = this;
var _new = new this.constructor(this.where(attributes));
// What happens when you add to the original collection?
_org.on('add', function(model) {
// Unless one of the attributes doesn't match
for (key in attributes) {
if (model.get(key) !== attributes[key]) return;
}
You can’t perform that action at this time.