Wednesday, February 23, 2011

Scientific Programming and Non Computer Scientists

  Increasingly, scientists nowadays are required to code and test their own programs for their area of scientific research. Nature posted an article about recent trends and common pitfalls that scientists run into when they generate their own code. The article found that most scientists have no formal education when it comes to coding and most everything they know is self taught.
Statistics of polled scientists

  Various problems can arise from a lack of formal training while coding. Program breaking bugs may slow down the scientist more than a programmer. Even if the the programs works, the code may contain many small bugs that can alter the results in imperceptible ways, such as a research team out of Scrips Research Institute in California that had to redact 5 published papers because there was a flipped minus sign in the program that altered their output.

  Many scientists verify their code using validation testing, where the scientist would input known values with a known output and compares that to what the program outputs. This method will often miss tiny mistakes that make themselves apparent in other data. Many programmers use more rigorous testing methods, breaking code in to small chucks and testing each chuck individually, then testing how the chucks are put back together.

  Requiring verbose commenting is also a practice that many self taught scientists may ignore. A lack of comments makes understanding or changing code more difficult. A lack of comments also makes using code generated by someone else or someone else using your code confusing and nearly impractical. Encouraging scientists to form groups to share and talk about their programs can foster better communication between scientists and better code.
  Seeing as the class is filled with majors other than computer science, I had a few questions about your experiences with coding. How often are you asked to program in your other classes or job? What kind if training have you received regarding coding, such as classes or on the job training, or did you teach yourself? Would you like more classes about proper coding techniques or are they more of an annoyance than a help?

Wednesday, February 16, 2011

Algorithms in Action: Genetic Algorithm

  Artificial intelligence uses a great number of algorithms to perform various functions required by the AI. An algorithm is a structured set of logical instructions to reach some solution to a problem. One such algorithm is a genetic algorithm, a search heuristic that mimics heredity to explore various solutions based on the fitness, or correctness, of each element in a generation. Heuristics are experience based approaches that utilize previous knowledge for problem solving or learning, such as a rule of thumb or trail and error. BoxCar2D has been created to give a very good visual on how the genetic process works.
  Genetic algorithms follow a flow not unlike biological genetics to simulate evolution of a system. An initial population is created, generally randomly, and each element of that population is set through a fitness test. After these tests are run, a percentage of the population that is deemed most fit is selected and allowed to "breed." This select division of the population mix portions of their code together to generate a new population of children that will hopefully improve overall fitness of the new population. Along with the mixing of the genetic code the algorithm can introduce mutations to a percentage of the next generation, randomizing different segments of the code to introduce new traits and to prevent an evolutionary dead end.
BoxCar2D in action
  In the BoxCar2D simulation, the user can specify a few traits of the car and watch it evolve. The fitness testing of the car is based on how far the car can go and how fast. The best few are selected and pass on their traits to the next generation and the pattern continues. The user can affect the selected traits by up or down voting cars and changing the mutation rate, which can affect body shape, wheel size, or wheel placement. The graph that populates gives the user a look at how the generations do on average compared to the fitness threshold for it. Take it for a drive and see how it works.

Tuesday, February 8, 2011

TED Talks: Birth of the Computer

  The history of the computer goes well beyond the creation of basic electromechanical and electromagnetic computers developed in the early to mid 20th century. The science behind it was developed in the centuries preceding that, from relays to binary arithmetic. Historian George Dyson gave a TED talk about the long history of the computer along with a humorous look through some notebooks kept by early programmers.

  Check out the video here.

Monday, February 7, 2011

Security: A New Frontier

  In July of 2010, a new virus was discovered in Iran unlike any other the security world had ever seen. This virus, know as Stuxnet, was found on computers located within the Iranian nuclear power infrastructure. What amazed computer security experts was the sophistication and purpose of the virus. It was the first virus known to target and interfere with industrial infrastructure, specifically the nuclear plants in Iran. Symantec released a dossier detailing the methods used by the Stuxnet virus after reverse engineering the virus over a period of six months.
  The initial infection of the networks inside the plant most likely was caused by an infected thumb drive as the internal network is isolated from the internet to maintain compartmentalization and prevent remote hacking attempts. From there, using a set of different vulnerabilities found on the computers in the network, it would spread searching for very specific computers, computers that had a program called Step 7. This software is used in the programming of programmable logic controllers, or PLCs, which interface between a computer and machinery. Stuxnet would remain hidden on the computer until it was connected through Step 7 to a variable-frequency drive, a machine that controls the oscillations of the centrifuges that enriched uranium. These drives need to oscillate at very specific frequencies, Stuxnet would slow and speed up these oscillations to damage or destroy the centrifuge and prevent the uranium from being enriched.
  The Stuxnet virus is relatively harmless for normal computers, only seeking to infect new computers if the computer holds no relevance for its main purpose. The real threat is if Stuxnet becomes a blueprint for new generations of malware. Only time will tell if this is an anomaly in the security world or the beginning of a new era of cyber security.

Thursday, February 3, 2011

Man vs. Machine: Computer to play on Jeopardy!

  Starting on February 14th, Ken Jennings, Brad Rutter, and Watson will be playing a three day tournament with a million dollars on the line. Ken Jennings and Brad Rutter are the two top players of Jeopardy! fame, Jennings having the longest winning streak on the show and Rutter being the largest money winner after winning the Ultimate Tournament of Champions. But who is Watson? Not Sherlock Holmes' Dr. Watson, no, Watson is a supercomputer created by IBM.
  Watson is an advanced artificial intelligence designed to answer questions in a very human, very natural context. Using a complex system of algorithms to process natural language, hold, search, and retrieve terabytes of information, Watson can determine the answer to almost any question in a few short seconds. Outfitted with a buzzer, Watson is set to challenge Jennings and Rutter to an intense mind vs machine match on Jeopardy!
Ken, Watson, and Brad during a practice match on January 13th, 2011.

Self-Interview And Self Review

Today, I'll answer some general questions about ENIAC Beyond and its enigmatic creator.
What is the purpose of this blog?
  This blog was created for Communicating Science with the intent to create an effective channel of information about computer technologies.
Who is the imagined audience(s) of this blog?
   I would like this blog to reach those interested in computer technology. This interest could range from the history of computers through the generations, future development of computer technologies, a specific field in computer science such as artificial intelligence or robotics, or just a simple desire to learn more about the machines that have become so integrated in our daily lives.
Have my posts matched up with my purpose/audience?  What/who might I be overlooking in defining my purpose/audience this way?
  So far, my posts have been focused on the history of computers and has not gone into any great detail into any one field. This does little for those who already know quite a bit about computers and wish to know more about coming developments and technologies.
What can I do to encourage more reader participation with my blog?
  I could ask more questions to the reader. What do they think about this technology, or what would they like to come about from this research?
How can I expand my audience in this class?  Outside of this class?
  Networking inside the class will happen gradually as we work with each other. Since everyone in the class has created a blog for this class, associating a face with a blog will encourage each of us to read more and more of the blogs.
  Outside of the class, connecting with other similar blogs would be a good idea. Creating a network could help get my blog out there to a whole world of readers.
How would I characterize the tone of my blog?
  The overall tone of the blog so far has been educational with a few lighthearted comments thrown in.
What do I hope to get out of writing this blog?
  I hope that constant use of the blog will enable me to communicate ideas more easily. Moving ideas from my head to paper has always been more of a struggle than it should be. Hopefully this will ease the process and let my ideas flow more easily.
What would I like others to get out of it?
  A greater appreciation and understanding of computers around them.
What are the strengths of my blog/my blogging?
  Computer science is a field that I have been invested in for a long time. Many of its fields are very deep and I hope I can convey that sense to the readers.
What are the weaknesses?
  I have difficulty placing the ideas that float around in my mind onto the page. Often times I'll worry if what I'm writing about is interesting to those reading it or if it comes off an inane ramblings of someone trying to fill pages.
Have I used a deficit model in my writing, or something else?  How would I know?
   Possibly, my first few posts did little to encourage discussion and create a dialogue.
How have I characterized (implicitly or explicitly) science, engineering, and/or technology in my blog? 
  As a rapidly evolving frontier that has a lot of information and history behind it.
How have I characterized myself?
  So far, I haven't placed much personal tone on the posts so currently it is a bit stand offish, a lecturer perhaps.

Self Review

    After updating my blog, I would often go to some of the other blogs to see how they were doing, catching up on the posts and making comments. There, I'd see the level of activity that is going along with that blog. Some look about the same as mine while others look so prolific with their posting and comments that it makes me a little embarrassed at the progress of my own blog. But the point of this isn't to grade myself against other blogs, it is to see how well the blog is doing against the rubric, so let's take a look at some of the requirements.

Number and topic of posts
  So far, I've managed to keep up with the minimum number of posts but not by much. I've generated 5 posts with actual content for the blog. not really a staggering amount. The posts themselves have followed the requirements of what should be posted each week, such as framing a post or relating it to what we read in the book. This fits into the C range of the rubric. Hopefully I'll be able to write more than the minimum as the class goes on.

Content of posts
  My first content post was very long and full of information. I thought that was what every post should look like. I quickly moved away from that paradigm as it took me much too long to write so the proceeding posts were much shorter with more intent to engage the readers to post ideas or opinions about the topic. The posts are written coherently and does not talk down to the reader, it simply instructs. Grammar is not one of my stronger points but I try to keep the errors to a minimum. They pass the C requirement and possibly edge close to the B level.

Readers on my blog
  I've had a few comments on my posts so far, each I've tried to answer each quickly and clearly. The Watson post was fairly popular because it had to do with something people could actually witness instead of being told about. Hopefully more comments will pop up quicker in the future as everyone gets used to the format of the class. Meeting the C requirement and maybe close to the B.

Comments on other blogs
  Following other blogs is easy once you have a face with the name. I follow and post comments in Zach's Technology Complicated and Carlos' ScanMeIn because I sat and chatted with them the first few weeks of class. As the semester rolls along, hopefully I'll work with more people in the class and follow more blogs and post more comments. Around a C in total comments for other threads.

  I try to link as much as possible to the articles and videos I reference in my blog along with wikipedia pages for concepts or doodads that people may want a deeper background with. Try to use pictures where appropriate but I definitely could use more for my posts. Keeping up with a C requirements.

  It's been a rather slow start for the blog and keeping up with the requirements of the class is proving harder than I thought. I'm really hoping that as the semester goes on the blogging process becomes easier to do and I spend more time posting than worrying if something is interesting to the audience or not. I think the blog has meet the requirements for a C but that really isn't good enough. I need to kick it into a higher gear for the next evaluation and grow as a blogger.