This talk seems to be implying that this blog is a bad idea. Uh-oh!
I definitely do have a problem with sharing my goals too much with others before starting them, which results in me never getting started on a lot of things that I intend to do. I think the way that I can keep this blog interesting AND at the same time avoid falling into this trap is to only post about projects on which I’ve already started (or even finished, perhaps), and show my progress. So that’s what I’m going to go for, for now!
I haven’t posted in quite a while–things kind of blew up this week at work and it’s been taking up all my time. I can’t stand it when mundane things get in the way of creative pursuits that I feel could be so much more important in the grand scheme of things. But this eternal lament is the makings of an entirely different post; for now, I’ll try to stay on topic
I finished all of the Python goals that I listed in my previous post! Here’s a point-by-point update:
- I fixed my quiz code so that it allows multiple answers to each question, and also allows you to escape * characters, so you can ask questions that contain the * character without screwing things up. In the process, I commented and cleaned up my code a lot. It’s a lot better now, I think. Please download it and take a look, if you enjoy programming. Even if you don’t program, you can probably understand a lot of it if you’re curious.
- I solved all of the puzzles on CodingBat. It didn’t take too long. Maybe an hour or two, on a late night. I love the website and wish there were more puzzles there! Being able to program right into a webpage and then check your work immediately is so very satisfying.
- I’ve been working on a handful of other little projects in Python. Now that I’ve gotten the basics down, I feel like the floodgates are open, so to speak. I made a simple text adventure engine, some code to generate number spirals, and other things. (IF you want to see the code for these, I’d be happy to oblige. Just ask. I’ll need to clean it up a bit before sharing it though :-p)
- I have a few Python-powered website ideas percolating currently; I plan to write more about them here once they’ve been fleshed out a bit more in my mind. Once I have a web interface for the things I make, they’ll be a lot easier for you guys to appreciate–I’ll just be able to link them and then you can go and use them in your browser of choice.
A quick link that I found in the excellent neuroscience/AI blog neurodudes:
This article discusses some unorthodox (and perhaps counterintuitive) ways in which studiers can improve their recall, such as varying the environment in which you study material and not focusing on a single topic at a time.
I’m very interested in how learning/educational software can be optimized to improve data retention for humans who use it, so I find stuff like this very cool. I wonder if it would be possible to use findings like this in more interesting ways, like, for example, varying the UI (the fonts/background/general user experience) in a learning application every time the user uses it, so as to put the learning in a different context and let it build more neural pathways, rather than just running down the exact same ones as the last time the studying took place.
The article also discusses how frequent testing can help reinforce knowledge–a fact which surely hadn’t escaped the professors of several of my courses in college, which had daily quizzes on material covered the class before. But I wonder if there’s a way to make testing less intrusive, and thus more enjoyable for students? Or is it the very fact that testing itself can be stressful–thus inducing a mental state that is more likely to remember things, kind of like an extremely mild trauma–that makes it so effective for improving recall? (The article suggests as much, and I may have to agree.)
As advanced multimedia applications provide better and better capabilities for us to easily vary the environment in which and methods by which students (whether in school or out of it) learn, I think it’s important for us to keep trying new methods and adapting how we interface with the human brain in order to maximize retention. What do you think?
As a part of a larger learning project that I’ve been involved in, in which I installed Ubuntu Linux onto my home PC, and have been working on mastering several tools and techniques using it, I’m now working on learning the Python programming language in order to build quick, useful tools.
As a programmer who likes coding both as a part of my job and in my spare time, I have a lot of experience writing code, and have written at least basic programs in a few different languages: Java, Lisp, C#, PHP, and more than anything else, C/C++ for a lot of different platforms, including game consoles. For people who don’t know a lot about programming languages and what’s good for what, you may be surprised that there’s no language where you can do everything you’d possibly want to do in the easiest way, although a lot of language designers have tried to make this a goal for language design. I’ve ended up doing some very different things in different languages. Some examples:
- In college, I wrote a Java-based networked multiplayer version of the fantastic pattern-matching card game of Set. (I highly recommend the game if you’ve never tried it before). I designed and wrote the program all in one night, after several weeks of procrastination. The code was terribly messy but worked relatively well. Using Java helped me develop quickly, as its network and graphical interfaces are a lot more simply designed than other languages. Getting two computers to communicate with each other took about a half an hour. Thanks, Java!
- Again in college, I once used Lisp to write a routine that went through a big, linked data structure representing several major cities of France, linked together by roads, and used A* pathfinding to find the shortest path between any two cities. Lisp makes this easier than it might be in other languages, because it deals with linked lists of items in very manageable and intuitive ways.
- As a personal project, I’ve created websites that use PHP to manage a database of users and posts, letting users create webpages, comments, etc. from within other webpages (as opposed to having to use text editors or web development applications to build websites, which is SO 1990′s!). I also administrate a wiki called Lexipedia, which runs on the same PHP framework as Wikipedia and is pretty easy to modify and customize because I already know PHP. Since PHP is so close to the HTML level, it makes generating a webpage with code very easy. (It’s not the only language which does this, but it’s the one that I know best.)
I’ve given the following examples to demonstrate for those of you who don’t write code regularly how different the applications for different languages can be. If you’re already a programmer, I’m just preaching to the choir, I’m sure.
I started learning Python a few weeks ago out of a desire to write handy little scripts to make using my computer more convenient, and if possible, more fun. Python is a really cool language because it’s extremely fast to write, and can accomplish some really cool stuff without too much work on the programmer’s part. Plus, it’s been immensely fun to learn. I know there are a lot of other scripting languages I could be using (Perl and Ruby come to mind, and I’ve dabbled in both), but for now I’m going with Python.
Right now I’m going through Google’s excellent series of beginning Python courses online, which can be found here. Nick Parlante is a really good instructor–I wish my company had the sort of high-level, technical, professional development classes that Google does for their employees!
So now, for concrete goals!
- This might be cheating, but the first goal is one I’ve already accomplished: write a simple little quiz application, which I can use to quiz myself on stuff. If you have Python, you can grab the first draft of my code here, as well as a couple of simple, sample quizzes here and here. Also, I wrote a little bash script to pick a random question from a random quiz, and ask it to you (here). (Pretty fun to set this up as a cronjob, Unix/Linux people!)
- Since the first one was cheating, I have some changes I’d like to make to improve my quiz script. First, make it so that it accepts multiple possible answers to each question (right now, there’s only one possible correct answer for each). Second, make it so that the delimiter for the quiz file format can be escaped.
- Solve all of the Python exercises on Nick Parlante’s CodingBat code practice website. This shouldn’t be too tough and will give me good practice.
I’m not sure where I’m ultimately going with this; eventually there might be some grander project in the future here, or perhaps Python will just become another tool in my belt, and not a lot more. We’ll see where this takes me.
Anyway, I’m sure some of you are getting a little tired of technical projects for now, so the next project I’ll talk about will be related to home improvement! Look forward to it!
Reposted from one of my favorite math/CS blogs, The Endeavour:
“In times of change, learners will inherit the earth, while the learned will find themselves beautifully equipped to deal with a world that no longer exists.”
— Eric Hoffer
For the first project of many, I’m going to describe a project that I just started a few days ago.
First of all, you’re probably aware that electronic network traffic travels in packets through the mysterious ether. When you send someone an e-mail, you’re actually sending packets of data to an e-mail server somewhere, or if you’re using a web interface (which you probably are), you’re sending packets of data to a web portal, which is then probably sending more packets across the wire to a database server (or cluster of servers) somewhere where your e-mail data is stored. (This is a pretty high-level explanation, but I could really go on for hours about this stuff, so I’d better stop here so far as packets go.)
Packet capture is the practice (and in my opinion, the fine art) of intercepting network packets as they travel from point A to point B. Once these packets have been captured, they can be analyzed, and since all network communication takes place via these packets, you can get an accurate and complete picture of a network conversation. This is pretty cool; it’s a great way (and often, the only way) of troubleshooting network problems, and it feels sort of sneaky, like reading someone else’s mail.
To provide some context for this particular project, I’d like to describe my motivation for this particular endeavor, in as much detail as confidentiality for my job allows.
At my work, one of our service providers recently had a lot of server issues that required us to collect packet captures of network activity and send them on to the provider for analysis. I worked on getting a few captures on my own, as well as getting captures from other companies experiencing problems, but when I went to look at the captures I realized I didn’t really have a great understanding of this stuff. I want to get better; I want to level up!
So I purchased a book through my work, and downloaded the great, free utility Wireshark in order to work on my packet capture abilities. I already have a beginner’s understanding of how to do packet capture and analysis, and have done it a few times for work and school, but I want to get some advanced knowledge in packet analysis.
So now, because I like bullet points: concrete project goals!
- Read/work through the entirety of Practical Packet Analysis
- Analyze and understand at least 10 different packet captures that I take myself of various network conversations. A few ideas I had: downloading a blog entry, FTPing a small file, a telnet session, an SSH session, a login into Nintendo Wi-Fi Connection using a Nintendo DS, and downloading news posts with Thunderbird.
I have many ongoing projects, but this is the first one I’ll be discussing here. I’ll update this blog when I’ve made substantial progress on my concrete goals!