New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Review Ticket for JSON and Jq Lesson #23

Closed
ianmilligan1 opened this Issue May 24, 2016 · 44 comments

Comments

7 participants
@ianmilligan1
Copy link
Contributor

ianmilligan1 commented May 24, 2016

This ticket will host peer review comments for @mdlincoln's tutorial "Reshaping JSON with jq."

I will act as editor for the review process. My role is to solicit two reviews and to manage the discussion, which will take the form of comments on this ticket. We aim to complete this process within 4 weeks.

Members of the wider community are also invited to offer constructive feedback also on this discussion thread, but they are asked to first read our Reviewer Guidelines (http://programminghistorian.org/reviewer-guidelines) and to adhere to our anti-harassment policy (below).

The Programming Historian embraces openness in its review process, and endeavors to keep the review conversation here on GitHub. If anyone feels the need to discuss anything privately, you are welcome to email me.

Anti-Harassment Policy

This is a statement of the Programming Historian's principles and sets expectations for the tone and style of all correspondence between reviewers, authors, editors, and contributors to our public forums.

The Programming Historian is dedicated to providing an open scholarly environment that offers community participants the freedom to thoroughly scrutize ideas, to ask questions, make suggestions, or to requests for clarification, but also provides a harassment-free space for all contributors to the project, regardless of gender, gender identity and expression, sexual orientation, disability, physical appearance, body size, race, age or religion, or technical experience. We do not tolerate harassment or ad hominem attacks of community participants in any form. Participants violating these rules may be expelled from the community at the discretion of the editorial board. If anyone witnesses or feels they have been the victim of the above described activity, please contact our ombudspersons (Ian Milligan - http://programminghistorian.org/project-team). Thank you for helping us to create a safe space.

@ianmilligan1 ianmilligan1 self-assigned this May 24, 2016

@ianmilligan1

This comment has been minimized.

Copy link
Contributor

ianmilligan1 commented May 24, 2016

I will go through this as a first step, and then will reach out to potential peer reviews. This lesson came in a bit earlier than expected (hurray!) but the downside is that I'm extensively traveling, so there may be occasional delays.

@ianmilligan1

This comment has been minimized.

Copy link
Contributor

ianmilligan1 commented May 24, 2016

Turns out this was more fun than what I was working on. 😀

This is fantastic and worked like an absolute charm. A few tiny suggestions:

  • For assets, should we link to the 'raw' version so that people can easily cut-and-paste into jq play?

  • I found this confusing - could it be broken down a bit more? Maybe one more intermediate step. Given that the lesson difficulty ramps up at this spot, a bit more handholding (later on, I think you're bang on with the difficulty):

    Look at the rule established inside the parentheses of select().
    We access the productionPlaces array by using the operator .productionPlaces, and then use a | within the select() command to send those arrays into the operator length, which returns the length of each array.
    In order for this to work as a rule for select(), we need to add some kind of comparison that will return either true/false.
    Adding >= 1 completes our rule: only select JSON objects whose production places array has a length that is greater than or equal to 1.
    After select(), we pipe the results into one more operation, .id, which returns the ids of these objects.

  • Could we put a link to this regular expressions tutorial when you mention them?

  • When introducing Twitter JSON, maybe a simple link to something explaining that why Twitter data = JSON. i.e. this is a very real usecase for jq.

  • The sample tweets – are we able to use these according to Twitter ToS?

I also made some minor changes to the text itself, you can review the diffs.

Anyways, let me know @mdlincoln, make any more changes that you see fit, and I will line up two reviewers.

@mdlincoln

This comment has been minimized.

Copy link
Member

mdlincoln commented May 24, 2016

Turns out this was more fun than what I was working on. 😀

That's why I wrote it earlier than anticipated :P

  • For assets, should we link to the 'raw' version so that people can easily cut-and-paste into jq play?

I... think this is what happens already? At least, when I click on one of the links in Chrome (e.g. http://programminghistorian.github.io/ph-submissions/assets/jq_rkm.json), it displays the raw text that I can immediately copy and paste into jq play. If that is not happening for you, maybe there's some other solution we can figure out.

  • I found this confusing - could it be broken down a bit more? Maybe one more intermediate step. Given that the lesson difficulty ramps up at this spot, a bit more handholding (later on, I think you're bang on with the difficulty):

Will do in a following commit.

  • Could we put a link to this regular expressions tutorial when you mention them?

Oh good call - will do.

  • When introducing Twitter JSON, maybe a simple link to something explaining that why Twitter data = JSON. i.e. this is a very real usecase for jq.

Will do. I'll also link to twarc as well, which pairs nicely with jq.

  • The sample tweets – are we able to use these according to Twitter ToS?

Good question. While prepping the lesson, I talked with Ed Summers who had some experience working with this when he made twarc and he pointed me to 6b. of the Twitter Developer Policy, which reads:

If you provide Content to third parties, including downloadable datasets of Content or an API that returns Content, you will only distribute or allow download of Tweet IDs and/or User IDs. You may, however, provide export via non-automated means (e.g., download of spreadsheets or PDF files, or use of a “save as” button) of up to 50,000 public Tweets and/or User Objects per user of your Service, per day.

IANAL, but I believe the 50 tweets here fall under: 1) download via non-automated means and 2) under 50,000 public Tweets.

@mdlincoln

This comment has been minimized.

Copy link
Member

mdlincoln commented May 24, 2016

@ianmilligan1 can you add me as a contributor to this repo so I can push further edits?

@acrymble

This comment has been minimized.

Copy link
Contributor

acrymble commented May 24, 2016

@ianmilligan1 can you remove Miriam's name from the ombudsperson option. We'll need to get someone else to step into that role. I'll make a ticket on Jekyll repo.

@ianmilligan1

This comment has been minimized.

Copy link
Contributor

ianmilligan1 commented May 24, 2016

@acrymble done
@mdlincoln done

(that was easy!)

@ianmilligan1

This comment has been minimized.

Copy link
Contributor

ianmilligan1 commented May 24, 2016

@mdlincoln Great! You're right re: the downloads (I fixed the links to point to the right directory in the ph-submissions repo, and was wrong about what the default would be). Everything else looks good. Still unsure about the third party provision (not the clearest wording) but you and @edsu would know this stuff very well.

Please ping me when you're happy with it and we can look for some reviewers.

@mdlincoln

This comment has been minimized.

Copy link
Member

mdlincoln commented May 24, 2016

True, the Twitter Developer Policy does not have the clearest wording. However I'd argue this use meshes with a reasonable reading of their data sharing exception (non-automated and very tiny data size) as I noted above.

Moreover, this usage goes along well with the spirit of the TDP: it is not attempting to replicate the service provided by Twitter or the Twitter API, nor does not modify the content provided by the API.

@mdlincoln

This comment has been minimized.

Copy link
Member

mdlincoln commented May 24, 2016

Also @ianmilligan1 that should do it for my fixes, so feel free to pass along to reviewers at your leisure!

@ianmilligan1

This comment has been minimized.

Copy link
Contributor

ianmilligan1 commented May 24, 2016

Great, thanks @mdlincoln. I am currently lining up reviewers, I'll check back in once both have been assigned.

@ianmilligan1

This comment has been minimized.

Copy link
Contributor

ianmilligan1 commented May 25, 2016

I've contacted peer reviewers (@ruebot based on his experience with jq and Twitter parsing; @shawngraham based on his enthusiasm for jq and digital pedagogy) and they will put their comments here. Looking forward to seeing their thoughts!

Until reviews are in, this is also a call for the open review period.

@hamlet82

This comment has been minimized.

Copy link

hamlet82 commented May 26, 2016

This is great! A few minor suggestions.

Might you include a link to the succinct (and I think also very clear) official description at http://www.json.org ?

"Try the following filter:" - the first time you say, this might you clarify how to try a filter in jq play? It's kind of obvious, but might be worth adding "Try the filter by typing the below into the Filter box" or something.

@ianmilligan1

This comment has been minimized.

Copy link
Contributor

ianmilligan1 commented May 26, 2016

@hamlet82 Thanks for your comments, really appreciated!

@shawngraham

This comment has been minimized.

Copy link
Collaborator

shawngraham commented May 27, 2016

Ok, I did my review before reading through this thread. Imma gonna post what I wrote anyway, and things that've already been dealt with can be safely ignored! General comment: this is one of the best tutorials I've read, hands-down. Clearly laid out, clear pedagogy, clear scaffolding. JQ is a fundamental tool that we should all be using, and perhaps ProgHist, if it ever signalled a sequence of lessons that newcomers ought to try first, would put this right up there with command line & wget.


I'm approaching this lesson by trying to put myself in the mindset from my students this past winter who were by and large completely new to all of this.

  • at the outset: are there other proghist lessons that the newish reader ought to work through before attempting this? Perhaps signal those.

Lesson Goals

  • should you mention that many APIs from museums etc expose their data via JSON? Tie this into the WGET or working with APIs lessons?

TOC

  • this is awesome

What is JSON

  • should key:value pairs be unpacked a bit? id, what is a key? how does this relate to other kinds of database structures the user might've come across?

Lesson setup

  • I really like the use of jq play. What a great find!

Core jq filters

  • the rkm.json file should link to the RAW page, rather than the github page. As of this morning, when I clicked on the link, I did not get the RAW (I see this was discussed above, but this is what I'm seeing).

the dot

  • might be worth reiterating that the user does not need to hit 'enter' on the jq play filter box
  • when you say Note that jq has returned the entire array. Rather than being wrapped in {}, the result is a series of objects wrapped within an array ([{},{},{}]) you might want to indicate why this is significant? Or make it more clear you're about to explain that, show why it matters

the array object

  • this is cool. Maybe a screenshot showing what the ten line output after ticking off 'compact output' should look like.
  • 'javascript starts counting at 0' <- this needs to be highighted a bit more. It's the kind of thing that can drive people nuts.

the pipe

  • this single command snippet is one of the coolest things ever. Extracting one single field of data from json is going to be extremely useful for historians! Consider things like the canadiana.org api, which returns json. If one wanted to feed the text into voyant or similar, grabbing just the text field drives students crazy. It might be worth linking out to examples of this in the wild? Not a big deal if you don't, but this one bit of your tutorial enabled me to get useful stuff out of the pastec.io json matching script by Ryan

filter

  • I really appreciate how you break down the filter and what it is doing. Is it worth mentioning the role of the pipe at each step?
  • regarding regex: link to a regex tutorial here. It might be useful to contrast the search "van" with an actual regex though. Do you have to escape characters etc, if for instance you were looking for \t versus whitespace as part of the search? (ah, ok, I scrolled down and see that you do link to the proghist tutorial on regex)

json vs jsonlines

  • so the various file conventions used to denote json and jsonlines can in fact be identical? so the only way to really determine which you are dealing with is to open the file, and see whether it's all wrapped in [] or not?
  • link to the RAW instead
  • are there ethical issues here using the Ferguson data? Maybe grab a subset from Millian and Ruest's election 42 data ... and the ethical issues then are on their head? Or perhaps just use twitter data from your own tweets.
  • remind the user to either reload the jq play or to delete the filter, the source data, and uncheck the buttons before pasting in the new data. (otherwise error messages abound, which might terrify someone)

one row per tweet

  • perhaps just remind the reader to start pasting those filters in again.
  • "Note that we do not have to start this query by breaking apart an array like we did with the Rijskmuseum data. jq simply repeats the filter once per line of the input file. " this is because it's jsonlines, right? Perhaps state.
  • would it be useful, to restate at the end of the transformation of the twitter data, a table perhaps showing how the initial query got built up, so that the changes we've made are visible at a glance?
  • in the discussion about counting the number of times each hashtag occurs, need to add a reminder to have both slurp and raw output checkboxes checked.
  • also, I wonder if it's a good idea to remind the reader that the code snippets themselves scroll left-to-right and so you have to make sure you copy the whole darned thing (or at least scroll to view it) - ah, just scrolled down and I see the reminder just below the sample output. Perhaps move this reminder before the example.
  • '(Remember, to format CSV output correctly, set jq to "Raw output" using the -r flag on the command line.)' But we're not using the command line here, right? So maybe rephrase this for when we do eventually move to command line/terminal...
  • link to Raw for the answer link

using JQ on command line

  • have instructions for windows users

invoking JQ

  • tell the reader to save the rkjm.json file onto their computer, open a terminal (etc).
  • I forget: is curl standard, or does it need to be installed? Also, windows?

some small general observations

  • perhaps key terms should be bolded, and a glossary added/linked to (just to help the new person) ie, key, value, object, array etc
  • signal perhaps that this lesson becomes progressively more complex, that the initial bit really is for beginners, but by the end, we're dealing with some pretty complex stuff (basic data analyisis with jq: under what circumstances can we imagine an historian wanting to do this versus just getting stuff into csv and thence into R or Excel or what-have-you?)
@ianmilligan1

This comment has been minimized.

Copy link
Contributor

ianmilligan1 commented May 27, 2016

Thanks so much @shawngraham – these are great suggestions (and extremely quick turnaround, you're making us all look bad).

@mdlincoln, we still have one other review outstanding, and then I'll synthesize comments. In the meantime, other public comments always appreciated too.

@ruebot

This comment has been minimized.

Copy link

ruebot commented May 27, 2016

Excellent work @mdlincoln. I'm a big 👍 on this piece.

My only major feedback is about the installation section. I might be helpful to add a link to the jq download page, and let folks know there are good instructions there for installing.

@ianmilligan1

This comment has been minimized.

Copy link
Contributor

ianmilligan1 commented May 27, 2016

Fantastic, thanks @ruebot. Let me look at both of these reviews and hopefully try to synthesize something together by the end of the day (if not end of day, certainly Sunday).

@ianmilligan1

This comment has been minimized.

Copy link
Contributor

ianmilligan1 commented May 27, 2016

OK! Thanks @shawngraham and @ruebot. I think we might be setting some kind of record here.

I agree with Shawn's comments, and think it might be useful to link to a few other JSON API use cases (Canadiana comes to mind, as Shawn mentions). Overall, I think I would go through his comments and try to implement them as best as possible - and agree with the progressive more complex comment, which I encountered as well. But I don't think the difficulty curve is undue.

Not sure if curl is default in git bash. It is on OS X.

As for @ruebot, his excitment is palpable! I think a link to the jq download page is in order. I think the installation instructions there should be sufficient.

Finally, Shawn mentioned some concerns with the Ferguson data. I conferred with Nick and he thought it was not a problem to use this data. I leave this in your court, @mdlincoln.

@hamlet82 suggested linking to the clear description at http://www.json.org/ and to add some clarifications around filters, which is also in order.

If I may, I might suggest leaving this open for a few more days to see if there are open suggestions.. say next Thursday? It's the Memorial Day weekend in the US and a Bank Holiday in the UK I gather, so want to make sure that the speediness doesn't make us miss out on great suggestions. Is that ok Matthew?

@mdlincoln

This comment has been minimized.

Copy link
Member

mdlincoln commented May 29, 2016

@ianmilligan1 Sure, I'll wait till the end of this coming week to tally up all the responses. Thanks @shawngraham and @ruebot for such quick responses!

One thing that I do want to check on in the meantime: both of these following links do (and should) bring me to raw, unformatted JSON when opened in Chrome:

  1. http://programminghistorian.github.io/ph-submissions/assets/jq_rkm.json
  2. http://programminghistorian.github.io/ph-submissions/assets/jq_twitter.json

@shawngraham it sounds like these links are not leading you to the files correctly? Is this still the case? If so, what browser are you using?

@shawngraham

This comment has been minimized.

Copy link
Collaborator

shawngraham commented May 29, 2016

@mdlincoln I'm using Chrome. But I was reading/reviewing the lesson from here: https://github.com/programminghistorian/ph-submissions/blob/gh-pages/lessons/json-and-jq.md

instead of here: http://programminghistorian.github.io/ph-submissions/lessons/json-and-jq.html

So the former was linking me to:

https://github.com/programminghistorian/ph-submissions/blob/gh-pages/assets/jq_rkm.json

while the latter went to the raw. So: my bad! I need to remember to review from the github.io rendered pages.

@shawngraham

This comment has been minimized.

Copy link
Collaborator

shawngraham commented May 29, 2016

(sorry for the nuisance!)

@mdlincoln

This comment has been minimized.

Copy link
Member

mdlincoln commented Jun 1, 2016

I've just pushed a number of rewrites to the lesson. The bullet points:

  • Clarified the progressive lesson difficulty
  • @ianmilligan1 I replaced curl with wget. Note that the extra flags are needed to pipe wget's output into jq.
  • Discuss JSON a little bit more and its relationship to APIs, with added links to some PH lessons
  • Point out how to differentiate between JSON/JSON lines files.
  • Add a few reminders about pipes and checking/unchecking certain options
  • Add screenshots showing how the "Compact Output" option works in jq/jq play
  • New section on group_by: I think the final example on counting hashtags may have jumped just a bit too quickly by introducing both group_by alongside length, so I added another section immediately before it which uses group_by to extract per-user data from per-tweet data. This kind of operation - creating data oriented towards different entities, e.g. users instead of tweets/artists instead of paintings - is one that JSON users will need to do all the time. @shawngraham I hope this provides a better justification for learning group_by, and hopefully it makes the next bit on counting a bit easier to follow.
    • This also prompted me to add another challenge to test students on their understanding of how to combine other jq operators with group_by
  • Windows installation instructions: two notes
    1. It seems that PowerShell is the easiest way for Windows users to install and use jq locally, so I added a relative link to the forthcoming PowerShell lesson by @tedawson (#18). @ianmilligan this will require a bit of coordination with @jerielizabeth and @tedawson. If these lessons can be released together, that'd be great.
    2. I don't have access to a Windows machine to test if the installation commands actually work and jq will run. Would someone be able to double check both the installation and the syntax for calling jq in PowerShell?

mdlincoln added a commit that referenced this issue Jun 1, 2016

wget JSON from PH site instead of a gist
Note: this will only work once the lesson has been published. Make sure to check the link before publishing #23
@ianmilligan1

This comment has been minimized.

Copy link
Contributor

ianmilligan1 commented Jun 1, 2016

Great, thanks @mdlincoln – will review more in detail when I've got a chance (just on the road).

Quick question - why the switch from curl to wget? I use the latter more myself, too, but it's not a default installation (we do have instructions in our Programming Historian wget lesson).

@mdlincoln

This comment has been minimized.

Copy link
Member

mdlincoln commented Jun 1, 2016

@ianmilligan1 ah, well @shawngraham had been concerned that curl was not installed by default. On, say, an ubuntu install on Digital Ocean, wget is definitely installed by default, while curl is not. (TBH I don't have strong informed opinions about either one, so I'm happy to modify the lesson to use either one - especially since it's just shown in passing in one example. At least with wget, there is a PH lesson on installation)

@ianmilligan1

This comment has been minimized.

Copy link
Contributor

ianmilligan1 commented Jun 2, 2016

Ah, whereas on OS X curl is installed by default and wget isn't. OK. Let's do wget, but since it's such a simple command, maybe just provide both?

@ianmilligan1

This comment has been minimized.

Copy link
Contributor

ianmilligan1 commented Jun 3, 2016

Re: PowerShell... @jerielizabeth, any chance you could give the jq command a quick check as per @mdlincoln above? I know you're a PowerShell user based on your other lesson. 😀

For convenience, the commands are here.

@jerielizabeth

This comment has been minimized.

Copy link
Contributor

jerielizabeth commented Jun 7, 2016

@ianmilligan1 Oh, I am a committed mac user myself, but I will reach out to my reviewers on PowerShell and see if they are willing to give it a check! (I was going to try to set up a virtual box, but it's already been too long ... sorry!)

@mdlincoln

This comment has been minimized.

Copy link
Member

mdlincoln commented Jun 10, 2016

If it sounds ok, I may just show the wget command. I'm concerned showing two alternate commands would make too confusing what should be a simple aside. I've added a link to the first wget lesson right next to the appearance of the command in the lesson, so that further help will be just a click away for readers.

@ianmilligan1

This comment has been minimized.

Copy link
Contributor

ianmilligan1 commented Jul 5, 2016

Apologies for dropping the ball on this @mdlincoln – I have been on the road and then had a bunch of administrative work to do (i.e. applying for tenure!).

Great, I think you're right with wget.

OK, I think we're almost ready to push this forward onto the main site. You've responded to reviews well, things are looking great.

Any last minute tweaks or thoughts before I begin the process of making this live?

@mdlincoln

This comment has been minimized.

Copy link
Member

mdlincoln commented Jul 5, 2016

@ianmilligan1 I'll give it a last look this afternoon, and will ping you when I'm done with the last edits.

@ianmilligan1

This comment has been minimized.

Copy link
Contributor

ianmilligan1 commented Jul 5, 2016

Great, thanks!

Also I need to pick an image in keeping with our old-timey style here.

These interest you at all?
Potential option 1
Potential option 2

Rationale: JSON often used for Twitter, so 'crowd.' Also, the cheese levee interests me. 😉

@ruebot

This comment has been minimized.

Copy link

ruebot commented Jul 5, 2016

I vote for: Potential option 2

@mdlincoln

This comment has been minimized.

Copy link
Member

mdlincoln commented Jul 5, 2016

@ianmilligan1 OK, I just added a handful of small typo fixes. I am done with my changes.

The final bit that needs to be done is to check in on the PowerShell lesson to make sure that this lesson can properly link to it.

As for images, I'd vote either option 2 (I like the slicing metaphor!), or this farm equipment, which makes me think of grids, refining, and organization 😄

@ianmilligan1

This comment has been minimized.

Copy link
Contributor

ianmilligan1 commented Jul 5, 2016

Great. Your final call between the farm equipment or the cheese slicing, @mdlincoln.

As for PowerShell.. I haven't been able to get my hands on a Windows box. Do you want to wait until we can get somebody to test that?

@mdlincoln

This comment has been minimized.

Copy link
Member

mdlincoln commented Jul 5, 2016

I vote farm equipment!

The jq code works fine on PowerShell - I just meant that I include a hyperlink to the power shell lesson in the text of my lesson, so it'd be good to have both published at the same time

@ianmilligan1

This comment has been minimized.

Copy link
Contributor

ianmilligan1 commented Jul 5, 2016

OK great. I'll get that image working.

I'll ping @jerielizabeth – why don't we sync up to release on the same day. What's your ETA on your end?

@ianmilligan1

This comment has been minimized.

Copy link
Contributor

ianmilligan1 commented Jul 5, 2016

And @mdlincoln I'm moving this over to the main repo, just because I have some free cycles (tho yours is very easy to move!).

@jerielizabeth

This comment has been minimized.

Copy link
Contributor

jerielizabeth commented Jul 6, 2016

hello! we are quite close on the powershell tutorial, but let me follow up
and get back to you!

Jeri E. Wieringa
Digital Publishing Production Lead, George Mason University Libraries
PhD Candidate, Department of History and Art History
George Mason University
www.jeriwieringa.com

On Tue, Jul 5, 2016 at 2:29 PM, Ian Milligan notifications@github.com
wrote:

OK great. I'll get that image working.

I'll ping @jerielizabeth https://github.com/jerielizabeth – why don't
we sync up to release on the same day. What's your ETA on your end?


You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
#23 (comment),
or mute the thread
https://github.com/notifications/unsubscribe/ABYXQPyzSV5T-6j9NVS3YPTfS2HiQ3oHks5qSqKUgaJpZM4IlvPJ
.

@ianmilligan1

This comment has been minimized.

Copy link
Contributor

ianmilligan1 commented Jul 6, 2016

BTW, @mdlincoln – re: difficulty. I think this should be a 1. You've laid it out very clearly, use a GUI interface to tease out the nuances of jq, etc. Does that sound OK with you?

@mdlincoln

This comment has been minimized.

Copy link
Member

mdlincoln commented Jul 6, 2016

Maybe a 2? @shawngraham had noted that there is a sharp rise in lesson difficulty as you progress.

@ianmilligan1

This comment has been minimized.

Copy link
Contributor

ianmilligan1 commented Jul 7, 2016

OK, happy to make it a 2 then. Otherwise I think we're ready to go, just hoping to sync up with the PowerShell tutorial for the big reveal. But if not, we will launch next week sometime before I go on vacation. 😄

@mdlincoln

This comment has been minimized.

Copy link
Member

mdlincoln commented Jul 21, 2016

@ianmilligan1 it looks like #18 has been soft-published, so this lesson can go public!

@ianmilligan1

This comment has been minimized.

Copy link
Contributor

ianmilligan1 commented Jul 21, 2016

Great, thanks @mdlincoln (am on vacation so not following things as closely).

Here's the live lesson, and there's a link on the main lessons page as well. Let me know if you run into any issues (or just submit a pull request - whatever's easiest for you).

If all looks good we can do some tweeting and publicity! 👍

@ianmilligan1

This comment has been minimized.

Copy link
Contributor

ianmilligan1 commented Jul 22, 2016

... and we're live, publicized, and I assume kudos and fame are beginning to trickle in.

Thanks @mdlincoln, it was a complete pleasure working with you. And thanks also to @shawngraham @ruebot @hamlet82 for their reviews, suggestions, etc. Can't wait to see this out there.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment