Skip to content

Instantly share code, notes, and snippets.

View steverice's full-sized avatar

Steve Rice steverice

View GitHub Profile
"RefCountingStorage write content helper" prio=0 tid=0x0 nid=0x0 waiting on condition
java.lang.Thread.State: WAITING
on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@5b33ea53
at sun.misc.Unsafe.park(Native Method)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:156)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1987)
at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:399)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:957)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:917)
at java.lang.Thread.run(Thread.java:680)
@steverice
steverice / composer.json
Created June 27, 2013 08:01
composer.json repository setup for installing connect20/Mage_All_Latest (1.7.0.2) through magento-hackathon/magento-composer-installer
"repositories": [
{
"type": "composer",
"url": "http://packages.firegento.com"
},
{
"type": "package",
"package": {
"name": "connect20/lib_google_checkout",
"version": "1.5.0.0",
@steverice
steverice / Magento deployment structure
Last active December 19, 2015 03:29
Magento directory structure created using mage-hackathon/magento-composer-installer. All files in ./magento are hardlinks to various packages in ./vendor (hence display of inodes), and thus the webroot is entirely reproducable with a simple composer update.
.
├── [2907877] composer.json
├── [2937290] composer.lock
├── [2316418] magento
│   ├── [2890782] LICENSE.html
│   ├── [2890783] LICENSE.txt
│   ├── [2890784] LICENSE_AFL.txt
│   ├── [2890785] RELEASE_NOTES.txt
│   ├── [2890786] api.php
│   ├── [2880927] app
@steverice
steverice / gist:6018000
Created July 17, 2013 05:57
Using strings with square brackets to access multidimensional properties of JS objects
/**
* Example: incoming property name (e.g. from PHP) has square brackets, e.g. names[0][1]
* var property = names[0][1];
* var value = {
* names: [
* ['some', 'data', 'here']
* ]
* }
* result: value == 'some'
*
@steverice
steverice / gist:7817426
Created December 6, 2013 02:04
View GitHub pull request diffs in RubyMine
@steverice
steverice / v2-vision-sample.md
Created October 8, 2016 02:11
Snippet of PagerDuty API v2 Vision

API v2 Vision 👓

This document outlines the vision and scope for v2 of the API.

Ordered lists represent prioritized order. We recannot accomplish everything at once, and thus everything needs to be prioritized sooner or later. I choose sooner.

This document does not attempt to present a comprehensive record of all the changes that will be made, as those will be captured by stories in JIRA. Instead, it establishes the goals, principles, and patterns that we'll use to make the decisions about what needs to change.

It is a living document and will evolve as we discover new edge cases and outliers that weren't previously considered.

@steverice
steverice / rest-incidents-list.html
Created October 10, 2016 01:55
Incidents list documentation from v1 devdocs
---
title: PagerDuty Developer
layout: main
---
<ul class="breadcrumb">
<li>
<a href="/documentation/rest/">REST API</a>
</li>
<li style="list-style: none">
<span class="divider">/</span>
@steverice
steverice / approval-process.md
Created October 11, 2016 04:20
The API Approval Process at PagerDuty

The API Approval Process

When do I need approval for an API change?

Approval is needed before shipping any change used by one or more wild clients or releasing the API for general availability. In other words, the API must be contracted.

If you are working on a prototype API, you may ship your code at will, but you acknowledge the following tradeoffs:

  • you are responsible to make any and all code changes to satisfy the final approved proposal before general availability
    • in other words, there will be additional churn
  • you have communicated to any clients of the prototype API that their integration may break at any time
@steverice
steverice / v2-announcement.md
Created October 18, 2016 00:36
PagerDuty API v2 Beta Announcement

PagerDuty API v2 is Now in Beta!

PagerDuty is thrilled to announce that the new version of our popular PagerDuty REST API is now available for everyone to use in beta!

We've been working hard on this version of the API for a while and are excited about the improvements in speed, consistency, and ease of use that API v2 delivers.

If you're a PagerDuty customer, you've already been using API v2 for a while every time you use our web application. In our own experience, we've found it easier to work with and build new functionality using API v2 than ever before.

What's new?

@steverice
steverice / basic-auth-letter.md
Created October 23, 2016 16:24
Letter sent to customers about basic auth deprecation

Hello,

Thanks for your continued interest and use of the PagerDuty API.

We're writing to let you know that as of November 4th, 2015, we will be discontinuing the ability to authenticate against the API using HTTP Basic Authentication (PagerDuty username and password), which has been deprecated since mid-2014.

We are doing this to improve security of PagerDuty accounts by limiting the spread of PagerDuty user passwords, which are difficult to audit and revoke should they become compromised.

Additionally, the need to authenticate a user via HTTP Basic Authentication imposes a performance penalty on every API request due to the robust hashing techniques we use to store and validate user passwords. This is done by design to make brute forcing passwords computationally infeasbile.