Should I say it?

Oh alright...

Hello world.

So, I finally took some time off.

After almost 4 years of non-stop hustle I decided to take the week after Christmas off.

No AdderallĀ®.

No VPN.

No code reviews.

Just family and sleep...lots of sleep. So now I decide to start the programming blog? The week I have basically done nothing but play with Django.

Ok, sure, why not.

So, let's start light. What was 2017 to me?

2017 was...

The year I finally found an IDE. Years of jumping from my neck-beardy elitist "I only use VI!" to Aptana, NetBeans, GEDit, BlueJ, eclipse, Atom, Sublime Text, Text Wrangler, VIm, MacVIm, basically all over the place. I had tried PyCharm in there and liked it but it had a few blockers that kept me from sticking with it. I had settled on an uneasy alliance between Sublime Text 3 and vim when I heard about changes in PyCharm 2017.3 that sounded good so I decided to give it a try again.

I've never been excited about an IDE before, but this thing is amazing! No more jumping through multiple hoops to open a project. Just open it, including remote sessions! All the remote functionality is far more accessible. Opening and ssh session is easy. Running SQL queries from within PyCharm with data handling far superior to Workbench. Using multiple python interpreters including remote is easy now. I definitely love this updated version of PyCharm. 

Most used modules of 2017:

  • Pexpect - I did a large automation program this year that made me quite intimate with Pexpect. At times, an incredibly frustrating module that took a lot of trial and error. I have come to love it. To be fair to pexpect, what I am doing mostly involves out-of-band sessions so a lot of it was literally being invented as I went along. I did not find any mature libraries for ipmi. In fact, I am looking to do some changes to make it outside world usable and maybe publish as an open source library.
  • Records: SQL for Humans - Funny how over the last 4 years what has changed the most in my code is the way I handle SQL calls. In the beginning, mostly out of ignorance, it was very handmade. While that did help me learn super() it was quite a mess. When I think of the inherently insecure, inline way I used to write complicated SQL statements with six.StringIO, jumping through ridiculous hoops. Makes me cringe. (six.StringIO is actually very useful, it was the user not the tool. )
    Anyway, moved of from there to SQLAlchemy and dictionaries for statements. SQLAlchemy is wonderful and basically Records is a wrapper for it. But I find working with records a much faster and unobstructed way to get up and running with SQL. I don't want to think about what's going on to connect and grab the data. I just want an object I can work with full of data. I want to effortlessly be able to spit it out in several formats. records gives me that. It's almost like Requests for SQL. Which makes sense as it is written by Kenneth Reitz. The creator of Requests. 
  • Requests - Duh. Who doesn't? I can't think of a single program I wrote this year that did not use requests. It's the single best package every created for Python. (Full disclosure: Kenneth Reitz is a friend, like, one of my best friends ever, outside of Python - I genuinely love him, but he could be my nemesis to the end of time and I would say the same thing)
  • CSV - I do a looooot of moving data around for business intelligence to use. Nothing beats tab-delimited csv. Not sexy, but true.