Wednesday, September 20, 2017

Summer Progress

Summer was full of things to do and projects I've been working on. I got to work on my C++ course and completed it just a couple weeks ago. That was a lot of fun because I feel it was teaching me the scalability of programming. Languages like Python are great for their simplicity, but diving into the details with C++ made me understand how much of software development is focused on making code reusable, scalable and safe.

I got to learn about managing memory and pointers and public/private classes (and why those things exist at all!), and if this course represents the general direction that Software Engineering will go, then I'm sooo ready for it!

I've also been able to create an OpenGL 3+ context through SDL and start playing around with it. Previously I had done something similar through Python + QT, but I ended up realizing I was usng OLD OpenGL tutorials. Honestly, I had tried really hard to make sure what I was learning was relevant! It's pretty tricky getting started sometimes...Anyway, so I decided that with my newfound C++ knowledge I would give OpenGL another go. VBO's and shaders made things a little more difficult at this stage, where I'm just trying to display a triangle, but I finally got it working. Now I can accept keyboard input, play sounds and music, and change colors. I had to follow two different tutorials--this one was mostly about SDL but showed me how to get things compiled and running on Linux without using Visual Studio and this one had the most recent OpenGL information. I compiled the program in Linux and put it up here. Not sure if it's going to work on anybody's computer but mine for the time being...

Also, I made a video tutorial about Flask on YouTube, but it's not complete and the audio is pretty bad. I couldn't help it though! It's one of those videos you create more for yourself than anybody else...

Sunday, April 30, 2017

A chapter in my life: Leadership Course and Flask

The last few months have been absolutely insane. I just finished with a 3-month leadership course for College, bringing me to the two-year mark in my degree. This was a particularly challenging course because it involved a lot of interaction with other people. These interactions happened a few different ways: talking to people I already knew at work and Church, group chats online and also a 4-day long "Capstone" that I went to in Estes Park, Colorado. That was a ton of fun!

The weeks after have been hard. Some of that I credit to the fact that something really fun had just ended, but I think there was just a lot of stress, too. Finishing up the rest of the course, taxes, meetings with people--not to mention my car had a timing belt go out, which meant the engine pretty much blew up! Everything piled on and it was really tough for a while there. But my taxes are now done, I have a new (to me) car and the course is completed. I think I've come to the other side of that whole mess, and boy am I glad!

But here is what really got me excited during those months: flask, a framework for integrating Python code in webapps. Boy, did I discover a whole new world here! I had been trying, for quite a long while, to make the tools I've already built at work accessible to the other technicians. The main problem I was running into was all the different computers I needed to install it on.

I had what I call "Techassist" running just fine on my computer: I could query databases for our customer manager, Email server, spam filter and our rate limiter along with a few spreadsheets full of equipment with their respective IP addresses. What this allowed me to do was automate certain parts of my work, allowing me to enter data once and have it reflected in three different places. No typos, no 5-minute repetitive typing process.

I'd been using this program for months, but every time I tried installing it on another tech's PC, I ran into two problems: first, I needed to do it when they weren't on their computers. That's pretty rare. Second, their platforms were vastly different from mine. One tech is still running Windows XP for crying out loud! The others had different versions of Python running, QT failed installation for some reason, all sorts of little annoying things.

So one weekend I just asked myself: how long would it take to implement those features through a webapp?

Now maybe you're reading this and thinking I am taking the wrong direction. If you do, please let me know your reasons! This was actually a really hard choice for me to make. See, I love KDE. I love QT. I love applications that work, on or off-line. For those reasons, I've tried to make my programs work using those technologies as much as possible. But I realized an app like this is going to need to be on our internal, private network anyway because it's constantly running queries to our servers. If I did this through a web server, giving everyone with a web browser the same consistent experience, I save a lot of headaches while ensuring I have complete control over the only device that's going to be making these automated queries to so many different databases!

Plus, I'll be honest, I'm a visual guy, and I love Material Design. It's so easy for me to create what I want with CSS because I've used it forever, and this was a nice way to demonstrate what I could do in a way that was made more difficult (for me) with QT.

So I experimented with Django and NGINX for a few hours that weekend. I've always wanted to learn Django, but I quickly learned this would take several hours more than what I was ready for, just to get something simple working that day. Then I found Flask. It's similar, uses some of the same components (Jinja2 Templating language), and I had a basic webapp up in, I think, just under an hour? (Maybe I'm slow at learning from tutorials, but it was still faster!)

Fast-forward three weeks: I have been given my own virtual server hosted on our network at ATC Communications. I've got that server successfully talking to 2 different databases and we can import a service order by typing in one number. From that one number, we can now create a whole new user account just by reading data from one database and inserting it into the other! There are also actions for updating and removing accounts. I've implemented a search function that can find the device we're looking for by name and can launch a telnet session, separate browsing window or local management program based on the type of device!

I can add to any of these features or implement new modules without taking everyone else down or asking them to update. Everyone can get to this program and use it with no installation*! I set up a link where they can report errors directly to me. And, of course, it's all tracked with Git. I feel like Flask has enabled me to go crazy with all these tools I've had working but had no way to share! I'm so glad it's working and am looking forward to adding to it in the coming weeks.

*Okay, fine, you got me. If you want launching of what I defined as "radwin://" URL's to start a client-side batch script I wrote you'll need to download and run the custom registry file I created and the script I made. Let me tell you, that part is pretty sweet! You just click on a link and our manager program opens up with the username and password already entered and pointed at the right IP!

Sunday, January 15, 2017

Fresh Start on OpenGL

This year started a little different from what I expected. For a good part of December, I've been dealing with the aftermath of a snapped timing belt on my only car. With my Kia Rio, that meant the engine was pretty well done for, and replacing it was going to get real expensive real quick. Getting driven to and from work isn't fun when it's your only option! But after much frantic searching, I now find myself in a new-to-me car! Maybe I can keep this one from accumulating random junk over the next three years better than I did with the other...

I think I've also figured out one issue that's been bothering me to no end. On my side project, PyQt2d, I kept running into the same problem. The program would run fine on two computers I have, but totally crashed on another, saying GLEnd was causing an error. Well, I now know, that's because my current computer doesn't support the by-now incredibly outdated GLBegin and GLEnd functions that were abandoned waaay back in 2010 with the release of OpenGL 3.3! Silly me.

So now comes the next task: getting my head around Variable Buffer Objects and GLSL shaders. I think this will be really good, though, because before now, I didn't know that's how most OpenGL applications are working now. Anything WebGL, OpenGLES, etc., uses VBO's. So if that's the future, by golly, I'm fine with learning!

On the plus side, I really look forward to starting to understand GLSL shaders. I've always been intrigued by how they can make incredible Chrome Experiments come alive, or turn my MineCraft world into a photo-worthy thing of beauty! Many of the things which I'm learning here also translate into C++ code, which gives me a head start on my college courses, which is always a nice thing.

With the end of the year comes the end of a successful college term. Some progress ahead, some behind, but at the end of the day I've got the number of credits I was shooting for. This next year, I'm going to be tackling more mathematics courses, finally starting some C++ coding courses and will also be finishing up with the last Leadership Course from College Plus. With this last one, I'll be attending a leadership "Capstone" event, where I'll travel to Colorado and meet with other College Plus students for a week. It's going to be a big jump for me--a long drive, time off work, etc.--but I think it will be good.

Looking forward to what this year will bring!

Monday, December 12, 2016

Stuff from December

I can't really give much of a specific title to today's post. There are just so many different directions, so many little things I want to bring up! I should really just split these into a few smaller posts.

First off, my project at work is finally coming together! I am able to query our MySQL database (after much research, trial and error) from one of our programs and am utilizing the REST API from another to bring two of our programs under control, inside one PyQT-powered interface that any of us can use from any workstation in the office! This makes me very excited. I've also been pulling giant lists of email addresses, going to each record and asking, "do you exist here? How about here?" until I came up with this massive list of accounts that I'm still wrapping my mind around. Big data, I guess.

Basic, early visualization of what
the program should look like.
Early. And very basic.
Don't forget--basic.
I still need to bring our email server under control. It works in Perl, which is great, because they have already created dozens of scripts for it. The problem is, I can only run them on the server--I can't authenticate from another machine. It's another hurdle, I think one that I'll need to solve by working with my manager to figure out how to enable remote connections. But we're reeeally close to something that can save us lots of time, and it is already saving me two steps every time I need to create or remove and email address.

I hit the 1/3 mark on my college in November, and I'll know in a couple weeks if I passed a six-credit course over last Tuesday. Sometimes college feels like a slow, long trek. And, really, in a lot of ways it is. Persistent work over a long time isn't really a bad thing. But boy is it good to look back and realize I'm almost halfway there. It's going to be great to get there!

StackOverflow continues to blow my mind with their job search engine. Every once in a while they bug me to update my Developer Story, and I can't help but think that's the way of the future.

Found a great and I think rather insightful video about the over-complexity that comes with hundreds of people doing the same thing, or abstracting to a perhaps ridiculous level without making the process simple. I take it as a good reminder that anything I create really isn't useful to other people when it's hard to understand.

I purchased a green screen recently after realizing I have an entire room of my house just sitting empty. I have a lighting set from my time in professional photography and a few backdrops, but I knew I had to get a green screen when I saw this guy. I'm sorry, but live programming in front of the screen you're working on? That's just way too cool. I fully expect to embarrass myself trying to imitate this guy within the next few weeks.

Okay, I think that's it for now. Having lots of fun as the family is getting closer and closer to moving to Nebraska! Sounds like we'll all be together for Christmas. I couldn't have expected how meaningful that would be at the start of the year. What a great way to end it!


Saturday, November 5, 2016

Hackathon 2017

This month has been so much fun! Between projects at work and going to a hackathon in Denver I've been growing in so many ways. I've been learning things about Python, QT, JSON, jQuery and the REST API. It has been a huge learning experience--a wonderful month of learning new programming skills and improving on old ones.

First of all, the hackathon was amazing! I joined on a team led by Josh Kruger, who I knew from the year before. We had a lot of fun working on a program that was originally his idea this year. Essentially, it's competitive giving: you give a set amount of money to a charity of your choice, and you challenge a friend to do the same. Then the two of you play a game (in our example we used Rock, Paper and Scissors). Whoever wins gets the combined money donated to their charity of choice! Win or lose you're still giving but it gives you a reason to want to win the game.

It was really hectic all weekend long: the first night we spent a lot of time just setting up the get repository getting everybody on the same page. When that was done, I worked on the front end and started learning how to use Bootstrap. This was new to me, but nothing all that crazy--I learned to appreciate it as lots and lots of CSS helpers that look really nice! The others had come up with a schedule and started working on game logic/server side code. I also designed the icon theme which was a lot of fun because the let me do what I wanted with it. I love material design, so I made some cool-looking buttons and icons that (I think) worked really well with the material theme. Of course, I was using inkscape for that. I love inkscape and I really impressed some of my teammates with what it could do while I was there. Josh introduced me to the atom text editor, and while I love the KDE text editor, Kate, I found some pretty cool features (usually installable packages) that made Atom an editor I can't ignore.

Once we had the interface working the biggest challenge was to get the animations done for the little game just to show who was winning and who was losing. We didn't get as far as we'd have liked, but we did at least have an interface and some basic pages that showed people the core ideas. It must have been enough because our team actually won! Best project started before the Hackathon. It's kind of funny, that's exactly what we won last year, too, with the Library Box project! Crazy how that happens sometimes.

There were some other seriously awesome some projects at the hackathon. One of those was an Amazon Echo artificial intelligence that would read you recent news articles from the internet, then it would read you a Bible verse that actually had something to do with the incident! It felt like science fiction listening to it at the demo. Another thing was an app to help people grow their relationship with God by helping to make daily habits. It would show you your history and things you'd learned recently. Looked pretty awesome! If they release that app I would love to use it Some day.

On my way back I was able to visit friends and family in Pueblo. It was a blast meeting people that I hadn't seen in months, especially my sister and Mom.

At work I have been having lots of fun working on linking up our mail server, spam filter and customer management software to automatically sync with each other. This means finding an API for each, learning how to use it, getting data from them all then intelligently acting on it. The first goal is to figure out where our duplicate accounts are, and which ones are broken or left over from old customers. Eventually, we'd like to automate account creation, too, and this is all possible so far with the tools I've seen that are available.

Our spam filter program has a REST API, which made things real easy. They even had a python wrapper for it, to boot! It was a little old, used Python 2, so I updated it to 3 and have been able to do everything I need. Our mail server uses perl scripts, and they already have put several on the website. Those pretty much do what I need. We keep a lot of the information in a MySQL database, and I've been able to log in and pull data from that, too. All these different parts are finally coming together. Automation, here we come!

Tuesday, October 4, 2016

Plasma LTS!!

YEEEES!!!! I am such a KDE geek. Look at this, a huge update! Multiscreen support! Key modifiers! I'm running a system update right now!
https://www.kde.org/announcements/plasma-5.8.0.php

Wednesday, September 14, 2016

Flexbox!

I can't believe I have been working with HTML and CSS for so long, thinking I could call myself something of a web designer, without knowing the ins and outs of the Flexbox. Heard about it before, didn't understand it until now. Flexbox, where have you been all my life?!? Oh, right here.

Combining that with the media queries I am finally adding to my pages, I am finally understanding for the first time how responsive web design works. See, I only did enough to create a semi-fluid website (with some fixed-width elements, shame on me) for the website at work. Designing for mobile was always a goal, something I'd like to eventually do, but it was lower on the list. I finally got to it, and am realizing that designing for mobile quite possibly should have been my first step.

In addition, I've found some amazing resources straight from Google about responsive web design. I've been pouring through those materials as quickly as I can, and am finding lots of things I can improve on my templates. I'm having lots of fun with different layouts right now, and am finding the sweet spots for different layout types. Applying the new mobile styles to the existing site is taking some time, but I am so excited to see the way it will look and feel when I'm done with it.

Also, I am really considering spending $5/mo on a virtual server from Digital Ocean. If you have any advice, pros/cons, let me know in a comment below! Eventually I'd like to move this website over to something I can control a little more. Blogger doesn't allow me to edit the actual HTML and CSS of the site, which has always bothered me. It would be wonderful to liberate my pages! Let me know what you all think.