tag:blogger.com,1999:blog-10551743208775607772024-02-19T20:18:55.772-05:00Shape the WorldAnonymoushttp://www.blogger.com/profile/00651699547388699498noreply@blogger.comBlogger40125tag:blogger.com,1999:blog-1055174320877560777.post-22323825841426140032015-10-09T20:04:00.000-04:002015-10-09T20:11:07.896-04:00The Great Phone DebateI've been in far too many discussions about what smartphone people should jump to. I've seen people argue for everything from iPhones to Blackberries (Right when they were dying). It's always interesting to see why people choose the phones they do, but I do think that each phone (iPhone, Android, Windows Phones, etc.) serve their own purposes. So with the announcements of the new iPhones, Android phones, and Windows phones, I figured I would make a short guide based on my observations for this. As a couple of notes: I have owned multiple iPhones, Android phones, and of course the classic flip phones. I've used Windows phones and Blackberries that friends have, and have of course looked into each of these based on my needs.<br />
<h2>
<a name='more'></a>iPhones</h2>
<div>
Let's start with the one that everyone knows: iPhones. I'm going to be blunt here: iPhones, while gradually becoming more powerful devices, are still not the most "powerful" phone as far as hardware goes. Yes, they run well, and they hide a lot of things for you to make it easier, but deep down I find they have various flaws (I still cannot receive group messages from my family, who all use iPhones). They are very intertwined with their ecosystem as well, making it a huge pain to use a Windows computer with an iPhone. This of course means that if you really need your Windows computer to play nicely with your phone, I would not recommend an iPhone, as it just will not meet your needs. On top of this, if you need the ability to modify your phone, or are interested in the upcoming virtual reality developments for mobile devices, again, I would avoid iPhones, simply because they do not support any of this very well.</div>
<div>
<br /></div>
<div>
That said, there are still <b>plenty </b>of reasons to get an iPhone. While behind the scenes they may be a bit of a mess at times, they are incredibly simple to use. If you are not a technical person and computers scare you, Apple has gone above and beyond in usability, and you really cannot beat them. Android is getting better, but I still run into technical issues with my Android phone, and I am skeptical that it'll magically get better with Android 6.0 (Marshmallow). This of course is especially important if you are running around trying to do other things, and don't want to worry about what is wrong with your phone. iPhone's tend to "just work".</div>
<div>
<br /></div>
<div>
They also are good if you plan to try and make money from app development. Android's store, while filled with apps, really doesn't see a lot of purchases being made. iPhone users tend to buy apps more often, so if you plan to do a hard price for them, or add in-game items, it would probably be best to get an iPhone so you can target it for development instead. As a user, this also means higher quality apps.<br />
<br />
Overall, iPhones are a great stable platform, and are very easy to use. They are most certainly not future proof, and will most certainly lack the "latest and greatest" features (Sorry guys, Google had Google Wallet long before Apple Pay), but if you don't care about being at the forefront of technology, and really want stability, then an iPhone is the device for you.</div>
<div>
<br /></div>
<h2>
Androids</h2>
<div>
Android phones have come a long way from where they once were. They definitely have improved their usability from where they once were, and still remain the most powerful phones on the market, but they still lack in one area: Usability. I've heard time and time again that Android phones "never have had issues" from users, and that they "have a great user interface now". I'm sorry, but now that I am on my <b>second</b> Android device, and am still running into technical issues on it, I have to say that they do not "just work" like an iPhone does. They are also severely prone to bloatware being installed (yes, I know there's the Nexus line, but that's just one type of Android phone), and can have some issues depending on the vendor.</div>
<div>
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhb2tjWTK_a2GcDVlrdKA7BhdF2fBQmy91xUNQmtnhjjbQfprVPOsxrUNXVxC2cCkLYY_Q8JlmzDDgtJnWWTPoCqaQ1BqBXnpIRNzRsms6qQgYW_iMrkBjDarnGrvx9xGAYqSyweCv2afRP/s1600/20151009_200554.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhb2tjWTK_a2GcDVlrdKA7BhdF2fBQmy91xUNQmtnhjjbQfprVPOsxrUNXVxC2cCkLYY_Q8JlmzDDgtJnWWTPoCqaQ1BqBXnpIRNzRsms6qQgYW_iMrkBjDarnGrvx9xGAYqSyweCv2afRP/s320/20151009_200554.jpg" width="320" /></a>That said, I think if you are able to install and remove programs on a Windows computer, you will be fine with an Android phone. The user interface is definitely much better than it was in past years, and it really has stabilized a lot more. Android phones have one, giant advantage over all of the other phones: They are future proof. I know people who still have phones from 4+ years ago, that are still to this day running fine and getting the latest version of Android. My old iPhone 4S can barely keep up with the times, and that's barely at the 4 year mark. On top of this, they tend to have a lot of really cool things built in. The new Galaxy S6 for example can be used with an upcoming virtual reality headset called the GearVR, which will transport you to whole new worlds.</div>
<div>
<br /></div>
<div>
There are also a variety of ways you can customize your phone. For example, you can have widgets on your home screen, to tell you what your data usage is, or how many steps you've walked, so you don't even need to open up an app. This is extremely useful when you need all of your information at a quick glance. You can also make your own apps, and send them to your friends, without having to put them on the app store.<br />
<br />
Android phones, while a bit intimidating at first, are still fantastic phones. They are highly customizable, and play very friendly with Windows, Mac, and Linux. If you are a high performance user, and are comfortable with using Windows computers, you can easily use an Android device. While you may run into technical challenges still, and the user interface isn't as intuitive as an iPhone, it's no more complex than a Windows computer anymore. Just be prepared to spend a bit of time with it like you do on a computer, and you'll be fine.<br />
<br />
<h2>
Windows Phones</h2>
</div>
<div>
This is a relatively new phone for the market compared to the iPhone and Android. Originally, they were very lacking in features, and had a variety of issues. As of recent however, Windows phones have stabilized quite a bit, and are quickly growing into an incredible set of phones. If you are a Windows only type of person, these are the phone for you. They generally have very incredible specifications (their cameras are some of the <b>best</b> on the market), and their app stores are much smaller, meaning that the potential for selling apps is better.</div>
<div>
<br /></div>
<div>
That said, they do still lack some features that the others have however. For example, they do not have an Apple Pay or Android Pay equivalent. Their specific music app is also lacking quite a bit behind, though Google Music is available for it still. If you need a lot of common features found in phones though, I would be cautious buying a Windows Phone.</div>
<div>
<br /></div>
<div>
The Windows phone, while a solid platform, still has a lot of growing to do. In some ways, this is good, as developers can help shape the phone's future. But if you are a user who needs all of the normal phone features, you may want to avoid this.</div>
<div>
<br /></div>
<h2>
BlackBerry</h2>
<div>
Where to begin with BlackBerry. This <b>used </b>to be the best phone on the market, but currently, I would highly recommend avoiding this phone. They are currently switching their operating system to Android, but even with that they can't seem to <a href="http://www.bnn.ca/Video/player.aspx?vid=713580" target="_blank">even demo the phone correctly (forewarning, this video is cringe worthy)</a>. There are a variety of issues plaguing it, and while you will be able to do what Android has, the price point and long-term support might not be very good if they stop doing phones. That said, they do have the benefit of a <b>physical keyboard,</b> which if you are desperate for that still, might make it an okay option. Overall, I would recommend avoiding this phone still however.</div>
<div>
<br /></div>
<h2>
Conclusion</h2>
<div>
In the end, here's a quick and simple version: iPhones are great if you want simplicity and can't use a Windows computer. Android phones are great if you want a lot of features, and can use a Windows computer. Windows phones are great if you want something new and in progress and use Windows only all the time. BlackBerrys.... be wary of. Have a thought on this topic? Leave it in the comments below!</div>
Anonymoushttp://www.blogger.com/profile/00651699547388699498noreply@blogger.com0tag:blogger.com,1999:blog-1055174320877560777.post-25834368971286407452015-09-29T23:03:00.002-04:002015-09-30T09:26:56.318-04:00The Oculus Rift vs The HTC ViveLast week, I got the chance to go to Oculus Connect and try out all of the latest demos. It was a blast, and I met a ton of incredible people. Shortly after arriving back in Virginia however,I found out that HTC and Valve's Vive Truck Tour was in Washington D.C. for their final day, and proceeded to head up to D.C. to try out their demos as well. It was great timing, as I had already had time to think about the Oculus Rift demos I tried, and got to make some fantastic comparisons between the two. The following is a quick write-up of my thoughts on both of them.<br />
<br />
<a name='more'></a><br />
<h2>
Before We Begin</h2>
<div>
To start this out, I want to list a few things of note for this post:</div>
<div>
<ul>
<li>The Oculus Rift I tried was effectively what the consumer version will be. It was made of a special kind of fabric that the consumer version will be made of too.</li>
<li>The Vive on the other hand is still *technically* a prototype. It is most likely not the final version, and will probably have some changes made to it as well.</li>
<li>I had more time with the Oculus Rift than the Vive, so I can only comment on what I've tried and such. I have developed for the Rift, but not for the Vive as well.</li>
</ul>
<div>
So, let's jump on in!</div>
</div>
<div>
<br /></div>
<h2>
Sense of Presence</h2>
<div>
For those who are not aware, the idea of presence with virtual reality is that you no longer realize that you are in a virtual world. It is an incredibly powerful feeling, and is crucial to helping differentiate virtual reality from a fancy headset in my opinion. Both the Rift and Vive try to achieve this through the use of high frame rates, low latency, and high resolution screens (among other things). There are tons of factors that play into this, and it can be very hard to get this sense.</div>
<div>
<br />
I've been using the Oculus Rift for a while now, trying both developer kits 1 and 2, and never "truly" felt a sense of presence. The first time I got close to this was with the Toybox demo at Oculus Connect, as I began to feel like I was interacting with someone who was in the same room as me during the demo. That said, it never really hit me in a big way that I was there. Maybe this was just due to the demos I tried, but nothing ever gave me the sense that I was truly there, just that I was able to do some more unique things.</div>
<div>
<br /></div>
<div>
The Vive on the other hand, is a completely different story. I have never felt such an incredible reaction from a video game in my life. There is a specific demo where you are underwater, and on the bow of a ship, and you can actually look over the edge. Supposedly there was just enough room for me to walk off the edge, and tried as I might, my body would not let me take that step. Have you ever tried to bite your tongue as hard as you can, and found you can only bite it so hard before your body stops you? That's the kind of feeling I had, but for a video game. I've never experienced that before. But it gets even crazier: At one point, a giant whale swims by and just pauses next to you. Normally, I try to put my controllers through these creatures to see what happens, but again, I could not physically touch that whale. Every time I got close, my body would naturally jerk away. The slightest movements of this whale made me physical back away.</div>
<div>
<br /></div>
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjENn9eVYaicnJpU5BL28RfS3252vCYpzi1brxaGFNKP_wuCnL6mI-0m8zGDPQ_oQBiP84nmuKWZfUqGBCNbTTMa6JYjdHz8YVLVpTSQhTUyOYjcMNLddAiLDrA4a6pw1rfjXygqnDxM5gc/s1600/whale.jpg" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" height="188" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjENn9eVYaicnJpU5BL28RfS3252vCYpzi1brxaGFNKP_wuCnL6mI-0m8zGDPQ_oQBiP84nmuKWZfUqGBCNbTTMa6JYjdHz8YVLVpTSQhTUyOYjcMNLddAiLDrA4a6pw1rfjXygqnDxM5gc/s400/whale.jpg" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">This whale was terrifying when seen in virtual reality.</td></tr>
</tbody></table>
<div>
While it's completely possible that the jet lag I had made me more susceptible to the sense of presence, or that the demos were designed more for this, I do have to give the Vive credit for doing such an incredible job at getting those reactions out of me. I was incredibly impressed at how large many of the objects in their demos were, and they were legitimately terrifying. That said, I really like how Oculus handles their multiplayer. Their controllers supported a much more natural way of communicating (along with voice) that the Vive cannot do (more on this next).</div>
<div>
<br /></div>
<h2>
Hardware</h2>
<div>
I'm gonna be quite honest: Oculus has the better hardware right now, hands down, in every aspect EXCEPT one: The positional tracking. The Vive's positional tracking system (especially for the controllers) worked flawlessly each time, whereas I had many issues with being able to grab objects in games with the Oculus Touch controllers. Hopefully this will be corrected in the future, but the Vive's hardware seems to be much better for positional tracking due to how it works.<br />
<br />
That said, Oculus had a much more solid hardware experience. Their headset is incredibly light compared to the Vive (I honestly forgot the Rift was there, and thought my sunglasses were the Rift briefly after), and incredibly comfortable. The fabrics they use really do an incredible job with helping to get rid of the feeling that you are wearing this big device on your face. The controllers as well are incredibly light, and it often felt like you weren't holding anything in your hands, to the point that I nearly dropped the controllers several times.</div>
<div>
<br /></div>
<div>
Speaking of Oculus Touch, I honestly think that these are the best motion controllers I have ever used. Not only do they have the perfect combination of buttons, they also have a great control scheme: Touch sensitive buttons. This is a game changer in my opinion, as you can perform gestures such as thumbs ups, high fives, fist bumps, and more, without pressing any buttons. This feature worked incredibly well, and I was often surprised at how natural it was to do things. With the Vive, I actually had a bit of a hard time as I had to guess which buttons did what generally (though this was not too terrible in the end).</div>
<div>
<br /></div>
<div>
<h2>
Job Simulator: Rift vs Vive</h2>
<div>
This was actually pretty neat: I got the chance to try Job Simulator by <a href="http://owlchemylabs.com/" target="_blank">Owlchemy Labs</a> on both devices. These experiences, while different, highlighted some key differences in the devices.</div>
<div>
<br /></div>
<div>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhdKSxuasJgrqcXivqzmu1QhHGM6tHMgiz6sCmdYgnS721vr-oU_7j_SZHwC8eD6ExZ7DpKn4O8dPy1KPTVQFRQXoorQ0dWkUGtTeJdfSW69cAwxk6LSD45ZFLYqOIBBfcDa-RoITfDUhNl/s1600/jobs.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="225" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhdKSxuasJgrqcXivqzmu1QhHGM6tHMgiz6sCmdYgnS721vr-oU_7j_SZHwC8eD6ExZ7DpKn4O8dPy1KPTVQFRQXoorQ0dWkUGtTeJdfSW69cAwxk6LSD45ZFLYqOIBBfcDa-RoITfDUhNl/s400/jobs.jpg" width="400" /></a>For the Oculus Rift demo, you were placed in an office and asked to do some simple tasks, such as fill up a coffee mug, eat a bagel, copy some papers, and turn on your computer. Because a lot of this was grabbing objects and holding onto them, it was an incredibly immersive experience due to how the hardware works. To grab an object, you physical clench the controllers harder, and your grabbing it. This may sound odd, but it actually works incredibly well, and really made me feel like I was grabbing the cord to a computer. The slight feedback through the controllers also worked very well, and gave a sense of presence.</div>
<div>
<br /></div>
<div>
For the Vive demo, you were placed into a kitchen, and asked to make various food items (I only had time to make soup). This was a fairly simple task, and while fun, not quite as fun as on the Oculus Rift. Because you ended up just pressing buttons, I actually did not get as strong of a sense of presence, and ended up just exploring the kitchen a bit more, rather than focusing on the task.</div>
<div>
<br /></div>
<div>
The big thing this demo highlighted was the difference in positional tracking, and how important that is. During my Oculus Rift demo, I was actually unable to perform the coffee task easily, as I could not turn around to reach the coffee pot. Each time I did so, the system would lose track of my controller, which forced me to awkwardly reach around while trying to keep the controller in the view of the cameras. The Vive on the other hand, worked so well that it actually made the task TOO easy. This is not bad of course, but highlights how the Vive definitely has a much smoother positional tracking system.</div>
<div>
<br /></div>
</div>
<h2>
Medium vs Tilt Brush</h2>
<div>
This was an interesting experience. Both of these were fun (though I can't draw to save my life), but I feel like they were built for two entirely different users.</div>
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/IreEK-abHio/0.jpg" frameborder="0" height="266" src="https://www.youtube.com/embed/IreEK-abHio?feature=player_embedded" width="320"></iframe></div>
<div>
Medium came off as much more professionally focused, and had a much nicer and more precise set of tools. Some of the things people made in it were downright incredible, and I was actually surprised with the amount of precision you had within it.</div>
<div>
<br /></div>
<div>
Tilt Brush on the other hand felt a bit like Microsoft Paint: Not as precise, but more fun to just mess around in. I haven't seen anything crazy made with it, but it didn't like it was made to be a professional modeling application like Medium. This was partially due to the controls, which have you flipping the controllers around in order to access different things. Medium on the other hand made use of the joysticks heavily for selecting tools.</div>
<div>
<br /></div>
<h2>
Final Thoughts</h2>
<div>
In the end, both are great experiences. I am certain that Oculus VR will get out the final wrinkles in their positional tracking system, though I still have some concerns about how big of a space they could truly allow for. The Vive is definitely not a consumer version yet due to it's weight and design, but gave the sense of having a slightly more immersive experience currently. Both have nice, crisp screens, low latency, and superb games coming out for them. Honestly, I am planning to try and get both of them as soon as I can, and plan to develop content for both as well. Have you tried these devices? Let me know what you think in the comments below!</div>
Anonymoushttp://www.blogger.com/profile/00651699547388699498noreply@blogger.com0tag:blogger.com,1999:blog-1055174320877560777.post-16762084690347406242015-05-25T10:17:00.002-04:002015-05-25T10:17:40.021-04:00The Millennial Gold Rush for DataBefore you start reading, I would like to stress that <b>I am not an expert in this field</b>. These are my ramblings based on what I have read, patterns I have noticed, and my own personal theories. There may or may not be truth to this, and while I have done a decent amount of research, I do not work in this field directly, and cannot specifically comment on all aspects of it. With that said, let's begin:<br />
<br />
With all of the "hype" in regards to big data, I've slowly begun looking into what the growth for big data is going to be like as far as the job market is concerned. What's interesting is that this entirely depends on which part of the market you plan to go in to. For example, if you plan to learn about processing this data, your market value is very high from what I have read, probably for the next five to ten years, until we have the process mostly automated. But if you plan to go into the gathering sector, there really isn't a way to determine how long you'll be able to rely on your skill set. The reason for this is that gathering data is becoming more and more like a gold rush, instead of something long term. This is what interests me, as I believe it is a very valuable skill set to have right now, partially because I believe more "gold deposits" will be found in the future still. Thus I have been analyzing these "gold deposits" in order to gain a better understanding of what they are, where they come from, what their value is, and how to find them.<br />
<br />
<a name='more'></a><br />
<h2>
The Rush Process</h2>
Every couple of years, a new type of data that can be extracted from a company's customers about specific things, and that data is generally very valuable for creating a better product. A great example of this of course is Google and their collection of search histories. This is not only a valuable way for them to improve their search engine, but also to create products based on what people search for. Once that data is extracted, I believe it is generally sold, which is where it's "value" comes from. At this point, I am not sure how much it "fetches on the market", but I would assume a large amount of money is given for new types of data about customers. For those who are skeptical about whether your data is sold, my philosophy is this: "If an online service is free, you are the product."<br />
<br />
Now that the data is sold, many companies have it, which brings on the next question: Why keep "mining"? This is what I speculate, as there is no more data to be gathered from users in this specific field. Once the data has spread around enough, there is no need to mine for it, as you can probably purchase it, if you don't already have it. For example, if somehow Google managed to extract all of the possible search result info about its customers, there would be very little reason to continue gathering this data, as you could just purchase what you need from Google (obviously this is an extreme example however, as this data will constantly change, keeping the stream "fresh"). In this example however, it would be more likely that this rush would die down, and everyone would continue on to somewhere else, purchasing the data when they need to. This brings me into my next thought:<br />
<h2>
What are the current "rushes"?</h2>
<div>
As an aspiring businessman, I believe you need to understand what the current "data rushes" are, in order to predict the future variations. There is a ton of money in these "gold mines", and it is important to figure out where they are coming from. In fact, I think this has more money in it than any other sub-field in computer science out there. Don't believe me? Just look at all of the businesses that have popped up in the past twenty years in regards to data mining from customers. Google is an obvious one, Facebook is yet another. WhatsApp is another big one, along with Twitter, InstaGram, and more. More recent examples that I think have yet to be found are OculusVR, along with (probably soon to be) Magic Leap. Google hit the rush for search, Facebook for social media, WhatsApp for communication, Twitter for news, and InstaGram for photography. What about OculusVR and Magic Leap?</div>
<div>
<br /></div>
<div>
Well OculusVR found its data I believe in two types of customers: Gamers and virtual reality enthusiasts. Gamers however are not an easily calculated one I believe (our interests fluctuate, and are really not "stable" in my opinion), which leads me to think their focus will be on virtual reality enthusiasts. So far, they have gained a large amount of data, relating to things ranging from IPDs, to what types of games people like and want, to how these experiences can affect people both physically (motion sickness), and mentally (immersion factors). This, to me at least, perfectly explains why Facebook wants them: Facebook is gathering data, in a similar way to I'm sure how Google is trying to with Google Cardboard and their Magic Leap investment.</div>
<div>
<br /></div>
<div>
Magic Leap I believe is looking into the augmented reality market. They probably already have a large amount of data for this, but I am sure they are looking into things such as the fields that could best benefit from this technology, as well as similar data to what OculusVR is gathering. I won't do a full in depth analysis for Magic Leap now, but I think you get the point.</div>
<h2>
What are potential future "rushes"?</h2>
<div>
This is where things get tricky: It depends on what data could be useful for a product. Home automation was a big one that I looked into, as not a whole lot of data has been gathered on how we interact with our homes. The problem with this right now is the cost of hardware, which is slowly coming down, but is not quite at a point where it is viable. Google has looked into this with their Nest thermostat, but I believe they have reached the same conclusion for now. Augmented reality is another field where the potential is there, but I think either Microsoft or Magic Leap will make it into that market first. So how can you identify these potential gold mines?<br />
<br />
Look for things you do every day, that you don't know how others do it. For example, how well do you sleep at night? Do you toss and turn a lot? Do you wake up early, and stay up late? Maybe sleep data is the "next big thing" (I'm doubtful, but you get the point). There are tons of potential "gold rushes" for data that could come along, but identifying the "right" ones is tough. Eventually, I believe we will run out of gold to mine for, but how we use it is a complete separate story. That said, if you want to "get rich quick", data mining I believe is the place to look into.</div>
<div>
<br /></div>
<div>
Questions, comments, thoughts? Feel free to leave them below!</div>
Anonymoushttp://www.blogger.com/profile/00651699547388699498noreply@blogger.com0tag:blogger.com,1999:blog-1055174320877560777.post-66768775584430584982015-05-16T13:32:00.000-04:002015-05-16T13:33:21.178-04:00Journey into the World of HardwareDeciding whether to focus on software development or hardware development has been a very difficult choice for me. Due to the cost of hardware, I decided to focus on software, but now that I am working full time and have the ability to purchase hardware, I've slowly begun focusing on catching up in the world of hardware. This is a short brain-dump of what I've learned so far, good starting points, and more, for those interested in getting started with hardware development.<br />
<br />
<a name='more'></a><br />
<h2>
Step 1: Make Anything</h2>
<div>
This is something I've struggled with a bit, but is very important I've learned when it comes to hardware: Don't be afraid to make something terrible. A Bluetooth controlled light switch is better than nothing, even if all of the hardware you are using is pre-assembled. I wish I had learned this sooner, as it would have helped tremendously with getting me into hardware in high school more easily.<br />
<br />
Some neat beginner project ideas: Learn how to make a simple light, make a motor move, play with some servos, make a capacitive sensor, etc. A really good robotics one I would recommend is the Me Arm. It's a bit expensive at $40-60 for everything, but it really let's you get into some basics with motors, coding, gears, and Arduinos to start. You find more about it from <a href="http://lifehacker.com/build-a-kickass-robot-arm-the-perfect-arduino-project-1700643747" target="_blank">this LifeHacker article</a>. Speaking of Arduinos...</div>
<div>
<br /></div>
<h2>
Step 2: Buy Some Arduinos</h2>
<div>
Arduinos might just be the greatest hardware piece ever made. I know, a lot of people online sing their praise, but I really can't stress enough how fantastic they are. Ranging in $10 to $50 in price, you can get quite a bit for cheap. All of your projects can suddenly be controlled through code, which is one of the single greatest things I've ever gotten to work with. It really allows you to expand the complexity of your projects, with a minimal amount of work added on. With the addition of Arduino Shields, you can even start play with things like LCD screens, Bluetooth controls, DC motors for robots, and more! Honestly, the rise of Arudinos makes the hardware barrier incredibly low, and I highly recommend buying several if you are interested in hardware.</div>
<div>
<br /></div>
<h2>
Step 3: Be Safe (DON'T SKIP THIS)</h2>
<div>
This is something that I don't see mentioned a lot, but I consider super important: Be safe. If your goal is to wire an Arduino to your electrical sockets at home, DO YOUR RESEARCH! Doing so incorrectly can result in shocking yourself, or worse. Hardware, while fun, can be much more dangerous than software, so take your time, and make sure that you read what dangers there are with your project. Some important ones right off the bat: High current projects, exposed wires, robotics, anything with lasers, dealing with batteries (<b>especially lithium batteries</b>). Again, these are just some quick ones off the top of my head. I know that this gets said way too often, but the last thing you want is a battery to explode when you are charging it. Don't skip safety, it is not worth the risk.</div>
<div>
<br /></div>
<h2>
Step 4: Learn How Your Project Works</h2>
<div>
Something that happens a lot is that people build something, but just blindly follow the instructions, rather than learning what exactly is going on. This can lead to building some neat things, but not being able to use it in a future project. When you build something, go to Google or Youtube and look for explanations as to how the parts you are using works. If you are playing with servos, learn how the servo is able to track its current position, rather than just blindly programming it to move. Read about the chip that runs the Arduino UNO (the ATmega328) and how you could make your own Arduino from scratch in the future. This can really help you later on, when you may want to take what you've made, and scale down the parts more.</div>
<div>
<br /></div>
<div>
Hardware is a tricky thing to learn. Finding a good starting project can be tough, and the motivation to do it can be even tougher. Sometimes you just need to take a leap and dive right in. When I am done with some current projects, expect write-ups on my blog and videos on my <a href="https://www.youtube.com/channel/UC1HlwNGTYPR556dtV0iTpKg" target="_blank">Youtube account</a>. Any questions or comments? Feel free to leave them below!</div>
Anonymoushttp://www.blogger.com/profile/00651699547388699498noreply@blogger.com0tag:blogger.com,1999:blog-1055174320877560777.post-32296384723096857522015-03-15T18:07:00.001-04:002015-03-15T18:07:53.279-04:00What not to do on a resumeWith the job and internship hunting seasons among us, I've had a few people ask me to look over their resumes, and wanted to share some public advice for those that are job hunting, and want to further improve their resumes. I'll try to remember to link mine once I've finished updating it again (Even though I have a job, I like to maintain it still), but for now, here's a few tips for polishing your resume. Please note that these tips are geared more towards technical resumes, though some of these tips may apply to non-technical resumes too.<br />
<div>
<a name='more'></a><h1>
Keep it at a Page</h1>
</div>
<div>
I know many people have said this before, but I have <b>still</b> seen quite a lot of people make their resumes more than a page long. Do not do this. I don't really even care if you have ten or more years of experience, I have <b>never</b> seen a resume that needed to be more than a page long. Your resume is not the place to describe yourself (that is what a cover letter is for), and making it more than a page long shows that you do not know how to prioritize what is important to say. Your resume should highlight your important skills, some relevant projects, and some relevant past work. Any more than that, and you will lose your reader, who will be your first obstacle in getting a job or internship.</div>
<div>
<br /></div>
<h1>
You are not a Master</h1>
<div>
One of the best things that you can do, is have a list of skills on your resume. This is a great way to say, for example, what programming languages you know and use, or what APIs you have used before. Listing out your skill levels with them is even better. But please, do not put that you have mastered any of them. I don't care if you have used the language for twenty-five years, and were the original creator of the language, there is going to be at least one question that you do not know the answer to for that language, and when you say that you are the master, you need to be the best of the best.</div>
<div>
<br /></div>
<div>
Imagine how bad you will look if you go into a job interview claiming to have mastery over java, and then they ask you a question that you do not know the answer to relating to java. For example: Do you know what the java keyword <i>Transient</i> is used for? If not, then you do not have mastery of Java, and if you do know the answer, I'm sure there are other questions that will stump you. Do yourself a favor, and just don't use the word "master" on your resume. Stick to words such as "knowledge of", "advanced knowledge", and "intermediate knowledge" instead. These can be especially useful for showing what languages you have used before, and what languages you may have just read about in school.</div>
<div>
<br /></div>
<h1>
Don't Advertise for Unwanted Jobs</h1>
<div>
This is something a bit more obscure, but I think a lot of people forget this when they make their resumes: Don't put down a skill you don't want to use. As an example, I've recently begun messing with ThreeJS, a WebGL library. I will never list that on my resume, mainly because I do not want to be hired to work with it specifically all the time. If a company asks, I can say I know it, but I don't want a ton of companies contacting me to use that specifically. Don't list a skill that you would dislike using at work. I know a lot of people list HTML as a skill on their resume, but my recommendation is to think about whether you would want to write web pages all day before you put that down. Obviously, you can't pick and choose everything (you need to know things like java, and be willing to use them at work), but don't set yourself up for a job you will dislike.</div>
<div>
<br /></div>
<h1>
Conclusion</h1>
<div>
I hope that at least a few people find these tips useful when creating their resumes. While this is geared towards a more technical resume, these tips may apply to other fields as well! As always, any comments and feedback about your opinions on these tips can be left below!</div>
Anonymoushttp://www.blogger.com/profile/00651699547388699498noreply@blogger.com0tag:blogger.com,1999:blog-1055174320877560777.post-59333920872952046912015-01-27T09:24:00.001-05:002015-01-27T09:24:39.437-05:00HoloLens is Just the StartIf you've looked at any tech website in the past week, you've probably seen something about <a href="https://www.microsoft.com/microsoft-hololens/en-us" target="_blank">HoloLens, Microsoft's fantastic attempt to finally bring augmented reality to the world</a>. I have to hand it to you Microsoft, they did this very well, and what they have looks fantastic. While I've been impressed by Google Glass, I've talked about the one thing its been missing to make it perfect: A depth sensor. Based on what I've seen, it looks like HoloLens is finally adding that, and boy does it look nice. The best part is, this is only the beginning of augmented reality for consumers!<br />
<br />
<a name='more'></a><h1>
How is any of this better than VR?</h1>
<div>
Before I talk about this further, let's take a step back and talk about why this is way better than virtual reality. You may have read my <a href="http://gemisis.blogspot.com/2014/06/the-current-world-of-virtual-reality.html" target="_blank">previous post about how virtual reality is just not ready for the world</a> (if not, go through that really quickly). Virtual reality is a long ways off, partially because of where the technology is right now, but also because of the purposes it will fulfill. Virtual reality is not something your everyday consumer is going to want <b>yet</b>. Gamers? Maybe, if they like heavy headsets being worn for hours at a time. Various industries? Again, potentially for very niche markets. Virtual reality is just not ready right now because we can only fool sight, sound, and potentially smell. Sense of touch? Yeah, there's a whole lot we need to do before we can properly allow someone to walk around without physically moving.</div>
<div>
<br /></div>
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: left;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-5Kx2L3U3EQmo6lIwdReg8XiunNMeXeFo-yNcg0-9-9zKnRxm8gGCm4B1YlBbz6jY5RMA_UvTrktUuE-RGicVYBWwfoHcB4owCvHemvyeT5XQGYjjri03h8o1izz0o_lxxoDyPdBHOA4Q/s1600/20131222_005840.jpg" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-5Kx2L3U3EQmo6lIwdReg8XiunNMeXeFo-yNcg0-9-9zKnRxm8gGCm4B1YlBbz6jY5RMA_UvTrktUuE-RGicVYBWwfoHcB4owCvHemvyeT5XQGYjjri03h8o1izz0o_lxxoDyPdBHOA4Q/s1600/20131222_005840.jpg" height="240" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Sorry Oculus VR, but I think it's a bit too early for you in<br />
the world.</td></tr>
</tbody></table>
<div>
But augmented reality is a completely different story. Augmented reality has been on the verge of being real for quite some time now. In fact, the Microsoft Kinect is what really jump-started this idea to begin with. Think about it: The Microsoft Kinect can see depth, meaning it knows <b>exactly</b> how a room is laid out, what's in it, and how objects would interact in the room. The only problem that it had was its size and hardware requirements. If Microsoft has managed to shrink it down, then that's the perfect thing to include in a Google Glass-sized device and allow for some of the most amazing technological feats the world has seen.</div>
<div>
<br /></div>
<div>
The best part is, augmented reality doesn't <b>need</b> a sense of touch to succeed. Virtual objects can be holograms, as Microsoft points out, and passing through a hologram is what we want! This has huge potential, as it means that the technology can start being fully realized right off the bat. Want to have your child play with Legos? Give them this headset and they won't even have to clean up the mess! Want to see how furniture will look in your living room? Throw on the headset! Trying to cook dinner but not sure what to do? Bring up a virtual chef! Wanna watch TV on a giant theater screen? Put on the headset and let it make one! The ideas are simple, but endless, and this is something that virtual reality doesn't have. Augmented reality is a great first step, because it can compliment what we already have and make it better, whereas virtual reality attempts to replace what we have halfheartedly. Virtual reality will be great further down the line when the technology is better and the applications are clearer, but right now the world needs an intermediary step in technology.</div>
<div>
<br /></div>
<h1>
So why aren't other companies going with AR?</h1>
<div>
Actually, they are. There's only two companies that are going with virtual reality: Facebook and Sony. Sony however is focused on virtual reality for gaming, nothing else, and Facebook.... well, Facebook seems to just want to make a splash in the industry again. Microsoft has obviously selected augmented reality, but what about Apple and Google? Well, Apple has remained silent on the subject, though they are <a href="http://www.patentlyapple.com/patently-apple/2014/09/apple-wins-a-patent-for-an-oculus-rift-like-display-system.html" target="_blank">rumored</a> to be working on a headset of some sort. While it looks like a virtual reality headset, I'm still skeptical. Google on the other hand is actively working on the industry.<br />
<br />
<h1 style="-webkit-text-stroke-width: 0px; color: black; font-family: 'Times New Roman'; font-style: normal; font-variant: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;">
The Next Step</h1>
A while back, Google went ahead and released Google Cardboard, what looked like Google's attempt at virtual reality. I think that Google Cardboard was <b>not</b> suspected to be as big of a hit as it was by Google, but the reality was that it was pretty awesome and has <a href="https://www.google.com/get/cardboard/" target="_blank">recently been upgraded</a> a bit more. That said, I don't believe Google is going with virtual reality. Why? They invested in a company called <a href="http://www.magicleap.com/" target="_blank">Magic Leap</a>. Before I go into this, let me backtrack just a little bit: Last semester while I was finishing school, a professor (thank you Aaron!) told me to take a look into a company called Magic Leap since they were doing some pretty neat stuff. I gave it a look and.... ran into a wall of patents. There was nothing I could find out on their website about what they do, other than the fact that Google had donated five-hundred million dollars to them recently. So, like anyone would do, I started to dig through articles about them and read their patents. You can read a neat article about some theories surrounding them <a href="http://gizmodo.com/how-magic-leap-is-secretly-creating-a-new-alternate-rea-1660441103" target="_blank">here</a> but long story short, they too seem to be creating a similar augmented reality solution to Microsoft, which leads me to believe Google is going towards augmented reality as well.<br />
<br />
Augmented reality is getting closer and closer to being available to the average consumer, and that is very exciting news to me. I've done a small amount of development with augmented reality in the past, and it's a field that I can't wait to finally be able to do more in. What are your thoughts on this? Feel free to post a comment below about whether you think augmented reality is the next big thing, or something different!</div>
Anonymoushttp://www.blogger.com/profile/00651699547388699498noreply@blogger.com0tag:blogger.com,1999:blog-1055174320877560777.post-81479392078552524832015-01-20T14:53:00.001-05:002015-01-20T14:53:16.553-05:00Why to wait on 4KI've seen a few people start getting excited about 4K TVs, monitors, and more, and I keep coming back to the same question: Why is everyone buying them now? Don't get me wrong, higher resolution screens are nice, and 4K screens look fantastic, but that's not the next step in resolution jumps. In fact, 4K is just a beginning step, and upgrading this early on is kind of like buying a 720p television when HD was just coming out: It's better to wait!<br />
<br />
<a name='more'></a><br />
<h1>
But 4K is the future!</h1>
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"><tbody>
<tr><td style="text-align: center;"><a href="http://upload.wikimedia.org/wikipedia/commons/2/20/8K_UHD%2C_4K_SHD%2C_FHD_and_SD.svg" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" src="http://upload.wikimedia.org/wikipedia/commons/2/20/8K_UHD%2C_4K_SHD%2C_FHD_and_SD.svg" height="217" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">From bottom left to top right, you have Standard Definition, Full <br />
High Definition, 4K Ultra High Definition, and 8K Ultra High<br />
Definition.</td></tr>
</tbody></table>
<div>
I've heard a lot about how 4K is "the next big thing", but let me ask you: What are the next few standards of resolution that come with 4K? Remember how HD had 720p, 1080i, and 1080p? Well believe it or not, there is a next set of standards call UHD (Ultra High Definition, very creative name), and they're on their way now. You can see a comparison of the resolution standards to the right. You start with standard definition in the bottom left, then you get FHD (full HD), then 4K UHD (ultra HD), and then finally 8K UHD. Yes, that's right, 4K is another middle step that TV companies are pushing very hard for some reason. Don't believe this is real? Check out <a href="http://en.wikipedia.org/wiki/Ultra-high-definition_television" target="_blank">this Wikipedia article</a> for a bit more information.</div>
<div>
<br /></div>
<h1>
Okay, but at least I'll be ready!</h1>
<div>
Not exactly. You see, when 8K UHD comes around, I'm actually kind of curious if we'll even be using the same types of TV connections to watch things on them. 8K is a totally different beast than full HD, or even 4K. The amount of data that cable companies, internet service providers, and more have to output is incredibly high, especially while maintaining a certain frame-rate on your screens. 8K is going to require a huge leap in bandwidth, and I wonder actually if we're going to need newer cables to support this. The HDMI standard has already been updated with <a href="http://www.hdmi.org/manufacturer/hdmi_2_0/" target="_blank">HDMI 2.0</a>, but only mentions 4K support, which kind of worries me personally. The chance of new cables is fairly likely, especially considering that cable companies don't even stream proper 4K to TVs yet. So all of those cables you may buy for your 4K TV could be out of date very quickly. On top of that, 4K TV prices are going to go down drastically once 8k UHD becomes standard, similar to what happened when 1080p HD originally came out. Why buy it now for such a high price when you can get it significantly cheaper in the (most likely) very near future?</div>
<div>
<br /></div>
<h1>
What Should I do?</h1>
<div>
I know this has been said about a lot of things, but just wait. <a href="http://www.engadget.com/2014/01/08/samsungs-98-inch-8k-tv-lets-us-go-to-the-mall-without-leaving-c/" target="_blank">Samsung unveiled an 8K TV at CES 2014 <b>last year</b></a>, and that's surely a good sign that 8K screens are on the way very soon. While there's still a bit more time to go, what's coming should be well worth it. 4K screens look fantastic already, and I imagine 8K screens are going to look brilliant. Once the support comes and 8K screens are the "norm", prices should once again start dropping like they did when HD TVs first came out. In fact, there are <a href="http://www.cnet.com/news/samsung-reportedly-creating-6-inch-4k-super-amoled-display/" target="_blank">rumors of phones with 4K screens</a> already, which could indicate a much quicker price drop than HD TVs had since this means they can be made more compact more quickly. Only time will tell however. What are your thoughts on UHD? Are you excited for this new standard? Leave your comments below!</div>
Anonymoushttp://www.blogger.com/profile/00651699547388699498noreply@blogger.com0tag:blogger.com,1999:blog-1055174320877560777.post-8267443909769771292015-01-16T16:18:00.001-05:002015-01-16T16:19:42.936-05:00Standing out in a World of CodeThis 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!<br />
<br />
<a name='more'></a><br />
<h1>
Just Do It</h1>
<div>
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjeAhOJQvSx6fa7dTOIEtwGn_poALUM4zOIciYCahkBj2Njw5L0KSV1mPB3paZB_ADQ6gwlciFJglocQvRohVtBXTDw4gDjmYXsPHAZ8bhLm7aLzyRSsOsm42mehb57zzQHNmEQnj0AZlnp/s1600/test.png" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjeAhOJQvSx6fa7dTOIEtwGn_poALUM4zOIciYCahkBj2Njw5L0KSV1mPB3paZB_ADQ6gwlciFJglocQvRohVtBXTDw4gDjmYXsPHAZ8bhLm7aLzyRSsOsm42mehb57zzQHNmEQnj0AZlnp/s1600/test.png" height="264" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Tons of people have messed with a Kinect before, but<br />
that doesn't make it any less a neat project to do!</td></tr>
</tbody></table>
I know this might seem a bit odd, and might not sound entirely true, but there is quite a lot of truth behind it I've learned recently: Most programmers don't code outside of their job, and if they do, they don't release what they make, or just release a small part of it. Don't do this. When you code a project, release it in full. Heck, if you can, throw the source code onto Github. I know so many people who have neat ideas, who understand the concepts, and yet they don't release any kind of code, and it really hurts them come job time. Imagine two people go in for a job interview. Candidate A has a Github account full of small projects, and one or two neat apps they made on their phone. Candidate B can talk about the concepts, and seems to know what he/she is saying, but has nothing to show for it. Who is more likely to get the job? Generally, candidate A. Why? Because even if they can't talk about it as well as candidate B, they've shown they can use those concepts in an actual project. Learning proper terminology is something anyone can learn with enough time to memorize, but actually implementing those concepts? Some people spend their whole life trying to learn it and can't, and that's the main difference. How best to show that then by just coding some simple projects. Beware however, that you should <b>NOT </b>post your homework for this. Homework is a completely separate ballgame, and does not help you to stand out. In fact, this can hinder you even more so, as it says that you lack creativity on what to make. Unless you have a new solution that is a mind-blowing way to solve your homework assignment (which you most likely don't), don't list this as a project. The only exceptions to this are senior projects, as those are generally ideas that you have created on your own.</div>
<div>
<br /></div>
<h1>
Do it Right</h1>
<div>
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; text-align: right;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgiUOiuLcnMETUas7vMZ5es6m7f3S7lN-LT2idfCVmvjWu-lxFiMduObzfPvKhb_twkNF6f_5xbFWnkbCher1lDuWITCAhMkD-YZFC49Yc22ZAOUDlNusn1En4_N8MTVGg0RvDWZuP3i0DJ/s1600/device-2014-09-05-171947.png" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgiUOiuLcnMETUas7vMZ5es6m7f3S7lN-LT2idfCVmvjWu-lxFiMduObzfPvKhb_twkNF6f_5xbFWnkbCher1lDuWITCAhMkD-YZFC49Yc22ZAOUDlNusn1En4_N8MTVGg0RvDWZuP3i0DJ/s1600/device-2014-09-05-171947.png" height="180" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">While it's easy to make a virtual reality app, making<br />
one and maintaining 60 fps is tough but necessary in<br />
the field, especially on a smartphone.</td></tr>
</tbody></table>
When you code a project, make sure that you are doing it right. Yes, you can make a game in Python, but should you? If you plan to go into game design, Python might be a good starting point, but you don't want to show a company like Nintendo a slew of Python made games, because generally that industry is not going to use it for actually making a game. Know your target industry and know what they use and why. Don't just blindly write code to write it (unless you specify this was for fun or as an experiment), and don't just write a "hello world" project and expect it to be great. You want to make sure that when you show off your projects, that you have at least one or two big shiny projects that are done correctly in order to show that you can make code that is semi-unique, not just something that works. A pong game made in Python isn't going to stand out anywhere near as much as a content management system using a <a href="http://en.wikipedia.org/wiki/LAMP_%28software_bundle%29">LAMP</a> stack.</div>
<div>
<br /></div>
<h1>
Try Something Crazy</h1>
<div>
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPrzRTT1PHiWalCw5snIKJ-CjgxEzeMFHNkhVjNAZExU5pCN5mcUJAAqt5ah_RxAbklQ1qrnY_Nc47XrXiOFD9Kr1si886awiBZT9XfBv1fpQTEKz7V__Y0Qr4ybbOEAZRhZQ1rtHZaoDl/s1600/footprint+2.png" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPrzRTT1PHiWalCw5snIKJ-CjgxEzeMFHNkhVjNAZExU5pCN5mcUJAAqt5ah_RxAbklQ1qrnY_Nc47XrXiOFD9Kr1si886awiBZT9XfBv1fpQTEKz7V__Y0Qr4ybbOEAZRhZQ1rtHZaoDl/s1600/footprint+2.png" height="240" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">While my senior project didn't hold up like I wanted, I<br />
learned a ton of valuable information about indoor<br />
GPS systems, which is something I can now talk<br />
about more as a result.</td></tr>
</tbody></table>
This is something that is going to be tough, and will surely be the hardest part on this list: Make something crazy. Have you always desired a personal quad-copter to bring you food? Then try and make it. Want to make R2-D2? Give it a shot! Notice that I'm not saying you have to finish these, but just try and make it. Even if you fail completely, you'll have gained three major things: Knowledge of what went wrong, knowledge of what went right, and the ability to talk about how something like this is easy/hard. This is a huge point. One of my favorite sayings is "Shoot for the moon, because even if you miss, you'll land among the stars", and this plays right into that. Aim big, bring a parachute, and even if you fall, you'll find yourself with a great outcome.<br />
<br />
I know a lot of this seems ridiculous, and that if it's that easy, everyone must do it, but in reality, it doesn't happen all that often. During my time at my university, I'd met very few people who did projects outside of class, and even fewer who put them online. While following these tips doesn't guarantee you a job, it definitely is a big step in the right direction, and can help get past the resume screening process. Don't rely on this to get the entire job for you, but use it as a ladder to climb with, and start from there.</div>
Anonymoushttp://www.blogger.com/profile/00651699547388699498noreply@blogger.com0tag:blogger.com,1999:blog-1055174320877560777.post-42490991678379386202015-01-08T16:13:00.000-05:002016-03-21T08:57:28.185-04:00Is C++ a Relevant Language?This has been a nagging question to me for a few years now, and is part of the reason I stopped coding as much a few years ago, only to pick it back up again over the past two years: Just how useful is it to learn a programming language like C++? No, I'm not talking about python wrappers for it, or C#, or something "similar" like Java (and no, they are <b>not </b>similar like you may think). I'm talking about low level C++, down to the metal, with just you and your compiler (IDE optionally too). Had you asked me 2 years ago, I probably would have said C++ is just for gaming. Ask me now, and I'll tell you it is still one of the most relevant languages out there. Let's go over a few things about why C++ is a big deal, and why you should learn it if you don't know it.<br />
<a name='more'></a><br />
<h1>
It Still Has the Best Performance</h1>
<div>
C++ is still one of the most efficient languages out there for anything computationally expensive (as well as memory intensive in certain cases). Whether you like it or not, python is still an interpreted language, and while the speeds might be faster now, they still will not match C++ in the end because of this fact. Java, while easier, is just too bloated to come close to winning, and while not everything in C++ is portable, it's way better than C# is generally (Sorry guys, mono is still bad, I would know, I've <a href="https://github.com/gemisis/IRC-Client">tried to use it for projects before</a>, though things like Unity can help to a degree to lessen the pain for game developers). While many languages are working on catching up (C# is now open source for example) and other languages are coming along (Go and Rust), I don't foresee them topping C++ for a while still, simply due to how long C++ has been around.</div>
<div>
<br /></div>
<div>
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMVlubaGtPnWSX284-HVWV9Sj096kgzS9aQIRZiFqMmDV-v4Qv_1QgKixXXpBigSgBaWJqC6pM2wpV-8yvgvoI0g0_A32d6XKLKQGq6h3naEHHp3Lr79MD-fztt5dWL-2rUwJg2BUvnmqs/s1600/Screenshot_2014-08-12-23-59-46.png" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMVlubaGtPnWSX284-HVWV9Sj096kgzS9aQIRZiFqMmDV-v4Qv_1QgKixXXpBigSgBaWJqC6pM2wpV-8yvgvoI0g0_A32d6XKLKQGq6h3naEHHp3Lr79MD-fztt5dWL-2rUwJg2BUvnmqs/s1600/Screenshot_2014-08-12-23-59-46.png" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Virtual reality games are a perfect example of the<br />
need for efficiency in applications.</td></tr>
</tbody></table>
While it's a pain to learn, and especially a pain to use at times, you will be able to squeeze out almost every bit of performance power that you'll need for any application out there, and with the need for code to be fast for users these days, this is very important. Applications for things like game design, server applications, and even smartphone applications to a degree, all need these massive performance gains. You will not get these speeds with something like Java. The rise of virtual reality applications as well is helping to further this, as you need to be at a consistent sixty frames-per-second on mobile devices (ninety if you are on computer) to maintain the illusion of virtual reality. While tools such as Unity and the Unreal Engine try to allow users to not need C++, there will be times where you need to make the jump, such as for applications that Unity can't handle, or implementing new features into the Unreal Engine.<br />
<br />
With many consumers switching to cloud-based applications, a large amount of servers also need to be able to do large amounts of computing. As a result, these too need the performance gains of a language like C++. Many of the major applications are still written in C++ as a result of this (Apache, a popular web server used on Linux, is still written in C). A language like Java just doesn't provide the ability to do things like provide web pages to a large amount of users all at once quickly and efficiently. Even applications like Photoshop are still written in C++, because you just can not squeeze enough power out of a language like C# or Java and do everything that Photoshop does. A quick Google search of many of your favorite programs will probably yield similar results: C++ is everywhere still because it has such a great performance.<br />
<h1>
It's a Valuable Asset</h1>
</div>
<div>
C++ is an old language, and a lot of the things it does are things that newer languages do in the background (IE: Memory management). Because of that, learning how to code in C++ can help you better understand how languages like Java and C# do memory management. This in turn means that when you use these languages, you know better what you can do to get better performance out of them. Plus, many of the things you learn in C++ can be translated to other languages still, meaning you can still learn things about more modern languages, but more in-depth.</div>
<div>
<br /></div>
<div>
On top of that, C++ is still a highly used language in the world (As indicated by its <a href="http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html?date=oct2014">TIOBE index</a>). This means that many companies are probably still using it, which would mean that companies are hiring for it. As a result, knowing C++ can increase your "market value " when looking for a job if this is true (which it probably is based on how the TIOBE index is calculated). This makes sense, especially since C++ still gets update (why update an "out of date" language). A quick Google Search for C++ jobs shows that many companies are hiring for C++ developers, so this can be very helpful when you start your job hunt.</div>
<div>
<br /></div>
<div>
In the end, I highly recommend learning C++, and coding a specific project with it as well. There are plenty of fun libraries for it still, and tons of fun things you can do with it. There are still plenty of uses for it in the real world, you just have to look for them! Feel free to leave your comments below! What are your thoughts on learning C++?</div>
Anonymoushttp://www.blogger.com/profile/00651699547388699498noreply@blogger.com0tag:blogger.com,1999:blog-1055174320877560777.post-67293357325248975782015-01-01T23:05:00.002-05:002015-01-01T23:09:50.278-05:00Launching Into 2015Man, 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!<br />
<br />
<a name='more'></a><br />
<h1>
Finished with School</h1>
<div>
...for now! Some day I would like to get my master's degree, but for now, I am going to focus on my own projects and plans for a while. I finally graduated this past December with a double major in computer engineering and computer science, and have a bit more time since I'm finished. Expect many more projects as a result of this, assuming my job doesn't take over too much! Speaking of which...<br />
<br /></div>
<h1>
A (Semi) New Job</h1>
<div>
Yep, that's right! I have officially been hired on at Swisslog, a very interesting company (in my opinion) where I hope to do some super cool stuff! Sadly I can't really talk about it all on here currently, but when I can, expect some neat articles about what I do there. I know warehouse management solutions might sound boring, but I can promise you that it's much more interesting then you'd think!</div>
<div>
<br /></div>
<h1>
3DS Projects</h1>
<div>
As some of you may know, I did my best to help out with some of the recent homebrew developments for the Nintendo 3DS! It was a load of fun, even though I didn't do a whole lot thanks to the amount of time my school took up, but rest assured that I plan to do more in 2015. I've already got three projects underway for the 3DS as of now, and hope to share more information about them soon!<br />
<br /></div>
<h1>
Twitch Stream</h1>
<div>
That's right, I will now be streaming on Twitch! Specifically, I will be talking about game development in C++! Some of you may have seen this recently, as I began testing the waters on streaming this past December. All of these videos will be on Youtube in the future, like the one below.</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.youtube.com/embed/ZJVOSCAJrAw?feature=player_embedded' frameborder='0'></iframe></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div>
You can watch me over at <a href="http://www.twitch.tv/gemisis/">www.twitch.tv/gemisis/</a> on Saturdays at 1:00pm EST (6:00pm GMT) and view the resulting videos on my <a href="https://www.youtube.com/user/geraldmcalister/">Youtube channel</a>. The first video of 2015 will be about making a simple Pong game, and the complexity will be setup for beginners to start, so tune on in if you are interested! I may also stream the development of some of my other projects too, but this will depend mainly on interest.<br />
<br /></div>
<h1>
Hardware Projects</h1>
<div>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQCtWnHk2mFqosWoFd9LmLfUaKHmM717g5wMLNLvcHhqoM3wdTJEIedE1cLcVjblj2_3uBdU5nq_HfEAacVoT_YxUAETK9OOIJB-aS8qQcgqbrw2CrBJbD3lrdKhBkYr3tE0OZy0wcAQUq/s1600/IMG_20141231_101910.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQCtWnHk2mFqosWoFd9LmLfUaKHmM717g5wMLNLvcHhqoM3wdTJEIedE1cLcVjblj2_3uBdU5nq_HfEAacVoT_YxUAETK9OOIJB-aS8qQcgqbrw2CrBJbD3lrdKhBkYr3tE0OZy0wcAQUq/s1600/IMG_20141231_101910.jpg" height="300" width="400" /></a>Now that I have a job, I am also starting to invest in some new hardware. I've recently built a brand new computer, as you can see to the right! The specifications for it are as follows:</div>
<div>
<ul>
<li>Intel Haswell i7 overclocked to 4.2 GHz</li>
<li>An NVidia GTX 970 with 4 GB of RAM</li>
<li>8 GB of RAM overclocked to 1.6 GHz</li>
<li>An Asus Z97-Pro motherboard with WiFi-AC and Bluetooth support (That's the little box on top)</li>
</ul>
<div>
While not the most powerful machine in the world, it is definitely more powerful than before! I've also started a few Arduino projects, specifically dealing with capacitive sensing for cheap! You can see a video of this below!</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.youtube.com/embed/vJtMcQfO9V4?feature=player_embedded' frameborder='0'></iframe></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div>
I plan to do more Arduino projects soon, and am contemplating doing a Youtube series on different Arduino projects. Let me know your thoughts on this in the comments below, but also expect a couple of write-ups on here about what I am up to with my Arduinos! I've also recently received a Raspberry Pi, and plan to do more projects with that too! Expect many hardware projects in 2015!<br />
<br />
<h1>
This Blog</h1>
</div>
</div>
<div>
While I didn't make my goal of 52 posts for 2014 (though I did make it over halfway at 30 posts!), I still plan on continuing this blog as I feel like this has been a pretty good success (I am now celebrating 5,000 views!). I've decided to go through and scrap a few things, as well as update it more on other topics. Specifically, I plan to talk a bit more about where I think technology is heading, projects I've worked on/am currently working on, and tutorials on how to do things in code and with hardware. Sadly, my good camera is out of commission, so the photos of the month will be on hold for now until I can get a new one (feel free to send some money to my gmail for a camera though if you like those haha), and I will be toning down the cooking posts as well (though expect a few more still). I plan to schedule time into my week to sit down and just write, so definitely expect even more posts in 2015!</div>
<div>
<br /></div>
<div>
I hope this gives everyone a bit of insight into my plans for 2015, and while there's a ton of stuff I didn't put into this post, you can definitely expect information on my other projects soon! I hope everyone has a happy New Year!</div>
Anonymoushttp://www.blogger.com/profile/00651699547388699498noreply@blogger.com0tag:blogger.com,1999:blog-1055174320877560777.post-13228885517397960442014-11-21T09:49:00.000-05:002014-11-21T09:49:53.338-05:00Setup for 3DS HomebrewWell, 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.<br />
<h1>
Setting up your 3DS</h1>
<div>
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.<br />
<br />
Once there, go to <a href="http://www.smealum.net/ninjhax/">http://www.smealum.net/ninjhax/</a> 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:<br />
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiMFBHYclPkYd4vP-VDX7udVxJFvBdSJG8U_HtuXg3Fqbm68NO42NbnhwDBPdcevXK5KNZpUQKo1C5H3AIvatm7bpPgjBnkSX4bE-VxDlhIlHpl9P1LcMN6c_azYnplzZHhcwGigrwaOMV0/s1600/ninjhax+install+screen.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiMFBHYclPkYd4vP-VDX7udVxJFvBdSJG8U_HtuXg3Fqbm68NO42NbnhwDBPdcevXK5KNZpUQKo1C5H3AIvatm7bpPgjBnkSX4bE-VxDlhIlHpl9P1LcMN6c_azYnplzZHhcwGigrwaOMV0/s1600/ninjhax+install+screen.png" height="400" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div>
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!</div>
<h1>
Running Homebrew</h1>
<div>
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 <a href="http://smealum.net/ninjhax/dl/hbmenu/boot.3dsx">homebrew launcher</a> 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.<br />
<br />
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 <a href="https://github.com/gemisis/SMDH-Creator">https://github.com/gemisis/SMDH-Creator</a> (Windows only).</div>
<div>
<br /></div>
<div>
When it comes to what you can run, please be aware that this does <b>NOT </b>run pirated games. It <b>ONLY </b>runs homebrew applications. We do <b>NOT </b>support piracy and will <b>NOT </b>be adding support in.</div>
<h1>
Deleting Homebrew</h1>
<div>
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.</div>
<h1>
Creating Homebrew</h1>
<div>
Creating homebrew is a bit trickier, and requires knowledge of C. As of right now, most of the tools are available from <a href="https://www.github.com/smealum/ctrulib">https://www.github.com/smealum/ctrulib</a>. 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.</div>
<div>
<br /></div>
<div>
I hope this all seems pretty straight forward! If you have can questions or comments, post them below! Happy homebrewing!<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLEpU9GFTu2n834et7UJRdZ_vOtmOqjB2L1jB7jE9T97rB0ZRO0IgxNQ-zeK3K5H7iN0WDsRhIYiK6XQphqtkzStQeVdGOFWr6S-nfFCBH7JYq2xw5GhyphenhyphenFlgDu34bEaC-u0X4_od_Xp_RN/s1600/homebrew+launcher+screeny.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLEpU9GFTu2n834et7UJRdZ_vOtmOqjB2L1jB7jE9T97rB0ZRO0IgxNQ-zeK3K5H7iN0WDsRhIYiK6XQphqtkzStQeVdGOFWr6S-nfFCBH7JYq2xw5GhyphenhyphenFlgDu34bEaC-u0X4_od_Xp_RN/s1600/homebrew+launcher+screeny.png" height="400" width="640" /></a></div>
<br /></div>
Anonymoushttp://www.blogger.com/profile/00651699547388699498noreply@blogger.com0tag:blogger.com,1999:blog-1055174320877560777.post-68046392754508487182014-09-02T09:42:00.002-04:002014-09-02T09:42:24.508-04:00Photos of the Month - August 2014A bit more delayed then I would have liked, but here are my favorite photos from the month of August!<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9O56LkViTHWbXB_mRpuCl2hdOltT42DnyI11QxwYrYgVsdfT3XqrOxOyLMLgC0w0cQfkVIDcg4PpK-Brq5eFJxuxIA5VI1_nzO6E869p5f7Hd9YdOIg51rFrmdYvYUCgb1LWzGFqpxEH1/s1600/IMG_20140825_142114.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9O56LkViTHWbXB_mRpuCl2hdOltT42DnyI11QxwYrYgVsdfT3XqrOxOyLMLgC0w0cQfkVIDcg4PpK-Brq5eFJxuxIA5VI1_nzO6E869p5f7Hd9YdOIg51rFrmdYvYUCgb1LWzGFqpxEH1/s1600/IMG_20140825_142114.jpg" height="480" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">A nice dinner one night! I await the inevitable criticism of my cooking though XD</td></tr>
</tbody></table>
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhx6bajwHFwmQJBjT1KmkeOUoN_lMKRD2kpKV8DSJExKihnrzqRn-YzDelkrCEDNIhkmLtcQEM8rH0B9__xRR7BOV2h5_zy7qQwFKsNP4-zNuUYjP8xsHZepxd8aRA2SYElNC1Tl0BQHix1/s1600/IMG_20140811_143156.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhx6bajwHFwmQJBjT1KmkeOUoN_lMKRD2kpKV8DSJExKihnrzqRn-YzDelkrCEDNIhkmLtcQEM8rH0B9__xRR7BOV2h5_zy7qQwFKsNP4-zNuUYjP8xsHZepxd8aRA2SYElNC1Tl0BQHix1/s1600/IMG_20140811_143156.jpg" height="480" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">An icy cold warehouse, with ice forming in the warm 85 degree weather.</td></tr>
</tbody></table>
<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxq8mm41rwSWKuB2B8sZhwUTxvK_OW-yc6d74z-oQ_bn2F_7NlKZLP-xw7Kg1h85fjnmY96I6jFAZlJUGb3pM9rsdJT3NHi3wvznTIy-45zl9dptYz4LOpPzWedgj0-PbM34fUowzPj6U8/s1600/IMG_20140811_085145.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxq8mm41rwSWKuB2B8sZhwUTxvK_OW-yc6d74z-oQ_bn2F_7NlKZLP-xw7Kg1h85fjnmY96I6jFAZlJUGb3pM9rsdJT3NHi3wvznTIy-45zl9dptYz4LOpPzWedgj0-PbM34fUowzPj6U8/s1600/IMG_20140811_085145.jpg" height="480" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">The mountains of Virginia!</td></tr>
</tbody></table>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTG4YYLRlilV4BoJnydQG9G94SzrSjxW2Dn8NqSmdT0Y3umg_5rIknanqIKo98o279KP8V3AQcNGGcnxJCo5s4t2yK6OnaD7PV-glg5XoopU6zohAaUXb3P5g7edSZRquEHh3IEd8yYBO-/s1600/IMG_20140823_135721.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTG4YYLRlilV4BoJnydQG9G94SzrSjxW2Dn8NqSmdT0Y3umg_5rIknanqIKo98o279KP8V3AQcNGGcnxJCo5s4t2yK6OnaD7PV-glg5XoopU6zohAaUXb3P5g7edSZRquEHh3IEd8yYBO-/s1600/IMG_20140823_135721.jpg" height="480" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Sadly no traveling for this picture, just a trip to Busch Gardens!</td></tr>
</tbody></table>
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!Anonymoushttp://www.blogger.com/profile/00651699547388699498noreply@blogger.com0tag:blogger.com,1999:blog-1055174320877560777.post-14312098069428960122014-08-01T22:52:00.002-04:002014-08-01T22:57:43.092-04:00Photos of the Month - July 2014The 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)!<br />
<br />
<a name='more'></a><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj8YwOQMy4KeN4DJAN5fFL5_l_NOxOoViLEMohrqlhicv1IPV5LmSrDhnye-cPwaA8c7p_OSVO8wTwnLMOb0OTghjmsbpHk9ry_sU-9ls30K2MirG5euuVBIUnZlayTU5_IpIaLA8Ljkkx8/s1600/IMG_20140721_141146.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj8YwOQMy4KeN4DJAN5fFL5_l_NOxOoViLEMohrqlhicv1IPV5LmSrDhnye-cPwaA8c7p_OSVO8wTwnLMOb0OTghjmsbpHk9ry_sU-9ls30K2MirG5euuVBIUnZlayTU5_IpIaLA8Ljkkx8/s1600/IMG_20140721_141146.jpg" height="480" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Google's campus!</td></tr>
</tbody></table>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7HakCimF5_OvLn_wlxZ-XYxICp1ssR4yJQKNPj1EKICzpXbddSQ_mvaJrjUZpjKzhXTWn5lpGGHRqx8X_KiKXeLkAjWdP7Uq9gmoIjDe3w97g5c6vgaflOCUO8Ycm-dqRXI71eOiUJsFw/s1600/IMG_20140722_162603.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7HakCimF5_OvLn_wlxZ-XYxICp1ssR4yJQKNPj1EKICzpXbddSQ_mvaJrjUZpjKzhXTWn5lpGGHRqx8X_KiKXeLkAjWdP7Uq9gmoIjDe3w97g5c6vgaflOCUO8Ycm-dqRXI71eOiUJsFw/s1600/IMG_20140722_162603.jpg" height="480" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">The sign on Apple's campus!</td></tr>
</tbody></table>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkgebAaxcMgTNuvlKIf9ZtwaSW1T5cR366DOV2Y11s5dExhL4_YjSDP7QkkoTBfQa7BIYoLs0eebZ6WNK5GiL1NVNpyxC4l6vhddiwnAd3h0J1hFapQPTBgtdkDv8iH_SaYlLO-srd3cYh/s1600/IMG_20140722_170403.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkgebAaxcMgTNuvlKIf9ZtwaSW1T5cR366DOV2Y11s5dExhL4_YjSDP7QkkoTBfQa7BIYoLs0eebZ6WNK5GiL1NVNpyxC4l6vhddiwnAd3h0J1hFapQPTBgtdkDv8iH_SaYlLO-srd3cYh/s1600/IMG_20140722_170403.jpg" height="480" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">The Intel logo outside the Intel Museum!</td></tr>
</tbody></table>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6M9jnjb2T_rrf-5gM7aC0MfyzB11kQmD5KycP1TAwVNUAUE2a3LqFvSdYepQFcWmuupBqaTqk2bFdVTNzcz-AeGXRSMTi2AP9WNm7Bf3ZEyaix0yq0NR1RWpfm5idK8dtpm5dHXcBqAle/s1600/IMG_20140721_201126-EFFECTS.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6M9jnjb2T_rrf-5gM7aC0MfyzB11kQmD5KycP1TAwVNUAUE2a3LqFvSdYepQFcWmuupBqaTqk2bFdVTNzcz-AeGXRSMTi2AP9WNm7Bf3ZEyaix0yq0NR1RWpfm5idK8dtpm5dHXcBqAle/s1600/IMG_20140721_201126-EFFECTS.jpg" height="480" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Stanford's campus!</td></tr>
</tbody></table>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHWrmG6aITpIO8nPsIa2KMc7RaAY5TDwRac8SLnJd2Hh6Xo0RnUsXxrmOEH64H-94ORBCgd2_8vYOYL79CMvUfaOqfb-clAdnJhDX8AMYQRGEVl8VEtDma4RLijYt5xueUhcYEdfNE21FL/s1600/IMG_20140721_141555.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHWrmG6aITpIO8nPsIa2KMc7RaAY5TDwRac8SLnJd2Hh6Xo0RnUsXxrmOEH64H-94ORBCgd2_8vYOYL79CMvUfaOqfb-clAdnJhDX8AMYQRGEVl8VEtDma4RLijYt5xueUhcYEdfNE21FL/s1600/IMG_20140721_141555.jpg" height="480" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Google's campus' shark fin!</td></tr>
</tbody></table>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUgbEc_8bA-gwTxBc8IinL8GBMA_rCdm_gF3mG_M8U9vjo4UE2RN_O0SdCE_IYNexFQWEfI0Cbe9QOrB-ZtjJF9dv7zPweYhYkQBAYYfvBIhhowRpy9RbVDIuYVQk1beiRkDrG6lSse8Dw/s1600/IMG_20140721_141242.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUgbEc_8bA-gwTxBc8IinL8GBMA_rCdm_gF3mG_M8U9vjo4UE2RN_O0SdCE_IYNexFQWEfI0Cbe9QOrB-ZtjJF9dv7zPweYhYkQBAYYfvBIhhowRpy9RbVDIuYVQk1beiRkDrG6lSse8Dw/s1600/IMG_20140721_141242.jpg" height="480" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">A nice area to sit on Google's campus!</td></tr>
</tbody></table>
<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9BRHtCZwb2cK0C1KosJm5fjycqO7YxQ3MV0eEy8sUTl3wB-U7pSogoKBksMj-zCG1ZT1yAGMA8LpNBeTFDBWGzZf-GDCKFTv3Kqg4Bu4Rz9Rjut2K8moRGUgBWlPlmXRodhzjCklntjrl/s1600/IMG_20140721_141042.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9BRHtCZwb2cK0C1KosJm5fjycqO7YxQ3MV0eEy8sUTl3wB-U7pSogoKBksMj-zCG1ZT1yAGMA8LpNBeTFDBWGzZf-GDCKFTv3Kqg4Bu4Rz9Rjut2K8moRGUgBWlPlmXRodhzjCklntjrl/s1600/IMG_20140721_141042.jpg" height="480" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Google's campus!</td></tr>
</tbody></table>
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiFmOF6RjXUyaQ5CuZEYPk2iimnqFEO-mARxo5h0Zn-v9ZPwwdYgVyLDAw33DMKW2y_acaa2E6IsDERRp_jK9gCY_cjoFM2DN1UZcHiIhRzWbCJVv7MMDIuPnWfhBtpqHE4-guDIuzR0QO8/s1600/IMG_20140719_210850.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiFmOF6RjXUyaQ5CuZEYPk2iimnqFEO-mARxo5h0Zn-v9ZPwwdYgVyLDAw33DMKW2y_acaa2E6IsDERRp_jK9gCY_cjoFM2DN1UZcHiIhRzWbCJVv7MMDIuPnWfhBtpqHE4-guDIuzR0QO8/s1600/IMG_20140719_210850.jpg" height="480" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Arriving at the airport in San Jose!</td></tr>
</tbody></table>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhukUjcSLcqmq-0O_dKRuVxprnhSH65VroRyhHmM_KcZZsPd5E5IPZmUrmMB62sf0XdFJ70Xk3qAX1irh6BgRlBvSErsto4wo9KrZztGYCrG6KcX4NAY3fHTpU44bVTnWxAJo190T2W3mxK/s1600/IMG_20140719_234321.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhukUjcSLcqmq-0O_dKRuVxprnhSH65VroRyhHmM_KcZZsPd5E5IPZmUrmMB62sf0XdFJ70Xk3qAX1irh6BgRlBvSErsto4wo9KrZztGYCrG6KcX4NAY3fHTpU44bVTnWxAJo190T2W3mxK/s1600/IMG_20140719_234321.jpg" height="480" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Taken right before the plane starts to prepare for landing!</td></tr>
</tbody></table>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUZl5lhNN1eDIw6tThfaNxFNIczmJF4ckH31pyskh8fkMD0NMOYti9eq78IBtGnjU7IscDHlVsgizRS6oa3dIHzNNonxShe6Zp8qMsSnSiThcl7l2rsLi72S2MPJpbxQLQnpnQIbT8tYci/s1600/20140719_154106_309.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUZl5lhNN1eDIw6tThfaNxFNIczmJF4ckH31pyskh8fkMD0NMOYti9eq78IBtGnjU7IscDHlVsgizRS6oa3dIHzNNonxShe6Zp8qMsSnSiThcl7l2rsLi72S2MPJpbxQLQnpnQIbT8tYci/s1600/20140719_154106_309.jpg" height="470" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Taken before my first plane took off from Virginia!</td></tr>
</tbody></table>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhoEWw-i5xicESelfOeUlZNBBtUdRbgzyiJGlg3zdpCFnbwsMalzS6Q5397Vd4nzNgZPzx6qAAacSRzxiz6hd0FKIfAF-N3JRO0EogaAHzn8MKSYaKUpqN3KPK-46fgFAR6lfaGapKcUOnF/s1600/IMG_20140706_152551.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhoEWw-i5xicESelfOeUlZNBBtUdRbgzyiJGlg3zdpCFnbwsMalzS6Q5397Vd4nzNgZPzx6qAAacSRzxiz6hd0FKIfAF-N3JRO0EogaAHzn8MKSYaKUpqN3KPK-46fgFAR6lfaGapKcUOnF/s1600/IMG_20140706_152551.jpg" height="480" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">A day at the beach one weekend before the trip!</td></tr>
</tbody></table>
<br />Anonymoushttp://www.blogger.com/profile/00651699547388699498noreply@blogger.com0tag:blogger.com,1999:blog-1055174320877560777.post-76127674030745774532014-07-20T16:16:00.000-04:002014-07-20T16:49:48.750-04:00Cooking up Hash TablesOriginally 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 <a href="http://steve-yegge.blogspot.com/2008/03/get-that-job-at-google.html">one of the most important data structures around</a>. So how exactly do you implement a simple hash table? Let's go ahead and explore this!<br />
<h1>
<a name='more'></a>
What is a Hash Table?</h1>
<div imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;">
<div style="text-align: center;">
<b>A normal table as an array</b></div>
<table style="border: 1px solid black; width: 320px;">
<tbody>
<tr style="border: 1px solid black;">
<td style="border: 1px solid black;">Index</td>
<td style="border: 1px solid black;">Value</td>
</tr>
<tr style="border: 1px solid black;">
<td style="border: 1px solid black;">0</td>
<td style="border: 1px solid black;">Gerald</td>
</tr>
<tr style="border: 1px solid black;">
<td style="border: 1px solid black;">1</td>
<td style="border: 1px solid black;">Jack</td>
</tr>
<tr style="border: 1px solid black;">
<td style="border: 1px solid black;">2</td>
<td style="border: 1px solid black;">Joseph</td>
</tr>
</tbody></table>
</div>
The way to think of a hash table is to think of it exactly like you would a normal table! You have a bunch of items that you want to retrieve at specific positions, and you want to do so as quickly as possibly.<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;">
<div style="text-align: center;">
<b>A hash table
</b></div>
<table style="border: 1px solid black; width: 320px;">
<tbody>
<tr style="border: 1px solid black;">
<td style="border: 1px solid black;">Key</td>
<td style="border: 1px solid black;">Value</td>
</tr>
<tr style="border: 1px solid black;">
<td style="border: 1px solid black;">Oldest Brother</td>
<td style="border: 1px solid black;">Gerald</td>
</tr>
<tr style="border: 1px solid black;">
<td style="border: 1px solid black;">Middle Brother</td>
<td style="border: 1px solid black;">Jack</td>
</tr>
<tr style="border: 1px solid black;">
<td style="border: 1px solid black;">Youngest Brother</td>
<td style="border: 1px solid black;">Joseph</td>
</tr>
</tbody></table>
</div>
The difference is that most tables you need to figure out the position, which is usually given via specific index that corresponds to a given item. A hash table however simply takes a chosen key (such as a phrase, words, or something else, rather than just a number) and returns a value associated with it! You can see the differences between these two to the right.
<br />
<br />
The key difference as you can see between the two is the introduction of a key. This key allows you to quickly access a value, rather than searching through each array index for the value, make the speed of this to be O(1) on average, with a worst case of O(n). The big thing that determines the speed is the quality of the hashing function that is used for the keys.<br />
<br />
<h1>
What is a Hash?</h1>
<div>
As you have probably noticed, the actual hash it the single most important part of creating a hash table. Without a proper hashing function, you will end up with a lot of problems with what are called collisions. Before we go into the problems with hashing, let's first talk about how you do it.</div>
<div>
<br /></div>
<div>
A very simple way to think about hashing it the idea of converting an object (either a string, class, or some other thing) into a unique integer value. Note that I said unique, so just summing the values of each character in a string wouldn't work as some strings would then have the same values. For the purpose of this tutorial, we are going to focus on hashing with strings since they are ubiquitous, simple, and still provide basic challenges. So as I said, simply summing the values of each character in a string won't cut it, but that is still a good starting point for turning the string into an integer value. So how can we help make sure that each sum is as unique as possible, without making the value random? The answer is with one of the greatest math tools around: Prime numbers.<br />
<br /></div>
<h1>
The Greatness of Prime Numbers</h1>
<div>
Prime numbers turn out to be an incredible way to generate unique numbers, while making sure that they aren't just random numbers. If you take any two prime numbers, you'll get a unique number that only has four multiples: The two prime numbers, one, and the number itself. This means that if we take each character and multiply it by a prime number before adding it to the total sum, we will increase our chance of preventing duplicate hashes. So the formula ends up looking like so:</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div imageanchor="1" style="margin-left: 1em; margin-right: 1em;">
<div style="text-align: left;">
<span imageanchor="1">
hash = prime1;
<br />
foreach(character c in key)
<br />
{
<br />
hash = (hash * prime2 * c);
<br />
}
<br /><b>
Where prime1 and prime2 are two unique prime numbers.
</b></span></div>
</div>
<div>
<br />
Now this formula is pretty nice, but there's actually still one more improvement we can make to it, and that's adding in some XOR operations. This helps to further make sure that each hash is unique, since again, the chances of XOR operations occurring the same amount of times on the same sequence of characters is very low. The modified and final version of the formula as a result ends up looking like this:<br />
<br />
<div imageanchor="1" style="margin-left: 1em; margin-right: 1em;">
<span imageanchor="1">hash = prime1;<br />foreach(character c in key)<br />{<br /> hash = (hash * prime2) ^ (prime3 * c);<br />}<br /><b>Where prime1, prime2 and prime3 are unique prime numbers.</b></span></div>
<div>
<br />
This results in a hash with very few collisions, and is generally accepted as a good way to do hashing currently for basic applications. The final thing that you will want to do is perform a modulo operation on the final hash result with the maximum number of items currently allowed in the table, to prevent an overflow from occurring.<br />
<br /><b>Edit:</b> Someone pointed out that there are better hashing functions out there, and I want to point out that yes, there are. The reason I am showing this one is because it is easier to explain, and works fairly well from the little bit of testing I have done. That said, you can find some better hashing functions (and worse ones) <a href="http://www.cse.yorku.ca/~oz/hash.html">here</a>.<br />
<br />
<h1>
Creating the Actual Hash Table</h1>
</div>
</div>
<div>
Creating the actual hash table is even easier than you'd think. The table itself can be simply an array that holds N items, and when you perform the modulo operation on your final hash, you use it with N. You can then take the resulting hash, and place the item at the array index of that hash. When you need to access the item again, simply pass the key back into the hashing function, and retrieve the item from the array with the resulting hash value.<br />
<br />
<h1>
The Problems</h1>
</div>
<div>
There are of course a few problems that still occur with these methods. The first is that while the hashing formula I mentioned above works fairly well, there will still be instances where two keys would create the same hash. There are a few different ways that this can be handled, though I won't be going over those in this blog post since that's a topic in and of itself. The other issue is that this can still only hold so many values, and when you try to insert a new value to a full table, you'll have to rebuild the whole table again with more values, while also transferring the old values. You can make this re-sizing less of an issue by simply increasing the amount of values held each time exponentially (2-4-16-256-65536-so on and so forth), which will reduce how often you will have to do this. This is also still only a O(n) operation, so is rather manageable overall.<br />
<br /></div>
<h1>
Conclusions</h1>
<div>
I hope this tutorial has helped with understanding how a hash table works. Hash tables are used all over the place, and if you want to be able to work at somewhere such as Google, you absolutely must know how to create a simple hash table. For those who are interested in seeing some example code, you can find a <a href="https://github.com/gemisis/bearded-hipster/tree/master/Hash%20Tables">simple C++ implementation over on my Github page with the code</a> (Though it does not prevent collisions between two hashes that are the same, and again, the hashing function is very simple). Maybe in a future tutorial, I can talk about how to handle collisions when they do occur. As always, feel free to leave any comments and feedback below!</div>
Anonymoushttp://www.blogger.com/profile/00651699547388699498noreply@blogger.com0tag:blogger.com,1999:blog-1055174320877560777.post-51873917432432303482014-07-11T18:21:00.000-04:002014-07-11T18:26:07.654-04:00A Shady BrowserBefore 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<a href="http://learningwebgl.com/"> http://www.learningwebgl.com/</a> as well due to laziness, so shout out to them too!<br />
<br />
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.<br />
<br />
<a name='more'></a><br />
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"><tbody>
<tr><td style="text-align: center;"><a href="http://www.geraldmcalister.com" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;">
<canvas border="0" height="300" id="webGL-Canvas" width="400">
Couldn't load WebGL stuff!
</canvas>
<script src="http://e774e5bbe9512382b9b6c22be852384d1fc5c0e4.googledrive.com/host/0ByvrBlKB3kA5Wm5TNC1rSnVYd2M/webgl-utils.js" type="text/javascript"></script>
<script src="http://e774e5bbe9512382b9b6c22be852384d1fc5c0e4.googledrive.com/host/0ByvrBlKB3kA5Wm5TNC1rSnVYd2M/glMatrix-0.9.5.min.js" type="text/javascript"></script>
<script>
var gl;
function initGL(canvas) {
try {
gl = canvas.getContext("experimental-webgl");
gl.viewportWidth = canvas.width;
gl.viewportHeight = canvas.height;
} catch (e) {
}
if (!gl) {
alert("Could not initialise WebGL, sorry :-(");
}
}
function getShader(gl, id, type) {
var shaderScript = document.getElementById(id).value;
if (!shaderScript) {
return null;
}
var str = shaderScript;
if (type == "x-shader/x-fragment") {
shader = gl.createShader(gl.FRAGMENT_SHADER);
} else if (type == "x-shader/x-vertex") {
shader = gl.createShader(gl.VERTEX_SHADER);
} else {
return null;
}
gl.shaderSource(shader, str);
gl.compileShader(shader);
if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {
alert(gl.getShaderInfoLog(shader));
return null;
}
return shader;
}
var shaderProgram;
function deleteShaders() {
gl.deleteProgram(shaderProgram);
}
function initShaders() {
var fragmentShader = getShader(gl, "shader-fs", "x-shader/x-fragment");
var vertexShader = getShader(gl, "shader-vs", "x-shader/x-vertex");
shaderProgram = gl.createProgram();
gl.attachShader(shaderProgram, vertexShader);
gl.attachShader(shaderProgram, fragmentShader);
gl.linkProgram(shaderProgram);
if (!gl.getProgramParameter(shaderProgram, gl.LINK_STATUS)) {
alert("Could not initialise shaders");
}
gl.useProgram(shaderProgram);
gl.deleteShader(fragmentShader);
gl.deleteShader(vertexShader);
shaderProgram.vertexPositionAttribute = gl.getAttribLocation(shaderProgram, "aVertexPosition");
gl.enableVertexAttribArray(shaderProgram.vertexPositionAttribute);
shaderProgram.vertexColorAttribute = gl.getAttribLocation(shaderProgram, "aVertexColor");
gl.enableVertexAttribArray(shaderProgram.vertexColorAttribute);
shaderProgram.pMatrixUniform = gl.getUniformLocation(shaderProgram, "uPMatrix");
shaderProgram.mvMatrixUniform = gl.getUniformLocation(shaderProgram, "uMVMatrix");
}
function resetShaders() {
deleteShaders();
initShaders();
}
var mvMatrix = mat4.create();
var mvMatrixStack = [];
var pMatrix = mat4.create();
function mvPushMatrix() {
var copy = mat4.create();
mat4.set(mvMatrix, copy);
mvMatrixStack.push(copy);
}
function mvPopMatrix() {
if (mvMatrixStack.length == 0) {
throw "Invalid popMatrix!";
}
mvMatrix = mvMatrixStack.pop();
}
function setMatrixUniforms() {
gl.uniformMatrix4fv(shaderProgram.pMatrixUniform, false, pMatrix);
gl.uniformMatrix4fv(shaderProgram.mvMatrixUniform, false, mvMatrix);
}
function degToRad(degrees) {
return degrees * Math.PI / 180;
}
var triangleVertexPositionBuffer;
var triangleVertexColorBuffer;
var squareVertexPositionBuffer;
var squareVertexColorBuffer;
function initBuffers() {
triangleVertexPositionBuffer = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, triangleVertexPositionBuffer);
var vertices = [
0.0, 1.0, 0.0,
-1.0, -1.0, 0.0,
1.0, -1.0, 0.0
];
gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(vertices), gl.STATIC_DRAW);
triangleVertexPositionBuffer.itemSize = 3;
triangleVertexPositionBuffer.numItems = 3;
triangleVertexColorBuffer = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, triangleVertexColorBuffer);
var colors = [
1.0, 0.0, 0.0, 1.0,
0.0, 1.0, 0.0, 1.0,
0.0, 0.0, 1.0, 1.0,
];
gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(colors), gl.STATIC_DRAW);
triangleVertexColorBuffer.itemSize = 4;
triangleVertexColorBuffer.numItems = 3;
squareVertexPositionBuffer = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, squareVertexPositionBuffer);
vertices = [
1.0, 1.0, 0.0,
-1.0, 1.0, 0.0,
1.0, -1.0, 0.0,
-1.0, -1.0, 0.0
];
gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(vertices), gl.STATIC_DRAW);
squareVertexPositionBuffer.itemSize = 3;
squareVertexPositionBuffer.numItems = 4;
squareVertexColorBuffer = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, squareVertexColorBuffer);
colors = []
for (var i=0; i < 4; i++) {
colors = colors.concat([0.5, 0.5, 1.0, 1.0]);
}
gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(colors), gl.STATIC_DRAW);
squareVertexColorBuffer.itemSize = 4;
squareVertexColorBuffer.numItems = 4;
}
var rTri = 0;
var rSquare = 0;
function drawScene() {
gl.viewport(0, 0, gl.viewportWidth, gl.viewportHeight);
gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
mat4.perspective(45, gl.viewportWidth / gl.viewportHeight, 0.1, 100.0, pMatrix);
mat4.identity(mvMatrix);
mat4.translate(mvMatrix, [-1.5, 0.0, -7.0]);
mvPushMatrix();
mat4.rotate(mvMatrix, degToRad(rTri), [0, 1, 0]);
gl.bindBuffer(gl.ARRAY_BUFFER, triangleVertexPositionBuffer);
gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute, triangleVertexPositionBuffer.itemSize, gl.FLOAT, false, 0, 0);
gl.bindBuffer(gl.ARRAY_BUFFER, triangleVertexColorBuffer);
gl.vertexAttribPointer(shaderProgram.vertexColorAttribute, triangleVertexColorBuffer.itemSize, gl.FLOAT, false, 0, 0);
setMatrixUniforms();
gl.drawArrays(gl.TRIANGLES, 0, triangleVertexPositionBuffer.numItems);
mvPopMatrix();
mat4.translate(mvMatrix, [3.0, 0.0, 0.0]);
mvPushMatrix();
mat4.rotate(mvMatrix, degToRad(rSquare), [1, 0, 0]);
gl.bindBuffer(gl.ARRAY_BUFFER, squareVertexPositionBuffer);
gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute, squareVertexPositionBuffer.itemSize, gl.FLOAT, false, 0, 0);
gl.bindBuffer(gl.ARRAY_BUFFER, squareVertexColorBuffer);
gl.vertexAttribPointer(shaderProgram.vertexColorAttribute, squareVertexColorBuffer.itemSize, gl.FLOAT, false, 0, 0);
setMatrixUniforms();
gl.drawArrays(gl.TRIANGLE_STRIP, 0, squareVertexPositionBuffer.numItems);
mvPopMatrix();
}
var lastTime = 0;
function animate() {
var timeNow = new Date().getTime();
if (lastTime != 0) {
var elapsed = timeNow - lastTime;
rTri += (90 * elapsed) / 1000.0;
rSquare += (75 * elapsed) / 1000.0;
}
lastTime = timeNow;
}
function tick() {
requestAnimFrame(tick);
drawScene();
animate();
}
function initWebGL()
{
var canvas = document.getElementById("webGL-Canvas");
initGL(canvas);
initShaders()
initBuffers();
gl.clearColor(0.0, 0.0, 0.0, 1.0);
gl.enable(gl.DEPTH_TEST);
tick();
}
</script>
</a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><i>A sample WebGL program. The shader code is below!</i></td></tr>
</tbody></table>
Unfortunately, showing them on this blog properly proved to be a bit of a challenge. I wanted a way to demonstrate their full capabilities and let readers explore them and how they can change things and mess with them, but wanted to get rid of having to copy and paste the code into their own programs. Obviously, an animated GIF of the shader effects would not work because they would then just be static, but just posting code is also very boring.<br />
<br />
Thus I believe I have come up with a rather neat solution: Add a WebGL object using HTML5 that allows you to edit shaders on a webpage in real time, and then view those changes directly on a WebGL canvas. This means you can write entirely new code for a shader, and then with the click of a button watch it appear on a web page.<br />
<br />
This also means I can just type out the code for a shader for a blog post, and then you, the reader, can change it and see what happens. No need to code up a new project, no copying and pasting of my code, just a simple shader rewrite on the post! As a quick example, here is the shader code for the WebGL application above:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<span imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;">
<textarea cols="28" id="shader-fs" rows="4" style="height: 149px; margin: 2px; width: 287px;" wrap="off"> precision mediump float;
varying vec4 vColor;
void main(void) {
gl_FragColor = vec4(1, 0, 0, 1);
}
</textarea>
</span></div>
<button onclick="resetShaders();" type="button">Submit</button>
<span imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;">
<textarea cols="28" id="shader-vs" rows="4" style="height: 143px; margin-bottom: 2px; margin-top: 2px;" wrap="off"> attribute vec3 aVertexPosition;
attribute vec4 aVertexColor;
uniform mat4 uMVMatrix;
uniform mat4 uPMatrix;
varying vec4 vColor;
void main(void) {
gl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition, 1.0);
vColor = aVertexColor;
}
</textarea>
<script>
initWebGL();
</script>
</span>
<a href="https://www.blogger.com/null" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;">
</a>
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
Pretty straight forward, it simply renders the shapes above and doesn't really do anything special. But, with a few tweaks to it, and then clicking the submit button between them, you can change what the WebGL application above is displaying. I personally think this is really neat, and extremely useful for messing with shaders, without having to create entire new programs each time! As a quick example, try changing the fragment colors from red to blue ("vec4(1, 0, 0, 1)" to "vec4(0, 0, 1, 1)"). Pretty easy right? Since this is pretty simple to setup, I think I may do a few new tutorials on GLSL in the future. I'm planning to add the sample code for my previous tutorial on a <a href="http://gemisis.blogspot.com/2014/07/fading-with-shaders.html">simple fade effect with shaders</a> too, but haven't had time to do so yet. Feel free to leave any comments and feedback about this below!Anonymoushttp://www.blogger.com/profile/00651699547388699498noreply@blogger.com0tag:blogger.com,1999:blog-1055174320877560777.post-19294680566062567672014-07-09T17:11:00.000-04:002014-07-11T18:17:44.688-04:00Fading with ShadersThis 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!<br />
<br />
<a name='more'></a><br />
<h1>
The Problem</h1>
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiT1Gsk9lgLxoiDqSczvOiD9BkRQpwk121jGezb9e26wfEIFUEOWCk0wgOg0baYQTNafq1qa8BF6s5bVPAtMoZmQdX2vObOtjom1mC_0Mwyb5KFXTQZoShmQH5kxsqgufS5GLitC0Vng4TU/s1600/cardboard+library+sample.png" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiT1Gsk9lgLxoiDqSczvOiD9BkRQpwk121jGezb9e26wfEIFUEOWCk0wgOg0baYQTNafq1qa8BF6s5bVPAtMoZmQdX2vObOtjom1mC_0Mwyb5KFXTQZoShmQH5kxsqgufS5GLitC0Vng4TU/s1600/cardboard+library+sample.png" height="225" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><i>While not the game I am working on, still a neat example of<br />all the cool things shaders can create.</i></td></tr>
</tbody></table>
In a recent game I've been working on, I needed to do a quick fade-in and fade-out effect in various parts of the game. The problem is that I didn't have a ton of resources to work with to do so on the hardware. My original thought was to simply draw a quad on top of everything, and then fade it in and out by editing the individual pixels transparencies. Then I remembered I had shaders available, and thought about drawing the quad on top of everything, and fading it out with a shader. This would have worked very well, except again, I was working with limited resources, specifically a limited amount of memory. Drawing a whole extra quad was a whole extra object I would then have to manage, and it was also more things in memory as a result. Then, I thought of another idea.<br />
<br />
<h1>
The Solution</h1>
<div>
Instead of drawing a quad on top of everything to fake this fading effect, why don't I just actually fade everything? I could simply add a uniform transparency value to the shader file, and then set that for every object once and it would fade each object equally! The results were astounding, because I could also change the color by just changing the screen's clear color glClearColor. Suddenly I could fade out to any color, without any extra resources being needed outside of that one uniform value!<br />
<br /></div>
<div>
<h1>
The Issues</h1>
</div>
<div>
While this method is pretty good with reducing memory usage, and also is a lot easier to implement, it does have its downsides. Because you are multiplying the alpha values for each object, you are technically using more clock cycles with the multiplication of each fragment. This means you'll want to be cautious if you want everything processed in a timely manor. Luckily I did not run into that issue in this case, but that's a big thing to keep in mind.<br />
<br />
<h1>
Conclusion</h1>
While I'm sure this is nothing revolutionary, I still thought it was worth sharing and hope it is of use to someone out there. Feel free to leave any comments or other suggestions below!</div>
Anonymoushttp://www.blogger.com/profile/00651699547388699498noreply@blogger.com0tag:blogger.com,1999:blog-1055174320877560777.post-68927950548998579642014-07-01T20:03:00.000-04:002014-07-11T18:20:38.462-04:00Photos of the Month - June 2014With June finally over, it's time for some new photos of the month! While not as high of quality as last months, I still found these to be quite good!<br />
<br />
<a name='more'></a><br />
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: left;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEguwKH3nyWRGBtlEvSiOSDIqFhZIPg4tKYJ5tIKjpoSjV74_IZ3iXO43ltX4mklCdchFgKkwh6pkdq5kvd-vSQsCVeuMJc70m6nEL2ht9oKOTnCl31D-Qkpqu92wPhO2vND0r8CS89lq04S/s1600/20140604_175116_149.jpg" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEguwKH3nyWRGBtlEvSiOSDIqFhZIPg4tKYJ5tIKjpoSjV74_IZ3iXO43ltX4mklCdchFgKkwh6pkdq5kvd-vSQsCVeuMJc70m6nEL2ht9oKOTnCl31D-Qkpqu92wPhO2vND0r8CS89lq04S/s1600/20140604_175116_149.jpg" height="470" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">T800 - What I thought was a neat photo taken with a Google Glass. It came out looking like a Terminator.</td></tr>
</tbody></table>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhIkfTcJg8FsIgTUMmQ_3XlEn7rdm9rjIQtgUVg4i1Cmve_nZd-sD9rC5hMTvIwJA7TngO_WO1hwDJE3L6dBHP8fnnzQsG4xKcFOKWOcWSqPJnw4WqcqvEfihh4hQch7ihwSRRh7gwNG6Jq/s1600/IMG_20140620_095616.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhIkfTcJg8FsIgTUMmQ_3XlEn7rdm9rjIQtgUVg4i1Cmve_nZd-sD9rC5hMTvIwJA7TngO_WO1hwDJE3L6dBHP8fnnzQsG4xKcFOKWOcWSqPJnw4WqcqvEfihh4hQch7ihwSRRh7gwNG6Jq/s1600/IMG_20140620_095616.jpg" height="480" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Prepare to Launch - Getting ready for our flight at SUAS 2014!</td></tr>
</tbody></table>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjnv5HzFLI3CrKTlTGMVlV9DNHSz8m3N5Ztrxr9kC-stEH-jl_6MNXJGbpPKJbuUCX7A_o5Wq2-IclVwZ7z2V7fmpZ9tfSQ9qINMKr0mFXs_O_45nIui4WniYbP-xA2D0oDEFUAP49QmfSv/s1600/IMG_20140620_094835.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjnv5HzFLI3CrKTlTGMVlV9DNHSz8m3N5Ztrxr9kC-stEH-jl_6MNXJGbpPKJbuUCX7A_o5Wq2-IclVwZ7z2V7fmpZ9tfSQ9qINMKr0mFXs_O_45nIui4WniYbP-xA2D0oDEFUAP49QmfSv/s1600/IMG_20140620_094835.jpg" height="480" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Ready to Go - A portrait before the plane launch!</td></tr>
</tbody></table>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjuYTRft7Tq1M3XbvGpSYT8-7T-z1ek8PGxhFL9lLMe8LBVDueELSfV7unlvPH8opKDSba6ox64BCY0zYR0OwIAInlyCrA8mJjCA-kVjzm1_kUBuhuu1fW0cLpt7D72tw7DYlYOussaEA9G/s1600/IMG_20140620_091851.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjuYTRft7Tq1M3XbvGpSYT8-7T-z1ek8PGxhFL9lLMe8LBVDueELSfV7unlvPH8opKDSba6ox64BCY0zYR0OwIAInlyCrA8mJjCA-kVjzm1_kUBuhuu1fW0cLpt7D72tw7DYlYOussaEA9G/s1600/IMG_20140620_091851.jpg" height="480" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Guts of a UAS - The inner parts of our Unmanned Aerial System.</td></tr>
</tbody></table>
<br />
While there are not as many photos, I feel like these capture a good portion of how I've spent my time this month especially. As always, feel free to leave your feedback and comments below!Anonymoushttp://www.blogger.com/profile/00651699547388699498noreply@blogger.com0tag:blogger.com,1999:blog-1055174320877560777.post-24537426240570269942014-06-26T22:10:00.001-04:002014-06-26T22:10:10.166-04:00Google Cardboard - A Perfect Start for Virtual RealityMan, 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.<br />
<br />
<a name='more'></a><br />
<h1>
The Screen Resolution</h1>
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; text-align: right;"><tbody>
<tr><td style="text-align: center;"><a href="https://gweb-cardboard.appspot.com/img/seq/68.jpg" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><i><img border="0" height="177" src="https://gweb-cardboard.appspot.com/img/seq/68.jpg" width="320" /></i></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><i>Much simple. Very free. Wow.</i></td></tr>
</tbody></table>
<div>
This is a huge leap from what both Oculus Rift and Control-VR offer, and is a much bigger deal than I think people realize. The screen resolution is already as high as the second Oculus Rift development kit (1080p split between two eyes), and with a better phone, you have a better screen resolution (I'm looking at you LG G3). This means that the screen door effect will be mostly gone a lot more quickly than it will with other headsets (Unless there are major hardware changes soon). There isn't much more to say about that other than that it's already better in terms of screen resolution by what could potentially be a large margin, and that end users can easily upgrade the hardware with new phones they will inevitably get.<br />
<br />
<h1>
Cost and Portability</h1>
</div>
<div>
It's a piece of card board that folds up and a phone that fits into your pocket. No special hardware, no heavy desktop, not even a laptop, nothing. Just pull out your phone, unfold your cardboard, and you have virtual reality ready to go. Both the lenses and the magnet could stay in the cardboard while it's folded potentially, meaning you don't need anything extra. The portability available with this is mind-boggling to me, especially since it's so simple.<br />
<br />
Another factor though is the cost, which is yet again mind-boggling low. The lenses are the most expensive, at $25 depending on the kind you get. This means you can make one for under $50! The Oculus Rift's current iteration is $350 for comparison. This is a huge point, as it makes VR much more accessible to everyone. On top of that, you can go out to your local hardware store and make one right now, no waiting for the pre-order to come. This means that if you develop for it too, you'll have a much wider audience too. This of course does still come under the pretense that your users have Android phones, but that's still not a bad deal, and a much bigger audience then what the Oculus Rift has currently.<br />
<br /></div>
<h1>
</h1>
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; text-align: right;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEip475hvzciYNSI79DSuchezZT1UaDEfTt1woZbL2tRJO0i5xNj_60bDVJuZiP3Yg047_wUQJ_RzidnVVWxmyMx8N-TbsBdM4xJX7YWecqGABcGTsGTPPNNjpl6cg9T4stFT29724ddAPgU/s1600/Screenshot_2014-06-25-22-01-39.png" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><i><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEip475hvzciYNSI79DSuchezZT1UaDEfTt1woZbL2tRJO0i5xNj_60bDVJuZiP3Yg047_wUQJ_RzidnVVWxmyMx8N-TbsBdM4xJX7YWecqGABcGTsGTPPNNjpl6cg9T4stFT29724ddAPgU/s1600/Screenshot_2014-06-25-22-01-39.png" height="225" width="400" /></i></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><i>While basic, you can already see some pretty effects in this small demo.</i><br />
<i>Imagine what other developers could do! Demo by Google, NOT ME!</i></td></tr>
</tbody></table>
<h1>
The Power</h1>
<div>
This is the part that excites me the most. Because Google writes the operating system for this hardware effectively, they can add in a better rendering solution than just outputting everything twice to the screen, down at the OS level. This means that a 60 frames-per-second game is now feasibly for virtual reality. What makes this even better though is that it is on a portable device, which means no lag from a wireless or wired connection either. Essentially, your phone becomes a virtual reality game system, and with things like Project Tango coming out, you could potentially get a device that is fully aware of where you are exactly, allowing you to walk around with this on, and still maintain control in-game. For those who don't know what Project Tango is, Project Tango is a new type of smartphone and tablet hardware Google is working on that is aware of where it is in 3D space and can map out 3D spaces too. Essentially, it is the equivalent of having a Kinect that you can carry around with you at all times, and yet it is even more powerful than a Kinect. <b>This means it could potentially solve a good portion of the controls issue I mentioned in my previous post, without extra hardware.</b> Palpatine would be proud.<br />
<br />
<h1>
End Thoughts</h1>
While this of course still has some of the similar issues to other virtual reality devices such as how to deal with hands and such, I feel like this is a much bigger leap forward than what other technologies have shown. Google came out of nowhere with this today, and it really has the potential to shake up virtual reality as we know it right now, especially with the price point that it poses. I'm currently in the process of making my own now, and when I have it finished, I'll probably do another post about it, as well as making a few games for it. Until then, feel free to leave your comments below!</div>
Anonymoushttp://www.blogger.com/profile/00651699547388699498noreply@blogger.com0tag:blogger.com,1999:blog-1055174320877560777.post-67139088377297691122014-06-24T22:15:00.001-04:002014-06-25T22:28:41.421-04:00The Current World of Virtual RealityFor 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!<br />
<a name='more'></a><br />
<h1>
Stereoscopic 3D</h1>
<div>
Stereoscopic displays are an interesting technology. While they've been around for quite a number of years, they are still relatively primitive and simplistic in how they work, and many people prefer not to use them in things such as 3D TVs, or game systems. The Oculus Rift is a key component to virtual reality right now though, and makes heavy use of this technology. The Oculus Rift however, displays 3D images differently from how most current stereoscopic displays do so, such as the Nintendo 3DS. As a result, it has effectively created a second way to display 3D images to users.<br />
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPcNKBWMiRoIUMBT_u93Drx3MsV5P_8o2J1lIlu5IBjBKXUj1mitAvJhAJUxwpTjg1wctnEhdONAHRZSgUDWVkC64FOVWZKPiwgitKkz6UXuMLN2jK8t7zypbkCRZh0BkyxzwmFcdi6zeD/s1600/holodeck.png" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPcNKBWMiRoIUMBT_u93Drx3MsV5P_8o2J1lIlu5IBjBKXUj1mitAvJhAJUxwpTjg1wctnEhdONAHRZSgUDWVkC64FOVWZKPiwgitKkz6UXuMLN2jK8t7zypbkCRZh0BkyxzwmFcdi6zeD/s1600/holodeck.png" height="200" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Notice how the left eye can see more of the soccer ball<br />
in the top left-hand corner than the right eye.</td></tr>
</tbody></table>
</div>
<div>
<br /></div>
<div>
The first method that is often used to display 3D images was through two viewing points and showing images to each eye through a single display. What I mean by this, is that each eye is projected a completely different image, at a incredibly fast rate to which you do not notice. This is why when you buy a 3D TV, you'll want to make sure that it has a very high refresh rate, because if it is too low, there will be a lot of lag with what you see to each eye. The Nintendo 3DS also uses this technology, and simply projects these images almost directly into your eyes. This is obviously pretty simple to render with as a programmer, as all you have to do is render to two separate buffers, one for the left eye and one for the right eye.</div>
<div>
<br /></div>
<div>
The second method of rendering 3D images is how the Oculus Rift does it, in which your eyes see half of a single screen. This is usually coupled with 3D lenses, in order to further separate each eye into it's own viewing "world". However, this causes complications from the programming side, as you have to warp each viewing area to match these lenses.</div>
<div>
<br /></div>
<div>
Both of these methods pose a variety of other challenges too. In both, you'll have to render your entire scene twice, bringing a game like Call of Duty down to half of its normal frame-rate, and at different viewing points for each eye. You also have to make sure that you find proper ways to combat motion sickness, as this is very prevalent with both of these technologies. Separate graphics cards could help to speed things up, but due to costs, this could also still be tough for end-users. At this point in time, I believe that these are still very early iterations, and that improvements can be made on them to make their experiences even smoother in the future.<br />
<br /></div>
<h1>
Controls</h1>
<div>
This is a huge issue that I have seen, and have yet to find a proper solution to. Many games rely on controllers, simply due to how big the worlds you move around in are. While the Microsoft Kinect can provide a more immersive experience, it limits how much you can move around, and can often limit the game-play elements as a result. A normal game controller or keyboard/mouse combo also provides challenges though, as users cannot see their devices with a headset on. Keyboards are especially bad in this aspect, making controllers a must-have, even for developers to test with.</div>
<div>
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; text-align: right;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpQbF7v_OzUcJnjUty6R9uuERZ3NZShRPVoblkfe5s23HSdz9EaTp0Dx2UTRAZRmGBU2dJ5dJhioUusw9M1okl668XEwzbb328IrcOifnzaoI1UUjPbEgkqIArmNC3CHPUUIxhwXYVM5Z3/s1600/kinect.jpg" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpQbF7v_OzUcJnjUty6R9uuERZ3NZShRPVoblkfe5s23HSdz9EaTp0Dx2UTRAZRmGBU2dJ5dJhioUusw9M1okl668XEwzbb328IrcOifnzaoI1UUjPbEgkqIArmNC3CHPUUIxhwXYVM5Z3/s1600/kinect.jpg" height="240" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">The Microsoft Kinect for Windows can really help<br />
VR better</td></tr>
</tbody></table>
<br /></div>
<div>
I think that this issue is largely unfocused on, and should really have more attention to it. As of now, much of virtual reality is focused on the displays, which while important, is only a piece of the puzzle. Without a better method of controlling the applications that use it, this will become yet another 3D TV fad, simply because it does not add enough value with just a new display.</div>
<div>
<br /></div>
<div>
One of the ways I experimented with this was mainly with the Microsoft Kinect for Windows V1. While there is a bit of lag with the system still, it will obviously get better as the technology gets better. While things like the Hydra controllers are neat, they still do not provide the right level of immersion in my personal opinion, which the Kinect can provide. The Kinect also seemed to reduce motion sickness, probably due to the fact that the user is now moving around with their character, instead of staying in place.<br />
<br />
<b>Edit:</b> I've had a comment or two about the Virtuix Omni and how it solves this issue of controls, and so I thought I'd clarify a few things about it. I personally am not a fan of the Omni, but that aside, I do think it solves the partial issue of walking around in a world. While it doesn't allow for crawling, you probably won't want to do that with a headset like the Oculus Rift on, and so it's fine that you can't.<br />
<br />
That being said, it's a $500 device, that still has the problem of controls, because it only tracks walking. You still need your hands, feet, etc. to be able to do actions, and your feet specifically will not be usable with the Omni. Unfortunately, kicking, holding your foot forward, etc. are not possibly with it, and it does not include a way to track anything other than your steps. I feel like this is not worth $500 at all, which is part of why I did not address it originally.<br />
<br />
While it is a neat idea, I do not feel like the Omni fulfills the complexity needed for a proper virtual reality control system. Combined with other technologies, you can make it better, but the costs will add up too quickly for the Omni to be a proper solution, especially since it cannot do so on its own.<br />
<br /></div>
<h1>
Content</h1>
<div>
This partially ties in with controls, but I still think it deserves its own category. Many of the games that are using the Oculus Rift and Kinect are currently just 3D adaptions of existing games that do not require 3D. Yes, I know, there are a few games that may be exceptions, but aside from those, most games can be played without this new technology. That needs to change, as again, why would people use this new technology if they do not need it? Wearing a Rift is going to be strenuous due to it's weight, and the Microsoft Kinect limits what you can do with many of these games. This means users would lose more than if they just didn't use the technology.</div>
<div>
<br /></div>
<div>
New experiences need to be built on these technologies, not vice-versa, and I think the best way to do so is through entirely new content. This means less first-person shooters, which unfortunately is a huge part of the gaming market currently. Even RPGs need to be reworked majorly due to how they currently work, because again, who is honestly going to spend $350 for a fancy monitor, that tires you as you play your favorite games? I know I won't be.</div>
<div>
<br /></div>
<div>
That being said, I think there is hope. I've looked around at some potential games, and while I haven't made any, this is more due to the limitations of my artistic capabilities. One game style I'd love to see is point-and-click adventures through virtual reality. I feel like this technology has the potential to help those games make a huge comeback, as it would really provide a new way to experience them. Another game genre that could be cool are puzzle games, specifically those involving heavy physics. The level of immersion possible with virtual reality makes it loads of fun to explore different types of physics interactions, especially those not possible in the real world (like random floating orbs and such).<br />
<br /></div>
<h1>
Final Thoughts</h1>
<div>
I've had loads of fun messing around with this tech, and seeing what exactly you can do with it all. While there are many challenges ahead, I think it will be interesting to see what happens and who can fund further development on it. While I am skeptical of the Facebook buyout for Oculus VR, I think that ultimately this may be a good thing for both parties. I plan to do small improvements to Project Virtua for those who want a C++ library with no extra hand-holding, but development will be a bit slower unless interest suddenly jumps up. I'm also planning on making some VR games, and exploring some other technologies too. As for what exactly I'm planning to work on next, I guess you'll have to wait and see ;)</div>
<div>
<br /></div>
<div>
Feel free to leave your thoughts in the comments below! If you have something else for me to look into with VR, feel free to let me know!</div>
Anonymoushttp://www.blogger.com/profile/00651699547388699498noreply@blogger.com0tag:blogger.com,1999:blog-1055174320877560777.post-20317379199695277422014-06-13T18:40:00.000-04:002014-07-11T18:21:01.948-04:00Photos of the Month - May 2014Phew, 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)<br />
<br />
<a name='more'></a><br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjFyG1TdL9vNlo_HXUT5Gu_v15XNx6ZFDaA9Vw_naM-YhB4piUhVupCgDGfoxUj0JywgP3Vflk0Xf1MM543DBGQNnhUse1P6ItyLgEPD7tuduy1QfRktQ10-twB99JNa80m03KxPb4TwBel/s1600/IMG_0816.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjFyG1TdL9vNlo_HXUT5Gu_v15XNx6ZFDaA9Vw_naM-YhB4piUhVupCgDGfoxUj0JywgP3Vflk0Xf1MM543DBGQNnhUse1P6ItyLgEPD7tuduy1QfRktQ10-twB99JNa80m03KxPb4TwBel/s1600/IMG_0816.jpg" height="425" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><b>A Touch of Pink</b> - A young Mandalorian waves to the crowd!</td></tr>
</tbody></table>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEilx4wfWAzm1SAj6riKe_fWYenQtmQcxoY9AzxO1rhyphenhyphenJMbmVlOysMHdatQ42QZY5Pn2PdUiPdRdfkrFTSuNdYTKIrpzFgPUVMCSs86L5DYXpBsh-GiEZV53Sm_BFl1wg0uRFKMr0P8Imm-i/s1600/IMG_0823.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEilx4wfWAzm1SAj6riKe_fWYenQtmQcxoY9AzxO1rhyphenhyphenJMbmVlOysMHdatQ42QZY5Pn2PdUiPdRdfkrFTSuNdYTKIrpzFgPUVMCSs86L5DYXpBsh-GiEZV53Sm_BFl1wg0uRFKMr0P8Imm-i/s1600/IMG_0823.jpg" height="426" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><b>We Want You to Join the Empire!</b> - An imperial officer wants you to join the empire in<br />
its conquest across the galaxy!</td></tr>
</tbody></table>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhV-omjDN3KY_iDLKLhzoKP2a6Ec7k2-iqm1QVYaPnp5lZ4CsG3JdXn0i_AExEvbcJ_LAPG4vX-Iv5TbUcJ1QACN-H05JMWyIDuLEVw_vlo1C651kfm3-_OLwdJHsuK_B5g6Fd1nOu9X8tM/s1600/IMG_0833.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhV-omjDN3KY_iDLKLhzoKP2a6Ec7k2-iqm1QVYaPnp5lZ4CsG3JdXn0i_AExEvbcJ_LAPG4vX-Iv5TbUcJ1QACN-H05JMWyIDuLEVw_vlo1C651kfm3-_OLwdJHsuK_B5g6Fd1nOu9X8tM/s1600/IMG_0833.jpg" height="426" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><b>There Can Only be Two</b> - Two Mandalorian warriors wave to the crowd during the parade!</td></tr>
</tbody></table>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBj1Xgt8YQ5LwN_m6tMOQ9jcpnxbPHbDvFnv4756A2vGp3g1TZioXa7htH6bD_AK3T8ROcz_JGtnN7d4Kb5pt22uZMLR16VQo-yEKoAU_6x-9wR5MHAZobesxjC7gP3Fo86PP8LFRnN9_a/s1600/IMG_0918.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBj1Xgt8YQ5LwN_m6tMOQ9jcpnxbPHbDvFnv4756A2vGp3g1TZioXa7htH6bD_AK3T8ROcz_JGtnN7d4Kb5pt22uZMLR16VQo-yEKoAU_6x-9wR5MHAZobesxjC7gP3Fo86PP8LFRnN9_a/s1600/IMG_0918.jpg" height="426" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><b>Barrels of Fun</b> - A small train made of what seem to be old barrel drums!</td></tr>
</tbody></table>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjw6tNqW4cdO51T35UXyAoJAqLnvuc21yE9zuAXrKnvo_I3ZlZjSHEvLq1vWdNyEH4mhfPSpPah0-SsZwwYVxJ3PToCNA77ABuDn0iClQqcFuPoeTX-HeW47NdWabD7z56oKC78cxX8EWgG/s1600/IMG_0940.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjw6tNqW4cdO51T35UXyAoJAqLnvuc21yE9zuAXrKnvo_I3ZlZjSHEvLq1vWdNyEH4mhfPSpPah0-SsZwwYVxJ3PToCNA77ABuDn0iClQqcFuPoeTX-HeW47NdWabD7z56oKC78cxX8EWgG/s1600/IMG_0940.jpg" height="426" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><b>Talent Like No Other</b> - A very talented man plays a trumpet while spinning a rope around himself while on a<br />
unicycle in motion.</td></tr>
</tbody></table>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiOd-oapSWwNy2RzaY8g_kOTfXjBltANqzWwTjL7uOgqtxRXxiFlJezUJp4blKp5UY2PAFOivy0fY7CjoFHcgF50M_SK2grfLNXicmTadVccw-t-aokj_dMqCFjLosS_MQAZrPBG8tMRXgy/s1600/IMG_1146.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiOd-oapSWwNy2RzaY8g_kOTfXjBltANqzWwTjL7uOgqtxRXxiFlJezUJp4blKp5UY2PAFOivy0fY7CjoFHcgF50M_SK2grfLNXicmTadVccw-t-aokj_dMqCFjLosS_MQAZrPBG8tMRXgy/s1600/IMG_1146.jpg" height="426" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><b>Creatures of the Unknown</b> - A set of creatures for sale during the Virginia Beach Strawberry festival!</td></tr>
</tbody></table>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggrfsYPMfBxcufhzChn0R-pDCxvXQaeS5ibniwHtC8wv_4yedrJQqWmpLk0CNR5H9iFen2_eVklFJX63r1Lle0WjBpruiwsF0ydR0Dtb8sNRMgqRCa-Eys2lhhNKbDr1VC8p_dJvvK5olt/s1600/IMG_1175.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggrfsYPMfBxcufhzChn0R-pDCxvXQaeS5ibniwHtC8wv_4yedrJQqWmpLk0CNR5H9iFen2_eVklFJX63r1Lle0WjBpruiwsF0ydR0Dtb8sNRMgqRCa-Eys2lhhNKbDr1VC8p_dJvvK5olt/s1600/IMG_1175.jpg" height="426" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><b>The Joy of Bubbles</b> - A small kid plays with bubbles from a nearby carnival.</td></tr>
</tbody></table>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjiBE66KpIsL945-lxixm5ueOYHJg0zSEZYaxkHT2ii7K1FJVVyKsXWJkLoZqFdLctpbNvokpLZQMcRIP8CxxqUZ2ZxTZR3JYU7P37xciWjKqYVXfQz-zkh6khuTyNJkg3RmZHKyyQkOaAn/s1600/IMG_1196.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjiBE66KpIsL945-lxixm5ueOYHJg0zSEZYaxkHT2ii7K1FJVVyKsXWJkLoZqFdLctpbNvokpLZQMcRIP8CxxqUZ2ZxTZR3JYU7P37xciWjKqYVXfQz-zkh6khuTyNJkg3RmZHKyyQkOaAn/s1600/IMG_1196.jpg" height="426" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><b>The Unobtainable</b> - Named after my awful failed attempts to win my wonderful girlfriend a Minion.</td></tr>
</tbody></table>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEijXeR8W6LpcgjlhwNhK5Yh56ez1i3Gp3k-mo-ye_4rMDCQ_hDKloP1T6j9p0kgZ1fA14Rxw8yxz2vLGdACWiOwkrUGO2fN_XpAhDdB9TtHlRJ0B8r85KvrVVGx077DcA0skQ1cXj_pDpLR/s1600/01DNG.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEijXeR8W6LpcgjlhwNhK5Yh56ez1i3Gp3k-mo-ye_4rMDCQ_hDKloP1T6j9p0kgZ1fA14Rxw8yxz2vLGdACWiOwkrUGO2fN_XpAhDdB9TtHlRJ0B8r85KvrVVGx077DcA0skQ1cXj_pDpLR/s1600/01DNG.jpg" height="426" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><b>The end to a Great Day</b> - One of my first photos taken during my digital photography class.</td></tr>
</tbody></table>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWq3GTL5cPjFKFzYPqzKtdwxvYE6jjmtjFlde-RFHh67dm7CwDgrAEDf8uP9ShXtj0S2ju1gAnJ8z2JmgeqAudoVdPUG3IGRB7aXM_nECM6Llb4xM8n4z6DMEz7M1qVlUtjr1aI6CAWsTx/s1600/1_DNG.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWq3GTL5cPjFKFzYPqzKtdwxvYE6jjmtjFlde-RFHh67dm7CwDgrAEDf8uP9ShXtj0S2ju1gAnJ8z2JmgeqAudoVdPUG3IGRB7aXM_nECM6Llb4xM8n4z6DMEz7M1qVlUtjr1aI6CAWsTx/s1600/1_DNG.jpg" height="426" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><b>Night Life of a Captain</b> - Taken while facing Christopher Newport University's campus at night<br />
as cars pass by on Warwick.</td></tr>
</tbody></table>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiqZW5HTPl6VUCpz3HVV-7N235ziPFL53wHPAH8pQ8ONjwiHQKwfbxPasoMP3DINYTe3vkZgj9muLRF-mzqhNZPYnsZeW7H5LYRVJUrSeegBLXgcTQqAw1QG1qCOoBxTUGeotRI0PRGDHHp/s1600/2_DNG.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiqZW5HTPl6VUCpz3HVV-7N235ziPFL53wHPAH8pQ8ONjwiHQKwfbxPasoMP3DINYTe3vkZgj9muLRF-mzqhNZPYnsZeW7H5LYRVJUrSeegBLXgcTQqAw1QG1qCOoBxTUGeotRI0PRGDHHp/s1600/2_DNG.jpg" height="426" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><b>A Spec of Tech</b> - The nightlife of a programmer working hard and hardly working.</td></tr>
</tbody></table>
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9wio0lc1H_s963BrEnizGo2krnyQ8zbeucP1RDFWiae4uSHqmCF_MMwhTv_IIFssccDaZRetIaotxcDJ02F1OK_8yHJnv57CHV2y9yWmFeG68nKNT5TW2d1PCf1C77SOFiNJ3U4gSeajU/s1600/07DNG.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9wio0lc1H_s963BrEnizGo2krnyQ8zbeucP1RDFWiae4uSHqmCF_MMwhTv_IIFssccDaZRetIaotxcDJ02F1OK_8yHJnv57CHV2y9yWmFeG68nKNT5TW2d1PCf1C77SOFiNJ3U4gSeajU/s1600/07DNG.jpg" height="426" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><b>The Blinding Morning</b> - Taken during the early morning, an interesting use of repetition in photography.</td></tr>
</tbody></table>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZcKXbyGmLQamot0nD-LJVkcSLEtYBMIdC-nvwneaciRdm2fPZ1x5AKFYelAzBLMX0x5-uPh4s22FGl3jlx020SOGYsfQ_80o7AA2wZEt5vNt4Dwnsziih7Kusr_dnXfu_0LThTE9WLpfT/s1600/08DNG.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZcKXbyGmLQamot0nD-LJVkcSLEtYBMIdC-nvwneaciRdm2fPZ1x5AKFYelAzBLMX0x5-uPh4s22FGl3jlx020SOGYsfQ_80o7AA2wZEt5vNt4Dwnsziih7Kusr_dnXfu_0LThTE9WLpfT/s1600/08DNG.jpg" height="426" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><b>The Canyon of Vines</b> - A neat settlement of tree roots with seaweed on them.</td></tr>
</tbody></table>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfMdB3NTU-nkU1h5XHaKmtqFPoibSJiuqb0kvj6f29i0l_V2ECk5MI8ehdbwnYSEBg1p3_l9JBOA0C6JicPHmpHmKTvweA4-S__sR2zoTGbV7-rOYtFrBL-rSYECM5BLK96EnN_QFyXsRR/s1600/09DNG.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfMdB3NTU-nkU1h5XHaKmtqFPoibSJiuqb0kvj6f29i0l_V2ECk5MI8ehdbwnYSEBg1p3_l9JBOA0C6JicPHmpHmKTvweA4-S__sR2zoTGbV7-rOYtFrBL-rSYECM5BLK96EnN_QFyXsRR/s1600/09DNG.jpg" height="426" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><b>The Murky Storm</b> - An approaching storm and the murky water it will be over.</td></tr>
</tbody></table>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDyO3UG_fcF9YEZ7EZzP1vF1J6QPU2Q2U5xrsoAdJGKlsfoA6B3mLZPu9stJKrtqqn9-uUaE0x_Erkx3-n1JcynPk8bln3IdgRTwmjI_EhtGR30HeLqkZMfuSHSO0fgfRfTpOc6zNpyaCh/s1600/10DNG.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDyO3UG_fcF9YEZ7EZzP1vF1J6QPU2Q2U5xrsoAdJGKlsfoA6B3mLZPu9stJKrtqqn9-uUaE0x_Erkx3-n1JcynPk8bln3IdgRTwmjI_EhtGR30HeLqkZMfuSHSO0fgfRfTpOc6zNpyaCh/s1600/10DNG.jpg" height="402" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><b>The Lone Cove</b> - Really just a small tree root covered in seaweed, I love these perspective shots.</td></tr>
</tbody></table>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6azw-P2rDIdU_1QVUG9AfsKewJv8xE9SU4yeiNDtIKgzE0gPKE-mC8wbT21n05j8TBPNCsD6kp9NGoEtp97AvGflQTChTl9boyaax0Vk4ijL5z1eCAw3SbiZIg4i7q9PD42XM1JluHYr0/s1600/11DNG.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6azw-P2rDIdU_1QVUG9AfsKewJv8xE9SU4yeiNDtIKgzE0gPKE-mC8wbT21n05j8TBPNCsD6kp9NGoEtp97AvGflQTChTl9boyaax0Vk4ijL5z1eCAw3SbiZIg4i7q9PD42XM1JluHYr0/s1600/11DNG.jpg" height="426" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><b>The Path Onward </b>- A neat cliff-like structure that is again only a few inches tall.</td></tr>
</tbody></table>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizOPMSoZzfl_W-9W6qogJT4olnZS1SsN67QHVv4VE9uvWr4c2OR0TqASEU3H70rnZ5tyDgGzET_hnhEefO1Nkq7iK0ABJugXPWtzse1JuG62YOI24l_nGaRy1UMsNGiC3Z8n0NxlxlqFaX/s1600/12DNG.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizOPMSoZzfl_W-9W6qogJT4olnZS1SsN67QHVv4VE9uvWr4c2OR0TqASEU3H70rnZ5tyDgGzET_hnhEefO1Nkq7iK0ABJugXPWtzse1JuG62YOI24l_nGaRy1UMsNGiC3Z8n0NxlxlqFaX/s1600/12DNG.jpg" height="426" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><b>The Structure</b> - Another perspective shot of these tree roots with seaweed.</td></tr>
</tbody></table>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_KCcr_Ov0u7boFIofSasmSzNfLs4RpffwvXWpuBEA48hwVv1lbqYEhNvm4C1mSTKBsZeqVrwpAtVF4cwtdB4N6eIrPHpxwq1XSALfWZFcaKsYpNpFsquo4QT6AS9ETmSvxCuIS1mk-lMV/s1600/14DNG.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_KCcr_Ov0u7boFIofSasmSzNfLs4RpffwvXWpuBEA48hwVv1lbqYEhNvm4C1mSTKBsZeqVrwpAtVF4cwtdB4N6eIrPHpxwq1XSALfWZFcaKsYpNpFsquo4QT6AS9ETmSvxCuIS1mk-lMV/s1600/14DNG.jpg" height="426" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><b>A Frame of Green</b> - An attempt to frame the photo with the seaweed, this I think came out interesting.</td></tr>
</tbody></table>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgXUd-qudnroWHGYAhU5kKNGLWELDfDwJlAe5hVarltEFoF856_AU5XLjfZTmi5M3Yrev9IGxbhg-lwcuPk7IS5sDMb6ersgfm4QP2cn0W09Sc37oEGzYlM70yoOtvtGRytg5dUDJ2yDXLR/s1600/15DNG.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgXUd-qudnroWHGYAhU5kKNGLWELDfDwJlAe5hVarltEFoF856_AU5XLjfZTmi5M3Yrev9IGxbhg-lwcuPk7IS5sDMb6ersgfm4QP2cn0W09Sc37oEGzYlM70yoOtvtGRytg5dUDJ2yDXLR/s1600/15DNG.jpg" height="426" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><b>Simple Waves</b> - A neat photo of the waves in Virginia Beach. A rather simplistic photo in the end.</td></tr>
</tbody></table>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUhoCaem25aFLLN6zXnVxhIOkE94cCF_XrBBk5eOC2bz_EodDDZpkdnLl8ENlZoX2JXel8Nd-OZEh1lWzjrNUjwD05Ccd4eDmdNnkAeFNcNDqjyzKOGVnr036cVOVAjZzFpCkARJ1uJjPx/s1600/16DNG.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUhoCaem25aFLLN6zXnVxhIOkE94cCF_XrBBk5eOC2bz_EodDDZpkdnLl8ENlZoX2JXel8Nd-OZEh1lWzjrNUjwD05Ccd4eDmdNnkAeFNcNDqjyzKOGVnr036cVOVAjZzFpCkARJ1uJjPx/s1600/16DNG.jpg" height="426" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><b>Cast Away</b> - A photo of a good friend casting away for fish.</td></tr>
</tbody></table>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNvyBnGzxwSYpGWQqFGEKiqH3w8B7O-5D4hTN8RJT6SSDF2NJOSI3qgCs1EgT244fUEbEKBm5NJa5PzCpz6Tcy0OaOfzXtpR-OYV4mRCNzE8TRl0GgsWHc2_1mQgS_NXn2xLss0DARRl7q/s1600/17DNG.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNvyBnGzxwSYpGWQqFGEKiqH3w8B7O-5D4hTN8RJT6SSDF2NJOSI3qgCs1EgT244fUEbEKBm5NJa5PzCpz6Tcy0OaOfzXtpR-OYV4mRCNzE8TRl0GgsWHc2_1mQgS_NXn2xLss0DARRl7q/s1600/17DNG.jpg" height="426" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><b>An Epic Catch</b> - A rather big fish that was caught, one of many throughout the day.</td></tr>
</tbody></table>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjtw0rWxHOi9enWsbR2TnTbUu22qxT1IIB-3h4RjlBox1V343YXA0zlfziLp9p4n_yqNsyWi-J2ueG3JnTsSi2N8kxm4rjRCpb8_1-RDUI48Xswopl32IVJ-gTcUrh7bCht9KIjNFSz4uxZ/s1600/18DNG.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjtw0rWxHOi9enWsbR2TnTbUu22qxT1IIB-3h4RjlBox1V343YXA0zlfziLp9p4n_yqNsyWi-J2ueG3JnTsSi2N8kxm4rjRCpb8_1-RDUI48Xswopl32IVJ-gTcUrh7bCht9KIjNFSz4uxZ/s1600/18DNG.jpg" height="426" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><b>Sailing Off</b> - A boat goes off into the distance while we fish for the day.</td></tr>
</tbody></table>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiS8GzLnRAkBBMGQimi6XRsagzIwFAUMpS2FZdEVRSskXa0h6JWN-jx1_7IYzi-rB2YCKBX8jrdCskZfHXXAaVvLQDaRQfjsE_A-vuy3NgPMMyVvGRTE4koJnixW48GgPxD_C29ez1dgOvx/s1600/19DNG.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiS8GzLnRAkBBMGQimi6XRsagzIwFAUMpS2FZdEVRSskXa0h6JWN-jx1_7IYzi-rB2YCKBX8jrdCskZfHXXAaVvLQDaRQfjsE_A-vuy3NgPMMyVvGRTE4koJnixW48GgPxD_C29ez1dgOvx/s1600/19DNG.jpg" height="426" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><b>Preparing to Move</b> - A TV waits for me to pack it away as I move.</td></tr>
</tbody></table>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgWGb4yuWfB8P3cRbz_geXWYSy5bfLz6_uij3UMoiarLlVBkW6IUCek0PFh5rH6MivAJL58JqWTWRExSKdlfWDNDTJIOQkiDHeJNtNBxZWIxNik1l9ouyj5hFQn0g4tg29NXvqJtJHloGR8/s1600/20DNG.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgWGb4yuWfB8P3cRbz_geXWYSy5bfLz6_uij3UMoiarLlVBkW6IUCek0PFh5rH6MivAJL58JqWTWRExSKdlfWDNDTJIOQkiDHeJNtNBxZWIxNik1l9ouyj5hFQn0g4tg29NXvqJtJHloGR8/s1600/20DNG.jpg" height="426" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><b>Restless Waves</b> - Waves crash against the shore as I visit the beach.</td></tr>
</tbody></table>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYn4IXyKfmt_8s3gqrfxEvQatlKmPrjoh1-IYaoQjzKCKyB0hYEBSrZ95XO2MmaiW8qSNJTbGSET4xZXc-jewr1DthAmsnxDPm0DGqw3DxUAYmw6F71sUJzeMuYBCgWnUMXmZOBE360K7F/s1600/22DNG.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYn4IXyKfmt_8s3gqrfxEvQatlKmPrjoh1-IYaoQjzKCKyB0hYEBSrZ95XO2MmaiW8qSNJTbGSET4xZXc-jewr1DthAmsnxDPm0DGqw3DxUAYmw6F71sUJzeMuYBCgWnUMXmZOBE360K7F/s1600/22DNG.jpg" height="426" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><b>A Penny for your Thoughts</b> - The Christopher Newport University fountain where graduating seniors return<br />
the pennies they are given when they first arrived as freshmen.</td></tr>
</tbody></table>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpjQElIvd_eSJoeSON8_mOpCuJwtaG9re_m9UWFX4w7PyG2xiXecYcBIUAMZRqQtKmlKL8nuavCFkvBwJrc-rqg4vZ6euajLn9IJMnDFpsjwO2Uq14glPG2BdMnnqEpthW78e-EqUFEjHu/s1600/23DNG.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpjQElIvd_eSJoeSON8_mOpCuJwtaG9re_m9UWFX4w7PyG2xiXecYcBIUAMZRqQtKmlKL8nuavCFkvBwJrc-rqg4vZ6euajLn9IJMnDFpsjwO2Uq14glPG2BdMnnqEpthW78e-EqUFEjHu/s1600/23DNG.jpg" height="426" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><b>The Golden Goose</b> - A goose and several ducks bask in the setting sunlight.</td></tr>
</tbody></table>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNfrkUuj0PYVUbwqikd5FE7mQ8waV89CngPCSOn7iELHrv0RUM-2iW97GDRAmoG6ViRzUmxJlKfT5QjvjFR6qG_UL-LgwlyXjTo3BRK5w0VEPPNwICeUsSrg53SzjueDyYtc0K46xVtnKw/s1600/24DNG.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNfrkUuj0PYVUbwqikd5FE7mQ8waV89CngPCSOn7iELHrv0RUM-2iW97GDRAmoG6ViRzUmxJlKfT5QjvjFR6qG_UL-LgwlyXjTo3BRK5w0VEPPNwICeUsSrg53SzjueDyYtc0K46xVtnKw/s1600/24DNG.jpg" height="498" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><b>Intense Garbage</b> - An attempt to make a trashcan more interesting seems to have slightly paid off.</td></tr>
</tbody></table>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgIrIFmLpAm8VM1v_yxt6BerlHTlP2ITRwZl1cYeilBvmofovsX-64zi3HEuxb9Y8wm7hTCYhNgRZgh6DnCoceFnQrlO4wqEVbPL6Ov_gsA9mE8cjB-mJlyoamUfWyOukBnIQIChueOmqVx/s1600/25DNG.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgIrIFmLpAm8VM1v_yxt6BerlHTlP2ITRwZl1cYeilBvmofovsX-64zi3HEuxb9Y8wm7hTCYhNgRZgh6DnCoceFnQrlO4wqEVbPL6Ov_gsA9mE8cjB-mJlyoamUfWyOukBnIQIChueOmqVx/s1600/25DNG.jpg" height="426" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><b>Keys to the Past</b> - My piano hasn't been played recently and is thus collecting a bit of dust. One more<br />
thing I wish I had more time for these days.</td></tr>
</tbody></table>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjcK0kC1wPQckr_8VpqaElGYpAPkHHOXzKAfHFDfmOxTicAHy4Zn99FmTaTo2Ks1N6IW6FkUx3GMoFKhPmgvmIg4guWkoTCzeyirh2Y_TDGSWe_7vqNMM5O8lWUisj6G-MBslnu9iHOOFF/s1600/IMG_0051.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjcK0kC1wPQckr_8VpqaElGYpAPkHHOXzKAfHFDfmOxTicAHy4Zn99FmTaTo2Ks1N6IW6FkUx3GMoFKhPmgvmIg4guWkoTCzeyirh2Y_TDGSWe_7vqNMM5O8lWUisj6G-MBslnu9iHOOFF/s1600/IMG_0051.jpg" height="424" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><b>The Intense First Waves</b> - One of the second photos that I took in my digital photography class.</td></tr>
</tbody></table>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgKnTZzQVzY24uM02SCRD0GqMnR-8J-U_hU9Ara7tf5M46DYKBz5SJChl-fdanBFz9HOyWZ5Lrmq29LjoDPa377WFgEz-QQbeX1R_n3AtOib0zY3K2WUpsuWYLGDWy3eZxqvId5k1Agi2FR/s1600/IMG_0237.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgKnTZzQVzY24uM02SCRD0GqMnR-8J-U_hU9Ara7tf5M46DYKBz5SJChl-fdanBFz9HOyWZ5Lrmq29LjoDPa377WFgEz-QQbeX1R_n3AtOib0zY3K2WUpsuWYLGDWy3eZxqvId5k1Agi2FR/s1600/IMG_0237.jpg" height="426" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><b>Goodnight Warwick</b> - Warwick comes to life at night as cars race by and streetlights turn on.</td></tr>
</tbody></table>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgIRU-_GuuLg8QMhzLf1W_KrlXVaQ4QLAnVp-JN9th_P-EsMxdh0yF5k84x2sy7Fr3pVG1OPNfQE_W8JzCNSH0UYAq6rrbF8HZbFwHzD1gg9ihMIae1ASgacVNS32_VJOtmdECErfO01sxL/s1600/Photo+12.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgIRU-_GuuLg8QMhzLf1W_KrlXVaQ4QLAnVp-JN9th_P-EsMxdh0yF5k84x2sy7Fr3pVG1OPNfQE_W8JzCNSH0UYAq6rrbF8HZbFwHzD1gg9ihMIae1ASgacVNS32_VJOtmdECErfO01sxL/s1600/Photo+12.jpg" height="426" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><b>The End</b> - The final photo of my class, this was used in a story presentation that was done through just photos.</td></tr>
</tbody></table>
<br />
Hopefully my future photos will only improve more, but without more access to the software and a good camera, no promises. That being said, I will do my best to make future photos better somehow!<br />
<br />
Feel free to leave your comments below!Anonymoushttp://www.blogger.com/profile/00651699547388699498noreply@blogger.com0tag:blogger.com,1999:blog-1055174320877560777.post-77125940474958146702014-06-11T18:23:00.000-04:002014-06-11T18:23:34.577-04:00Game Systems - 8th Generation Current StatusGame 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.<br />
<br />
<b>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.</b><br />
<br />
<a name='more'></a><br />
<h3>
<span style="font-size: x-large;">
The Competitors</span></h3>
<div>
<span style="font-size: x-large;"><br /></span></div>
<h4>
Sony - PlayStation 4</h4>
<div>
The PlayStation 4 is an interesting beast of a console. Out of all the 8th generation game systems, it is by far the most powerful of the them all. There really is no comparison, even with Microsoft's "Cloud Computing" propaganda (more on that later though). The PS4 boasts an incredible amount of RAM for a game system (8 gigabytes, 32 times as much as the PS3), with the RAM being DDR5, which is much much faster than what the other systems have. While the PS4 has a slightly slower CPU (1.6 GHz compared to the Xbox One's 1.75GHz), it boasts better performance on its GPU (1.84 teraflops versus the Xbox One's 1.31 teraflops; flops are how many floating point operations a processor can do per second). Yes, this does technically give it a rather distinct graphical advantage over the Xbox One.</div>
<div>
<br /></div>
<div>
For its controller, called the DualShock 4, quite a few new changes have been made. Specifically the new touch panel, share button, and "light bar". The touch panel is a capacitive touch input, meaning that it can *technically* register more than one point of contact at once. It also has a button that can be used by pushing the panel downward. The share button is a new tiny little button that can be used to share screenshots and such to social media sites like Facebook and Twitter. The "light bar" is a strip on the front of the controller that can change colors depending on what a game decides.</div>
<div>
<br /></div>
<div>
For motion controls, the PS4 still uses most of the same old hardware from the PS3 via PlayStation Move, though the new camera does feature some nice upgrades. It runs in 720p at 60 fps, though you can get a higher frame-rate with a lower resolution on it still. That being said, very few games support it, and it's not included with the system, which is an important point to remember for later on.</div>
<h4>
</h4>
<h4>
Microsoft - Xbox One</h4>
<div>
The Xbox One sports very similar hardware to the PlayStation 4 (in a kind of spooky way too). The CPU is almost exactly the same, though as mentioned before, slightly faster at 1.75GHz. The GPU is also an AMD GPU like the PS4, but is slower at 1.31 teraflops. Overall, the system is almost identical to the PlayStation 4, except for one major issue: the ESRAM bottleneck. Long story short, the Xbox One has a very big issue, where a critical part of the GPU cannot receive data quick enough for things such as textures. This is why many Xbox One games have suffered huge graphical quality hits compared to the PS4, and is also why the PS4 substantially beats out the Xbox One in power. While the removal of the Microsoft Kinect will help, I do not believe it will help as much as people think, though maybe I am wrong on that.</div>
<div>
<br /></div>
<div>
Now one feature that was mentioned was "Cloud Computing", which in theory could fix the ESRAM problem too. Microsoft really advertised this as an awesome feature for computing all of the intense graphics for a game on more powerful servers, and then relaying it back to the consoles online. There's just one more problem: Yet another bottleneck. The problem is you'd need to have a fast enough internet connection to prevent lag from such a system, and considering how Internet service providers' are fighting to throttle speeds even more-so than they already do thanks to the FCC's incompetence with net neutrality, there's really no way that this would be feasible with today's technology.</div>
<div>
<br /></div>
<div>
That being said, the Xbox One did have the potential to still beat the PS4 and make its way to the top. When it was released, every console was sold with a Microsoft Kinect. This wasn't just any ordinary Kinect though, this was the new upgraded one, which actually had some great features. From the 1080p resolution to the incredibly accurate sound locating abilities to the infrared camera, the new Kinect is able to do some incredible things for gaming. Imagine playing a horror game where the game can create scarier creatures depending on whether your heart rate is already going faster (indicating you may be scared) or slower. Yet again though there is just one more problem with this: Microsoft started selling bundles without the Kinect, meaning that this would be an optional feature, which would be shoved in as more of a gimmick by most developers unfortunately if the original Kinect is any indication. The reason I say this is because developers can no longer guarantee that everyone will have the new Kinect.</div>
<h3>
<span style="font-size: x-large;"><br /></span></h3>
<h3>
<span style="font-size: x-large;">
The Battle - Which One is Better?</span></h3>
<div>
In the end, the PlayStation 4 currently takes the cake for winning the war thus far. While the official numbers aren't quite out there, the PlayStation 4 seems to have outsold the Xbox One almost double, making it not only a more powerful system, but a bigger financial success too. Without the "Cloud Computing" magic or a bigger interest in the new Kinect, Microsoft seems to just be dragging its feet with the Xbox One. Even it's first flagship title Titanfall was lackluster, with the Xbox One version suffering quite a few problems.</div>
<div>
<br /></div>
<div>
The Xbox One could have kept itself in the lead with the Kinect, as the PlayStation Camera has not done well at all, and unique experiences tend to be what sells consoles. Unfortunately, since Microsoft has segmented the Xbox One users who have Kinects, this makes the incentive for developers to use the Kinect much lower, since not all users would have one now. While there is a chance that this might not affect it too much, it seems highly unlikely given how poorly the original Kinect did, as well as the fact that Microsoft has already taken a huge publicity hit prior to this, thanks to incredibly bad public relations. The good side to this though is that the Xbox One does have quite a few games that use the new Kinect, unlike the PS4. This at least is more of an incentive for people to buy the Xbox One, and could potentially help to increase its sales further.</div>
<div>
<br /></div>
<div>
Though there is one new technology that could change all of this: Virtual reality headsets. If the rumors are true, Microsoft is working on a virtual reality headset to compete with the Oculus Rift and Project Morpheus, and if they can manage to make their hardware better, and more enticing to developers, they could find a way to put themselves ahead again. Whether that will happen though has yet to be seen, and is unlikely to happen given Microsoft's recent record.</div>
<h3>
<span style="font-size: x-large;"><br /></span></h3>
<h3>
<span style="font-size: x-large;">
What about the Wii U?</span></h3>
<div>
The Wii U is in a very interesting predicament as of right now. While it is significantly cheaper than the other two consoles, it has sold the fewest by far of the three. At the same time, it has more potential than both systems due to its unique hardware. While the gamepad has been largely underused, it presents a unique gameplay experience for gamers. An example of this could be a real-time strategy game that could be controlled with the gamepad, with a larger view of the game on your TV. The problem the lack of developers who have tried to use it in unique ways.</div>
<div>
<br /></div>
<div>
Unlike the Wii, the new controller for the Wii U does not seem to be providing developers with new game ideas to try out. The result is absolutely no games on the system, which has resulted in abysmal sales. That being said, all it takes is some good games to fix it, meaning that if Nintendo can push out more games than Microsoft or Sony in the coming months, they could catch up.</div>
<div>
<br /></div>
<div>
Will Nintendo be on top again in the end? Probably not at this point, but they aren't out of the game yet. Nintendo has a slew of great games coming out over the next few months, starting with Mario Kart 8, and ending with at least a new Super Smash Brothers game. Both of these are "system sellers" for Nintendo, and if done right, could be just what they need to bring up Wii U sales. The big question is what will be shown at E3 this year, as it could further determine the fate of the Wii U.</div>
<h3>
<span style="font-size: x-large;"><br /></span></h3>
<h3>
<span style="font-size: x-large;">
Conclusions</span></h3>
<div>
As the numbers show, the PlayStation 4 is currently well ahead of the other systems for the 8th generation of consoles, and the Wii U is definitely in last place. Yet even after all of this, there is a lot of potential for things to be shaken up by any of them. With the Wii U's library growing slowly but surely, it poses a threat to the PS4 and Xbox One's lackluster library of games. That being said, Nintendo will need to work hard to catch up properly, especially given how under-powered the system is compared to the other two. Microsoft on the other hand needs to figure out how to fix this issue of segmented features and hardware interference in order to bring itself into first place finally. Sony in the meantime needs to continue to find games for its system, in order to secure its place ahead, or risk being passed by one of the other two, and also find new and enticing ways to bring other on-board with the PS4. The 8th generation of game consoles is officially starting up!</div>
<div>
<br /></div>
<div>
Have an opinion on the 8th generation of consoles? Leave a comment below!</div>
Anonymoushttp://www.blogger.com/profile/00651699547388699498noreply@blogger.com0tag:blogger.com,1999:blog-1055174320877560777.post-86141960111918095352014-06-08T23:21:00.002-04:002014-06-08T23:22:42.992-04:00Class, 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!<br />
<br />
<a name='more'></a><br />
<h3>
Google Glass</h3>
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0lcSQtzHZavs0z1AWVOEqXCAZ1_Ze4-lYsfxWr55G7nfAgWJTNoMuwkZBuxQBTm9QTLn9-ge7QGd4eae0ITfWyZYp6y8ioyZLb1wq70uJ7lDlGqr8kGFf2s6SzFKOR2hF5DAeqG9-uMv2/s1600/20140604_175116_149.jpg" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0lcSQtzHZavs0z1AWVOEqXCAZ1_Ze4-lYsfxWr55G7nfAgWJTNoMuwkZBuxQBTm9QTLn9-ge7QGd4eae0ITfWyZYp6y8ioyZLb1wq70uJ7lDlGqr8kGFf2s6SzFKOR2hF5DAeqG9-uMv2/s1600/20140604_175116_149.jpg" height="234" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">I promise I'm not actually a Terminator!</td></tr>
</tbody></table>
<div>
I've recently gotten the chance to play around with a pair of Google Glass! I'm planning to do some tutorials on it while I have it, as well as post my personal opinions of how it looks so far, so keep an eye out for those posts!<br />
<br />
You can also see a few goofy pictures such as the one here on my Twitter feed every now and then. </div>
<h3>
</h3>
<h3>
Jobs</h3>
<div>
After months of searching I've got a pretty awesome internship now too! I'm planning to ask about doing a blog post about what it's like there, but no promises as I'm not sure how they'd feel about it, so we'll see. Just know that I'm not actually laying around without a job for the summer! (Though you may catch me laying around at some points still....)</div>
<h3>
</h3>
<h3>
Class</h3>
<div>
Recently I got the chance to take not one, but two May Semester classes! They were actually some very incredible classes and I plan to try and do at least one blog post about each. I also will be posting some pictures from the digital photography class I took, so keep your eyes peeled for those (hopefully before the end of this week)!</div>
<div>
<br /></div>
<div>
All in all, there's a lot more that I'm not quite ready to talk about yet going on, and it's going to be an exciting summer as a result, especially if you like some of the techy stuff I've posted in the past. While this post was a bit more personal, I hope it get's you excited for what's to come here on <a href="http://gemisis.blogspot.com/">Shape the World</a>!</div>
Anonymoushttp://www.blogger.com/profile/00651699547388699498noreply@blogger.com0tag:blogger.com,1999:blog-1055174320877560777.post-32467062427061913712014-05-02T11:37:00.001-04:002014-05-02T11:41:56.712-04:00Project Virtua Demo - Using Just the RiftThis is a quick tutorial on how to get a simple Oculus Rift demo up and running with <a href="http://www.projectvirtua.com/" target="_blank">Project Virtua</a>. 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).<br />
<a name='more'></a><br />
<h2>
Setting Up the Project Files</h2>
To start, make sure that the Project Virtua libraries are properly setup in your project, as well as the Oculus Rift SDK headers. This will ensure that you can properly access the methods from the library. You can find a quick tutorial on setting up the Project Virtua files here: <a href="http://projectvirtua.wikia.com/wiki/Installing">http://projectvirtua.wikia.com/wiki/Installing</a>. Once that is done, you are all set to start getting into the code!<br />
<h2>
Creating an Oculus Rift Object</h2>
<div>
As I said previously, I'm not going to go over the code for creating the window and object models, but it's very easy to do so using this library. The real meat of this is creating the Oculus Rift object to use in your code. Doing so is very easy still:</div>
<div>
<br /></div>
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkCoYMPS0HiGdz2FmakpKEOjma7bvifcYqb0lsqO8Rph2ZEpem9lfyVOfKqy8mUCzSRHBwiGTfHm2ehoTm9CsH83d3fPa2hw2bYYKL6exE2gD0sv3MVp16qjh711c0KvbzoAYUfn3SIz8-/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> OculusRift rift(false, testWindow.renderingContext, testWindow.windowHandle, testWindow.deviceContext);
</code></pre>
This will create an Oculus Rift object named "Rift", that does not create a fake Oculus Rift when disconnected, uses our testWindow's rendering context, window handle, and device context. To check that the Oculus Rift was properly detected, simply use rift.isConnected() to get the boolean status. When rendering, you can use the following code:<br />
<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkCoYMPS0HiGdz2FmakpKEOjma7bvifcYqb0lsqO8Rph2ZEpem9lfyVOfKqy8mUCzSRHBwiGTfHm2ehoTm9CsH83d3fPa2hw2bYYKL6exE2gD0sv3MVp16qjh711c0KvbzoAYUfn3SIz8-/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> //Attempts to render to OculusRift
if (rift.StartRender())
{
//Renders left eye
rift.StartEyeRender(Left, viewOffsetMatrix);
{
rift.getPerspectiveMatrix(Left, perspectiveMatrix);
drawGLScene(program, perspectiveMatrix, (viewOffsetMatrix * viewMatrix));
}
rift.EndEyeRender(Left);
//Renders right eye
rift.StartEyeRender(Right, viewOffsetMatrix);
{
rift.getPerspectiveMatrix(Right, perspectiveMatrix);
drawGLScene(program, perspectiveMatrix, (viewOffsetMatrix * viewMatrix));
}
rift.EndEyeRender(Right);
//Frame buffering is not handled automatically!
pv_glBindFramebuffer(PV_GL_FRAMEBUFFER, 0);
glDisable(GL_DEPTH_TEST);
rift.EndRender();
glEnable(GL_DEPTH_TEST);
// Ocuus Rift sets clear depth to 0, reset that here.
glClearDepth(1);
}
</code></pre>
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiuMHPADvzfrYBAT1Uhz53pA3NVYkStQf1qjnzogbwbNTbB0zuAdaEfP_-iLeLkd1RZnHnoQJbewE3tJbDEwBmUtFrC0g18wrUpVz_siDB0HxJ4U-j6k64i-dwPhEx3fARqNbM6wgUrXztN/s1600/demo+-+no+rift.png" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiuMHPADvzfrYBAT1Uhz53pA3NVYkStQf1qjnzogbwbNTbB0zuAdaEfP_-iLeLkd1RZnHnoQJbewE3tJbDEwBmUtFrC0g18wrUpVz_siDB0HxJ4U-j6k64i-dwPhEx3fARqNbM6wgUrXztN/s1600/demo+-+no+rift.png" height="200" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">The final scene rendered without the Rift as well.</td></tr>
</tbody></table>
Notice that rift.StartRender() also returns a boolean indicating whether the Oculus Rift was detected. This will help to reduce the number of calls that you need to make when rendering. The process from there on is pretty simple, get the view matrix offset for each eye via StartEyeRender, and then render the scene for each eye.<br />
<h2>
Source Code</h2>
<div>
You can find the source code for this test project <a href="https://github.com/gemisis/Project-Virtua-Demos/blob/master/Basic%20Rift%20Only/main.cpp" target="_blank">here</a>, as well as the resources files <a href="https://github.com/gemisis/Project-Virtua-Demos/tree/master/Basic%20Rift%20Only" target="_blank">here</a>. While this tutorial was fairly quick, I hope it will help people get setup and using Project Virtua for the Oculus Rift side. I plan to try and do one or two more of these to show off some of the other nice features soon.<br />
<br />
Feel free to post any comments or questions below!</div>
Anonymoushttp://www.blogger.com/profile/00651699547388699498noreply@blogger.com0tag:blogger.com,1999:blog-1055174320877560777.post-54203573989994342462014-05-01T12:39:00.003-04:002014-05-01T12:39:26.778-04:00Photos of the Month - April 2014Life 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!<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5WLKzkgzP4rR0essl2jtMtPWHl7ScugSGdWu3bxPT1W-RR41qLfjqNWrx4flahpRh3sP8U99B8R77RAEynhfifc_j4bHH18D0ZYUiG-OozCjZxmAldEu2NMCav8jj_5jpT2ZJtNmMxoX0/s1600/A+Dance+to+Remember.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5WLKzkgzP4rR0essl2jtMtPWHl7ScugSGdWu3bxPT1W-RR41qLfjqNWrx4flahpRh3sP8U99B8R77RAEynhfifc_j4bHH18D0ZYUiG-OozCjZxmAldEu2NMCav8jj_5jpT2ZJtNmMxoX0/s1600/A+Dance+to+Remember.jpg" height="480" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">A Dance to Remember - A picture taken right before the ballroom dance competition, Bamjam 2014!</td></tr>
</tbody></table>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjsPLkyT2cYsD-zyxFPBBLnt3-Jq3muEtprqF5PFPU09CL9zfC_8dwk_TTVjUSIyxHFjU3zwTWFEPN9Jf3sNdvHKVa35uNAeaW6qMFqoyPJDDjrM1aYLTCsZvEInYIU91OBYKeC_nFkho3/s1600/Going+Green+on+the+Water.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjsPLkyT2cYsD-zyxFPBBLnt3-Jq3muEtprqF5PFPU09CL9zfC_8dwk_TTVjUSIyxHFjU3zwTWFEPN9Jf3sNdvHKVa35uNAeaW6qMFqoyPJDDjrM1aYLTCsZvEInYIU91OBYKeC_nFkho3/s1600/Going+Green+on+the+Water.jpg" height="480" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Going Green on the Water - Taken during a quick break from finals week, my girlfriend and I rented a paddle boat for an hour.</td></tr>
</tbody></table>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjErQ-gd2hrIRaMvD29ymqX81McMDsNPQDzT0nif8KyKG1zYJ0uuSN_u0iF-_FgwRiP74SMV6b1NJXPIXOB2HH7IKhjSp0v9-r-0qV-RXzBRntgmtN-VTkG5WMD6gBUmbHJus8pd5hhy9SL/s1600/The+Trees+Spring+to+Life.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjErQ-gd2hrIRaMvD29ymqX81McMDsNPQDzT0nif8KyKG1zYJ0uuSN_u0iF-_FgwRiP74SMV6b1NJXPIXOB2HH7IKhjSp0v9-r-0qV-RXzBRntgmtN-VTkG5WMD6gBUmbHJus8pd5hhy9SL/s1600/The+Trees+Spring+to+Life.jpg" height="480" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">The Trees Spring to Life - Taken on one of the really nice days we had recently, the sky ended up perfectly behind this tree.</td></tr>
</tbody></table>
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!Anonymoushttp://www.blogger.com/profile/00651699547388699498noreply@blogger.com0tag:blogger.com,1999:blog-1055174320877560777.post-62316058401504240572014-04-17T23:42:00.000-04:002014-04-17T23:42:07.866-04:00Hack it! - A TV Show Idea<div dir="ltr">
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!</div>
<div dir="ltr">
</div>
<a name='more'></a><br />
<div dir="ltr">
The idea for this TV show is to create a small group of people to do penetration testing for small business owners and follow them around on these "adventures". For those who don't know, penetration testing is where a company goes into another company's network and attempts to break-in or "hack" it to access things they shouldn't, take it down, or just generally do bad things on the network. Usually the penetration testing company doesn't actually break things, they just find out whether the other company's systems are vulnerable or not. The other company can then fix these things, and prevent real hackers from doing damage to their systems.</div>
<div dir="ltr">
<br /></div>
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJGA8oZauY6ldUSAaqbYjg_eU1YoSMBM-dv7I0F37lxk0Z6vYiFFvfoCFhYAvvyf1y1RZTtj0Zge9x6J31ZQLwaaCDDgQqnqxS8HWOHRa3Lhn_FjB8aP0c4I1K_NpBPljtorwpBNCx0y_4/s1600/matrix+me.jpg" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJGA8oZauY6ldUSAaqbYjg_eU1YoSMBM-dv7I0F37lxk0Z6vYiFFvfoCFhYAvvyf1y1RZTtj0Zge9x6J31ZQLwaaCDDgQqnqxS8HWOHRa3Lhn_FjB8aP0c4I1K_NpBPljtorwpBNCx0y_4/s1600/matrix+me.jpg" height="240" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><i>There would of course need to be a deal with<br />Warner Bros. Pictures for the mandatory Matrix effects</i></td></tr>
</tbody></table>
<div dir="ltr">
Once the group of penetration testers is created and setup, they could then go to businesses that would like to make sure their systems are secure. The businesses would give them the necessary permissions (mostly none) and waivers (to prevent lawsuits), and then the penetration testers could look over what possible problems the network has. Camera crews could then interview each person during this time, and show each member testing out their different hacks, as well as describing what exactly they are doing from a technical standpoint. Once the job is done, the company would then patch their systems, and the episode could be released safely, with no harm to either side.</div>
<div dir="ltr">
<br /></div>
<div dir="ltr">
I think a show like this has a ton of potential, especially when it comes to showing a different way to portray hackers. Right now there is a lot of negativity towards hackers, especially in the eyes of the law. Under the current United States' laws specifically, hacking is considered an act of terrorism, and has severe consequences. This in turn makes many people skeptical of those who do claim to be hackers, as well as deters people from learning the skills outside of school. This creates an even bigger problem, as hacking isn't something that can be easily taught in schools. In fact, just going from what I've tried at my own university, creating an educational environment for hacking is incredibly tough, mainly because of the intense setup required. When you setup these systems you have to make sure you won't get into trouble with how you access them and that accidents don't happen (which they will), or at least that accidents won't affect other systems at the school.</div>
<div dir="ltr">
<br /></div>
<div dir="ltr">
This show could help bring awareness of these issues to more people, and also bring awareness to these services and why they are important to have. With the number of websites that run into issues nowadays, I think this is an issue that should be advertise, and this show could be the perfect way to do so in a safe and public environment. It would also provide a good resource and insight to those who want to learn how to do penetration testing.</div>
<div dir="ltr">
<br /></div>
<div dir="ltr">
I would love any feedback on such a show in the comments below! Have your own TV show idea? Feel free to share it here too!</div>
Anonymoushttp://www.blogger.com/profile/00651699547388699498noreply@blogger.com0