ECE 2524 - Recent Posts

ECE 2524

Introduction to Unix for Engineers

Recent Posts

Writing In Public: Finishing a MS Thesis paper is hard

Those of you who know me know that I’ve been ostensibly working on an Ph.D. MS degree for a very long time. Some might say too long. Others would say just the amount of time I needed to figure out where my passions lie and make appropriate mid-course corrections to my career trajectory. Now that I have made appropriate corrections I’m faced with finishing up a MS thesis paper and defending it in a couple of months so I can start a new chapter with a clear conscience (and the satisfaction of actually finishing something). Despite all the helpful advice to “just get it done, you’ll be so much happier!” I have found “just getting it done” to be incredibly challenging. Recently, Ennis suggested that I “write in public” as motivation.

Computer culture transforming education?

And in teaching the computer how to think, children embark on an exploration about how they themselves think. – Seymour Papert, From Mindstorms

Mindstorms: Children, Computers and Powerful Ideas was written by Seymour Papert in 1980 at the dawn of the personal computer revolution. I had the pleasure of reading an excerpt from the book published in The New Media Reader for a class. I immediately identified with what he wrote about programming as a tool to think about how to think. He predicted that the future ubiquity of computers might spark a revlotion in the learning process. Unfortunately, I was also struck by how little of what he hoped for has come to pass, even over 30 years since the writing, while his predictions of the increase in affordability, ubiquity and power of personal computers has come to be a reality. His critics have largely been correct in their predictions that computers would be used to replace exiting teaching practices of drills and tests rather than be exploited to change the way learning and teaching was done. But why?

Samples, Statistics, Central Limit Theorem, oh my!

Continuing the theme from last time, I’d like to take a closer look at another final project from this past semester’s ECE2524. Just like the project I reviewed last time, the central limit theorem calculator works as advertised, but it requires quite a bit of interactivity which makes it difficult to use in a script. Providing a good non-interactive interface is particularly important for this project: one of the assumptions needed to use the results of the central limit theorem (CLT) is that the sample size is greater than 30 or 40. Depending on the data, a sample could contain hundreds of measurements and the current program prompts the user for every single one.

Decrease Complexity, Increase Usability

Every semester I am impressed by the variety of final projects I get for ECE2524. Games are always popular (and always fun to play), and so the non-game projects tend to stand out. Two from the Spring 2014 were a utility to convert resistor values to color codes and a program that calculates the sample mean and variance of a set of data points. Both of these programs are great examples of the “do one thing and one thing well” rule that Unix developers like to follow. In both cases the central algorithm is relatively straight forward as well, and so a “strong single center” design is easy to define. It is for these reasons that I’d like to look at each project in more detail than I was able to during the review process. I’ll start with the resistor color code calculator.

Sample stuff for explain shell filter

A short example with one command

1$ ./res <values
2orange blue brown
3yellow violet orange

An example with pipelines and two command prompts

1$ grep 'RESISTOR' test/ | cut -f 3 | ./metric | sort -rn | ./res | uniq -c
2      3 brown black orange
3      1 green green red
4$ grep 'RESISTOR' test/ | cut -f 3 | sort -rn | ./res | uniq -c
5      3 brown black orange
6      1 green green red

Reflection: Connections and Relations

I definitely have made use of the knowledge I learned in this course around using the linux command terminal to the Applied Software course.  What was unique and different about this course material in conjunction to the other programming courses I have taken so far is the usage of Git commands and as well as an introduction to using Python.

Not only that, the material taught in this course readings helped me develop the ideal mindset of a programmer and follow procedures which helps me become a better, more efficient programmer.

In terms of the ending semester lectures, solidifying the use of Python and learning how to use and understand the mechanics of YAML, JSON, Record-Jar, XML, etc.

Reflection on Past Readings

Admittedly, I wished I had allocated more dedicated reading time into our course readings.  Through the fluctuations of work throughout the semester, I found myself reading the material less and less thoroughly.  There are times when I would get lost in the class lecture due to various reasons (Linux’s poor Wifi pick up ability(dual booting) or trying to reenact what the professor was doing, but getting lagged behind and inevitably losing track and getting lost).  Usually when this happens I would fall back onto the reading material.  I have to admit, the assigned readings were quite fun to read and makes sense (doesn’t overwhelm you with terms and concepts like other courses would).  The heavy emphasis on keeping things simple and easy to follow also helped when trying to comprehend works of code.  My only regret was that I didn’t get to thoroughly read the assigned readings as I wanted to and at times had to resort to skimming through the documents.

General Reflection

After taking several different CpE courses here at Virginia Tech, I noticed that the interaction between how a code is pieced together to talk to electrical components is extremely fascinating.  From the other courses I felt that the restrictive guidelines of having to code without certain available libraries that would make the program easier is a little annoying.  Doing this does force the student to learn the logic and gain more in-depth knowledge of certain methods and procedures, but I feel that at times it’s teaching inefficient ways of tackling a problem and sort of constrains us from the versatility that programming provides.

I was excited that we will be coding in a way that is based about the command terminal since it would be the first time learning such a procedure and proved to significantly help out with my ECE 3574 course which sort of threw us right into the command line programming using Qt platform.  What I do like about this course’s coursework is that it doesn’t require us to download and learn to use specific platforms(i.e Qt or Visual Studios) so what we use and code with is what we make and pull from free resource libraries online.  The struggle, however is picking up how to efficiently traverse through this new environment because it is not as user friendly.


*Cracks knuckles* time to grind out these blog posts.

python is awesome!

After the text adventure game, i begin to understand python. The code format is very different from any other code that I was touched in the past. The way we write a class and the way it defined is totally different. I C++, we need to write class with it own parameter and constructor. However, when we defined a class in python, it looks much easier. The yaml is also a interesting format. In the text based adventure game, I found it is so easy to use.
The format:
this format is a nice organize for room information. In our project, we also want to use this format to organize our room information. It is so clear that even people who don’t have the coding experience can help us modified the room information. I hope I can get more involved with python in my future project. I just fall in love with python!

Finishing Embedded

I have finally wrapped up all assignments for ECE 4534 Embedded Systems Design. This class took up all of my time this semester and sucked the life from me, but I have to say it was worth it. For the class we designed a rover to navigate a room with obstacles and collect data as it went around, on a second lap it had to preform better using the data it collected on the first lap. I designed and coded everything for the rover including a wireless communication backbone and sensor data collection. The class was really tough, but the end feeling of watching your rover run was all worth it. I highly reccomend everyone whose taking it in the future to take it seriously, because you learn a lot through the experience even though it may seem like hell.

Final Reflection of the Semester

It is so crazy to think that I am now typing my final blog post reflection of the semester.  The entire semester I have been so wrapped up in work that it made me narrow-minded to everything I had actually accomplished.  Now looking back in reflection I can appreciate all that I learned.  This includes circuit analysis and design, the architecture of a computer, how to program a microcontroller, how to operate in a Unix-based environment, and how to design and write efficient and effective code.  This summer I hope to apply some of these skills to keep them fresh on my mind.  While I was essentially “window shopping” on today, looking at new guitar pedals I’d like to buy with some of the money I make this summer, a buddy I was with asked why I didn’t try to build my own guitar pedals.  Not only would this keep the mental gears rolling over the summer, it would save me a lot of money!  So now I am inspired to design and build my own guitar pedals.  Anyways this semester, as challenging as it was, was very beneficial and I am glad I was able to get through it.

8 Hours coding project

We started the project pretty late.  we spent one day for designing and implement it by 8 hours. It was fine and tired. But overall I have learned a lot of stuff on C++, python and shell command.

here is the link, it still has some bugs need to be fixed, but thing are going well so far.

Almost done

I haven’t taken any finals yet so far.  Mine are on tuesday and wednesday.  Luckily for me my other two classes required projects rather than finals such as Unix.  As I am trying to study for my test, I realized that I probably will see some questions that I have never encountered before.  This usually  happens to me on test days.  I just hope for the best when I take the last two tests of the semester.  If only “Simplicity” worked for tests.  Life would be so much easier.

And That is That.

I’d like to believe that I’m relieved that Unix is over, but it’s actually kinda sad. I had fun, Python wasn’t as horrible as I thought it would be, I grew more comfortable in the shell, and I met new peoples. All in all, not such a bad experience. There have been rough times, there have been good times: lol I sound like “IT WAS THE BEST OF TIMES, IT WAS THE WORST OF TIMES.” But yeah, I honestly don’t know how I am doing in the class though. I don’t know what I got on my midterm exam, I don’t know if I did all the blog post assignments (were we only supposed to write when he put it as an assignment or were we supposed to do it every week? hmmm..), and I know I didn’t get all the homeworks working. ): So I guess I’l just have to wait and see. I did do the final project thingy, and I did do the review of another group’s project, so at least I’m not getting a 0 lol… I hope.

But yeah, about the review: I actually reviewed two projects; the first one was Battleship which I wrote about and the second one was just for fun. I already wrote about the first, so I just wanna say that the Dark Forest game was so funny. “Do you even lift bro?” had me weak when I was in the cave. And of course, being the curious George that I am, I had to do it all again and take the left path too. “Well maybe I would have let you go if you said the magic word,” lol I kinda want to know if she would have let me go if I had said please. I didnt write a review for it cause it already had like 3 reviews already, so this is like my mini review/commentary for it. Buuuuut I had fun playing it lol, so good job.


Wrapping Up {Reflection}

I wasn’t really sure how I felt about learning Python when the time came.  I had heard great things about it but it was still another language to learn and adjust to when I was finally feeling comfortable with all of the syntax and functions we had been working with.

Turns out I love it! I even ended up writing my final project in python.  Basically I created a go fish game that a user can play against the computer.  So many times while writing the program I came across some functionality that I wasn’t sure how to handle in python, but it was SO easy to just type it in to Google and find the answer.

One example was when determining the card that the computer would ask the user for, I thought the best way would be to select a random card from the list containing the computers current hand.  When I searched for information on this sort of function in python I found that this can simply be done using ‘random.choice(list)’.  I thought it was too good to be true at first and couldn’t believe it actually worked…exactly as I wanted it to…Amazing!

I definitely look forward to using python in the future.

UNIX Diary: Finals Edition

So we reached the conclusion of the course. After completing the project and reviewing everything that I have learned in this course, I have come to appreciate Unix and the design philosophy surrounding it. From combining programs so that certain functions can work independently of each other to manipulating data for each of those components, I have learned numerous techniques that will help me in designing numerous types of software for the future. Learning Git has also been an added bonus since I've been working on numerous projects with other people and have not learned how to use the bash version of Git, but thanks to its merging features, it's easier than ever to work with other programmers from anywhere around the world.

The information that I learned in this course will help me out greatly in the coming years as I continue to mature as a programmer and begin to work on major projects. I'm currently working on a game with a few other people for Android and PC that should be coming out this summer, and the various programming tips that I've obtained from this course have helped out in the developing process. Thanks to this class, I can continue working on these side projects to both boost my skills and to help me succeed in the future.

FINALS: Fudge I never actually learned this stuff


As I’m sure everyone knows, IT’S FINALS WEEK! Which means that we have less than a week left until we go home!! I don’t know about you all, but I’m pretty dang excited for this semester to be over. Surprisingly, I only have three finals which is nice but at the same time, I’m sitting here right now on reading day doing absolutely nothing but writing this blog post and listening to the Frozen soundtrack. I’M NOT COMPLAINING, but I feel like I should be productive and study but my first final isn’t until Sunday….so I still have a few days to study, so for now I’ll relax and try to look at all the cool projects that came out of our Unix class. Compared to last semester in terms of workload and curriculum difficulty, I think this semester was A LOT easier. Last semester, I had no idea what I was doing half the time and I still wonder how I even got through it with the all nighters I had to pull. This semester, thankfully, I did not have to pull any all nighters, and I was actually able to relax(sometimes) when I had no work. I also enjoyed my classes a lot more than I did last semester. My favorite class was probably Discrete Math despite my teacher; I really enjoyed the material. I also really enjoyed circuits. Having been taught most of the material last semester but not actually understood it, I really liked finally understanding what some of my major is about LOL. Microcontroller interfacing was rough…I won’t lie, my teacher, unfortunately, could not keep my attention in class and I often found myself on Pinterest or playing 2048. The material that I did listen to was pretty cool and the projects that we did were challenging, but the end result was AWESOME.

Now for Unix….okay so I think the class had potential. I was really looking forward to having a class where I could finally learn the reason why Unix is so dang important. But truthfully, I’m still not convinced that it is as useful as everyone says. Some of the commands are cool and being able to move files into different directories is nice but I don’t find it that useful to me, yet. I did enjoy learning a little about Python and I think my summer project is going to be learning Python in more detail. I also attribute my hatred for early classes to my dislike of the class mainly because 9:05 is toooooo early for me to be attentive to material that doesn’t really interest me. BUT, looking back and reflecting on the semester in Unix, I think I did learn something and I think that if I take the time to learn more about what Unix is all about then I will appreciate it more. But hey, at least I learned something unlike last semester in Professionalism where I didn’t learn A THING.

I hope you all have enjoyable summers and for those of you with internships, best of luck! And if anyone is going on vacation to the Jersey Shore this summer, hit me up! I’ll be there till August 6th, and then I’ll be back to the Burg for RA training, WHAT WHAT!

Reflections on the Semester

With finals all that’s left, it’s time to reflect on what I have done this semester. This semester has been one of my most difficult semesters thus far. Up until this point, I have been able to take an elective which gave me something to do which was a break from the majority of my studies. However, this semester, I was enrolled in all ECE and MATH classes. Although I enjoy these studies, I have learned that I need to give myself time to take a break from them. It is the opinion of many that you must love your job in order to be happy, however in order to be truly happy you must also find other things that you enjoy so that one activity doesn’t dominate your life. I believe this is true in academics, as well.  I have learned that in the future I must take an elective to balance my studies.

Like a real programmer

I’ve always wondered what it was like to be a “real programmer”. Like those guys that just sit there and write tons of code that makes no sense to the average person. For most of my college career and up until last night I had felt like I wasn’t a “real programmer” yet and I was still just learning. What i’ve realized is that over the past semester I’ve become pretty good at using c and c++ and I feel like my skills as a programmer have really surpassed my expectations. Although I know there is still a lot of learning to do and that my coding style isn’t exactly spectacular I really feel like i’m on the way to becoming a really good programmer with a few really strong languages under my belt.

A Coder’s High?

So we’ve all heard of a “Runners High” where an athlete (or anyone really) excercises or runs so much that they reach a “high” and can just keep going.  If at all possible, I may have hit a Coder’s High of some sort last night.

I have a Computer Organization (ECE2500) programming project due tonight as well as this class’s final project.  I spent just about all of yesterday completing these two.  I went to the Math Emporium in the evening just to get “in the zone” for all of my work. I didn’t think I would get any more than just the right amount of all of my work done.  After pushing the last bit of code for functionality for the Unix project to the repo yesterday, I was so hyped from all of the successful code that I’d been writing that I just kept going. I kept adding little bits and pieces to my group’s code, and I relate it to almost a “Runner’s High” where you just keep going more than you thought you would.

Anyway, I guess if my coding efforts had been unsuccessful, I wouldn’t have been so excited to add more bits and pieces to my code.   I thought it was an interesting experience through Finals Week since I definitely have not been sleeping enough so I would have usually just wanted to sleep right after my coding project requirements were finished, and then work on more later on.

So new discovery during Finals Week Spring 2014: a “Coders High” does in fact exist…or something like it does at least….

Talking more about reflection

I first thought it would be useful to learn how to debug but, if we covered it, I’m sure the rest of the semester must have been less interesting.
I know that because I’ve been fighting with gdb last week. I was given something called ‘BinaryBomb’ and what I had to do was defusing its 7 phases with some secret information obtained by reverse-engineering the executable. In order to defuse the bomb, I had dump the object and analyze the assembly codes of functions to understand how it’s working. The bomb was compiled on server to be unique to individuals and was specifically designed to run on the school’s server only and it sent a failure report to the server every time I make a mistake and explode the bomb.
I was totally new to gdb so it was quite frustrating at the beginning. Well, that was enough of x86 assembly. I have done assembly analysis in ECE2500 class but ECE2500 taught with MIPS assembly and it seemed more interested in turning the assembly codes into binary rather than debugging things.
Anyway I just wanted to say that I’m glad that we’ve covered python in this class. It turned out to be extremely helpful for doing the final project. If I knew nothing about python, I wouldn’t have accomplished what I wanted for the project. I’ll write more about my final project story later.

Reflection on the last day of class

So far it’s been a great semester.

What I think I’ve learned:

1. Design philosophy of UNIX (it didn’t get it at the beginning of the class but it started making sense after a while)

2. Shell access / setting up SSH authentication / Linux Bash scripting

3. Programming in pair using Git (commit, push, fetch, merge)

4. Design of Command Line Interface + design pattern (wordfreq assignment was helpful)

I think all of them have been great things to learn and I appreciate that I have some knowledge about those now. Also I really like the way the assignments are graded. I’ve seen some automatic grading system like ‘WebCat’ or ‘Curator’ but what makes ece2524 interesting is that it uses git on the server.

Anyway, after this, we’ve discussed about what to study for the rest of the semester.

I personally wanted debugging using gdb but Python’s got the most vote. Anyway I think it was a good decision. I’ll write more about this in my next post.

Final Week of the Semester

Reading other students’ blogs it seems I am not alone when I say that this week is hell.  My final circuits test is tomorrow and although it is supposed to be like any other test, I have a feeling its going to be difficult.  I also have two projects due tomorrow including my Unix final project.  My group and I have gotten through most of our project.  We are simulating the game show Deal Or No Deal in text-based format.  It was difficult for us to get our git access working properly, so we met up to design the game algorithm and code a decent amount of it on one computer.  Then we solved our git problem by creating one remote and giving everyone read and write access so we could all push and pull from the same remote.  With git working we were then able to divide up the rest of the work so we could work on it on all of our computers.  I was assigned to create the display methods for the game.  This entailed displaying which cases had not been opened and displaying which values are still in the game (all in an aesthetic fashion of course).   The only other part of the program left aside from display was to code the banker’s “deal” algorithm which my other partner is working on.  I just want to get through this week and finals.  Trust me when I say my drive home next week will be the best feeling in a while.

Daily Finals Week Blog 2

Update: Our group is working on the unix project and we are struggling because the wifi is not working  and we only have one ethernet cable. The struggle is real. Unfortunately we all been working on the same computer locally since we can’t push and pull on git since there is no internet. We just had churros, it was grand.

On a side note, i’m struggling to understand how professionals work on large coding projects in groups. Maybe i’m just really bad at writing code but when my group mates saw the changes i had made they could not understand them and were confused. So how do professionals make sure that they code things correctly and follow the same rules as other coders? Are there golden rules of coding for each workplace? Who makes these rules and are they different from project to project or even workplace to workplace.