<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;Dk4MSHYyfyp7ImA9WhRWFkQ.&quot;"><id>tag:blogger.com,1999:blog-4804358099675558422</id><updated>2012-01-04T08:36:29.897-08:00</updated><category term="Python" /><category term="flash" /><category term="education" /><category term="installation" /><category term="PS3" /><category term="OpenInkpot" /><category term="Hanlin V3" /><category term="ActionScript 3" /><category term="SVG" /><category term="UI" /><category term="Windows" /><category term="speaking app" /><category term="C++" /><category term="game development" /><category term="GSoC" /><category term="toy" /><category term="name this object" /><category term="free service" /><category term="MMO" /><category term="code" /><category term="origami" /><category term="contest" /><category term="story" /><category term="recommendation" /><category term="computer science" /><category term="USF" /><category term="personal" /><category term="logic" /><category term="Javascript" /><category term="programming" /><category term="random" /><category term="tutorial" /><category term="UX" /><category term="Wii" /><category term="college" /><category term="XML" /><category term="Pygame2" /><category term="commentary" /><category term="gaming" /><category term="Google" /><category term="industry" /><category term="meta" /><category term="engineering club" /><category term="terminal" /><category term="marketing" /><category term="port OI to uClibc" /><category term="idea library" /><category term="project" /><category term="ubuntu" /><category term="website creation" /><category term="open-source" /><title>Welcome to Obscurity</title><subtitle type="html">A weblog.</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://www.welcometoobscurity.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://www.welcometoobscurity.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/4804358099675558422/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Evan Kroske</name><uri>http://www.blogger.com/profile/08996350355032069067</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://4.bp.blogspot.com/-Ir9RvEpWn1w/TZz9TCNBeQI/AAAAAAAAAUo/VaY1tXxg9kg/s220/better-usf-headshot.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>73</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/welcome2obscurity" /><feedburner:info uri="welcome2obscurity" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;Dk4MSHc7cSp7ImA9WhRWFkQ.&quot;"><id>tag:blogger.com,1999:blog-4804358099675558422.post-7252994256200125831</id><published>2012-01-04T08:36:00.000-08:00</published><updated>2012-01-04T08:36:29.909-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-04T08:36:29.909-08:00</app:edited><title>A perfect life</title><content type="html">&lt;p&gt;A recent conversation about the future prompted me to reconsider my definition of success. I still want to create a product that improves the lives of millions of people and earns me millions. However, I don't need that level of success to support my ideal lifestyle. I require only four things:&lt;/p&gt;&lt;dl&gt;&lt;dt&gt;Wife and kids&lt;/dt&gt;&lt;dd&gt;My life won't be complete without a mate to share my life with and children to teach and learn from.&lt;/dd&gt;&lt;dt&gt;Work I love&lt;/dt&gt;&lt;dd&gt;I need to spend my working hours doing something I enjoy for a purpose I believe in. Doing otherwise would be a waste of my precious time.&lt;/dd&gt;&lt;dt&gt;Three day work week&lt;/dt&gt;&lt;dd&gt;My wife and I need to be able to support our family's lifestyle working only 8 hours per day three days per week. That way, at least one of us will be home with the children every day. Until all of my children enter school, I want to spend more than half of my time with them. There's no more valuable gift I can give my children than my time and attention.&lt;/dd&gt;&lt;dt&gt;Ability to relocate&lt;/dt&gt;&lt;dd&gt;I want to move my family to a new area every two years. My own family's frequent relocations gave me a broader perspective on life and helped me develop my independence. I want to bestow the same benefits on my children. Also, I love to live in new places.&lt;/dd&gt;&lt;dt&gt;No commute&lt;/dt&gt;&lt;dd&gt;I refuse to waste hours of my life every week driving or riding to an office. Either I'll work close to home or I'll work at home.&lt;/dd&gt;&lt;/dl&gt;&lt;p&gt;I was surprised when I realized that this was all I needed from my life. I feel like I have more freedom in constructing my life than I had.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4804358099675558422-7252994256200125831?l=www.welcometoobscurity.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/welcome2obscurity/~4/W01Tu2fJt6k" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4804358099675558422/posts/default/7252994256200125831?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4804358099675558422/posts/default/7252994256200125831?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/welcome2obscurity/~3/W01Tu2fJt6k/perfect-life.html" title="A perfect life" /><author><name>Evan Kroske</name><uri>http://www.blogger.com/profile/08996350355032069067</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://4.bp.blogspot.com/-Ir9RvEpWn1w/TZz9TCNBeQI/AAAAAAAAAUo/VaY1tXxg9kg/s220/better-usf-headshot.jpg" /></author><feedburner:origLink>http://www.welcometoobscurity.com/2012/01/perfect-life.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUAMQn8ycSp7ImA9WhRQGUQ.&quot;"><id>tag:blogger.com,1999:blog-4804358099675558422.post-7791312482248711420</id><published>2011-12-15T17:09:00.001-08:00</published><updated>2011-12-15T17:09:43.199-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-15T17:09:43.199-08:00</app:edited><title>Learning to think and learning to do</title><content type="html">&lt;p&gt;All knowledge falls into one of two categories: practical and theoretical. The key to a successful career in computer science is balancing your interest in both.&lt;/p&gt;&lt;h2&gt;Theoretical knowledge&lt;/h2&gt;&lt;p&gt;I consider any topic which is independent of a specific programming language or platform to be theoretical knowledge. Theoretical knowledge encompasses abstract CS topics, such as data structures and algorithms; the underlying mathematical concepts, such as graph theory, combinatorics, and automata; and the hard problems of CS, such as computer vision, artificial intelligence, etc. These are powerful tools for solving hard problems and building things which haven't been possible before.&lt;/p&gt;&lt;p&gt;However, becoming an expert on a theoretical topic won't get you any closer to building a successful iOS app or web service. Without practical knowledge, you'll be dependent on your partner, team, or organization to allow you to accomplish your goals. You won't be able to implement your ideas on your own.&lt;/p&gt;&lt;h2&gt;Practical knowledge&lt;/h2&gt;&lt;p&gt;Practical knowledge is the stuff you need to know to bring your idea to the world. It's the connection between abstract ideas and useful products. Practical knowledge includes programming languages, APIs, applications, etc. Mastery of a few practical topics allows you to quickly build something which others can touch and use. Practical knowledge also brings independence: you can start a business if you have something to sell.&lt;/p&gt;&lt;p&gt;However, practical knowledge isn't enough to change the world or even make a competent programmer. Without theoretical knowledge, you will waste time reinventing algorithms and trying to solve impossible problems. In addition, your plans will be bounded by the extent of your theoretical knowledge. &lt;/p&gt;&lt;p&gt;In practice, it's impossible to work in Computer Science or programming without some knowledge from the opposite field. Nevertheless, you can't reach your potential in either field without seeking a balance theoretical and practical knowledge.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4804358099675558422-7791312482248711420?l=www.welcometoobscurity.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/welcome2obscurity/~4/kuNnawnNBcU" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4804358099675558422/posts/default/7791312482248711420?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4804358099675558422/posts/default/7791312482248711420?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/welcome2obscurity/~3/kuNnawnNBcU/learning-to-think-and-learning-to-do.html" title="Learning to think and learning to do" /><author><name>Evan Kroske</name><uri>http://www.blogger.com/profile/08996350355032069067</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://4.bp.blogspot.com/-Ir9RvEpWn1w/TZz9TCNBeQI/AAAAAAAAAUo/VaY1tXxg9kg/s220/better-usf-headshot.jpg" /></author><feedburner:origLink>http://www.welcometoobscurity.com/2011/12/learning-to-think-and-learning-to-do.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C04CQHY7fCp7ImA9WhRSEEo.&quot;"><id>tag:blogger.com,1999:blog-4804358099675558422.post-6387631242353523787</id><published>2011-11-11T20:25:00.001-08:00</published><updated>2011-11-11T20:26:01.804-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-11T20:26:01.804-08:00</app:edited><title>Landing the perfect research internship</title><content type="html">&lt;p&gt;If you're considering grad school (and you should), you owe it to yourself to experience research for yourself before you make a decision. Spend a summer working on a research project at a university, and you'll know whether research is for you. Below, I share my advice for finding and landing your ideal research internship.&lt;/p&gt;&lt;h2&gt;1. Find your internship&lt;/h2&gt;&lt;p&gt;The first step to getting the perfect internship is &lt;em&gt;finding&lt;/em&gt; the perfect internship &lt;em&gt;for you&lt;/em&gt;. You need to consider things like location, pay, required skills. Pick at most ten internships to pursue further; if you apply for many internships, you won't have the time to form relationships with your potential researchers.&lt;/p&gt;&lt;p&gt;One great place to find research internships is the National Science Foundation. They fund REU (research experience for undergraduates) programs at schools across the country. You can find a list of participating schools on &lt;a href="http://www.nsf.gov/crssprgm/reu/"&gt;their website&lt;/a&gt;. Here's a &lt;a href="http://cra.org/ccc/uro-zone.php"&gt;list of organizations offering undergraduate research opportunities&lt;/a&gt;. Some universities offer independent research internships which they fund themselves. If you have a particular university in mind, try exploring their website to see if they offer independent internships.&lt;/p&gt;&lt;h2&gt;2. Research the positions&lt;/h2&gt;&lt;p&gt;This is the most important step in the process: learning about the positions. For each position, you must determine whether you want it and whether you're qualified to fill it.&lt;/p&gt;&lt;p&gt;First, sift through all the research opportunities available through each internship and find some which interest you (or don't bore you). This is difficult because you don't know enough about the research domain to make an informed decision. Keep cutting until you're left with a group of projects you can see yourself working on.&lt;/p&gt;&lt;p&gt;Second, read some research papers about the projects in which you're interested. Projects' websites rarely have the information you'll need to make your decision. You need to determine whether you're still interested in the project and whether you have the skills necessary to contribute to it. This process also gives you more information about the researchers. &lt;/p&gt;&lt;h2&gt;3. Make contact&lt;/h2&gt;&lt;p&gt;Before you even write your application, you should start a conversation with the researchers you're hoping to work for. Establishing a connection before the application process is the best way to improve your chances.&lt;/p&gt;&lt;p&gt;Contacting a researcher at a large university directly, however, can be a challenge. Sending an email is like playing the lottery: the odds are good that you will never receive a response. You can increase your chances by contacting the researcher's grad students, secretary, or postdoc students first. Other possible approaches are calling the researcher and sending them a letter. The keys to success are creativity and persistence.&lt;/p&gt;&lt;p&gt;&lt;em&gt;Protip:&lt;/em&gt; If your researcher has a postdoctorate student, contact them first. They have more time than the researcher or their graduate students.&lt;/p&gt;&lt;p&gt;Your first email must be "perfect": free of spelling, grammatical, and cultural errors. The goal of this email is to give the recipient a reason to reply and give them no excuse to ignore it. It must be as short as possible, conveying only the core of your message. Exclude flattery, greetings, and anything else that isn't vital to your message. Don't attach your résumé; that's disrespectful of your recipient's time.&lt;/p&gt;&lt;p&gt;You have several options for the content of your message. You could ask a question about a project or ask whether the researcher is looking for a summer research intern. You may include some brief statement of qualification if it's relevant, but it's not necessary. &lt;/p&gt;&lt;p&gt;Below is the first message that I sent to Dr. Roy Campbell, my researcher for my &lt;a href="http://www.welcometoobscurity.com/2011/09/my-summer-internship.html"&gt;internship at the University of Illinois at Urbana-Champaign&lt;/a&gt;:&lt;/p&gt;&lt;blockquote&gt;  &lt;p&gt;&lt;strong&gt;Subject:&lt;/strong&gt; ITI Undergraduate Internship question&lt;/p&gt;&lt;p&gt;I'm planning to apply for the ITI Undergraduate Internship program, and my first task is finding the professors with whom I would like to work. If I were to spend the summer working with you on your research, what would I be doing? I'm particularly interested in your research on p2p distributed operating systems and ubiquitous computing. Would I be able to choose my topic of research? Thanks for the help.&lt;/p&gt;&lt;p&gt;Evan Kroske&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;It has twice the lines that it should have, and it contains two dumb questions. However, it demonstrates my communication skills gives him a reason to respond. In that respect, it does its job.&lt;/p&gt;&lt;h2&gt;4. Do the work&lt;/h2&gt;&lt;p&gt;Once a researcher has responded to one of your messages, start reading everything you can find about their research and the surrounding field, starting from the most recent. Pick a interesting project from each researcher, but don't become attached to it. The more knowledgeable you are about a researcher's work, the more professional and motivated you'll sound to them. Plus, it's good practice for your internship.&lt;/p&gt;&lt;h2&gt;5. Write your application&lt;/h2&gt;&lt;p&gt;Writing an application is probably the least important step in the application process. However, it's also the step most likely to keep you from an internship. Your application must be "perfect" in the same sense as your first message, but it need not be a literary achievement. It should tell the reviewer why you would be a productive research intern. Anything irrelevant to that goal should be excluded.&lt;/p&gt;&lt;p&gt;&lt;em&gt;Protip:&lt;/em&gt; Don't list "communication" or "writing" as one of your skills. If you can write, it will show in your application.&lt;/p&gt;&lt;h2&gt;6. Follow up&lt;/h2&gt;&lt;p&gt;If the website for your internship program doesn't mention a decision date, plan to contact the program administrator two or three weeks after the application deadline to ask about the status of your application. This step has two purposes. First, it helps you learn the decision on your application sooner. Second, it keeps the process moving. Without supervision, the application process could &lt;a href="http://www.welcometoobscurity.com/2011/07/my-epic-internship-quest.html"&gt;stall for months&lt;/a&gt;.&lt;/p&gt;&lt;h2&gt;Conclusion&lt;/h2&gt;&lt;p&gt;A research internship is a great way to learn about research and the grad school experience. They key to landing one for yourself is finding the right one and connecting with your potential researcher. Good luck!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4804358099675558422-6387631242353523787?l=www.welcometoobscurity.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/welcome2obscurity/~4/bLEEsBAVf68" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4804358099675558422/posts/default/6387631242353523787?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4804358099675558422/posts/default/6387631242353523787?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/welcome2obscurity/~3/bLEEsBAVf68/landing-perfect-research-internship.html" title="Landing the perfect research internship" /><author><name>Evan Kroske</name><uri>http://www.blogger.com/profile/08996350355032069067</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://4.bp.blogspot.com/-Ir9RvEpWn1w/TZz9TCNBeQI/AAAAAAAAAUo/VaY1tXxg9kg/s220/better-usf-headshot.jpg" /></author><feedburner:origLink>http://www.welcometoobscurity.com/2011/11/landing-perfect-research-internship.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUcMSX89eCp7ImA9WhdUEEQ.&quot;"><id>tag:blogger.com,1999:blog-4804358099675558422.post-7757077933474787936</id><published>2011-09-26T20:11:00.001-07:00</published><updated>2011-09-26T20:11:28.160-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-26T20:11:28.160-07:00</app:edited><title>My Summer Internship</title><content type="html">&lt;p&gt;Last summer, I researched cloud network security through an &lt;a href="http://www.iti.illinois.edu/edu/undergraduate_interns.html"&gt;internship&lt;/a&gt; with the &lt;a href="http://www.iti.illinois.edu/"&gt;Information Trust Institute&lt;/a&gt; at the &lt;a href="http://illinois.edu/"&gt;University of Illinois at Urbana-Champaign&lt;/a&gt;. It was the best summer I've ever had.&lt;/p&gt;&lt;p&gt;First, it was exhilarating and terrifying to move to a new city with only the things I could carry on a plane. I spent my first weekend in Urbana acquiring the things I needed to live: food, towels, toiletries, and a bicycle. Once I had settled in, I found Urbana-Champaign to be a wonderful place to live. When I spent time exploring the city, it rewarded with delicious restaurants, fascinating architecture, and stimulating culture. Exposure to &lt;a href="https://www.facebook.com/pages/Black-Dog-Smoke-Ale-House/92205772871"&gt;Black Dog's&lt;/a&gt; barbeque pork sandwiches and brisket burnt ends and &lt;a href="http://www.yelp.com/biz/murphys-pub-champaign"&gt;Murphy's Pub's&lt;/a&gt; hamburgers has destroyed my appetite for the substandard barbeque and burgers I've found here. Every day I wish I were back in Urbana.&lt;/p&gt;&lt;p&gt;Second, I enjoyed working on something substantial. My job was to research computer network security, devise a new network security system, build a prototype, and document the work. The research time gave me an excuse to learn how networks work. The planning stage introduced me to the process of brainstorming and planning with a team. In the prototyping phase, John and I managed to assemble a test network with 32 virtual machines, build two prototype security enforcers, and test our prototypes on the test network. To document our work, we created two posters and wrote a research paper which will be published by the &lt;a href="http://www.mobilab.unina.it/RACOS2011/Workshop_Program.html"&gt;International Workshop on Resilience Assessment of Complex Systems 2011&lt;/a&gt;. I'm proud of what I accomplished during the summer.&lt;/p&gt;&lt;p&gt;Third, I was honored and delighted to befriend my colleagues and fellow interns. It was a thrill to work closely with John, my partner on the project. We spent hours together slinging code, debugging the test bed, and writing posters and papers. I also enjoyed eating lunch with the other ITI interns Tuesdays and Thursdays at the internship seminars. On the weekends, my posse and I would meet to go bowling or eat dinner. We also had a few events at Europa House for all the summer iterns: a Walking Dead marathon, movie nights, and potlucks. The things I miss most about last summer are the friends I made. However, I expect to meet them again in the coming years on the cutting edge of industry and computer science research.&lt;/p&gt;&lt;p&gt;In summary, my summer internship at UIUC allowed me to live in a new city, research cutting-edge technology, and make new friends. Next summer will be even better.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4804358099675558422-7757077933474787936?l=www.welcometoobscurity.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/welcome2obscurity/~4/tQ7HBrSGPyM" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4804358099675558422/posts/default/7757077933474787936?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4804358099675558422/posts/default/7757077933474787936?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/welcome2obscurity/~3/tQ7HBrSGPyM/my-summer-internship.html" title="My Summer Internship" /><author><name>Evan Kroske</name><uri>http://www.blogger.com/profile/08996350355032069067</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://4.bp.blogspot.com/-Ir9RvEpWn1w/TZz9TCNBeQI/AAAAAAAAAUo/VaY1tXxg9kg/s220/better-usf-headshot.jpg" /></author><feedburner:origLink>http://www.welcometoobscurity.com/2011/09/my-summer-internship.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUEMQHg5fyp7ImA9WhdSEEk.&quot;"><id>tag:blogger.com,1999:blog-4804358099675558422.post-6450617437464322035</id><published>2011-07-18T19:45:00.000-07:00</published><updated>2011-07-18T19:48:01.627-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-18T19:48:01.627-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="college" /><category scheme="http://www.blogger.com/atom/ns#" term="story" /><category scheme="http://www.blogger.com/atom/ns#" term="GSoC" /><title>My epic internship quest</title><content type="html">&lt;p&gt;Here's the story of how I spent four months of my life locating and applying for internships.&lt;/p&gt;&lt;p&gt;My initial plan was simple. Spend the summer doing a research internship at a major CS university to simulate pursuing a postgraduate degree. I had been receiving contradictory advice on whether I should attend grad school or go straight to work once I finish my Bachelor's degree. I thought I would settle the issue by experiencing research first-hand.&lt;/p&gt;&lt;p&gt;I applied to two REU programs: the &lt;a href="http://www.iti.illinois.edu/edu/undergraduate_interns.html"&gt;Information Trust Institute&lt;/a&gt; at the University of Illinois at Urbana-Champaign and the &lt;a href="http://www.eecs.berkeley.edu/Programs/ugrad/superb/superb.html"&gt;Summer Undergraduate Program in Engineering Research at Berkeley – Information Technology for Sustainability&lt;/a&gt; at the University of California Berkeley. I sent seven inquiries by email to professors from both programs, receiving two positive responses. I spoke with Dr. Roy Campbell, a researcher at UIUC, and Leo Meyerovich, a grad student working with Dr. Ras Bodik at UC Berkeley. I submitted my applications successfully around the middle of February, although my UC Berkeley application was a day late.&lt;/p&gt;&lt;p&gt;During the application period, I stumbled upon another internship opportunity I couldn't ignore. &lt;a href="http://www.fogcreek.com/"&gt;Fog Creek Software&lt;/a&gt; in New York, NY was looking for a summer intern to help them build tools for programmers. The idea of working in New York under the venerable Joel Spolsky was irresistible. I didn't think I had a chance, so I drafted an email of application and sent it within two days. I didn't want to waste too much time on a fantasy.&lt;/p&gt;&lt;p&gt;When Fog Creek contacted me to set up a phone interview, I was both surprised and elated. I solved a few programming challenges from Project Euler to prepare for the programming examination, and I tried to &lt;a href="http://www.welcometoobscurity.com/2011/01/why-i-want-to-work-at-fog-creek.html"&gt;anticipate the interview questions&lt;/a&gt;. Unfortunately, I forgot about most important question, "What programming projects have you done recently?" When the interviewer asked that question, my confidence was shattered, and I slipped into panic mode. During my programming test, I forgot how to use static variables, writing some terrible C. However, I spent my next class mentally debugging it, and  I rewrote, tested, and resubmitted a not obviously broken version with a brief explanation later that evening.&lt;/p&gt;&lt;p&gt;At the end of the interview, I was told that I would be told whether I got the job within a couple days. I didn't hear back for about a week. At the time, I thought that meant that everybody at Fog Creek was too busy to bother sending me a rejection email, but in retrospect, I was probably a finalist who wasn't ruled out until the end.&lt;/p&gt;&lt;p&gt;Around this time I realized that what I wanted was an industry internship, so I refocused my efforts on finding an internship with a big tech company. I started gathering links and working on my resume.&lt;/p&gt;&lt;p&gt;Early in March, I heard about the &lt;a href="http://cascadiafellowship.org/"&gt;Cascadia Fellowship&lt;/a&gt;, a program that matched technical students with Seattle-based startups. I answered a couple questions and provided a statement of intent. The following week, I received a mass-mailed rejection, in error, and then a personalized request for my resume and couple programming puzzles. Everything was due the following day. However, before the deadline, they sent me another impersonal rejection email. I ignored it and &lt;a href="http://www.welcometoobscurity.com/2011/03/lessons-from-gonzo-programming.html"&gt;submitted my code before the deadline&lt;/a&gt; (barely). When I hadn't heard from them for a week, I asked if the second rejection was sent in error. I never received a response.&lt;/p&gt;&lt;p&gt;It was late in March now, and I didn't have an offer. I had narrowed down my list of major tech companies offering summer internships to Facebook, Google, Microsoft, and IBM. I missed the unpublished deadline for the Facebook software engineering internship, so that left Google, Microsoft, and IBM. I wrote a spartan list of reasons for Google to hire me and submitted my application. I filled out Microsoft's on-rails application, and submitted that next. Finally, I answered IBM's primarily experience-related application and turned it in.&lt;/p&gt;&lt;p&gt;After all this, I had only to apply to one more program: the Google Summer of Code. GSoC was my ultimate fail safe. I was accepted last year, and I felt that I had the process figured out. Unfortunately, I didn't have much time left to apply; I hadn't even looked at the list of mentoring organizations when the student application period began. I had eleven days to find at least two interesting organizations, pick interesting summer projects, and submit a detailed proposal to each, plus another two weeks to convince the organizations that I could complete my chosen projects.&lt;/p&gt;&lt;p&gt;I chose two organizations: &lt;a href="http://code.learningu.org/"&gt;Learning Unlimited&lt;/a&gt;, producers of a sophisticated Django-based web app; and &lt;a href="http://www.sencha.com/company/"&gt;Sencha Labs&lt;/a&gt;, developers of the JavaScript InfoVis Toolkit. I thought that LU was a long shot, but I found the project more interesting than the JIT. I split my application time between designing a student registration system for LU and fixing bugs for JIT. I had some &lt;a href="http://www.welcometoobscurity.com/2010/01/snowflake-svg-developer-release.html"&gt;independent experience&lt;/a&gt; with JavaScript graphics, and the project I chose was well within my capability, but I got cocky. I didn't spent nearly enough time learning about the core library; I simply assumed I would get the project. I worked hard on the LU project because I wanted it more and it was far more demanding. In the end, I was rejected by both projects because I didn't focus on either one. If I had dedicated myself to either project, I would've gotten it.&lt;/p&gt;&lt;p&gt;After the GSoC application deadline but before the decision date, I received a surprising message from UIUC. Dr. Masooda Bashir informed me that two researchers were interested in working with me over the summer, Dr. Klara Nahrstedt and Dr. Roy Campbell. Dr. Nahrstedt asked me for my resume, but Dr. Campbell remained silent. I sent him an email asking what he would be working on over the summer, but I didn't receive a response.&lt;/p&gt;&lt;p&gt;At this point, I was frantic. I hadn't received a positive response from any of the companies I had applied to, and when I didn't receive a decision from Drs. Campbell and Nahrstedt, I assumed that I hadn't made it into the highly competitive ITI internship. I tried to start over, looking for less exclusive internships, because I didn't want to waste my summer taking classes.&lt;/p&gt;&lt;p&gt;It was the beginning of May now. I had almost given up, but I decided to ask Drs. Campbell and Nahrstedt for final decisions. When I asked them whether they were still interested in working with me, Dr. Nahrstedt told me that I hadn't made the cut, but Dr. Campbell responded with an enthusiastic "Yes!" It was almost too late to file the paperwork, but Dr. Bashir came through for me. I received the official offer letter May 4.&lt;/p&gt;&lt;p&gt;Now, I've spent half my summer working at the University of Illinois at Urbana-Champaign, and I couldn't be happier. You could say that all my hard work paid off, or you could say that I got lucky at the last second. Either way, I'm just happy that I won't have to submit any more applications until the fall.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4804358099675558422-6450617437464322035?l=www.welcometoobscurity.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/welcome2obscurity/~4/INIDNAQhK84" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4804358099675558422/posts/default/6450617437464322035?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4804358099675558422/posts/default/6450617437464322035?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/welcome2obscurity/~3/INIDNAQhK84/my-epic-internship-quest.html" title="My epic internship quest" /><author><name>Evan Kroske</name><uri>http://www.blogger.com/profile/08996350355032069067</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://4.bp.blogspot.com/-Ir9RvEpWn1w/TZz9TCNBeQI/AAAAAAAAAUo/VaY1tXxg9kg/s220/better-usf-headshot.jpg" /></author><feedburner:origLink>http://www.welcometoobscurity.com/2011/07/my-epic-internship-quest.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0YNRno6fip7ImA9WhZVEUQ.&quot;"><id>tag:blogger.com,1999:blog-4804358099675558422.post-3744732786581439106</id><published>2011-03-20T21:57:00.000-07:00</published><updated>2011-05-23T18:06:37.416-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-05-23T18:06:37.416-07:00</app:edited><title>Lessons from gonzo programming</title><content type="html">&lt;p&gt;I recently experienced writing code under a looming deadline for the first time. After applying for the &lt;a href="http://www.cascadiafellowship.com"&gt;Cascadia Innovation Fellowship&lt;/a&gt;, I received a request for my r&amp;eacute;sum&amp;eacute; and two code samples due the following day.&lt;/p&gt;&lt;p&gt;The request described two pieces of code and asked me to implement them. I started immediately, dispatching the first with little effort and working on the second for a couple hours in the evening. Then, I unwisely decided to stay up to finish my second sample. I &amp;ldquo;finished&amp;rdquo; the code, &amp;ldquo;tested&amp;rdquo; it, and, satisfied, went to bed.&lt;/p&gt;&lt;p&gt;The following day, I worked on my r&amp;eacute;sum&amp;eacute; for most of the day, looking at the code again late in the evening. A simple test revealed a fundamental flaw in my algorithm, and I stayed up until 2:30 AM rewriting the algorithm, submitting my code only 30 minutes before the deadline.&lt;/p&gt;&lt;p&gt;I feel pretty good about my final code, but I didn't enjoy staying up late and coding frantically.&lt;/p&gt;&lt;p&gt;I learned a few valuable lessons worth sharing:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;Test thoroughly.&lt;/strong&gt; If you're not trying to break your code, you're not testing.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Prioritize.&lt;/strong&gt; My r&amp;eacute;sum&amp;eacute; contained virtually no information I hadn't already submitted through my original application, yet I spent precious hours polishing it obsessively. I knew that the quality of my code would be the most important factor in my application, but I left my coding until the last minute.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Use the obvious solution first.&lt;/strong&gt; When I first considered the second piece of code, I skipped over the obvious solution in favor of a &amp;ldquo;faster&amp;rdquo; and &amp;ldquo;more general&amp;rdquo; solution that didn't work. I made the classic mistake of trying to solve a recursive problem non-recursively without first implementing the intuitive solution.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Use git.&lt;/strong&gt; After identifying the fatal flaw in my original code, I attempted to solve it with a set of small changes throughout the program. After working on the algorithm for about an hour, I rediscovered the obvious solution which was based on my original code. Thanks to git, it was easy for me to stash my changes in a new branch and resume work on my original version.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Don't use C++.&lt;/strong&gt; Because the prompt implied that solutions should be written in Java, I started working in C++ and asked if that would be OK. Instead, I should have asked if I could use Python: both of the challenges would have been almost trivial in Python.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Never be without &lt;em&gt;Programming Pearls&lt;/em&gt;.&lt;/strong&gt; I left my copy at my dorm when I went home for spring break, so I couldn't refer to it to help me solve the problem. From now on, it's not leaving my side.&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4804358099675558422-3744732786581439106?l=www.welcometoobscurity.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/welcome2obscurity/~4/TwenxPG33pI" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4804358099675558422/posts/default/3744732786581439106?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4804358099675558422/posts/default/3744732786581439106?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/welcome2obscurity/~3/TwenxPG33pI/lessons-from-gonzo-programming.html" title="Lessons from gonzo programming" /><author><name>Evan Kroske</name><uri>http://www.blogger.com/profile/08996350355032069067</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://4.bp.blogspot.com/-Ir9RvEpWn1w/TZz9TCNBeQI/AAAAAAAAAUo/VaY1tXxg9kg/s220/better-usf-headshot.jpg" /></author><feedburner:origLink>http://www.welcometoobscurity.com/2011/03/lessons-from-gonzo-programming.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0MFQXkyeyp7ImA9WhZVEUQ.&quot;"><id>tag:blogger.com,1999:blog-4804358099675558422.post-206734345182331952</id><published>2011-02-12T20:40:00.000-08:00</published><updated>2011-05-23T18:10:10.793-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-05-23T18:10:10.793-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="UX" /><category scheme="http://www.blogger.com/atom/ns#" term="UI" /><title>Thoughtfully designed electric razor</title><content type="html">&lt;object width="320" height="266" class="BLOGGER-youtube-video" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" data-thumbnail-src="http://i.ytimg.com/vi/lbK81oVys3o/0.jpg"&gt;&lt;param name="movie" value="http://www.youtube.com/v/lbK81oVys3o?f=user_uploads&amp;c=google-webdrive-0&amp;app=youtube_gdata" /&gt;&lt;param name="bgcolor" value="#FFFFFF" /&gt;&lt;embed width="320" height="266" src="http://www.youtube.com/v/lbK81oVys3o?f=user_uploads&amp;c=google-webdrive-0&amp;app=youtube_gdata" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;
&lt;p&gt;When I plugged in my inexpensive electric razor to charge, I pleasantly surprised by this delightful animation. I deeply respect this level of attention to detail. Whoever created this animation has converted at least one Remington user into a loyal Remington customer.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4804358099675558422-206734345182331952?l=www.welcometoobscurity.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/welcome2obscurity/~4/lZIhVUbjjPE" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4804358099675558422/posts/default/206734345182331952?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4804358099675558422/posts/default/206734345182331952?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/welcome2obscurity/~3/lZIhVUbjjPE/thoughtfully-designed-electric-razor.html" title="Thoughtfully designed electric razor" /><author><name>Evan Kroske</name><uri>http://www.blogger.com/profile/08996350355032069067</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://4.bp.blogspot.com/-Ir9RvEpWn1w/TZz9TCNBeQI/AAAAAAAAAUo/VaY1tXxg9kg/s220/better-usf-headshot.jpg" /></author><feedburner:origLink>http://www.welcometoobscurity.com/2011/02/thoughtfully-designed-electric-razor.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0QNR3c4fyp7ImA9WhZVEUQ.&quot;"><id>tag:blogger.com,1999:blog-4804358099675558422.post-9143784859955693273</id><published>2011-01-29T22:36:00.000-08:00</published><updated>2011-05-23T18:09:56.937-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-05-23T18:09:56.937-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="personal" /><title>Why I want to work at Fog Creek</title><content type="html">&lt;p&gt;I'm applying for a summer internship at &lt;a href="http://www.fogcreek.com/"&gt;Fog Creek Software&lt;/a&gt;, a well-respected software company in NYC. I'm going to be interviewed by one of their developers next Tuesday, so I've been trying to anticipate the questions I will be asked and give them some thought. Tonight, I asked myself a simple but important question: "Why do you want to work at Fog Creek?"&lt;/p&gt;&lt;p&gt;First, I thought I wanted the experience. An internship at a reputable software company would look great on my r&amp;eacute;sum&amp;eacute;. I briefly considered whether I was in it for the &lt;a href="http://www.fogcreek.com/careers.html"&gt;office&lt;/a&gt;. Then, I thought that I wanted to prove to the world that I could build software, not just make little toys and read big books. However, I quickly realized the true source of my motivation: I want to work at Fog Creek to prove to &lt;em&gt;myself&lt;/em&gt; that I can build software.&lt;/p&gt;&lt;p&gt;Until now, my most substantial project has been my work on OpenInkpot last summer. Assembling a cross-toolchain is highly technical work, but it's not a creative act. I didn't design the structure of the toolchain; I just put the pieces together.&lt;/p&gt;&lt;p&gt;I've tried to prepare myself for a career as a software developer by reading books on software structure and construction, but I know that's not enough. I won't know that I'm ready until I've built something real.&lt;/p&gt;&lt;p&gt;To become a software developer, I must develop software.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4804358099675558422-9143784859955693273?l=www.welcometoobscurity.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/welcome2obscurity/~4/Jv4rT6OI9EA" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4804358099675558422/posts/default/9143784859955693273?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4804358099675558422/posts/default/9143784859955693273?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/welcome2obscurity/~3/Jv4rT6OI9EA/why-i-want-to-work-at-fog-creek.html" title="Why I want to work at Fog Creek" /><author><name>Evan Kroske</name><uri>http://www.blogger.com/profile/08996350355032069067</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://4.bp.blogspot.com/-Ir9RvEpWn1w/TZz9TCNBeQI/AAAAAAAAAUo/VaY1tXxg9kg/s220/better-usf-headshot.jpg" /></author><feedburner:origLink>http://www.welcometoobscurity.com/2011/01/why-i-want-to-work-at-fog-creek.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0QCRH0yeCp7ImA9WhZVEUQ.&quot;"><id>tag:blogger.com,1999:blog-4804358099675558422.post-7436790950865050335</id><published>2011-01-21T19:00:00.000-08:00</published><updated>2011-05-23T18:09:25.390-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-05-23T18:09:25.390-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="education" /><category scheme="http://www.blogger.com/atom/ns#" term="computer science" /><title>I was dead wrong</title><content type="html">&lt;p&gt;More than a year ago, I posted &lt;a href="http://www.welcometoobscurity.com/2009/10/programming-is-more-than-pointers-and.html"&gt;Programming is more than pointers and recursion&lt;/a&gt;, arguing that CS students don't need to learn about pointers and recursion. I wrote it in response to &lt;a href="http://www.joelonsoftware.com/articles/ThePerilsofJavaSchools.html"&gt;The Perils of JavaSchools&lt;/a&gt;, a 2005 blog entry in the legendary programming blog Joel on Software. I realize now that I was dead wrong, and I've decided to explain why (not only because someone from &lt;a href="http://www.fogcreek.com/"&gt;Fog Creek Software&lt;/a&gt; will be evaluating my blog.)&lt;/p&gt;&lt;p&gt;My central argument was that since pointers and recursion aren't often used in the software development industry, they aren't necessary topics for CS curricula. I was high on Python and Design Patterns at the time and fervent in my belief that all problems could be solved with straightforward, readable code. What I failed to realize is that if you &lt;em&gt;can't&lt;/em&gt; (not don't) understand pointers and recursion, you can't have a meaningful career in programming.&lt;/p&gt;&lt;p&gt;Understanding pointers means more than memorizing the illogical C pointer syntax. It's an understanding of the difference between reference and value, between creating lightweight pointers and copying massive objects. Any programming job that doesn't require you to think about whether a variable should be a pointer or a value probably doesn't provide any challenge or variety. It certainly wouldn't provide any job security or marketable skills. Pointers are fundamental to programming.&lt;/p&gt;&lt;p&gt;Likewise, recursion is more than replacing a function call with the function's body; it's an illustration of the encapsulation of functions. Recursion is a stepping stone to first-class functions and closures. These aren't academic knick knacks with no practical application; they are powerful features in many popular languages.&lt;/p&gt;&lt;p&gt;In summary, Spolsky was right and I was wrong. Pointers and recursion are powerful tools that belong in the belt of every software developer. If you can't learn them, stick to HTML and CSS.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4804358099675558422-7436790950865050335?l=www.welcometoobscurity.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/welcome2obscurity/~4/HT-SqVjhJD4" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4804358099675558422/posts/default/7436790950865050335?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4804358099675558422/posts/default/7436790950865050335?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/welcome2obscurity/~3/HT-SqVjhJD4/i-was-dead-wrong.html" title="I was dead wrong" /><author><name>Evan Kroske</name><uri>http://www.blogger.com/profile/08996350355032069067</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://4.bp.blogspot.com/-Ir9RvEpWn1w/TZz9TCNBeQI/AAAAAAAAAUo/VaY1tXxg9kg/s220/better-usf-headshot.jpg" /></author><feedburner:origLink>http://www.welcometoobscurity.com/2011/01/i-was-dead-wrong.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0QAQHg-cCp7ImA9WhZVEUQ.&quot;"><id>tag:blogger.com,1999:blog-4804358099675558422.post-2850858778756871787</id><published>2010-09-08T21:11:00.000-07:00</published><updated>2011-05-23T18:09:01.658-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-05-23T18:09:01.658-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="personal" /><category scheme="http://www.blogger.com/atom/ns#" term="meta" /><title>Where I have been</title><content type="html">&lt;p&gt;I haven't written an entry on this blog for about a month and a half. I stopped posting because I was unsatisfied with the quality of my entries. In a word, they sucked.&lt;/p&gt;&lt;p&gt;I realized this after listening to &lt;a href="http://www.43folders.com/2009/03/25/blogs-turbocharged"&gt;149 Surprising Ways to Turbocharge Your Blog With Credibility!&lt;/a&gt;, Merlin Mann's and John Gruber's talk at the &lt;a href="http://sxsw.com/interactive"&gt;SxSW Interactive&lt;/a&gt; conference. Their advice to aspiring writers is simple: write well about topics which interest you.&lt;/p&gt;&lt;p&gt;Before now, I was putting frequency before quality, partially due to a foolish commitment to write one blog post a week during this year. I was writing pointless updates because I didn't have the time to create anything meaningful. Now I know that was a mistake. I am not a blogger; I'm a college student who enjoys writing. &lt;br /&gt;
&lt;/p&gt;&lt;p&gt;Of course, this isn't the end of Welcome to Obscurity; it's the end of the shallow updates that have composed most of this blog's content for the last year. I will be writing infrequent, in-depth, polished entries about things about which I care.&lt;br /&gt;
&lt;/p&gt;&lt;h2&gt;Other news&lt;/h2&gt;&lt;p&gt;Although I haven't been updating this blog lately, I have been blogging elsewhere. I started &lt;a href="http://lifeattheu.tumblr.com/"&gt;Life at the U&lt;/a&gt; to share my college experience with my family. It's been a huge hit within my social circle, so I've been updating frequently, sometimes multiple times per day.&lt;br /&gt;
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4804358099675558422-2850858778756871787?l=www.welcometoobscurity.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/welcome2obscurity/~4/KovpZkVu9Hw" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4804358099675558422/posts/default/2850858778756871787?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4804358099675558422/posts/default/2850858778756871787?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/welcome2obscurity/~3/KovpZkVu9Hw/where-i-have-been.html" title="Where I have been" /><author><name>Evan Kroske</name><uri>http://www.blogger.com/profile/08996350355032069067</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://4.bp.blogspot.com/-Ir9RvEpWn1w/TZz9TCNBeQI/AAAAAAAAAUo/VaY1tXxg9kg/s220/better-usf-headshot.jpg" /></author><feedburner:origLink>http://www.welcometoobscurity.com/2010/09/where-i-have-been.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkMFRH0-cSp7ImA9WxFaGEg.&quot;"><id>tag:blogger.com,1999:blog-4804358099675558422.post-7022426716808381928</id><published>2010-07-22T20:51:00.000-07:00</published><updated>2010-07-22T21:13:35.359-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-07-22T21:13:35.359-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="personal" /><category scheme="http://www.blogger.com/atom/ns#" term="meta" /><title>New look, same direction</title><content type="html">&lt;p&gt;
Well, I've finally ditched my custom template for a generic Blogger template. The reason? I wanted to use Blogger's native share toolbar, and my template didn't support it. I simply don't have the time to wade into the HTML and add the feature, so it's time to bid farewell to originality and let Blogger handle my layout. That is, until I find the time to switch to &lt;a href="http://www.tumblr.com/"&gt;Tumblr&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;
In addition, I've disabled comments. This blog isn't meant to be a noisy discussion by a large group; it's a platform for me to talk about what I find interesting: myself, my projects, and other things. If you'd like to respond to one of my posts, feel free to by posting an entry on your blog or sending me an email at &lt;a href="mailto:e.kroske@gmail.com" title="My email address"&gt;E.Kroske@Gmail.com&lt;/a&gt;. I'd love to hear from you!
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4804358099675558422-7022426716808381928?l=www.welcometoobscurity.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/welcome2obscurity/~4/00g_veLjpck" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4804358099675558422/posts/default/7022426716808381928?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4804358099675558422/posts/default/7022426716808381928?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/welcome2obscurity/~3/00g_veLjpck/new-look-same-direction.html" title="New look, same direction" /><author><name>Evan Kroske</name><uri>http://www.blogger.com/profile/08996350355032069067</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://4.bp.blogspot.com/-Ir9RvEpWn1w/TZz9TCNBeQI/AAAAAAAAAUo/VaY1tXxg9kg/s220/better-usf-headshot.jpg" /></author><feedburner:origLink>http://www.welcometoobscurity.com/2010/07/new-look-same-direction.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CE4EQHs6fip7ImA9WxFUFUs.&quot;"><id>tag:blogger.com,1999:blog-4804358099675558422.post-4214226059456631372</id><published>2010-06-26T07:21:00.002-07:00</published><updated>2010-06-26T07:35:01.516-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-06-26T07:35:01.516-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="toy" /><category scheme="http://www.blogger.com/atom/ns#" term="recommendation" /><title>Neocubes mini review</title><content type="html">&lt;p&gt;
I can't remember what I did before I carried a Neocube around with me. I must have waited quietly at doctor's offices, staring blankly at the walls or perhaps skimming the ancient magazines. Now, I simply pull my Neocube out of my pocket and begin constructing a polyhedron. If I don't have long to wait, I'll wrap the chain of spheres into a solid tetra- or icosahedron. If the other waiters are glancing at watches and complaining about the wait, I'll attempt a modular dodecahedron or a wireframe truncated icosahedron. I can fight off boredom for hours when I have my Neocube with me.
&lt;/p&gt;

&lt;p&gt;
However, I'm not the only one to enjoy playing with a Neocube. Every person to which I've shown my Neocube, from little kids to my own Grandpa, has been mesmerized. Some people make jewelry, some construct flat shapes, and some just like coiling the chain of magnets, but everybody enjoys playing with them. My extended family liked playing with my Neocube so much that I purchased a big batch for gifts.
&lt;/p&gt;

&lt;p&gt;
Neocube is one of the best pocket-sized time-waster I've ever seen, comparing favorably in wait-time compression with the iPhone and iPod Touch. If you want to have a 'cube of your own (and send me some pocket change), you can buy one from &lt;a href="http://www.amazon.com/gp/product/B001EM1SEA?ie=UTF8&amp;tag=welcotoobscu-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=B001EM1SEA"&gt;Amazon&lt;/a&gt; for only $16 (at last check). Don't miss this deal!
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4804358099675558422-4214226059456631372?l=www.welcometoobscurity.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/welcome2obscurity/~4/O5FGlIQvTBw" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4804358099675558422/posts/default/4214226059456631372?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4804358099675558422/posts/default/4214226059456631372?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/welcome2obscurity/~3/O5FGlIQvTBw/neocubes-mini-review.html" title="Neocubes mini review" /><author><name>Evan Kroske</name><uri>http://www.blogger.com/profile/08996350355032069067</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://4.bp.blogspot.com/-Ir9RvEpWn1w/TZz9TCNBeQI/AAAAAAAAAUo/VaY1tXxg9kg/s220/better-usf-headshot.jpg" /></author><feedburner:origLink>http://www.welcometoobscurity.com/2010/06/neocubes-mini-review.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUQGQno9eip7ImA9WxFUFE8.&quot;"><id>tag:blogger.com,1999:blog-4804358099675558422.post-8124067865388102564</id><published>2010-06-24T15:09:00.000-07:00</published><updated>2010-06-24T16:48:43.462-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-06-24T16:48:43.462-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="college" /><category scheme="http://www.blogger.com/atom/ns#" term="USF" /><title>You. Will. Be. Cancelled!</title><content type="html">&lt;p&gt;
The words popped up every few sentences, turning the already repetitive lecture into a free-form poem of dullness. The comptroller missed no opportunity to remind students &amp;mdash; in broken English &amp;mdash; that there would be consequences for missed late payments, including cancellation and late fees. He loved to use the phrase "It's gonna cost ya!" to emphasize that the comptroller's office would be more than happy to take your money.
&lt;/p&gt;

&lt;p&gt;
The &lt;abbr title="University of South Florida"&gt;USF&lt;/abbr&gt; comptroller's presentation dragged on for an eternal fifteen minutes before the incident. The comptroller asked a simple question about the repercussions of a missed deadline, expecting to answer it a second later. Instead, a student in the balcony shouted "You. Will. Be. Cancelled!" and laughter rippled through the auditorium.
&lt;/p&gt;

&lt;p&gt;
Suddenly, the atmosphere of the lecture changed completely. When the comptroller concluded the answer to his own question with "You &lt;em&gt;might&lt;/em&gt; be cancelled," the audience burst into laughter. He immediately recognized his newfound catchphrase and began using it to spice up his presentation. He loosened up, and the students began listening intently to wait for the next catchphrase. When he concluded his presentation with "Don't get cancelled!" the entire audience applauded loudly.
&lt;/p&gt;

&lt;p&gt;
In my opinion, this dynamic lecture was the highlight of the whole orientation.
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4804358099675558422-8124067865388102564?l=www.welcometoobscurity.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/welcome2obscurity/~4/sj34_HLvdYc" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4804358099675558422/posts/default/8124067865388102564?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4804358099675558422/posts/default/8124067865388102564?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/welcome2obscurity/~3/sj34_HLvdYc/you-will-be-cancelled.html" title="You. Will. Be. Cancelled!" /><author><name>Evan Kroske</name><uri>http://www.blogger.com/profile/08996350355032069067</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://4.bp.blogspot.com/-Ir9RvEpWn1w/TZz9TCNBeQI/AAAAAAAAAUo/VaY1tXxg9kg/s220/better-usf-headshot.jpg" /></author><feedburner:origLink>http://www.welcometoobscurity.com/2010/06/you-will-be-cancelled.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEQDQXc9eip7ImA9WxFWEks.&quot;"><id>tag:blogger.com,1999:blog-4804358099675558422.post-2755764600390316628</id><published>2010-05-30T17:07:00.000-07:00</published><updated>2010-05-30T17:39:30.962-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-30T17:39:30.962-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="port OI to uClibc" /><category scheme="http://www.blogger.com/atom/ns#" term="Hanlin V3" /><title>Porting OpenInkpot: the Hanlin V3</title><content type="html">&lt;p&gt;Ten days ago, I received device that will monopolize my summer: the Hanlin V3. The performance of this e-reader &amp;mdash; or rather the lack thereof &amp;mdash; is the primary motivation for my project. According to the OpenInkpot community, this device has a slow processor and little memory. My project's goal is to reduce the memory footprint of OpenInkpot in order to improve its performance on devices like the V3. I decided to purchase the V3 to better empathize with the benefactors of my project and to help motivate myself. If I want a faster e-reader OS, I must build one for myself!&lt;/p&gt;

&lt;p&gt;I'd like to write about the V3 soon, but I haven't used it enough to make a fair assessment. Thus far, it appears that the device deserves its reputation for sluggishness; however, I won't speculate on the source of the poor performance. I'll write more later.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4804358099675558422-2755764600390316628?l=www.welcometoobscurity.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/welcome2obscurity/~4/4Gn-KqEAr84" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4804358099675558422/posts/default/2755764600390316628?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4804358099675558422/posts/default/2755764600390316628?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/welcome2obscurity/~3/4Gn-KqEAr84/porting-openinkpot-hanlin-v3.html" title="Porting OpenInkpot: the Hanlin V3" /><author><name>Evan Kroske</name><uri>http://www.blogger.com/profile/08996350355032069067</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://4.bp.blogspot.com/-Ir9RvEpWn1w/TZz9TCNBeQI/AAAAAAAAAUo/VaY1tXxg9kg/s220/better-usf-headshot.jpg" /></author><feedburner:origLink>http://www.welcometoobscurity.com/2010/05/porting-openinkpot-hanlin-v3.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUQMQ387eSp7ImA9WxFQFUw.&quot;"><id>tag:blogger.com,1999:blog-4804358099675558422.post-5743964391237471359</id><published>2010-05-10T11:42:00.000-07:00</published><updated>2010-05-10T11:49:42.101-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-10T11:49:42.101-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="port OI to uClibc" /><category scheme="http://www.blogger.com/atom/ns#" term="OpenInkpot" /><category scheme="http://www.blogger.com/atom/ns#" term="Google" /><category scheme="http://www.blogger.com/atom/ns#" term="GSoC" /><title>GSoC project status update</title><content type="html">&lt;p&gt;
Now that I've finished this semester's final exams, I've started working on my GSoC project: &lt;a href="http://welcome2obscurity.blogspot.com/2010/04/port-openinkpot-to-uclibc.html"&gt;porting OI to uClibc&lt;/a&gt;, the featherweight C standard library. I'll post project updates periodically, saying what I'm doing and relaying what I've learned. I promise they won't all be this boring.
&lt;/p&gt;

&lt;p&gt;
The first step of my project is adding my new architecture, Linux based on uClibc, to dpkg, the foundation of the Debian package management system. dpkg plays a part in packaging code, installing applications, and compiling binary packages; it's a very important tool. Before I start modifying dpkg, I plan to learn about dpkg and the relevant build systems; I'm starting by reading the &lt;a href="http://www.debian.org/doc/maint-guide/"&gt;Debian New Maintainer's Guide&lt;/a&gt;.
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4804358099675558422-5743964391237471359?l=www.welcometoobscurity.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/welcome2obscurity/~4/siJmfCn1l54" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4804358099675558422/posts/default/5743964391237471359?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4804358099675558422/posts/default/5743964391237471359?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/welcome2obscurity/~3/siJmfCn1l54/gsoc-project-status-update.html" title="GSoC project status update" /><author><name>Evan Kroske</name><uri>http://www.blogger.com/profile/08996350355032069067</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://4.bp.blogspot.com/-Ir9RvEpWn1w/TZz9TCNBeQI/AAAAAAAAAUo/VaY1tXxg9kg/s220/better-usf-headshot.jpg" /></author><feedburner:origLink>http://www.welcometoobscurity.com/2010/05/gsoc-project-status-update.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0ICRHc9fSp7ImA9WxFQEUo.&quot;"><id>tag:blogger.com,1999:blog-4804358099675558422.post-8864547664640806372</id><published>2010-05-06T11:44:00.000-07:00</published><updated>2010-05-06T11:46:05.965-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-06T11:46:05.965-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="personal" /><category scheme="http://www.blogger.com/atom/ns#" term="Google" /><category scheme="http://www.blogger.com/atom/ns#" term="GSoC" /><title>I'm a GSoC student!</title><content type="html">&lt;p&gt;After months of hard work, I was chosen by the OpenInkpot organization to &lt;a href="http://welcome2obscurity.blogspot.com/2010/04/port-openinkpot-to-uclibc.html"&gt;port OI to uClibc&lt;/a&gt;. I will be spending my summer reducing the memory OI consumes to allow it to run on e-readers with little memory. If you're curious about the Google Summer of Code, check out the &lt;a href="http://socghop.appspot.com/document/show/gsoc_program/google/gsoc2010/faqs#what_is"&gt;official FAQ&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4804358099675558422-8864547664640806372?l=www.welcometoobscurity.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/welcome2obscurity/~4/gA6aA3Dys2s" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4804358099675558422/posts/default/8864547664640806372?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4804358099675558422/posts/default/8864547664640806372?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/welcome2obscurity/~3/gA6aA3Dys2s/im-gsoc-student.html" title="I'm a GSoC student!" /><author><name>Evan Kroske</name><uri>http://www.blogger.com/profile/08996350355032069067</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://4.bp.blogspot.com/-Ir9RvEpWn1w/TZz9TCNBeQI/AAAAAAAAAUo/VaY1tXxg9kg/s220/better-usf-headshot.jpg" /></author><feedburner:origLink>http://www.welcometoobscurity.com/2010/05/im-gsoc-student.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0UBRXsyfip7ImA9WxFTGEk.&quot;"><id>tag:blogger.com,1999:blog-4804358099675558422.post-8607886310608270053</id><published>2010-04-09T12:24:00.000-07:00</published><updated>2010-04-09T12:27:34.596-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-04-09T12:27:34.596-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="GSoC" /><title>Port OpenInkpot to uClibc</title><content type="html">&lt;p&gt;This GSoC proposal is for &lt;a href="http://openinkpot.org"&gt;OpenInkpot&lt;/a&gt;, a Debian-based e-reader OS.&lt;/p&gt;

&lt;h2&gt;Contacts&lt;/h2&gt;

&lt;dl&gt;
&lt;dt&gt;Email address&lt;/dt&gt; 
&lt;dd&gt;E.Kroske@Gmail.com&lt;/dd&gt; 
&lt;dt&gt;IRC nickname&lt;/dt&gt; 
&lt;dd&gt;[Evan]&lt;/dd&gt; 
&lt;dt&gt;Emergency phone number&lt;/dt&gt; 
&lt;dd&gt;954-296-2154&lt;/dd&gt;
&lt;/dl&gt;

&lt;h2&gt;Project proposal&lt;/h2&gt;

&lt;p&gt;I plan to port OpenInkpot to the lightweight uClibc C library in order to improve its memory usage. Here are some of the other benefits this project could provide.&lt;/p&gt;

&lt;h3&gt;Possible benefits&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Increase number of devices on which OI could run&lt;/li&gt;
&lt;li&gt;Improve performance&lt;/li&gt;
&lt;li&gt;Decrease compile time&lt;/li&gt;
&lt;li&gt;Reduce firmware transfer and installation time&lt;/li&gt;
&lt;li&gt;Simplify porting OI to other architectures&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Plan of action&lt;/h3&gt;

&lt;p&gt;Follow &lt;a href="http://iplinux.org/wiki/Porting"&gt;these instructions&lt;/a&gt; for porting IPLinux to a new architecture.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Acquire target device (my own e-reader!)&lt;/li&gt;
&lt;li&gt;Add new architecture identifiers (uclibc and ucarmel) to dpkg.&lt;/li&gt;
&lt;li&gt;Build and package toolchain for new arches.&lt;/li&gt;
&lt;li&gt;
&lt;ul&gt;
&lt;li&gt;Cross-compile existing packages to new arches with toolchain, starting with most important packages&lt;/li&gt;
&lt;li&gt;Build and test firmware once the necessary packages (uClibc, dpkg, and BusyBox) have been packaged&lt;/li&gt;
&lt;li&gt;Test packages on device with chroot&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Test complete firmware and allow autobuilders to start porting packages to new arches&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;Background&lt;/h2&gt;

&lt;h3&gt;Programming experience&lt;/h3&gt;

&lt;p&gt;I've been programming for about two years. I've primarily used five programming languages: Javascript, PHP, ActionScript 3, Python, and C++. I've finished several small independent programming projects, but two in particular have taught me important lessons.&lt;/p&gt;

&lt;p&gt;Last fall, I created an example game for Pygame2, a low-level Python wrapper for SDL. The game ran, but it was worthless as an example because my clumsy graphics abstraction obscured the underlying Pygame2 graphics calls. From this failure, I learned to never lose sight of the purpose of my project. &lt;a href="http://welcome2obscurity.blogspot.com/2009/08/pygame2-example-game-finished.html"&gt;My initial announcement for the flawed example.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Earlier this year, I decided to rewrite my &lt;a href="http://welcome2obscurity.blogspot.com/2009/02/webpattern-controlpanel.html"&gt;Flash app for drawing snowflake patterns&lt;/a&gt; with Javascript and SVG. Once I chose the right data structure, the whole library fell into place. This project taught me that few programs must be complex; with enough thought, you can find a simple solution to many complicated problems. &lt;a href="http://welcome2obscurity.blogspot.com/2010/01/snowflake-svg-developer-release.html"&gt;Read more about the SVG snowflake micro-library.&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;Personal qualities&lt;/h3&gt;

&lt;dl&gt;
&lt;dt&gt;I'm hard-working&lt;/dt&gt; 
&lt;dd&gt; When I am assigned a task, I feel compelled to do it as well as I can. I find it difficult to walk away from an unfinished task. &lt;/dd&gt; 
&lt;dt&gt;I'm self-motivated&lt;/dt&gt; 
&lt;dd&gt; Events in my life have taught me to work independently and seek out my own answers. When I discover a problem I don't know how to solve, I start looking for a solution. I check any relevant manuals, search for tutorials, look for examples, and &amp;mdash; if I still haven't found a solution &amp;mdash; ask for help. Finding answers on my own gives me a feeling of satisfaction and accomplishment.&lt;/dd&gt; 
&lt;dt&gt;I love programming&lt;/dt&gt; 
&lt;dd&gt;Writing code is my favorite hobby, and I will someday make it my profession. I'm not participating in the Google Summer of Code because I really need the money or I want another bullet point for my resume; I'm participating because I want to create software and learn more about software development. &lt;/dd&gt;
&lt;/dl&gt;

&lt;h3&gt;Open-source experience&lt;/h3&gt;

&lt;p&gt;In addition my recent &lt;a href="http://openinkpot.org/ticket/834"&gt;OI patch&lt;/a&gt;, I've spent some time working with Pygame2. While developing an example game with the unstable development version, I found, isolated, and reported several bugs.&lt;/p&gt;

&lt;h3&gt;GNU/Linux distributions development experience&lt;/h3&gt;

&lt;p&gt;I've used Ubuntu for about a year, learning much about Linux and Debian. I've become proficient at finding, installing, and upgrading Debian packages. I packaged my first .deb and started my own repository in order to test my fix for &lt;a href="http://openinkpot.org/ticket/834"&gt;Ticket #834&lt;/a&gt;. I've compiled my share of source code, and I'm familiar with the GNU build system as both a user and a developer. I've written several bash scripts, and I'm comfortable with the major Unix commands and concepts. I've even spent some time configuring and troubleshooting the GRUB bootloader.&lt;/p&gt;

&lt;h3&gt;Kernel hacking&lt;/h3&gt;

&lt;p&gt;Unfortunately, I haven't worked on the Linux kernel yet.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4804358099675558422-8607886310608270053?l=www.welcometoobscurity.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/welcome2obscurity/~4/Inx7la-FKqs" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4804358099675558422/posts/default/8607886310608270053?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4804358099675558422/posts/default/8607886310608270053?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/welcome2obscurity/~3/Inx7la-FKqs/port-openinkpot-to-uclibc.html" title="Port OpenInkpot to uClibc" /><author><name>Evan Kroske</name><uri>http://www.blogger.com/profile/08996350355032069067</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://4.bp.blogspot.com/-Ir9RvEpWn1w/TZz9TCNBeQI/AAAAAAAAAUo/VaY1tXxg9kg/s220/better-usf-headshot.jpg" /></author><feedburner:origLink>http://www.welcometoobscurity.com/2010/04/port-openinkpot-to-uclibc.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkQCRH49cSp7ImA9WxFTGEk.&quot;"><id>tag:blogger.com,1999:blog-4804358099675558422.post-8272870207784356097</id><published>2010-04-09T11:53:00.000-07:00</published><updated>2010-04-09T12:12:45.069-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-04-09T12:12:45.069-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="GSoC" /><title>Replace dap-server WWW Interface</title><content type="html">&lt;p&gt;
Below is my &lt;abbr title="Google Summer of Code"&gt;GSoC&lt;/abbr&gt; proposal to &lt;a href="http://opendap.org/"&gt;OpenDAP&lt;/a&gt;, the developer of a scientific data server. You can see the &lt;a href="http://socghop.appspot.com/gsoc/student_proposal/private/google/gsoc2010/evankroske/t127076374986"&gt;official proposal here&lt;/a&gt;.
&lt;/p&gt;

&lt;h2&gt;Contact info&lt;/h2&gt;
&lt;dl&gt;
&lt;dt&gt;Name&lt;/dt&gt;
&lt;dd&gt;Evan Kroske&lt;/dd&gt;
&lt;dt&gt;Email address&lt;/dt&gt;
&lt;dd&gt;e.kroske@gmail.com&lt;/dd&gt;
&lt;/dl&gt;

&lt;h2&gt;Have you contributed to any open source projects in the past?  If so, which ones?&lt;/h2&gt;
&lt;p&gt;I've worked two open-source projects other than OpenDAP: Pygame2, a low-level Python SDL wrapper library; and OpenInkpot, a Debian-based e-reader OS. While developing an example game with Pygame2, I found, isolated, and reported several bugs. In preparation for my OpenInkpot GSoC application, I added a feature to OpenInkpot, closing &lt;a href="http://openinkpot.org/ticket/834"&gt;Ticket #834&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;What are your other summer plans?&lt;/h2&gt;
&lt;p&gt;I plan to go on a vacation with my family for a week or two. I'm not taking any college courses, and I have no other commitments.&lt;/p&gt;

&lt;h2&gt;Where are you going to school?&lt;/h2&gt;
&lt;p&gt;I've graduated with highest honors from Broward College with an Associate in Arts degree, but I'm still picking up some prerequisite classes before I transfer. I plan to pursue a BS in Computer Science at the Massachusetts Institute of Technology, the University of Florida, or another school &amp;mdash; I haven't decided yet.&lt;/p&gt;

&lt;h2&gt;Have you used any of our software in the past? If so, which?&lt;/h2&gt;
&lt;p&gt;My first experience with your software was installing Hyrax from source (from &lt;a href="http://scm.opendap.org:8090/trac/browser/branch/shrew/1.6"&gt;this branch&lt;/a&gt;.)&lt;/p&gt;

&lt;h2&gt;What experience do you have that's relevant to your project?&lt;/h2&gt;

&lt;h3&gt;Code&lt;/h3&gt;
&lt;p&gt;I've been programming for two years. Writing code is my favorite hobby, and one day, it will be my profession. I love to develop software, and I read everything I can to improve my skills.&lt;/p&gt;

&lt;h4&gt;Examples&lt;/h4&gt;
&lt;dl&gt;
&lt;dt&gt;Javascript&lt;/dt&gt;
&lt;dd&gt;&lt;a href="http://welcome2obscurity.blogspot.com/2010/01/snowflake-svg-developer-release.html"&gt;Javascript snowflake SVG micro-library&lt;/a&gt;&lt;/dd&gt;
&lt;dd&gt;&lt;a href="http://welcome2obscurity.blogspot.com/2009/03/dirslideshow-and-multislideshow.html"&gt;JSON Javascript slideshow&lt;/a&gt;&lt;/dd&gt;
&lt;dt&gt;C++&lt;/dt&gt;
&lt;dd&gt;I've taken a college course on C++, and I've read Effective C++, but I haven't published any C++ code yet. If a code sample is required, I could send you one of my class projects.&lt;/dd&gt;
&lt;dt&gt;Shell scripting&lt;/dt&gt;
&lt;dd&gt;&lt;a href="http://openinkpot.org/ticket/834"&gt;OpenInkpot patch&lt;/a&gt;&lt;/dd&gt;
&lt;dd&gt;Several system utilities for my personal use&lt;/dd&gt;
&lt;/dl&gt;

&lt;h3&gt;Website creation&lt;/h3&gt;
&lt;p&gt;I've developed more than ten commercial websites from the ground up. I'm proficient in (X)HTML and CSS, and I'm comfortable with SVG. I enjoy creating simple, usable websites.&lt;/p&gt;

&lt;h4&gt;Examples&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://Welcome2Obscurity.Blogspot.com/"&gt;http://Welcome2Obscurity.Blogspot.com/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://AppalachianMiniTrucks.net/"&gt;http://AppalachianMiniTrucks.net/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://PineKids.com/"&gt;http://PineKids.com/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://HixonPools.com/"&gt;http://HixonPools.com/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Software development&lt;/h3&gt;
&lt;p&gt;I've been developing software on Ubuntu for about a year. I've compiled several applications from source, and I'm familiar with the GNU build system as both a user and a developer. I'm comfortable using the major Unix commands and chaining them together into useful shell scripts. I've used both SVN and Git to retrieve and commit code. I have all the necessary skills to collaboratively develop software.&lt;/p&gt;

&lt;h2&gt;Project proposal&lt;/h2&gt;

&lt;p&gt;I plan to replace the dap-server WWW Interface with a more intuitive data request form. &lt;/p&gt;

&lt;h3&gt;Plan&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Remove WWW Interface from dap-server &lt;/li&gt;
&lt;li&gt;Create new BES module for generating data request forms&lt;/li&gt;
&lt;li&gt;Design intuitive HTML form for constructing data request URLs&lt;/li&gt;
&lt;li&gt;Write server-side form generator&lt;/li&gt;
&lt;li&gt;Write Javascript to read user input, construct request URL, and send data request&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;If I have extra time:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Write server-side data request generator to improve accessibility&lt;/li&gt;
&lt;li&gt;Add JSON format to dap-server to simplify Javascript metadata access&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;Goals&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;More logical, easier-to-use interface&lt;/li&gt;
&lt;li&gt;Simpler, more readable code due to separation from dap-server&lt;/li&gt;
&lt;li&gt;Greater accessibility with semantic XHTML form&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Execution&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;BES receives request for data specification form&lt;/li&gt;
&lt;li&gt;Request is sent to form-generation module&lt;/li&gt;
&lt;li&gt;Module generates data-specific data request form&lt;/li&gt;
&lt;li&gt;Form is sent to user&lt;/li&gt;
&lt;li&gt;User specifies desired data through form&lt;/li&gt;
&lt;li&gt;Javascript constructs data request URL&lt;/li&gt;
&lt;li&gt;User clicks on generated link&lt;/li&gt;
&lt;li&gt;BES receives data request and sends it to dap-server&lt;/li&gt;
&lt;li&gt;dap-server returns requested data&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;Why not Ajax?&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Server-side caching&lt;/li&gt;
&lt;li&gt;Greater speed&lt;/li&gt;
&lt;li&gt;Fewer HTTP requests&lt;/li&gt;
&lt;li&gt;Easier to implement&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4804358099675558422-8272870207784356097?l=www.welcometoobscurity.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/welcome2obscurity/~4/9DPRJ7-rNpY" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4804358099675558422/posts/default/8272870207784356097?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4804358099675558422/posts/default/8272870207784356097?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/welcome2obscurity/~3/9DPRJ7-rNpY/replace-dap-server-www-interface.html" title="Replace dap-server WWW Interface" /><author><name>Evan Kroske</name><uri>http://www.blogger.com/profile/08996350355032069067</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://4.bp.blogspot.com/-Ir9RvEpWn1w/TZz9TCNBeQI/AAAAAAAAAUo/VaY1tXxg9kg/s220/better-usf-headshot.jpg" /></author><feedburner:origLink>http://www.welcometoobscurity.com/2010/04/replace-dap-server-www-interface.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUAFRHc-cSp7ImA9WxBbFk0.&quot;"><id>tag:blogger.com,1999:blog-4804358099675558422.post-1212362647728090230</id><published>2010-03-14T14:03:00.000-07:00</published><updated>2010-03-14T14:55:15.959-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-14T14:55:15.959-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Pygame2" /><category scheme="http://www.blogger.com/atom/ns#" term="game development" /><category scheme="http://www.blogger.com/atom/ns#" term="code" /><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><category scheme="http://www.blogger.com/atom/ns#" term="GSoC" /><category scheme="http://www.blogger.com/atom/ns#" term="Python" /><category scheme="http://www.blogger.com/atom/ns#" term="project" /><title>InstaPyGame progress report</title><content type="html">&lt;p&gt;
I spent the last three days working on a prototype "space shooter" module for my InstaPyGame framework. I had hoped to have a prototype ready today, but the framework isn't usable yet. You can see my progress so far at my &lt;a href="http://code.google.com/p/instapygame/"&gt;Google Code repository&lt;/a&gt;, but be warned; the code is messy and inconsistent, and nothing is set in stone.
&lt;/p&gt;

&lt;p&gt;
However, I have created an API with which I'm satisfied. Making the sample below work properly is my goal for this prototype.
&lt;/p&gt;

&lt;pre&gt;
&lt;code&gt;
from insta.spaceshooter import *

def startDemo():

    game = Game(640, 480)
    
    player = Player()
    player.setSprite('resources/ship.gif')
    
    player.when(player.moving, 'left').setSprite('resources/bankingleft.gif')
    player.when(player.moving, 'right').setSprite('resources/bankingright.gif')
    
    shot = Shot()
    shot.setSprite('resources/shot.gif')
    
    player.setAmmo(shot)
    
    enemy = Enemy()
    enemy.setSprite('resources/alien.gif')
    
    boss = Enemy()
    boss.setSprite('resources/angryalien.gif')
    
    mapGen = LevelMapGenerator({'0' : None, '1' : player, '2' : enemy, '3' : boss})
    
    level = Level(mapGen.generate('data/levelmap1.txt'))
    level.setBGSprite('resources/space.gif')
    level.setBGMusic('resources/spacemusic.ogg')
    
    game.setLevels([level])
    game.start()

if __name__ == '__main__':

    startDemo()
&lt;/code&gt;
&lt;/pre&gt;

&lt;p&gt;
Right now, I'm working on the event system and the controls, but the event system appears far more challenging. I'm planning to encapsulate the data for the "Player" and "Enemy" objects within another object, protecting the data behind its member functions. This should allow me to create a special data object that will apply its changes only when a condition is fulfilled.
&lt;/p&gt;

&lt;p&gt;
Although the framework is far from complete, I'm excited about &lt;a href="http://welcome2obscurity.blogspot.com/2010/03/gsoc-project-idea-insta-pygame.html"&gt;the possibilities&lt;/a&gt;. I have plenty of work ahead of me, but I think my goal is worth the effort.
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4804358099675558422-1212362647728090230?l=www.welcometoobscurity.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/welcome2obscurity/~4/UngmjW8g94A" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4804358099675558422/posts/default/1212362647728090230?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4804358099675558422/posts/default/1212362647728090230?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/welcome2obscurity/~3/UngmjW8g94A/instapygame-progress-report.html" title="InstaPyGame progress report" /><author><name>Evan Kroske</name><uri>http://www.blogger.com/profile/08996350355032069067</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://4.bp.blogspot.com/-Ir9RvEpWn1w/TZz9TCNBeQI/AAAAAAAAAUo/VaY1tXxg9kg/s220/better-usf-headshot.jpg" /></author><feedburner:origLink>http://www.welcometoobscurity.com/2010/03/instapygame-progress-report.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0EESHw5fip7ImA9WxBbEEs.&quot;"><id>tag:blogger.com,1999:blog-4804358099675558422.post-4207979747576861915</id><published>2010-03-07T19:16:00.000-08:00</published><updated>2010-03-08T07:20:09.226-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-08T07:20:09.226-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Pygame2" /><category scheme="http://www.blogger.com/atom/ns#" term="open-source" /><category scheme="http://www.blogger.com/atom/ns#" term="idea library" /><category scheme="http://www.blogger.com/atom/ns#" term="game development" /><category scheme="http://www.blogger.com/atom/ns#" term="code" /><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><category scheme="http://www.blogger.com/atom/ns#" term="GSoC" /><category scheme="http://www.blogger.com/atom/ns#" term="Python" /><category scheme="http://www.blogger.com/atom/ns#" term="project" /><title>GSoC project idea: Insta-PyGame</title><content type="html">&lt;p&gt;
I'm still trying to choose new &lt;abbr title="Google Summer of Code"&gt;GSoC&lt;/abbr&gt; organizations to join, but I know one of the organizations to which I'll apply: &lt;a href="http://pygame.org/"&gt;PyGame&lt;/a&gt;, the SDL-based Python multimedia library. I plan to write a micro-framework on top of PyGame to dramatically simplify the creation of conventional games.
&lt;/p&gt;

&lt;h4&gt;The Problem&lt;/h4&gt;

&lt;p&gt;
PyGame is a wrapper for the C &lt;a href="http://www.libsdl.org/"&gt;SDL&lt;/a&gt; library. Some of the library hides the complexity of the underlying SDL library, but in most areas, PyGame is simply a Python binding for SDL. For that reason, you often need to write several lines of code to accomplish a simple task, such as checking whether the user has pressed a button. In addition, many pieces of the API are based on C coding idioms that are unfamiliar to most Python programmers.
&lt;/p&gt;

&lt;h4&gt;The Plan&lt;/h4&gt;

&lt;p&gt;
I propose the development of a new framework on to of PyGame that operates at a much higher level of abstraction. Through this new framework, people would create games by declaring the sprites the characters use, the arrangement and graphics of the levels, and the interactions between the player and the contents of the levels. 
&lt;/p&gt;

&lt;p&gt;
The framework would be divided into modules with each module representing a genre. The "platformer" module would contain everything necessary to create a platformer game, including a physics engine, a tile map engine, and enemies that die when you jump on them. In contrast, the "scrolling shooter" module would contain tools for controlling the behavior of projectiles and enemy ships.
&lt;/p&gt;

&lt;p&gt;
Here's an example of the type of code games using the framework could look like. I haven't put much thought into the API, but I would like game code to be written at this level of abstraction.
&lt;/p&gt;

&lt;pre&gt;
&lt;code&gt;
from insta.menu import *

from insta.platformer import *



def startMenu():

    titleScreen = Screen(600, 400)
    titleScreen.setTheme(themes.MEDIEVAL)
    titleScreen.setTitle("Porcupine's Tiny Adventure")
    titleScreen.setOptions(["Play", "Controls", "Credits"])
    titleScreen.getOption("Play").setAction(startGame)
    # More code for other menu options

def startGame():

    game = Game()

    hero = Player()
    hero.setSprite("standing.gif")
    hero.setRunningSprites(["running1.gif", "running2.gif", "running3.gif"])
    hero.setJumpSprite("jumping.gif")
    hero.setDeathSprite("gravestone.gif")

    hero.setMovementTriggers(constants.ARROW_KEYS)
    hero.setJumpTrigger(constants.SPACE_BAR)

    goal = Item()
    goal.setSprite("bigring.gif")
    goal.setBehavior(constants.FLOATING)
    goal.setAction(game.nextLevel)

    itemGenerator = ItemGenerator([None, goal, hero])

    '''
    Tile generator translates level maps (text files full of numbers) into tile
    maps in a context-sensitive manner
    '''
    tileGenerator = TileGenerator()
    tileGenerator.setFloorSprite("levelground.gif")
    tileGenerator.setUndergroundSprite("underground.gif")
    tileGenerator.setPlatformSprite("platform.gif")
    # Edge and corner sprites could also be set

    mushroom = Enemy()
    mushroom.setRunningSprites(["step1.gif", "step2.gif"])
    mushroom.setDeathSprite("explosion.gif")
    # Some simple behaviors would be pre-defined
    mushroom.setBehavior(constants.WALKING)

    bird = Enemy()
    bird.setFlightSprites(["flap1.gif", "flap2.gif"])
    bird.setDeathSprite("feathers.gif")
    bird.setBehavior(constants.FLYING)

    # List associates enemy types with numbers in the text file
    enemyGenerator = EnemyGenerator([None, mushroom, bird])

    level = Level()
    level.setTileMap(tileGenerator.generateTileMap("levelmap1.txt"))
    level.setEnemyMap(enemyGenerator.generateEnemyMap("enemymap1.txt"))
    level.setItemMap(itemGenerator.generateItemMap("itemmap1.txt"))

    level.setBackground("background.gif")
    level.setBackgroundOptions([constants.TILED, constants.PARALLAX])

    game.setLevels([level])
    game.start()

if (__name__ == "__main__"):

    startMenu()
&lt;/code&gt;
&lt;/pre&gt;

&lt;h4&gt;The Goal&lt;/h4&gt;

&lt;p&gt;
I want to free PyGame developers from thinking about the &lt;em&gt;how&lt;/em&gt;s of game development, allowing them to focus on the &lt;em&gt;what&lt;/em&gt;s of their ideas. By freeing game creators from thinking about the implementation of their games, I hope to allow them to explore new ideas in video game design, such as dynamically-generated levels, media mashups, user-created content, and &lt;abbr title="Artificial Intelligence"&gt;AI&lt;/abbr&gt;. 
&lt;/p&gt;

&lt;p&gt;
This is just a rough outline of the framework I'd like to build and the effects I hope to see. I plan to start work on a prototype soon if the PyGame community appears receptive to my idea. 
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4804358099675558422-4207979747576861915?l=www.welcometoobscurity.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/welcome2obscurity/~4/_eC8fwPLFMg" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4804358099675558422/posts/default/4207979747576861915?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4804358099675558422/posts/default/4207979747576861915?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/welcome2obscurity/~3/_eC8fwPLFMg/gsoc-project-idea-insta-pygame.html" title="GSoC project idea: Insta-PyGame" /><author><name>Evan Kroske</name><uri>http://www.blogger.com/profile/08996350355032069067</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://4.bp.blogspot.com/-Ir9RvEpWn1w/TZz9TCNBeQI/AAAAAAAAAUo/VaY1tXxg9kg/s220/better-usf-headshot.jpg" /></author><feedburner:origLink>http://www.welcometoobscurity.com/2010/03/gsoc-project-idea-insta-pygame.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0INSHs9fyp7ImA9WxBUE0Q.&quot;"><id>tag:blogger.com,1999:blog-4804358099675558422.post-4271452754815640076</id><published>2010-02-28T11:56:00.000-08:00</published><updated>2010-02-28T13:13:19.567-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-28T13:13:19.567-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="personal" /><category scheme="http://www.blogger.com/atom/ns#" term="open-source" /><category scheme="http://www.blogger.com/atom/ns#" term="Google" /><category scheme="http://www.blogger.com/atom/ns#" term="commentary" /><title>Picking an OSS project</title><content type="html">&lt;p&gt;
The Google Summer of Code is rapidly approaching, and I'm looking to join up with an open-source software organization to do a summer project. I'll need to get up to speed in about a month, so I should probably pick a project in my current area of expertise: Javascript, PHP, ActionScript 3, Python, and C++. However, I can't resist looking at some projects that would require a new language. Here are a couple of the projects on which I'd like to work.
&lt;/p&gt;

&lt;dl&gt;
&lt;dt&gt;Linear window manager&lt;/dt&gt;
&lt;dd&gt;
As I wrote in my &lt;a href="http://welcome2obscurity.blogspot.com/2010/01/breaking-windows.html"&gt;blog entry on the aging desktop metaphor&lt;/a&gt;, I'm sick and tired of touching my mouse to manage my windows. That's why I'd love to work on a new window manager for KDE, Gnome, or another desktop environment to create a new &lt;a href="http://10gui.org/"&gt;Con10uum&lt;/a&gt;-inspired interface. Unfortunately, I'm not sure if any of the orgs would be willing to spend one of their valuable students slots on this project.
&lt;/dd&gt;
&lt;dt&gt;Writing Haskell&lt;/dt&gt;
&lt;dd&gt;
I'm quite interested in learning about functional programming through Haskell, but I'm not sure if I can find a Haskell project that's basic enough for me to accomplish over the summer, but useful enough for Haskell to sponsor me. Perhaps I should give up on this one.
&lt;/dd&gt;
&lt;dt&gt;Working on the &lt;a href="http://code.google.com/p/es-operating-system/"&gt;ES OS&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;
I think the ES OS concept is highly interesting, and I now know C++, the language in which ES is written. However, this org's projects might still be too advanced for me. I really don't know where to start learning with a project this large.
&lt;/dd&gt;
&lt;dt&gt;Writing Python&lt;/dt&gt;
&lt;dd&gt;
If I can find a small, interesting project that I could do with Python, I'll try to join. However, the last "Python" project I tried to work on was actually written primarily in C. I'll have to be more careful.
&lt;/dd&gt;
&lt;/dl&gt;

&lt;p&gt;
If your &lt;abbr title="Open-Source Software"&gt;OSS&lt;/abbr&gt; organization needs a volunteer over the summer, I encourage you to &lt;a href="http://socghop.appspot.com/site/home/site"&gt;apply for the &lt;abbr title="Google Summer of Code"&gt;GSoC&lt;/abbr&gt;&lt;/a&gt;. If you're looking for a hard-working Python or Javascript developer, I'm your man.
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4804358099675558422-4271452754815640076?l=www.welcometoobscurity.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/welcome2obscurity/~4/YoxU9SZlsHs" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4804358099675558422/posts/default/4271452754815640076?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4804358099675558422/posts/default/4271452754815640076?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/welcome2obscurity/~3/YoxU9SZlsHs/picking-oss-project.html" title="Picking an OSS project" /><author><name>Evan Kroske</name><uri>http://www.blogger.com/profile/08996350355032069067</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://4.bp.blogspot.com/-Ir9RvEpWn1w/TZz9TCNBeQI/AAAAAAAAAUo/VaY1tXxg9kg/s220/better-usf-headshot.jpg" /></author><feedburner:origLink>http://www.welcometoobscurity.com/2010/02/picking-oss-project.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEMMQHo_eSp7ImA9WxBVGEU.&quot;"><id>tag:blogger.com,1999:blog-4804358099675558422.post-1619511650356467507</id><published>2010-02-22T16:50:00.000-08:00</published><updated>2010-02-22T16:54:41.441-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-22T16:54:41.441-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="education" /><category scheme="http://www.blogger.com/atom/ns#" term="college" /><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><category scheme="http://www.blogger.com/atom/ns#" term="commentary" /><title>My software development goals</title><content type="html">&lt;p&gt;
I just recently finished my UF application &amp;mdash; Woo-hoo! I'm glad to have it done, but I actually enjoyed writing one of the "statement of intent" essays. Here's the thought-provoking prompt.
&lt;/p&gt;

&lt;blockquote&gt;
What are the core skills and knowledge you hope to acquire by completing a degree in this major and how do you plan to apply these when you graduate?
&lt;/blockquote&gt;

&lt;p&gt;
I enjoyed elucidating what I hope to learn in my Computer Science program and how I plan to apply that knowledge. In the end, I came up with the following goals for my education and my career.
&lt;/p&gt;

&lt;h4&gt;What I want to learn about programming&lt;/h4&gt;

&lt;dl&gt;
&lt;dt&gt;Good software design&lt;/dt&gt;
&lt;dd&gt;
In order to write readable, efficient code, I need to see examples of good code and learn what makes it good. I plan to study algorithms, design patterns, and best practices to learn how best to solve common programming problems.
&lt;/dd&gt;
&lt;dt&gt;Alternative programming methods and languages&lt;/dt&gt;
&lt;dd&gt;
If I only learn about common solutions to problems, I could never discover new solutions. That's why I'm going to learn about some of the more obscure and academic regions of software development, including functional programming, declarative programming, and other programming paradigms I don't even know about yet.
&lt;/dd&gt;
&lt;dt&gt;Low-level programming&lt;/dt&gt;
&lt;dd&gt;
I know that if I want to create truly groundbreaking software, I won't be able to rely on high-level languages and pretty abstractions. I'm going to learn about Assembly language and C in order to increase the efficiency of my own applications and to create entirely new OSs and languages.
&lt;/dd&gt;
&lt;dt&gt;Writing concurrent code&lt;/dt&gt;
&lt;dd&gt;
One of the safest bets in predicting the future of technology is that future computers will have an increasingly large number of processors. Applications that can't take advantage of multiple cores will soon be surpassed by programs that use concurrency effectively. I want to be on the winning side, so I'm going to learn to write concurrent applications with &lt;a href="http://en.wikipedia.org/wiki/Software_transactional_memory"&gt;STM&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Erlang_(programming_language)"&gt;Erlang&lt;/a&gt;, and *shudder* even threads. I believe knowledge of concurrent programming will be critical to many of my future projects.
&lt;/dd&gt;
&lt;/dl&gt;

&lt;h4&gt;How I will use my programming skills&lt;/h4&gt;

&lt;dl&gt;
&lt;dt&gt;Creating useful software&lt;/dt&gt;
&lt;dd&gt;
I have resolved to never work on an application that doesn't do something useful. Innovative code is nothing if it's part of a worthless piece of shovelware or a soulless enterprise application.
&lt;/dd&gt;
&lt;dt&gt;Making my software intuitive&lt;/dt&gt;
&lt;dd&gt;
I'll also try to make all my programs intuitive and easy-to-use. When I can, I'll put the needs and wants of the user first, before application structure, technological achievement, and even code readability, although I hope I never need to make that choice. I want my software to make a difference; it's rare that an application or library with an arbitrary, complex interface changes the world.
&lt;/dd&gt;
&lt;dt&gt;Improve the process of programming&lt;/dt&gt;
&lt;dd&gt;
I plan to work on projects that will not only serve typical computer users but also help other software developers. My goal is to make it easier for coders to write readable, efficient, correct code and create helpful, intuitive interfaces for their applications. I want to leave programming in a better state than I found it.
&lt;/dd&gt;
&lt;dt&gt;Explore new technologies&lt;/dt&gt;
&lt;dd&gt;
&lt;a href="http://en.wikipedia.org/wiki/Memristor"&gt;Memristors&lt;/a&gt;. &lt;a href="http://en.wikipedia.org/wiki/Quantum_computing"&gt;Quantum computing&lt;/a&gt;. &lt;a href="http://en.wikipedia.org/wiki/Photonic_computing"&gt;Optical processors&lt;/a&gt;. &lt;a href="http://www.jbioleng.org/content/3/1/11/abstract"&gt;Biological computers&lt;/a&gt;. All these rapidly-approaching breakthrough computing technologies will require new programming methods to match. I will always be looking for opportunities to push the field of programming in new and exciting directions.
&lt;/dd&gt;
&lt;/dl&gt;

&lt;p&gt;
I know that I may not be able to learn all that I plan to learn, and I might not accomplish all that I hope to accomplish. However, writing out my programming goals has helped me to realize precisely what aspects of programming I find most interesting and important. I think every college student should list his education and/or career goals, if only to provide a derisive laugh or a grin of satisfaction when he reaches the end of his career.
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4804358099675558422-1619511650356467507?l=www.welcometoobscurity.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/welcome2obscurity/~4/IiJtX86a-DA" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4804358099675558422/posts/default/1619511650356467507?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4804358099675558422/posts/default/1619511650356467507?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/welcome2obscurity/~3/IiJtX86a-DA/my-software-development-goals.html" title="My software development goals" /><author><name>Evan Kroske</name><uri>http://www.blogger.com/profile/08996350355032069067</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://4.bp.blogspot.com/-Ir9RvEpWn1w/TZz9TCNBeQI/AAAAAAAAAUo/VaY1tXxg9kg/s220/better-usf-headshot.jpg" /></author><feedburner:origLink>http://www.welcometoobscurity.com/2010/02/my-software-development-goals.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEMEQX4zeSp7ImA9WxBWFko.&quot;"><id>tag:blogger.com,1999:blog-4804358099675558422.post-7161961203506169490</id><published>2010-02-08T04:45:00.000-08:00</published><updated>2010-02-08T16:46:40.081-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-08T16:46:40.081-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="engineering club" /><category scheme="http://www.blogger.com/atom/ns#" term="education" /><category scheme="http://www.blogger.com/atom/ns#" term="project" /><title>Broward College engineering club</title><content type="html">&lt;p&gt;
This semester, I have decided to participate in Broward College's engineering club. Each semester, Professor Rolando Branly gathers a group of students from the Physics classes and labs he teaches to work on an engineering project. Last semester, he and his group built a mockup capsule for low-gravity research in cooperation with &lt;a href="http://masten-space.com/"&gt;Masten Space Systems&lt;/a&gt;. This semester, we have a more concrete project.
&lt;/p&gt;

&lt;p&gt;
Professor Branly is working on securing a slot on the last shuttle mission for our experiment. We will be attempting to crystallize proteins &lt;em&gt;in space&lt;/em&gt;!
&lt;/p&gt;

&lt;h4&gt;The plan&lt;/h4&gt;

&lt;p&gt;
Of course, the process begins long before the shuttle launches and ends long after. Here's a brief summary of the process.
&lt;/p&gt;

&lt;dl&gt;
&lt;dt&gt;Choose target proteins&lt;/dt&gt;
&lt;dd&gt;
Professor Branly has already narrowed our options down to a few proteins related to metabolism and diabetes research, but we still have a couple options. &lt;a href="http://en.wikipedia.org/wiki/Peroxisome_proliferator-activated_receptor"&gt;PPAR gamma&lt;/a&gt; is our leading choice.
&lt;/dd&gt;

&lt;dt&gt;Manufacture proteins&lt;/dt&gt;
&lt;dd&gt;
Once we've found a protein of interest, we need to acquire enough with which to work. Hopefully, we will be able to outsource this step to the chemistry/biology department, but if not, we'll need to genetically engineer a colony of E. coli bacteria to churn out our protein. Then, we must isolate the protein from the bacterial solution.
&lt;/dd&gt;

&lt;dt&gt;Crystallize proteins&lt;/dt&gt;
&lt;dd&gt;
This promises to be the most difficult and complicated step. We plan to send the proteins to the International Space Station on the last Shuttle flight, let them crystallize in anti-gravity for about two weeks, and retrieve them on the return flight of the Shuttle. Unfortunately, protein crystallization is a developing art known to few and mastered by none &amp;mdash; Professor Branly calls it a "black art." We'll test many different solutions and methods here on Earth to try to find the perfect setup.
&lt;/dd&gt;

&lt;dt&gt;Shoot x-rays at our protein crystals&lt;/dt&gt;
&lt;dd&gt;
If we can successfully crystallize some proteins, we will analyze the crystals through a process called &lt;a href="http://en.wikipedia.org/wiki/X-ray_crystallography"&gt;x-ray crystallography&lt;/a&gt;. In brief, we will shoot a laser of x-rays at a rotating protein crystal and record the diffraction pattern of the x-rays. I'm not sure whether we will be imaging the crystals ourselves or sending them off to a specialized facility for examination.
&lt;/dd&gt;

&lt;dt&gt;Analyze diffraction patterns&lt;/dt&gt;
&lt;dd&gt;
Finally, we're going to analyze the x-ray patterns with crystallography software. We'll use either &lt;a href="http://www.phenix-online.org/"&gt;Phenix&lt;/a&gt; or &lt;a href="http://www.ccp4.ac.uk/"&gt;CCP4&lt;/a&gt; to convert the patterns of x-ray dots into 3D models of the crystallized proteins. These models will allow drug companies to create molecules that can enhance or inhibit the functioning of the proteins in human cells.
&lt;/dd&gt;
&lt;/dl&gt;

&lt;h4&gt;Engineering club information&lt;/h4&gt;

&lt;p&gt;
If you want to join the club or help us with our project, you can join our &lt;a href="http://www.facebook.com/group.php?gid=291086776446"&gt;Facebook group&lt;/a&gt;, email our coordinator, &lt;a href="mailto:rbranly@gmail.com"&gt;Professor Branly&lt;/a&gt;, or visit our new website, &lt;a href="http://browardengineering.info/"&gt;BrowardEngineering.info&lt;/a&gt;. We'll need all the help we can get!
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4804358099675558422-7161961203506169490?l=www.welcometoobscurity.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/welcome2obscurity/~4/y5zDeqOcspI" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4804358099675558422/posts/default/7161961203506169490?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4804358099675558422/posts/default/7161961203506169490?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/welcome2obscurity/~3/y5zDeqOcspI/broward-college-engineering-club.html" title="Broward College engineering club" /><author><name>Evan Kroske</name><uri>http://www.blogger.com/profile/08996350355032069067</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://4.bp.blogspot.com/-Ir9RvEpWn1w/TZz9TCNBeQI/AAAAAAAAAUo/VaY1tXxg9kg/s220/better-usf-headshot.jpg" /></author><feedburner:origLink>http://www.welcometoobscurity.com/2010/02/broward-college-engineering-club.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUAFSXw7cCp7ImA9WxBXFEs.&quot;"><id>tag:blogger.com,1999:blog-4804358099675558422.post-8244457400358544837</id><published>2010-01-25T15:45:00.000-08:00</published><updated>2010-01-25T15:55:18.208-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-01-25T15:55:18.208-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="random" /><category scheme="http://www.blogger.com/atom/ns#" term="UI" /><category scheme="http://www.blogger.com/atom/ns#" term="commentary" /><title>Breaking windows</title><content type="html">&lt;p&gt;
There's been a lot of uncertainty going around the standard desktop computer model recently. More people are using smartphones, netbooks with custom interfaces, and other non-traditional interfaces than ever before. People are questioning many aspects of the desktop computing model: the typical separation between the client and server data (&lt;a href="http://dev.chromium.org/chromium-os"&gt;Google Chrome OS&lt;/a&gt;), the exclusive right of the browser to access internet content (&lt;a href="http://moblin.org/"&gt;Moblin&lt;/a&gt;), and even the traditional software distribution and installation system (iPhone App Store, Linux repositories).
&lt;/p&gt;

&lt;p&gt;
All of these trends are interesting, but my favorite upcoming innovation is the disposal of the &lt;a href="http://en.wikipedia.org/wiki/Desktop_metaphor"&gt;desktop metaphor&lt;/a&gt; &lt;abbr title="User Interface"&gt;UI&lt;/abbr&gt; idiom.
&lt;/p&gt;

&lt;h4&gt;Desktop metaphor summary&lt;/h4&gt;

&lt;p&gt;
The desktop metaphor is a method of computer interaction based on an office desk. Applications are run in windows, each one representing a document or tool lying on a desk.
&lt;/p&gt;

&lt;div&gt;
&lt;img style="max-width: 100%" alt="Screenshot of the Gnome desktop" src="http://upload.wikimedia.org/wikipedia/commons/thumb/6/65/GNOME-Screenshot-2.10-FC4.png/800px-GNOME-Screenshot-2.10-FC4.png" /&gt;
&lt;p class="caption"&gt;A screenshot of a typical &lt;abbr title="User Interface"&gt;UI&lt;/abbr&gt; based on the desktop metaphor.
&lt;/p&gt;
&lt;/div&gt;

&lt;p&gt;
The windows can be moved around, minimized, and closed through keyboard shortcuts and mouse interaction.
&lt;/p&gt;

&lt;h4&gt;Problems&lt;/h4&gt;

&lt;p&gt;
Unfortunately, the desktop metaphor has the same shortcomings as a real desk. Just as in &lt;a href="http://en.wiktionary.org/wiki/meatspace"&gt;meatspace&lt;/a&gt;, I constantly have to move things around to see what I want to see, and when I run out of space, I have to move things off the desktop. Some applications take up less space by allowing me to run multiple instances in separate tabs in the same window; most web browsers and my text editor (Notepad++) have this feature. Although these tabs simplify the interface of the application, they add complexity to the desktop as a whole. Every tab-based application works slightly differently, with different keyboard shortcuts for tab management and different tab behavior. It's a &lt;em&gt;mess&lt;/em&gt;.
&lt;/p&gt;

&lt;h4&gt;Possible solutions&lt;/h4&gt;

&lt;p&gt;
Right now, there are several approaches to improving application management that ditch the desktop metaphor entirely.
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;h5&gt;&lt;a href="http://10gui.com/"&gt;10/GUI&lt;/a&gt;&lt;/h5&gt;
&lt;p&gt;
10/GUI proposes a new form of interaction to replace the mouse along with a new application management system suited to the new control method. It's concept is a multitouch slate capable of registering 10 simultaneous inputs (fingers) along with pressure for each input. The new app manager places all the "windows" in a continuous horizontal band that extends beyond the left and right edges of the screen. Various combinations of finger presses allow the user to scroll within a single application or scroll the entire band to expose other applications. You really need to watch the &lt;a href="http://10gui.com/video/"&gt;slick concept video&lt;/a&gt; to understand.
&lt;/p&gt;

&lt;p&gt;
Unfortunately, the video is only a concept, and the creator doesn't appear to have any plans to actually implement the system. In addition, the system would require an entirely new interface device to work as planned. However, I believe the new app manager could be beneficial without the new input mechanism. It's still significantly simpler than the current window-based disaster.
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h5&gt;&lt;a href="http://dev.chromium.org/chromium-os"&gt;Chromium OS&lt;/a&gt;&lt;/h5&gt;
&lt;p&gt;
This revolutionary open-source OS ditches the idea of multiple applications entirely, confining all actions to a single tabbed browser (Google Chrome). Client-side applications are mostly replaced by web applications and windows are replaced by browser tabs. This OS's radical &lt;abbr title="User Interface"&gt;UI&lt;/abbr&gt; was designed for small-screened netbooks, so it's obviously not suitable for all computers. However, I appreciate this spartan interface's extreme efficiency.
&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
In my opinion, a rethinking of the desktop metaphor would be the most beneficial change to the desktop computer experience. I eagerly anticipate the alternatives to this outdated model.
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4804358099675558422-8244457400358544837?l=www.welcometoobscurity.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/welcome2obscurity/~4/5V0eCjrMkH0" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4804358099675558422/posts/default/8244457400358544837?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4804358099675558422/posts/default/8244457400358544837?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/welcome2obscurity/~3/5V0eCjrMkH0/breaking-windows.html" title="Breaking windows" /><author><name>Evan Kroske</name><uri>http://www.blogger.com/profile/08996350355032069067</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://4.bp.blogspot.com/-Ir9RvEpWn1w/TZz9TCNBeQI/AAAAAAAAAUo/VaY1tXxg9kg/s220/better-usf-headshot.jpg" /></author><feedburner:origLink>http://www.welcometoobscurity.com/2010/01/breaking-windows.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEENSHgyeyp7ImA9WxBXEkQ.&quot;"><id>tag:blogger.com,1999:blog-4804358099675558422.post-705200446457663116</id><published>2010-01-13T19:21:00.000-08:00</published><updated>2010-01-23T16:24:59.693-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-01-23T16:24:59.693-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="installation" /><category scheme="http://www.blogger.com/atom/ns#" term="Windows" /><category scheme="http://www.blogger.com/atom/ns#" term="tutorial" /><category scheme="http://www.blogger.com/atom/ns#" term="C++" /><category scheme="http://www.blogger.com/atom/ns#" term="terminal" /><title>Compiling C++ from command line</title><content type="html">&lt;p&gt;
I'm finally taking an introduction to C++ class at college, and I needed to install a compiler. I had intended to use the &lt;a href="http://gcc.gnu.org/"&gt;&lt;abbr title="GNU Compiler Collection"&gt;GCC&lt;/abbr&gt;&lt;/a&gt;, but I chose the Microsoft Visual C++ compiler instead because I wanted to become familiar with multiple compilers and because it was dead-simple to install.
&lt;/p&gt;

&lt;p&gt;
Unfortunately, it was &lt;em&gt;not&lt;/em&gt; dead-simple to use. After building and running only a simple "Hello, world!" test script, I longed for a simpler way to compile and run my scripts. I found a &lt;a href="http://msdn.microsoft.com/en-us/library/ms235639(VS.80).aspx"&gt;command-line compiling tutorial&lt;/a&gt; in the documentation and tried it out. The procedure worked fine, but it required starting a new terminal through a shortcut in the "Start" menu. I'm allergic to the "Start" menu, so I figured out how to setup the necessary environment variables from the command line. Now, I just run &lt;code&gt;setupcppenv&lt;/code&gt; to prepare the environment, and I can compile 'till the cows come home (pardon the idiom).
&lt;/p&gt;

&lt;h3&gt;Requirements&lt;/h3&gt;

&lt;p&gt;
This tutorial is written for people who prefer to use the Windows terminal, so a familiarity with the command prompt is assumed. Also, you'll need to download and install the &lt;a href="http://www.microsoft.com/Express/VC/"&gt;Microsoft Visual C++ Express Edition compiler&lt;/a&gt;; don't worry, it's free.
&lt;/p&gt;

&lt;h3&gt;How to set up Windows to compile C++ from the command line&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;h4&gt;Create a configuration script&lt;/h4&gt;

&lt;p&gt;
In order to simplify the configuration process and give us an easy command to remember, we're going to use a batch script to configure the environment for us. &lt;abbr title="Visual C++ Express"&gt;VCE&lt;/abbr&gt; comes with a setup script, but it's hidden in the directory in which &lt;abbr title="Visual C++ Express"&gt;VCE&lt;/abbr&gt; was installed. 
&lt;/p&gt;

&lt;p&gt;
Find the shortcut "Visual Studio 2008 Command Prompt" in the "Start" menu under "Microsoft Visual C++ 2008 Express Edition &amp;gt; Visual Studio Tools" and view its properties. Create a new file in Notepad or the text editor of your choice, and copy the contents of the "Target" field into the new text file. Save the file as &lt;code&gt;setupcppenv.bat&lt;/code&gt; on the desktop and click on it. If you see a command prompt pop up with "Visual Studio 2008 Command Prompt" in the title bar, your new batch script is working.
&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;h4&gt;Modify the batch script&lt;/h4&gt;

&lt;p&gt;
Unfortunately, the script works a little differently than I would like. To see what I mean, bring up a command prompt and &lt;code&gt;cd&lt;/code&gt; to the desktop (or wherever you put the setup script.) Run the script with &lt;code&gt;setupcppenv&lt;/code&gt;, then type in &lt;code&gt;exit&lt;/code&gt; to close the command prompt. It didn't work, did it. That's because the batch script starts a new cmd process with the variables configured instead of just configuring them in the current process. In order to remedy this behavior, we'll have to modify our batch script.
&lt;/p&gt;

&lt;p&gt;
Right now, my script looks like this:
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;%comspec% /k ""C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\vcvarsall.bat"" x86&lt;/code&gt;
&lt;/p&gt;

&lt;p&gt;
Yours will probably look different if you're using a 32 bit Windows version. To prevent the command from starting a new process, we need to take out &lt;code&gt;%comspec% /k&lt;/code&gt; and convert the double double quotes into single double quotes. After that change, my script looked like this:
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;"C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\vcvarsall.bat" x86&lt;/code&gt;
&lt;/p&gt;

&lt;p&gt;
Now, our command prompt will terminate on the first &lt;code&gt;exit&lt;/code&gt;.
&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;h4&gt;Set up script bin&lt;/h4&gt;

&lt;p&gt;
Right now, our setup script works fine, but it only works on the desktop. Obviously, storing all our source files on the desktop is a bad idea, so we need to make our script accessible to the whole computer. We can do that by adding it to the Windows &lt;code&gt;Path&lt;/code&gt;.
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;Path&lt;/code&gt; is an environment variable on Windows systems that lists places for the OS to look for scripts. When you run a command from the command line, Windows looks in all the directories listed in the &lt;code&gt;Path&lt;/code&gt; for a script matching the command you entered. If it finds one, it runs it.
&lt;/p&gt;

&lt;p&gt;
We could, of course, add the script's current location to the &lt;code&gt;Path&lt;/code&gt; and use our script anywhere; however, we would have to keep the original script on the desktop forever in order for it to remain accessible. Instead, we will create a dedicated directory for storing command line scripts. We will call it &lt;code&gt;bin&lt;/code&gt; and place it in the home directory. You can find your home directory by running &lt;code&gt;echo %homepath%&lt;/code&gt; from the command prompt. Create a directory called &lt;code&gt;bin&lt;/code&gt; in there, and move &lt;code&gt;setupcppenv.bat&lt;/code&gt; into the new directory. 
&lt;/p&gt;

&lt;p&gt;
Now we will add &lt;code&gt;bin&lt;/code&gt; to the &lt;code&gt;Path&lt;/code&gt;. Open the Control Panel, and find the "System" options (you might have to switch to Classic View in Vista). Open the "Advanced system settings" dialog box and click on "Environment Variables". Edit &lt;code&gt;Path&lt;/code&gt; under "User variables". &lt;code&gt;Path&lt;/code&gt; is a list of directories separated by semicolons; add your new &lt;code&gt;bin&lt;/code&gt; directory to it by appending a semicolon and the new directory's full path (&lt;code&gt;C:\User\Evan\bin&lt;/code&gt; for me) to the &lt;code&gt;Path&lt;/code&gt;. Don't add any spaces between the semicolon and the paths. If the field is empty, put in just your &lt;code&gt;bin&lt;/code&gt; path. For example, the &lt;code&gt;Path&lt;/code&gt; &lt;code&gt;C:\Program Files\Acme Corp;C:\Program Files\Omnisoftware&lt;/code&gt; would become &lt;code&gt;C:\Program Files\Acme Corp;C:\Program Files\Omnisoftware;C:\User\&lt;var&gt;Your user name&lt;/var&gt;\bin&lt;/code&gt;. Save your change by hitting "OK" in all the dialog boxes.
&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;h4&gt;Test everything&lt;/h4&gt;

&lt;p&gt;
Now, we need to make sure everything has come together properly. Start by creating a new file in your text editor and plugging in this code:
&lt;/p&gt;

&lt;p&gt;
&lt;pre&gt;&lt;code&gt;
#include &amp;lt;iostream&amp;gt;

int main() {

    std::cout &amp;lt;&amp;lt; "Everything is working properly!\n";
    return 0;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;/p&gt;

&lt;p&gt;
Save the file as &lt;code&gt;test.cpp&lt;/code&gt; on the desktop, then open a command prompt. Set up the environment with &lt;code&gt;setupcppenv&lt;/code&gt;, &lt;code&gt;cd&lt;/code&gt; into the desktop, and compile your C++ test script with &lt;code&gt;cl /EHsc test.cpp&lt;/code&gt;. Run &lt;code&gt;test.exe&lt;/code&gt; and revel in the simplicity of your new build procedure.
&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
Now that I'm learning C++, you may start seeing some C++ on this blog. Don't be alarmed; I'm not turning into a pointer-crazed, multiple-inheriting C++ coder, thanks to my strong Python foundation. I plan to stick to the somewhat-comprehensible features of C++.
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4804358099675558422-705200446457663116?l=www.welcometoobscurity.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/welcome2obscurity/~4/tBgWFU4Vkq0" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4804358099675558422/posts/default/705200446457663116?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4804358099675558422/posts/default/705200446457663116?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/welcome2obscurity/~3/tBgWFU4Vkq0/compiling-c-from-command-line.html" title="Compiling C++ from command line" /><author><name>Evan Kroske</name><uri>http://www.blogger.com/profile/08996350355032069067</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://4.bp.blogspot.com/-Ir9RvEpWn1w/TZz9TCNBeQI/AAAAAAAAAUo/VaY1tXxg9kg/s220/better-usf-headshot.jpg" /></author><feedburner:origLink>http://www.welcometoobscurity.com/2010/01/compiling-c-from-command-line.html</feedburner:origLink></entry></feed>

