The Reason We Work

This Friday I get to participate in one of the best parts of my job, graduation. I am proud to work at a community college because as much as any organization, we work every day to try and improve the lives of our students. Many community college students can barely afford to pay for the bus ticket that brings the to one of our campuses, but through education they are able to change their situation and make a new life for their families. I was blessed to have parents that encouraged education, to have friends that pushed me to succeed, and to have professors that challenged me every day and helped me press on even when I didn’t think I could make it. Not all of our students have had the same encouragement at home and from friends that I had. I do however know that the minute they step on a RCCC (or my former employer CPCC) campus they are built up, encouraged, coached, and cheered on to achieve goals they likely never thought possible. The accomplishment of graduation is something to be celebrated, and this Friday I can’t wait to applaud the success of our students and the great work of our staff. Thank you Dr. Michael Smith for being that professor who made such a difference for me. Although I am not a professor, but an administrator, I hope I can live up to the example you set and always be an advocate for our students. Happy Graduation RCCC students, and all of my friends who are graduating this time of year, well done!

The Right Focus

Too many times I see occasions where IT professionals are touting the newest technology, the latest tool, or the “cool” innovation.  Don’t get me wrong, I love new toys as much as the next guy, but I think all too often we focus on the cool at the expense of the important.  Innovation is vital to the success of our organization, but releasing the latest gadget is not always the best way to be innovative.  Sometimes using an existing tool in a new way, or to full potential, can provide the greatest innovation.

Lately I have determined that there are two areas where increased focus can lead to great things:

  1. Setting and meeting expectations
  2. Culture

When you set expectations, and then meet them, it provides a true opportunity to see where time is available, and where innovation may occur.  All too often we are reactive to the newest requested item.  Unlike some companies we have multiple technologies, tools, and customers we have to support.  It is easy to get lost in the “urgent” request/need.  When we set an expectation for how we handle “emergencies”, and how to manage projects, then we are able to be a proactive organization, not reactive.

Culture is more vital to the success of the IT organization than most people realize.  I have seen more traditional companies  scoff at tech companies who have a deep focus on culture.  In many cases these traditional organizations only see culture as a means to reduce pay or as a nice bonus.  What I have found is that focusing on the culture of the IT group provides a workplace where people are enthused about their work and feel empowered to make a difference.  Culture is not telecommuting, or time off, or even how projects are managed.  Culture is how we interact and work together to pursue a common goal.  It is how we empower employees to accomplish their work and feel a sense of ownership.

The new technology, the cool tools, are always fun and innovation can definitely come from something new.  I just see more and more that real innovation comes from the people you have and how you encourage their talents over any particular tool.

Presenting on Being a CIO

Recently I made a rather large transition in my career, I became a CIO. For years I have worked as a developer, team leader, and eventually Executive Director. When preparing to make the transition I did not think it would be tremendously different from my previous work. Although there are a lot of similarities, there are also a number of changes from my previous life.

In 3.5 weeks I will be speaking at the annual SEDUG conference about being a CIO in Higher Education. I hope to share information that might help others determine if they want to become a CIO, or how to better serve as a CIO in their organization.

When I think about the topics I want to cover, and how I want to present the information, I immediately think about a few topics:

  • Providing focus and leadership to your team
  • Three keys to success as an IT leader: collaboration, transparency, communication
  • Dealing with legacy decisions
  • Setting the right tone
  • Preparing to innovate

I am sure as the event approaches I will think of more topics to cover.  I am also sure that I will try to impart some of the great wisdom passed to me by amazing leaders and friends like Kevin Roberts (Abilene Christian University), Phil Komarny (Seaton Hill University), and David Kim (Central Piedmont Community College).

If you happen to be attending the SEDUG conference stop in and listen, heckle, question and we can all learn together.

Stripe Connect with Rauth and Django

I have been working on an application that needs to collect payments for multiple merchants.  After looking into various ways to accomplish this, I landed on Stripe and more specifically their Stripe Connect service.  Stripe Connect allows you to have access to your customer’s Stripe account in order to collect payment on their behalf.  You can then add convenience charges, and ensure that money does not transfer between multiple accounts but instead goes directly to the customer’s bank account.  All while still maintaing the flat transaction rate (2.9% per transaction as of this writing) with no monthly fee or merchant account requirement.

In order to use Stripe Connect a merchant must go through a Oauth 2.0 flow to authorize your service to access their  account.  On the Stripe website they show how to perform this basic authorization with urllib and requests.  This method works, but is a bit inefficient.  You will end up repeating things anytime you need to make an API call to Stripe or want to perform other actions.

Rauth (built on the awesome requests library) is a simple Oauth1, Oauth2 and Ofly consumer library.  It simplifies a number of the actions required to handle Oauth.  Getting rauth setup with Django and Stripe Connect is pretty easy.

Install Rauth

Initialize the Oauth2 Service

You will want to initialize an Oauth2 service for connecting to stripe.  You will want to set this up so that it is outside of a specific view but available to multiple views in your file.

There are other arguments you can pass to the service, these arguments provide the minimum required to make the connection and authorize via Stripe Connect.

Note: You should pull these values out into your settings file so that you are not hard coding client ids and secrets that may have to change at some point into your app.

Ask the User to Authorize you to use their Stripe account

Once you have configured the stripe service, you will need to generate a request to stripe to authorize your application.  This is a OAuth workflow that will be familiar if you have ever used Twitter of Facebook to authorize/login to another service.  To generate this request we will create a view that when called build’s a url with our client information requesting a authorization code.  The Rauth OAuth2Service will handle creating the authorization url and including your client_id and client_secret.

This will return a temporary code that is used to request a permanent access_token for connecting to stripe on a user’s behalf.  The return URL is specified in your Stripe Application settings:


Request the Access_Token

Once the user has authorized your application you will receive a temporary code that is used to request the access_token.  This will be returned to the callback URL specified in your Stripe application settings.  You will then need to make a raw_token post request for the access_token (due to the nature of how Stripe Connect returns the access_token payload, we will need to use the Rauth get_raw_access_token() function):

You now have authorization to make transactions on your clients behalf with Stripe.  In the above example you would NOT return to the page the access_token but instead want to save it to the database so that you can utilize the code to make payments in the future.

There are other ways to accomplish this same thing using urllib and requests directly, but Rauth definitely makes it a lot easier.  Having the Rauth service is also quite useful for additional api calls in other views and services and if you intend to use any other OAuth service in your application.

I make no claims that I have done this the perfect way, but it works.  Feel free to recommend improvements and leave feedback.


Random thoughts about technology, higher education, travel and other things I find interesting.