- my projects:
- parseerror.com:
- useful:
- people i know:
- people i don't know:
- software:
- useless:
|
- i've been hearing about llvm here and there for the past couple of
years, but never really took a look. i figured it was immature and not a serious contender to gcc. but recently
i started poking around clang, the C/C++/ObjC frontend.
the llvm architecture is really nice! everything is lib-ized with well-defined interfaces. you can mix and
match parts of the project; so if you wanted to write a tool to analyze C, or generate documentation, or generate
tests you wouldn't need to write a whole parser, you could just use theirs. this interests me because that's
what I'm interested in doing. the code seems very simple and hackable, unlike GCC which is (more mature, but)
monstrous and unapproachable. i've never been a fan of C++, but i think i'll pick it up for the sake of playing
with llvm.
- LLVM Programmer's Manual
- LLVM Coding Standards
- GDB: automatically upcast an object for dumping purposes:
set print object on
- GDB doesn't parse C++ namespace::class names correctly in casts, you need to use single quotes...
(gdb) p TD->getSemanticDC()->FirstDecl
$30 = (clang::RecordDecl *) 0x9452dc0
(gdb) p (clang::RecordDecl *) 0x9452dc0
A syntax error in expression, near `) 0x9452dc0'.
(gdb) p ('clang::RecordDecl' *) 0x9452dc0
$31 = (clang::RecordDecl *) 0x9452dc0
- OS X commands
- wow, compiling/linking llvm is pretty computationally brutal. i've been trying every machine i have access to and none of them handle it that well :/
- it's the linking of the debug executable that is so brutal; ld is taking up hundreds of MB of RAM to link together the 150 MB statically-compiled clang-cc, and writing it out to disk everytime is the killer. so even after i change one line of code, it gets relinked again from scratch. there's got to be a better way.
- Well, i installed XCode on OS X and i have to say i was stunningly disappointed. it was more like notepad than Visual Studio. back to vim.
- oh yeah, and iTerm sucks too.
- The Locality of Code Changes
- Regular Expression Matching Can Be Simple And Fast (but is slow in Java, Perl, PHP, Python, Ruby, ...). I've been reading this and re-reading this a couple of times. The technique is so simple and powerful I have trouble wrapping my head around it.
- Examples of mutally recursive types, data and functions in Ocaml. Just what I need.
- Software idea: A graphing library based on Visual Display of Quantitative Information.
- structural regexps
-
Software idea:
Security spider. Traverse publicly available codebases via public CVS/Subversion/Git/Mercurial repositories
and dev sites like sourceforge, freshmeat, github, etc. Scan software for potential bugs.
-
Software idea: Along the same lines, how about a machine-learning system that learns about software patterns by
analyzing the diffs from project code histories and applying what it learns to project HEADs?
-
I've been thinking about software development lately.
I've been on what seems like a convergence recently of a few different concepts —
many based on limitation.
- CPUs can execute a fixed maximum number of instructions per second, and no more.
The biggest optimization gains can be achieved by selection of an algorithm that does
the least work and still arrives at the correct answer.
A hand-optimized bubblesort in
asm is still bubblesort.
- run fast, do less
- The vast majority of CPU instructions in a compiled program are very boring.
3/4 or so of instructions are
move, test, jump and call.
You can't optimize these. You have to figure out how to make do with fewer of them.
- Programmers can write roughly the same number of lines of code per year regardless of language.
Combine this with the fact that a line of "higher level" code is equivalent to dozens
of lines of "systems language" code.
Given a quota of lines I can write per year, whatever the number, the amount of things I can do
depends on the expressivity of the language I'm using.
I can do a lot more in 10,000 lines of Python or Erlang than I can in C.
- Simplicity is more admirable than complexity.
- Correctness and reliability are more admirable than performance.
- Functional programming
reduces complexity of code by emphasizing algorithms over operations
and restricting the data on which they operate.
Iteration is replaced with pattern matching and recursion.
Object states are tracked explicitly.
All data on which a function operates must be passed as a parameter.
- To iterate is human, to recurse divine. -- L. Peter Deutsch
-
Inspired by all this, I get to thinking that microkernel operating systems are a good example of the current thinking in software.
Microkernel operating systems embody the best design principles, and yet are unpopular because their guarentee of isolation, safety
and system stability requires a few percentage points of raw performance.
And then I get to thinking that operating systems basically require C.
And then I get to thinking that I'd like to be able to design and implement algorithms in a HLL yet produce C.
Scratch that, it would be cooler if I could parse existing C, transform it into an intermediate functional language and do things
like modify it and export it back to C, or search for potential bugs in it.
Something like a traditional static analyzer, but not exactly. So let's get to it...
- Intelligent rant against XML
- Idea: music generator program. Seems like it wouldn't be too hard to randomly mutate a song from
an assortment of clips, based on a few general rules. Some basic input from the user could direct it: faster/slower,
this is good/this sucks, etc.
A slightly different bent would be a program containing a "standard library" of clips; a service would store/transfer
"songs", which would just be the instructions in order to combine the shared library clips to recreate the author's song.
You could then take that idea and "tag" each of the library clips, or any combination of them with emotive/audio descriptors
like "agressive", "harsh", "sad". Then songs could be generated/selected based on the listener's
current mood.
Damn.
- What do the symbols mean?
- ASCII Text Generator. Man, that's handy. Sort of a web-based figlet.
All respectable software projects require a logo that displays well on a line printer.
- Saw "Dimming the Sun", a NOVA documentary on Global dimming
- A Comparison of Solaris, Linux and FreeBSD Kernels
- How to use hints in Oracle sql for performance
- Got my first github pull request. git and github made merging in someone else's changes really easy. Who knows, this whole cooperative software development thing might just pan out.
- On μ-Kernel Construction
- L4Linux : an active port of Linux to the L4 microkernel architecture. sounds interesting.
- 2009-05-20 I got an Op-Ed piece about bike commuting published in today's Hartford Courant.
- rafb's pastebin site has been shut down, sad to see it go. used it for years.
- erlang irc bot in ~50 lines of code. i started playing with this.
-
"Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly
as possible, you are, by definition, not smart enough to debug it." — Brian Kernighan
- You didn't ask for it, but it's finally here. I've been meaning to write a stupid Slashdot Headline Generator for years, and I finally lacked the ingenuity to do anything better. It isn't very interesting, but very occasionally it generates something mildly amusing... just like Slashdot!
- East Coast Greenway
- Smalltalk is a specification for a beautiful dynamic language and runtime environment; it's too bad it isn't more popular.
- Ruby is a popular dynamic language heavily influenced by Smalltalk. Ruby's design contains some really nice ideas, but sadly, the implementation and management of the virtual machine, the packaging system and some of the flagship software is a mess, with baffling versioning, unreliable compatibility and frustrating pathalogical behavior.
- March of the Terminators
- Germany imagines suburbs without cars
- 2009-05-10 Biked the CT coast to Manhattan with folks from Elm City Cycling. Never ridden in a group before, was a lot more fun than riding alone. Everyone was really friendly. The trip was lots of fun, pretty scenery and the traffic wasn't bad. Biking around Manhattan was so easy and natural; it was fun being faster than the cars for once.
-
2009-05-08 I commute to work via train and bike. At least, I try to. The Metro North railroad recently changed
their bicycle policy and it's making life harder for bike commuters. I wrote an article about it, have a read:
-
As of May 3, 2009 the Metro-North railroad policy regarding on-board bicycles was changed, ostensibly permitting greater access.
As an MTA customer who has been commuting by train and bicycle daily for a year
I can say that the new policy makes things worse, not better.
Today on the 6:01PM Fairfield to Grand Central I saw two cyclists ejected
from the train, one of whom I know commutes daily. He was one stop short of his
destination, and the train was not full... read more >>
If you think Metro-North should actually encourage bike commuting please contact the MTA and say so.
- After Midnight
- People get backslash (\) and forward slash (/) confused a lot, so I made this backslash/forwardslash reminder graphic
- Making complex, far-off predictions is a narcissistic and futile exercise, so here goes: Brave News World
- Livable streets
- Your Commuting Costs By Car Vs. Train
- I'd realized years ago how horrible of a language php is. But amazingly, php just gets worse. For example, they manage to easily temper the good news of the addition of long-overdue namespaces with the ludicrous use of the '\' character to separate them, when every other language in the Universe uses '.' (This.Makes.Perfect.Sense vs. What\Were\They\Thinking). Today a member of #php ran across another horrific misfeature; a reasonable attempt at string concatenation from a newbie programmer:
"a" + "b"
This code works well in java, javascript, C# and other languages, resulting in a string "ab". but in php it does the worst possible thing:
var_dump("a" + "b");
int(0)
It happily converts the two strings into integer 0 and adds them, destroying all data in the non-numeric strings with no warnings whatsoever. This is particularly painful because the + operator is a common string concatenator in other languages.
2009-05-03 Spent some serious, quality time doing some bicycle maintenance this weekend. It was fun. I'm proud to say that everything I removed eventually made its way back on (except for the crappy plastic fenders and enormous amounts of grit and grease stuck under my fingernails, of course).
I've been watching the excellent bicycle tutor videos and referring to my bicycle maintenence guide and am getting more confident about doing simple bike maintenance/cleaning. I'd love to be more self-sufficient; it's definitely in keeping with getting rid of my car in the first place. It's funny; like everything else bicycles are both simple and complex — fundamentally they're just a frame, wheels, handlebar, seat and drivetrain, but the details are so much more than that... each of the afore-mentioned components are just the required parts; modern bikes have lots of extra parts as well, and for every single component there are at least 3 major variants each containing a whole spectrum of options. And of course, there are interdependencies and incompatibilities, and each one has different tools.
- Elm City Cycling
- Bike New Haven
- Human Powered Vehicle
- Washington, D.C. has a bike-sharing program called SmartBike; but unfortunately it appears to be for residents only; why?
- Sheldon Brown's Personal Bike Page
- Bicycle Camping and Touring
- Derailer Bicycle Collective
- pistadex : an index of the average price of Bianchi Pistas listed on craigslist across several major American cities. Why? Fixed-gear (fixie) bikes are currently trendy; this index seeks to determine when the fixed-gear fad will come to a close. Binachi Pista's are popular fixed-wheel bikes.
- Ah, the weather is finally getting nice; back into the sunny 60s. Strangely it's also been going into the 70s and right into the 80s, but I can't complain. I was outside doing yardwork and cleaning up my bikes all weekend. I'd like to figure out how to take them apart and work on them properly, but only iff I can get them back together again :-/
Goals:
- Learn how to generally disassemble (and reassemble) a bike; get the proper tools and all.
- Start showing up for Critical Mass in New Haven.
- Figure out how to patch up the scrapes on my frame.
- I've seen nail polish mentioned; going to try that.
- Learn how to true a wheel.
- Re-paint a Beat-up Bike
- United Bicycle Insitute offers some really interesting-looking classes, I'd like to save up and attend!
- American bike gear merchants that look interesting
- How long does a bike last? An 83 year-old woman had her ~70 year-old bike stolen
- google H1N1 swine flu map
- Use rtorrent like a pro. I'm participating in the Ubuntu 9.04 release torrent; trying to upload as much as possible. I love how BitTorrent has the property that the more popular a file is the faster it is to download it. Genius.
-
![[]](images/netbook-lappy.gif) An EEE PC sitting on a laptop's lap.
2009-04-21 I got my EEE PC in the mail last night. Apparently you can buy them with Linux pre-installed, but newegg didn't have any of those available, so mine had Windows XP. I installed Ubuntu Netbook Remix via a usb stick, and I must say, I am extremely impressed with it. An attractive simple, uncluttered, effective GUI on top, tailored for the modest but acceptable 1024x600 native resolution, with a proper Debian Linux system running underneath: firefox + extensions, dev tools, music and video software, everything one could want.
The machine itself has a nice form factor, is light but seems relatively sturdy. The keyboard is (very) cramped, but I managed; and the machine made an acceptable desktop when augmented with external screen and keyboard.
-
- Argh, the secondary flash drive on my EEE PC is dying. Read errors from many of the blocks; it is unusable. Need to return.
- Had to go through EEE PC manufacturer to get RMA, wasn't too hard. Submitted it.
- Getting functional EEE PC back soon. Hope it works.
- older stuff is in the archive...
|