Sunday, February 5, 2012

1/30 - 2/3 CS373 Blog Post

Good afternoon, everybody!

Another week, another blog post.  Like always, lectures have been rigorous but very interesting.  It's seriously amazing how much you can learn just by looking at small snippets of code and dissecting every meaning of every part of the syntax.  It's almost as if, when beginning to learn the art of programming, that you take some things for granted.  That, or they were just never talked about in great detail in the introductory classes.  It makes me want to re-evaluate everything that I've learned and assure myself that I am understanding every part of a given programming language.

It's been interesting taking a look at Haskell code.  The format is so different from other languages I've encountered!  It is always cool to look at new programming languages and to see how they are similar and different.  In the end though, they all have the ability to perform the most common tasks, and that in itself is pretty cool.

The Collatz project was actually a lot of fun to program.  I had an enjoyable time attempting to optimize it as much as I can in order to get the speed of the program down to a minimum.  It was good that I had finished the program early so I could tweak it as much as possible.  I also wrote down an awfully lengthy wiki on it unintentionally.  I just wanted to keep my information as detailed as possible so that someday (in the future) if I ever looked back at it, I could understand all that I did over again.  Although, a mishap did occur when submitting the project.  It seems like when I zipped up all of my files, I forgot to do a recursive zip, so my HTML files didn't get submitted! For starting early and finishing early, it was definitely a crucial hit to my grade (already 20 points off).  I'm the only one to be blamed, though: I had checked all of my files after submitting, but I had assumed that the files existed within my subdirectories in the zip file when checking.  Lesson learned: check everything for my own sanity.

Next week's project seems really interesting.  Determining dependencies and listing them out seems like it'll be a pretty thoughtful project.  I'll need to brush up on my knowledge of priority queues and binary heaps; it seems like that will be the data structure that will be used to solve this problem.  Honestly, I can't recall ever learning about priority queues and binary heaps in CS315 (CS314 now, I suppose), but I have used priority queues in the past.  Anyone else learn about those data structures elsewhere?

Until next time,

Corey

Sunday, January 29, 2012

1/23 - 1/27 Software Engineering Introductory Blog Post!

Good afternoon, everybody!

This will be the home of my weekly blog posts for my software engineering class, CS373.  So far, this class has been pretty challenging.  Professor Downing definitely keeps everybody awake and on their toes with his style of lecture, which I really like.  Although many people are put on the spot for questions daily, it definitely reasserts the knowledge that I've learned in college thus far.  I'm not very good at answering questions (regardless of how easy the question may be, I tend to overanalyze/become hesitant/nervous/etc) but I think this will help me be a better Q/A kind of person later in the future when I start my career.

I've really enjoyed what we've learned in class so far.  Learning about the different forms of caches has been pretty interesting.  You can make a lazy cache, which fills up values only when they're computed; or you can make an eager cache, which computes every value possible and then fills up an array with those values.  Or, you could do a meta cache, which is an already-computed list of values that you can just stuff into your program.  I've found that to be very interesting, and it is definitely one of those things that you need to test out in order to figure out which kind of cache is optimal for the program you're designing.

The seemingly-trivial questions about Java syntax has actually surprised me; it isn't really as easy as I thought it would be! From realizing that an obvious conditional statement of comparing two different objects would not compiles, to rejuvenating my lost knowledge on public/private/protected methods and public/final classes, it certainly has been a learning experience.  I've also come to realize that Python's syntax, while very unusual to me still, is so much nicer than Java.  Java requires packages, extraneous classes to do input/output, and lengthy syntax to do seemingly easy things.  Python just seems so...nice! The classless thing has always been kind of weird to me, but I've been used to that with good ol' PHP.

Anyway, it's been a pretty interesting ride so far; let's see where we go to next in this class!

See y'all tomorrow,

Corey

Wednesday, May 18, 2011

iPhone Dev Blog

Hey guys,

It's been a while since my last post; I've been pretty busy with schoolwork and finals! Thankfully, I'm done for the semester.  It's been a rough one, but I've definitely learned a lot!

Anyway, I've been working on mobile application development for the iPhone lately.  I recently got a job, so it's been a pretty fun experience trying to mess with different APIs and the iPhone SDK in general.  It's just so cool to actually put your knowledge towards the real world.  I mean, in classes, you just stick with creating sensible programs that you type through the console in order to receive specified output.  You learn different data structures, multiple strategies on efficiency, and how to just have good coding ethics.  But it all ties together!  When you create programs for companies, for industries, for the consumer, it is important to keep these ideas.  You don't want a simple program that sorts contacts to take 3 seconds because you used an insertion sort algorithm; you want that simple program to be simple.  The abstraction is to make something look simple, even if it might take a complicated algorithm.  Efficiency is almost proportional to difficulty.  A low-efficient program will be very easy to create.  For a program that almost guarantees small data to sort, this would work pretty well.  But what if the program is designed for an industry that requires tabs of employees of every company to be sorted?  Certainly, this wouldn't be an optimal solution.  The point is, as humans in this generation, we expect things to happen instantaneously (unfortunately).  If you click something and it doesn't pop up in less than two seconds, the average consumer will consider it as if the program isn't responding or their phone in general is running slowly.  Of course, for CS majors, we would consider this as either normal (that is, processes in the background could be hogging resources, thus delaying the program to respond in time, etc) or just a tiny bug that can be fixed.  These concepts are important to consider when developing software!

Anyway, I've decided to show off a few pictures of development in my upcoming blogs for a few reasons:

  • Keep myself up-to-date with what I've done
  • Write notes to myself about what I can do better
  • Reflect on initial development and see what changes I can make
  • Users can comment and make ideas for me (if they want!)
  • Just for fun!
I always feel it fun to post pictures of development so people can see what's going on.  Maybe prospective programmers could get influenced by it; who knows?  I love doing what I do, and I love showing off certain techniques or ways to develop things.  And of course, it helps me learn what I'm doing right, and what things I really would like to improve on.  

Here are a few pictures of my current application I'm working on.  It's an app for the iPhone for a band made by my friends called 'Moonlight Social.' I posted a blog about them a few months ago; you should check that out if you're not familiar with them.  They released an EP just recently and are available on iTunes and Amazon!  Check out their website, too.  Anyway, I've just been working on an app for them for fun!  It's the best way to learn a new language and an SDK.

Initial Home Screen development.  This primarily was just a test to effectively parse the news information from the website correctly.

Updated News Screen development.  Decided to use a UINavigationBar to push/pop news information from one window to another window.   Parsing had a few small ASCII conversion errors, and those have been fixed.  News button seems to be finalized for the most part!
The screen that displays when you press on a News entry.  The outlook of this window isn't finalized, yet!
Blog Tab development.  Blog takes a very similar approach to News, in terms of display.  
Blog entry display.  Again, very similar to the News screen.  In fact, they use the same type of interface!  

Anyway, that's all I have for now.  Comments/suggestions are always appreciated and definitely encouraged!

Until next time,

Corey

Wednesday, April 6, 2011

Quick tip: How to use Safe Mode for a Windows/Mac-based computer.

Hello all!  This will be a fairly short blog, and I may start posting these more often.  As an avid computer user, I find interesting and neat tricks that users can use in case of certain scenarios.  If a computer doesn't work as intended, most people end up either asking their friends or calling technical support for help.  I frequently get questions asking, "how do you do this?", "what happens if [insert situation here]?", and "will I get a virus from this?"  That's where I come in.

Today's topic involves the situation where your computer just doesn't work as intended.  Maybe there's some weird error message popping up that says that you're lame, but if you buy our software, you'll be the coolest kid on the block.  Maybe your computer has decided that it doesn't like your taste of music and as a result, it just stops wanting to work.  Or maybe your computer really hates you.  Who knows? For the situations that are relatively plausible, however, there's (almost) always a way to save your computer from problems.

Windows and Mac both have an option to boot into a mode called "Safe Mode."  For the most part, this disables services from automatically running at startup so that only the necessary, core processes are only running.  To run this:

For a Windows-based machine, boot up your computer and continually press/hold F8.  You'll get to a menu that looks something like this:

Windows 7's Advanced Boot Options 

If your computer isn't booting up correctly on startup, you can try one of two things.  I would first try using "Last Known Good Configuration," which (as you can tell by the option) boots your computer based on the last configuration that worked successfully.  In the event that this doesn't work, you can try "Repair Your Computer." This runs diagnostic tests on your RAM, checks your system files for any corruption, and helps restore your system files to factory defaults if some system files somehow have disappeared.  

If your computer does boot successfully, but you get slow-down issues/bugs to fix, then consider running it in "Safe Mode." As mentioned above, only the core processes will run.  This is particularly useful if you have any form of malware, be it spyware, adware, viruses, trojan horses, etc. Run a scanner in safe mode to thoroughly clean up problems.

The process is similar for a Mac-based computer.  Boot up your computer and hold down the Shift key once your hear the startup sound.  You can release it once you see the Apple logo and progress indicator as shown below:

Once you see the progress indicator, you can release the Shift key.

Once you get into safe mode, you can diagnose your computer the same way you would with a Windows-based computer.  While you don't get a plethora of options, the core services still run so you can fix any problems you might find at startup.

That does it for this blog! Post your comments/questions below! As always, be sure to subscribe for more techie news!

Until next time,

Corey

Sunday, March 20, 2011

Software Review: Windows Live Essentials 2011

Yep guys, it's that time again! Another blog post. This time, we're going to be looking at some software! I figure that I should jump on the bandwagon and go ahead and review some software that I have found to be very useful to me personally.  People who are afraid to use new software for fear that it will "bloat" their computer and make it slow, fear no more! I'm here to help you figure out what software will work best for your computer!

One piece of software that I've found to be extremely versatile is one made by Microsoft, called Windows Live Essentials.



It is a collection of programs that I have found to be very useful.  In it contains Messenger, Photo Gallery, Movie Maker, Live Mesh, Writer, Family Safety, Mail, and Messenger Companion.  I will only talk about the first four programs, as they are the meat of this package.

Starting it off:

Windows Live Messenger

Windows Live Messenger is an instant messenger client for users who have a Hotmail/Live account.  It is essentially MSN Messenger polished up, for you people who remember that back in the day.  However, Microsoft has taken their instant messenger to the next level by incorporating the use of interacting with friends through social networks (e.g. Facebook).  This is incredibly and surprisingly useful and very easy to use.  By adding your social networking account details, you can view news updates, pictures, almost anything from your social network through Windows Live Messenger.  Furthermore, you can chat with people through your social network.  This is very helpful for those who get frustrated with Facebook's chat program.  You can also do audio/video chats with those who have Live accounts!  Very simple, pretty, and easy to use.

Viewing Facebook updates through Windows Live Messenger, along with those who are online. Incredibly easy, intuitive, and simple to use!

My good buddy Miles wasn't online, but this is an example of how the chat window looks like through Windows Live Messenger.



Windows Live Photo Gallery

Windows Live Photo Gallery is a photo organizer for your computer.  Windows fans, rejoice! We finally have a photo library program that doesn't have to be incorporated through Windows Media Center/Player! :) This program is similar to Google's Picasa program, and it works very well.  You can organize your images, edit them, share them with friends, tag people in pictures, add tags; just about anything you need to do to an image.  The editing tools are nowhere near as sophisticated as Adobe's Photoshop, but they are solid for a free program.  From straightening the picture, to adjusting the color or exposure, you have many common editing tools at your fingertips.  And if you're lazy, you can even use the Auto Adjust feature, which edits the image based on its conditions.  It's proven to be pretty accurate, but I prefer to edit my images manually.  Also, if you don't like your editing, you can simply revert the image back to its normal state! Windows Photo Gallery keeps the original copy in hand in case you ever need to go back to the original.  Fancy, huh?  There's also tools, such as creating panoramic images, fusing multiple pictures together (very useful post about this tool here), and many more options.  You should definitely check this out if you're into organizing and editing your images.

Photo tagging in Windows Photo Gallery; so useful to find pictures of me or anyone else!

Oh no! I've edited too much and I'm not happy with the results! No matter, after pressing the "Revert to original" button...

The photo is back to normal!


Windows Live Movie Maker

Windows Live Movie Maker is a movie maker/editor; plain and simple.  Like the other products in this suite, it is nowhere as amazing as advanced movie editors, like Sony's Vegas Pro or Adobe's After Effects; still, for beginning to intermediate users, this software works very well.  I haven't used it very much (if at all) since I use After Effects for video editing, but I do know that it is extremely easy to use.  Need to add an intro? It has it.  Need to add text/video/audio effects? It's there.  Need to add credits? Done.  You can record video from your webcam for an easy vlog entry, or you can incorporate multiple videos from your digital camera and music from your media library.  You can also pause videos and take snapshots of them; very useful tool.  It also has transition effects for combining multiple videos to make your movie more smooth.  There are certain visual effects you can apply that will change the tone and color of the movie.  Again, very common but powerful tools used by many, brought to you in one simple program.

Editing in Movie Maker; very simple to use! Let's change the color...

Gives our video a completely different feel! Looks cool, and all I had to do was press a button!


Windows Live Mesh

Last but not least, Windows Live Mesh is a synchronization program that helps manage files from multiple computers.  This program is incredibly helpful for those (such as myself) who have more than one computer and need to keep things synchronized.  I personally use this to make sure that I always have access to my college stuff on any computer.  As long as that computer has Live Mesh installed with your credentials, you can specify which folders you want to keep synchronized.  You must have a Live account in order to to this (it's simple and free!).  It's very versatile and I highly recommend it if you have multiple computers.  You could also use this to keep files synchronized with other users if you wanted to use a Live account to share files in real time (of course, using Dropbox would be much easier to use for this type of purpose).  You must be wondering; how does this work? Microsoft stores your files securely in the cloud. With a Live account, you get 5 GB of free space to store your data in the cloud.  Then, when you register another computer with your credentials to use Live Mesh, the program retrieves the data from the cloud and places it onto your computer.  It's very useful for keeping documents in sync everywhere! You can also access these files online, which is great if you're using a computer without Live Mesh.

Windows Live Mesh syncing my files into the cloud!

I can view the computers that are syncing certain folders. Anyone see the Final Fantasy XIII references?

That's Windows Live Essential in a nutshell.  These programs are highly intuitive and easy to use.  All it takes is a simple installation and you're good to go!  To download this for your Windows computer, just click here! Windows Live Essentials is available for 32-bit or 64-bit versions of Windows 7 and Windows Vista.  There is also a separate link for the Windows XP version here. Note that the XP version does not contain Movie Maker and Live Mesh.

If you have any questions about these programs, place them in a comment and I'll answer them!

Until next time,

Corey

Saturday, February 19, 2011

Keep 'em Close.

Did you ever get hear this from your teachers or parents when you were in high school?

"Once you get out of college, you're going to meet new friends who will replace the ones you have now!"

Or at least something along the lines of losing touch with your old friends?  I know I did.  I heard it from both my parents and some teachers.  In high school, I never thought that would be true.  I seriously had some pretty cool friends.  Around my senior year, I seriously had so many friends that I would converse with daily.  Maybe it was just because the school I went to was so small, you practically would know everybody within a year.  

Anyway, I remember reading through my senior yearbook and my memories book a few weeks ago, and I read all of the comments my friends gave me.

"Good luck at UT! Keep in touch!"

"I'm so glad I'm such a close friend to you! Never lose contact of me!"

"Stay close and let's hang out often next year!"

I'll be polite to you here and stop, but the list does go on and on.  Out of these people who told me these things, guess how many times I have talked to them in my years in college? If I could give you a reasonable number, I'd say 10.  In the past three years, I've said words to these people (in whole!) about 10 times.

Honestly, out of all the people in my graduating class, I only talk to one person, and that's my best friend Arron.  Out of Smithville, I talk to a handful of people.  What my teachers and my parents told me were undeniably true.  

The people I've met in college have been amazing.  It is truly an outstanding feeling to know that almost everyone you know is intelligent in their own way.  Take for instance, band.  In Smithville, not everyone was exactly coherent with playing their instrument or reading music.  Not many people had the desire to play, nor did they have much desire to practice.  In college, it's different.  People understand rhythms, notes, how to play, different methods of playing, different styles of playing, how to play different instruments; just everything! People here have a passion to play, and it is just incredible.

I've met so many incredible people here.  It's just phenomenal.  I can't explain the feeling until you experience it for yourself.  Of course, this isn't to say that I'm not friends with those back from high school, because I am.  Again, there are just a small handful of people (like the ones who have subscribed to my blog) that I keep in contact with because they are true friends to me.  Despite distance, despite the past, despite collegiate passion, despite whatever, we still stick together.  And that in itself is pretty amazing.

Take-home lesson of the day: Keep those who endure through everything with you, close.

This would be a good time to reference a blog post made by my friend, Cheryl.  She had a post today that talked about the same thing in a sense, so I'd advise you to go read it! Here's a link to the post.

Until next time,

Corey

Monday, February 7, 2011

Need an SVN host?

I've been trying to find a decent Subversion host for the longest time, but most of them require a monthly contract for hosting, and they come with cool quirks that aren't very necessary for a student like me.  Yesterday, my partner introduced me to this cool site called Assembla.  This website offers completely free SVN hosting, for up to 2 GB of space.  They also have paid services, but at this moment in time they aren't very necessary to me.  SVN provides a great way to edit files and commit changes with other people if you're working in a team environment.  Check it out!

Until next time,

Corey