Oh, I'm fully aware of my irrelevance to the scientific community.:P
And no, the punnet square really isn't hard as such, but I was pretty sure the teacher's motive was to catch as many students in fatigue or misalignment errors as possible. Also keep in mind the fact that >60% of the students were still confused by phenotypes.
Regardless, writing code to do it for me transformed the assignment from painful drudgery into a fascinating exercise. I was especially proud of realizing — on the way to gym class, no less — that it could all be represented as bitmasks. (I think this was when I first truly grokked the power of C.)
Genetics was really the only thing that captured my interest in biology; sadly, the class didn't linger long on that topic. I'm still interested in it, all from an amateur perspective, of course. If I get time I think I'd like to make some new software that does multiple generations and traits requiring more than one gene.
Well, I know it's nowhere near what these guys are doing, but this brought back a neat memory (one of the few) from high school. My biology teacher was one of the sadistic ones, and one week he decided to assign an 8x8 Punnet square. My friend and I looked at each other and said, "Why do it manually?"
Thus was The Punnetizer born. Once I had the basic functionality working, I went hog-wild with output formats. So you can have your Punnet squares in ASCII text, HTML, LaTeX, and CSV. What was really fun was running it on a StarFire with 2GB of RAM with the maximum number of traits. The output HTML was something like 347MB.:P
Anyway, that was one of the few times we impressed Cowell. He actually volunteered to give us extra credit. Of course, he graded our next assignment extra tough, but oh well.:P
In my opinion, Perl is good for, well, Practical Extraction and Reporting.:) I've always called it "BASIC with regexps", simply because it is most reminiscent of good old BASIC in its incoherency. (Please note that incoherency is not necessarily a bad thing; for focused tasks it's probably better that each feature have a syntax uniquely tailored to it, but the problem occurs when you try to make the language do everything under the sun and then some.) Of course, it was possible to write a working syntax highlighter for BASIC:)
Right now I'm addicted to Common Lisp, and one amusing thing I've picked up is that Perl is approaching Common Lisp in functionality. As an example, a few of my favorite things are closures and CLOS, and Perl has closures now. Perl's OO system (please note that I'm not an expert, and I've only used it in passing) isn't as powerful as CLOS (is anything?), but it's certainly free of the constraints of toy systems like Java.
So Perl and Lisp are approaching the same problem from completely opposite directions. Perl has syntactic sugar splattered everywhere, while Lisp basically has (one (type (of syntax))). This is a good thing, because you can have the same power available to you, no matter what your preferences on syntax and platform organization are. I prefer Lisp, but whatever lets you Get Stuff Done...
I have to chuckle a little bit at the title of this series, and the fact that Larry Wall actually knows what the word "apocalypse" is. I'm not a big fan of Perl, myself, but I have to say that Larry Wall is one of the most interesting and insightful people to show up in the arena for some time.
As a Christian, I have to say it's nice that people like Larry are out there to show we're not all stupid bumbling loonies (it's just Sturgeon's Law cropping up again, you know). If you've read any of his writings, especially his "State of the Onion" addresses, you'll see that he manages to present his thoughts and beliefs in a humorous and intelligent way.
Secondly, I really like the way he manages to make analogies between things. The first year he used sounds, the second year he used pictures, and the third year he used smells. And somehow he ends up with a grand scheme that addresses theology, science, computers, and, of course, Perl.
I think this is great, not just because the subject matter is interesting, but because to be any good at programming, you have to be able to map between different systems. The good ones don't seem to be as focused on depth (although they certainly can be; no one can argue that Knuth isn't good, and he's way hardcore) but on breadth of experience. The more different systems you experience, the more you can abstract the particular thing you have to be working on and actually transcend the implementation language and platform. (Or at least that's what I tell myself, being permanently scatterbrained and distractable:)
Anyway, I don't know how to keep this from sounding hopelessly fanboyish, but ummm Larry Wall is cool and learning new stuff is cool, and I recommend that everybody go read his stuff and then go play with something you've never tried before. Exploration is the One True Way to have fun with computers again.
This reminds me of the time some site (I think jokewallpaper.com) found out that certain PowerBooks were being recalled because they could catch on fire. They took a picture of that Vietnamese monk immolating himself and added the Apple logo and the words "Think different.".
He cited the history of Unix, which has been replete with incompatible versions.
Yes, partially due to the fact that each vendor was restricted from building on the work of others, and partially due to the fact that there were multiple vendors. You won't see "Bob's Win32", simply because Microsoft actively works to prevent such compatibility.
Once solid platform-independent implementations of the various UNIX tools became available, people began switching to them. For all the complaining people do about the various Linux-based OSen, they are remarkably consistent at the most basic user level (drop me on any GNU system and I will be able to at least find my way around the system, write code, etc). And this toolkit is available thanks to the GNU GPL and the enthusiasm RMS roused in the various developers.
Secondly, free software actually enables integration with closed platforms. For example, see Samba or Cygwin, which allow tight integration between Windows and Unix (no thanks to the "open" and "developer-friendly" Microsoft). And the first thing I and most other people do when confronted with a fresh Solaris box is to install a decent userland.
"It is innovation that really drives growth," Mr. Mundie said, arguing that without the sustained investment made possible by commercial software, real innovation would not be possible.
Uh huh. Sure. Let's take the WWW as an example, since everyone lately seems convinced it's the most innovative thing since sliced bread. It was invented by a guy at CERN, and Mosaic, the first massively popular graphical client, was written at NCSA. Since Web stuff became a commercial thing, exactly what "innovation" have we recieved? Bigger and more offensive ads and horrifically noncompliant HTML, that's what.
Which is why you should check what the person who spoke to
you meant.
Excellent point, which is why I did. I mentioned the other things I
had on my plate at the time, asked whether I should try to balance the
activities, and was told "Work on this 100%. Ignore everything else
until this is completed. This is crucial to the success of the
business.".
Instead, what you did was to take the most literal interpretation
possible
Not to be that annoying literalist geek, but that's how I am, and I
view it as the safest option. If you want me to spend 90% of my time
on something, say so. Don't say "drop everything", because I
will. You manager, I coder, you say, I do. And I view the
potential consequences as far lighter than the possible "Did you get X
done?" "No." "Why not?" "I was working on Y and Z." "#@$^B&^%$?! I
explicitly told you to only work on X until it was complete."
literally stop work on another important
task
For 1 day. The stuff was due to be done in a week or two.
And at the core, who should be managing things? I'd suggest the
manager.
and assume that you had made the correct interpretation of
someone else's priorities from a quick, rushed conversation.
People where I work like to do everything as a quick, rushed
conversation, and it's caused me and others no end of problems, which
is why I've taken to doing all this sort of communication by email. In
fact, I'm going to put up a sign at my desk: Ask me to do it
through email. If you ask me in person, it didn't happen.
Frankly, in that manager's position, I would strongly
suspect that you had just blown off the job and were using "drop
everything" as an excuse.
Yes, streetlawyer, you would.
In short, you're in the position you're in because you're a poor
communicator.
Partially, yes. I have a hard time getting shunted around to a
million different projects at once and I've missed (accidentally!)
more meetings than I really should. I also know that I'm pretty much
unable to say no. I think every problem is a quick 5min thing, and I
accept too much on my plate. I'm working on that.
I'm fully aware that I'm not without my faults, but all I ask is that
I not be castigated for trying to do my job as I was directed.
--
Re:Valley startup syndrome. My life in a bucket.
on
Coder on the Cross
·
· Score: 4
As an interesting side note, I work with Zeio. He's the "IT guy" mentioned below...
Several things struck me immediately in this article:
The application I had written was finished, but I received no kudos
from the management at the team meeting. [...] I fell just short of
"superstar." It wasn't for lack of intellect, I was told, but for lack
of focus. Overdelivery was my coping mechanism; I figured that no one
would be able to overlook the fact that even though I was spread far
too thin, I kept hitting deadlines.
This is me, except for the "meeting deadlines" part (I'll be the first to admit that long-term concentration is not my strong point). Where I work,
I'm having my "top priority" constantly jerked out from under me by my
boss. Then I rush to get acquainted with the new situation, rush to
get something accomplished, get 50%-90% done, and then get my "top
priority" reset again.
The most frustrating experience I can recall in recent memory is when
I had been working on learning our new system and porting my bug fixes
to it (despite being told that I'd be a valuable team member, come up
with neat stuff, etc, I ended up getting assigned to bug fix after bug
fix) when I was told that I absolutely needed to drop everything and
work on getting a new QA server set up. So I did. I got in sometime
in the morning and worked completely straight until 1900, no breaks of
any sort, my coworker hovering over my shoulder and breathing
tobacco-smoke-tinged breath on me. Finally, I finished what I could
do, and with a splitting headache, I took my laptop and sat on one of
our futons.
"Did you finish the bug fixes?" I look up to see my boss standing
over me. "What?" I am the tiniest bit incredulous. "What's
the status of the bug fixes?" "Not done." "Why not?" "Because you
told me I had a new top priority." "Well, yes, but you have other
priorities as well." Apparently "drop everything" has a different
meaning for different people.
Anyway, this is pretty much par for the course. When I do get a
moment to myself, I'm unable to just sit down and code. I can't just
hack new code in between 5e6 other things; my mind doesn't work that
way. I'm not blaming anyone else for this, either — I know I'm
not getting anything done — but it sucks to want to be
creating new code, to add a little piece of myself to our product, but
to sit and fester when I have the chance to do so.
So I'm unproductive, unhappy, and unfocused. Yippee. This is not at
all the environment I was promised when I was hired, and a number of
coworkers have exactly the same cheated feeling. I'm the butt of all
jokes, the person all odd jobs get handed to, and the assumption is
always that I can pick up whatever crap J. Random Sloppy Coder left
lying about. My suggestions are mocked, my self-esteem is shot, and
at the core, I know only I can earn any respect for myself, but I'm
sick of trying to impress these people. Oh, and when I had a deadline
the next morning and did my best to stick to my word and have it
ready, I was openly insulted for being so gauche as to spend the night
at the office.
My resumé's up now,
and I've got a few job offers coming in, but I don't know how firm
they are, and I really don't want to leave one company in which I have
stock options (no matter how few) and a decent salary for another one
which might be just as bad.
I've taken to sitting around with our IT guy and posting to Slashdot.
I don't feel like a vile festering leech; I'm actually helping get
things done for the company, but it's not what I was hired to do, and
I know that my "projects" are getting held up while I cower in the
corner. I'm just hoping that I can work myself back up to writing
something decent tomorrow or this weekend (yay for wasting my weekends
doing a poor job of recovering the time lost during the week).
AND I HATE THE FLUORESCENT LIGHTS!!! They give me
painful headaches and destroy my concentration. But what am I
supposed to do? Sabotage the circuit breakers?
Whee. What a rant.:-P
If you're a manager, the one useful thing I hope you get from reading this post
post is to give your people a chance to accomplish what you've
assigned them, and treat them as competent professionals.
Another popular AI language is Prolog, which is another language with weird syntax. This derives from the fact that it is a declarative language. Everything is stated in facts and rules, and the Prolog environment "reasons" based on these. Many expert systems and similar things are written with Prolog.
Prolog seems more popular outside.us, but that seems to be a territorial thing to me (Lisp was invented in.us, while the major dialect of Prolog is called "Edinburgh Prolog"). Japan, especially, had a big thing for Prolog in the 80s, but it seems to have died off (along with, thankfully, Turbo Prolog).
I actually tend to prefer Prolog for AI-type things, and use Common Lisp as my general-purpose language. It's also worth noting that implementations of simple Prologs in Lisp abound.
I suppose this sort of FUD is to be expected from someone with a sig from the man who unleashed Perl upon an innocent and unsuspecting world:)
Unfortunatly, most functional programming languages are toys that sometimes get used in big projects.
For a laugh, why don't you email that comment to Erik Naggum... Anyway, functional languages, CL especially, are the most scalable in my (or opinion experience).
Before anyone flames me to a crisp, I'd like to point out how bad the I/O is in Lisp
Ummmm, no. I write little Lisp programs in lieu of shell scripts or Perl. And I've written a package to process CVS logs (terribly painful format to parse, btw), which chows through megabytes of logs ridiculously fast.
Also, most lisp engines I've seen are interpreted (save for things like the Lisp Machine).
CLISP compiles to bytecode, and CMUCL compiles directly to native code. Both are completely free, with source code and everything.
but for the most part you can do them easier and faster with C, also it's nigh impossible to do very low level things with Lisp (At least from with what's available)
So use FFI. Call your C function from Lisp, and be happy.
Lisp is truely the language of the theoretical math major.
To be sure, but it should be the language of everybody else too.
I'm a big fan of Common Lisp as well as Paul Graham (having read his book ANSI Common Lisp, I can see that he possesses both in-depth technical knowledge and a sense of humor). This article seems to match what I've read of him in quality, and I look forward to reading it in more depth when I get home.
I'm not a Lisp guru by any means, but the one thing that I always get a kick out of is how easy it is to become a low-level guru. After a few weeks of playing, I was doing things I wouldn't have dreamed of doing in C or Java. And it changes one's perspective. It all translates to machine code at the lowest level, of course, but after learning Lisp I can say without a doubt that I'm a better C programmer.
Lisp is an interesting language, because in some ways it's ridiculously high level (closures, generic functions, garbage collection, et cetera), but you're also able to get down and dirty with the cons cells with no trouble. I think this quote expresses it best:
What I like about Lisp is that you can feel the bits between your toes.
-- Drew McDermott
Lisp is extremely versatile. While it was originally used in AI, it's honestly the best tool for most situations I come across.
(You can see one thing I've done here, and I've done some other stuff that I haven't had a chance to post yet.) Whenever I need to do more in the shell than loop through a few files, I write it in Lisp (I've written 5-line programs to leech an entire Web page's MP3 archive). Lisp is great at processing logs, the output of various subprocesses, and other such things. It's also got a wonderful OO system.
Graham's "Blub" example holds true for everyone I've met who has a disdain for Lisp. The advanced features it provides really do go over their heads, which is sad, because these are often intelligent people. Also, they don't look beyond the syntax differences, and often have a lot of misinformation (Lisp is slow, you can't do iteration in Lisp, Lisp is for lists and AI) fed to them by CS professors or whoever. I also often see a lot of posts from newbies who want to write "C-Lisp" and give up when that doesn't work. Lisp is a different paradigm, and needs to be treated as such.
If you're interested in Lisp, I would recommend reading The Evolution of Lisp (don't be angry at the poor fonts in the PDF; they didn't use scalable TeX fonts, the weenies:), Paul Graham's ANSI Common Lisp, and Winston and Horn's LISP, 3rd Edition (but ignore them when they disparage car and cdr), in that order.
Also, don't be confused by the various Lisps out there. First, ignore Emacs Lisp. Among its quirkyisms, it's dynamically scoped, which means that if you declare a variable, every function you call will also have access to that variable. Secondly, Scheme and Common Lisp are vastly different. Scheme is much leaner, and has 1 namespace, which means you can't name a variable and a function the same thing (I dislike this, but it's a hotly contested issue). Common Lisp has a huge set of standard APIs and much more versatility prebuilt into its core, while Scheme tries to stay small so as to provide an easily implementable standard. I'm a Common Lisp man, myself, but try things out for yourself.
One final thing is that if you hang out with them, you'll realize that most of the long-time posters are extremely knowledgable and have a great sense of heritage. I've learned a great deal by simply lurking through their flamewars, since I find out a lot about what issues may crop up for an individual programmer.
I'm not by any means an XML guru, but your comment prompted my curiosity and I decided to go through the XML Schema tutorial. I noticed the following line at the beginning of their first example:
Sun has no way of connecting back in to work from home. Sun.Net is a sad joke, providing only access to mail and calendar and such. The servers are (or at least they were) quite unreliable.
There is a terminal app, written in Java, but instead of using something normal and usable, they used some bizarre thing which interfaced with the security cards. I can understand the need for that, but the only way to use the system was through an extremely slow and unreliable applet, or by telneting to localhost and going through several gateways (each of which had a nasty habit of hanging right in the middle of working) to finally telnet (?!) to one's office workstation. X11 was, of course, unavailable, unless you wanted to go in through the modem pool, which was limited to 28.8kb/s.
When the only way to get in and maybe fix the emergency brewing at the office is that pathetic, it's a given that there will be unauthorized tunnels in use. I experimented with a few SSH-based things myself (made extremely painful due to the temperamental SOCKS proxy), but had the good sense and courtesy to be even more anal about security than is my wont.
Oh yeah. People liked to share passwords. Within earshot, or over unencrypted voice lines.
Somebody at Sun please work on fixing this. It hurts to remember.
I worked at Sun fairly recently, and I have to say that their security is nothing short of pathetic. I don't want to seriously jeopardize their operations (although it's sadly obvious that they don't need me to do that), so I won't go into much detail, but:
There is no NAT. Any connections to the outside world go through application-based proxy servers, and if one is lucky and the server is up, SOCKS. This is not in itself a problem (except for the system's hopeless obsolescence and inconvenience), but it encourages (I would almost say forces) employees to find less than official means of getting to the outside world in order to do their jobs.
No one I met had even heard of SSH. No one. All internal connexions take place over RPC, and most people have.rhosts file with at least "+ <user>" in it.
Everyone leaves their X server wide open. xhost + is everyone's first action ("xauth? what?"), and I was shocked to see a security manual put out by Sun say "In order to start this GUI security tool, you will need to run the command xhost +.".
Servers were always going down, badly enough that I moved my home directory, mail, and all related files and services to my local machine. Even in instances where a proper security policy might exist, I have doubts that it would last for long.
There are other gaping holes which I feel it would be completely unfair to post in any level of detail, but suffice it to say SWAN is riddled with holes waiting to be exploited, and I hope someone decides to do something about it before a h4x0r realizes how easy it would be to own all of it.
Sadly, Sun is very low on technically competent people, at least where I worked (central). There's a lot of managers and support people, and many of these are tasked doing things they aren't really qualified for, and pressured into doing a shoddy job.
Honestly, I didn't meet that many people I disliked. But most of the people I worked with were really out of their depth working with Sun machines, and even the ones that wanted to learn had no time to do it, or weren't allowed to by their bosses.
I wouldn't be surprised if most of the executives use Windows, because they have enough clout to get out of using the standard system put in place for the less than fully clued.
I've been planning for quite a while to write my own site engine in ANSI CL. I don't like CL-HTTP for a number of reasons:
It seemed overly complex, from the quick overview I gave it.
It has a (to my mind) truly vile license agreement.
I want to do it myself. I feel that taking preexisting software projects will only get you so far, and if you have a specific goal in mind, it can often be better to start from scratch, so you have a firm understanding of your project's foundation.
Anyway, I haven't gotten beyond writing a few really silly socket demos for myself, but I keep planning to start RSN. My general idea is to have a core functionality of receiving HTTP requests and handing them off to various hooks. I'd probably write a simple reference server that serves up static files and such.
From there, I'd build a second layer of actual site functionality. My goal is to move quadium.net over to this server once its basic implementation is working correctly. I want to have everything accessible as content chunks, not HTML files, and I have some neat ideas on organization, linking, historical context, and a format-independent front-end (for generating WML (ugh) or PDFs or whatever from the site automatically).
One other goal I have is to avoid a database backend, keeping everything as native Lisp data structures. I don't know how feasible or wise this is, but some decent prototyping should allow me to get a general idea.
Wow. I'm very annoyed that I haven't worked on this more. I think I'll play around tonight.
Wow. I have to take a look at this when I have a chance tomorrow. Greenspun is one of my personal heroes, due entirely and only to this statement: "Any sufficiently complicated C or Fortran program contains an ad-hoc, informally-specified bug-ridden slow implementation of half of Common Lisp."
Over time I've found this to be ridiculously true, and am deeply saddened by the lack of, well, not mainstream acceptance of Lisp, because mainstream acceptance always destroys anything good, but a willingness to let me, as a professional, select a language which:
allows me to be incredibly productive
is one of the few languages that really allow me to feel one with my code
is not slow, nor necessarily (or usually) interpreted
While I'm reading a book on Java ("Java 2": The Complete Reference, by Osbourne publishers) the author frequently makes comments on how Java differes from C++ in case a C++ programmer is reading. Every difference is an improvement.
No, they claim every difference is an improvement. That's a good book -- I own it -- but their advocacy often crosses the line of sanity.
Like when they defend the whole single inheritance fiasco. They use the example of a House and how you'd want to make it inherit Foundation, Walls, and Roof. Makes sense, right? But then they say to make Walls extend Foundation, and Roof extend Walls, and House extend Roof. Um, a roof isn't a wall. It shouldn't have wall-specific methods.
Java does have some things going for it. It's a neat little platform for applets and set-top boxes. But it is vastly overused in settings for which it is painfully unsuited (like Web servers). And certain pathetic hacks to get around the confinements of Java (such as using "interfaces" to pretend for a second that Java can almost simulate multiple inheritance, but wretchedly) just cause more spaghetti code, pain, and suffering.
It might have helped if you had decided to read the comment you replied to. alehmann said nothing about implementing ECN. ahelmann did say something about blocking ECN. There is a world of difference. See, routers shouldn't just throw packets away if they have extra information in them. This is rude, and hinders adoption of new protocols, which don't hinder the router's operation in the least, and will often allow hosts on either side of the router to utilize these new protocols, even though the router in question cannot.
Go away and come back when you have learned about the Internet.
They use Scanners, USB Network Cards, Joysticks, Video Cameras, and things of that ilk. How many of those devices could I just plug into a linux box and have it go.
I don't know. I happen to use USB hubs, NICs, keyboards, mice, Zip drives, video cameras, PDAs, and MP3 players. I can just plug them in and have them work. I imagine "Scanners" and "Joysticks" would work too.
They want to be able to plug in things like a USB joystick and go "ooooh" as it detects what sort of device it is, and installs the drivers all without having to reboot. [Thanks Windows 2000!]
Hah.
USB has worked flawlessly for me on Linux since 2.3.something. Recently I had to use a USB floppy drive on a machine which had never used USB before. In a single terminal window, I compiled and installed the drivers and mounted the disk. Took me < 1min. If I had felt like running the load-and-automount-and-make-me-sandwich-d that so many seem to favor, it would have happened the instant I plugged in the drive.
I needed to transfer a file to a coworker's Windows 2000 machine the other day, so I brought over my USB Zip250. I plugged it in, and his machine locked up for a minute while it pondered this device. Then it locked up for 2-3 minutes more while it installed the drivers. Finally a "removable drive" icon appeared in My Computer, and instantly disappeared.
Okay, I thought, maybe it needs a reboot. It is NT. But then the drive didn't show up at all. It was like it wasn't even plugged in, except that Windows did its usual hollering when I removed it.
We gave up and went on to other things. On the next reboot, the drive suddenly appeared and worked. Simple and user-friendly.
Along with Linux, I've had great luck with USB on FreeBSD and MacOS. USB on Windows is a joke.
And no, the punnet square really isn't hard as such, but I was pretty sure the teacher's motive was to catch as many students in fatigue or misalignment errors as possible. Also keep in mind the fact that >60% of the students were still confused by phenotypes.
Regardless, writing code to do it for me transformed the assignment from painful drudgery into a fascinating exercise. I was especially proud of realizing — on the way to gym class, no less — that it could all be represented as bitmasks. (I think this was when I first truly grokked the power of C.)
Genetics was really the only thing that captured my interest in biology; sadly, the class didn't linger long on that topic. I'm still interested in it, all from an amateur perspective, of course. If I get time I think I'd like to make some new software that does multiple generations and traits requiring more than one gene.
--
Thus was The Punnetizer born. Once I had the basic functionality working, I went hog-wild with output formats. So you can have your Punnet squares in ASCII text, HTML, LaTeX, and CSV. What was really fun was running it on a StarFire with 2GB of RAM with the maximum number of traits. The output HTML was something like 347MB. :P
Anyway, that was one of the few times we impressed Cowell. He actually volunteered to give us extra credit. Of course, he graded our next assignment extra tough, but oh well. :P
--
Right now I'm addicted to Common Lisp, and one amusing thing I've picked up is that Perl is approaching Common Lisp in functionality. As an example, a few of my favorite things are closures and CLOS, and Perl has closures now. Perl's OO system (please note that I'm not an expert, and I've only used it in passing) isn't as powerful as CLOS (is anything?), but it's certainly free of the constraints of toy systems like Java.
So Perl and Lisp are approaching the same problem from completely opposite directions. Perl has syntactic sugar splattered everywhere, while Lisp basically has (one (type (of syntax))). This is a good thing, because you can have the same power available to you, no matter what your preferences on syntax and platform organization are. I prefer Lisp, but whatever lets you Get Stuff Done...
--
As a Christian, I have to say it's nice that people like Larry are out there to show we're not all stupid bumbling loonies (it's just Sturgeon's Law cropping up again, you know). If you've read any of his writings, especially his "State of the Onion" addresses, you'll see that he manages to present his thoughts and beliefs in a humorous and intelligent way.
Secondly, I really like the way he manages to make analogies between things. The first year he used sounds, the second year he used pictures, and the third year he used smells. And somehow he ends up with a grand scheme that addresses theology, science, computers, and, of course, Perl.
I think this is great, not just because the subject matter is interesting, but because to be any good at programming, you have to be able to map between different systems. The good ones don't seem to be as focused on depth (although they certainly can be; no one can argue that Knuth isn't good, and he's way hardcore) but on breadth of experience. The more different systems you experience, the more you can abstract the particular thing you have to be working on and actually transcend the implementation language and platform. (Or at least that's what I tell myself, being permanently scatterbrained and distractable :)
Anyway, I don't know how to keep this from sounding hopelessly fanboyish, but ummm Larry Wall is cool and learning new stuff is cool, and I recommend that everybody go read his stuff and then go play with something you've never tried before. Exploration is the One True Way to have fun with computers again.
--
Apple wasn't happy :-P
--
--
Yes, partially due to the fact that each vendor was restricted from building on the work of others, and partially due to the fact that there were multiple vendors. You won't see "Bob's Win32", simply because Microsoft actively works to prevent such compatibility.
Once solid platform-independent implementations of the various UNIX tools became available, people began switching to them. For all the complaining people do about the various Linux-based OSen, they are remarkably consistent at the most basic user level (drop me on any GNU system and I will be able to at least find my way around the system, write code, etc). And this toolkit is available thanks to the GNU GPL and the enthusiasm RMS roused in the various developers.
Secondly, free software actually enables integration with closed platforms. For example, see Samba or Cygwin, which allow tight integration between Windows and Unix (no thanks to the "open" and "developer-friendly" Microsoft). And the first thing I and most other people do when confronted with a fresh Solaris box is to install a decent userland.
Uh huh. Sure. Let's take the WWW as an example, since everyone lately seems convinced it's the most innovative thing since sliced bread. It was invented by a guy at CERN, and Mosaic, the first massively popular graphical client, was written at NCSA. Since Web stuff became a commercial thing, exactly what "innovation" have we recieved? Bigger and more offensive ads and horrifically noncompliant HTML, that's what.
--
Excellent point, which is why I did. I mentioned the other things I had on my plate at the time, asked whether I should try to balance the activities, and was told "Work on this 100%. Ignore everything else until this is completed. This is crucial to the success of the business.".
Not to be that annoying literalist geek, but that's how I am, and I view it as the safest option. If you want me to spend 90% of my time on something, say so. Don't say "drop everything", because I will. You manager, I coder, you say, I do. And I view the potential consequences as far lighter than the possible "Did you get X done?" "No." "Why not?" "I was working on Y and Z." "#@$^B&^%$?! I explicitly told you to only work on X until it was complete."
For 1 day. The stuff was due to be done in a week or two.
And at the core, who should be managing things? I'd suggest the manager.
People where I work like to do everything as a quick, rushed conversation, and it's caused me and others no end of problems, which is why I've taken to doing all this sort of communication by email. In fact, I'm going to put up a sign at my desk: Ask me to do it through email. If you ask me in person, it didn't happen.
Yes, streetlawyer, you would.
Partially, yes. I have a hard time getting shunted around to a million different projects at once and I've missed (accidentally!) more meetings than I really should. I also know that I'm pretty much unable to say no. I think every problem is a quick 5min thing, and I accept too much on my plate. I'm working on that.
I'm fully aware that I'm not without my faults, but all I ask is that I not be castigated for trying to do my job as I was directed.
--
As an interesting side note, I work with Zeio. He's the "IT guy" mentioned below...
Several things struck me immediately in this article:
This is me, except for the "meeting deadlines" part (I'll be the first to admit that long-term concentration is not my strong point). Where I work, I'm having my "top priority" constantly jerked out from under me by my boss. Then I rush to get acquainted with the new situation, rush to get something accomplished, get 50%-90% done, and then get my "top priority" reset again.
The most frustrating experience I can recall in recent memory is when I had been working on learning our new system and porting my bug fixes to it (despite being told that I'd be a valuable team member, come up with neat stuff, etc, I ended up getting assigned to bug fix after bug fix) when I was told that I absolutely needed to drop everything and work on getting a new QA server set up. So I did. I got in sometime in the morning and worked completely straight until 1900, no breaks of any sort, my coworker hovering over my shoulder and breathing tobacco-smoke-tinged breath on me. Finally, I finished what I could do, and with a splitting headache, I took my laptop and sat on one of our futons.
"Did you finish the bug fixes?" I look up to see my boss standing over me. "What?" I am the tiniest bit incredulous. "What's the status of the bug fixes?" "Not done." "Why not?" "Because you told me I had a new top priority." "Well, yes, but you have other priorities as well." Apparently "drop everything" has a different meaning for different people.
Anyway, this is pretty much par for the course. When I do get a moment to myself, I'm unable to just sit down and code. I can't just hack new code in between 5e6 other things; my mind doesn't work that way. I'm not blaming anyone else for this, either — I know I'm not getting anything done — but it sucks to want to be creating new code, to add a little piece of myself to our product, but to sit and fester when I have the chance to do so.
So I'm unproductive, unhappy, and unfocused. Yippee. This is not at all the environment I was promised when I was hired, and a number of coworkers have exactly the same cheated feeling. I'm the butt of all jokes, the person all odd jobs get handed to, and the assumption is always that I can pick up whatever crap J. Random Sloppy Coder left lying about. My suggestions are mocked, my self-esteem is shot, and at the core, I know only I can earn any respect for myself, but I'm sick of trying to impress these people. Oh, and when I had a deadline the next morning and did my best to stick to my word and have it ready, I was openly insulted for being so gauche as to spend the night at the office.
My resumé's up now, and I've got a few job offers coming in, but I don't know how firm they are, and I really don't want to leave one company in which I have stock options (no matter how few) and a decent salary for another one which might be just as bad.
I've taken to sitting around with our IT guy and posting to Slashdot. I don't feel like a vile festering leech; I'm actually helping get things done for the company, but it's not what I was hired to do, and I know that my "projects" are getting held up while I cower in the corner. I'm just hoping that I can work myself back up to writing something decent tomorrow or this weekend (yay for wasting my weekends doing a poor job of recovering the time lost during the week).
AND I HATE THE FLUORESCENT LIGHTS!!! They give me painful headaches and destroy my concentration. But what am I supposed to do? Sabotage the circuit breakers?
Whee. What a rant. :-P
If you're a manager, the one useful thing I hope you get from reading this post post is to give your people a chance to accomplish what you've assigned them, and treat them as competent professionals.
--
Nope.
--
Prolog seems more popular outside .us, but that seems to be a territorial thing to me (Lisp was invented in .us, while the major dialect of Prolog is called "Edinburgh Prolog"). Japan, especially, had a big thing for Prolog in the 80s, but it seems to have died off (along with, thankfully, Turbo Prolog).
I actually tend to prefer Prolog for AI-type things, and use Common Lisp as my general-purpose language. It's also worth noting that implementations of simple Prologs in Lisp abound.
--
--
For a laugh, why don't you email that comment to Erik Naggum... Anyway, functional languages, CL especially, are the most scalable in my (or opinion experience).
Ummmm, no. I write little Lisp programs in lieu of shell scripts or Perl. And I've written a package to process CVS logs (terribly painful format to parse, btw), which chows through megabytes of logs ridiculously fast.
CLISP compiles to bytecode, and CMUCL compiles directly to native code. Both are completely free, with source code and everything.
So use FFI. Call your C function from Lisp, and be happy.
To be sure, but it should be the language of everybody else too.
--
I'm a big fan of Common Lisp as well as Paul Graham (having read his book ANSI Common Lisp, I can see that he possesses both in-depth technical knowledge and a sense of humor). This article seems to match what I've read of him in quality, and I look forward to reading it in more depth when I get home.
I'm not a Lisp guru by any means, but the one thing that I always get a kick out of is how easy it is to become a low-level guru. After a few weeks of playing, I was doing things I wouldn't have dreamed of doing in C or Java. And it changes one's perspective. It all translates to machine code at the lowest level, of course, but after learning Lisp I can say without a doubt that I'm a better C programmer.
Lisp is an interesting language, because in some ways it's ridiculously high level (closures, generic functions, garbage collection, et cetera), but you're also able to get down and dirty with the cons cells with no trouble. I think this quote expresses it best:
Lisp is extremely versatile. While it was originally used in AI, it's honestly the best tool for most situations I come across. (You can see one thing I've done here, and I've done some other stuff that I haven't had a chance to post yet.) Whenever I need to do more in the shell than loop through a few files, I write it in Lisp (I've written 5-line programs to leech an entire Web page's MP3 archive). Lisp is great at processing logs, the output of various subprocesses, and other such things. It's also got a wonderful OO system.Graham's "Blub" example holds true for everyone I've met who has a disdain for Lisp. The advanced features it provides really do go over their heads, which is sad, because these are often intelligent people. Also, they don't look beyond the syntax differences, and often have a lot of misinformation (Lisp is slow, you can't do iteration in Lisp, Lisp is for lists and AI) fed to them by CS professors or whoever. I also often see a lot of posts from newbies who want to write "C-Lisp" and give up when that doesn't work. Lisp is a different paradigm, and needs to be treated as such.
If you're interested in Lisp, I would recommend reading The Evolution of Lisp (don't be angry at the poor fonts in the PDF; they didn't use scalable TeX fonts, the weenies :), Paul Graham's ANSI Common Lisp, and Winston and Horn's LISP, 3rd Edition (but ignore them when they disparage car and cdr), in that order.
Also, don't be confused by the various Lisps out there. First, ignore Emacs Lisp. Among its quirkyisms, it's dynamically scoped, which means that if you declare a variable, every function you call will also have access to that variable. Secondly, Scheme and Common Lisp are vastly different. Scheme is much leaner, and has 1 namespace, which means you can't name a variable and a function the same thing (I dislike this, but it's a hotly contested issue). Common Lisp has a huge set of standard APIs and much more versatility prebuilt into its core, while Scheme tries to stay small so as to provide an easily implementable standard. I'm a Common Lisp man, myself, but try things out for yourself.
One final thing is that if you hang out with them, you'll realize that most of the long-time posters are extremely knowledgable and have a great sense of heritage. I've learned a great deal by simply lurking through their flamewars, since I find out a lot about what issues may crop up for an individual programmer.
If you want a bit more advocacy, see my recent posts on the subject.
--
I'm not by any means an XML guru, but your comment prompted my curiosity and I decided to go through the XML Schema tutorial. I noticed the following line at the beginning of their first example:
Which would still seem to imply the need for an existing standards file.
--
Sun has no way of connecting back in to work from home. Sun.Net is a sad joke, providing only access to mail and calendar and such. The servers are (or at least they were) quite unreliable.
There is a terminal app, written in Java, but instead of using something normal and usable, they used some bizarre thing which interfaced with the security cards. I can understand the need for that, but the only way to use the system was through an extremely slow and unreliable applet, or by telneting to localhost and going through several gateways (each of which had a nasty habit of hanging right in the middle of working) to finally telnet (?!) to one's office workstation. X11 was, of course, unavailable, unless you wanted to go in through the modem pool, which was limited to 28.8kb/s.
When the only way to get in and maybe fix the emergency brewing at the office is that pathetic, it's a given that there will be unauthorized tunnels in use. I experimented with a few SSH-based things myself (made extremely painful due to the temperamental SOCKS proxy), but had the good sense and courtesy to be even more anal about security than is my wont.
Oh yeah. People liked to share passwords. Within earshot, or over unencrypted voice lines.
Somebody at Sun please work on fixing this. It hurts to remember.
--
There are other gaping holes which I feel it would be completely unfair to post in any level of detail, but suffice it to say SWAN is riddled with holes waiting to be exploited, and I hope someone decides to do something about it before a h4x0r realizes how easy it would be to own all of it.
--
Honestly, I didn't meet that many people I disliked. But most of the people I worked with were really out of their depth working with Sun machines, and even the ones that wanted to learn had no time to do it, or weren't allowed to by their bosses.
I wouldn't be surprised if most of the executives use Windows, because they have enough clout to get out of using the standard system put in place for the less than fully clued.
--
I've been planning for quite a while to write my own site engine in ANSI CL. I don't like CL-HTTP for a number of reasons:
Anyway, I haven't gotten beyond writing a few really silly socket demos for myself, but I keep planning to start RSN. My general idea is to have a core functionality of receiving HTTP requests and handing them off to various hooks. I'd probably write a simple reference server that serves up static files and such.
From there, I'd build a second layer of actual site functionality. My goal is to move quadium.net over to this server once its basic implementation is working correctly. I want to have everything accessible as content chunks, not HTML files, and I have some neat ideas on organization, linking, historical context, and a format-independent front-end (for generating WML (ugh) or PDFs or whatever from the site automatically).
One other goal I have is to avoid a database backend, keeping everything as native Lisp data structures. I don't know how feasible or wise this is, but some decent prototyping should allow me to get a general idea.
Wow. I'm very annoyed that I haven't worked on this more. I think I'll play around tonight.
--
Over time I've found this to be ridiculously true, and am deeply saddened by the lack of, well, not mainstream acceptance of Lisp, because mainstream acceptance always destroys anything good, but a willingness to let me, as a professional, select a language which:
Sigh. Anyone have any Lisp jobs for an enthusiast and advocate with about a year's informal experience and a love of the language?
--
YahahahahahahahaHAAHAHAHAHAHA!!!!
Good one.
--
No, they claim every difference is an improvement. That's a good book -- I own it -- but their advocacy often crosses the line of sanity.
Like when they defend the whole single inheritance fiasco. They use the example of a House and how you'd want to make it inherit Foundation, Walls, and Roof. Makes sense, right? But then they say to make Walls extend Foundation, and Roof extend Walls, and House extend Roof. Um, a roof isn't a wall. It shouldn't have wall-specific methods.
Java does have some things going for it. It's a neat little platform for applets and set-top boxes. But it is vastly overused in settings for which it is painfully unsuited (like Web servers). And certain pathetic hacks to get around the confinements of Java (such as using "interfaces" to pretend for a second that Java can almost simulate multiple inheritance, but wretchedly) just cause more spaghetti code, pain, and suffering.
Try a real object system sometime. You'll like it.
--
It might have helped if you had decided to read the comment you replied to. alehmann said nothing about implementing ECN. ahelmann did say something about blocking ECN. There is a world of difference. See, routers shouldn't just throw packets away if they have extra information in them. This is rude, and hinders adoption of new protocols, which don't hinder the router's operation in the least, and will often allow hosts on either side of the router to utilize these new protocols, even though the router in question cannot.
Go away and come back when you have learned about the Internet.
--
I don't know. I happen to use USB hubs, NICs, keyboards, mice, Zip drives, video cameras, PDAs, and MP3 players. I can just plug them in and have them work. I imagine "Scanners" and "Joysticks" would work too.
--
Hah.
USB has worked flawlessly for me on Linux since 2.3.something. Recently I had to use a USB floppy drive on a machine which had never used USB before. In a single terminal window, I compiled and installed the drivers and mounted the disk. Took me < 1min. If I had felt like running the load-and-automount-and-make-me-sandwich-d that so many seem to favor, it would have happened the instant I plugged in the drive.
I needed to transfer a file to a coworker's Windows 2000 machine the other day, so I brought over my USB Zip250. I plugged it in, and his machine locked up for a minute while it pondered this device. Then it locked up for 2-3 minutes more while it installed the drivers. Finally a "removable drive" icon appeared in My Computer, and instantly disappeared.
Okay, I thought, maybe it needs a reboot. It is NT. But then the drive didn't show up at all. It was like it wasn't even plugged in, except that Windows did its usual hollering when I removed it.
We gave up and went on to other things. On the next reboot, the drive suddenly appeared and worked. Simple and user-friendly.
Along with Linux, I've had great luck with USB on FreeBSD and MacOS. USB on Windows is a joke.
--