Design and build Qt GUI

I was hoping to get further this week, but I have a lot to learn about Qt Creator and I’ve had some crazy life circumstances that I’ll eventually get to talk about here. ? My capstone group comes first, so I have the mockups below and the very beginnings of a Qt GUI that I may or may not be creating the right way. I’ll have to make up some time on it as things start to settle down a bit again for a few weeks. Continue reading “Design and build Qt GUI”

What have I gotten myself into?

This week has been about figuring out scope and design – so truly, defining what I’ve gotten myself into with this project. πŸ™‚ It’s difficult to project how long something is going to take when you’ve never worked with it before, so I’ve given myself a list of milestones I expect to actually get through by the end of the quarter with some more complex stretch goals that I can get into if time permits. Continue reading “What have I gotten myself into?”

Setting up Qt Creator on Fedora 27

Here I go again, with more determination now that it matters! I need to start working on my project but that’s pretty tough without a dev environment. πŸ™‚

These are the commands I needed to run as root (via sudo):

$ dnf install make gcc-c++ gdb
$ dnf install qt5*-devel
$ dnf install qt-creator

After this step I still don’t have any valid kits. I read a bit more on the link I’d found and realized I needed to fix the default Desktop kit. See how it has the warning symbol: Continue reading “Setting up Qt Creator on Fedora 27”

Project Time!

As promised, I’m going to be writing about my independent study project. I’m thinking I might write about it here along with my weekly status reports. As of right now, it’s but an idea. The plan is to extend the TCP chat program I wrote in networks to have a GUI for the client and add features as I am able in the bit of time allowed for this ~50 hour project. I was hoping to practice with Python, C++, threading, and learn a GUI framework so I think this will be a solid project for that. πŸ™‚ So far, I haven’t even managed to get Qt Creator installed correctly, so it’ll be interesting.

It’s not the end, just the beginning of something new!

It is the eve of my final quarter at OSU and I’m feeling surprisingly tranquil about it. I look back over the last two years and it’s amazing how much my life has changed, for better or worse, in that time. My health has pretty well gone to shit, but that’s on me. Stress and a tendency to overextend myself is not great for trying to keep up some sort of diet and exercise routine. In any other way I can think of though things are so much better.Β  Some I can’t talk about here but it’s incredible what opportunities have been opened up for me. Had someone told me I would be any of these things would happen in two years of school, I’d have told them they were nuts:

Continue reading “It’s not the end, just the beginning of something new!”

So you think you want to be a computer scientist…

No one is ever really prepared to start a degree in CS, it would seem. This has been a recurring theme for me, watching the intro classes in my program, and it’s not always in the way you might think. Sure, for many it’s a wild new concept that’s very challenging but you also have students who have been at it awhile and are just seeking the piece of paper. Even among the latter, there’s often a wide variety of skill and humility/willingness to learn. Continue reading “So you think you want to be a computer scientist…”

Showcase thoughts

I just got back from a four day weekend in Portland. Since I have a good friend in the program to stay with, I get to make the trip out there into a mini-vacation and I love it. Her people tend to be my kind of people and it’s so great and so relaxing. Someday we may even figure out if her roommate and I are related too. πŸ™‚

I’m really only even casually looking at these because I do have a job that I like with a team that I love. I’m in it for the networking mostly. I am, however, genuinely interested in learning more about companies in attendance – what they are about, what sort of development they do, and what long term opportunities they offer. Naturally, I’m also working on my own interview skills throughout all of this. No one ever wants to stumble into the situation of needing a job and being terrible at interviewing! CS interviews are hard enough without the additional hurdles of the social part of the process.

A classmate and former group member noted that I was really “on point” with a specific company and I told him, “the trick is to not give a shit,” meaning don’t be afraid of failing. When/if you are looking to make a big career change like most of my classmates are, it’s hard to remember that it’s ok to fail. Not everyone is going to love you and that’s perfectly normal! It’s not that you don’t care because you don’t want a job offer from them, but an interview is as much for you to interview them as it is for them to interview you. You don’t want to end up somewhere that you are going to be miserable. So, with that being said, I have a few quick tips for any interview you find yourself in:

  • Be yourself – but be sure to keep it PG πŸ™‚
  • Be prepared:
    • Resume copies
    • Research the company or companies
    • Bring questions for them
  • Find a way to connect your past experience to what they do

As an added bonus, once I was being interviewed by [a company] and they gave out some interview prep questions and I made myself a crib sheet based on their questions. I’ve never nailed phone interview questions quite like I felt I did that time, but I still lacked confidence and it showed. They interviewed me again several months later and offered me a job but I had to decline on account of the pay. However, this crib sheet knowledge has stuck with me since then. If you have the opportunity, make one!

Quarter end

As the quarter comes to a close and the start time for my algorithms exam loomed ahead, I realized last night just how exhausted I really am. I thought I was burned out after spring term but as it turns out, there’s a mental exhaustion that’s stronger. I must describe the last two weeks as a perfect storm between work and school.

I was very much not prepared for what I was in for, but such is life and I’m glad I didn’t take either of my classes alone. I knew going in what I needed for each grade, so I had a hard time motivating myself to study for my algorithms final. Motivation finally struck, but I studied more than I actually spent time putting things on my cheat sheet and then forgot things of course.

I’m so relieved that the quarter is over and am looking forward to a month of relaxation and time to learn some new things. πŸ™‚

The depths of recursion

Recursion is a tricky topic that, to be honest, I never really quite understood until I took assembly last fall. This summer, a good friend of mine took the class and would send us several questions at random over the course of a couple weeks as she was studying for her final. When recursion came up, I knew I had to remake the spreadsheet I’d done for myself when taking the class. Sadly, the original was long gone, but I’d like to think this one is better. πŸ˜€ You may want to open it in a different tab for best visibility.

Something I never really fully understood at first was that recursion is just another function call. Like any other call, once that function completes, your program resumes with the next instruction.

It just happens that with recursion, these function calls are nested. It keeps going until the base case is reached, then resumes execution where it left off. For many functions, there’s nothing after the recursive call so it just completes the function but sometimes there are instructions after which truly demonstrates how recursion works. Looking at this example in MASM, the value is incremented each time rcrsn is called but it prints them in reverse order. If it was printed before the call to rcrsn, it’d print in increasing order. However, it’s after, so what happens is, once the base case is reached you start backtracing to resume execution after the previous function call making it print in decreasing order. Someday I may revisit this in more detail, but this will do for now!

This has a good example of it in C++. http://www.learncpp.com/cpp-tutorial/7-11-recursion/

But what do I USE????

Last weekend I was part of yet another round of heated discussion on a topic that I see a lot of division on among my peers – text editors vs IDEs for beginners. I’ll get into that, but first I need to give some background. At this point, I’ve been programming for a few years in one way or another. I started out with VBA (Visual Basic for Applications) in 2012 and then I didn’t have to worry about what I was using to write and compile my code, but once I ventured into C it was a whole new terrifying world. In fact, I didn’t make it very far through CS50 because it was all terrifyingly new and doing anything in the appliance (virtual machine setup) was so foreign as was the way everything was written. I think it took me a month to do two problem sets, although I was also working through the capstone for my MBA at the time. πŸ™‚ After that, I walked away. I couldn’t make it through the hours of lectures. Now, if I can’t sit through hours of listening to David Malan, I’m not going to be able to sit through long lectures from anyone. I needed something quicker, where I could watch or read something then immediately try it. Right after graduation, I found a C# course that looked promising. It was complicated enough to hold my interest and challenge me while also teaching me the basics of how to use Visual Studio as an IDE. After finishing I thought, hey, I have the perfect simple project to implement with this and built my first program with a GUI that I then used regularly at work. I was hooked.

Eventually I found my way to OSU’s post bacc CS program. In this, they wanted us to use vim and I did at first but was frustrated with the speed of development. As soon as I felt I’d managed enough of a handle to make edits on the server as needed, I found my way back to my trusted friend Visual Studio. It wasn’t quite as friendly for C++ as it was for C#, of course, but it was familiar and worked well and I was able to debug and understand. In the second intro course, which can only be described as a whirlwind of personal hell, I was introduced to Jetbrains’ Resharper extension for VS about halfway through. Life changing. I learned so much from its angry red text and red and yellow light bulbs hahahaha. It wasn’t even that it was always correcting bad code – IT WAS SUGGESTING HOW TO MAKE IT BETTER. Like hey, did you know, this could be declared constant? Oh, I didn’t, thank you so much!

The next quarter, since I had been using cloud 9 to pair debug some of my assignments with a friend/mentor, I started using it more during data structures when we had to do group programming. After that, it only made sense to continue using it for web development! Since then, I’ve almost entirely worked in c9.io workspaces. Parallel programming in C/C++, software engineering group project in PHP/MySQL, operating systems in C, and algorithms in Python. So, in short, I’ve reached a point where I’m just using a text editor with syntax highlighting and a terminal. It’s great, but the path I took to get here was very personal and exactly what I needed. Never did I do what I was told to do, but instead followed my instincts and I’m a better programmer for it.

So now to get to my point. I have a sort of survival guide I’d shared with students and when someone was directed to it, it spawned a discussion that left me furious and feeling attacked. I’m well aware that none of it was meant personally but I DESPISE it when people go off about how IDEs are terrible and detract from learning and tell beginners not to use them. Given what I’ve just said, it’s inadvertently shitting on my entire learning process. It’s not all or nothing. I would never be at the skill level I am nowΒ without extensive prior use of an IDE for its training wheels and visual aids but I also wouldn’t if I had used it as a crutch.

Vim is great. Text editors are great. They make mistakes painful and memorable, but only when you have the time to really devote to it and quite frankly I did not have it. I was working full time along with two classes as are many of my peers.

I DIDN’T UNDERSTAND until I entered shit in a class wizard and went, oh, so this maps to this, etc, etc and Lord knows I wasn’t about to keep working that way because it was slow. But it was what I needed to guide me down the path through the basics of syntax so I’d have more time for the actual deeper concepts.

I DIDN’T UNDERSTAND pointers until I threw them in a program and traced what was happening. Removing the small roadblocks of syntax left me more time for real problems like, what the heck is this address 0xCDCDCDCD…? (It’s a bogus address. Essentially that’s visual studio speak for “you shall not pass” and it means you did something dumb.)

IΒ  was a TA for the intro course for 3 quarters and am now a peer tutor. So when I see people struggling with the way things are presented, I always throw out IDEs as a suggestion. I may be a little harsh on Eclipse, but it eats your CPU for breakfast. πŸ˜€ They’re not meant to be eternal crutches but they sure as hell can teach you what you need to know in a much more efficient and certainly still effective manner.

The bottom line is, end goal should be proficiency in vim, perhaps even mastery if you so choose, and the ability to read a text about a language and learn everything you need to know. But your journey to that point is personal, and don’t shit on others paths. If anything, help them find their way to explore and discover it themselves.Β There is no universal path.