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".

-F

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!

-Pierre