Content from 2007-10
More Importantly: I would like to hear a reasoned argument as to what subjects cannot be learned faster outside of the educational system (note: this does not mean without structure or guidance) than in it and why this might be.
-A paper on Godel's Incompleteness Theorem and some contentions Nagel had with it.
-A transcript of a talk by Alan Cox at a Linux Conference on why Brooks' Laws of Software Development don't hold up under the open source model.
-An interesting post by Dan McWeeny courtesy of James Governor over at Redmonk on "Synthesizers" a posited new category of software developer.
-An interesting essay on the problems of programming.
-A fantastic response to a recent article of Raganwald's about Object Oriented Programming and the problems of information hiding. I especially like the leaning towards less stateful code.
-Another good response to a Raganwald article, this time about learning new programming languages. I've been going through this a bit myself lately with a recent Java assignment that I essentially tried to write in C. I need to be writing it in idiomatic Java but I'm lazy and don't like Java. I'm getting it together though.
-A Google Tech Talk on why the GIT source control repository should be used in lieu of any others. This one is given by Randal Schwartz, it is not the already circulated talk by Linus Torvalds himself.
-An interview with Joe Armstrong, creator of Erlang, on the future of programming, object orientation, and statefulness.
-A design philosophy. If it's not simple, it's wrong.
-Finally, I also found podcasts from the recent OOPSLA and ACM Reflections conferences. Some of these would be well worth listening to.
Youth, I know not what became of you.
Lakes and cities, a fiery rebellion.
Always aware of a justice without touch or name.
You walked with me through the mud caked
ruins behind the trees of the subdivision
and sought out with me a refuge from the
savages in the weeds of back roads and trails.
You were there when the infection poured
out from the skin of my back like mineral water
from the mountain. You were there for
escapes to beaches and oceans whose splendor
seemed to swallow all that I knew.
But that was another world.
These days only the vaguest memories remain.
Flickering images whose sources cannot be pinned
down, absent of references or citations. Only a feeling
and a thought which, I know, as Milosz has said are
"too much for the meager word".
How is it that I am nostalgic for what I cannot recall
of my own life? A great sadness wells up within me.
As though what cannot be remembered did not occur.
I know that to be a fallacy, but in my weakness must
hope that in some eternal memory that beauty
and difficulty which I suffered does persevere.
Friday night it was the Halloween party at Oglethorpe. It was my standard no drinking fare but I dressed up this time (now that I'm not actually enrolled at OU anymore, ha!). Anyway, hung out there for half an hour or so I figured and generally had a leisurely evening. Think there are photos on Facebook. Yeah. Me in a bathrobe and slippers. Classy.
Saturday I had a lot of fun going with Burke to the Ubuntu Gutsy Release Party at Meehan's on Roswell. Nick took pictures and put them on planet. The best part was I re-learned how to configure wireless over the command line and heard stories about working with old Unix systems (specifically HP-UX) from Josh. Anyway, good times.
Afterwards, I hung out with Chris Blair who's now interested in Distributed Computing (specifically Folding@Home). And then I installed Linux on my PS3 which I'll likely redo with Burke Tuesday because a Gutsy PS3 release was actually made and is on Psubuntu. Sunday was again pretty much low-key but I sort of got some Java coding done. Just a little. Blech.
There's tons of cool stuff happening around PS3 and Linux lately. There's also been a lot going on in the ReactOS project and I haven't been keeping you all informed about that. Ah, well. One does what one can. I've gotten a bit addicted to reading reddit as well, or maybe just Raganwald and Coding Horror. XKCD has also brought much joy of late, as always.
Finally, I'm pretty much sure that if I continue school it will be at GA Tech (not that I can necessarily get in). I'm really not interested in continuing at SPSU. We'll see how things go and next semester may change this some but I'm not expecting it too. It's not challenging or interesting enough and I'm not studying or learning the things I want to. Next step is to see what can be done to make next semester more challenging or interesting by either transferring or taking classes at GA Tech. More on that later. Also, that opens a new problem: How does one get out of school? And, assuming I want to, how the heck does one "go back"?
I got a PS3 last week. Surprisingly some of the most fun I'm having is with a game called Everyday Shooter, which is sort of like galaga and pacman mixed together on acid. Or maybe as depicted by Hunter S. Thompson.
Anyway, I've been reading some interviews with the developer behind the game Jonathan Mak. (Yes, it's one guy. That takes you back to the early 90s doesn't it? When games could still be developed by one guy and all.) He's really cool and wrote something really cool about why games don't work as open source. It's one of the best arguments I've ever heard.
Also, I had this thought today which is possibly trite and stupid but intrigued me enough to jot down:
"There are two kinds of advances in computing. Advances in what is computable and advances in what is worth computing. P=NP is an example of the former, Moore's Law is an example of the latter."
I've also been thinking about trying to get some of my writing published (my poetry) and reading awesome stuff about Linux, the PS3, Programming, etc and I'll try to write some more about all that soon.
/*Right now, I need to stop avoiding/not writing this C Program due tomorrow. I got sort of wrapped up talking to my folks about whether or not I could transer/get into GA Tech and whether that would be a better path than being self-taught or taking time off. Your thoughts?*/
There are things that I'm certainly interested in and want to do. I also really would like to have a fairly deep understanding of computing and a good ability to program.
It's funny. I have a feeling the way you end up great is by not trying to be great. I have a feeling you end up being great by not caring about greatness too much and just doing what you love. And I'm still not sure how much I love programming. I'm certainly unsure I love being taught it. But I've always preferred self-teaching with computers.
Preface: I wrote this 3 or 4 days ago to get these thoughts down that I'd never quite bothered to formally articulate. I'll probably continue to refine this over time. I actually think it's not bad. Sure, it's a bit biased at points but on the whole this isn't bad information. And I'd love any formal rebuttals to any of my points. Cross-examination is good. Thanks for proofing folks.
So, I have a closet obsession with technology. Actually, maybe that's not quite in the closet. The obsession I'm really going to talk about here I'm calling Digital Lifestyle Efficacy, mostly because I can't think of what else to call it.
//Digital Lifestyle Efficacy is probably best defined as my philosophy towards technology purchases. It is, in essence, a desire to have your technology interoperate, serve it's purpose well, not restrict the user (you), and be as multi-functional as possible. Let me elaborate a bit on this.
There are a variety of product categories for which everyone owns a piece of technology. Here are a couple:
Laptop (and/or Desktop/Workstation)
Portable Media Player
Video Game Console
I'm not saying that everyone owns one of each of these but that everyone owns at least one of these items. That is, just about everybody has a computer, game console, cell phone, or media player. Many people have one of each of these. Your product categories may vary, as may your mileage. (i.e. Home Theater equipment might be on your category list).
So, every now and then I think about buying a product that falls into one of those categories. Right now, my next purchase will likely be a Game Console, then I'll replace my Phone, then my Laptop. There are some interim enabler purchases I'll talk more about later as well. I can predict all that now and explain why I've made those choices by the following guiding principles and rules.
I will here try to list those principles and give an example of each, followed by some general rules to follow in selecting hardware, and the example of my present gadgetry and where it's going. These principles and rules should really be followed by everybody, as far as I can tell, save the openness one of which much more can be said/argued. They are not a reflection of personal preference except where explicitly stated.
Openness - This doesn't deal with consoles as much. For phones, computers, and media players it's essential though. Openness in this sense means the ability to get my data on or off as a device, the ability to migrate between service providers and\or solutions with a minimum of hassle and, preferably, the ability to modify the software running on the system in concern (and the hardware if it's a computer).(Note: This principle is what tends to knock out most Apple products for me. If not for this, everything I own would probably be an Apple product; Unfortunately, Apple doesn't believe in letting me think for myself and do what I want. Sorry, Apple + Apple Fans. No sales for you.)
Interoperability - For a device to be interoperable, it has to work with the other products I own. Bonus points if there is a common aesthetic, a sort of aesthetic interoperability, between them. [Apple wins in this category of course, though they make rare aesthetic blunders as well (see the recent iPod Nanos).] There was a time when iPod support was unavailable on Linux. Given that I run Linux on my computer, that made iPods an untenable solution for me. Were I to replace my car stereo (more than unlikely), it would have to support input from my Media Player, ideally through the ubiqitous 1/8" mini jack. Products that take advantage of open standards are generally a win here.
One-Item-per-Category\Sufficiency: You should never, EVER, under any circumstances require more than one product from any given category to deliver the full functionality you require. That is, you should never need two cell phones or two Media Players. I extend this further to try and eliminate whole categories where overlap makes this possible. For example, you won't see a TV, DVD Player, or Pager on my list because those functions are taken care of by other items on the list. My Computer or Game Console serves as my DVD player and an appropriate monitor will take care of displaying video from the Game Console in lieu of a TV. A TV tuner card will enable the PC to handle cable TV as well. Cell phone's now take care of pager functionality in the form of missed calls and caller ID. Called ID almost means you don't even need an answering machine.
I only have one real universal rule. The other rule is a preference. The preference is for something to be as OPEN SOURCE (not open as above) as possible without compromising the other principles. My next phone, the OpenMoko, will be fully open source and run Linux without any proprietary bits. My next console, the PS3, can dual-boot Linux and act as a server.
The rule is to buy at the optimum time in the market life cycle. This is where a little bit of extra research and knowledge tends to go a long way. Not everyone knows where to find said knowledge or what to make of it so this section may be example heavy. First though, it's crucial to note here that computers are composed of many smaller parts, both hardware and software, and that these are independent products and categories in their own right. That said, we're off.
Technology Market Lifecycles:
These vary across product categories. For example, Consoles are generally good for 3-5 years and depending on how you build them so are computers. That's critically important.
This is why I built a computer in August of 2004 that is only now beginning to show it's age.
It's not just about buying the most powerful thing available at the time, or the newest, and hoping it lasts a while. That's often a decent way to get completely screwed and many people miss out on the finer details of this. Now, to be fair, most people who care this much about their technologies (as we're talking here about computers that are hand-built or at least built from hand-selected parts) are already nerdy enough to know the finer details. All the same this a part of my knowledge that I've never really thought to get down on paper.
All the examples I can think of fall into three (admittedly broad) subcategories. One, technology that is about to face competition from a revolutionary technology. Two, technology that is about to face competition from an evolutionary technology. And Three, technology that is about to shift to a competing technology which invalidates the earlier type.
I'll try to give examples of each to make my thinking a bit more clear on this. One is occurring now in the storage market as Solid-State Storage devices are replacing traditional Magneto-Optical Media (Flash drives are replacing Hard Drives). Two occurred recently when the slew of DirectX 10 (DX10) video cards came along to replace the DirectX 9 (DX9) cards. Three occurred when Apple shifted their product line from the PowerPC processors to Intel processors. Each of these have some caveats which I'll elaborate on.
Now, just because a revolutionary technology is disrupting things doesn't mean you should switch immediately for a particular product category. For example, I had to replace my Portable Media Player this summer and even though Flash-based Media Players are getting cheaper and that shift is inevitably occurring there was one thing that kept me from getting a Flash-based solution. There wasn't one that was available in the size range I wanted (~30 GB). That compromised the sufficiency principle. Even though it became clear a decade ago that LCDs would eventually become the display of choice my desktop still uses a CRT, partly due to cost and partly because I'm waiting on an LCD that will double as a TV for the Game Console.
Where evolutionary technologies are concerned my rule of technology purchasing comes out in full force. Whenever you're considering upgrading a product (say a CPU) to an evolutionary technology, make sure there's not a revolutionary technology waiting around the corner. Pinpointing the optimum place in the Technology Lifecycle can be fairly tricky. I can give a few examples of this and figuring out when to yield to this is probably the hardest part of technology purchasing to get right. Example 1: During the summer of 2004, I put off purchasing an Athlon XP based computer because I knew the Athlon 64 architecture was right around the corner. Example 2: I messed up by skimping and getting a Socket 754 based motherboard instead of going with the Socket 939 platform which had more longevity and features like PCI-Express and SATA even though I got the Athlon 64 bit right. Never skimp on your motherboard. Example 3: I am deferring my laptop purchase until AMD releases their GPU/CPU integrated processors in 2008/2009. The upcoming CPU/GPU convergence and the shift to multi-core processors is one of the biggest upheavals in hardware in the history of computing. Possibly the biggest. There have been a number of such revolutionary shifts lately, which is unusual. In storage (Flash versus Magneto-Optical), in Processing (Multi-core and Cpu/Gpu convergence), in Wireless (Wi-Fi versus Wi-Max), in Displays (LCD vs. LED), in optical drives (DVD vs. Blu-ray vs. hd-dvd), etc.
Finally, you would've been an idiot to purchase a Powerbook right before the Macbooks came out UNLESS you A)Just didn't know or B)Wanted to do something with the PPC architecture specifically.
So, that's generally how I figure out how to buy hardware. Motherboards are about the most complicated piece of the puzzle as you've got to make sure your motherboard will support any additional component purchases you plan to make over the next couple of years.
Right now, I've got an old Nokia phone, a medium-aged Thinkpad A31, a PS2, and a Creative Zen Vision:M 30GB, along with my desktop and my server. I should note that my desktop is likely to soon become my server and my server is likely to soon be retired. My upcoming purchases are a PS3, followed by a Dell 2007WFP LCD, then an OpenMoko phone to replace my Nokia, and finally (around a year or two from now, roughly when I graduate) a new laptop. By that time, laptops will be more widely using Solid State Storage and LED screens as well as Wi-Max and if I'm lucky I'll be able to get a DX10-level GPU/CPU combo from AMD as well all in a nice ultraportable form-factor. Maybe it'll even come with Linux from the Factory...
Now, to share a display and speakers between the media player, game console, and laptop (and, optionally, desktop/workstation) some additional infrastructure is required. My solution is to have a docking station for the laptop that my speakers are plugged into. When I get the PS3 and the monitor the monitor will go into the docking station and the PS3 will go into the monitor. I am also likely to need to get an audio switcher so the PS3 and Laptop can share the speakers. At that point it may be reasonable to get a USB Keyboard/Mouse to switch between the laptop and the PS3. Wireless Keyboard/Mouse might be a plus.
Before you ask, I'm getting a PS3 because of my need to play certain Sony-Exclusive titles and it plays the most software I want out of the next generation. I'm getting an OpenMoko because it runs Linux and is the most open phone on the market that still does what I need. I'm getting a Dell 2007WFP because it's the only flatscreen in the size and price range I need that I would trust to display PS3 games well. And I'm getting the laptop described above because I just have better taste then you. Also, my company biases are towards Sony consoles, AMD processors, and ATI video cards. Alright, that's it. Comment below.
Yes, Apple is ridiculous and anti-interoperability. That is, if you are outside their ecosystem they'd really prefer to pretend you don't exist. In some cases they have to make exceptions, NTFS formatted drives, Microsoft Office/Entourage, etc. but for the most part you're screwed. Great strategy. Loving company. Count me out. The way to foster value is through openness. Just saying. Eventually, Apple will shrivel and die and all the things they invented for however many years (besides OpenDarwin\OpenStep) will be lost to everybody.
Speaking of Apple though, we could talk about the thing they get right. Design. And Simplicity. This really is a feature and don't forget it. It matters and will make a huge difference to you and your users.
Now for a change of pace. A recommendation not to learn Rails and count on successfully doing a web startup. I think the takeaway here is don't get hypnotized by the bubble hype and think for yourself.
Time for another change of pace. To languages. So here we've got essentially a LISP dialect running on the JVM with macros, immutable/persistent data structures, an optional STM implementation, and it compiles to bytecode while staying completely dynamic? Huh. Haha. Hahahahahaha! Wow. Just wow. That's awesome. I'm gonna need to write more on this.
Showing that pushing yourself is the best way to really learn and the path to follow. Experience and schooling can't match passion. And you can defeat the qualifiers myths, generally, if you can prove you know your stuff.
Two important things to note. 1: What you do and what you know effects what you can think and how you think. 2: Programmers are going to have a hard time thinking of what's disruptive with their heads buried in code all day.
And to unwind you at the end of it all? The man himself, Jeff Atwood, reminding you that you should just do it for the love and if you're not having fun, you're doing the wrong thing. Thanks, Jeff.
10 days? 10 DAYS? Where have I been? Busy I suppose. And in case you noticed the server being down, it turns out the router it sits behind decided to go crazy...which is almost comforting. /*This entry dedicated to Raganwald, XKCD, Radiohead, and Amazon.com for keeping me occupied and away from you guys for so long.*/ So, what's been going on?
First, I actually wrote something today. It's been a while since that happened and it felt good. It's not fantastic but it's a start and maybe I'll be able to polish it up some in the future. I don't know that it was inspired by the following Milosz quote, but the quote resounds particularly with me today so I'm shoving it in your face anyway.
"There must be a middle place between abstraction and childishness where one can speak seriously about serious things." - Czeslaw Milosz, Second Space, 4. I Apologize (pg. 49)
And here's the as yet untitled poem, please file naming suggestions below:
How surprised was I to learn that the dichotomy was not that of good and evil, as expected.
Rather, torn between shame and the frivolity of a bottomless awe.
Bound mesmerized to the spectacle of the world and all the marvelous constructions within it.
I found myself vertiginous, perhaps self-aware, but certainly unsure how to contribute to so great a vista.
As though asked to add new colors to the horizon, or change the sound of the ocean on a starry night.
That task is too monumental for me, I said. But awe is not enough, my immense wonder is insufficient.
Still, it is better to make public a frivolous and joyous etonnement than to admit
to the truth: That every man is a thunderclap receding into the distance, and silence.
Second, on Friday we had the best video game tournament in probably 10 months or so, IMHO. I actually did well in Melee with Zelda/Sheik. Semifinals well. The small atmosphere and various special appearances made the evening though. Derin and Pete were both able to come and I had lost touch with Derin so that was particularly awesome.
Third, the new Radiohead album is out and it's outstanding. What's more outstanding is that Radiohead are releasing and self-distributing the album as a download via their website and you decide what to pay them for it. That actually might not be more outstanding than the album itself which could be the best thing since OK Computer. More to come but I really like it and the early favorites are Reckoner and Jigsaw Falling Into Place followed by Nude and All I Need. I'm still pretty skeptical about the last track, Videotape. There's a live acoustic version on Youtube that just sounds better to my ears.
Fourth, I figured if I'm really going to take a year off to self-study and see if learn more/better/faster/stronger/etc that I'd better come up with a sort of reading list. Thank goodness for Amazon.com wishlists. I figured I might as well include a bunch of the stuff from my earlier book lists as well. The Computer Science stuff is thither.
That's all for now. More later.
-To put more (of myself) into what I'm doing. To be in things fully, not half way. This goes for school and work, particularly.
-To stop hating a certain someone. This is a counterproductive, eats-away-at-you feeling. Not the sort of thing that can lead to anything good.
-To choose a core subset of people that I can really care about and to love them religiously.
With regards to figuring out the future:
-To do more actual exploration by doing and less exploration by reading (reddit, for example). This (reddit instead of work/programming) is a way to stagnate. I need to optimize habits that will make me more likely to do more work and real things, especially new and creative things.
-To build a knowledge base with del.icio.us instead of feeling like I need to read and remember and blog about everything. del.icio.us is the net journal.
With regards to relationships:
-To be less afraid. To be aware that what is lost is never what is needed and that the road to come is already paved. The interesting part of the journey is walking it and seeing who joins you. I need to be more mindful of that.
(The difference is that the overruns on a physical construction project are bounded. You never get to the point where you have to hammer in a nail and discover that the nail will take an estimated six months of research and development, with a high level of uncertainty. But software is fractal in complexity. If you're doing top-down design, you produce a specification that stops at some level of granularity. And you always risk discovering, come implementation time, that the module or class that was the lowest level of your specification hides untold worlds of complexity that will take as much development effort as you'd budgeted for the rest of the project combined. The only way to avoid that is to have your design go all the way down to specifying individual lines of code, in which case you aren't designing at all, you're just programming.
Fred Brooks said it twenty years ago in "No Silver Bullet" better than I can today: "The complexity of software is an essential property, not an accidental one. Hence, descriptions of a software entity that abstract away its complexity often abstract away its essence.")
I also found an interesting opinion piece/writeup on Inheritance.
More later. It's sleepy time.
honorable mention: massive attack - dissolved girl
sun's corporate strategy
hahaha (i do like sun though)
his comics leave me speechless and not a little afraid.
i really hope things move in this direction for my (future?) kids and myself
paul graham as chuck norris
that's just amazing. most of these jokes are too nerdy for me to get!
p2p\file sharing insurance
it's so cool that this exists i'm speechless. record industry, take note.
gartner says open source pwns
A tasty Neruda poem... and a real blog post soon. Promise this time.
I Ask For Silence:
Now they can leave me in peace,
and grow used to my absence.
I am going to close my eyes.
I only want five things,
five chosen roots.
One is an endless love.
Two is to see the autumn.
I cannot exist without leaves
flying and falling to earth.
The third is the solemn winter,
the rain I loved, the caress
of fire in the rough cold.
My fourth is the summer,
plump as a watermelon.
And fifthly, your eyes,
Matilde, my dear love,
I will not sleep without your eyes,
I will not exist but in your gaze.
I adjust the spring
for you to follow me with your eyes.
That, friends, is all I want.
Next to nothing, close to everything.
Now they can go if they wish.
I have lived so much that someday
they will have to forget me forcibly,
rubbing me off the blackboard.
My heart was inexhaustible.
But because I ask for silence,
don't think I'm going to die.
The opposite is true;
it happens I'm going to live.
To be, and to go on being.
I will not be, however, if, inside me,
the crop does not keep sprouting,
the shoots first, breaking through the earth
to reach the light;
but the mothering earth is dark,
and, deep inside me, I am dark.
I am a well in the water of which
the night leaves stars behind
and goes on alone across fields.
It's a question of having lived so much
that I want to live that much more.
I never felt my voice so clear,
never have been so rich in kisses.
Now, as always, it is early.
The light is a swarm of bees.
Let me alone with the day.
I ask leave to be born.
This blog covers 2015, Books, Butler, C, Dad, Discrete Math, Displays, Education, Erlang, Essay, Gaming, Gapingvoid, HTDP, Hardware, IP Law, LISP, Lecture, Lessig, Linkpost, Linux, Lists, MPAA, Milosz, Music, Neruda, Open Source, Operating Systems, Personal, Pics, Poetry, Programming, Programming Languages, Project Euler, Quotes, Reddit, SICP, Self-Learning, Uncategorized, Webcomic, XKCD, Xmas, \"Real World\", adulthood, apple, careers, coleslaw, consumption, creation, fqa, games, goals, heroes, injustice, linux, lisp, math, melee, metapost, milosz, personal, poetry, programming, ragequit, recreation, rip, strangeloop, work
View content from 2015-05, 2015-03, 2015-02, 2015-01, 2014-11, 2014-09, 2014-07, 2014-05, 2014-01, 2013-10, 2013-09, 2013-07, 2013-06, 2013-05, 2013-04, 2013-03, 2013-01, 2012-12, 2012-10, 2012-09, 2012-08, 2012-06, 2012-05, 2012-04, 2012-03, 2012-01, 2011-10, 2011-09, 2011-08, 2011-07, 2011-06, 2011-05, 2011-04, 2011-02, 2011-01, 2010-11, 2010-10, 2010-09, 2010-08, 2010-07, 2010-05, 2010-04, 2010-03, 2010-02, 2010-01, 2009-12, 2009-11, 2009-10, 2009-09, 2009-08, 2009-07, 2009-06, 2009-05, 2009-04, 2009-03, 2009-02, 2009-01, 2008-12, 2008-11, 2008-10, 2008-09, 2008-08, 2008-07, 2008-06, 2008-05, 2008-04, 2008-03, 2008-02, 2008-01, 2007-12, 2007-11, 2007-10, 2007-09, 2007-08, 2007-07, 2007-06, 2007-05