Final thoughts

Well time flies it seems, it’s the end of the semester aleady. I’m not sure what I expected coming into the course but what really surprised me was that I seem to know more about the topic than I gave myself credit for,what the course really helped me with was putting alot of seperate concepts together and filling in many of the gaps.
 I learned something in all three portions of the course but the first third was probably the most enlightening. I already understood the concept of universal machines (namely from knowing about the church-turing thesis), I knew computers operated using binary code and could only perform basic functions at the lowest level (namely addition, subtraction, and comparison {>,<,=, and logical comparisons), I had played with logicgates a bit and knew what the parts of a cpu did. What the course filled in for me was encoding/decoding and examples of how a computer uses nothing but math to perform (seemingly) non math related tasks. the lesson on hardware also covered things I mostly already knew, what I got from that section was how to actually match up compatible components when building a computer. Computer programming came a bit easier than I had thought it would (and this aplies mostly to the java into course) mostly because I recognized a number of the concepts already(namely loops, if/switch statements, objects, etc), syntax continues to be annoying though (not because it is hard, I am jumping from one environment to another {often only for a day or two} and they all have their quirks such that I find myself having to relearn essentially the same thing many times even though I understand how to do so conceptually).

The latter two sections of the course were more familiar to me but I leanred a number of things there as well. For example it didn’t occured to me that most networks were (essentially?) serial and the protocol they used was largely to break up transmissions to make the network useable by multiple clients. I knew many of the basic concepts around security but learned a fair bit about other methods of attack (namely sql insertion and buffer overflows) and when working with robots I quickly learned how messy programming for physical environments could be (I think working with the mindstorms rather than the finch actually benefitted me more in this regard since there was alot more variability).

The societal implications of technology were for the most part all hings I had heard before, but it was nice actually being able to discuss them for once.

Virtual reality

My primary experience with a “virtual world” is in minecraft. What makes minecraft somewhat unique (I say somewhat beause minecraft borrowed many ideas and has itself since been heavily imitated) is that he world is almost 100% destructable/modifiable. This is accomplished by building the world entirely from voxels, one meter cubes of a variety of types. The terrain is procedurally generated by a terrain generation algorithm using a seed value ( the same value will always generate the same world, well at least until the algorithm is modified) that is either random or input by the user. Since the terrain is procedural the world can be nearly infinite (Nearly, it actually caps out at several times the surface area of Earth. Additionally storage becomes an issue long before then). The game is primarily a sandbox and allows the user to build a vast array of creations from simple buildings up to fully functional digital computers via “redstone” components. I’ve played the game exhaustively for over a year taking over a least a couple of square miles of terrain ( my work can be viewed here, it’s a multiplayer server but it is mostly mine ethansgames.info:8080 )

 

 

Update: I want to talk a litle about the general topic of virtual reality. If you consider any “virtual world” in a game o be virtual reality then we’ve advanced quite a bit. The worlds ceated by many games can be very compelling. But when most people think hear the term virtual reality they tend to think in tems of the interface, in this area I think we’ve seen decades with vitual no progress. The only really sucessful interfaace for years has been some kind of controller and a screen to display things, but that finally may be changing. People have been working on VR headsets for years but they were clunky, and mostly confined to the lab, some attempts were made to comercialize them (such as he virtual boy) but these were spectacular failures. But now we have seen some sucessful novel interfaces such as the wii and kinect, early augmented reality apps, and real progress towards headsets (such as google glasses and possibly even contacts a few years down the line) that are actually practical. This is still a long way from full immersion (arguably a hard problem in the same class as AI, Fusion power, molecular assemblers, etc) but the line is beggining to blur a bit.

Robotics 2 and AI

Artificial intelligence has proven illusive for a very long time and progress has been a bit sporadic. It would be easy to say that this is due to hardware constraints but I suspect the problem is as much if not more rooted in the fact that we don’t have a good understanding of how intelligence comes about in biological systems. We don’t understand exactly what problem we’re solving yet.

sucessful AI research often focuses on specific sets of tasks, this often works well enough  for problems whithin the scope of the program but of course fails spectacularly once you stray outside of it.  This remains a problem.

Some of the more exciting recent advances in AI over the last decade are the ability of robots to sucessfully navigate diverse environments, overcome physical obstacles, and recover from unexpected and severe shocks (much of this seems to have come out of DARPA ex. bigdog, petman, the grand challenge, but there are many examples) And considerable progress in parsing Natural language ( the most public examples of this are Watson and Siri *note,Siri is also based on technology that came out of a DARPA project. But this has been coming for the better part of the last decade, it is simply now becoming more commercialized)

 

Now on the robotics in the lab. The main lesson I took away from playing with our simple robots was that even with conceptually simple tasks the hardware introduced considerable complications. The logic for my robots was literally no more than a couple of sentences long, I spent 90% + of my time fiddling with the  frame, tweaking movement durations, calibrating sensors, and dealing with every little quirk. Logic is clean, the real world is messy.

Robotics.

First of all I’d like to say I didn’t get nearly as much time working really working on the obots as I would have liked. Day one went well enough, I immediately triedthe simplest thing I could think of (obstacle avoidance) and that worked quite well. We were going to try to improve on that with additional sensors but ran out of time.Day two was less productive as we got bogged down trying to assemble an entirely different robot.

 

my general understanding of robotics is that initially they primarily operated in a very strictly defind environment which worked fine on for example assembly lines where performing a single repetitive taskwas not only acceptable but desirable. The next step was robots that mapped thei environment and then determined how to navigate them, the roblem was this was relatively slow and resouce intensive. These approaches haven’t been abandoned but many newer robots operate in a more flexible fashion, they rapidly respond to a variety of stimuli (perhaps with weighted responses) to avoid obstacles and accomplish a task (reflexively, perhaps somewhat like the way an insect responds such as a roach fleeing from light or animals scatter in response to a loud noise). These methods aren’t utually exclusive of course, you could for example have a robot arm on an assembly line operating in a very strictly defined way until something occurs that causes it to respond reflexively to prevent an error.

Security

This week we discussed security. I was familiar with some of the material already but I found things like buffer overloads and sql insertion very interesting.

When people think about security the first thing alot of them tend to think about are passwords. people do try to crack passwords by brute force sometimes but it is perfectly doable (if a bit annoying) to have a password that isn’t practical to break. attempts to steal or guess the or circumvent a password are probably more common.

Most security threats probably don’t involve passwords at all though but various ways of exploiting vulnerabilities in software.  (I think it’s actually pretty hard to make sure a program can’r be subverted without making it less convenient to use and maintain. I’d say more on that but I’m a bit out of my depth here and am pretty likely to put my foot in my mouth)

SQL and the web

The way databases work wasn’t that surprising though the language for modifying them was useful. The way websites are built is coming together nicely, one thing I didn’t consider last week when talking about learning HTML is that knowing HTML is necessary when writing programs for websites. I think I get the gist of how all of this works though I don’t know enough about the specifics to do much yet (though I imagine this will make it easier to understand)

Writing Pages in HTML

I continue to be surprised by how much of the material I had already had some experience with on my own. Apparently I knew more about information technology than I assumed, but the course has been very useful for filling out the details.

I was already somewhat familiar with HTML from an article I wrote on a friends website (which I assume is long since buried) and many of the tags are message board staples. Writing pages in HTML is conceptually simple but seems somewhat tedious (likely due to not being  entirely familiar with the tags yet,and my toshiba laptop being slightly unresponsive and skipping random keys ), it entails constant tweaks and page reloads to figure out what looks right.

I imagine you could write or find any number of programs that simplify the process in various ways (message board software is just one example). The advantage of knowing HTML is that you have direct control.

Assembly

This week we covered the last of the basic computer concepts, how the computer actually manipulates numbers.

I kind of knew this already but the excercise did help me understand the flow more.

programming is helping me understand some of how the computer accomplishes things that are meaningful to us purely through math, though I’m sure I will only ever understand a portion of it (which fortunately is fine, I just have to know enough)

Building a computer

Ok to start off this is a computer I might consider building. What I wanted was something in about the $1000 range that was reasonably powerful now and left considerable room for upgrades later on. I am only building the tower (I would just reuse my peripherals) and I will just touch on the operating system

First the components

 

AMD Phenom II X4 975 Black Edition Deneb 3.6GHz Socket AM3 125W Quad-Core Desktop Processor HDZ975FBGMBOX http://www.newegg.com/Product/Product.aspx?Item=N82E16819103923&Tpk=hdz975fbgmbox $160

GIGABYTE GA-970A-D3 AM3+ AMD 970 SATA 6Gb/s USB 3.0 ATX AMD Motherboard http://www.newegg.com/Product/Product.aspx?Item=N82E16813128521 $90

GeIL EVO CORSA Series 16GB (4 x 4GB) 240-Pin DDR3 SDRAM DDR3 1866 (PC3 14900) Desktop Memory Model GOC316GB1866C9QC http://www.newegg.com/Product/Product.aspx?Item=N82E16820144491&Tpk=goc316gb1866 $135

EVGA 01G-P3-1460-KR GeForce GTX 560 (Fermi) 1GB 256-bit GDDR5 PCI Express 2.0 x16 HDCP Ready SLI Support Video Card http://www.newegg.com/Product/Product.aspx?Item=N82E16814130660&Tpk=01g-p3-1460-kr $190

Seagate Barracuda ST31000524AS 1TB 7200 RPM 32MB Cache SATA 6.0Gb/s 3.5″ Internal Hard Drive -Bare Drive http://www.newegg.com/Product/Product.aspx?Item=N82E16822148697&Tpk=st31000524as $140

ASUS Black 12X BD-ROM 16X DVD-ROM 48X CD-ROM SATA Internal Blu-ray Drive Model BC-12B1ST/BLK/B/AS – OEM http://www.newegg.com/Product/Product.aspx?Item=N82E16827135247 $58

COOLER MASTER Silent Pro M700 RS-700-AMBA-D3 700W ATX12V V2.3 SLI Certified CrossFire Ready 80 PLUS BRONZE Certified Modular Active PFC Power Supply http://www.newegg.com/Product/Product.aspx?Item=N82E16817171037 $100

COOLER MASTER HAF 922 RC-922M-KKN1-GP Black Steel + Plastic and Mesh Bezel ATX Mid Tower Computer Case http://www.newegg.com/Product/Product.aspx?Item=N82E16811119197 $105

—————————–

total $973

came out pretty close to my budget.

 

I started out by picking a processor, I went with AMD because it is both cheaper and lets you be far more flexible when selecting your motherboard. I went with a quad core phenom II from the last generation of cpus because I was just more comfortable picking something with an established track record and wasn’t sure which programs could really take advantage of  multiprocessing (it was a choice between higher clockspeed or more cores and I’d have to read up on benchmarks to figure out where that really matters), it was also cheaper. Next I selected a motherboard and here is where AMD pays off, the motherboard was an AM3+ socket which means that it is also compatible with the newest generation of chips if I wanted to upgrade later and supported large quantities of…. everything really. I picked the board specifically because it left me with an enormous ammount of room to upgrade over time if I wanted to. Now here is where I cheated a little, I selected the case and power supply that were offered in a bundle to go along with the board ( My only criteria for these components were providing room for everything and supplying sufficient power and connectors and I just didn’t want to pour through countless pages of cases and power supplies trying to match things up).

Next I selected RAM, the motherboard supported up to 32 GB which is more than I could imagine using right now, additionally the 8 GB sticks were quite expensive. I eventually settled on 4 4 GB sticks and probably upgrading to the 8 GB sticks later when they are cheap and the additional RAM is relevant to me. When selecting the video card I again went for something that wasn’t quite top of the line, the newest best cards always tend to cost something like $500 but if you shoot a little lower you can get a good card for $100-$200 (depending on your luck). The Hard Disk was just a relatively quick 1 TB drive and I finished off my parts list with a generic blue ray drive.

 

for assembly I’d likely need

-a selection of screwdrivers

-a flashlight

-something to ground myself with

-thermal paste

assembly should go something like this (I think)

-set the chip in the motherboard socket

-apply thermal paste then attach the heatsink/fan

-insert the ram

-punch out the relevant holes/slots in the case for all the components

-secure the motherboard in the case

-put in the power supply

-install the videocard, harddrive, & disk drive (secure them to the mounts in the case, hook them up to the motherboard & power supply if needed)

-test power/boot

-close the case

-install OS Drivers etc

For the operating system what I’d like to do is have the drive partitioned for both 32 and 64 bit versions of windows 7 (because I have some 64 bit compatability issues with a number of my programs). I will need to read up on how to actually do that.

 

A number of possible future upgrades

a solid state drive for system and program files (using the hard disk for general storage)

a second video card (I picked the card and board I did because it supports this)

going from 16-32 GB Ram

a newer processor

*currently I think additional cooling is uneeded but if I upgrade I might need more fans, If I overclock I will absolutely need more fans.

 

 

 

 

More on comp sci

this isn’t my first major, I originally majored in culinary arts. That surprised alot of people who knew me because they always suumed I would do something related to science or engineering. Well they were right, it wasn’t really a good fit for me in terms of the sort of work available and the lifestyle that went with it. One of the fields that people mentioned to me time and again was programming (or information technology in general). But I kept dismissing them outright because even though I had a certain interest in technology I found it intimidating (for reasons that are too complex to really go into here).

Well clearly I finally gave in. I mentioned before how I felt about introduction to infotech and that my programming course seemed like it would just be an unending slog, well it turns out it is starting to grow on me.

There are a couple of different things going on here.

programming of course contains ALOT of math and traditionally I was okay at math but found it boring and laborius. I had that common ugh when will I ever use this in real life problem that alot of people have when complaining about math. Well now I actually am using it, the annoying part is I have to recall a bunch of stuff I haven’t used in several years (it’s mostly still up there, I just have to shake tt loose), the difference of course is that this time it is actually doing something useful. Programming isn’t just math, it’s applied math; instead of mindlessly solving a formulaI am using it to accomplish a task. The math itself isn’t suddenly exciting now but learning the things I can do with it is genuinely interesting.

The second thing has to do with writing (and maybe communication in general). I enjoy reading as much as anyone but grew to loathe my english courses because I am terrible at writing. The problem was that I had real difficulty trying to make and convey a point (there were some problems with grammar and documentaion for say research papers but that was secondary to the real problem). What would happen is I would either write something very brief that would be misunderstood or I would go to extreme efforts to explain something which resulted in me veering off to another topic that I perhaps thought was necessary to fully understand the first topic and then to another and so on such that I might go on at length about something utterly unrelated to an orginal topic. This happened because I had a hard time judging how much supporting knowledge I should expect the reader to have on the topic and what I needed to explain personally. So even if I managed to avoid crippling writers block I’d wind up spitting out something that read like finnegan’s wake.

If I was writing something for myself though I was more comfortable writing bulleted lists. I didn’t need to worry about being too brief or what extra information to include because the brief statements had a known meaning to me.

programming is similar in certain regards, whithin the context of the programming language what you write is absolutely unambiguous, the computer will do exactly what you tell it to.

of course the downside is that the computer does EXACTLY what you tell it to.