Showing posts with label coding. Show all posts
Showing posts with label coding. Show all posts

Friday, January 16, 2015

Standing out in a World of Code

This is an interesting question that I've been asked a whole lot recently.  A lot of people want to know how they can make their code stand out for jobs, and what it takes to do so.  The interesting thing is, you don't have to be a fantastic coder to do so.  In fact, standing out is pretty simple in the world of software development, you just have to know yourself fairly well.  So for today's post, I want to go over a few ways that can help you stand out, whether it's at your school, a job interview, or just online in general, here are my top three tips for standing out in today's world of code!

Thursday, January 1, 2015

Launching Into 2015

Man, it seems like I was just starting this blog a year ago when 2014 began.  While things have slowed down in recent weeks, I can assure everyone that it's not for a lack of what to write about.  In fact, as of now, I have almost too much to write about!  Thus, to save some time and make a quick post about what to expect from me in 2015, read on!

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)!

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!

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)

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, 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!

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?

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.

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.