Tuesday, August 25, 2015

Python vs. C#

When I was first given the task of creating the meta data extraction program, I was given a choice between Python or C# to code the program. I had to carefully weigh my options because I needed to consider which language would allow me to complete the task with the least complications. Before I made my decision I looked at the following factors: cross platform development, availability of  language features, syntax and familiarity. I required cross platform development because I knew from the beginning that I needed to create a program that would run on Windows and Unix based operating systems. Language features were important because there were certain directory navigation actions and functions that would be imperative to constructing my program. These functions needed to be in standard importable modules/libraries for the language that I chose. Syntax was important for very obvious reasons, I needed something that was easy for me to read.
Finally, familiarity was key because it would be a better for me to have experience with the language or a similar language. In my final decision, I chose Python because it had all these features and I had already coded smaller programs in Python. I have done things with C and Java but I felt that the leap to C# would slow down my progress with the task. Coupled with the fact that the General Use Machine Learning for Learning Library by Khanacademy was written in Python, it was an easy decision to make.

Sunday, August 23, 2015

Google is Better than Noodles

Upon completion of my data extraction program, it is vital that I reflect on what I have experienced in the process of its creation. Spending several hours typing and debugging code yield the fruition of my first self-designed program as an engineer and programmer. It pleases me to learn that I have the capability to design and realize a project but there is something more important that I have learnt. Google is the greatest invention conceived by the human race since fire. There were several times during my journey to complete my program that I would encounter enigmatic bugs and Google would come to my rescue. An example of this is when I was attempting to provide support for Windows on the data extraction program. I had researched the directory layout for Windows systems and discovered that looked something like this: C:\Users\fisiaka2. The Windows directory system uses back-slashes unlike Unix directory systems, which use front-slashes. To me this seemed like a simple implementation, ask the user what system they were using and choose the starting string based on that. Never in my wildest dreams did I expect a basic data type like a string to make me question my competence as a programmer. I received a plethora of errors no matter how I organized my strings for the Windows platform. Bewildered and frustrated, I googled the errors that IDLE (a Python Interactive Development Environment) was maliciously spewing at me. “Why do solutions to these errors always end up so simple?” I asked myself.  One user on Stackoverflow explained that backslashes are not considered to be regular characters in Python. And make them part of a string, the string must be modified to be a raw string! All I had to do was put the letter r before the quotation marks in the string and just like that Windows support had been provided.  So, this is a huge shoutout to Google for being so useful.

Saturday, August 1, 2015

The Internet As An Educational Tool: Accessibility Of Information On An Ever Growing Worldwide Web

    If sifting through numerous sites on the web has taught me anything, it's that dissemination of information is still very chaotic. You get a sense of that on social media and news outlets. But I'm reflecting on education. Take the example of computing and developer support. I previously assumed that information sources and forums such as Git Hub, MSDN, Stack Overflow and many more would bring a semblance of direction in exploring uncharted topics in computing and programming. I might have been a bit too hopeful. I often find myself unable to find information that should be relatively easy to obtain, and sometimes even information that I know exists on the web. The most recurring issue, however, is of information that falls short of my needs. While some of this can be chalked down to the imperfections of search engines (which are nonetheless immeasurably helpful), there is a more obvious reason: data on the web is the input of people. Information gets left out, mixed up, generalized to a fault, or specified to a limited cause. The problem that is then presented to you, the consumer of such information, is to unravel it. This in itself is a good thing, as there is no better way to gain mastery of it. But when pieces are left out, you can hardly piece together a coherent picture, much less a full one. Weigh in the proneness to error in unregulated (or badly regulated) sources and you have a picture which may not even be correct.  If you want to avoid this, you are then forced to limit your search to sites of established credibility or collaborative user input. The luxury of time needed to consume and vet information from all sources has long been noted- a single Google search returns millions of results, a small fraction of which is relevant to the purpose of the search.

    So what happens when you do find relevant information to your cause? One possibility is that you have exactly what you need. Another is that you get something that you can adapt to your need, based on your previous knowledge on the subject matter, based on common sense, or based on the directions of a contributor. A third possibility is that you find information that you cannot act on- information that is beyond your comprehension, or not applicable to your instance. For much of my use of the internet, I haven't had to entertain this third possibility; but as I have delved into topics of increasing complexity, it's become an all too common theme in both my research project and my education. Why?

   I have two reasons, the first being that some information on the internet comes without structure. In the different fields, there exists support in navigating processes. Such support is robust only at basic levels. Anything beyond that comes in bits and pieces. Let me introduce an example I have encountered in the research project I am currently undertaking: dupFinder is not well documented, perhaps because mostly experienced users of code analysis software have need for it, so it takes certain knowledge for granted, and the instructions for it's use that are available on the web are all duplicates of the original- scant, vague, and containing no reference to information that could be helpful in working up to the level of demystifying it. MSDN on the other hand, is well documented, because it is intended to be a reference point for developers of varying experience. But once you begin to leave the realms of programming that do not directly involve languages and their syntax, the extent of it's support is overreached, and the chaos of information takes over. The fall off in documented support as I progress from basic programming to more complex programming is quite sudden. The other reason is that there aren't as many people operating at the higher levels of complexity, and even fewer of that section contributing to these sources.
    As the internet grows, it's been heralded as the educational tool of the future, but if these conditions remain, and with more people turning to the internet to facilitate this process, won't it be as problematic as ever at the advanced levels? Or would the information supply at advanced levels boost? We can't leave this one to chance- we've got to start thinking critically about how we organize the data we add to the web.

Friday, July 17, 2015

Is technology hindering communication?

Am I the only person who's noticed that the rapid evolution of technology has been reducing interpersonal communication? Have you ever been walking down the street alone, noticed a person walking by the opposite way, and pulled your phone out to avoid making eye contact with that person? Have you ever been in a room full of strangers and, instead of introducing yourself and starting conversation, went to Instagram, Twitter, or Facebook for entertainment to pass the time? I am aware that the evolution of technology is to make life easier, and cell phones make it easier to stay connected and communicate with your friends, but will we ever meet new people if we continue this way? The generations after mine are more tech savvy than ever but I'm guessing their interpersonal skills are lacking. Kids these days substitute video games for board games, substitute NBA 2k for actually going to the basketball courts, etc.

The most important question here is will this cause the younger generations to lack interpersonal skills? Is this actually a problem that society faces today, or is it just society evolving as it has always done? Interpersonal, teamwork, leadership, and communication are four of the top five skills that employers look for, all of which are hard to acquire if kids never seek different opportunities because everything is already at their fingertips on the internet. Maybe I'm just sour that things are easier for the younger generations than they were for me. Or maybe it's an apparent problem with society today that be studied to improve technological uses and advancements for the better. Only time will tell.

Monday, June 22, 2015

My Journey Into New Territory: C#, Roslyn and APIs

    I've been trying to teach myself C#, mostly by playing the Code Hunt puzzles to learn its differences from C and C++, and writing basic programs. I did this in the name of speedy learning- something I previously considered my forte. As it turns out, this isn't a good way to get a solid foundation in any language, so writing more detailed code in C# for my research tasks has been rough. I've had to go back and relearn everything I've known about functions, objects, classes, overloading, and file i/o from C and C++, because besides the C in it's name, there isn't much in common with the other languages I know. The sunny side, however, is that I have now been exposed to completely new methods and system calls that implicitly perform a whole bunch of operations. I am now confident that when dealing with advanced tasks, C# has my back. I've also had to learn about file and directory manipulations, and from navigating and searching directories to creating and writing files I've gotten a lot of insight into the workings of installer packages. My conclusion is thus: C# is pretty neat. I think I'll make it my default language.
    In the past weeks I've had to learn about APIs, a new topic for me. An Application Program Interface, consists of building blocks for software. APIs determine connections and compatibility between software components, and you use them to create graphical user interfaces. An API gives you a set of routines and you make calls to the API to do what you want. They are used in just about every website you love, from Google Maps and YouTube to Twitter and Amazon. The API I will be using is the Code Hunt REST API, which essentially provides core data from the website, for example data from users such as their experience, and number of attempts for a given level. Every programmer is going to come into solid contact with APIs, so this is a very important experience. I'm going to get my hands dirty with the Code Hunt API as soon as I can figure out what calls I can make to it, and just how it can work with a compiler.
    When I first began coding I came across the .NET Compiler Platform known as Roslyn, a compiler platform for C# and Visual Basic. Because it's compilers come with APIs for code analysis, it will be a very useful tool in the weeks ahead. It is only available on Visual Studio 2015, so if you intend to use it, you have to download and install VS 2015 Community or Enterprise(Community is free but Enterprise costs $$$). I plan to use it to parse the user code obtained from the Code Hunt API. Looking at sample code that shows how the two work together is quite daunting. I can hardly get a sense of which calls are to the REST API and which code is for Roslyn. I will have to test the sample code to find out which is which. That will be my exploration for the immediate future. I'll let you know what I find.

Saturday, June 20, 2015

No Knowledge is Lost

Last summer I was still very new to the concept of coding, mostly because it was not offered at my high school. I had already taken a college course here, at the University of Illinois Urbana- Champaign, on programming with MATLAB. I received an A in the course but mostly because a friend of mine helped me through the class (Thank you, Nishad). I did not feel satisfied by the level that I was at by the end of the school year and so after talking other students and professors, it was recommended that I try learning code online. The site was highly recommended to me was Codecademy, I immediately signed up but I concede that I had my doubts that I could actually teach myself to code in a new language over the course of a summer. Codecademy offers several languages such as Javascript, Ruby and HTML. After doing some research online I decided that Python was the best language for me to begin learning. The Codecademy Python course is listed as a 13-hour long course and I had 3 months to learn the language. Slowly, but surely as I went through each lesson I felt more comfortable in the mystic realm that is coding. I began to think to myself, 'Anyone can teach themselves to code with enough interest', and I believe this to be true. Learning Python on my own helped me significantly in my sophomore year and made me love coding. Not only has it been a fun experience for me it has opened opportunities for me. Fast forward to my next summer and I am now writing code for research in the very language I knew nothing about a year ago. It is only now that I understand an adage my dad has reiterated to me: "No Knowledge is Lost".


File Extractor

More Progress

After two weeks of conducting research for developing tools for Code Hunt, I have gotten accustomed to writing code in C#. When I first exposed myself to the language, I noticed there is a ton of classes that are presets to Visual Studios; so I took the time to learn about all of the included classes that are apart of the program. After learning these new presets of classes, I was basically able to complete my first task of my project. For the tool that I am developing, so far it is a data extractor that functions on the interaction of the user. You have to specify which user and sector and level in order to extract the data. Right now I'm going to design the user interface of the program. I'm pretty excited about developing this tool, because it allows me to practice more get more programming experience. I would like to optimize the code since I am also taking a data structures course so I would like to make sure that my application does not create memory leaks. More updates on the program in the future!


Friday, June 19, 2015

Computer Science Prestige

Do students want to pursue Computer Science because it is a prestigious career field or because they truly have a passion for computer science? Are some people primed to become Computer Scientists their whole life while others have to try to adapt to fit the mold? It's true that certain people are predisposed to become computer scientists in their life. Overexposure to technology, advanced technical courses starting from middle school, tons of connections in the technology field from an early age. Their brain is being trained to think like a Computer Scientist which is why when they reach the "challenging" CS course, they're able to test out or pass with flying colors. What I'm interested in, however, is if it is possible to develop the mind of a Computer Scientist at later ages, after adolescence. Can you teach yourself to develop programs, read and understand code, or even wrap your mind around recursion after a certain age? I'm curious because I've noticed that even with the best of teachers and one hundred percent application of self, even the brightest people cannot come to terms with the jargon of developers or be able to think abstractly as one would. Now, directed at the huge and increasing number applicants to Computer Science programs per year, are you pursuing it because of the prestige or do you truly have a passion to write code day in and day out for the rest of your life? This blog is loaded with questions because these are things that I wonder daily and probably applies to a decent percentage of Computer Science applicants.

Nevertheless, Computer Science is a very promising and awarding field and congrats to those who are able to make it through. I hope to see a day where people can pursue what they love and not just do things for the money.

One Way To Not Ruin Your PC

    I would be using this blog post to talk about CodeHunt, and the research I just started doing on it but my laptop is damaged and I'm in the process of getting it repaired, so instead I'm going to explain what caused it's failure in the first place. Before the arrival of the blue screen to announce the breakdown of the system like a grim reaper signalling death, the computer was as reliable as any gadget out there. The technician who I took it to for diagnosing the problem and fixing it tells me my internal hard drive is corrupted. This doesn't seem like the worst possible case- a processor or motherboard could be more expensive to replace- but it's not that easy on the pockets. It also means I have to re-install Windows 8, and Microsoft being unable to recognize my product key means I may have to buy it again. So I'll want to keep this from happening in the future.
    You might be interested to know- how does a hard drive get damaged? Well I asked the technician, and he described the workings of a hard drive to me. It involves a disk with a pin resting lightly on it as the disk spins, similarly to a CD or gramophone player. The pin is what is responsible for reading data off the disk, as you may have guessed, but apply pressure to the pin while the disk is moving, and it scratches the disk. Eventually the scratches make it unreadable. That is one way to corrupt the data and render the hard drive unusable.
    Since the drive is still being accessed in sleep mode, the disk is still spinning. This is what enables you to continue using the PC without having to reboot the operating system. He further explained that many students put their laptops in sleep mode and place them in their backpacks and walk about with them. Then the laptops get knocked around a little here and there, sometimes a lot, and the disk gets scratched and it's lifespan gets reduced, since the disk wears from the pin contact in due time anyway. Guess who's guilty of doing exactly what he described? Guess who also will not be using sleep mode anymore while packing up to go to the next lecture?
    Hibernating seems like a better alternative, but I can tell from the sounds coming from the computer that the disk doesn't immediately stop spinning. So if I'm going to keep this from happening in the future, I'm going to err on the side of caution and shut down the system whenever I need to move the laptop. You can learn from my mistake; consider yourself warned!

Thursday, June 11, 2015

Lab of Things

Lab of Things is a platform developed for experimental research by Microsoft Research. Lab of Things or LoT for short uses connected devices such as Z-wave sensors or cameras in homes, offices and workspaces. What makes LoT so useful and uncompromising is, it makes data and code sharing very easy. This is due to the high interconnectivity of the devices and the use of an operating system called HomeOS. When I first came across LoT, I was not exactly sure of the full capacity of functionality. By watching the video on the LoT home website (http://www.lab-of-things.com) titled "New Hope for People Living with Paralysis", it became apparent to me that this was a concept that could change lives. This piqued my curiosity and I was hoping to see what I could do with LoT. I rushed to the page that specified how to download LoT and was directed to the installation requirements. Unfortunately, my journey began before it ended as my Macbook Pro certainly does not have Windows 8 or 7 on it. 

Computer Science Is All About Ideas

Computer Science is all about ideas. You don't need to be the fanciest programmer in the world or even the most efficient. All you need is a good idea to get you started and there are many resources to help you along the way once you get started. I know tons of people who have plenty of ideas but are stopped short when they are unable to find someone who can help bring their idea to fruition. That's exactly the kind of person I want to be. I want to be the guy that helps other people bring their ideas to fruition, exactly how they pictured it when it first came to their mind. I don't really have any experience besides the little HTML I did in my younger days and I haven't made any programs or mobile apps, yet. But I plan on taking the necessary steps to get the knowledge to get the job done. My short term goal in the realm of computer science is to make a program, a mobile app, anything that will positively impact the campus community and become a useful tool.

P.S. - It's crazy that you it is not necessary to be a Computer Science major to become a computer scientist. The introductory courses teach you the fundamentals - how everything a computer reads is binary, how to use bitwise operators, etc. However, you don't really need to know anything about these things to make programs or apps. Especially sine the development of templates such as Ruby on Rails.

Monday, June 8, 2015

Code Evolution + Lab of Things

What Was Researched

For these past two weeks, I have been researching how Lab of Things worked and started my first research project where I need to analyze a user's current input status on levels in Code Hunt.


In terms of Lab of Things, I found the concept of LoT very interesting and how powerful and convenient the program can be when implementing the source code. When I discussed LoT to some of my fellow peers outside of my research group, the first comparison that came up was Internet of Things. It is somewhat a similar concept to LoT in terms of interconnecting devices and having them communicate with each other to fulfill an objective or conduct an experiment. I know sometime in the future I need to try to come up with something that revolves around LoT, which can be very difficult to do. However, I see the program as a high risk and high reward situation. I was thinking of using LoT to control an Xbox Kinect device in some way since I do have access to this device. 

As for the code evolution project, here are my thoughts and expectations in concerns to the project. I think something that I would like to do with this project after extracting code versions to analyze a user's approach to a problem, is to create a data extractor from a user at certain level at real-time. As for the animation part, I believe that should not be an issue if I were to use ActionScript 3.0 in order to complete the animation portion. What will be interesting though is combining both tasks together since I never had to use two different languages to get an application complete. What I might do is make a testing program that will extract any data that I enter and delete. Once I get that portion complete, I will just use that same code in order to extract entered code from a Code Hunt level. Something else I may want to add on is small little details as in statements for progression of code such as "Deleted line 4" or "Added a loop". I think that will be somewhat helpful instead of just staring at someone's progress at punching in characters and delete them until they find a solution. So maybe a data log would be a nice add on.


I'm looking forward to this progress because I think it would definitely challenge me in terms of what I learned this past semester and some of the research I have been doing on other languages, plus figure out the discrepancies between C++ and C#. Also this is a chance for me to work on UI design since I would be making a code evolution tool. Planning on doing a lot of research on this portion of the project. In a couple of weeks I plan on having the code portion done and simply just need to get the UI finished and tidied up.