I'm not a huge fan of Speysides, but if you're into them then Balvenie (Founder's Reserve 10-year) is a good one at about the same price-point, and Glenlivet 12-year is just a hair more (still under $30). Both are worth trying.
Lagavulin is obscenely expensive, I keep a bottle around but it lasts several years since I don't get into it except for special occasions. Talisker you can sometimes find a good deal on and get it at like $35/bottle, which even in college was sometimes in the "I can get one and keep it for special occasions over the year" range for me. But normally it's more than that (I wait until some local store overstocks or has it more cheaply for whatever reason, then get two).
The first time I got into Scotch, we got 6 friends together who were interested and got 6 different bottles in the $35-60 range. Somehow it seems more acceptable to spend that money to try 6 good, different options (and hang out with friends and get everyone's opinions, instead of some faceless reviewer's) than to get a full bottle of one--just make sure you coordinate to avoid duplicates. Don't plan on driving, though!
I've drunk JD before, and I can tell you it's not whisky. Whisky doesn't taste like that, unless you water it down.
It's not whisky, it's whiskey. Most whiskey doesn't use a peat process and doesn't wind up with a big smokey taste.
That said, JD doesn't taste watered down. Unlike a piss-poor lager that tastes like a muted version of a real lager, JD doesn't taste like a muted Scotch whisky--or a muted Irish whiskey. It has the typical sour mash flavoring that Tennessee and Bourbon whiskey share (and is certainly _not_ watered down, but is rather a strong fermented/sour accent; compare Wonder bread (watered down) to sour dough bread (not watered down, although different from "regular bread")). It also has the unique notes of a Tennessee whiskey: a more mild sour mash flavoring with more maple hints (owing to the Lincoln County process of filtering through sugar-maple charcoal).
You may not like it, but that's more akin to saying "I like oatmeal stouts and not brown ales" than "I like Weeping Radish Helles Lager and not Schlitz". Even the latter is strictly a matter of taste, but at least with that example the "lesser" version has no outside flavor from the "greater" version.
(Of course, even labelling something lesser for that reason is pretty subjective; a filet mignon isn't a "better" flavor if I dump a pint of salt on it, even though the unsalted version is "lesser" in the same sense.)
I suppose it's the whisky equivalent of Budweiser: a decent drink dumbed down for American tastes.
No, it's more like the whiskey equivalent of Anchor Steam Ale: a new type of beer that's not made quite the same way in the old world.
And I'll reiterate that I'm not entirely uninformed on the subject of Scotch whiskys; I'm certainly not an expert on the area, but I've had a number that I consider excellent(e.g. Talisker, Lagavulin, Glenmorangie Port Finish), a number of good ones by my palate (e.g. Oban, Macallan 12 year, Glenlivet, Balvennie, Dalwhinnie) and a few that I don't like as well, but you can still see what they're going for (e.g Laphroaig, Aberlour, Glenfiddich).
Just because Jack Daniels doesn't taste like a Scotch whisky doesn't mean it isn't a whiskey and doesn't have it's own distinct flavor. Rejecting it out of hand would be like dismissing Shiraz wine because it doesn't taste like Cabernet Sauvignon.
And whiskey is not a misspelling of whisky, the two terms mean different things in the US as I noted above. The spelling "whisky" is reserved for Scotch-style whiskeys (true Scotch whiskys, and the few Canadian Scotch-style whiskys like Glen Breton Rare Single-Malt and the similar Scotch-style Japanese whiskys), although some extend it to all Canadian whiskeys (admitting things like Canadian Mist, Crown Royal, etc).
He never said it was whisky, he said it was whiskey. Which it is-at least according to Webster's, according to the bottle itself ("Jack Daniels Sour Mash Whiskey") and according to common usage. If you're going to use a non-standard definition you should specify that, and you shouldn't claim others are flat-out wrong when their definition is both technically correct (by the dictionary) and fits common parlance.
Side note: Bourbon is a subset of whiskey, but Jack Daniels is not a bourbon. It's a Tennessee whiskey (George Dickel is another common Tennessee whiskey that is not a bourbon). Tennessee whiskeys are filtered through sugar-maple charcoal and tend to be sweeter than true bourbons.
Knob Creek, which the parent mentioned, is a bourbon (other common bourbons include Jim Beam and Maker's Mark).
Some say that the Scottish use the spelling "whisky" for all whiskey, others claim it's reserved for Scotch whiskey. Not being Scots I can't comment, but I can say that in the US the spelling "whiskey" is almost always used and the spelling "whisky" is generally reserved for Scotch and Canadian whiskeys (as well as Japanese Scotch-style whiskeys).
My favorite whiskeys remain Talisker, Lagavulin, and Bushmill's 10-year single malt Irish whiskey.
Talisker, Lagavulin, or if you want something smoother then Bushmill's single malt 10-year Irish. Room temperature, heat with your hands, and add just a few drops of distilled water to open it up (not to dilute it). Sip slowly and enjoy.
One of my friends has taken to ordering Jack Daniels, chilled, in a martini glass. Most bars charge you for one shot but pour at least two--even bartenders who can pour a good 4-count will pour it, take a look, think it looks empty, and double it.
That's a grudge with developers, not the language. And that argument goes for any language. Give a lousy developer a tool and he will abuse it to no end.
But some tools are easier to abuse, and the culture of some languages promotes abuse. For instance, I've seen some beautiful Perl code, and I've seen some hideous Python code. But, overall, "average" Python developers tend to write code that's much more readable and maintainable than "average" Perl developers. Certainly good programmers will write good code in either, and bad coders will write bad code. But in the margins, one of them leads to better-looking code that's easier for others to jump in, read, understand, and modify.
Not having much experience in C#, I can't comment on whether its features tend to promote uglier code than Java or vice-versa, but claiming that it's all in the developers and that the language doesn't play a fairly strong role just doesn't fit with real-world experience IMO.
So, if I may ask, since when exactly is Emacs considered crap?
That depends on whether you find entering text is always the most efficient way of writing all your code. For many jobs, it clearly isn't.
The beauty of using an unintegrated development environment is that you can very easily pick the right tool for the job.
I use gvim with Python, but I also use wxglade to build desktop interfaces (especially in the prototyping period). My setup also interfaces the web server for web apps (so uncaught exceptions on my development server will put my debugger and editor at the right places).
Lots of unintegrated tools that interface nicely. I could use a nearly identical setup with emacs instead of vim, or switch to twisted in place of Apache+mod_python, or switch to a different GUI builder and still have most of my features just work.
Or you could just be incredibly elitist about it and shame bad coders into never publishing stupid crap for other people to see or maintain No, the key is to have a superficial language feature that has no impact on development time but keeps people away.
Tons of parentheses seems to work well. Using indentation to delimit is another approach that's still in its infancy.
It is only very recently that ID has become an active movement associated with (neo)Creationism. It happened somewhere in the 1980's, i believe. See the wikipedia article.
The ID label as used now was introduced in the 1980s, and it doesn't simply refer to traditional clockmaker views of the universe or other philosopies positing a common-language intelligent design (and such philosophies are just that--philosophy and not science).
The core ID textbook, "Of Pandas and People", is published by the Foundation for Thought and Ethics--a group "promoting and publishing textbooks presenting a Christian perspective" according to their IRS application for tax-exempt status. The book itself was originally a Creationist work that had the equivalent of a global search-and-replace from "Creationism" to "Intelligent Design" performed after the Supreme Court's 1987 Edwards v. Aguillard decision banning the teaching of Creationism in public schools.
The wikipedia article on ID that you point to says "the vast majority of the scientific community views intelligent design not as a valid scientific theory but as neocreationist pseudoscience or junk science".
Python + wxpython is a great choice. Python is a full-fledged language, not a scripting language (although it can be used for scripting). It scales well from rapid development/one-offs to large multi-site dev team projects (our current project is about 300,000 lines of code).
It's also very easy to write C extensions for Python if you ever run into a situation where you need to access something that's not available (unlikely) or squeeze out some more speed.
For gui building, wxglade is quite nice as a visual builder.
As far as a development environment, I strongly recommend going with an unbundled editor like vim (with the Cream bindings if you don't like vi modal editing and want keybindings like a normal windows app) or emacs. That way you can stick with it with every language you use, and it's easy to integrate it with other tools. They're both liable to be installed if you wind up logged in on foreign machines, and both have all the whizz-bang features that IDE users somehow think aren't available in real programmer's editors (probably because they associate "editor" with "Notepad"). They're free and widely supported.
People always harp on the unique features of emacs and vim, so maybe people forget that they do the standard stuff as well:
Syntax highlighting/indentationn
Code compilation/validation on the fly (syntax-error checking, so if I'm coding python and type "if a=1:" it'll know that I needed an == there and immediately highlight the syntax error) context-sensitive help (if I type "cmp(" then the status line shows the help text for the cmp function)
intellisense-style completions
class browsers (I have menus showing all the parent/child classes of the current class and all it's methods, or can jump to a top-level class listing)
code browsing (I can follow function/method calls down a stack and pop back where I came from, and get a cscope-style listing of all the places that call a particular function/class)
refactoring tools (I can easily rename classes/methods/etc throughout the project)
Source control integration (including side-by-side diffs between 2 versions of a file with similar portions elided and differences highlighted).
Outlining/folding (so I can go to a file, hit F6 to see only the class/method definitions, find what I'm looking for, and hit F6 to expand out to everything--it's a lot more than that, but that's the simplest use case if you haven't used folding before).
All of it in vim, though emacs is an equally reasonable choice. Just because they're old doesn't mean they don't have great features.
We were all in awe about the few kids that decided to start their small search engine business
The is completely revisionist. We weren't in awe of their "small search engine business" at the outset, because Yahoo didn't have a search engine for years. They were a hierarchical directory of links, much like what dmoz.org does now (I think it started off as the co-founders putting their bookmarks online, in fact).
They tacked on a crappy search engine a years later as an afterthought when they started switching from a directory to a PORTAL! (this was around the time that PORTAL! and PUSH TECHNOLOGY! were the magic words to get investors to open their pocketbooks).
I don't even know if they ever developed a search engine, if they did it certainly wasn't touted and their search has always been powered by outsiders until their recent Inktomi and Altavista
/.*ads?.?/ (well, [./]/ is the same as.?/ with a couple extra chars and IMHO less clarity)
In standard regexes, a bare . matches any character. A period inside a character class [.] matches only a literal period.
If these are anything like regular egrep-style Unix regexes:
The original regex shouldn't block, say, "/ads/PunchTheFriggingMonkey.gif" since it requires a . or / followed by a/. While the latter should block, say,/desperado/SalmaHayek.gif since it'll take any single character after ad (but doesn't require one).
There was a lot of crap released in games back then, along with the ocassional gems. It's just that we had more gems back then than we do now, i feel.
Hmm. Part if the issue is that as more genres become standard, people really _do_ want updated games in those genres. Wolfenstein 3D was great, but you really do want to have Doom, Halo, etc come along--even though they're not innovative, at the end of the day it's a great concept and keeping it updated is worthwile. I LOVE the fact that I can get Gran Turismo 4 or SSX 3 even though I played Pole Position and Skate or Die a couple decades ago. Sports junkies want yearly updates, not just for stats but better graphics, gameplay, etc.
And I really wish I could get a modern update of X-Com UFO defense (or another great turn-based strategy+tactics game), Autoduel, or Starflight.
As more genres become expected standard options on a console, it's going to feel like there are more same-old games out there--especially if you don't like, say, realtime strategy games then you feel like "man, they keep making crappy Dune II/Command and Conquer/Starcraft knockoffs".
But at the same time you might love FPS games and look forward to Halo II (or whatever).
It's not a new problem. People ragged on Sierra endlessly for doing countless King's Quest/Space Quest clones, or Infocom for doing Yet Another Zork.
But IMO, the current move toward open-ended worlds (see: Grand Theft Auto, the Sims) is a fairly important development that's every bit as groundshaking as Civilization or Tetris.
Just for kicks, my top 10 games of all time (in no order) Wolfenstein 3D X-Com: UFO Defense Grand Theft Auto III Civilization Nethack Dune II Starflight Autoduel Mechwarrior II SSX
Did I mention I wish there was a worthy non-innovative modern X-Com knockoff?
The capslock is hardly ever used while ctrl is used quite a bit (think emacs) so swapping them makes it *much* easier to extensively use the ctrl key instead of stretching the pinky down.
Dude, in the standard PC layout you can easily hit the CTRL key with the palm of your hand and still have all your fingers on the home row, making CTRL-A and other combinations involving the left pinky easy.
It's _way_ easier to do this than to use the pinky and hit combinations using the "key left of a", especially if you're Emacsing and need Ctrl-Shift or Ctrl-Meta or Ctrl-Alt-Hyper-Super-Command-OpenApple-Application -Compose or whatever.
Besides, as I vi weenie I have to point out that the key to the left of the "a" on a QWERTY layout ought to be mapped to ESC. Personally I hate having a caps lock at all, but if you must put it up were ESC is--who ever needs to hit it quickly and often?
Not even close to a go, tons of library version mismatches and it being a handheld I don't exactly have room to put redundant versions on there, nor the inclination to go hunting them up and compiling 20+ libraries without knowing if it'd even work on my handheld if I got the dependencies satisfied.
I Open the calling chains for a method. That is, I see all code that calls my method and all code that calls these methods and so on. I get a whole inverse calling tree; takes about a second.
This is standard code browsing stuff, cfront has done it for decades (literally). Any programming system that doesn't isn't even in the game.
Find all usages of a variable. Or all write to operations. Or all read operations on a variable.
Ditto, for the most part (barring weird metaprogramming/aspect oriented kung foo, extremely dynamic code like evaling random string in dynamic languages, or aliasing by void pointers, etc in weakly typed languages).
- Remove variables that are not used. For example Eclipse marks all variables that are "never read". That means the variable is there, gets assigned to something but is then never used. Happens a lot with legacy code.
Ditto, lint has done this for years (and all reasonable programmer's editors will integrate lint for you). Of course, even without lint gcc and other compilers have done this for over a decade.
- Hover over methods / classes to see the docs
I hit F1 (and the docs show when I'm typing as soon as I type the open parens after a function/class/method call). Hover would annoy me (I have all tooltips turned off) since I don't like things popping up randomly when I'm reading through code.
- Auto-complete that is smart. For example if I write "Foo myFoo = obj." and then hit ctrl-space, it will list those methods that return an object of type Foo first. The same could be done for Python even though it's dynamically typed.
Like I said, the autocomplete is smart; if I type myfile., it only shows the methods of objects of the kind that myfile is a type of. I don't understand exactly how your example would work for Python, though, but in C++/Java vim will handle this no problem.
- rename methods/variables - the rename affects all code inside the project and even all code defined in dependent projects. What was once a huge and scary (will it work?) global search and replace operation is now a no-brainer. Which makes it MUCH more likely that things are named sensibly just because renaming is so easy. Rename also allows moving classes to new packages and so on - all automatically updated.
This is standard refactoring stuff. It's pretty new, but vi/emacs have handled it for several years (I use vim's BicycleRepairman interface for Python refactoring).
- Add / remove method parameters. Again, globally, all dependent code is automatically updated and I get to define a default value for add.
Ditto.
- See errors marked as I type. There is no compile button. Everything is compiled at all times, in the background. This is the way it should be, IMHO.
There's no compilation in Python, but I can lint on demand.
- Auto imports. Say you write a = ExternalObject() - Eclipse will automatically add that to the import statements. If it can't be found in the project scope but is in the project scope of another project in the workspace it will offer to add that other project to the dependencies and import the class. Basically I never waste a thought on import statements. I never even look at them unless there's a conflict (they are folded away)
This I don't have. Seems moderately nice.
- Mark several lines of code and extract a method from it.
I don't understand what you mean by this.
It's not 1995 anymore. Or 1975 for you Emacs guys.
A. Emacs wasn't around in 75 B. Emacs and vim have both improved steadily. If you last looked at vim 5 years ago, you're missing a lot and it's no more fair than me bringing up criticisms of ancient Eclipse versions.
Do you have a site I can upload to? It's about 3 python files and my vimrc to do most of the help/prototype display/class browser stuff (also I use the cvscommand and matchit plugins but no need to post them since they're widely available)
But IDEs are just tools that make development so much quicker. They list all project files for easy opening, and keep them organized.
So do vim and emacs (in vim, all my recently opened projects are in the file menu, or I can open ~/src/projects in the file browser and pick one--it'll remember which files I had open in which windows the last time I was working on it, reset all my bookmarks, etc).
They allow for compilation without having to write your own batch file.
Compilation? We're talking perl/python here, right? I hit F11 to restart my web servers (and reread all the code), or select the client I want to restart from a menu in vim (we run seperate web servers for each of the clients we host, I just pick the one I'm want to switch to from the menu--F11 restarts the one I'm currently working on if I don't want to switch). Of course, since I'm working in an interpreted language I rarely need a restart anyway.
But at any rate, clicking the "Make" button in my vim toolbar will build the current project when I do C/C++/Java dev work. You're right that I have to create a Make file, but you're going to have to do that anyway for any multiplatform project--and if I'm doing something like GUI design, my GUI builder creates the Makefile for me anyway.
And when I hit make, if the compilation failed it'll jump me to the file/line where the first error was; I can fix it, go to the next error, etc from the toolbar (or keystrokes), then hit the make button again when I'm satisfied. As I jump around between errors, it shows the compiler's error messages in the status line.
Intellisense saves me - easily - thousands of key-strokes per day. Being able to type two or three letters and hit tab or ctrl-space-tab to complete keywords or object names makes coding a line incredibly fast.
Meta-/ in emacs or Ctrl-P/Ctrl-N in vim will do word completion, I don't know about emacs but in vim they'll limit it to currently applicable tags (so if I'm doing Java/C++ and I call object.foo then it'll only complete methods that start with foo and are methods of whatever class "object" is--or in C it'll only complete struct members, etc). I'd be shocked if emacs didn't do something similar.
Vim 7 will also have OmniComplete (it's in the dev tree already) which is pretty much like Intellisense if the using a period and getting a dropdown (instead of just getting a tab-completion style listing of matches) is really that a big deal to you.
Emacs and vim aren't wimpy text editors. Other things I can do: 1. If I'm editing a python file, I get a nice dropdown menu showing the parent classes of the one I'm editing, the child classes, and all the methods. I can select them from the menu to jump to them. 2. If I'm typing a call I get the method signature and beginning of help in my status line. So if, say, I type "cmp(" then the status line reads:
cmp(x, y) Compare the two objects X and Y and return an integer according to the outcome. The return value is ne
If I hit F1, I get the full help text. 3. I can jump to tags easily, so if I see a call to "foo.blargle()" then I can click on "blargle" and it'll jump into the blargle method of class foo; I can keep drilling down through function calls, then hit back to pop back up the call stack to where I started. 4. I can get diffs against other versions of source control, where it shows the 2 versions side by side with the changes highlighted (different colors for what was added, removed, or modified). And I can easily check files into/out of source control. 5. I can do folding/outlining (so if I'm editing a file, I can toggle between seeing the whole file or seeing an outline of just the class/method definitions, then find what I'm looking for and expand back to seeing everything--it's far more powerful than that once you're used to it).
Lots more, but those are a few highlights.
Re:Lets hope they open source it
on
Google to Buy Opera?
·
· Score: 2, Insightful
I'm not a huge fan of Speysides, but if you're into them then Balvenie (Founder's Reserve 10-year) is a good one at about the same price-point, and Glenlivet 12-year is just a hair more (still under $30). Both are worth trying.
Lagavulin is obscenely expensive, I keep a bottle around but it lasts several years since I don't get into it except for special occasions. Talisker you can sometimes find a good deal on and get it at like $35/bottle, which even in college was sometimes in the "I can get one and keep it for special occasions over the year" range for me. But normally it's more than that (I wait until some local store overstocks or has it more cheaply for whatever reason, then get two).
The first time I got into Scotch, we got 6 friends together who were interested and got 6 different bottles in the $35-60 range. Somehow it seems more acceptable to spend that money to try 6 good, different options (and hang out with friends and get everyone's opinions, instead of some faceless reviewer's) than to get a full bottle of one--just make sure you coordinate to avoid duplicates. Don't plan on driving, though!
I've drunk JD before, and I can tell you it's not whisky. Whisky doesn't taste like that, unless you water it down.
It's not whisky, it's whiskey. Most whiskey doesn't use a peat process and doesn't wind up with a big smokey taste.
That said, JD doesn't taste watered down. Unlike a piss-poor lager that tastes like a muted version of a real lager, JD doesn't taste like a muted Scotch whisky--or a muted Irish whiskey. It has the typical sour mash flavoring that Tennessee and Bourbon whiskey share (and is certainly _not_ watered down, but is rather a strong fermented/sour accent; compare Wonder bread (watered down) to sour dough bread (not watered down, although different from "regular bread")). It also has the unique notes of a Tennessee whiskey: a more mild sour mash flavoring with more maple hints (owing to the Lincoln County process of filtering through sugar-maple charcoal).
You may not like it, but that's more akin to saying "I like oatmeal stouts and not brown ales" than "I like Weeping Radish Helles Lager and not Schlitz". Even the latter is strictly a matter of taste, but at least with that example the "lesser" version has no outside flavor from the "greater" version.
(Of course, even labelling something lesser for that reason is pretty subjective; a filet mignon isn't a "better" flavor if I dump a pint of salt on it, even though the unsalted version is "lesser" in the same sense.)
I suppose it's the whisky equivalent of Budweiser: a decent drink dumbed down for American tastes.
No, it's more like the whiskey equivalent of Anchor Steam Ale: a new type of beer that's not made quite the same way in the old world.
And I'll reiterate that I'm not entirely uninformed on the subject of Scotch whiskys; I'm certainly not an expert on the area, but I've had a number that I consider excellent(e.g. Talisker, Lagavulin, Glenmorangie Port Finish), a number of good ones by my palate (e.g. Oban, Macallan 12 year, Glenlivet, Balvennie, Dalwhinnie) and a few that I don't like as well, but you can still see what they're going for (e.g Laphroaig, Aberlour, Glenfiddich).
Just because Jack Daniels doesn't taste like a Scotch whisky doesn't mean it isn't a whiskey and doesn't have it's own distinct flavor. Rejecting it out of hand would be like dismissing Shiraz wine because it doesn't taste like Cabernet Sauvignon.
And whiskey is not a misspelling of whisky, the two terms mean different things in the US as I noted above. The spelling "whisky" is reserved for Scotch-style whiskeys (true Scotch whiskys, and the few Canadian Scotch-style whiskys like Glen Breton Rare Single-Malt and the similar Scotch-style Japanese whiskys), although some extend it to all Canadian whiskeys (admitting things like Canadian Mist, Crown Royal, etc).
He never said it was whisky, he said it was whiskey. Which it is-at least according to Webster's, according to the bottle itself ("Jack Daniels Sour Mash Whiskey") and according to common usage. If you're going to use a non-standard definition you should specify that, and you shouldn't claim others are flat-out wrong when their definition is both technically correct (by the dictionary) and fits common parlance.
Side note: Bourbon is a subset of whiskey, but Jack Daniels is not a bourbon. It's a Tennessee whiskey (George Dickel is another common Tennessee whiskey that is not a bourbon). Tennessee whiskeys are filtered through sugar-maple charcoal and tend to be sweeter than true bourbons.
Knob Creek, which the parent mentioned, is a bourbon (other common bourbons include Jim Beam and Maker's Mark).
Some say that the Scottish use the spelling "whisky" for all whiskey, others claim it's reserved for Scotch whiskey. Not being Scots I can't comment, but I can say that in the US the spelling "whiskey" is almost always used and the spelling "whisky" is generally reserved for Scotch and Canadian whiskeys (as well as Japanese Scotch-style whiskeys).
My favorite whiskeys remain Talisker, Lagavulin, and Bushmill's 10-year single malt Irish whiskey.
Talisker, Lagavulin, or if you want something smoother then Bushmill's single malt 10-year Irish. Room temperature, heat with your hands, and add just a few drops of distilled water to open it up (not to dilute it). Sip slowly and enjoy.
One of my friends has taken to ordering Jack Daniels, chilled, in a martini glass. Most bars charge you for one shot but pour at least two--even bartenders who can pour a good 4-count will pour it, take a look, think it looks empty, and double it.
That's a grudge with developers, not the language. And that argument goes for any language. Give a lousy developer a tool and he will abuse it to no end.
But some tools are easier to abuse, and the culture of some languages promotes abuse. For instance, I've seen some beautiful Perl code, and I've seen some hideous Python code. But, overall, "average" Python developers tend to write code that's much more readable and maintainable than "average" Perl developers. Certainly good programmers will write good code in either, and bad coders will write bad code. But in the margins, one of them leads to better-looking code that's easier for others to jump in, read, understand, and modify.
Not having much experience in C#, I can't comment on whether its features tend to promote uglier code than Java or vice-versa, but claiming that it's all in the developers and that the language doesn't play a fairly strong role just doesn't fit with real-world experience IMO.
Sponsor a vegetarian: for every animal you don't eat, I'm going to eat three!
http://www.thebestpageintheuniverse.net/c.cgi?u=s
The beauty of using an unintegrated development environment is that you can very easily pick the right tool for the job.
I use gvim with Python, but I also use wxglade to build desktop interfaces (especially in the prototyping period). My setup also interfaces the web server for web apps (so uncaught exceptions on my development server will put my debugger and editor at the right places).
Lots of unintegrated tools that interface nicely. I could use a nearly identical setup with emacs instead of vim, or switch to twisted in place of Apache+mod_python, or switch to a different GUI builder and still have most of my features just work.
Or you could just be incredibly elitist about it and shame bad coders into never publishing stupid crap for other people to see or maintain
No, the key is to have a superficial language feature that has no impact on development time but keeps people away.
Tons of parentheses seems to work well. Using indentation to delimit is another approach that's still in its infancy.
It is only very recently that ID has become an active movement associated with (neo)Creationism. It happened somewhere in the 1980's, i believe. See the wikipedia article.
The ID label as used now was introduced in the 1980s, and it doesn't simply refer to traditional clockmaker views of the universe or other philosopies positing a common-language intelligent design (and such philosophies are just that--philosophy and not science).
The core ID textbook, "Of Pandas and People", is published by the Foundation for Thought and Ethics--a group "promoting and publishing textbooks presenting a Christian perspective" according to their IRS application for tax-exempt status. The book itself was originally a Creationist work that had the equivalent of a global search-and-replace from "Creationism" to "Intelligent Design" performed after the Supreme Court's 1987 Edwards v. Aguillard decision banning the teaching of Creationism in public schools.
The wikipedia article on ID that you point to says "the vast majority of the scientific community views intelligent design not as a valid scientific theory but as neocreationist pseudoscience or junk science".
It's also very easy to write C extensions for Python if you ever run into a situation where you need to access something that's not available (unlikely) or squeeze out some more speed.
For gui building, wxglade is quite nice as a visual builder.
As far as a development environment, I strongly recommend going with an unbundled editor like vim (with the Cream bindings if you don't like vi modal editing and want keybindings like a normal windows app) or emacs. That way you can stick with it with every language you use, and it's easy to integrate it with other tools. They're both liable to be installed if you wind up logged in on foreign machines, and both have all the whizz-bang features that IDE users somehow think aren't available in real programmer's editors (probably because they associate "editor" with "Notepad"). They're free and widely supported.
People always harp on the unique features of emacs and vim, so maybe people forget that they do the standard stuff as well:
context-sensitive help (if I type "cmp(" then the status line shows the help text for the cmp function)
All of it in vim, though emacs is an equally reasonable choice. Just because they're old doesn't mean they don't have great features.
We were all in awe about the few kids that decided to start their small search engine business
The is completely revisionist. We weren't in awe of their "small search engine business" at the outset, because Yahoo didn't have a search engine for years. They were a hierarchical directory of links, much like what dmoz.org does now (I think it started off as the co-founders putting their bookmarks online, in fact).
They tacked on a crappy search engine a years later as an afterthought when they started switching from a directory to a PORTAL! (this was around the time that PORTAL! and PUSH TECHNOLOGY! were the magic words to get investors to open their pocketbooks).
I don't even know if they ever developed a search engine, if they did it certainly wasn't touted and their search has always been powered by outsiders until their recent Inktomi and Altavista
/.*ads?.?/ (well, [./]/ is the same as .?/ with a couple extra chars and IMHO less clarity)
/. /desperado/SalmaHayek.gif since it'll take any single character after ad (but doesn't require one).
In standard regexes, a bare . matches any character. A period inside a character class [.] matches only a literal period.
If these are anything like regular egrep-style Unix regexes:
The original regex shouldn't block, say, "/ads/PunchTheFriggingMonkey.gif" since it requires a . or / followed by a
While the latter should block, say,
There was a lot of crap released in games back then, along with the ocassional gems. It's just that we had more gems back then than we do now, i feel.
Hmm. Part if the issue is that as more genres become standard, people really _do_ want updated games in those genres. Wolfenstein 3D was great, but you really do want to have Doom, Halo, etc come along--even though they're not innovative, at the end of the day it's a great concept and keeping it updated is worthwile. I LOVE the fact that I can get Gran Turismo 4 or SSX 3 even though I played Pole Position and Skate or Die a couple decades ago. Sports junkies want yearly updates, not just for stats but better graphics, gameplay, etc.
And I really wish I could get a modern update of X-Com UFO defense (or another great turn-based strategy+tactics game), Autoduel, or Starflight.
As more genres become expected standard options on a console, it's going to feel like there are more same-old games out there--especially if you don't like, say, realtime strategy games then you feel like "man, they keep making crappy Dune II/Command and Conquer/Starcraft knockoffs".
But at the same time you might love FPS games and look forward to Halo II (or whatever).
It's not a new problem. People ragged on Sierra endlessly for doing countless King's Quest/Space Quest clones, or Infocom for doing Yet Another Zork.
But IMO, the current move toward open-ended worlds (see: Grand Theft Auto, the Sims) is a fairly important development that's every bit as groundshaking as Civilization or Tetris.
Just for kicks, my top 10 games of all time (in no order)
Wolfenstein 3D
X-Com: UFO Defense
Grand Theft Auto III
Civilization
Nethack
Dune II
Starflight
Autoduel
Mechwarrior II
SSX
Did I mention I wish there was a worthy non-innovative modern X-Com knockoff?
I just map caps to ESC and have no caps lock. That way backtick/tilde (which is useful) stays somewhat reachable.
The capslock is hardly ever used while ctrl is used quite a bit (think emacs) so swapping them makes it *much* easier to extensively use the ctrl key instead of stretching the pinky down.
n -Compose or whatever.
Dude, in the standard PC layout you can easily hit the CTRL key with the palm of your hand and still have all your fingers on the home row, making CTRL-A and other combinations involving the left pinky easy.
It's _way_ easier to do this than to use the pinky and hit combinations using the "key left of a", especially if you're Emacsing and need Ctrl-Shift or Ctrl-Meta or Ctrl-Alt-Hyper-Super-Command-OpenApple-Applicatio
Besides, as I vi weenie I have to point out that the key to the left of the "a" on a QWERTY layout ought to be mapped to ESC. Personally I hate having a caps lock at all, but if you must put it up were ESC is--who ever needs to hit it quickly and often?
Not even close to a go, tons of library version mismatches and it being a handheld I don't exactly have room to put redundant versions on there, nor the inclination to go hunting them up and compiling 20+ libraries without knowing if it'd even work on my handheld if I got the dependencies satisfied.
I Open the calling chains for a method. That is, I see all code that calls my method and all code that calls these methods and so on. I get a whole inverse calling tree; takes about a second.
This is standard code browsing stuff, cfront has done it for decades (literally). Any programming system that doesn't isn't even in the game.
Find all usages of a variable. Or all write to operations. Or all read operations on a variable.
Ditto, for the most part (barring weird metaprogramming/aspect oriented kung foo, extremely dynamic code like evaling random string in dynamic languages, or aliasing by void pointers, etc in weakly typed languages).
- Remove variables that are not used. For example Eclipse marks all variables that are "never read". That means the variable is there, gets assigned to something but is then never used. Happens a lot with legacy code.
Ditto, lint has done this for years (and all reasonable programmer's editors will integrate lint for you). Of course, even without lint gcc and other compilers have done this for over a decade.
- Hover over methods / classes to see the docs
I hit F1 (and the docs show when I'm typing as soon as I type the open parens after a function/class/method call). Hover would annoy me (I have all tooltips turned off) since I don't like things popping up randomly when I'm reading through code.
- Auto-complete that is smart. For example if I write
"Foo myFoo = obj." and then hit ctrl-space, it will list those methods that return an object of type Foo first. The same could be done for Python even though it's dynamically typed.
Like I said, the autocomplete is smart; if I type myfile., it only shows the methods of objects of the kind that myfile is a type of. I don't understand exactly how your example would work for Python, though, but in C++/Java vim will handle this no problem.
- rename methods/variables - the rename affects all code inside the project and even all code defined in dependent projects. What was once a huge and scary (will it work?) global search and replace operation is now a no-brainer. Which makes it MUCH more likely that things are named sensibly just because renaming is so easy. Rename also allows moving classes to new packages and so on - all automatically updated.
This is standard refactoring stuff. It's pretty new, but vi/emacs have handled it for several years (I use vim's BicycleRepairman interface for Python refactoring).
- Add / remove method parameters. Again, globally, all dependent code is automatically updated and I get to define a default value for add.
Ditto.
- See errors marked as I type. There is no compile button. Everything is compiled at all times, in the background. This is the way it should be, IMHO.
There's no compilation in Python, but I can lint on demand.
- Auto imports. Say you write a = ExternalObject() - Eclipse will automatically add that to the import statements. If it can't be found in the project scope but is in the project scope of another project in the workspace it will offer to add that other project to the dependencies and import the class. Basically I never waste a thought on import statements. I never even look at them unless there's a conflict (they are folded away)
This I don't have. Seems moderately nice.
- Mark several lines of code and extract a method from it.
I don't understand what you mean by this.
It's not 1995 anymore. Or 1975 for you Emacs guys.
A. Emacs wasn't around in 75
B. Emacs and vim have both improved steadily. If you last looked at vim 5 years ago, you're missing a lot and it's no more fair than me bringing up criticisms of ancient Eclipse versions.
Do you have a site I can upload to? It's about 3 python files and my vimrc to do most of the help/prototype display/class browser stuff (also I use the cvscommand and matchit plugins but no need to post them since they're widely available)
You need gvim with Python support, obviously.
Oh, yeah, you could just click the little "build tags in the current directory" icon too if you want.
1. Change to the top directory of your Python project
2. find . -name '*.py' | ctags -L -
Tags now work.
Of course, even without that they'll work for some things (vim tries to make decent guesses if you don't have a tags file).
What is a savable "view" and does one of :mksession ~/test.vim :so ~/test.vim
1.
(exit, restart vim)
2. Same, but replace mksession with mkview
do what you want?
Shouldn't that be:
(+ (Visual Studio) (lisp))
So do vim and emacs (in vim, all my recently opened projects are in the file menu, or I can open ~/src/projects in the file browser and pick one--it'll remember which files I had open in which windows the last time I was working on it, reset all my bookmarks, etc).
They allow for compilation without having to write your own batch file.
Compilation? We're talking perl/python here, right? I hit F11 to restart my web servers (and reread all the code), or select the client I want to restart from a menu in vim (we run seperate web servers for each of the clients we host, I just pick the one I'm want to switch to from the menu--F11 restarts the one I'm currently working on if I don't want to switch). Of course, since I'm working in an interpreted language I rarely need a restart anyway.
But at any rate, clicking the "Make" button in my vim toolbar will build the current project when I do C/C++/Java dev work. You're right that I have to create a Make file, but you're going to have to do that anyway for any multiplatform project--and if I'm doing something like GUI design, my GUI builder creates the Makefile for me anyway.
And when I hit make, if the compilation failed it'll jump me to the file/line where the first error was; I can fix it, go to the next error, etc from the toolbar (or keystrokes), then hit the make button again when I'm satisfied. As I jump around between errors, it shows the compiler's error messages in the status line.
Intellisense saves me - easily - thousands of key-strokes per day. Being able to type two or three letters and hit tab or ctrl-space-tab to complete keywords or object names makes coding a line incredibly fast.
Meta-/ in emacs or Ctrl-P/Ctrl-N in vim will do word completion, I don't know about emacs but in vim they'll limit it to currently applicable tags (so if I'm doing Java/C++ and I call object.foo then it'll only complete methods that start with foo and are methods of whatever class "object" is--or in C it'll only complete struct members, etc). I'd be shocked if emacs didn't do something similar.
Vim 7 will also have OmniComplete (it's in the dev tree already) which is pretty much like Intellisense if the using a period and getting a dropdown (instead of just getting a tab-completion style listing of matches) is really that a big deal to you.
Emacs and vim aren't wimpy text editors. Other things I can do:
1. If I'm editing a python file, I get a nice dropdown menu showing the parent classes of the one I'm editing, the child classes, and all the methods. I can select them from the menu to jump to them.
2. If I'm typing a call I get the method signature and beginning of help in my status line. So if, say, I type "cmp(" then the status line reads:If I hit F1, I get the full help text.
3. I can jump to tags easily, so if I see a call to "foo.blargle()" then I can click on "blargle" and it'll jump into the blargle method of class foo; I can keep drilling down through function calls, then hit back to pop back up the call stack to where I started.
4. I can get diffs against other versions of source control, where it shows the 2 versions side by side with the changes highlighted (different colors for what was added, removed, or modified). And I can easily check files into/out of source control.
5. I can do folding/outlining (so if I'm editing a file, I can toggle between seeing the whole file or seeing an outline of just the class/method definitions, then find what I'm looking for and expand back to seeing everything--it's far more powerful than that once you're used to it).
Lots more, but those are a few highlights.
One more followup:d al/
http://www-306.ibm.com/software/pervasive/multimo
shows binaries for Windows on ipaq/pocketpc, and Linux/Zaurus. The former is unhelpful, the latter I'll take a look at tonight.