Releases
This is a list of changes implemented with this version. Some are internal and others are part of the skulpt API (if we had one 🙂 ).
**python 2 incorrectness: (for those still using python 2 in production)**
- `long`
- when adding two long objects the result is likely to be an `int`
- `method`
- unbound methods are no longer supported
- The `base` class for all type objects will be `object` even if the base class is not specified
**skulpt api**
- `Sk.builtin.object.prototype.genericGetAttr` -> `Sk.generic.getAttr`
- `Sk.builtin.object.prototype.genericSetAttr` -> `Sk.generic.setAttr`
- `Sk.builtin.type.typeLookup` removed and replaced by `Sk.abstr.typeLookup`
- `biginter.js` replaced by the [jsbi](https://github.com/GoogleChromeLabs/jsbi) library
- `Sk.abstr.inherits` removed - inheritance exclusively dealt with by `Sk.abstr.setUpInheritance`
- `Sk.misceval.objectRepr` returns a js string (previously `Sk.builtin.str`)
- `Sk.__future__.python3` becomes the default. Those wishing to use `python2` must define this in the `Sk.configure` object.
- `Sk.abstr.binary_op_`, `Sk.abstr.binary_iop_`, `Sk.abstr.unary_op_` removed - use `Sk.abstr.numberBinOp`, `Sk.abstr.numberInplaceBinOp`, `Sk.abstr.numberUnaryOp` instead.
**call signatures of builtins**
- `new` is required for (almost) all builtin types
- 3 exceptions - `Sk.builtin.bool`, `Sk.builtin.none`, `Sk.builtin.NotImplemented`
- These 3 will always return their respective constant(s) and are thus not required to be used as constructors.
- Restricted parameters for directly accessing a constructor of an `Sk.builtin` type
- assertion failures raised in dev mode if `new` is not used - if using in production these error will not be raised. This may be a gotcha for anyone using this version.
| type | params | notes |
|---|---|---|
| `Sk.builtin.int_` | `number, JSBI (bigint), string, undefined}` | can also be called with a python object that has `nb$int` defined |
| `Sk.builtin.float_` | `number, undefined` | can also be called with a python object that has `nb$float` defined |
| `Sk.builtin.complex` | `number, number` | |
| `Sk.builtin.list` | `{Array=}` | Array of py objects or can be called with a python iterable|
| `Sk.builtin.tuple` | `{Array=}` | Array of py objects can be called with a python iterable|
| `Sk.builtin.set` | `{Array=}` | Array of py objects or can be called with a python iterable|
| `Sk.builtin.dict` | `{Array=}` | key/value pairs - only python objects |
| `Sk.builtin.str` | `{*}` | |
| `Sk.builtin.bool` | `{*}` | |
Note that you should only pass a number to the `int` javascript constructor if it's absolute value is less than `Number.MAX_SAFE_INTEGER`. Similarly you should only pass a `JSBI (bigint)` to the int constructor if it's absolute value is larger than `Number.MAX_SAFE_INTEGER`.
**Major changes**
- All type objects are now callable using their respective `tp$call` methods inherited from `Sk.builtin.type`
- All native type objects will require a `tp$new` and `tp$init` method (maybe inherited by `Sk.builtin.object`)
- All type objects are javascript instances of `Sk.builtin.type`
- All single inherited objects follow javascript inheritance
- All native type objects now have the following and replaces the use of `Sk.builtin.func` for all dunder function/methods.
- `wrapper_descriptors` aka `slot_wrappers`
- `method_descriptors`
- `classmethod_descriptors`
- `getset_descriptors` aka `attributes`/`member_descriptors`
- `Sk.builtin.sk_method` is an alternative to `Sk.builtin.func` and is used by the above `descriptor` types
- mangled names are never passed to the user but instead are an attribute on `Sk.builtin.str` instances as `$mangled`
- `mappingproxy` added
- `$d` removed on all type objects.
- `attributes` of a type object now only appear on the `prototype`. Previously these appeared on both the `type` object and the `prototype`
**Additions**
- `dict`, `set`, `tuple` are suspendible
- `map`, `filter`, `zip`, `reversed`, `enumerate` are suspendible
- `classmethod`, `property`, `staticmethod` have native skulpt implementations
- `super` can now be unbound [see this explanation](https://stackoverflow.com/questions/30190185/how-can-i-use-super-with-one-argument-in-python/30190341#30190341)
- `Sk.builtin.func` objects gain a `qualname` in compile code
- API for building native types
- `Sk.abstr.buildNativeClass`
- `range_iterator` class added
- `reverse` iterators added for `list`, `dict_views`, `range`
- `|` operator valid for `dict`, `dict_keys`, `dict_items`
- `Counter` has number slots added
- python docstrings now work
**`Sk.abstr.`**
- `objectHash`
- `buildNativeClass`
- `buildIteratorClass`
- `setUpBuiltinMro`
- `setUpMethods`
- `setUpGetSets`
- `setUpSlots`
- `setUpClassMethod`
- `setUpBaseInheritance`
- `setUpModuleMethod`
- `checkNoKwargs`
- `checkNoArgs`
- `checkOneArg`
- `checkArgsLen`
- `copyKeywordsToNamedArgs`
**`Sk.generic.`**
- `getAttr`
- `setAttr`
- `new`
- `newMethodDef`
- `iterNextWithArray`
- `iterNextWithArrayCheckSize`
- `iterLengthHintWithArrayMethodDef`
- `iterReverseLengthHintMethodDef`
- `getSetDict`
**`Sk.misceval.`**
- `asIndex` - will return the internal representation of the integer - or undefined if not indexable - could be a number or a bigint (JSBI)
- `asIndexOrThrow` - does `asIndex` but throws an error if the number is not indexable - with an optional message parameter.
- `asIndexSized` - throws an error if the object is not indexable, returns a Number always, Option to throw an error if the index is larger than `Number.MAX_SAFE_INTEGER`. This is the goto method for most builtins now.
- `Iterator` - a python class that easily wraps an iterator
- `arrayFromIterable` - optional canSuspend implementation that returns an array from a python iterator
- `iterArray` - like `iterFor` but with an array rather than a python iterator
**`slotdefs.js`**
- contains all the information about mapping slots to dunders and vice versa.
**slot changes**
*only relevant for those developers and those writing slot functions directly - hopefully very few users*
- `mp$length` replaced by `sq$length` in the codebase
- `sq$ass_item`/`sq$ass_slice` replaced with `mp$ass_subscript`
- `nb$nonzero` replaced with `nb$bool` and switch version to py2/py3 takes care of mapping the appropriate dunder method.
- `mp$del_subscript` replaced by `mp$ass_subscript` (as per Cpython)
- deleting vs setting an item is based on the call signature
- `mp$ass_subscript(key, value)` -> set item
- `mp$ass_subscript(key)` -> delete item
- If a dunder func is defined on a user defined class then the slot function is guaranteed.
- e.g. `__len__` defined guarantees `sq$length`.
- A slot function defined by skulpt in this way throws the appropriate errors and converts the return value to the appropriate internal object.
- `sq$length` called internally: `__len__` is called using `Sk.misceval.callsim(OrSuspend)Array`.
- The result is checked to be an `int` and then converted to `number` since `sq$length` expects a `number`.
- `tp$str` removed from some builtins as per Python 3.8 changes
- If `tp$richcompare` is defined - wrapper functions `ob$eq` etc are created - this way `Sk.misceval.richCompareBool` need only check for the existence of an `ob$*` slot.
- in fact - the existence of these slots is guaranteed since they are inherited from `Sk.builtin.object`
- `tp$mro`/`tp$bases` are Js Arrays rather than `Sk.builtin.tuple`
- `tp$str` and `$r` for errors were changed as per Cpython.
- `nb$int_` -> `nb$int`
- `nb$lng` -> `nb$long`
- `nb$float_` -> `nb$float`
- return values for certain slot functions have changed
- `tp$hash` - should return a javascript number less than `Number.MAX_SAFE_INTEGER` can be postive or negative
- `nb$index` - should return a javascript number or BigInt (older browsers should be a JSBI BigInt)
- `tp$name` was removed from instances of `Sk.builtin.func` and `Sk.buitin.method` in favour of `$name` since it's `tp$name` should be the `type name`
**flags - only relevant internally**
- `sk$acceptable_as_base_class` used for some type objects
- `sk$object` every skulpt object will have this flag. An easy way to determine if you have a skulpt object or a javascript object
- `hp$type` all instance of `sk$klass` types
- `sk$prototypical` do we need to walk up the MRO or can we just check the `prototype`
- `sk$builtinBase` the most derived base which is a native skulpt class
- `sk$baseClass` builtin classes that are direct children of `object`
**other internal changes**
- the use of `numPromoteFunc` was removed for performance improvements in the implementation of `Sk.asbtr.numberBinOp`
- It was performance beneficial to leave the promoting to the respective `nb$` slots
- `int` binop slots only deal with instance of `int`
- `float` binop slots deal with instances of `float` and `int`
- `complex` binop slots deal with instances of `complex`, `float` and `int`
- since `long` was effectively removed when a number is larger than `Number.MAX_SAFE_INTEGER` it's `.v` value is a `BigInt`. if `BigInt` is not available in the browser then the `JSBI` library is used to replicate `BigInt` functionality.
- `set` and `frozenset` now share much of their implementation
- `collections` module rewritten using new api
- `itertools` module rewritten using new api - these are now type objects rather than instances of `generator`
- `operator` module rewritten using new api
- `math` module adapted to the new api
- `dict` and `set` throw errors if the objects change size during iteration as per Cpython.
- fully tested
- `Sk.builtin.check*` moved to `src/check.js`
- `number.js` removed
- `numtype.js` removed
- `seqtype.js` removed
- `mp$subscript` should *not* be called by a js object (see changes in `random.js`)
- `quick$lookup` added to `dict.prototype` which is a fast way to lookup up `str` keys
- `dict.prototype.entries` rather than has values that are `arrays` of key value pairs
- `object.prototype.tp$hash` will no longer add `$savedHash_` to the object - instead it uses a javascript map and assigns objects to a random number less than `Number.MAX_SAFE_INTEGER` rather than incrementing the hash value each time.
- `float.prototype.tp$hash` for integers this will be the same value as `Sk.builtin.int.prototype.tp$hash` for non integers this will be a random number less than `Number.MAX_SAFE_INTEGER`. Previously this was the number rounded down - but this creates a lot of collisions.
This latest release contains a lot of goodness.
- You can now inherit from builtin types including Exceptions!
- Major cleanup of numeric types
- Bug fixes for iteration when using subclasses with our without `__getitem__`
- Bug fixes and more completeness to lookups of dunder methods
- complex type is added
- brun command added to skulpt for easy access to in-browser debug
- Many Many minor bug fixes.
{
"api_url": "https://api.github.com",
"archived": false,
"baseurl": "",
"build_revision": "ac35c354ac53626818a976ec23f29b3212f2736e",
"clone_url": "https://github.com/skulpt/skulpt.git",
"contributors": [
{
"login": "s-cork",
"id": 36813890,
"node_id": "MDQ6VXNlcjM2ODEzODkw",
"avatar_url": "https://avatars.githubusercontent.com/u/36813890?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/s-cork",
"html_url": "https://github.com/s-cork",
"followers_url": "https://api.github.com/users/s-cork/followers",
"following_url": "https://api.github.com/users/s-cork/following{/other_user}",
"gists_url": "https://api.github.com/users/s-cork/gists{/gist_id}",
"starred_url": "https://api.github.com/users/s-cork/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/s-cork/subscriptions",
"organizations_url": "https://api.github.com/users/s-cork/orgs",
"repos_url": "https://api.github.com/users/s-cork/repos",
"events_url": "https://api.github.com/users/s-cork/events{/privacy}",
"received_events_url": "https://api.github.com/users/s-cork/received_events",
"type": "User",
"site_admin": false,
"contributions": 1076
},
{
"login": "bnmnetp",
"id": 51115,
"node_id": "MDQ6VXNlcjUxMTE1",
"avatar_url": "https://avatars.githubusercontent.com/u/51115?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/bnmnetp",
"html_url": "https://github.com/bnmnetp",
"followers_url": "https://api.github.com/users/bnmnetp/followers",
"following_url": "https://api.github.com/users/bnmnetp/following{/other_user}",
"gists_url": "https://api.github.com/users/bnmnetp/gists{/gist_id}",
"starred_url": "https://api.github.com/users/bnmnetp/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/bnmnetp/subscriptions",
"organizations_url": "https://api.github.com/users/bnmnetp/orgs",
"repos_url": "https://api.github.com/users/bnmnetp/repos",
"events_url": "https://api.github.com/users/bnmnetp/events{/privacy}",
"received_events_url": "https://api.github.com/users/bnmnetp/received_events",
"type": "User",
"site_admin": false,
"contributions": 801
},
{
"login": "rixner",
"id": 1915454,
"node_id": "MDQ6VXNlcjE5MTU0NTQ=",
"avatar_url": "https://avatars.githubusercontent.com/u/1915454?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/rixner",
"html_url": "https://github.com/rixner",
"followers_url": "https://api.github.com/users/rixner/followers",
"following_url": "https://api.github.com/users/rixner/following{/other_user}",
"gists_url": "https://api.github.com/users/rixner/gists{/gist_id}",
"starred_url": "https://api.github.com/users/rixner/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/rixner/subscriptions",
"organizations_url": "https://api.github.com/users/rixner/orgs",
"repos_url": "https://api.github.com/users/rixner/repos",
"events_url": "https://api.github.com/users/rixner/events{/privacy}",
"received_events_url": "https://api.github.com/users/rixner/received_events",
"type": "User",
"site_admin": false,
"contributions": 523
},
{
"login": "albertjan",
"id": 301791,
"node_id": "MDQ6VXNlcjMwMTc5MQ==",
"avatar_url": "https://avatars.githubusercontent.com/u/301791?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/albertjan",
"html_url": "https://github.com/albertjan",
"followers_url": "https://api.github.com/users/albertjan/followers",
"following_url": "https://api.github.com/users/albertjan/following{/other_user}",
"gists_url": "https://api.github.com/users/albertjan/gists{/gist_id}",
"starred_url": "https://api.github.com/users/albertjan/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/albertjan/subscriptions",
"organizations_url": "https://api.github.com/users/albertjan/orgs",
"repos_url": "https://api.github.com/users/albertjan/repos",
"events_url": "https://api.github.com/users/albertjan/events{/privacy}",
"received_events_url": "https://api.github.com/users/albertjan/received_events",
"type": "User",
"site_admin": false,
"contributions": 433
},
{
"login": "meredydd",
"id": 126110,
"node_id": "MDQ6VXNlcjEyNjExMA==",
"avatar_url": "https://avatars.githubusercontent.com/u/126110?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/meredydd",
"html_url": "https://github.com/meredydd",
"followers_url": "https://api.github.com/users/meredydd/followers",
"following_url": "https://api.github.com/users/meredydd/following{/other_user}",
"gists_url": "https://api.github.com/users/meredydd/gists{/gist_id}",
"starred_url": "https://api.github.com/users/meredydd/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/meredydd/subscriptions",
"organizations_url": "https://api.github.com/users/meredydd/orgs",
"repos_url": "https://api.github.com/users/meredydd/repos",
"events_url": "https://api.github.com/users/meredydd/events{/privacy}",
"received_events_url": "https://api.github.com/users/meredydd/received_events",
"type": "User",
"site_admin": false,
"contributions": 277
},
{
"login": "mariechatfield",
"id": 4974085,
"node_id": "MDQ6VXNlcjQ5NzQwODU=",
"avatar_url": "https://avatars.githubusercontent.com/u/4974085?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/mariechatfield",
"html_url": "https://github.com/mariechatfield",
"followers_url": "https://api.github.com/users/mariechatfield/followers",
"following_url": "https://api.github.com/users/mariechatfield/following{/other_user}",
"gists_url": "https://api.github.com/users/mariechatfield/gists{/gist_id}",
"starred_url": "https://api.github.com/users/mariechatfield/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/mariechatfield/subscriptions",
"organizations_url": "https://api.github.com/users/mariechatfield/orgs",
"repos_url": "https://api.github.com/users/mariechatfield/repos",
"events_url": "https://api.github.com/users/mariechatfield/events{/privacy}",
"received_events_url": "https://api.github.com/users/mariechatfield/received_events",
"type": "User",
"site_admin": false,
"contributions": 242
},
{
"login": "alexwenbj",
"id": 12047524,
"node_id": "MDQ6VXNlcjEyMDQ3NTI0",
"avatar_url": "https://avatars.githubusercontent.com/u/12047524?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/alexwenbj",
"html_url": "https://github.com/alexwenbj",
"followers_url": "https://api.github.com/users/alexwenbj/followers",
"following_url": "https://api.github.com/users/alexwenbj/following{/other_user}",
"gists_url": "https://api.github.com/users/alexwenbj/gists{/gist_id}",
"starred_url": "https://api.github.com/users/alexwenbj/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/alexwenbj/subscriptions",
"organizations_url": "https://api.github.com/users/alexwenbj/orgs",
"repos_url": "https://api.github.com/users/alexwenbj/repos",
"events_url": "https://api.github.com/users/alexwenbj/events{/privacy}",
"received_events_url": "https://api.github.com/users/alexwenbj/received_events",
"type": "User",
"site_admin": false,
"contributions": 98
},
{
"login": "bzwheeler",
"id": 1641097,
"node_id": "MDQ6VXNlcjE2NDEwOTc=",
"avatar_url": "https://avatars.githubusercontent.com/u/1641097?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/bzwheeler",
"html_url": "https://github.com/bzwheeler",
"followers_url": "https://api.github.com/users/bzwheeler/followers",
"following_url": "https://api.github.com/users/bzwheeler/following{/other_user}",
"gists_url": "https://api.github.com/users/bzwheeler/gists{/gist_id}",
"starred_url": "https://api.github.com/users/bzwheeler/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/bzwheeler/subscriptions",
"organizations_url": "https://api.github.com/users/bzwheeler/orgs",
"repos_url": "https://api.github.com/users/bzwheeler/repos",
"events_url": "https://api.github.com/users/bzwheeler/events{/privacy}",
"received_events_url": "https://api.github.com/users/bzwheeler/received_events",
"type": "User",
"site_admin": false,
"contributions": 98
},
{
"login": "graceynichols",
"id": 54552569,
"node_id": "MDQ6VXNlcjU0NTUyNTY5",
"avatar_url": "https://avatars.githubusercontent.com/u/54552569?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/graceynichols",
"html_url": "https://github.com/graceynichols",
"followers_url": "https://api.github.com/users/graceynichols/followers",
"following_url": "https://api.github.com/users/graceynichols/following{/other_user}",
"gists_url": "https://api.github.com/users/graceynichols/gists{/gist_id}",
"starred_url": "https://api.github.com/users/graceynichols/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/graceynichols/subscriptions",
"organizations_url": "https://api.github.com/users/graceynichols/orgs",
"repos_url": "https://api.github.com/users/graceynichols/repos",
"events_url": "https://api.github.com/users/graceynichols/events{/privacy}",
"received_events_url": "https://api.github.com/users/graceynichols/received_events",
"type": "User",
"site_admin": false,
"contributions": 77
},
{
"login": "eah13",
"id": 1702745,
"node_id": "MDQ6VXNlcjE3MDI3NDU=",
"avatar_url": "https://avatars.githubusercontent.com/u/1702745?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/eah13",
"html_url": "https://github.com/eah13",
"followers_url": "https://api.github.com/users/eah13/followers",
"following_url": "https://api.github.com/users/eah13/following{/other_user}",
"gists_url": "https://api.github.com/users/eah13/gists{/gist_id}",
"starred_url": "https://api.github.com/users/eah13/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/eah13/subscriptions",
"organizations_url": "https://api.github.com/users/eah13/orgs",
"repos_url": "https://api.github.com/users/eah13/repos",
"events_url": "https://api.github.com/users/eah13/events{/privacy}",
"received_events_url": "https://api.github.com/users/eah13/received_events",
"type": "User",
"site_admin": false,
"contributions": 76
},
{
"login": "ebertmi",
"id": 1634468,
"node_id": "MDQ6VXNlcjE2MzQ0Njg=",
"avatar_url": "https://avatars.githubusercontent.com/u/1634468?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/ebertmi",
"html_url": "https://github.com/ebertmi",
"followers_url": "https://api.github.com/users/ebertmi/followers",
"following_url": "https://api.github.com/users/ebertmi/following{/other_user}",
"gists_url": "https://api.github.com/users/ebertmi/gists{/gist_id}",
"starred_url": "https://api.github.com/users/ebertmi/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/ebertmi/subscriptions",
"organizations_url": "https://api.github.com/users/ebertmi/orgs",
"repos_url": "https://api.github.com/users/ebertmi/repos",
"events_url": "https://api.github.com/users/ebertmi/events{/privacy}",
"received_events_url": "https://api.github.com/users/ebertmi/received_events",
"type": "User",
"site_admin": false,
"contributions": 58
},
{
"login": "ssarangi",
"id": 239816,
"node_id": "MDQ6VXNlcjIzOTgxNg==",
"avatar_url": "https://avatars.githubusercontent.com/u/239816?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/ssarangi",
"html_url": "https://github.com/ssarangi",
"followers_url": "https://api.github.com/users/ssarangi/followers",
"following_url": "https://api.github.com/users/ssarangi/following{/other_user}",
"gists_url": "https://api.github.com/users/ssarangi/gists{/gist_id}",
"starred_url": "https://api.github.com/users/ssarangi/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/ssarangi/subscriptions",
"organizations_url": "https://api.github.com/users/ssarangi/orgs",
"repos_url": "https://api.github.com/users/ssarangi/repos",
"events_url": "https://api.github.com/users/ssarangi/events{/privacy}",
"received_events_url": "https://api.github.com/users/ssarangi/received_events",
"type": "User",
"site_admin": false,
"contributions": 51
},
{
"login": "brianpmarks",
"id": 688178,
"node_id": "MDQ6VXNlcjY4ODE3OA==",
"avatar_url": "https://avatars.githubusercontent.com/u/688178?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/brianpmarks",
"html_url": "https://github.com/brianpmarks",
"followers_url": "https://api.github.com/users/brianpmarks/followers",
"following_url": "https://api.github.com/users/brianpmarks/following{/other_user}",
"gists_url": "https://api.github.com/users/brianpmarks/gists{/gist_id}",
"starred_url": "https://api.github.com/users/brianpmarks/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/brianpmarks/subscriptions",
"organizations_url": "https://api.github.com/users/brianpmarks/orgs",
"repos_url": "https://api.github.com/users/brianpmarks/repos",
"events_url": "https://api.github.com/users/brianpmarks/events{/privacy}",
"received_events_url": "https://api.github.com/users/brianpmarks/received_events",
"type": "User",
"site_admin": false,
"contributions": 45
},
{
"login": "gerbal",
"id": 5278092,
"node_id": "MDQ6VXNlcjUyNzgwOTI=",
"avatar_url": "https://avatars.githubusercontent.com/u/5278092?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/gerbal",
"html_url": "https://github.com/gerbal",
"followers_url": "https://api.github.com/users/gerbal/followers",
"following_url": "https://api.github.com/users/gerbal/following{/other_user}",
"gists_url": "https://api.github.com/users/gerbal/gists{/gist_id}",
"starred_url": "https://api.github.com/users/gerbal/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/gerbal/subscriptions",
"organizations_url": "https://api.github.com/users/gerbal/orgs",
"repos_url": "https://api.github.com/users/gerbal/repos",
"events_url": "https://api.github.com/users/gerbal/events{/privacy}",
"received_events_url": "https://api.github.com/users/gerbal/received_events",
"type": "User",
"site_admin": false,
"contributions": 32
},
{
"login": "LeszekSwirski",
"id": 593597,
"node_id": "MDQ6VXNlcjU5MzU5Nw==",
"avatar_url": "https://avatars.githubusercontent.com/u/593597?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/LeszekSwirski",
"html_url": "https://github.com/LeszekSwirski",
"followers_url": "https://api.github.com/users/LeszekSwirski/followers",
"following_url": "https://api.github.com/users/LeszekSwirski/following{/other_user}",
"gists_url": "https://api.github.com/users/LeszekSwirski/gists{/gist_id}",
"starred_url": "https://api.github.com/users/LeszekSwirski/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/LeszekSwirski/subscriptions",
"organizations_url": "https://api.github.com/users/LeszekSwirski/orgs",
"repos_url": "https://api.github.com/users/LeszekSwirski/repos",
"events_url": "https://api.github.com/users/LeszekSwirski/events{/privacy}",
"received_events_url": "https://api.github.com/users/LeszekSwirski/received_events",
"type": "User",
"site_admin": false,
"contributions": 29
},
{
"login": "SophiaJefferson",
"id": 25080600,
"node_id": "MDQ6VXNlcjI1MDgwNjAw",
"avatar_url": "https://avatars.githubusercontent.com/u/25080600?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/SophiaJefferson",
"html_url": "https://github.com/SophiaJefferson",
"followers_url": "https://api.github.com/users/SophiaJefferson/followers",
"following_url": "https://api.github.com/users/SophiaJefferson/following{/other_user}",
"gists_url": "https://api.github.com/users/SophiaJefferson/gists{/gist_id}",
"starred_url": "https://api.github.com/users/SophiaJefferson/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/SophiaJefferson/subscriptions",
"organizations_url": "https://api.github.com/users/SophiaJefferson/orgs",
"repos_url": "https://api.github.com/users/SophiaJefferson/repos",
"events_url": "https://api.github.com/users/SophiaJefferson/events{/privacy}",
"received_events_url": "https://api.github.com/users/SophiaJefferson/received_events",
"type": "User",
"site_admin": false,
"contributions": 28
},
{
"login": "Jacco",
"id": 1318341,
"node_id": "MDQ6VXNlcjEzMTgzNDE=",
"avatar_url": "https://avatars.githubusercontent.com/u/1318341?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/Jacco",
"html_url": "https://github.com/Jacco",
"followers_url": "https://api.github.com/users/Jacco/followers",
"following_url": "https://api.github.com/users/Jacco/following{/other_user}",
"gists_url": "https://api.github.com/users/Jacco/gists{/gist_id}",
"starred_url": "https://api.github.com/users/Jacco/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/Jacco/subscriptions",
"organizations_url": "https://api.github.com/users/Jacco/orgs",
"repos_url": "https://api.github.com/users/Jacco/repos",
"events_url": "https://api.github.com/users/Jacco/events{/privacy}",
"received_events_url": "https://api.github.com/users/Jacco/received_events",
"type": "User",
"site_admin": false,
"contributions": 23
},
{
"login": "bennorth",
"id": 9059396,
"node_id": "MDQ6VXNlcjkwNTkzOTY=",
"avatar_url": "https://avatars.githubusercontent.com/u/9059396?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/bennorth",
"html_url": "https://github.com/bennorth",
"followers_url": "https://api.github.com/users/bennorth/followers",
"following_url": "https://api.github.com/users/bennorth/following{/other_user}",
"gists_url": "https://api.github.com/users/bennorth/gists{/gist_id}",
"starred_url": "https://api.github.com/users/bennorth/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/bennorth/subscriptions",
"organizations_url": "https://api.github.com/users/bennorth/orgs",
"repos_url": "https://api.github.com/users/bennorth/repos",
"events_url": "https://api.github.com/users/bennorth/events{/privacy}",
"received_events_url": "https://api.github.com/users/bennorth/received_events",
"type": "User",
"site_admin": false,
"contributions": 22
},
{
"login": "isaacdontjelindell",
"id": 3758290,
"node_id": "MDQ6VXNlcjM3NTgyOTA=",
"avatar_url": "https://avatars.githubusercontent.com/u/3758290?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/isaacdontjelindell",
"html_url": "https://github.com/isaacdontjelindell",
"followers_url": "https://api.github.com/users/isaacdontjelindell/followers",
"following_url": "https://api.github.com/users/isaacdontjelindell/following{/other_user}",
"gists_url": "https://api.github.com/users/isaacdontjelindell/gists{/gist_id}",
"starred_url": "https://api.github.com/users/isaacdontjelindell/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/isaacdontjelindell/subscriptions",
"organizations_url": "https://api.github.com/users/isaacdontjelindell/orgs",
"repos_url": "https://api.github.com/users/isaacdontjelindell/repos",
"events_url": "https://api.github.com/users/isaacdontjelindell/events{/privacy}",
"received_events_url": "https://api.github.com/users/isaacdontjelindell/received_events",
"type": "User",
"site_admin": false,
"contributions": 19
},
{
"login": "prescod",
"id": 22091,
"node_id": "MDQ6VXNlcjIyMDkx",
"avatar_url": "https://avatars.githubusercontent.com/u/22091?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/prescod",
"html_url": "https://github.com/prescod",
"followers_url": "https://api.github.com/users/prescod/followers",
"following_url": "https://api.github.com/users/prescod/following{/other_user}",
"gists_url": "https://api.github.com/users/prescod/gists{/gist_id}",
"starred_url": "https://api.github.com/users/prescod/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/prescod/subscriptions",
"organizations_url": "https://api.github.com/users/prescod/orgs",
"repos_url": "https://api.github.com/users/prescod/repos",
"events_url": "https://api.github.com/users/prescod/events{/privacy}",
"received_events_url": "https://api.github.com/users/prescod/received_events",
"type": "User",
"site_admin": false,
"contributions": 16
},
{
"login": "blacatena",
"id": 508059,
"node_id": "MDQ6VXNlcjUwODA1OQ==",
"avatar_url": "https://avatars.githubusercontent.com/u/508059?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/blacatena",
"html_url": "https://github.com/blacatena",
"followers_url": "https://api.github.com/users/blacatena/followers",
"following_url": "https://api.github.com/users/blacatena/following{/other_user}",
"gists_url": "https://api.github.com/users/blacatena/gists{/gist_id}",
"starred_url": "https://api.github.com/users/blacatena/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/blacatena/subscriptions",
"organizations_url": "https://api.github.com/users/blacatena/orgs",
"repos_url": "https://api.github.com/users/blacatena/repos",
"events_url": "https://api.github.com/users/blacatena/events{/privacy}",
"received_events_url": "https://api.github.com/users/blacatena/received_events",
"type": "User",
"site_admin": false,
"contributions": 15
},
{
"login": "PeterJCLaw",
"id": 336212,
"node_id": "MDQ6VXNlcjMzNjIxMg==",
"avatar_url": "https://avatars.githubusercontent.com/u/336212?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/PeterJCLaw",
"html_url": "https://github.com/PeterJCLaw",
"followers_url": "https://api.github.com/users/PeterJCLaw/followers",
"following_url": "https://api.github.com/users/PeterJCLaw/following{/other_user}",
"gists_url": "https://api.github.com/users/PeterJCLaw/gists{/gist_id}",
"starred_url": "https://api.github.com/users/PeterJCLaw/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/PeterJCLaw/subscriptions",
"organizations_url": "https://api.github.com/users/PeterJCLaw/orgs",
"repos_url": "https://api.github.com/users/PeterJCLaw/repos",
"events_url": "https://api.github.com/users/PeterJCLaw/events{/privacy}",
"received_events_url": "https://api.github.com/users/PeterJCLaw/received_events",
"type": "User",
"site_admin": false,
"contributions": 15
},
{
"login": "aajanki",
"id": 353043,
"node_id": "MDQ6VXNlcjM1MzA0Mw==",
"avatar_url": "https://avatars.githubusercontent.com/u/353043?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/aajanki",
"html_url": "https://github.com/aajanki",
"followers_url": "https://api.github.com/users/aajanki/followers",
"following_url": "https://api.github.com/users/aajanki/following{/other_user}",
"gists_url": "https://api.github.com/users/aajanki/gists{/gist_id}",
"starred_url": "https://api.github.com/users/aajanki/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/aajanki/subscriptions",
"organizations_url": "https://api.github.com/users/aajanki/orgs",
"repos_url": "https://api.github.com/users/aajanki/repos",
"events_url": "https://api.github.com/users/aajanki/events{/privacy}",
"received_events_url": "https://api.github.com/users/aajanki/received_events",
"type": "User",
"site_admin": false,
"contributions": 14
},
{
"login": "shreyasminocha",
"id": 11537232,
"node_id": "MDQ6VXNlcjExNTM3MjMy",
"avatar_url": "https://avatars.githubusercontent.com/u/11537232?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/shreyasminocha",
"html_url": "https://github.com/shreyasminocha",
"followers_url": "https://api.github.com/users/shreyasminocha/followers",
"following_url": "https://api.github.com/users/shreyasminocha/following{/other_user}",
"gists_url": "https://api.github.com/users/shreyasminocha/gists{/gist_id}",
"starred_url": "https://api.github.com/users/shreyasminocha/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/shreyasminocha/subscriptions",
"organizations_url": "https://api.github.com/users/shreyasminocha/orgs",
"repos_url": "https://api.github.com/users/shreyasminocha/repos",
"events_url": "https://api.github.com/users/shreyasminocha/events{/privacy}",
"received_events_url": "https://api.github.com/users/shreyasminocha/received_events",
"type": "User",
"site_admin": false,
"contributions": 14
},
{
"login": "Dustyposa",
"id": 27180793,
"node_id": "MDQ6VXNlcjI3MTgwNzkz",
"avatar_url": "https://avatars.githubusercontent.com/u/27180793?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/Dustyposa",
"html_url": "https://github.com/Dustyposa",
"followers_url": "https://api.github.com/users/Dustyposa/followers",
"following_url": "https://api.github.com/users/Dustyposa/following{/other_user}",
"gists_url": "https://api.github.com/users/Dustyposa/gists{/gist_id}",
"starred_url": "https://api.github.com/users/Dustyposa/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/Dustyposa/subscriptions",
"organizations_url": "https://api.github.com/users/Dustyposa/orgs",
"repos_url": "https://api.github.com/users/Dustyposa/repos",
"events_url": "https://api.github.com/users/Dustyposa/events{/privacy}",
"received_events_url": "https://api.github.com/users/Dustyposa/received_events",
"type": "User",
"site_admin": false,
"contributions": 12
},
{
"login": "csev",
"id": 1197222,
"node_id": "MDQ6VXNlcjExOTcyMjI=",
"avatar_url": "https://avatars.githubusercontent.com/u/1197222?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/csev",
"html_url": "https://github.com/csev",
"followers_url": "https://api.github.com/users/csev/followers",
"following_url": "https://api.github.com/users/csev/following{/other_user}",
"gists_url": "https://api.github.com/users/csev/gists{/gist_id}",
"starred_url": "https://api.github.com/users/csev/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/csev/subscriptions",
"organizations_url": "https://api.github.com/users/csev/orgs",
"repos_url": "https://api.github.com/users/csev/repos",
"events_url": "https://api.github.com/users/csev/events{/privacy}",
"received_events_url": "https://api.github.com/users/csev/received_events",
"type": "User",
"site_admin": false,
"contributions": 11
},
{
"login": "david-geo-holmes",
"id": 558095,
"node_id": "MDQ6VXNlcjU1ODA5NQ==",
"avatar_url": "https://avatars.githubusercontent.com/u/558095?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/david-geo-holmes",
"html_url": "https://github.com/david-geo-holmes",
"followers_url": "https://api.github.com/users/david-geo-holmes/followers",
"following_url": "https://api.github.com/users/david-geo-holmes/following{/other_user}",
"gists_url": "https://api.github.com/users/david-geo-holmes/gists{/gist_id}",
"starred_url": "https://api.github.com/users/david-geo-holmes/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/david-geo-holmes/subscriptions",
"organizations_url": "https://api.github.com/users/david-geo-holmes/orgs",
"repos_url": "https://api.github.com/users/david-geo-holmes/repos",
"events_url": "https://api.github.com/users/david-geo-holmes/events{/privacy}",
"received_events_url": "https://api.github.com/users/david-geo-holmes/received_events",
"type": "User",
"site_admin": false,
"contributions": 10
},
{
"login": "bofeng",
"id": 3884670,
"node_id": "MDQ6VXNlcjM4ODQ2NzA=",
"avatar_url": "https://avatars.githubusercontent.com/u/3884670?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/bofeng",
"html_url": "https://github.com/bofeng",
"followers_url": "https://api.github.com/users/bofeng/followers",
"following_url": "https://api.github.com/users/bofeng/following{/other_user}",
"gists_url": "https://api.github.com/users/bofeng/gists{/gist_id}",
"starred_url": "https://api.github.com/users/bofeng/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/bofeng/subscriptions",
"organizations_url": "https://api.github.com/users/bofeng/orgs",
"repos_url": "https://api.github.com/users/bofeng/repos",
"events_url": "https://api.github.com/users/bofeng/events{/privacy}",
"received_events_url": "https://api.github.com/users/bofeng/received_events",
"type": "User",
"site_admin": false,
"contributions": 10
},
{
"login": "robyntorregrosa",
"id": 20244117,
"node_id": "MDQ6VXNlcjIwMjQ0MTE3",
"avatar_url": "https://avatars.githubusercontent.com/u/20244117?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/robyntorregrosa",
"html_url": "https://github.com/robyntorregrosa",
"followers_url": "https://api.github.com/users/robyntorregrosa/followers",
"following_url": "https://api.github.com/users/robyntorregrosa/following{/other_user}",
"gists_url": "https://api.github.com/users/robyntorregrosa/gists{/gist_id}",
"starred_url": "https://api.github.com/users/robyntorregrosa/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/robyntorregrosa/subscriptions",
"organizations_url": "https://api.github.com/users/robyntorregrosa/orgs",
"repos_url": "https://api.github.com/users/robyntorregrosa/repos",
"events_url": "https://api.github.com/users/robyntorregrosa/events{/privacy}",
"received_events_url": "https://api.github.com/users/robyntorregrosa/received_events",
"type": "User",
"site_admin": false,
"contributions": 9
},
{
"login": "archibate",
"id": 20640597,
"node_id": "MDQ6VXNlcjIwNjQwNTk3",
"avatar_url": "https://avatars.githubusercontent.com/u/20640597?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/archibate",
"html_url": "https://github.com/archibate",
"followers_url": "https://api.github.com/users/archibate/followers",
"following_url": "https://api.github.com/users/archibate/following{/other_user}",
"gists_url": "https://api.github.com/users/archibate/gists{/gist_id}",
"starred_url": "https://api.github.com/users/archibate/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/archibate/subscriptions",
"organizations_url": "https://api.github.com/users/archibate/orgs",
"repos_url": "https://api.github.com/users/archibate/repos",
"events_url": "https://api.github.com/users/archibate/events{/privacy}",
"received_events_url": "https://api.github.com/users/archibate/received_events",
"type": "User",
"site_admin": false,
"contributions": 9
},
{
"login": "j-f1",
"id": 25517624,
"node_id": "MDQ6VXNlcjI1NTE3NjI0",
"avatar_url": "https://avatars.githubusercontent.com/u/25517624?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/j-f1",
"html_url": "https://github.com/j-f1",
"followers_url": "https://api.github.com/users/j-f1/followers",
"following_url": "https://api.github.com/users/j-f1/following{/other_user}",
"gists_url": "https://api.github.com/users/j-f1/gists{/gist_id}",
"starred_url": "https://api.github.com/users/j-f1/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/j-f1/subscriptions",
"organizations_url": "https://api.github.com/users/j-f1/orgs",
"repos_url": "https://api.github.com/users/j-f1/repos",
"events_url": "https://api.github.com/users/j-f1/events{/privacy}",
"received_events_url": "https://api.github.com/users/j-f1/received_events",
"type": "User",
"site_admin": false,
"contributions": 7
},
{
"login": "ahuhn",
"id": 2177162,
"node_id": "MDQ6VXNlcjIxNzcxNjI=",
"avatar_url": "https://avatars.githubusercontent.com/u/2177162?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/ahuhn",
"html_url": "https://github.com/ahuhn",
"followers_url": "https://api.github.com/users/ahuhn/followers",
"following_url": "https://api.github.com/users/ahuhn/following{/other_user}",
"gists_url": "https://api.github.com/users/ahuhn/gists{/gist_id}",
"starred_url": "https://api.github.com/users/ahuhn/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/ahuhn/subscriptions",
"organizations_url": "https://api.github.com/users/ahuhn/orgs",
"repos_url": "https://api.github.com/users/ahuhn/repos",
"events_url": "https://api.github.com/users/ahuhn/events{/privacy}",
"received_events_url": "https://api.github.com/users/ahuhn/received_events",
"type": "User",
"site_admin": false,
"contributions": 7
},
{
"login": "acbart",
"id": 897227,
"node_id": "MDQ6VXNlcjg5NzIyNw==",
"avatar_url": "https://avatars.githubusercontent.com/u/897227?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/acbart",
"html_url": "https://github.com/acbart",
"followers_url": "https://api.github.com/users/acbart/followers",
"following_url": "https://api.github.com/users/acbart/following{/other_user}",
"gists_url": "https://api.github.com/users/acbart/gists{/gist_id}",
"starred_url": "https://api.github.com/users/acbart/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/acbart/subscriptions",
"organizations_url": "https://api.github.com/users/acbart/orgs",
"repos_url": "https://api.github.com/users/acbart/repos",
"events_url": "https://api.github.com/users/acbart/events{/privacy}",
"received_events_url": "https://api.github.com/users/acbart/received_events",
"type": "User",
"site_admin": false,
"contributions": 6
},
{
"login": "davidscz",
"id": 6633754,
"node_id": "MDQ6VXNlcjY2MzM3NTQ=",
"avatar_url": "https://avatars.githubusercontent.com/u/6633754?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/davidscz",
"html_url": "https://github.com/davidscz",
"followers_url": "https://api.github.com/users/davidscz/followers",
"following_url": "https://api.github.com/users/davidscz/following{/other_user}",
"gists_url": "https://api.github.com/users/davidscz/gists{/gist_id}",
"starred_url": "https://api.github.com/users/davidscz/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/davidscz/subscriptions",
"organizations_url": "https://api.github.com/users/davidscz/orgs",
"repos_url": "https://api.github.com/users/davidscz/repos",
"events_url": "https://api.github.com/users/davidscz/events{/privacy}",
"received_events_url": "https://api.github.com/users/davidscz/received_events",
"type": "User",
"site_admin": false,
"contributions": 5
},
{
"login": "amr66",
"id": 10866105,
"node_id": "MDQ6VXNlcjEwODY2MTA1",
"avatar_url": "https://avatars.githubusercontent.com/u/10866105?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/amr66",
"html_url": "https://github.com/amr66",
"followers_url": "https://api.github.com/users/amr66/followers",
"following_url": "https://api.github.com/users/amr66/following{/other_user}",
"gists_url": "https://api.github.com/users/amr66/gists{/gist_id}",
"starred_url": "https://api.github.com/users/amr66/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/amr66/subscriptions",
"organizations_url": "https://api.github.com/users/amr66/orgs",
"repos_url": "https://api.github.com/users/amr66/repos",
"events_url": "https://api.github.com/users/amr66/events{/privacy}",
"received_events_url": "https://api.github.com/users/amr66/received_events",
"type": "User",
"site_admin": false,
"contributions": 4
},
{
"login": "jmaroeder",
"id": 1402944,
"node_id": "MDQ6VXNlcjE0MDI5NDQ=",
"avatar_url": "https://avatars.githubusercontent.com/u/1402944?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/jmaroeder",
"html_url": "https://github.com/jmaroeder",
"followers_url": "https://api.github.com/users/jmaroeder/followers",
"following_url": "https://api.github.com/users/jmaroeder/following{/other_user}",
"gists_url": "https://api.github.com/users/jmaroeder/gists{/gist_id}",
"starred_url": "https://api.github.com/users/jmaroeder/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/jmaroeder/subscriptions",
"organizations_url": "https://api.github.com/users/jmaroeder/orgs",
"repos_url": "https://api.github.com/users/jmaroeder/repos",
"events_url": "https://api.github.com/users/jmaroeder/events{/privacy}",
"received_events_url": "https://api.github.com/users/jmaroeder/received_events",
"type": "User",
"site_admin": false,
"contributions": 4
},
{
"login": "jaspervdg",
"id": 3264193,
"node_id": "MDQ6VXNlcjMyNjQxOTM=",
"avatar_url": "https://avatars.githubusercontent.com/u/3264193?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/jaspervdg",
"html_url": "https://github.com/jaspervdg",
"followers_url": "https://api.github.com/users/jaspervdg/followers",
"following_url": "https://api.github.com/users/jaspervdg/following{/other_user}",
"gists_url": "https://api.github.com/users/jaspervdg/gists{/gist_id}",
"starred_url": "https://api.github.com/users/jaspervdg/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/jaspervdg/subscriptions",
"organizations_url": "https://api.github.com/users/jaspervdg/orgs",
"repos_url": "https://api.github.com/users/jaspervdg/repos",
"events_url": "https://api.github.com/users/jaspervdg/events{/privacy}",
"received_events_url": "https://api.github.com/users/jaspervdg/received_events",
"type": "User",
"site_admin": false,
"contributions": 4
},
{
"login": "timmartin",
"id": 56920,
"node_id": "MDQ6VXNlcjU2OTIw",
"avatar_url": "https://avatars.githubusercontent.com/u/56920?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/timmartin",
"html_url": "https://github.com/timmartin",
"followers_url": "https://api.github.com/users/timmartin/followers",
"following_url": "https://api.github.com/users/timmartin/following{/other_user}",
"gists_url": "https://api.github.com/users/timmartin/gists{/gist_id}",
"starred_url": "https://api.github.com/users/timmartin/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/timmartin/subscriptions",
"organizations_url": "https://api.github.com/users/timmartin/orgs",
"repos_url": "https://api.github.com/users/timmartin/repos",
"events_url": "https://api.github.com/users/timmartin/events{/privacy}",
"received_events_url": "https://api.github.com/users/timmartin/received_events",
"type": "User",
"site_admin": false,
"contributions": 4
},
{
"login": "cgibin",
"id": 17925418,
"node_id": "MDQ6VXNlcjE3OTI1NDE4",
"avatar_url": "https://avatars.githubusercontent.com/u/17925418?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/cgibin",
"html_url": "https://github.com/cgibin",
"followers_url": "https://api.github.com/users/cgibin/followers",
"following_url": "https://api.github.com/users/cgibin/following{/other_user}",
"gists_url": "https://api.github.com/users/cgibin/gists{/gist_id}",
"starred_url": "https://api.github.com/users/cgibin/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/cgibin/subscriptions",
"organizations_url": "https://api.github.com/users/cgibin/orgs",
"repos_url": "https://api.github.com/users/cgibin/repos",
"events_url": "https://api.github.com/users/cgibin/events{/privacy}",
"received_events_url": "https://api.github.com/users/cgibin/received_events",
"type": "User",
"site_admin": false,
"contributions": 4
},
{
"login": "Lanzaa",
"id": 240881,
"node_id": "MDQ6VXNlcjI0MDg4MQ==",
"avatar_url": "https://avatars.githubusercontent.com/u/240881?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/Lanzaa",
"html_url": "https://github.com/Lanzaa",
"followers_url": "https://api.github.com/users/Lanzaa/followers",
"following_url": "https://api.github.com/users/Lanzaa/following{/other_user}",
"gists_url": "https://api.github.com/users/Lanzaa/gists{/gist_id}",
"starred_url": "https://api.github.com/users/Lanzaa/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/Lanzaa/subscriptions",
"organizations_url": "https://api.github.com/users/Lanzaa/orgs",
"repos_url": "https://api.github.com/users/Lanzaa/repos",
"events_url": "https://api.github.com/users/Lanzaa/events{/privacy}",
"received_events_url": "https://api.github.com/users/Lanzaa/received_events",
"type": "User",
"site_admin": false,
"contributions": 3
},
{
"login": "Dandandan",
"id": 163737,
"node_id": "MDQ6VXNlcjE2MzczNw==",
"avatar_url": "https://avatars.githubusercontent.com/u/163737?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/Dandandan",
"html_url": "https://github.com/Dandandan",
"followers_url": "https://api.github.com/users/Dandandan/followers",
"following_url": "https://api.github.com/users/Dandandan/following{/other_user}",
"gists_url": "https://api.github.com/users/Dandandan/gists{/gist_id}",
"starred_url": "https://api.github.com/users/Dandandan/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/Dandandan/subscriptions",
"organizations_url": "https://api.github.com/users/Dandandan/orgs",
"repos_url": "https://api.github.com/users/Dandandan/repos",
"events_url": "https://api.github.com/users/Dandandan/events{/privacy}",
"received_events_url": "https://api.github.com/users/Dandandan/received_events",
"type": "User",
"site_admin": false,
"contributions": 3
},
{
"login": "Lalaland",
"id": 342233,
"node_id": "MDQ6VXNlcjM0MjIzMw==",
"avatar_url": "https://avatars.githubusercontent.com/u/342233?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/Lalaland",
"html_url": "https://github.com/Lalaland",
"followers_url": "https://api.github.com/users/Lalaland/followers",
"following_url": "https://api.github.com/users/Lalaland/following{/other_user}",
"gists_url": "https://api.github.com/users/Lalaland/gists{/gist_id}",
"starred_url": "https://api.github.com/users/Lalaland/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/Lalaland/subscriptions",
"organizations_url": "https://api.github.com/users/Lalaland/orgs",
"repos_url": "https://api.github.com/users/Lalaland/repos",
"events_url": "https://api.github.com/users/Lalaland/events{/privacy}",
"received_events_url": "https://api.github.com/users/Lalaland/received_events",
"type": "User",
"site_admin": false,
"contributions": 3
},
{
"login": "harsh183",
"id": 7780198,
"node_id": "MDQ6VXNlcjc3ODAxOTg=",
"avatar_url": "https://avatars.githubusercontent.com/u/7780198?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/harsh183",
"html_url": "https://github.com/harsh183",
"followers_url": "https://api.github.com/users/harsh183/followers",
"following_url": "https://api.github.com/users/harsh183/following{/other_user}",
"gists_url": "https://api.github.com/users/harsh183/gists{/gist_id}",
"starred_url": "https://api.github.com/users/harsh183/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/harsh183/subscriptions",
"organizations_url": "https://api.github.com/users/harsh183/orgs",
"repos_url": "https://api.github.com/users/harsh183/repos",
"events_url": "https://api.github.com/users/harsh183/events{/privacy}",
"received_events_url": "https://api.github.com/users/harsh183/received_events",
"type": "User",
"site_admin": false,
"contributions": 3
},
{
"login": "srdan-bozovic-msft",
"id": 5732116,
"node_id": "MDQ6VXNlcjU3MzIxMTY=",
"avatar_url": "https://avatars.githubusercontent.com/u/5732116?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/srdan-bozovic-msft",
"html_url": "https://github.com/srdan-bozovic-msft",
"followers_url": "https://api.github.com/users/srdan-bozovic-msft/followers",
"following_url": "https://api.github.com/users/srdan-bozovic-msft/following{/other_user}",
"gists_url": "https://api.github.com/users/srdan-bozovic-msft/gists{/gist_id}",
"starred_url": "https://api.github.com/users/srdan-bozovic-msft/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/srdan-bozovic-msft/subscriptions",
"organizations_url": "https://api.github.com/users/srdan-bozovic-msft/orgs",
"repos_url": "https://api.github.com/users/srdan-bozovic-msft/repos",
"events_url": "https://api.github.com/users/srdan-bozovic-msft/events{/privacy}",
"received_events_url": "https://api.github.com/users/srdan-bozovic-msft/received_events",
"type": "User",
"site_admin": false,
"contributions": 3
},
{
"login": "mrshu",
"id": 461491,
"node_id": "MDQ6VXNlcjQ2MTQ5MQ==",
"avatar_url": "https://avatars.githubusercontent.com/u/461491?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/mrshu",
"html_url": "https://github.com/mrshu",
"followers_url": "https://api.github.com/users/mrshu/followers",
"following_url": "https://api.github.com/users/mrshu/following{/other_user}",
"gists_url": "https://api.github.com/users/mrshu/gists{/gist_id}",
"starred_url": "https://api.github.com/users/mrshu/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/mrshu/subscriptions",
"organizations_url": "https://api.github.com/users/mrshu/orgs",
"repos_url": "https://api.github.com/users/mrshu/repos",
"events_url": "https://api.github.com/users/mrshu/events{/privacy}",
"received_events_url": "https://api.github.com/users/mrshu/received_events",
"type": "User",
"site_admin": false,
"contributions": 3
},
{
"login": "Jeff-Tian",
"id": 3367820,
"node_id": "MDQ6VXNlcjMzNjc4MjA=",
"avatar_url": "https://avatars.githubusercontent.com/u/3367820?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/Jeff-Tian",
"html_url": "https://github.com/Jeff-Tian",
"followers_url": "https://api.github.com/users/Jeff-Tian/followers",
"following_url": "https://api.github.com/users/Jeff-Tian/following{/other_user}",
"gists_url": "https://api.github.com/users/Jeff-Tian/gists{/gist_id}",
"starred_url": "https://api.github.com/users/Jeff-Tian/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/Jeff-Tian/subscriptions",
"organizations_url": "https://api.github.com/users/Jeff-Tian/orgs",
"repos_url": "https://api.github.com/users/Jeff-Tian/repos",
"events_url": "https://api.github.com/users/Jeff-Tian/events{/privacy}",
"received_events_url": "https://api.github.com/users/Jeff-Tian/received_events",
"type": "User",
"site_admin": false,
"contributions": 3
},
{
"login": "bjpirt",
"id": 186499,
"node_id": "MDQ6VXNlcjE4NjQ5OQ==",
"avatar_url": "https://avatars.githubusercontent.com/u/186499?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/bjpirt",
"html_url": "https://github.com/bjpirt",
"followers_url": "https://api.github.com/users/bjpirt/followers",
"following_url": "https://api.github.com/users/bjpirt/following{/other_user}",
"gists_url": "https://api.github.com/users/bjpirt/gists{/gist_id}",
"starred_url": "https://api.github.com/users/bjpirt/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/bjpirt/subscriptions",
"organizations_url": "https://api.github.com/users/bjpirt/orgs",
"repos_url": "https://api.github.com/users/bjpirt/repos",
"events_url": "https://api.github.com/users/bjpirt/events{/privacy}",
"received_events_url": "https://api.github.com/users/bjpirt/received_events",
"type": "User",
"site_admin": false,
"contributions": 2
},
{
"login": "pinkfoot",
"id": 3594765,
"node_id": "MDQ6VXNlcjM1OTQ3NjU=",
"avatar_url": "https://avatars.githubusercontent.com/u/3594765?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/pinkfoot",
"html_url": "https://github.com/pinkfoot",
"followers_url": "https://api.github.com/users/pinkfoot/followers",
"following_url": "https://api.github.com/users/pinkfoot/following{/other_user}",
"gists_url": "https://api.github.com/users/pinkfoot/gists{/gist_id}",
"starred_url": "https://api.github.com/users/pinkfoot/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/pinkfoot/subscriptions",
"organizations_url": "https://api.github.com/users/pinkfoot/orgs",
"repos_url": "https://api.github.com/users/pinkfoot/repos",
"events_url": "https://api.github.com/users/pinkfoot/events{/privacy}",
"received_events_url": "https://api.github.com/users/pinkfoot/received_events",
"type": "User",
"site_admin": false,
"contributions": 2
},
{
"login": "bnmtest",
"id": 9487990,
"node_id": "MDQ6VXNlcjk0ODc5OTA=",
"avatar_url": "https://avatars.githubusercontent.com/u/9487990?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/bnmtest",
"html_url": "https://github.com/bnmtest",
"followers_url": "https://api.github.com/users/bnmtest/followers",
"following_url": "https://api.github.com/users/bnmtest/following{/other_user}",
"gists_url": "https://api.github.com/users/bnmtest/gists{/gist_id}",
"starred_url": "https://api.github.com/users/bnmtest/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/bnmtest/subscriptions",
"organizations_url": "https://api.github.com/users/bnmtest/orgs",
"repos_url": "https://api.github.com/users/bnmtest/repos",
"events_url": "https://api.github.com/users/bnmtest/events{/privacy}",
"received_events_url": "https://api.github.com/users/bnmtest/received_events",
"type": "User",
"site_admin": false,
"contributions": 2
},
{
"login": "schellenberg",
"id": 227656,
"node_id": "MDQ6VXNlcjIyNzY1Ng==",
"avatar_url": "https://avatars.githubusercontent.com/u/227656?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/schellenberg",
"html_url": "https://github.com/schellenberg",
"followers_url": "https://api.github.com/users/schellenberg/followers",
"following_url": "https://api.github.com/users/schellenberg/following{/other_user}",
"gists_url": "https://api.github.com/users/schellenberg/gists{/gist_id}",
"starred_url": "https://api.github.com/users/schellenberg/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/schellenberg/subscriptions",
"organizations_url": "https://api.github.com/users/schellenberg/orgs",
"repos_url": "https://api.github.com/users/schellenberg/repos",
"events_url": "https://api.github.com/users/schellenberg/events{/privacy}",
"received_events_url": "https://api.github.com/users/schellenberg/received_events",
"type": "User",
"site_admin": false,
"contributions": 2
},
{
"login": "dsblank",
"id": 168568,
"node_id": "MDQ6VXNlcjE2ODU2OA==",
"avatar_url": "https://avatars.githubusercontent.com/u/168568?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/dsblank",
"html_url": "https://github.com/dsblank",
"followers_url": "https://api.github.com/users/dsblank/followers",
"following_url": "https://api.github.com/users/dsblank/following{/other_user}",
"gists_url": "https://api.github.com/users/dsblank/gists{/gist_id}",
"starred_url": "https://api.github.com/users/dsblank/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/dsblank/subscriptions",
"organizations_url": "https://api.github.com/users/dsblank/orgs",
"repos_url": "https://api.github.com/users/dsblank/repos",
"events_url": "https://api.github.com/users/dsblank/events{/privacy}",
"received_events_url": "https://api.github.com/users/dsblank/received_events",
"type": "User",
"site_admin": false,
"contributions": 2
},
{
"login": "fsladkey",
"id": 12353283,
"node_id": "MDQ6VXNlcjEyMzUzMjgz",
"avatar_url": "https://avatars.githubusercontent.com/u/12353283?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/fsladkey",
"html_url": "https://github.com/fsladkey",
"followers_url": "https://api.github.com/users/fsladkey/followers",
"following_url": "https://api.github.com/users/fsladkey/following{/other_user}",
"gists_url": "https://api.github.com/users/fsladkey/gists{/gist_id}",
"starred_url": "https://api.github.com/users/fsladkey/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/fsladkey/subscriptions",
"organizations_url": "https://api.github.com/users/fsladkey/orgs",
"repos_url": "https://api.github.com/users/fsladkey/repos",
"events_url": "https://api.github.com/users/fsladkey/events{/privacy}",
"received_events_url": "https://api.github.com/users/fsladkey/received_events",
"type": "User",
"site_admin": false,
"contributions": 2
},
{
"login": "iblech",
"id": 3661115,
"node_id": "MDQ6VXNlcjM2NjExMTU=",
"avatar_url": "https://avatars.githubusercontent.com/u/3661115?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/iblech",
"html_url": "https://github.com/iblech",
"followers_url": "https://api.github.com/users/iblech/followers",
"following_url": "https://api.github.com/users/iblech/following{/other_user}",
"gists_url": "https://api.github.com/users/iblech/gists{/gist_id}",
"starred_url": "https://api.github.com/users/iblech/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/iblech/subscriptions",
"organizations_url": "https://api.github.com/users/iblech/orgs",
"repos_url": "https://api.github.com/users/iblech/repos",
"events_url": "https://api.github.com/users/iblech/events{/privacy}",
"received_events_url": "https://api.github.com/users/iblech/received_events",
"type": "User",
"site_admin": false,
"contributions": 2
},
{
"login": "jedevc",
"id": 7352848,
"node_id": "MDQ6VXNlcjczNTI4NDg=",
"avatar_url": "https://avatars.githubusercontent.com/u/7352848?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/jedevc",
"html_url": "https://github.com/jedevc",
"followers_url": "https://api.github.com/users/jedevc/followers",
"following_url": "https://api.github.com/users/jedevc/following{/other_user}",
"gists_url": "https://api.github.com/users/jedevc/gists{/gist_id}",
"starred_url": "https://api.github.com/users/jedevc/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/jedevc/subscriptions",
"organizations_url": "https://api.github.com/users/jedevc/orgs",
"repos_url": "https://api.github.com/users/jedevc/repos",
"events_url": "https://api.github.com/users/jedevc/events{/privacy}",
"received_events_url": "https://api.github.com/users/jedevc/received_events",
"type": "User",
"site_admin": false,
"contributions": 2
},
{
"login": "pbharrin",
"id": 490809,
"node_id": "MDQ6VXNlcjQ5MDgwOQ==",
"avatar_url": "https://avatars.githubusercontent.com/u/490809?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/pbharrin",
"html_url": "https://github.com/pbharrin",
"followers_url": "https://api.github.com/users/pbharrin/followers",
"following_url": "https://api.github.com/users/pbharrin/following{/other_user}",
"gists_url": "https://api.github.com/users/pbharrin/gists{/gist_id}",
"starred_url": "https://api.github.com/users/pbharrin/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/pbharrin/subscriptions",
"organizations_url": "https://api.github.com/users/pbharrin/orgs",
"repos_url": "https://api.github.com/users/pbharrin/repos",
"events_url": "https://api.github.com/users/pbharrin/events{/privacy}",
"received_events_url": "https://api.github.com/users/pbharrin/received_events",
"type": "User",
"site_admin": false,
"contributions": 2
},
{
"login": "d4rkb1ue",
"id": 7615326,
"node_id": "MDQ6VXNlcjc2MTUzMjY=",
"avatar_url": "https://avatars.githubusercontent.com/u/7615326?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/d4rkb1ue",
"html_url": "https://github.com/d4rkb1ue",
"followers_url": "https://api.github.com/users/d4rkb1ue/followers",
"following_url": "https://api.github.com/users/d4rkb1ue/following{/other_user}",
"gists_url": "https://api.github.com/users/d4rkb1ue/gists{/gist_id}",
"starred_url": "https://api.github.com/users/d4rkb1ue/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/d4rkb1ue/subscriptions",
"organizations_url": "https://api.github.com/users/d4rkb1ue/orgs",
"repos_url": "https://api.github.com/users/d4rkb1ue/repos",
"events_url": "https://api.github.com/users/d4rkb1ue/events{/privacy}",
"received_events_url": "https://api.github.com/users/d4rkb1ue/received_events",
"type": "User",
"site_admin": false,
"contributions": 2
},
{
"login": "danbornside",
"id": 163600,
"node_id": "MDQ6VXNlcjE2MzYwMA==",
"avatar_url": "https://avatars.githubusercontent.com/u/163600?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/danbornside",
"html_url": "https://github.com/danbornside",
"followers_url": "https://api.github.com/users/danbornside/followers",
"following_url": "https://api.github.com/users/danbornside/following{/other_user}",
"gists_url": "https://api.github.com/users/danbornside/gists{/gist_id}",
"starred_url": "https://api.github.com/users/danbornside/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/danbornside/subscriptions",
"organizations_url": "https://api.github.com/users/danbornside/orgs",
"repos_url": "https://api.github.com/users/danbornside/repos",
"events_url": "https://api.github.com/users/danbornside/events{/privacy}",
"received_events_url": "https://api.github.com/users/danbornside/received_events",
"type": "User",
"site_admin": false,
"contributions": 2
},
{
"login": "ericsonga",
"id": 1844609,
"node_id": "MDQ6VXNlcjE4NDQ2MDk=",
"avatar_url": "https://avatars.githubusercontent.com/u/1844609?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/ericsonga",
"html_url": "https://github.com/ericsonga",
"followers_url": "https://api.github.com/users/ericsonga/followers",
"following_url": "https://api.github.com/users/ericsonga/following{/other_user}",
"gists_url": "https://api.github.com/users/ericsonga/gists{/gist_id}",
"starred_url": "https://api.github.com/users/ericsonga/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/ericsonga/subscriptions",
"organizations_url": "https://api.github.com/users/ericsonga/orgs",
"repos_url": "https://api.github.com/users/ericsonga/repos",
"events_url": "https://api.github.com/users/ericsonga/events{/privacy}",
"received_events_url": "https://api.github.com/users/ericsonga/received_events",
"type": "User",
"site_admin": false,
"contributions": 2
},
{
"login": "daviesian",
"id": 488684,
"node_id": "MDQ6VXNlcjQ4ODY4NA==",
"avatar_url": "https://avatars.githubusercontent.com/u/488684?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/daviesian",
"html_url": "https://github.com/daviesian",
"followers_url": "https://api.github.com/users/daviesian/followers",
"following_url": "https://api.github.com/users/daviesian/following{/other_user}",
"gists_url": "https://api.github.com/users/daviesian/gists{/gist_id}",
"starred_url": "https://api.github.com/users/daviesian/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/daviesian/subscriptions",
"organizations_url": "https://api.github.com/users/daviesian/orgs",
"repos_url": "https://api.github.com/users/daviesian/repos",
"events_url": "https://api.github.com/users/daviesian/events{/privacy}",
"received_events_url": "https://api.github.com/users/daviesian/received_events",
"type": "User",
"site_admin": false,
"contributions": 2
},
{
"login": "chhabrakadabra",
"id": 773452,
"node_id": "MDQ6VXNlcjc3MzQ1Mg==",
"avatar_url": "https://avatars.githubusercontent.com/u/773452?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/chhabrakadabra",
"html_url": "https://github.com/chhabrakadabra",
"followers_url": "https://api.github.com/users/chhabrakadabra/followers",
"following_url": "https://api.github.com/users/chhabrakadabra/following{/other_user}",
"gists_url": "https://api.github.com/users/chhabrakadabra/gists{/gist_id}",
"starred_url": "https://api.github.com/users/chhabrakadabra/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/chhabrakadabra/subscriptions",
"organizations_url": "https://api.github.com/users/chhabrakadabra/orgs",
"repos_url": "https://api.github.com/users/chhabrakadabra/repos",
"events_url": "https://api.github.com/users/chhabrakadabra/events{/privacy}",
"received_events_url": "https://api.github.com/users/chhabrakadabra/received_events",
"type": "User",
"site_admin": false,
"contributions": 1
},
{
"login": "amasad",
"id": 587518,
"node_id": "MDQ6VXNlcjU4NzUxOA==",
"avatar_url": "https://avatars.githubusercontent.com/u/587518?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/amasad",
"html_url": "https://github.com/amasad",
"followers_url": "https://api.github.com/users/amasad/followers",
"following_url": "https://api.github.com/users/amasad/following{/other_user}",
"gists_url": "https://api.github.com/users/amasad/gists{/gist_id}",
"starred_url": "https://api.github.com/users/amasad/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/amasad/subscriptions",
"organizations_url": "https://api.github.com/users/amasad/orgs",
"repos_url": "https://api.github.com/users/amasad/repos",
"events_url": "https://api.github.com/users/amasad/events{/privacy}",
"received_events_url": "https://api.github.com/users/amasad/received_events",
"type": "User",
"site_admin": false,
"contributions": 1
},
{
"login": "bhavayAnand9",
"id": 34943807,
"node_id": "MDQ6VXNlcjM0OTQzODA3",
"avatar_url": "https://avatars.githubusercontent.com/u/34943807?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/bhavayAnand9",
"html_url": "https://github.com/bhavayAnand9",
"followers_url": "https://api.github.com/users/bhavayAnand9/followers",
"following_url": "https://api.github.com/users/bhavayAnand9/following{/other_user}",
"gists_url": "https://api.github.com/users/bhavayAnand9/gists{/gist_id}",
"starred_url": "https://api.github.com/users/bhavayAnand9/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/bhavayAnand9/subscriptions",
"organizations_url": "https://api.github.com/users/bhavayAnand9/orgs",
"repos_url": "https://api.github.com/users/bhavayAnand9/repos",
"events_url": "https://api.github.com/users/bhavayAnand9/events{/privacy}",
"received_events_url": "https://api.github.com/users/bhavayAnand9/received_events",
"type": "User",
"site_admin": false,
"contributions": 1
},
{
"login": "Rosuav",
"id": 640535,
"node_id": "MDQ6VXNlcjY0MDUzNQ==",
"avatar_url": "https://avatars.githubusercontent.com/u/640535?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/Rosuav",
"html_url": "https://github.com/Rosuav",
"followers_url": "https://api.github.com/users/Rosuav/followers",
"following_url": "https://api.github.com/users/Rosuav/following{/other_user}",
"gists_url": "https://api.github.com/users/Rosuav/gists{/gist_id}",
"starred_url": "https://api.github.com/users/Rosuav/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/Rosuav/subscriptions",
"organizations_url": "https://api.github.com/users/Rosuav/orgs",
"repos_url": "https://api.github.com/users/Rosuav/repos",
"events_url": "https://api.github.com/users/Rosuav/events{/privacy}",
"received_events_url": "https://api.github.com/users/Rosuav/received_events",
"type": "User",
"site_admin": false,
"contributions": 1
},
{
"login": "cskau-g",
"id": 8520548,
"node_id": "MDQ6VXNlcjg1MjA1NDg=",
"avatar_url": "https://avatars.githubusercontent.com/u/8520548?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/cskau-g",
"html_url": "https://github.com/cskau-g",
"followers_url": "https://api.github.com/users/cskau-g/followers",
"following_url": "https://api.github.com/users/cskau-g/following{/other_user}",
"gists_url": "https://api.github.com/users/cskau-g/gists{/gist_id}",
"starred_url": "https://api.github.com/users/cskau-g/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/cskau-g/subscriptions",
"organizations_url": "https://api.github.com/users/cskau-g/orgs",
"repos_url": "https://api.github.com/users/cskau-g/repos",
"events_url": "https://api.github.com/users/cskau-g/events{/privacy}",
"received_events_url": "https://api.github.com/users/cskau-g/received_events",
"type": "User",
"site_admin": false,
"contributions": 1
},
{
"login": "dmaciejak",
"id": 2658335,
"node_id": "MDQ6VXNlcjI2NTgzMzU=",
"avatar_url": "https://avatars.githubusercontent.com/u/2658335?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/dmaciejak",
"html_url": "https://github.com/dmaciejak",
"followers_url": "https://api.github.com/users/dmaciejak/followers",
"following_url": "https://api.github.com/users/dmaciejak/following{/other_user}",
"gists_url": "https://api.github.com/users/dmaciejak/gists{/gist_id}",
"starred_url": "https://api.github.com/users/dmaciejak/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/dmaciejak/subscriptions",
"organizations_url": "https://api.github.com/users/dmaciejak/orgs",
"repos_url": "https://api.github.com/users/dmaciejak/repos",
"events_url": "https://api.github.com/users/dmaciejak/events{/privacy}",
"received_events_url": "https://api.github.com/users/dmaciejak/received_events",
"type": "User",
"site_admin": false,
"contributions": 1
},
{
"login": "hjiawei",
"id": 7075046,
"node_id": "MDQ6VXNlcjcwNzUwNDY=",
"avatar_url": "https://avatars.githubusercontent.com/u/7075046?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/hjiawei",
"html_url": "https://github.com/hjiawei",
"followers_url": "https://api.github.com/users/hjiawei/followers",
"following_url": "https://api.github.com/users/hjiawei/following{/other_user}",
"gists_url": "https://api.github.com/users/hjiawei/gists{/gist_id}",
"starred_url": "https://api.github.com/users/hjiawei/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/hjiawei/subscriptions",
"organizations_url": "https://api.github.com/users/hjiawei/orgs",
"repos_url": "https://api.github.com/users/hjiawei/repos",
"events_url": "https://api.github.com/users/hjiawei/events{/privacy}",
"received_events_url": "https://api.github.com/users/hjiawei/received_events",
"type": "User",
"site_admin": false,
"contributions": 1
},
{
"login": "Lifan1998",
"id": 34120416,
"node_id": "MDQ6VXNlcjM0MTIwNDE2",
"avatar_url": "https://avatars.githubusercontent.com/u/34120416?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/Lifan1998",
"html_url": "https://github.com/Lifan1998",
"followers_url": "https://api.github.com/users/Lifan1998/followers",
"following_url": "https://api.github.com/users/Lifan1998/following{/other_user}",
"gists_url": "https://api.github.com/users/Lifan1998/gists{/gist_id}",
"starred_url": "https://api.github.com/users/Lifan1998/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/Lifan1998/subscriptions",
"organizations_url": "https://api.github.com/users/Lifan1998/orgs",
"repos_url": "https://api.github.com/users/Lifan1998/repos",
"events_url": "https://api.github.com/users/Lifan1998/events{/privacy}",
"received_events_url": "https://api.github.com/users/Lifan1998/received_events",
"type": "User",
"site_admin": false,
"contributions": 1
},
{
"login": "ludwiktrammer",
"id": 5337669,
"node_id": "MDQ6VXNlcjUzMzc2Njk=",
"avatar_url": "https://avatars.githubusercontent.com/u/5337669?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/ludwiktrammer",
"html_url": "https://github.com/ludwiktrammer",
"followers_url": "https://api.github.com/users/ludwiktrammer/followers",
"following_url": "https://api.github.com/users/ludwiktrammer/following{/other_user}",
"gists_url": "https://api.github.com/users/ludwiktrammer/gists{/gist_id}",
"starred_url": "https://api.github.com/users/ludwiktrammer/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/ludwiktrammer/subscriptions",
"organizations_url": "https://api.github.com/users/ludwiktrammer/orgs",
"repos_url": "https://api.github.com/users/ludwiktrammer/repos",
"events_url": "https://api.github.com/users/ludwiktrammer/events{/privacy}",
"received_events_url": "https://api.github.com/users/ludwiktrammer/received_events",
"type": "User",
"site_admin": false,
"contributions": 1
},
{
"login": "Kaworru",
"id": 1611601,
"node_id": "MDQ6VXNlcjE2MTE2MDE=",
"avatar_url": "https://avatars.githubusercontent.com/u/1611601?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/Kaworru",
"html_url": "https://github.com/Kaworru",
"followers_url": "https://api.github.com/users/Kaworru/followers",
"following_url": "https://api.github.com/users/Kaworru/following{/other_user}",
"gists_url": "https://api.github.com/users/Kaworru/gists{/gist_id}",
"starred_url": "https://api.github.com/users/Kaworru/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/Kaworru/subscriptions",
"organizations_url": "https://api.github.com/users/Kaworru/orgs",
"repos_url": "https://api.github.com/users/Kaworru/repos",
"events_url": "https://api.github.com/users/Kaworru/events{/privacy}",
"received_events_url": "https://api.github.com/users/Kaworru/received_events",
"type": "User",
"site_admin": false,
"contributions": 1
},
{
"login": "mblockelet",
"id": 11016337,
"node_id": "MDQ6VXNlcjExMDE2MzM3",
"avatar_url": "https://avatars.githubusercontent.com/u/11016337?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/mblockelet",
"html_url": "https://github.com/mblockelet",
"followers_url": "https://api.github.com/users/mblockelet/followers",
"following_url": "https://api.github.com/users/mblockelet/following{/other_user}",
"gists_url": "https://api.github.com/users/mblockelet/gists{/gist_id}",
"starred_url": "https://api.github.com/users/mblockelet/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/mblockelet/subscriptions",
"organizations_url": "https://api.github.com/users/mblockelet/orgs",
"repos_url": "https://api.github.com/users/mblockelet/repos",
"events_url": "https://api.github.com/users/mblockelet/events{/privacy}",
"received_events_url": "https://api.github.com/users/mblockelet/received_events",
"type": "User",
"site_admin": false,
"contributions": 1
},
{
"login": "vasiljevic",
"id": 10418572,
"node_id": "MDQ6VXNlcjEwNDE4NTcy",
"avatar_url": "https://avatars.githubusercontent.com/u/10418572?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/vasiljevic",
"html_url": "https://github.com/vasiljevic",
"followers_url": "https://api.github.com/users/vasiljevic/followers",
"following_url": "https://api.github.com/users/vasiljevic/following{/other_user}",
"gists_url": "https://api.github.com/users/vasiljevic/gists{/gist_id}",
"starred_url": "https://api.github.com/users/vasiljevic/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/vasiljevic/subscriptions",
"organizations_url": "https://api.github.com/users/vasiljevic/orgs",
"repos_url": "https://api.github.com/users/vasiljevic/repos",
"events_url": "https://api.github.com/users/vasiljevic/events{/privacy}",
"received_events_url": "https://api.github.com/users/vasiljevic/received_events",
"type": "User",
"site_admin": false,
"contributions": 1
},
{
"login": "oliver-ni",
"id": 20295134,
"node_id": "MDQ6VXNlcjIwMjk1MTM0",
"avatar_url": "https://avatars.githubusercontent.com/u/20295134?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/oliver-ni",
"html_url": "https://github.com/oliver-ni",
"followers_url": "https://api.github.com/users/oliver-ni/followers",
"following_url": "https://api.github.com/users/oliver-ni/following{/other_user}",
"gists_url": "https://api.github.com/users/oliver-ni/gists{/gist_id}",
"starred_url": "https://api.github.com/users/oliver-ni/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/oliver-ni/subscriptions",
"organizations_url": "https://api.github.com/users/oliver-ni/orgs",
"repos_url": "https://api.github.com/users/oliver-ni/repos",
"events_url": "https://api.github.com/users/oliver-ni/events{/privacy}",
"received_events_url": "https://api.github.com/users/oliver-ni/received_events",
"type": "User",
"site_admin": false,
"contributions": 1
},
{
"login": "orionz",
"id": 15224,
"node_id": "MDQ6VXNlcjE1MjI0",
"avatar_url": "https://avatars.githubusercontent.com/u/15224?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/orionz",
"html_url": "https://github.com/orionz",
"followers_url": "https://api.github.com/users/orionz/followers",
"following_url": "https://api.github.com/users/orionz/following{/other_user}",
"gists_url": "https://api.github.com/users/orionz/gists{/gist_id}",
"starred_url": "https://api.github.com/users/orionz/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/orionz/subscriptions",
"organizations_url": "https://api.github.com/users/orionz/orgs",
"repos_url": "https://api.github.com/users/orionz/repos",
"events_url": "https://api.github.com/users/orionz/events{/privacy}",
"received_events_url": "https://api.github.com/users/orionz/received_events",
"type": "User",
"site_admin": false,
"contributions": 1
},
{
"login": "paulmasson",
"id": 3289562,
"node_id": "MDQ6VXNlcjMyODk1NjI=",
"avatar_url": "https://avatars.githubusercontent.com/u/3289562?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/paulmasson",
"html_url": "https://github.com/paulmasson",
"followers_url": "https://api.github.com/users/paulmasson/followers",
"following_url": "https://api.github.com/users/paulmasson/following{/other_user}",
"gists_url": "https://api.github.com/users/paulmasson/gists{/gist_id}",
"starred_url": "https://api.github.com/users/paulmasson/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/paulmasson/subscriptions",
"organizations_url": "https://api.github.com/users/paulmasson/orgs",
"repos_url": "https://api.github.com/users/paulmasson/repos",
"events_url": "https://api.github.com/users/paulmasson/events{/privacy}",
"received_events_url": "https://api.github.com/users/paulmasson/received_events",
"type": "User",
"site_admin": false,
"contributions": 1
},
{
"login": "sgraham",
"id": 1822,
"node_id": "MDQ6VXNlcjE4MjI=",
"avatar_url": "https://avatars.githubusercontent.com/u/1822?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/sgraham",
"html_url": "https://github.com/sgraham",
"followers_url": "https://api.github.com/users/sgraham/followers",
"following_url": "https://api.github.com/users/sgraham/following{/other_user}",
"gists_url": "https://api.github.com/users/sgraham/gists{/gist_id}",
"starred_url": "https://api.github.com/users/sgraham/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/sgraham/subscriptions",
"organizations_url": "https://api.github.com/users/sgraham/orgs",
"repos_url": "https://api.github.com/users/sgraham/repos",
"events_url": "https://api.github.com/users/sgraham/events{/privacy}",
"received_events_url": "https://api.github.com/users/sgraham/received_events",
"type": "User",
"site_admin": false,
"contributions": 1
},
{
"login": "tarjeiba",
"id": 6142182,
"node_id": "MDQ6VXNlcjYxNDIxODI=",
"avatar_url": "https://avatars.githubusercontent.com/u/6142182?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/tarjeiba",
"html_url": "https://github.com/tarjeiba",
"followers_url": "https://api.github.com/users/tarjeiba/followers",
"following_url": "https://api.github.com/users/tarjeiba/following{/other_user}",
"gists_url": "https://api.github.com/users/tarjeiba/gists{/gist_id}",
"starred_url": "https://api.github.com/users/tarjeiba/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/tarjeiba/subscriptions",
"organizations_url": "https://api.github.com/users/tarjeiba/orgs",
"repos_url": "https://api.github.com/users/tarjeiba/repos",
"events_url": "https://api.github.com/users/tarjeiba/events{/privacy}",
"received_events_url": "https://api.github.com/users/tarjeiba/received_events",
"type": "User",
"site_admin": false,
"contributions": 1
},
{
"login": "tahteche",
"id": 6853998,
"node_id": "MDQ6VXNlcjY4NTM5OTg=",
"avatar_url": "https://avatars.githubusercontent.com/u/6853998?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/tahteche",
"html_url": "https://github.com/tahteche",
"followers_url": "https://api.github.com/users/tahteche/followers",
"following_url": "https://api.github.com/users/tahteche/following{/other_user}",
"gists_url": "https://api.github.com/users/tahteche/gists{/gist_id}",
"starred_url": "https://api.github.com/users/tahteche/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/tahteche/subscriptions",
"organizations_url": "https://api.github.com/users/tahteche/orgs",
"repos_url": "https://api.github.com/users/tahteche/repos",
"events_url": "https://api.github.com/users/tahteche/events{/privacy}",
"received_events_url": "https://api.github.com/users/tahteche/received_events",
"type": "User",
"site_admin": false,
"contributions": 1
},
{
"login": "gitter-badger",
"id": 8518239,
"node_id": "MDQ6VXNlcjg1MTgyMzk=",
"avatar_url": "https://avatars.githubusercontent.com/u/8518239?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/gitter-badger",
"html_url": "https://github.com/gitter-badger",
"followers_url": "https://api.github.com/users/gitter-badger/followers",
"following_url": "https://api.github.com/users/gitter-badger/following{/other_user}",
"gists_url": "https://api.github.com/users/gitter-badger/gists{/gist_id}",
"starred_url": "https://api.github.com/users/gitter-badger/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/gitter-badger/subscriptions",
"organizations_url": "https://api.github.com/users/gitter-badger/orgs",
"repos_url": "https://api.github.com/users/gitter-badger/repos",
"events_url": "https://api.github.com/users/gitter-badger/events{/privacy}",
"received_events_url": "https://api.github.com/users/gitter-badger/received_events",
"type": "User",
"site_admin": false,
"contributions": 1
},
{
"login": "torenord",
"id": 395169,
"node_id": "MDQ6VXNlcjM5NTE2OQ==",
"avatar_url": "https://avatars.githubusercontent.com/u/395169?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/torenord",
"html_url": "https://github.com/torenord",
"followers_url": "https://api.github.com/users/torenord/followers",
"following_url": "https://api.github.com/users/torenord/following{/other_user}",
"gists_url": "https://api.github.com/users/torenord/gists{/gist_id}",
"starred_url": "https://api.github.com/users/torenord/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/torenord/subscriptions",
"organizations_url": "https://api.github.com/users/torenord/orgs",
"repos_url": "https://api.github.com/users/torenord/repos",
"events_url": "https://api.github.com/users/torenord/events{/privacy}",
"received_events_url": "https://api.github.com/users/torenord/received_events",
"type": "User",
"site_admin": false,
"contributions": 1
},
{
"login": "zacklukem",
"id": 8787486,
"node_id": "MDQ6VXNlcjg3ODc0ODY=",
"avatar_url": "https://avatars.githubusercontent.com/u/8787486?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/zacklukem",
"html_url": "https://github.com/zacklukem",
"followers_url": "https://api.github.com/users/zacklukem/followers",
"following_url": "https://api.github.com/users/zacklukem/following{/other_user}",
"gists_url": "https://api.github.com/users/zacklukem/gists{/gist_id}",
"starred_url": "https://api.github.com/users/zacklukem/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/zacklukem/subscriptions",
"organizations_url": "https://api.github.com/users/zacklukem/orgs",
"repos_url": "https://api.github.com/users/zacklukem/repos",
"events_url": "https://api.github.com/users/zacklukem/events{/privacy}",
"received_events_url": "https://api.github.com/users/zacklukem/received_events",
"type": "User",
"site_admin": false,
"contributions": 1
},
{
"login": "gruns",
"id": 1041265,
"node_id": "MDQ6VXNlcjEwNDEyNjU=",
"avatar_url": "https://avatars.githubusercontent.com/u/1041265?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/gruns",
"html_url": "https://github.com/gruns",
"followers_url": "https://api.github.com/users/gruns/followers",
"following_url": "https://api.github.com/users/gruns/following{/other_user}",
"gists_url": "https://api.github.com/users/gruns/gists{/gist_id}",
"starred_url": "https://api.github.com/users/gruns/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/gruns/subscriptions",
"organizations_url": "https://api.github.com/users/gruns/orgs",
"repos_url": "https://api.github.com/users/gruns/repos",
"events_url": "https://api.github.com/users/gruns/events{/privacy}",
"received_events_url": "https://api.github.com/users/gruns/received_events",
"type": "User",
"site_admin": false,
"contributions": 1
},
{
"login": "libremente",
"id": 25111463,
"node_id": "MDQ6VXNlcjI1MTExNDYz",
"avatar_url": "https://avatars.githubusercontent.com/u/25111463?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/libremente",
"html_url": "https://github.com/libremente",
"followers_url": "https://api.github.com/users/libremente/followers",
"following_url": "https://api.github.com/users/libremente/following{/other_user}",
"gists_url": "https://api.github.com/users/libremente/gists{/gist_id}",
"starred_url": "https://api.github.com/users/libremente/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/libremente/subscriptions",
"organizations_url": "https://api.github.com/users/libremente/orgs",
"repos_url": "https://api.github.com/users/libremente/repos",
"events_url": "https://api.github.com/users/libremente/events{/privacy}",
"received_events_url": "https://api.github.com/users/libremente/received_events",
"type": "User",
"site_admin": false,
"contributions": 1
},
{
"login": "masterkni666",
"id": 19353314,
"node_id": "MDQ6VXNlcjE5MzUzMzE0",
"avatar_url": "https://avatars.githubusercontent.com/u/19353314?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/masterkni666",
"html_url": "https://github.com/masterkni666",
"followers_url": "https://api.github.com/users/masterkni666/followers",
"following_url": "https://api.github.com/users/masterkni666/following{/other_user}",
"gists_url": "https://api.github.com/users/masterkni666/gists{/gist_id}",
"starred_url": "https://api.github.com/users/masterkni666/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/masterkni666/subscriptions",
"organizations_url": "https://api.github.com/users/masterkni666/orgs",
"repos_url": "https://api.github.com/users/masterkni666/repos",
"events_url": "https://api.github.com/users/masterkni666/events{/privacy}",
"received_events_url": "https://api.github.com/users/masterkni666/received_events",
"type": "User",
"site_admin": false,
"contributions": 1
},
{
"login": "slobber",
"id": 1853799,
"node_id": "MDQ6VXNlcjE4NTM3OTk=",
"avatar_url": "https://avatars.githubusercontent.com/u/1853799?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/slobber",
"html_url": "https://github.com/slobber",
"followers_url": "https://api.github.com/users/slobber/followers",
"following_url": "https://api.github.com/users/slobber/following{/other_user}",
"gists_url": "https://api.github.com/users/slobber/gists{/gist_id}",
"starred_url": "https://api.github.com/users/slobber/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/slobber/subscriptions",
"organizations_url": "https://api.github.com/users/slobber/orgs",
"repos_url": "https://api.github.com/users/slobber/repos",
"events_url": "https://api.github.com/users/slobber/events{/privacy}",
"received_events_url": "https://api.github.com/users/slobber/received_events",
"type": "User",
"site_admin": false,
"contributions": 1
}
],
"disabled": false,
"environment": "dotcom",
"help_url": "https://docs.github.com",
"hostname": "github.com",
"is_project_page": true,
"is_user_page": false,
"issues_url": "https://github.com/skulpt/skulpt/issues",
"language": "Python",
"latest_release": {
"url": "https://api.github.com/repos/skulpt/skulpt/releases/38207356",
"assets_url": "https://api.github.com/repos/skulpt/skulpt/releases/38207356/assets",
"upload_url": "https://uploads.github.com/repos/skulpt/skulpt/releases/38207356/assets{?name,label}",
"html_url": "https://github.com/skulpt/skulpt/releases/tag/1.3.0",
"id": 38207356,
"author": {
"login": "s-cork",
"id": 36813890,
"node_id": "MDQ6VXNlcjM2ODEzODkw",
"avatar_url": "https://avatars.githubusercontent.com/u/36813890?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/s-cork",
"html_url": "https://github.com/s-cork",
"followers_url": "https://api.github.com/users/s-cork/followers",
"following_url": "https://api.github.com/users/s-cork/following{/other_user}",
"gists_url": "https://api.github.com/users/s-cork/gists{/gist_id}",
"starred_url": "https://api.github.com/users/s-cork/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/s-cork/subscriptions",
"organizations_url": "https://api.github.com/users/s-cork/orgs",
"repos_url": "https://api.github.com/users/s-cork/repos",
"events_url": "https://api.github.com/users/s-cork/events{/privacy}",
"received_events_url": "https://api.github.com/users/s-cork/received_events",
"type": "User",
"site_admin": false
},
"node_id": "MDc6UmVsZWFzZTM4MjA3MzU2",
"tag_name": "1.3.0",
"target_commitish": "master",
"name": "Internal updates and breaking changes",
"draft": false,
"prerelease": false,
"created_at": "2021-02-23 18:56:55 UTC",
"published_at": "2021-02-28 13:19:08 UTC",
"assets": [
],
"tarball_url": "https://api.github.com/repos/skulpt/skulpt/tarball/1.3.0",
"zipball_url": "https://api.github.com/repos/skulpt/skulpt/zipball/1.3.0",
"body": "This is a list of changes implemented with this version. Some are internal and others are part of the skulpt API (if we had one 🙂 ).\r\n\r\n\r\n**python 2 incorrectness: (for those still using python 2 in production)**\r\n- `long`\r\n - when adding two long objects the result is likely to be an `int`\r\n- `method`\r\n - unbound methods are no longer supported\r\n- The `base` class for all type objects will be `object` even if the base class is not specified\r\n\r\n\r\n**skulpt api**\r\n- `Sk.builtin.object.prototype.genericGetAttr` -> `Sk.generic.getAttr`\r\n- `Sk.builtin.object.prototype.genericSetAttr` -> `Sk.generic.setAttr`\r\n- `Sk.builtin.type.typeLookup` removed and replaced by `Sk.abstr.typeLookup`\r\n- `biginter.js` replaced by the [jsbi](https://github.com/GoogleChromeLabs/jsbi) library\r\n- `Sk.abstr.inherits` removed - inheritance exclusively dealt with by `Sk.abstr.setUpInheritance`\r\n- `Sk.misceval.objectRepr` returns a js string (previously `Sk.builtin.str`)\r\n- `Sk.__future__.python3` becomes the default. Those wishing to use `python2` must define this in the `Sk.configure` object. \r\n- `Sk.abstr.binary_op_`, `Sk.abstr.binary_iop_`, `Sk.abstr.unary_op_` removed - use `Sk.abstr.numberBinOp`, `Sk.abstr.numberInplaceBinOp`, `Sk.abstr.numberUnaryOp` instead. \r\n\r\n\r\n\r\n**call signatures of builtins**\r\n- `new` is required for (almost) all builtin types\r\n - 3 exceptions - `Sk.builtin.bool`, `Sk.builtin.none`, `Sk.builtin.NotImplemented`\r\n - These 3 will always return their respective constant(s) and are thus not required to be used as constructors. \r\n- Restricted parameters for directly accessing a constructor of an `Sk.builtin` type\r\n- assertion failures raised in dev mode if `new` is not used - if using in production these error will not be raised. This may be a gotcha for anyone using this version.\r\n\r\n\r\n\r\n| type | params | notes |\r\n|---|---|---|\r\n| `Sk.builtin.int_` | `number, JSBI (bigint), string, undefined}` | can also be called with a python object that has `nb$int` defined |\r\n| `Sk.builtin.float_` | `number, undefined` | can also be called with a python object that has `nb$float` defined |\r\n| `Sk.builtin.complex` | `number, number` | |\r\n| `Sk.builtin.list` | `{Array=}` | Array of py objects or can be called with a python iterable|\r\n| `Sk.builtin.tuple` | `{Array=}` | Array of py objects can be called with a python iterable|\r\n| `Sk.builtin.set` | `{Array=}` | Array of py objects or can be called with a python iterable|\r\n| `Sk.builtin.dict` | `{Array=}` | key/value pairs - only python objects |\r\n| `Sk.builtin.str` | `{*}` | |\r\n| `Sk.builtin.bool` | `{*}` | |\r\n\r\nNote that you should only pass a number to the `int` javascript constructor if it's absolute value is less than `Number.MAX_SAFE_INTEGER`. Similarly you should only pass a `JSBI (bigint)` to the int constructor if it's absolute value is larger than `Number.MAX_SAFE_INTEGER`.\r\n\r\n\r\n\r\n\r\n**Major changes**\r\n- All type objects are now callable using their respective `tp$call` methods inherited from `Sk.builtin.type`\r\n- All native type objects will require a `tp$new` and `tp$init` method (maybe inherited by `Sk.builtin.object`)\r\n- All type objects are javascript instances of `Sk.builtin.type`\r\n- All single inherited objects follow javascript inheritance\r\n- All native type objects now have the following and replaces the use of `Sk.builtin.func` for all dunder function/methods.\r\n - `wrapper_descriptors` aka `slot_wrappers`\r\n - `method_descriptors` \r\n - `classmethod_descriptors`\r\n - `getset_descriptors` aka `attributes`/`member_descriptors`\r\n- `Sk.builtin.sk_method` is an alternative to `Sk.builtin.func` and is used by the above `descriptor` types\r\n- mangled names are never passed to the user but instead are an attribute on `Sk.builtin.str` instances as `$mangled`\r\n- `mappingproxy` added\r\n- `$d` removed on all type objects.\r\n- `attributes` of a type object now only appear on the `prototype`. Previously these appeared on both the `type` object and the `prototype`\r\n\r\n\r\n\r\n**Additions**\r\n- `dict`, `set`, `tuple` are suspendible\r\n- `map`, `filter`, `zip`, `reversed`, `enumerate` are suspendible\r\n- `classmethod`, `property`, `staticmethod` have native skulpt implementations\r\n- `super` can now be unbound [see this explanation](https://stackoverflow.com/questions/30190185/how-can-i-use-super-with-one-argument-in-python/30190341#30190341)\r\n- `Sk.builtin.func` objects gain a `qualname` in compile code\r\n- API for building native types \r\n - `Sk.abstr.buildNativeClass`\r\n- `range_iterator` class added\r\n- `reverse` iterators added for `list`, `dict_views`, `range`\r\n- `|` operator valid for `dict`, `dict_keys`, `dict_items`\r\n- `Counter` has number slots added\r\n- python docstrings now work\r\n\r\n**`Sk.abstr.`**\r\n- `objectHash`\r\n- `buildNativeClass`\r\n- `buildIteratorClass`\r\n- `setUpBuiltinMro`\r\n- `setUpMethods`\r\n- `setUpGetSets`\r\n- `setUpSlots`\r\n- `setUpClassMethod`\r\n- `setUpBaseInheritance`\r\n- `setUpModuleMethod`\r\n- `checkNoKwargs`\r\n- `checkNoArgs`\r\n- `checkOneArg`\r\n- `checkArgsLen` \r\n- `copyKeywordsToNamedArgs`\r\n\r\n\r\n**`Sk.generic.`**\r\n- `getAttr`\r\n- `setAttr`\r\n- `new` \r\n- `newMethodDef`\r\n- `iterNextWithArray`\r\n- `iterNextWithArrayCheckSize`\r\n- `iterLengthHintWithArrayMethodDef`\r\n- `iterReverseLengthHintMethodDef`\r\n- `getSetDict`\r\n\r\n**`Sk.misceval.`**\r\n- `asIndex` - will return the internal representation of the integer - or undefined if not indexable - could be a number or a bigint (JSBI) \r\n- `asIndexOrThrow` - does `asIndex` but throws an error if the number is not indexable - with an optional message parameter.\r\n- `asIndexSized` - throws an error if the object is not indexable, returns a Number always, Option to throw an error if the index is larger than `Number.MAX_SAFE_INTEGER`. This is the goto method for most builtins now. \r\n- `Iterator` - a python class that easily wraps an iterator\r\n- `arrayFromIterable` - optional canSuspend implementation that returns an array from a python iterator\r\n- `iterArray` - like `iterFor` but with an array rather than a python iterator\r\n\r\n**`slotdefs.js`**\r\n- contains all the information about mapping slots to dunders and vice versa.\r\n\r\n\r\n\r\n**slot changes**\r\n*only relevant for those developers and those writing slot functions directly - hopefully very few users*\r\n- `mp$length` replaced by `sq$length` in the codebase\r\n- `sq$ass_item`/`sq$ass_slice` replaced with `mp$ass_subscript`\r\n- `nb$nonzero` replaced with `nb$bool` and switch version to py2/py3 takes care of mapping the appropriate dunder method.\r\n- `mp$del_subscript` replaced by `mp$ass_subscript` (as per Cpython)\r\n - deleting vs setting an item is based on the call signature\r\n - `mp$ass_subscript(key, value)` -> set item\r\n - `mp$ass_subscript(key)` -> delete item\r\n- If a dunder func is defined on a user defined class then the slot function is guaranteed. \r\n - e.g. `__len__` defined guarantees `sq$length`. \r\n - A slot function defined by skulpt in this way throws the appropriate errors and converts the return value to the appropriate internal object. \r\n - `sq$length` called internally: `__len__` is called using `Sk.misceval.callsim(OrSuspend)Array`. \r\n - The result is checked to be an `int` and then converted to `number` since `sq$length` expects a `number`.\r\n- `tp$str` removed from some builtins as per Python 3.8 changes\r\n- If `tp$richcompare` is defined - wrapper functions `ob$eq` etc are created - this way `Sk.misceval.richCompareBool` need only check for the existence of an `ob$*` slot. \r\n - in fact - the existence of these slots is guaranteed since they are inherited from `Sk.builtin.object`\r\n- `tp$mro`/`tp$bases` are Js Arrays rather than `Sk.builtin.tuple`\r\n- `tp$str` and `$r` for errors were changed as per Cpython.\r\n- `nb$int_` -> `nb$int`\r\n- `nb$lng` -> `nb$long`\r\n- `nb$float_` -> `nb$float`\r\n- return values for certain slot functions have changed\r\n - `tp$hash` - should return a javascript number less than `Number.MAX_SAFE_INTEGER` can be postive or negative\r\n - `nb$index` - should return a javascript number or BigInt (older browsers should be a JSBI BigInt)\r\n- `tp$name` was removed from instances of `Sk.builtin.func` and `Sk.buitin.method` in favour of `$name` since it's `tp$name` should be the `type name`\r\n\r\n\r\n**flags - only relevant internally**\r\n- `sk$acceptable_as_base_class` used for some type objects\r\n- `sk$object` every skulpt object will have this flag. An easy way to determine if you have a skulpt object or a javascript object\r\n- `hp$type` all instance of `sk$klass` types\r\n- `sk$prototypical` do we need to walk up the MRO or can we just check the `prototype`\r\n- `sk$builtinBase` the most derived base which is a native skulpt class\r\n- `sk$baseClass` builtin classes that are direct children of `object`\r\n\r\n\r\n\r\n\r\n**other internal changes**\r\n- the use of `numPromoteFunc` was removed for performance improvements in the implementation of `Sk.asbtr.numberBinOp`\r\n - It was performance beneficial to leave the promoting to the respective `nb$` slots\r\n - `int` binop slots only deal with instance of `int`\r\n - `float` binop slots deal with instances of `float` and `int`\r\n - `complex` binop slots deal with instances of `complex`, `float` and `int`\r\n- since `long` was effectively removed when a number is larger than `Number.MAX_SAFE_INTEGER` it's `.v` value is a `BigInt`. if `BigInt` is not available in the browser then the `JSBI` library is used to replicate `BigInt` functionality. \r\n- `set` and `frozenset` now share much of their implementation\r\n- `collections` module rewritten using new api\r\n- `itertools` module rewritten using new api - these are now type objects rather than instances of `generator`\r\n- `operator` module rewritten using new api\r\n- `math` module adapted to the new api\r\n- `dict` and `set` throw errors if the objects change size during iteration as per Cpython.\r\n - fully tested\r\n- `Sk.builtin.check*` moved to `src/check.js`\r\n- `number.js` removed\r\n- `numtype.js` removed\r\n- `seqtype.js` removed\r\n- `mp$subscript` should *not* be called by a js object (see changes in `random.js`)\r\n- `quick$lookup` added to `dict.prototype` which is a fast way to lookup up `str` keys\r\n- `dict.prototype.entries` rather than has values that are `arrays` of key value pairs\r\n- `object.prototype.tp$hash` will no longer add `$savedHash_` to the object - instead it uses a javascript map and assigns objects to a random number less than `Number.MAX_SAFE_INTEGER` rather than incrementing the hash value each time. \r\n- `float.prototype.tp$hash` for integers this will be the same value as `Sk.builtin.int.prototype.tp$hash` for non integers this will be a random number less than `Number.MAX_SAFE_INTEGER`. Previously this was the number rounded down - but this creates a lot of collisions. \r\n\r\n"
},
"license": {
"key": "other",
"name": "Other",
"spdx_id": "NOASSERTION",
"url": null,
"node_id": "MDc6TGljZW5zZTA="
},
"organization_members": [
{
"login": "albertjan",
"id": 301791,
"node_id": "MDQ6VXNlcjMwMTc5MQ==",
"avatar_url": "https://avatars.githubusercontent.com/u/301791?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/albertjan",
"html_url": "https://github.com/albertjan",
"followers_url": "https://api.github.com/users/albertjan/followers",
"following_url": "https://api.github.com/users/albertjan/following{/other_user}",
"gists_url": "https://api.github.com/users/albertjan/gists{/gist_id}",
"starred_url": "https://api.github.com/users/albertjan/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/albertjan/subscriptions",
"organizations_url": "https://api.github.com/users/albertjan/orgs",
"repos_url": "https://api.github.com/users/albertjan/repos",
"events_url": "https://api.github.com/users/albertjan/events{/privacy}",
"received_events_url": "https://api.github.com/users/albertjan/received_events",
"type": "User",
"site_admin": false
}
],
"owner": {
"avatar_url": "https://avatars.githubusercontent.com/u/5229490?v=4",
"bio": null,
"blog": null,
"collaborators": null,
"company": null,
"created_at": "2013-08-14 12:14:41 UTC",
"description": "A Javascript implementation of Python in the browser for education",
"email": null,
"followers": 0,
"following": 0,
"has_organization_projects": true,
"has_repository_projects": true,
"hireable": null,
"html_url": "https://github.com/skulpt",
"id": 5229490,
"is_verified": false,
"location": null,
"login": "skulpt",
"name": "Skulpt",
"node_id": "MDEyOk9yZ2FuaXphdGlvbjUyMjk0OTA=",
"public_gists": 0,
"public_repos": 2,
"type": "Organization",
"updated_at": "2015-05-07 07:31:42 UTC"
},
"owner_gravatar_url": "https://github.com/skulpt.png",
"owner_name": "skulpt",
"owner_url": "https://github.com/skulpt",
"pages_env": "dotcom",
"pages_hostname": "github.io",
"private": false,
"project_tagline": "Skulpt is a Javascript implementation of the Python programming language",
"project_title": "skulpt",
"public_repositories": [
{
"id": 4512368,
"node_id": "MDEwOlJlcG9zaXRvcnk0NTEyMzY4",
"name": "skulpt",
"full_name": "skulpt/skulpt",
"private": false,
"owner": {
"login": "skulpt",
"id": 5229490,
"node_id": "MDEyOk9yZ2FuaXphdGlvbjUyMjk0OTA=",
"avatar_url": "https://avatars.githubusercontent.com/u/5229490?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/skulpt",
"html_url": "https://github.com/skulpt",
"followers_url": "https://api.github.com/users/skulpt/followers",
"following_url": "https://api.github.com/users/skulpt/following{/other_user}",
"gists_url": "https://api.github.com/users/skulpt/gists{/gist_id}",
"starred_url": "https://api.github.com/users/skulpt/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/skulpt/subscriptions",
"organizations_url": "https://api.github.com/users/skulpt/orgs",
"repos_url": "https://api.github.com/users/skulpt/repos",
"events_url": "https://api.github.com/users/skulpt/events{/privacy}",
"received_events_url": "https://api.github.com/users/skulpt/received_events",
"type": "Organization",
"site_admin": false
},
"html_url": "https://github.com/skulpt/skulpt",
"description": "Skulpt is a Javascript implementation of the Python programming language",
"fork": false,
"url": "https://api.github.com/repos/skulpt/skulpt",
"forks_url": "https://api.github.com/repos/skulpt/skulpt/forks",
"keys_url": "https://api.github.com/repos/skulpt/skulpt/keys{/key_id}",
"collaborators_url": "https://api.github.com/repos/skulpt/skulpt/collaborators{/collaborator}",
"teams_url": "https://api.github.com/repos/skulpt/skulpt/teams",
"hooks_url": "https://api.github.com/repos/skulpt/skulpt/hooks",
"issue_events_url": "https://api.github.com/repos/skulpt/skulpt/issues/events{/number}",
"events_url": "https://api.github.com/repos/skulpt/skulpt/events",
"assignees_url": "https://api.github.com/repos/skulpt/skulpt/assignees{/user}",
"branches_url": "https://api.github.com/repos/skulpt/skulpt/branches{/branch}",
"tags_url": "https://api.github.com/repos/skulpt/skulpt/tags",
"blobs_url": "https://api.github.com/repos/skulpt/skulpt/git/blobs{/sha}",
"git_tags_url": "https://api.github.com/repos/skulpt/skulpt/git/tags{/sha}",
"git_refs_url": "https://api.github.com/repos/skulpt/skulpt/git/refs{/sha}",
"trees_url": "https://api.github.com/repos/skulpt/skulpt/git/trees{/sha}",
"statuses_url": "https://api.github.com/repos/skulpt/skulpt/statuses/{sha}",
"languages_url": "https://api.github.com/repos/skulpt/skulpt/languages",
"stargazers_url": "https://api.github.com/repos/skulpt/skulpt/stargazers",
"contributors_url": "https://api.github.com/repos/skulpt/skulpt/contributors",
"subscribers_url": "https://api.github.com/repos/skulpt/skulpt/subscribers",
"subscription_url": "https://api.github.com/repos/skulpt/skulpt/subscription",
"commits_url": "https://api.github.com/repos/skulpt/skulpt/commits{/sha}",
"git_commits_url": "https://api.github.com/repos/skulpt/skulpt/git/commits{/sha}",
"comments_url": "https://api.github.com/repos/skulpt/skulpt/comments{/number}",
"issue_comment_url": "https://api.github.com/repos/skulpt/skulpt/issues/comments{/number}",
"contents_url": "https://api.github.com/repos/skulpt/skulpt/contents/{+path}",
"compare_url": "https://api.github.com/repos/skulpt/skulpt/compare/{base}...{head}",
"merges_url": "https://api.github.com/repos/skulpt/skulpt/merges",
"archive_url": "https://api.github.com/repos/skulpt/skulpt/{archive_format}{/ref}",
"downloads_url": "https://api.github.com/repos/skulpt/skulpt/downloads",
"issues_url": "https://api.github.com/repos/skulpt/skulpt/issues{/number}",
"pulls_url": "https://api.github.com/repos/skulpt/skulpt/pulls{/number}",
"milestones_url": "https://api.github.com/repos/skulpt/skulpt/milestones{/number}",
"notifications_url": "https://api.github.com/repos/skulpt/skulpt/notifications{?since,all,participating}",
"labels_url": "https://api.github.com/repos/skulpt/skulpt/labels{/name}",
"releases_url": "https://api.github.com/repos/skulpt/skulpt/releases{/id}",
"deployments_url": "https://api.github.com/repos/skulpt/skulpt/deployments",
"created_at": "2012-05-31 20:13:13 UTC",
"updated_at": "2021-05-16 13:23:01 UTC",
"pushed_at": "2021-05-17 12:14:41 UTC",
"git_url": "git://github.com/skulpt/skulpt.git",
"ssh_url": "git@github.com:skulpt/skulpt.git",
"clone_url": "https://github.com/skulpt/skulpt.git",
"svn_url": "https://github.com/skulpt/skulpt",
"homepage": null,
"size": 89098,
"stargazers_count": 2990,
"watchers_count": 2990,
"language": "Python",
"has_issues": true,
"has_projects": true,
"has_downloads": true,
"has_wiki": true,
"has_pages": true,
"forks_count": 838,
"mirror_url": null,
"archived": false,
"disabled": false,
"open_issues_count": 239,
"license": {
"key": "other",
"name": "Other",
"spdx_id": "NOASSERTION",
"url": null,
"node_id": "MDc6TGljZW5zZTA="
},
"topics": [
],
"forks": 838,
"open_issues": 239,
"watchers": 2990,
"default_branch": "master",
"permissions": {
"admin": false,
"push": false,
"pull": false
}
},
{
"id": 12197356,
"node_id": "MDEwOlJlcG9zaXRvcnkxMjE5NzM1Ng==",
"name": "skulpt-dist",
"full_name": "skulpt/skulpt-dist",
"private": false,
"owner": {
"login": "skulpt",
"id": 5229490,
"node_id": "MDEyOk9yZ2FuaXphdGlvbjUyMjk0OTA=",
"avatar_url": "https://avatars.githubusercontent.com/u/5229490?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/skulpt",
"html_url": "https://github.com/skulpt",
"followers_url": "https://api.github.com/users/skulpt/followers",
"following_url": "https://api.github.com/users/skulpt/following{/other_user}",
"gists_url": "https://api.github.com/users/skulpt/gists{/gist_id}",
"starred_url": "https://api.github.com/users/skulpt/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/skulpt/subscriptions",
"organizations_url": "https://api.github.com/users/skulpt/orgs",
"repos_url": "https://api.github.com/users/skulpt/repos",
"events_url": "https://api.github.com/users/skulpt/events{/privacy}",
"received_events_url": "https://api.github.com/users/skulpt/received_events",
"type": "Organization",
"site_admin": false
},
"html_url": "https://github.com/skulpt/skulpt-dist",
"description": "Skulpt repository to facilitate bower integration.",
"fork": false,
"url": "https://api.github.com/repos/skulpt/skulpt-dist",
"forks_url": "https://api.github.com/repos/skulpt/skulpt-dist/forks",
"keys_url": "https://api.github.com/repos/skulpt/skulpt-dist/keys{/key_id}",
"collaborators_url": "https://api.github.com/repos/skulpt/skulpt-dist/collaborators{/collaborator}",
"teams_url": "https://api.github.com/repos/skulpt/skulpt-dist/teams",
"hooks_url": "https://api.github.com/repos/skulpt/skulpt-dist/hooks",
"issue_events_url": "https://api.github.com/repos/skulpt/skulpt-dist/issues/events{/number}",
"events_url": "https://api.github.com/repos/skulpt/skulpt-dist/events",
"assignees_url": "https://api.github.com/repos/skulpt/skulpt-dist/assignees{/user}",
"branches_url": "https://api.github.com/repos/skulpt/skulpt-dist/branches{/branch}",
"tags_url": "https://api.github.com/repos/skulpt/skulpt-dist/tags",
"blobs_url": "https://api.github.com/repos/skulpt/skulpt-dist/git/blobs{/sha}",
"git_tags_url": "https://api.github.com/repos/skulpt/skulpt-dist/git/tags{/sha}",
"git_refs_url": "https://api.github.com/repos/skulpt/skulpt-dist/git/refs{/sha}",
"trees_url": "https://api.github.com/repos/skulpt/skulpt-dist/git/trees{/sha}",
"statuses_url": "https://api.github.com/repos/skulpt/skulpt-dist/statuses/{sha}",
"languages_url": "https://api.github.com/repos/skulpt/skulpt-dist/languages",
"stargazers_url": "https://api.github.com/repos/skulpt/skulpt-dist/stargazers",
"contributors_url": "https://api.github.com/repos/skulpt/skulpt-dist/contributors",
"subscribers_url": "https://api.github.com/repos/skulpt/skulpt-dist/subscribers",
"subscription_url": "https://api.github.com/repos/skulpt/skulpt-dist/subscription",
"commits_url": "https://api.github.com/repos/skulpt/skulpt-dist/commits{/sha}",
"git_commits_url": "https://api.github.com/repos/skulpt/skulpt-dist/git/commits{/sha}",
"comments_url": "https://api.github.com/repos/skulpt/skulpt-dist/comments{/number}",
"issue_comment_url": "https://api.github.com/repos/skulpt/skulpt-dist/issues/comments{/number}",
"contents_url": "https://api.github.com/repos/skulpt/skulpt-dist/contents/{+path}",
"compare_url": "https://api.github.com/repos/skulpt/skulpt-dist/compare/{base}...{head}",
"merges_url": "https://api.github.com/repos/skulpt/skulpt-dist/merges",
"archive_url": "https://api.github.com/repos/skulpt/skulpt-dist/{archive_format}{/ref}",
"downloads_url": "https://api.github.com/repos/skulpt/skulpt-dist/downloads",
"issues_url": "https://api.github.com/repos/skulpt/skulpt-dist/issues{/number}",
"pulls_url": "https://api.github.com/repos/skulpt/skulpt-dist/pulls{/number}",
"milestones_url": "https://api.github.com/repos/skulpt/skulpt-dist/milestones{/number}",
"notifications_url": "https://api.github.com/repos/skulpt/skulpt-dist/notifications{?since,all,participating}",
"labels_url": "https://api.github.com/repos/skulpt/skulpt-dist/labels{/name}",
"releases_url": "https://api.github.com/repos/skulpt/skulpt-dist/releases{/id}",
"deployments_url": "https://api.github.com/repos/skulpt/skulpt-dist/deployments",
"created_at": "2013-08-18 15:39:41 UTC",
"updated_at": "2021-04-03 00:07:18 UTC",
"pushed_at": "2021-02-23 19:00:13 UTC",
"git_url": "git://github.com/skulpt/skulpt-dist.git",
"ssh_url": "git@github.com:skulpt/skulpt-dist.git",
"clone_url": "https://github.com/skulpt/skulpt-dist.git",
"svn_url": "https://github.com/skulpt/skulpt-dist",
"homepage": null,
"size": 25474,
"stargazers_count": 18,
"watchers_count": 18,
"language": "JavaScript",
"has_issues": true,
"has_projects": true,
"has_downloads": true,
"has_wiki": true,
"has_pages": false,
"forks_count": 30,
"mirror_url": null,
"archived": false,
"disabled": false,
"open_issues_count": 1,
"license": null,
"topics": [
],
"forks": 30,
"open_issues": 1,
"watchers": 18,
"default_branch": "master",
"permissions": {
"admin": false,
"push": false,
"pull": false
}
}
],
"releases": [
{
"url": "https://api.github.com/repos/skulpt/skulpt/releases/38207356",
"assets_url": "https://api.github.com/repos/skulpt/skulpt/releases/38207356/assets",
"upload_url": "https://uploads.github.com/repos/skulpt/skulpt/releases/38207356/assets{?name,label}",
"html_url": "https://github.com/skulpt/skulpt/releases/tag/1.3.0",
"id": 38207356,
"author": {
"login": "s-cork",
"id": 36813890,
"node_id": "MDQ6VXNlcjM2ODEzODkw",
"avatar_url": "https://avatars.githubusercontent.com/u/36813890?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/s-cork",
"html_url": "https://github.com/s-cork",
"followers_url": "https://api.github.com/users/s-cork/followers",
"following_url": "https://api.github.com/users/s-cork/following{/other_user}",
"gists_url": "https://api.github.com/users/s-cork/gists{/gist_id}",
"starred_url": "https://api.github.com/users/s-cork/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/s-cork/subscriptions",
"organizations_url": "https://api.github.com/users/s-cork/orgs",
"repos_url": "https://api.github.com/users/s-cork/repos",
"events_url": "https://api.github.com/users/s-cork/events{/privacy}",
"received_events_url": "https://api.github.com/users/s-cork/received_events",
"type": "User",
"site_admin": false
},
"node_id": "MDc6UmVsZWFzZTM4MjA3MzU2",
"tag_name": "1.3.0",
"target_commitish": "master",
"name": "Internal updates and breaking changes",
"draft": false,
"prerelease": false,
"created_at": "2021-02-23 18:56:55 UTC",
"published_at": "2021-02-28 13:19:08 UTC",
"assets": [
],
"tarball_url": "https://api.github.com/repos/skulpt/skulpt/tarball/1.3.0",
"zipball_url": "https://api.github.com/repos/skulpt/skulpt/zipball/1.3.0",
"body": "This is a list of changes implemented with this version. Some are internal and others are part of the skulpt API (if we had one 🙂 ).\r\n\r\n\r\n**python 2 incorrectness: (for those still using python 2 in production)**\r\n- `long`\r\n - when adding two long objects the result is likely to be an `int`\r\n- `method`\r\n - unbound methods are no longer supported\r\n- The `base` class for all type objects will be `object` even if the base class is not specified\r\n\r\n\r\n**skulpt api**\r\n- `Sk.builtin.object.prototype.genericGetAttr` -> `Sk.generic.getAttr`\r\n- `Sk.builtin.object.prototype.genericSetAttr` -> `Sk.generic.setAttr`\r\n- `Sk.builtin.type.typeLookup` removed and replaced by `Sk.abstr.typeLookup`\r\n- `biginter.js` replaced by the [jsbi](https://github.com/GoogleChromeLabs/jsbi) library\r\n- `Sk.abstr.inherits` removed - inheritance exclusively dealt with by `Sk.abstr.setUpInheritance`\r\n- `Sk.misceval.objectRepr` returns a js string (previously `Sk.builtin.str`)\r\n- `Sk.__future__.python3` becomes the default. Those wishing to use `python2` must define this in the `Sk.configure` object. \r\n- `Sk.abstr.binary_op_`, `Sk.abstr.binary_iop_`, `Sk.abstr.unary_op_` removed - use `Sk.abstr.numberBinOp`, `Sk.abstr.numberInplaceBinOp`, `Sk.abstr.numberUnaryOp` instead. \r\n\r\n\r\n\r\n**call signatures of builtins**\r\n- `new` is required for (almost) all builtin types\r\n - 3 exceptions - `Sk.builtin.bool`, `Sk.builtin.none`, `Sk.builtin.NotImplemented`\r\n - These 3 will always return their respective constant(s) and are thus not required to be used as constructors. \r\n- Restricted parameters for directly accessing a constructor of an `Sk.builtin` type\r\n- assertion failures raised in dev mode if `new` is not used - if using in production these error will not be raised. This may be a gotcha for anyone using this version.\r\n\r\n\r\n\r\n| type | params | notes |\r\n|---|---|---|\r\n| `Sk.builtin.int_` | `number, JSBI (bigint), string, undefined}` | can also be called with a python object that has `nb$int` defined |\r\n| `Sk.builtin.float_` | `number, undefined` | can also be called with a python object that has `nb$float` defined |\r\n| `Sk.builtin.complex` | `number, number` | |\r\n| `Sk.builtin.list` | `{Array=}` | Array of py objects or can be called with a python iterable|\r\n| `Sk.builtin.tuple` | `{Array=}` | Array of py objects can be called with a python iterable|\r\n| `Sk.builtin.set` | `{Array=}` | Array of py objects or can be called with a python iterable|\r\n| `Sk.builtin.dict` | `{Array=}` | key/value pairs - only python objects |\r\n| `Sk.builtin.str` | `{*}` | |\r\n| `Sk.builtin.bool` | `{*}` | |\r\n\r\nNote that you should only pass a number to the `int` javascript constructor if it's absolute value is less than `Number.MAX_SAFE_INTEGER`. Similarly you should only pass a `JSBI (bigint)` to the int constructor if it's absolute value is larger than `Number.MAX_SAFE_INTEGER`.\r\n\r\n\r\n\r\n\r\n**Major changes**\r\n- All type objects are now callable using their respective `tp$call` methods inherited from `Sk.builtin.type`\r\n- All native type objects will require a `tp$new` and `tp$init` method (maybe inherited by `Sk.builtin.object`)\r\n- All type objects are javascript instances of `Sk.builtin.type`\r\n- All single inherited objects follow javascript inheritance\r\n- All native type objects now have the following and replaces the use of `Sk.builtin.func` for all dunder function/methods.\r\n - `wrapper_descriptors` aka `slot_wrappers`\r\n - `method_descriptors` \r\n - `classmethod_descriptors`\r\n - `getset_descriptors` aka `attributes`/`member_descriptors`\r\n- `Sk.builtin.sk_method` is an alternative to `Sk.builtin.func` and is used by the above `descriptor` types\r\n- mangled names are never passed to the user but instead are an attribute on `Sk.builtin.str` instances as `$mangled`\r\n- `mappingproxy` added\r\n- `$d` removed on all type objects.\r\n- `attributes` of a type object now only appear on the `prototype`. Previously these appeared on both the `type` object and the `prototype`\r\n\r\n\r\n\r\n**Additions**\r\n- `dict`, `set`, `tuple` are suspendible\r\n- `map`, `filter`, `zip`, `reversed`, `enumerate` are suspendible\r\n- `classmethod`, `property`, `staticmethod` have native skulpt implementations\r\n- `super` can now be unbound [see this explanation](https://stackoverflow.com/questions/30190185/how-can-i-use-super-with-one-argument-in-python/30190341#30190341)\r\n- `Sk.builtin.func` objects gain a `qualname` in compile code\r\n- API for building native types \r\n - `Sk.abstr.buildNativeClass`\r\n- `range_iterator` class added\r\n- `reverse` iterators added for `list`, `dict_views`, `range`\r\n- `|` operator valid for `dict`, `dict_keys`, `dict_items`\r\n- `Counter` has number slots added\r\n- python docstrings now work\r\n\r\n**`Sk.abstr.`**\r\n- `objectHash`\r\n- `buildNativeClass`\r\n- `buildIteratorClass`\r\n- `setUpBuiltinMro`\r\n- `setUpMethods`\r\n- `setUpGetSets`\r\n- `setUpSlots`\r\n- `setUpClassMethod`\r\n- `setUpBaseInheritance`\r\n- `setUpModuleMethod`\r\n- `checkNoKwargs`\r\n- `checkNoArgs`\r\n- `checkOneArg`\r\n- `checkArgsLen` \r\n- `copyKeywordsToNamedArgs`\r\n\r\n\r\n**`Sk.generic.`**\r\n- `getAttr`\r\n- `setAttr`\r\n- `new` \r\n- `newMethodDef`\r\n- `iterNextWithArray`\r\n- `iterNextWithArrayCheckSize`\r\n- `iterLengthHintWithArrayMethodDef`\r\n- `iterReverseLengthHintMethodDef`\r\n- `getSetDict`\r\n\r\n**`Sk.misceval.`**\r\n- `asIndex` - will return the internal representation of the integer - or undefined if not indexable - could be a number or a bigint (JSBI) \r\n- `asIndexOrThrow` - does `asIndex` but throws an error if the number is not indexable - with an optional message parameter.\r\n- `asIndexSized` - throws an error if the object is not indexable, returns a Number always, Option to throw an error if the index is larger than `Number.MAX_SAFE_INTEGER`. This is the goto method for most builtins now. \r\n- `Iterator` - a python class that easily wraps an iterator\r\n- `arrayFromIterable` - optional canSuspend implementation that returns an array from a python iterator\r\n- `iterArray` - like `iterFor` but with an array rather than a python iterator\r\n\r\n**`slotdefs.js`**\r\n- contains all the information about mapping slots to dunders and vice versa.\r\n\r\n\r\n\r\n**slot changes**\r\n*only relevant for those developers and those writing slot functions directly - hopefully very few users*\r\n- `mp$length` replaced by `sq$length` in the codebase\r\n- `sq$ass_item`/`sq$ass_slice` replaced with `mp$ass_subscript`\r\n- `nb$nonzero` replaced with `nb$bool` and switch version to py2/py3 takes care of mapping the appropriate dunder method.\r\n- `mp$del_subscript` replaced by `mp$ass_subscript` (as per Cpython)\r\n - deleting vs setting an item is based on the call signature\r\n - `mp$ass_subscript(key, value)` -> set item\r\n - `mp$ass_subscript(key)` -> delete item\r\n- If a dunder func is defined on a user defined class then the slot function is guaranteed. \r\n - e.g. `__len__` defined guarantees `sq$length`. \r\n - A slot function defined by skulpt in this way throws the appropriate errors and converts the return value to the appropriate internal object. \r\n - `sq$length` called internally: `__len__` is called using `Sk.misceval.callsim(OrSuspend)Array`. \r\n - The result is checked to be an `int` and then converted to `number` since `sq$length` expects a `number`.\r\n- `tp$str` removed from some builtins as per Python 3.8 changes\r\n- If `tp$richcompare` is defined - wrapper functions `ob$eq` etc are created - this way `Sk.misceval.richCompareBool` need only check for the existence of an `ob$*` slot. \r\n - in fact - the existence of these slots is guaranteed since they are inherited from `Sk.builtin.object`\r\n- `tp$mro`/`tp$bases` are Js Arrays rather than `Sk.builtin.tuple`\r\n- `tp$str` and `$r` for errors were changed as per Cpython.\r\n- `nb$int_` -> `nb$int`\r\n- `nb$lng` -> `nb$long`\r\n- `nb$float_` -> `nb$float`\r\n- return values for certain slot functions have changed\r\n - `tp$hash` - should return a javascript number less than `Number.MAX_SAFE_INTEGER` can be postive or negative\r\n - `nb$index` - should return a javascript number or BigInt (older browsers should be a JSBI BigInt)\r\n- `tp$name` was removed from instances of `Sk.builtin.func` and `Sk.buitin.method` in favour of `$name` since it's `tp$name` should be the `type name`\r\n\r\n\r\n**flags - only relevant internally**\r\n- `sk$acceptable_as_base_class` used for some type objects\r\n- `sk$object` every skulpt object will have this flag. An easy way to determine if you have a skulpt object or a javascript object\r\n- `hp$type` all instance of `sk$klass` types\r\n- `sk$prototypical` do we need to walk up the MRO or can we just check the `prototype`\r\n- `sk$builtinBase` the most derived base which is a native skulpt class\r\n- `sk$baseClass` builtin classes that are direct children of `object`\r\n\r\n\r\n\r\n\r\n**other internal changes**\r\n- the use of `numPromoteFunc` was removed for performance improvements in the implementation of `Sk.asbtr.numberBinOp`\r\n - It was performance beneficial to leave the promoting to the respective `nb$` slots\r\n - `int` binop slots only deal with instance of `int`\r\n - `float` binop slots deal with instances of `float` and `int`\r\n - `complex` binop slots deal with instances of `complex`, `float` and `int`\r\n- since `long` was effectively removed when a number is larger than `Number.MAX_SAFE_INTEGER` it's `.v` value is a `BigInt`. if `BigInt` is not available in the browser then the `JSBI` library is used to replicate `BigInt` functionality. \r\n- `set` and `frozenset` now share much of their implementation\r\n- `collections` module rewritten using new api\r\n- `itertools` module rewritten using new api - these are now type objects rather than instances of `generator`\r\n- `operator` module rewritten using new api\r\n- `math` module adapted to the new api\r\n- `dict` and `set` throw errors if the objects change size during iteration as per Cpython.\r\n - fully tested\r\n- `Sk.builtin.check*` moved to `src/check.js`\r\n- `number.js` removed\r\n- `numtype.js` removed\r\n- `seqtype.js` removed\r\n- `mp$subscript` should *not* be called by a js object (see changes in `random.js`)\r\n- `quick$lookup` added to `dict.prototype` which is a fast way to lookup up `str` keys\r\n- `dict.prototype.entries` rather than has values that are `arrays` of key value pairs\r\n- `object.prototype.tp$hash` will no longer add `$savedHash_` to the object - instead it uses a javascript map and assigns objects to a random number less than `Number.MAX_SAFE_INTEGER` rather than incrementing the hash value each time. \r\n- `float.prototype.tp$hash` for integers this will be the same value as `Sk.builtin.int.prototype.tp$hash` for non integers this will be a random number less than `Number.MAX_SAFE_INTEGER`. Previously this was the number rounded down - but this creates a lot of collisions. \r\n\r\n"
},
{
"url": "https://api.github.com/repos/skulpt/skulpt/releases/1480498",
"assets_url": "https://api.github.com/repos/skulpt/skulpt/releases/1480498/assets",
"upload_url": "https://uploads.github.com/repos/skulpt/skulpt/releases/1480498/assets{?name,label}",
"html_url": "https://github.com/skulpt/skulpt/releases/tag/0.10.0",
"id": 1480498,
"author": {
"login": "bnmnetp",
"id": 51115,
"node_id": "MDQ6VXNlcjUxMTE1",
"avatar_url": "https://avatars.githubusercontent.com/u/51115?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/bnmnetp",
"html_url": "https://github.com/bnmnetp",
"followers_url": "https://api.github.com/users/bnmnetp/followers",
"following_url": "https://api.github.com/users/bnmnetp/following{/other_user}",
"gists_url": "https://api.github.com/users/bnmnetp/gists{/gist_id}",
"starred_url": "https://api.github.com/users/bnmnetp/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/bnmnetp/subscriptions",
"organizations_url": "https://api.github.com/users/bnmnetp/orgs",
"repos_url": "https://api.github.com/users/bnmnetp/repos",
"events_url": "https://api.github.com/users/bnmnetp/events{/privacy}",
"received_events_url": "https://api.github.com/users/bnmnetp/received_events",
"type": "User",
"site_admin": false
},
"node_id": "MDc6UmVsZWFzZTE0ODA0OTg=",
"tag_name": "0.10.0",
"target_commitish": "master",
"name": "Inherit from builtins",
"draft": false,
"prerelease": false,
"created_at": "2015-06-30 20:24:23 UTC",
"published_at": "2015-06-30 20:38:34 UTC",
"assets": [
],
"tarball_url": "https://api.github.com/repos/skulpt/skulpt/tarball/0.10.0",
"zipball_url": "https://api.github.com/repos/skulpt/skulpt/zipball/0.10.0",
"body": "This latest release contains a lot of goodness.\n- You can now inherit from builtin types including Exceptions!\n- Major cleanup of numeric types\n- Bug fixes for iteration when using subclasses with our without `__getitem__`\n- Bug fixes and more completeness to lookups of dunder methods\n- complex type is added\n- brun command added to skulpt for easy access to in-browser debug\n- Many Many minor bug fixes.\n"
},
{
"url": "https://api.github.com/repos/skulpt/skulpt/releases/1362206",
"assets_url": "https://api.github.com/repos/skulpt/skulpt/releases/1362206/assets",
"upload_url": "https://uploads.github.com/repos/skulpt/skulpt/releases/1362206/assets{?name,label}",
"html_url": "https://github.com/skulpt/skulpt/releases/tag/0.9.10",
"id": 1362206,
"author": {
"login": "eah13",
"id": 1702745,
"node_id": "MDQ6VXNlcjE3MDI3NDU=",
"avatar_url": "https://avatars.githubusercontent.com/u/1702745?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/eah13",
"html_url": "https://github.com/eah13",
"followers_url": "https://api.github.com/users/eah13/followers",
"following_url": "https://api.github.com/users/eah13/following{/other_user}",
"gists_url": "https://api.github.com/users/eah13/gists{/gist_id}",
"starred_url": "https://api.github.com/users/eah13/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/eah13/subscriptions",
"organizations_url": "https://api.github.com/users/eah13/orgs",
"repos_url": "https://api.github.com/users/eah13/repos",
"events_url": "https://api.github.com/users/eah13/events{/privacy}",
"received_events_url": "https://api.github.com/users/eah13/received_events",
"type": "User",
"site_admin": false
},
"node_id": "MDc6UmVsZWFzZTEzNjIyMDY=",
"tag_name": "0.9.10",
"target_commitish": "master",
"name": "0.9.10",
"draft": false,
"prerelease": false,
"created_at": "2015-05-06 04:57:49 UTC",
"published_at": "2015-06-01 17:00:58 UTC",
"assets": [
],
"tarball_url": "https://api.github.com/repos/skulpt/skulpt/tarball/0.9.10",
"zipball_url": "https://api.github.com/repos/skulpt/skulpt/zipball/0.9.10",
"body": ""
}
],
"releases_url": "https://github.com/skulpt/skulpt/releases",
"repository_name": "skulpt",
"repository_nwo": "skulpt/skulpt",
"repository_url": "https://github.com/skulpt/skulpt",
"show_downloads": true,
"source": {
"branch": "gh-pages",
"path": "/"
},
"tar_url": "https://github.com/skulpt/skulpt/tarball/gh-pages",
"url": "http://skulpt.org",
"versions": {
"jekyll": "3.9.0",
"jekyll-sass-converter": "1.5.2",
"kramdown": "2.3.1",
"kramdown-parser-gfm": "1.1.0",
"jekyll-commonmark-ghpages": "0.1.6",
"liquid": "4.0.3",
"rouge": "3.26.0",
"github-pages-health-check": "1.17.1",
"jekyll-redirect-from": "0.16.0",
"jekyll-sitemap": "1.4.0",
"jekyll-feed": "0.15.1",
"jekyll-gist": "1.5.0",
"jekyll-paginate": "1.1.0",
"jekyll-coffeescript": "1.1.1",
"jekyll-seo-tag": "2.7.1",
"jekyll-github-metadata": "2.13.0",
"jekyll-avatar": "0.7.0",
"jekyll-remote-theme": "0.4.3",
"jemoji": "0.12.0",
"jekyll-mentions": "1.6.0",
"jekyll-relative-links": "0.6.1",
"jekyll-optional-front-matter": "0.3.2",
"jekyll-readme-index": "0.3.0",
"jekyll-default-layout": "0.1.4",
"jekyll-titles-from-headings": "0.5.3",
"jekyll-swiss": "1.0.0",
"minima": "2.5.1",
"jekyll-theme-primer": "0.5.4",
"jekyll-theme-architect": "0.1.1",
"jekyll-theme-cayman": "0.1.1",
"jekyll-theme-dinky": "0.1.1",
"jekyll-theme-hacker": "0.1.2",
"jekyll-theme-leap-day": "0.1.1",
"jekyll-theme-merlot": "0.1.1",
"jekyll-theme-midnight": "0.1.1",
"jekyll-theme-minimal": "0.1.1",
"jekyll-theme-modernist": "0.1.1",
"jekyll-theme-slate": "0.1.1",
"jekyll-theme-tactile": "0.1.1",
"jekyll-theme-time-machine": "0.1.1",
"ruby": "2.7.3",
"github-pages": "214",
"html-pipeline": "2.14.0",
"sass": "3.7.4",
"safe_yaml": "1.0.5",
"nokogiri": "1.11.3"
},
"wiki_url": "https://github.com/skulpt/skulpt/wiki",
"zip_url": "https://github.com/skulpt/skulpt/zipball/gh-pages"
}