Friday, November 21, 2014

Setup for 3DS Homebrew

Well, it's finally here!  The 3DS homebrew scene is live and ready to start.  With everything out in the open, I thought I'd do a quick tutorial on how to install everything to your 3DS, and what you can and can't do with it.

Setting up your 3DS

The first thing you will need is a 3DS (duh), an SD Card, internet access on your 3DS, and the game "Cubic Ninja".  This can either be a physical cartridge, or the version off of the Nintendo eShop (Japan only) [This has been taken down as of now].  Once you have this, go to the main menu of Cubic Ninja, select "Create", then select "QR code", and finally select "Scan QR Code".  This should open up a view from your 3DS' camera, and allow you to scan a QR code with it.

Once there, go to http://www.smealum.net/ninjhax/ and select your 3DS version, click submit, and it should present you with a nice QR code you can scan.  Scan this with your 3DS and you should see a screen like this pop up:


Don't forget to make sure that your 3DS has an internet connection as well to download part of the exploit.  Now you can choose to either run a homebrew application, or install it to the save file of the game.  This allows you to not have to worry about using the QR code in the future or needing an internet connection, so I highly recommend doing this, as it can be uninstalled later if you so choose.  Once this is done, you are all set and can begin using homebrew applications!

Running Homebrew

To run homebrew applications, you simply need to put the a boot.3dsx file on the root directory of your SD card, and then when you launch NinjHax, it will run your application.  My recommendation is to download a homebrew launcher and just leave that as the file, so that you can launch other homebrew applications with it.  It's a pretty simple process, but if you have questions, feel free to post them below.

To add other homebrew applications to the homebrew launcher, simply create a folder called "3ds", and place folders contain the boot.3dsx files of homebrew applications within there.  If you wish to make icons for your games, simply place them in an application's directory as "icon.bin" files.  You can use the SMDH tool included with devkitPro to make them, or look into my application over at https://github.com/gemisis/SMDH-Creator (Windows only).

When it comes to what you can run, please be aware that this does NOT run pirated games.  It ONLY runs homebrew applications.  We do NOT support piracy and will NOT be adding support in.

Deleting Homebrew

Should you ever wish to delete the homebrew save file on Cubic Ninja, all you have to do is hold L+R+X+Y on the main menu, and it will prompt you to delete the game's save data.  Click yes, and poof!  All of the homebrew stuff will be gone.  This can also be used to update the launcher in the future, as you can just delete it, and then reinstall it.

Creating Homebrew

Creating homebrew is a bit trickier, and requires knowledge of C.  As of right now, most of the tools are available from https://www.github.com/smealum/ctrulib.  There is also a quick install tutorial there, though I may add one on here in the future if a need arrives.  Using the libraries is a topic for another post, so I'll try to go over making a simple application at another time.

I hope this all seems pretty straight forward!  If you have can questions or comments, post them below!  Happy homebrewing!


Tuesday, September 2, 2014

Photos of the Month - August 2014

A bit more delayed then I would have liked, but here are my favorite photos from the month of August!

A nice dinner one night!  I await the inevitable criticism of my cooking though XD
An icy cold warehouse, with ice forming in the warm 85 degree weather.


The mountains of Virginia!

Sadly no traveling for this picture, just a trip to Busch Gardens!
This upcoming month will prove to be challenging since my phone's camera is now destroyed.  Guess I'm gonna have to look into upgrade to an actual camera!

Friday, August 1, 2014

Photos of the Month - July 2014

The month of July was a rather crazy month.  For those who don't know, I got the chance to go to Mountain View California and interview with Google at their headquarters.  It was an insane experience, and while I still don't know if I got the job, I had a great time and got a ton of pictures!  So for this month's photos, here are a ton of neat pictures from California (With one or two from Virginia too)!

Sunday, July 20, 2014

Cooking up Hash Tables

Originally I was thinking I should rename this post, but I've decided to go ahead and keep the name since I find it kind of funny. That said, hash tables are super cool, and a really important data structure that I believe you should absolutely know.  Even Googlers says they are one of the most important data structures around.  So how exactly do you implement a simple hash table?  Let's go ahead and explore this!

Friday, July 11, 2014

A Shady Browser

Before I begin, this is yet another post inspired by Michael C. Johnson, so I just want to give another shout-out to him!  Most of the code from this is just re-purposed code from http://www.learningwebgl.com/ as well due to laziness, so shout out to them too!

With all of this talk about shaders, I started thinking about the best way to demonstrate shaders through my blog.  I think they're pretty neat to mess with, and are very important to understand how to use due to the fact that they play such a huge role in 3D graphics today.

Wednesday, July 9, 2014

Fading with Shaders

This is a fun little post I thought I could do really quick.  While I'm still getting the hang of using shaders and such, recently I thought of something that I thought was kind of clever to do with shaders.  This is a quick post about what the problem was and how I solved it.  Shout out to Michael C. Johnson for suggesting to blog about this!

Tuesday, July 1, 2014

Thursday, June 26, 2014

Google Cardboard - A Perfect Start for Virtual Reality

Man, it seems like I've been on a VR rant these past two days now.  Let's cut straight to the point on this post: Google Cardboard is the exact thing virtual reality needs right now.  It's cheap, it's (fairly) high quality, and anyone can get it right now.  This kind of access is the perfect push for anyone who wants virtual reality to succeed, and while the Oculus Rift and Control-VR might have a nicer case, Google has managed to blow them both out of the water.  Let's go ahead and review everything really quickly.

Tuesday, June 24, 2014

The Current World of Virtual Reality

For the past few months I've spent some time with the Oculus Rift, and have gotten to learn the basic ins and outs of how to make virtual reality applications, where the market for it is going, and some of the challenges that come along with it.  It's been quite a fun experience, and while I am no means an expert now, I feel pretty comfortable with my ability to use these technologies and develop applications for them should I ever need to.  While I plan to slowly add-on new features to Project Virtua as needed, there is not much more to do on it as of now, and so I've decided to start looking into other realms of technology to mess with.  This post is a quick summary of some of the things I've learned, as well as some of my views on where this technology should go.  While I won't be super active on these technologies, I will still post some things about them, so don't count me out completely.  Specifically, I have a few games I would like to code for it that I plan to start sometime over the summer if I can muster up the free time!

Friday, June 13, 2014

Photos of the Month - May 2014

Phew, it took me a while to get all of these ready to post online!  Many of these have been edited based on things I learned in my digital photography class last month, so I hope everyone likes them still! (Assuming people like them in the first place haha)

Wednesday, June 11, 2014

Game Systems - 8th Generation Current Status

Game systems are a very tricky business to read into.  While your favorite system may have all the games that you like, that doesn't mean that it is selling well.  At the same time, high sales for one console at the start might not mean that it will be the best selling in the end.  There are quite a few ups and downs specifically to the current 8th generation of game systems, each complete with coming challenges as well.

Please note that this was written prior to E3 2014, and so this is just my personal opinions and thoughts on the current generation of consoles before then.  I will be writing up a post E3 version soon.

Sunday, June 8, 2014

Class, Jobs, and Glass!

Phew, it's been a busy month, and unfortunately I've slacked quite a bit on posting to this blog.  But no more, for I have returned!  For the next few days I plan to post quite a bit on a variety of topics, as I've had some really interesting experiences these past few weeks, with even more coming up!

Friday, May 2, 2014

Project Virtua Demo - Using Just the Rift

This is a quick tutorial on how to get a simple Oculus Rift demo up and running with Project Virtua.  The library is designed to be quick and easy to use, with little to no extra work on the developer or users end.  We will also be using the MiddleMan library included with Project Virtua to create the basic window scene and handle the model rendering for our basic floor, though I will not cover their usage in this tutorial (see the Github code at the end for that, it's pretty easy to use).

Thursday, May 1, 2014

Photos of the Month - April 2014

Life has been a bit hectic recently, but I do have a few posts that I'm slowly preparing to start making public!  To start with, here are some of my favorite photos from the month of April in 2014.  Shout-out to Mia Venuti and Christopher Hanks for the fantastic ballroom photo!

A Dance to Remember - A picture taken right before the ballroom dance competition, Bamjam 2014!

Going Green on the Water - Taken during a quick break from finals week, my girlfriend and I rented a paddle boat for an hour.

The Trees Spring to Life - Taken on one of the really nice days we had recently, the sky ended up perfectly behind this tree.
For the month of May I am taking a photography class at my University, so hopefully I'll have many more photos for this upcoming month!  Feel free to leave your comments below!

Thursday, April 17, 2014

Hack it! - A TV Show Idea

This was an idea for a TV show I had right before falling asleep one night. Unfortunately I don't have the ability to execute such a show, so I figured I'd share the idea online for those who do since I think it has a lot of potential.  If you are interested in picking it up, feel free to, though I'd love to help out where I can if possible, as well as some credit!

Wednesday, April 9, 2014

Chocolate-Covered Strawberries in Bulk

Recently I decided to make a friend some chocolate-covered strawberries for her birthday, and didn't have a whole lot of time to sit and wait for each one since the chocolate has to solidify.  I wanted to do about 10 of them and yet only had 15 minutes to do so.  Thus I managed to devise what I consider to be a pretty neat "life hack" in order to create a ton of them in bulk in no time at all.  This is a quick how-to for creating a ton of chocolate-covered strawberries in just a few minutes.

Tuesday, April 1, 2014

Photos of the Month - March 2014

Kicking off April, here are some of my favorite photos that I managed to take during the month of March!  Sadly I did not take as many as last month, but there are still a few good ones in here I think :)

A Rocky Beach Day - Taken on a trip to the beach one day.


Let the Games Begin - Taken at a Washington Capitols Hockey Game
An Afternoon Sunset - Taken on a trip to the James River for a friend's birthday.
My goal for this month is to take a ton more photos now :D

Wednesday, March 26, 2014

Project Virtua - Create the Future

With the very recent announcement that Facebook has bought Oculus VR, I've already seen quite a few people who are absolutely horrified at this.  Minecraft with official Oculus Rift support has been canceled, I received a few messages of people who were worried, and I myself was very concerned after hearing this news.

But then, I thought about what I had read.

Facebook, a company whose CEO talks all the time about a connected world, a company who Microsoft has a large stake in, a company with easily over one billion users, has acquired Oculus VR, a company that wants to bring virtual reality to the masses, a company that has re-ignited the virtual reality future of the 90's, a company that has incredible visions of the future.

Think about what a company like Facebook could do for the Oculus Rift.  They have the money to let them further develop their technology.  They have the users to bring even more awareness to the Oculus Rift (something that my parents had not heard of until this past January).   But there is one key thing that Facebook could potentially bring to the table: Microsoft.  Why does Microsoft matter?  Because they have the Kinect.  The Microsoft Kinect is the last missing piece to the puzzle of virtual reality.  It is the key item to solving a large portion of the needs for Oculus VR, such as the issue of body-tracking, or the getting rid of a controller since you can't see it anyways.  It is an incredibly important part of making sure that virtual reality does not become another gimmicky controller.

There's also another side: Mark Zuckerberg's desire to connect the world.  This is a huge deal, and even those who just want the Oculus Rift for gaming should care.  The Oculus Rift cannot succeed on gaming alone, and yet that's all that people seem to think of with it.  Even I do, and it's a problem, because there are not enough gamers in the world to buy a $300 product and allow a company to make a decent profit.  The Oculus Rift needs everyone, not just gamers, and if Facebook is able to get it to other markets, that's yet another good thing.

That being said, I too am still skeptical.  Facebook does not have a solid track record with doing what is best for a product in my opinion, and I worry about whether they will completely mess this up.  If they don't go to Microsoft for help, and don't properly utilize the potential, the Oculus Rift will end up as a terrible gimmick that's nothing more than a novelty.

Still, I want to try and help make sure that the Oculus Rift stays on track.  What I think would help with this is to start looking towards full virtual reality games and applications, rather than just things that use the Oculus Rift.  By doing this, I believe we can help the Oculus Rift stay on track for what it needs to do, rather than what Facebook may do.  That's why, I am doing a very early release of my recent project: Project Virtua.
Let's create the future
Project Virtua is an open-sourced set of tools for creating virtual reality applications, using a combination of the Oculus Rift and Microsoft Kinect, as well as future releases of newer versions of these devices, and other companies versions too.  Using it, you can create entirely new worlds that users can be physically put into.  Need to swing a sword at a bad guy?  Just swing it then.  Want a better seat to view a sports game from?  Then just scoot a few seats over.  Want to sit at the front of a class?  Just stand up and walk to it.  The possibilities are endless, and now, with Facebook's acquisition of Oculus VR, I have no doubts that Mark Zuckerberg sees similar potential in it.  So where does Project Virtua play in then?  It aims to make developing virtual reality applications simple.  Need to get a user's head rotation?  Just call GetRotation.  Need to warp the display for the lenses?  Just call ComposeFinalImage.  Want to get the position of a person?  Just call GetPosition.  The idea with this is an incredibly simple library for developing anything from games to apps.

I want to stress that this is still a very early release.  There is still a lot of work that needs to be done, especially when it comes to creating a nice system for rendering to the screen.  We are still considering DirectX support, as right now we only support OpenGL.  The plus side to this is that it is partially cross-platform already, so Mac and Linux users can take a look into this as well for certain parts.  This is something I am using as a school project too however, and as a result it will definitely continue to be worked on for the next few months at the least, but again, this is very early on.  Everything from the Kinect support to the website itself is still under heavy construction, so please bear with us while we work on it.

I too want to see virtual reality succeed.  I was born in the early 90's, and grew up with the it right within reach.  I hope this time around we can see it succeed, but this deal that Oculus VR has made with Facebook is very risky.  It can either end as a complete success, or end up becoming a complete failure.  Only time will tell unfortunately.

Wednesday, March 19, 2014

Kinecting Back to Blogging

It's been about two weeks since my last blog post, and so I figure I should make this particular post about what exactly is going on.  Back in December, I applied for the Microsot Kinect for Windows Version 2 alpha.  In February, I found out that I was accepted, and went ahead and got the sensor as a birthday present to myself.  Finally, when my spring break started two weeks ago, I got the chance to sit down and fiddle with the hardware, and I've got to say, I am impressed so far.

So for today's post, I'll be going over how to use the Microsoft Kinect for Windows V2 APIs in C#, and the process of making a simple application.  The code for this will be presented at the end of the article, so if you're just interested in getting the code, just scroll down to the bottom.  There's a bit to this project since we'll be using multiple data streams, but hopefully not too bad.  Before I continue on, I do want to stress that this is preliminary software and/or hardware and APIs are preliminary and subject to change.

Friday, March 14, 2014

Replay for Life 2014

Recently it was announced that the Relay for Life organization would be coming to our campus here, and was doing their yearly round-up of student organizations.  Being as interested in charity as I am, I went ahead and started trying to gather interest in raising money for the event through the the Association for Computer Machinery chapter that I lead at Christopher Newport University.  The decision by a group of us was to create an event called Replay for Life.  If you have ever seen the speed-run charities online, then you know exactly what Replay for Life is, but if you haven't, it's a live-stream of classic video games being played as fast as the person can.  Some amazing things have appeared in these videos, and we are incredibly excited because we have someone doing a Legend of Zelda: Ocarina of Time speed-run using some incredible glitches.  We hope that everyone will join us and donate to our cause, and that you of course enjoy the stream!  It will be Saturday, March 15th, starting at 2:00pm EST.  You can find our Facebook event here and our website is currently www.replayforlife.org.

Our flyer, hand-drawn by a student!

Friday, February 28, 2014

Photos of the Month - February 2014

Many people might not know this about me, but I have developed a very strong interest in photography over the past few years.  Since coming to college, I've realized how much I want to have memories of everything I do, and so I take a lot of pictures.  Actually, that's become an understatement, because it's more than a lot.  It's something I've had a few people get upset about, partially due to some bad photos, partially due to the bulk.  In fact, I routinely have to go through them, or risk not posting the photos due to the sheer numbers.

This past year there were tons of photos that I never uploaded simply because of the time it usually took me to go through them.  I didn't (and still don't) have a nice camera, so I ended up using my phone, which means I had to manually go through each one.  With my recent Android phone, I can now do so much faster since they are automatically synchronized everywhere (privately of course, with the option to share).

Monday, February 17, 2014

Why to Avoid Dynamic Tabs on Android and iPhone Development

Recently I began finishing my first Android application.  They app itself is pretty simple in my mind, but actually creating the application has proven much more difficult than I thought it would originally.  This difficulty is mostly due to things like creating and managing databases for storage, utilizing fragments instead of activities for new screens, and creating user-interfaces that are quick and responsive without requiring multi-threading.

Clicking "Button 1" should insert a new tab
between tab 2 and tab 4
The bulk of my problems have been caused with creating the user-interfaces.  A recent problem I ran into was displaying large amounts of information on a single screen.  My original approach was a tab-based system, where users could add new data sections, which would then appear as a new tab.  These tabs could then be scrolled through, and each one would contain a different sub-section of the application.

The big requirement for this however was the need for dynamic tabs.  That is to say, I needed to be able to easily insert a tab between two other tabs.  This proved impossible with the default TabHost object, as there is no insert method available with it.  I opted then to simply remove the last tab, add on my new one, and then re-add the deleted tab.

It was at this point however that I realized that this was a surprisingly weird feature to leave out in the ADK though.  In fact, my thought was that this must be a bug in the ADK, as this seems like something that everyone would want.  Taking the problem to Google showed a few forum posts about this as well, though it didn't seem like anyone had a good solution.  In fact, I still don't have a good solution other than this, and the steps involved get even more complicated.  You can't just "delete" a tab, you actually have to remove both the tab itself, as well as the content that the tab shows, then add the new tabs.

This is much more complicated than it needs to be though.  Why not have an "insertTab" method for the TabHost?  Why would such a seemingly important method be left out?  While I can't confirm the accuracy of this, I believe I actually found the reason, and it's the exact reason why I opted out of using tabs for this purpose (well, sort of, more on that later).

Let's start with an example of bad tab usage:  imagine you are looking at someone's internet browser.  Imagine this person is me, and when you look at the amount of tabs in their chrome browser, you see this:

Kind of painful to look at that many tabs isn't it?  That's the point I want to bring up: dynamic tabs in an application are very dangerous and bad for the user.  It makes sense that dynamic tabs are not supported, as it would very quickly become a cluttered interface as the user added more tabs to the screen.  If you force your user to create a new tab to view content, looking through that much data can be annoying.  Even if the tabs scroll, that can still be overwhelming when trying to view the page.

There is also another problem that occurs, especially in older devices: memory limits.  If you start adding more tabs, you'll find that your memory usage skyrockets.  This is nothing out of the ordinary though, and is a problem that can be easily combated by simply limiting the maximum number of tabs, but it's still a problem nonetheless, and is prevented by not allowing dynamic tabs.

There are probably a variety of other issues that come up with dynamic tabs, so this brings in the question of whether dynamic tabs should even be used.  In my case, I realized that tabs would not be the most efficient way to achieve what I wanted, so I scrapped them and took on another solution.  The solution I took was instead to use a spinner, and updated the content based on what is selected, as well as breaking up where the data is displayed.  By using a spinner, you allow the user to display more at once but with less clutter due to how spinners are designed, and by breaking up the data, you help guarantee that the user can never overwhelm themselves on accident.

There are of course other solutions that can be done other than spinners and breaking up the data, those are just the ones that I chose.  If you've encountered a similar issue, what was your solution?

Monday, February 10, 2014

High Level Tools Versus Low Level Coding

As someone who is constantly trying to hone my technical abilities, I look around at what tools other people use when developing all the time.  I've noticed a very big trend right now with using tools such as Unity or UDK for game development for example, or tools like the Titanium Mobile Development Kit for creating a simple mobile application.  This even extends to a lower level though when coding, such as using GLFW when creating a window in an OpenGL program, or using a 3D library for Javascript instead of just WebGL.

Why these tools are chosen instead makes sense though, as developing a lot of these on your own would take a ton of time away from just making your application.  Just creating a window to use with OpenGL is incredibly time consuming, so why not just use an external API to do it for you?  Especially since these tools will allow you to go cross-platform automatically when done correctly.

Yet I constantly wonder about whether these tools are good or not though.  I believe using these tools takes a way a huge part of learning to code, because you suddenly don't have to worry about what's happening behind the scenes.  You start trusting that these tools are doing the best they can at whatever you are expecting them to do.  Is this a bad thing though?  On the one hand, it allows for developers to focus more on developing their applications, and less dealing with bugs in code. On the other hand, if a bug comes up in the tools, they may have no idea how to fix it or get around it properly.

These ideas bring in another concept too though: are you learning how to code, or are you learning the tools you use?  Going one step further, should this count as coding, or should it count as something else?  If you use an entire drag-and-drop IDE, should that be considered coding or does there need to be a new category for this specifically?  I think a lot of these questions honestly come down to opinions and what exactly you are making with these tools.  How much are you using from others, how much are you making yourself, and if you run into a problem, can you solve it, are some of the important factors that I think should be considered.

I don't consider myself in any place to judge on whether it's more important to learn more about using tools or how tools work, but I do think it's something that should be brought up.  Me personally, I like to learn how the tools work, and then apply those uses when I use tools.  This leads me to do a lot of unnecessary work, but I feel confident about what I am learning as a result.  Does this mean that you can only feel confident this way?  Of course not.  This is just my personal preference.  That being said, what are your preferences?  Do you prefer just diving into making your application, or do you like learning what the code behind the scenes is for your tools?

Wednesday, February 5, 2014

The Real Problem With Ken Ham vs Bill Nye

Recently I got the chance to watch the debate between Ken Ham and Bill Nye on whether creationism is a valid form of science to teach students in public schools.  Ken Ham believes that creationism is valid, whereas Bill Nye thinks it will be harmful to future generations of children.  Watching the debate was incredibly painful however, mainly due to Ken Ham.  It was not, however, due to his beliefs.  I respect everyone's views, even when I don't agree with them.  I don't agree with parts of Bill's views either, but I also respect them, and will not be rude to him about them.

I'm sure that this is the case for many people.  We all have friends whose beliefs in religions and sciences all differ from us; it is part of what makes everyone different.  While parts of my family are Christian and highly devoted, I am not.  I know many people who are set in their ways of atheism, but I am not.  That's my take on things; you are fine to partake in any religion you'd like near me, just don't try to make it affect me.  That's a huge part of what this debate has been: should you be able to force your views upon others, what is an acceptable "view" to force upon others, and what is not.  Ultimately though, that is not what bothered me about last night's debate.  What bothered me was how incredibly rude Ken Ham was towards Bill Nye about his views.

Take a minute and watch this video to the side (If the embedded time doesn't work, skip to 1:51:25 for a perfect example of all this).  Do you see what Bill is doing? He is listening to Ken and actually taking in what he says.  Bill does occasionally look away, but only to write down notes about what Ken says.  When the first rebuttals start, Bill talks about what Ken had said, rather than trying to bring up new points, thus ignoring what Ken said previously.  He's actually debating, and constantly states that he has an open mind.

That is where Ken ultimately came to bother me.  Every time Bill Nye starts talking, Ken looks away and even walks away (See 1:59:40).  He is very obviously not even listening to a thing that is said.  When asked directly if something could change his views, he bluntly states that there is nothing that could.  That to me is a huge problem.  Ken is not listening to facts, he is not listening to others, and he is not trying to be a scientist.  He is simply trying to shove his views to others, regardless of what others say.

This is where the danger is.  This is exactly why I do not like a single thing that Ken said.  He's not trying to help the children of our future, he's trying to make his museum (where the debate took place) get more visitors.  It's not about what's actually good for anyone, he's not interested in listening how his views could help people or hurt people.  He is solely interested in getting more visitors to his "Amusement Park" and making more money.  It has nothing to do with what is actually best.

Bill however, with all of the odds against him, with absolutely no hope of winning this debate, went out  and tried to address the issue based on what he believes will help, and was willing to listen.  That is something that I think is much more important.  If you choose to stand by Ken, like I have seen many people do, I will not stop you.  In fact, I will respect you still.  I might not like that you do so, but I will still listen to you, I will still help you when I can, and I will do my best not to let you down later, just as Bill Nye did during this entire debate.

Saturday, February 1, 2014

One PC, Three Kinects

Recently I managed to get a hold of three Microsoft Kinects.  A few of my family members had one (including myself) and ended up not needing them since they never used them.  Being the "techy" I am, the first thing I did was attempt to integrate them into my recent Oculus Rift projects.  While the code seems to be correct, there was an issue from a hardware perspective that I was hoping to not run into.  Alas, I have, and thus am writing this blog post about what exactly is going on.  It's an interesting little hardware problem that I'm hopeful Kinect 2.0 will solve a bit more, and that'd I decided to do a quick write-up about.

Saturday, January 25, 2014

Why to Start Programming with Homebrew

When I was in High School, I decided to learn to program for the Nintendo DS.  I absolutely loved the games on the system, and thought it would be awesome to be able to create my own games on it.  A little bit of research at the time however showed that professional development on it was out of the question.  Thousands of dollars for a development kit?  I needed to buy an office building?  There was no way I could afford that, but I wanted to learn to program.

What about developing for the PC?  At the time, finding a good, cheap, and well documented PC game engine to learn was incredibly tough.  The tools tended to be very obscure, or super expensive, or limiting with what I could do.  I picked up Game Maker for a little while (which I still believe is a great starting tool), but eventually reached a point where I couldn't do much more with it.

I went back to looking at video game consoles and came across this "new" thing called homebrew.  Researching more into it, I realized that this would allow me to make games for the Nintendo DS, Gamecube, the Sony PSP, and more later on.  This seemed incredible, but there was one big thing: I had to "hack" my systems to do so.  Now as someone brand new to the homebrew scene, that worried me a bit at the time.  Hacking? Wasn't that illegal?  Couldn't I get into trouble with that?  Is this a good way to go about learning to code?

To start tackling all of this, I began looking into what exactly I could do with it and whether it was worth even starting.  The tools I was using (PAlib at the time) were fairly well documented and included tons of examples.  Within a few days I had a simple demo up and running and had begun programming a game.  This prompted me to go through and actually read about what I was using and the legalities with it.

Within a few months, I had discovered that homebrew really doesn't require anything illegal (usually, I'll explain more on that later though).  While yes, you do have to "hack" the system, there isn't actually wrong with doing so to your own hardware.  It's similar to if you got locked out of your car and had to break back in, it's your car, you own it.  If that's the case though, why do people get so up and arms about it sometimes?  It's because of what you can do with it.

To elaborate, let's image that you get locked out of your car and then break back in.  Now imagine that you drive the car through a red light and get pulled over.  Is the problem that you broke into your car?  No, it's what you did with it.  Homebrew is very similar.  If you "hack" your device to play music you own on it, then that's perfectly fine.  But if you create an application that plays music you don't own, then that's obviously not okay.  These days, homebrew seems to have a very bad rap for what it is: A way for anyone to learn to program.

The Oculus Rift is another example of something that was
started as a homebrew project and grew to something more!
If you don't trust this, just read up on the history of companies such as Electronic Arts.  EA was founded by two guys who did nothing more than tinker with homebrew tools of their own.  Homebrew has been around since computers were first invented.  It provides a cheap way to program on things you already own.  It's nothing more than making something of your own at home, rather than as a business.  If that's the case though, why does homebrew have such a bad rap?

I think a huge part of why homebrew has become viewed in this way is due to what people have begun to use it for, especially in recent years.  A big offender of this is software piracy, as most of these tools easily lead to it, mainly due to the sheer nature of these tools.  It's not the fault of the tools' developers, it's just how these things work, and there's only so much one person (or even a group) can do to prevent piracy.

Another huge issue however is only showing up more recently, and that's the creation of tools using code by the companies make these systems.  The PS3 saw this for a while, where homebrew developers would use tools owned by Sony, which was obviously not allowed.  In some cases, making the tools is difficult, which can lead to an impassible barrier for making homebrew.

With all of that being said, is homebrew something worth learning?  Absolutely!  It's a cheap entry point for coding and allows you to learn a lot more than you normally would when coding for a PC.  A good starting point for this actually is the Nintendo Wii.  The system, while old hardware wise, is easy to get started with, and is a great entry point for learning how to work with systems that have these huge limitations.  When you develop on a PC, you usually have a near-unlimited amount of resources for basic games.  But when you work with something like the Nintendo Wii, or especially the Nintendo DS, you have to be very careful about what resources you use.  A computer may have on average two gigabytes of ram, but the Nintendo DS?  You're going to be using at most four megabytes of ram, a fraction of a PC.

These limitations, while tough to overcome, will ultimately help make you a better coder.  You learn how to use faster sorting methods, so as not to slow down the CPU.  You learn about memory management, and why it's important to release resources when you no longer need them.  You also have to learn how to make most of the high-level tools you need.  On top of all that though, the hardware to get into this is very cheap usually, and you may have most of it lying around your house right now.  Just be cautious of what you make, and you'll be fine!

Tuesday, January 21, 2014

The Github Name Game

Many people ask me what I think is the most helpful thing to do for anyone pursuing a degree in computer science.  The one thing I always say is to do projects outside of class, and I think it's obvious why.  It's one thing to learn something in a class, it's another to apply it to a project.  I've been lucky and managed a few small ideas that have (mostly) come to fruition, but I know it's tough to find a project every time.

Thus, I'd like to propose a game: The Github Name Game.  The idea is simple: Create a Github account, start a repository, and based on their random project name generator, make something based around it!  One of the more recent ones I saw was duck-batman, which I thought was pretty funny, and would be trying out if I didn't have my senior project and other small projects to focus on at the moment.

So let's get a small compo going with this!  Create a project in the 2 weeks, and post it in a comment below (with a binary file too if you can please!).  I'll post a poll, and we'll pick a winner based on that!  If anyone has prizes to donate, feel free to send me an email and we'll organize prizes to those who win, but even if there's no prizes, do it for your resume!  Just because there's nothing to win doesn't mean it can't be for fun!

Sunday, January 19, 2014

How Google is Replacing Windows (For me)

A few months ago I was finally due for a phone upgrade and decided to make the big jump from an Apple iPhone to an Android Phone (the Galaxy S4).  What I thought was going to be a simple switch ended up being a full switch to Google's platforms I've realized recently.  Not only do I have a phone with Google's OS, I now have a tablet by Google, the Chromecast by Google, and of course, tons of applications that I use by Google (just look at this blog!)  In fact, it's only been today that I've realized just how many products by Google I use.  Sending an email to another student?  Just so happens my school email is supplied through Google.  I want to watch a TV show with breakfast?  Chromecast is going to be the most convenient way to do so.  My laptop even has the equivalent of a start button from Google on it now.

While I'm using Windows 8, there's still a "Start button" thanks to Google.
The funny thing is, I didn't do any of this on purpose.  I just happened to end up getting all of these products from Google because they fit my needs exactly.  Why do I use Google Drive more often than Dropbox?  Because I'm usually on my email to begin with, and it's a click away.  Why did I switch to Android from an iPhone?  Because I wanted to be able to customize my phone more so.  At first, many of these little things seemed almost pointless, but as time has gone on, I've found that Google manages to just do things right.  When I need to bring a PowerPoint to class, rather than putting it on a USB flash drive, I can just upload it to my Google Drive, and then download it in class with a shortened URL from Google.  No big hassle, no issues with the URLs' changing, it's simple and quick!

Dropbox I'm slowly beginning to use more (as evident in the picture above), but I wonder if I'll ever make the full jump.  While Google does collect a lot more data, I don't really mind if it's advertising things I enjoy.  Even so, Adblock Plus manages to hide the majority of ads, so I don't really even have to worry about that too much.

With all of that said, there's still a few things I won't switch to Google for.  A big one is still of course my operating system (though they are pushing that very quickly).  There are too many programs I prefer to use on Windows than any others (Even Linux sadly).  On top of that, I still prefer Facebook over Google+ (Though that as well is slowly changing too).  Even for document editing, I still prefer Microsoft Office over Google Docs, though I don't think those are quite the right comparison.

While Google is slowly dominating my life, they still have a ways to go before I'd be willing to jump ship for quite a few products.  Maybe over the next year it will happen, but I'm still skeptical until I see it happening.

Monday, January 13, 2014

College and Food

For those interested in what I recommend, please scroll down to the bottom.
This is a post I'm pulling from my Tumblr, now with a few updates!  It was one of my first posts, and was about something I think most people enjoy: Food.
Now that my college career is slowly coming to a close (and by slowly I of course mean there is a year left), I feel like I’m in a pretty good place to give tips about ways to prepare for college.  One big thing that I wish I had thought more about was cooking. I’m not talking about simple things (Like sandwich combinations, or how to cook a simple piece of chicken).  I’m talking more about things like how to make mint chocolate chip cookies, or tacos with various spices, or the amazing breakfast of cinnamon honey waffles.

Friday, January 10, 2014

Shape the World

I've contemplated starting a blog for quite a while now, and with 2014 starting off and my senior year getting closer to its end, I figured now is as good of a time as ever to start this.  The big question I've had is this though: What do I want to accomplish with my blog?

While I love to code and am a huge tech geek, I also have a wide variety of other areas I'm interested in.  I do ballroom dance, I like to draw, I am a huge music nerd.  I don't want just another "techy blog", I want something more!  At the same time, I want something organized, something inspirational to others, something that people can go to and get help from.  That's why I'm starting this blog as Shape the World.

Coding is a huge thing I like to do, but there are
other things on that list too!
The goal of this blog is to give me a spot to talk about the things I do, how I went about them, or why I think they're important.  While I'm sure this has been done before, I feel like I can bring new experiences to the table due to the wide variety of things I do, and the ways I go about doing them as well.  Maybe some of them are novel, maybe not, but there's only one way to find out, so I'm jumping in head first!

I of course would love to have feedback on people's thoughts with what I do as well as what more I can do.  I've got many ideas that I'd like to make a reality, and I hope this blog will give me a means to do so one day.  For now though, I'm just going to work on Shaping the World, one blog post at a time.