Saturday, May 23, 2015

Setting up a Windows 7 C/C++ development Environment

Setting up a Windows 7 C/C++ Development Environment is key when learning the basics of programming for the Windows platform. Understanding the fundamentals of C/C++ primarily C++ will help you the most when it comes to developing software for the modern Windows Operating Systems.

First we should install what is called an IDE (Integrated Development Environment) named Code:Blocks which is great IDE for practicing the fundamentals and basics of C++ and C. The cool part about this IDE is that it is cross-platform and free. Which is why we will be installing it for this setup.

Download Code:Blocks at the following link: http://sourceforge.net/projects/codeblocks/files/Binaries/13.12/Windows/codeblocks-13.12mingw-setup.exe/download

Note: We will be installing the codeblocks-13.12mingw-setup.exe for this setup.

Once finished installing now you have both the compiler mingw and a IDE to compile your C/C++ Source Code.

All that’s left is for you to write code and test it out using Code: Blocks.

Sunday, April 5, 2015

Day 12

Day 12 of development has been quite interesting. So far all that I have pretty much have been glued to the screen looking back and forth between old source code from other projects to piece together the materials that I need to complete these contract work that I have been picking up as of late. One of these said projects is a simple sCRUD (Search Create Replace Update Delete) application written in the Java programming langauge using MySQL as the database platform. At first I was trying to complete this application by using simply the terminal to become better familiarized with the terminal and coding within it. Though I believe that this requires quite a few intense study sessions of building simple applications within VIM as well as some accompanying exercises to get the hands adjusted to using VIM. Naturally my hands have been adjusted to using nano as my primary text editor when using the Linux Command Line. 


Though every programming professional I come across who do their source code usually use just the terminal when it comes to simple applications. The text editor of choice being emacs or vim when using the terminal. Though it really depends on the task at hand in my opinion. I haven't been able to meet deadlines because I have been doing it the "hard" route so instead I switched my workload from the terminal to the Eclipse IDE (Integrated Development Environment). This decision I made after simply being annoyed by not having the convenience of my code constantly being compiled like it is in Eclipse. 

Another thing that I have been working on also refamiliarizing myself with the Java API. Which is quite interesting as I travel through the materials on the Internet the difference in the different methods required for each version of Java to open up files and other methods like that is quite interesting to come across. This is always a constant reminder for me that sometimes the newer methods can be less efficient compared to their older counterparts. I feel as if by saying that I am obliged to find some evidence for what I am speaking but I believe that would be the purpose of creating a seperate post dedicated to just memory management in general when it comes to the Java programming language. I simply need to do more research on the topic before I advance any further. 

Time cost is a thing that has been on my mind everytime that I am create a program. Writing my code and variables in a fashion that I can reach a solution of O (log n). This has forced me to create my programs using pen and paper method to analyze the mathematics behind my code itself. I plan on doing some more research in finding out if there are built in methods in Java or a program that analyzes your programming code and sees if it runs the solution of O (log n) as a final run time for each sub program and method that one creates. 

Till The Next Time

Aaron Jones

Wednesday, April 1, 2015

Day 8

I do apologize to those who do keep up with this blog and actually read my content. I have been getting accustomed to a new sleep schedule in the wake of school starting next Monday for me so that I may actually get my workload done in an appropriate manner.

Today started out as a normal development day, spent all day looking for solutions for a new job that I came across. This entitles using Java to create a login system for customers at a local business here in the town that reside in. The hardest part about developing this system would come in the form of adding, implementing, and creating methods for fingerprint scanners and the webcam. Though I am quite new at integrating hardware into my software this project has shown me some things that I never really realized as a young and upcoming developer. Importing libraries that other people have created and using a Linux backend to run the said software makes this job a lot easier. I was unaware of how far reaching the open source community has become. It makes me feel happy that I choose this line of work considering most people have to work their ass off to re-invent the wheel I can simply just use someone else's code to make my code run a lot easier.

Sometimes though I do believe it does some good to write code from scratch which I tend to usually do anyways but when the time comes why not use someone's code for the betterment of your own source code. I believe this process is called reverse engineering when you take something someone else created and reinvent and make it your own. This principal was always at the back of my mind but thanks to this new opportunity I have been able to learn more topics about not only the language I'm using but in the field of Computer Science itself. Such a fascinating field, I'm glad I haven't faltered from this path over the course of trying to attain my education.

One focus of mine has been to create a personal git server for my private work. I believe in the Open Source community and believe all my source code should be provided but there are some that I simply don't believe should be presented to the general public if I am taking on contracts of this caliber. Later down the line this could will either come and bite me in the ass or a pat on the back either way I hate having this sense of uncertainty when it comes to developing a simple solution for a bigger problem.

Another thing that has been on my mind lately comes in the form of the topic: Time Complexity. I want to be able to create solutions with code in a very efficient and memory efficient code. To do this I am constantly furthering my studies with C and C++ since they have pointers which makes memory management a manual process for C but not so much for C++ code. Though I am just a beginner I believe most people unless specifically told to usually skip over the details of memory management when it comes to development process. From what I have been experiencing on reddit is that people tend to do that a lot to simply get the job done in a timely fashion. Should I adopt such a principle within my workload sacrificing quality for quantity? I'm not to sure but for the time being I am leaning toward saying Quality breeds quantity. After all look at Apple and now Google as rising titans within the computer world because they live by that motto (more so on the Google end than Apple).

Till The Next Time

Aaron Jones

Monday, March 30, 2015

Day 6

Today was a really slow day for development. I plan on getting a lot of things done under my belt when I wake up tomorrow morning. I plan on practicing the following languages for at least an hour each; Ruby on Rails, C++, C, Java, and I'll most likely throw in some PHP into that. Every reading this blog can follow my development process and progress at my person Github account. I believe that I could use any advice at this point to further my understanding of the various programming paradigms that are out there in the current development world.

I started studying Ruby on Rails with some really nice books to help me along the way. I fell in love with the MVC Framework. It is the most simplest framework that I have been exposed to. It makes things so much simpler on the developer and his process for creating online applications. I continued some progress with learning more about the C++ language. Right now I am currently learning and implementing console programs using the Object-Oriented Paradigm with Classes, Polymorphism, and Inheritance as my tools to reach my solution. I really want to start creating applications using both C and C++ at once, I believe that this process is called stacking. So we shall see where this progress will lead me. I believe a great way to try this out would be to create a Scientific Calculator using C and C++. I believe that I can use C++'s class structures to create classes for the scientific functions on the calculator. I might even bold to create an Open Source project out of this idea. To create a piece of software similar to Mathematica.

This would require me to begin construction on a website for said project including features such as a forum, and a irc channel. This would be a great project to begin my building my skills creating online applications for people to use. I am wondering currently what the status is on .Net becoming Open-Source I would love to see Microsoft Developers create a similar environment that Linux has built it's foundation upon. This idea being of course Collaboration, the single most important thing to a developer in my eyes. Nothing nowadays are created by one person, it's built by a group of individuals that is the one lesson that I have learned over the years that there is only so much a team of one person can do. Making a videogame for example takes an entire staff of people or for the indie developers out there the staff can be limited to just one to x amount of people. That is why I have such great respect for indie developers taking the leaps they needed to take to reach where they are today.

It was not to long ago that Minecraft was just a blooming flower that would revolutionize how people see games as a medium. Games like this is what a game should always strive for. As a developer myself I can see the shortcuts that were made to release the game at launch and it always drives me absolutely insane to see such a buggy product be released. I believe that if a game studio were to come out in the near future and release all of it's source code for it's games for free right of the bat people would be able to reverse engineer the product and create some amazing in a similar fashion to Monty Oum with Halo and Halo 2 creating what is known as Haloid on the internet.

Collaboration is the one thing that I can take from this day and it's importance not only in the computing world but also on the broader scale of work in general. After isn't that what we call Corporations these days?

Till Next Time,

Aaron Jones

Day 5

I noticed that I haven't been posting as daily as I want to on this blog and it's quite the similar story on my other personal blog as well.

Development Day 5:

Today and the past couple of days proceeding this I have been familiarizing myself with the differences in the Object-Oriented Paradigm and the Procedural Paradigm. Comparing the two and figuring out that it is essential for me to understand these two Programming Paradigms to perfection. Why this is? The answer is all to simple, why do people still study Latin. It's a dead language yet people of many different fields choose to study and perfect their understanding of the Latin language. This is due to the common problem solving method called Recursion. By using the problem solving method of recursion one can simplify a problem down to it's roots and simplest form and thus solve it. This is a common approach is all fields yet most people don't understand the concept itself.

After all most people reading this blog understand the efficiency and inefficiencies of using this method of problem solving to solve their problems but the efficiencies certainly outweigh all of the inefficiencies of using Recursion to solve everyday problems. A doctor learns this by identifying the patients Symptoms which lead to the resulting Disease or Problem that plagues the patient. I get this talk all the time going into the dentist about how I shouldn't smoke cigarettes because they will make my teeth fall out and have resulted in a plague build up, which by the way I'm getting cleaned for those of you who are curious. Will I quit smoking cigarettes because the dentist and doctor tell me the health risks of smoking of course not. After all I am an addict to the bloody things anyways and those damn anti-smoking commercials funded by the tobacco industry aren't helping out either.

But I digress, onto continueing my main point Object-Oriented Paradigm vs Procedural Paradigm. What I discovered is that for certain applications Procedural Paradigm works the best for those problems. Having a program go through step by step to solve a problem and being able to manage the memory like in languages similar to C leads to some pretty efficient coding. After all the OS that I'm currently using runs off this principal and nothing has broken unless I broke it myself. Like my MySQL server for some reason, that I have yet to figure out. Object-Oriented Paradigm however is suppose to be used as an extension of one's knowledge of the Procedural Paradigm is what I've discovered studying the C++ programming language over the past couple days.

Wrapping my mind around this idea was quite unique to say the least, but after closely studying the fundamentals of C++, I realized that sure one can create applications using just C++ but if one where to implement the C backing that C++ expands upon using both the Procedural and Object-Oriented Paradigms ones program would be quite efficient. This I believe is due in part to memory allocation being the most important thing a programmer can emphasize his code upon. C does a wonderful job and I believe by using both libraries one can create a solution that can follow verbatim, coming up with a solution with the time complexity of O (log n). Though it takes much work I believe by studying the root of C++ which is C can lead to some extraordinary solutions the world has yet to see.

I firmly believe that modern Operating Systems such as Apple's iOS and Microsoft's Windows OS lack these days is a firm grip on fine tuned software that meet the test of time via memory management and allocation. This is why the Linux Kernel is such a vast surpasser to each of it's competitors. Ever wonder why when using iOS it seems as if everything is auto-refreshing all the time? Or why the Blue Screen of Death or the Spinning Ball of Death are so prevalent in older machines? This is due to the lack of concern when it comes to memory allocation and management in their OSs. Most people don't care about those things and just move blindly forward to whatever looks pretty or is new. Well the best part about Linux is that a new release happens every three months compared to that of it's competitors releasing a new OS every year or two. The competitors are now releasing that their whole market depends on Linux because not only is a superior product but a versatile one at that.

I believe that Linus Torvalds is quite the genius when it came to the design of this operating system. I'm glad that I have been able to figure out what I have with the efforts and quality of coding behind the system. While I continue my education further I believe this man has pretty much solved all the problems the world has by creating something that can be edited and contributed to on such a large scale. After all if the Internet in which I writing my messages on, can be done so for free and without cost, why can't the rest of the world?

Till Next Time

Aaron Jones

Thursday, March 26, 2015

Day 2

Today was a pretty slow day for development. I have been working on just basically adjusting my coding skills in a way in which I can teach what I type. As a challenge to myself I will be writing all my quizzes and tests for my soon to be high school Computer Science course, in the language of C++. I want to use the knowledge that I already have about data structures and implement it into actual lesson plans for the students to learn their Java. Sounds like a lot of work but nothing ventured nothing gained. Also learning more about Wordpress and releasing websites using that CMS, as I gain more knowledge it seems like there isn't enough time in the day to create the things I want to create or learn the information I want to learn. All of these things are possible but they take time to adapt, so I'll most likely be looking into better time-management skills to increase my productivity as I gain more experience. Probably be a good idea to look up some tutorials on typing faster, though my standard speed is quite fast and above average of that of your average computer user it still could use some improvement. I have my technique down I think that if I continue to write this blog and increase my motor reflect skills with some daily exercises I could increase my speed from roughly 80 wpm to at least my goal is 150 wpm. I think I have a great way of getting my daily practice in. That is to download Typing of the Dead by SEGA, basically it's house of the dead with a keyboard instead of a gun. I find this approach to be the most enjoyable aspect of working in this field. Maybe one day I'll be able to get to the point in which I can create a similar game based around the same principle but on a much more rudimentary level. Until that day comes I have to keep myself busy with developing new software everyday, my next software project is to create a character creation sheet for the DnD (Dungeons and Dragons) style game called Fate Core. It's recent enough that no one has attempted to try this, but as I become more familiar with collaborating using Github I think once I get a decent enough prototype I will be able to post my project on the subreddit by the same name and see how progress goes from there. I have to start gaining more of a web presence online, I believe this is the only way I could make money in a decent way rather than losing my sanity working in some cubicle for the rest of my life. If I can spend most my time developing and expanding the Linux Software library I could eventually reach new heights as a programmer and software developer. It all begins with one step though. That step being studying new programming techniques in the following languages: 1) C 2) C++ 3) Java 4) RoR 5) HTML5, CSS3, and Javascript 6) PHP 7) Python 8) D Learning these languages and expanding upon the knowledge that I already have with most of them will be an interesting approach to many of the challenges that present themselves towards me. I believe by creating software I can gain the experience and practice I need to expand my career. The only hard part is keeping up with the workload and practice, this is going to require me to create a work schedule for myself which is probably going to be the hardest thing I have ever done, but I have to begin somehow and use the knowledge that I've gained over the years and push them to their limits to create new and better limits. I have always found data manipulation fun and interesting but it can be some of the most challenging things that I have yet to accomplish. One of these days I will look back upon my work and see that it was all for something and not for nothing. Hopefully I can stay true to my convictions and limit the amount of distractions that I have to accomplish my goals in a more timely fashion. One thing I'm most looking forward to will be the implementation of Mathematics into my coding process, I was exposed to the concepts of Time Complexity during my course work at Eastern Washington University the only thing holding me back from expanding my knowledge was not knowing the Math behind the Time Complexity, but now that I have better Math mentors I believe that through the course of time I'll be able to accomplish what needs to be done. There are many great online resources for me to tap into to gain the knowledge I seek the only problem is applying it to a real world problem to create a solution. We shall see where the next day takes me. Till Next Time, Aaron Jones

Tuesday, March 24, 2015

Day 1

Today was an interesting day for development. I got my server up and running and with that learning that iOS has many flaws in which I will get into greater detail about in another post probably tomorrow morning. Using only the tools that I have now I have challenged myself to learn the C++ programming language more than what I know already. To be completely honest I have a very basic understanding of this object-oriented language but after reading three chapters from an old textbook that I had lying around. 


The textbook I'm using to base my knowledge of the C++ programming language is Larry Nyhoff's, ADT's, Data Structures, and Problem Solving with C++. This book does a great job at explaining the intricacies of the language itself and by the third chapter one is introduced to memory management using pointers. I enjoy having the liberty to control my memory in such a fashion. After all it's predecessor is C and I do love writing code in C. 


The next challenge that I have laid before me is familiarizing myself with using Wordpress to build a gallery website for a client. I have the package already installed on my server so all that's left is to fiddle around with it until I get the job done. I might have to pick up a book or two on the CMS (Control Management System) but it'll be worth it in my honest opinion. Maybe I'll even use it to transfer this blog over to a Wordpress site depending on how many hours I have to put into this but we'll see. 


Started creation of my curriculum for AP Computer Science as I may have the opportunity to become an AP Computer Science teacher depending on if the school accepts my curriculum or not. The hardest part about creating curriculums is that I have to create it in a way that no one will get confused on the concepts but that's hard to do with Computer Science unless the student has some really great math background. This is what I'm hoping for but I'm creating two tests the students must complete on the first day of class to gauge there skills as well as some simple Google Forms to get to know that students better as well as the OS (Operating Systems) they will be using at home to further adapt my curriculum to match. Using Linux for the past couple of years made me come to realization that Open-Source Software should be the only solution for these students that want to learn how to develop. We shall see when the time comes. 


Till Next Time


Aaron Jones