Abstractions & Pittsburgh Pride

by Brittany Martin


I had a lot of conversations like these last year in San Francisco: 

    Me: "I'm going to move back to Pittsburgh."

    Friend: "Why??! That is right next to Philly, right? I have a cousin there. You must know her."

     Me: "Pittsburgh has improved a lot in the last 2 years since I've been gone. Now that I'm a developer, there is even more opportunity for me there. Also, Philly is a 5 hour car ride away, you goof." 

     Friend: "Oh OK. Have fun in the City of Brotherly Love!" 

     Me: t(- n -)t

Friday Hug with Aaron 

Friday Hug with Aaron 

Abstractions, a polyglot production of Code & Supply, wrapped up on Saturday and it was a whirlwind. It was incredible how much thought, care and kindness must have gone into producing such an inspiring event. From tech leaders flying in from around the world to gentle therapy dogs to raise our spirits during the homestretch, it was my favorite conference this year. It certainly helped that it was located at the end of the Cultural District, the arts and entertainment section of town I'm proud to work in. I had the honor of introducing a few of my programming heroes like Aaron Patterson and Saron Yitbarek

I particularly enjoyed meeting developers that had never considered visiting Pittsburgh and were delighted by our neighborhoods, dining and culture. Tweets like these brought a smile to my face. 

 My good friend, Jackie Vesci, made an excellent point after it was announced that the Uber CEO and the Pittsburgh Mayor took the first inaugural ride in an autonomous car in Pittsburgh in the same week.

Unfortunately, we need to address why so many visitors were surprised by how strong our community is. I (happily) attended Nick Offerman and Megan Mullally's Summer of 69 tour on Sunday night. During the show, Nick yelled to the crowd, "What's the slogan of your city?". He got a resounding reply of "STEELERS". I felt a bit nauseous. We're better than this, Pittsburgh. 

As the thousand visiting attendees from Abstractions journeyed home, I held some hope that they will spread the word about how far our city has come. This is a call to action to the Pittsburgh community to be more vocal about why Pittsburgh is the perfect place for technology, innovation and culture to flourish.

A very special thanks for Code & Supply and the Abstractions organizing team. You created something very special and I suspect it will be the forward momentum we need. 

 

 


TLCC2016 and Me

by Brittany Martin


I finally get it. My co-workers at the Trust have been insisting that the Tessitura Learning and Community conference is the highlight of the year. Having just arrived home from Washington D.C., I'm already counting the days until we head to San Diego for TLCC 2017. 

What is Tessitura, you say? The Tessitura Network is a company formed by the initial users of Tessitura Software, the API and client that fuels our website and box offices. Their goal was to set up an open model, nonprofit technology and services company that avoided the pitfalls, disappointments, diversions and high fees experienced with traditional for-profit software companies (cough cough Ticketmaster).

The conference (TLCC) is an annual event where hundreds of arts and culture organizations come together to learn from one another and listen to what Tessitura HQ is working on in their next release. It's more loving than a highschool reunion. The TLCC staff makes sure that your trip is personalized and optimized for making connections. TLCC's special events (5k, First Timers lunch) and sessions (Open Space, you choose the topic) that fostered these moments.

Right after my co-worker and friend, Danielle, gave an excellent talk on our website refresh 

Right after my co-worker and friend, Danielle, gave an excellent talk on our website refresh 

This is the first year that the conference had a track for the developers that either work within their hosted solution (TNEW) or develop custom websites plugged into their SOAP API (like us, at the Trust). Leading up to the conference, the Trust web team met each day about a feature we are eager to implement so we arrived with a laundry list of features we wanted to get opinions about.

Without further ado, these were my favorite parts of the conference: 

Web Developers Forum: All Things HTTP(S)://

We joined the members of the Tessitura web team for an intense roundtable discussion on all things technical. This was my first session of the conference and it was a great way to put out our wish list of goals and to meet our fellow developers. It got a bit heated but that was needed in order to break the ice. I earned my induction into the community Bitbucket organization and Slack channel. 

Hands-On Developer Workshops

The next big developer feature is Tessitura's new REST API. For the first time, there was hands-on workshop to implement and test the REST API in a mock web app. While the workshop was conducted in Visual Studio, I was able to follow along in Ruby. If I was stuck, it was easy to flag down a Network developer. 

6am start on Tuesday 

6am start on Tuesday 

Tessitura 5K Fun Run 

It was a blast joining my Tessitura colleagues for this walk/run along the Potomac River. I came in 37th place, 8th placed female. Not bad for just starting my (challenging) career as a budding runner. 

Tessitura's Innovator Series Live at TLCC

The Innovator Series is a spotlight on the insights and innovation in the business of arts and culture. This was a presentation shared between three different organizations but Opera Philadelphia really stuck with me. 

Opera Philadelphia has been garnering attention as a high-energy producer and fervent proponent of opera as an exciting and relevant art form, capable of meeting a wide range of audiences wherever they are – from the opera hall to some of the most unexpected places. In her talk, Annie shared how Opera Philadelphia consistently creates the opportunity for imaginative and inspired work to happen by being what she calls “a partnership ninja,” equally deft at co-commissioning with another opera company as co-creating with a group of talented and passionate high school students. OP depicts how much creativity matters when keeping a non-profit relevant and thriving. 

hackathon.js

hackathon.js

Tessitura Hackathon

Experienced developers were able to get more hands-on experience with the REST and SOAP APIs, while collaborating with fellow community developers around a shared project or problem. I ended up bringing a coding problem (I'm learning Javascript at the moment) that I paired with Danielle on. Definitely not a traditional hackathon so I got to leave the ninja-rockstar pressure at home. 

Tour of Ford's Theatre

After the conference wrapped up, we traveled to Ford’s Theatre, a working professional theatre that just integrated with Tessitura (and ditched Ticketmaster!). In 1865, President Abraham Lincoln was shot by John Wilkes Booth while attending a performance of “Our American Cousin” at the theatre. Lincoln died the next morning in the Petersen House, a boarding house located across the street. During our visit to Ford’s Theatre, we explored the museum, which details Lincoln’s presidency and the events of the assassination, walked through the Theatre, entered the Petersen House where Lincoln died, and explored exhibits addressing the aftermath of the assassination and the evolution of the Lincoln legacy.

That's a wrap on TLCC2016. Spending more time with not only my Trust co-workers but District employees I haven't gotten to bond with was a highlight. I am incredibly proud of my District co-workers who spoke, moderated and guru'd sessions. My goal is to join you all next year!


Announcing ClojureBridge Pittsburgh

by Brittany Martin


I'm excited to announce Pittsburgh's first ClojureBridge on September 9th - 10th, 2016 at Truefit. Unlike Railsbridge, this is an event that will is geared towards intermediate female developers. To me, intermediate means that you are either coding professionally or you have a solid grasp of one programming language and are comfortable with Git and the command line. 

Why An Event Geared Towards Intermediate Developers?

  • I wanted to plan a great event for the female Academy students to TA/teach at so they can build their confidence. I'm also hoping they will want to organize future Bridge events. 
  • There is a low amount of programming in Pittsburgh aimed at intermediate women. 
  • Since Abstractions will have ended the month before, I want this event to serve as an opportunity for connections there to be carried over. Don't have a ticket yet? Buy one here
  • I get to participate as a student. Clojure is a general-purpose programming language with an emphasis on functional programming so it will be more difficult to learn. 

How You Can Help

  • I'm looking for female TAs and teachers that are comfortable teaching the ClojureBridge curriculum. Please sign up here
  • Know a Pittsburgh-based intermediate developer? Please encourage her to sign up here.  

I'm lucky that I have all of the sponsorship that I need from Truefit, StitchFix and Startup Weekend Pittsburgh. I'm also fortunate to name Marissa Torre, CTO for Culpeper Creative, and Jess Nebgen, VP of Engineering at Jetpack Workflow as my co-organizers. 

I'm counting down the days until September!

 

 


How to Deploy Rails with AWS CodeDeploy

by Brittany Martin


Now that I'm working at a large non-profit, I'm getting to stretch my DevOps skills a bit farther (with the help of our awesome Ops team). As we're moving our Rails app from version 2 to 4, it was time to see if we could retire the legacy application that we maintained to deploy the old app to production. 

codedeploy.jpg

Since we're big users of AWS, my team was excited to learn about their relatively new service: AWS CodeDeploy. CodeDeploy is a free AWS service that efficiently deploys your released code to a “fleet” of EC2 instances while taking care to leave as much of the fleet online as possible. Ship it!

I hunted around AWS's documentation and GitHub for any examples of deploying with Rails but came up empty handed. After a few (OK, many) failed deployments, we came up with a solid workflow. 

Here is what we did: 

  1. Setup an EC2 instance with everything that you need for your production server. In our case, this was Ruby, Passenger, and nginx. You do not want to clone your app via git to the server ahead of time but you will need to know the path of where you want your app to live on the server (for example www/var/...). Make sure you know which users you will use for each process (cloning the code, restarting the processes). 
  2. Install the AWS CodeDeploy agent on to the server. 
  3. Move the EC2 instance to a Production App Group AMI.
  4. In our codebase, we added the following bash scripts to our /script folder. Our full scripts are a bit more complicated (cloning our env vars from a secure s3 bucket) but these will get you off to a solid start. CodeDeploy currently hooks into GitHub only. Luckily, GitHub is what we are using to manage our codebases. 
  5. Setup a required AWS CodeDeploy appspec.yml at the root of your app that references these scripts (see below).

application/appspec.yml

version: 0.0
os: linux
files:
  - source: /
    destination: <the directory your code will live>
permissions:
  - object: <the directory your code will live>
    owner: <user who will deploy your code>
    group: <group that user lives in>
  AfterInstall:
    - location: script/AfterInstall.sh
      runas: <user who will deploy your code>
  ApplicationStart:
    - location: script/ApplicationStart.sh
      runas: <root user>

application/script/AfterInstall.sh:

#!/bin/bash
cd /var/www/<app location>
RAILS_ENV=production bundle install --path vendor/bundle
RAILS_ENV=production bundle exec rake db:migrate
RAILS_ENV=production bundle exec rake assets:clobber
RAILS_ENV=production bundle exec rake assets:precompile

application/script/ApplicationStart.sh:

#!/bin/sh
sudo service nginx restart

Commit these changes and make note of the commit ID. Next, it's time to set up CodeDeploy. From here, AWS has it covered in their walkthrough. Wash, rinse and repeat for your Staging setup.

After you have CodeDeploy setup, you will be simply need to know the commit ID, the group you want to deploy to and the frequency that you want your servers deployed in (one at a time, all together or half at a time). CodeDeploy does integrate with our CI service, TravisCI, but we have not setup the integration yet. 

CodeDeploy will render a success or a failed message after your deployment completes. If it does fail, CodeDeploy links you to the relevant logs so you can troubleshoot the issue. 

AWS CloudTrail automatically logs all of the deployment requests so you have a running log of who and what was deployed. Granted, CodeDeploy still feels new (they update the UI constantly) but I feel confident that the free service will only get better. 

I hope more teams will start adopting CodeDeploy once they realize it is free, stable and a great way to shed homegrown tools for deployments. 

Note: as a goal for 2016, I wanted to start writing some technical posts. Feedback is appreciated.

Thanks to the Pittsburgh Cultural Trust for giving me a great environment to learn awesome tools like these.