Re-implement it and you'll likely have the exact same problems as this.. or worse. Specifically, the 'worse' problem you'll have is compatibility with broken implementations and corrupted data.
I've heard it said, as an example, that only 20% of the code in Gecko is to implement a reliable, standards-compliant rendering engine, and the other 80% is to implement workarounds for (sometimes horribly) broken HTML, and recover from what should rightfully be critical errors. I'm not sure if this statistic is accurate (or, if it was when I heard it, if it still is now); however, at a previous position, our (large-scale) software product, developed over the course of the last decade, large, complex, and convoluted, had a similar statistic. Over 80% of the code that we had in our core product was there to deal with bugs in previous code, bugs in other people's products, bugs in how different vendors implemented the standards (i.e. poorly), bugs with corrupted images, and so on.
Think about that for a second; anyone can re-implement a PNG library by reading the specifications and learning how to do the math on the algorithms; there are probably people at Google who could write a complete PNG library in C inside of a week (they DO have some pretty brilliant people working for them). What they CAN'T do is go out and feed into that library all of the broken, corrupted, or just-a-little-bit-off PNG images that are out there on the web that require little tweaks and adjustments (or horrific workarounds) to process, and find all the fixes to all the glitches that end-users might see.
The extensive experience that the libpng developers have had over the lifetime of the project cannot be simply re-implemented from a textbook. THAT is why simply re-writing it is impractical, and THAT is why code re-use is a good thing. Expand that from PNG images out to every other shared library in the project, and 'not invented here' syndrome turns simple and straightforward bllet-point requirements for Android into a large-scale programming project, and makes the whole thing impractical.
Fascinating how you can make assertions about their release of a system that hasn't been released without ever having seen it, despite everyone that's played it being a huge fan of the system and the way it simplifies roleplaying. Face it, you just don't know what you're talking about, you're just bitter. Get over it.
Pretty much every platform (in this case, I'd count GNOME and KDE as 'platforms') will have a set of Human Interface Guidelines that will give advice on how to craft a usable interface that meshes well with native applications and provides a solid user experience. There's no one hard-and-fast style guide, though there are lots of examples of what NOT to do if you Google (see the User Interface Wall of Shame for one).
Changing the default email client or web browser is a 4 step process*:
Choosing an email application other than Mail
Open Mail (/Applications/Mail). [...]
Choosing a default Web browser other than Safari
Open Safari (/Applications). [...] It should be worth noting that it is not a requirement to use Safari or Mail to change these defaults (nor the other default that both can change, namely the default feed reader for RSS/Atom feeds). Any application is capable of implementing this; many current browsers already do so, such as Shiira; it should be trivial, now that Firefox is a Cocoa application (or even before...) for Firefox to implement this exact functionality for users as well.
That is to say, it is not that Safari or Mail must to be used to change these preferences; rather it is specifically that Firefox and Thunderbird cannot (or at least, cannot through the preferences window).
I'm inclined to disagree here, even just based on personal experience.
When I was making far less than I am now (around minimum wage) I was a lot more impulsive in my purchases, largely because I didn't really have a lot to spend. If I only had fifty bucks left over after bills and food, then why should I bother budgeting? My money's going to bleed away anyway, so I may as well just get what I want. I was wasting my money, but I didn't have a lot to waste.
Now that I'm making a respectable salary, I find myself being a lot more picky about what I buy - not just large purchases, but everything. When I'm at Starbucks, I don't buy snacks most of the time, because most of the snacks there I don't enjoy enough for the price. If they were a dollar less, then I wouldn't have a problem, but that dollar once a week is worth saving, now that I've got a lot more of them.
Perhaps it's something along the lines of now, money is what I have instead of what I wish I had, and now that I have it I want to keep it. Who knows.
No, but that means that everyone planning to run non-Python3 code will have to maintain two parallel Python installations. With package management that's not so bad, but it still puts a bit of pain on distro maintainers. Most distros and package-management systems include multiple versions of many scripting languages already. Debian and fink both have python2.3, python2.4, and python2.5, though arguably fink handles it better than Debian does. It's not that much of a hassle, in the end, and it's very useful for when you require some new feature of Python (or some old feature of Python) but don't want to verify all of your scripts. For example, if you have a giant script that uses 'yield' as a variable name all over the place, it's going to break when you update Python and yield is now a reserved keyword. Same with the new division operator - if you do a lot of division operations, you don't want to go through your code line by line looking for division and check to make sure that it's doing it properly.
For another great example of this, check out Bryan Cantrill's talk on Dtrace. One of the problems that he describes having solved was fixing a huge multiuser system whose performance was orders of magnitude slower than it should have been, and no one could figure out why.
The reason? An 'orang-utan' that had written gtick2-applet (a stock ticker) that had no concept of how to do proper X programming. The application was attempting, every millisecond, to wake up, create a server-side graphics context (a very expensive operation that you should do once when your app launches, and never again), draw one pixel to it, and then destroy it. This idiotic and clueless programming cost Sun a disproportionate sum of money to work around, and then diagnose and fix.
It's exactly the same with the iPhone. One idiot writes one app that works fine for him, but as soon as twenty thousand people are running it, it's hammering the network, hammering some server somewhere, and no one can figure out why.
A guy I know runs one of those 'what is my IP' sites, and he was recently getting hammered by some Java applet. We never figured out what was doing it or why, but our suspicions run to some misbehaving app wanting to find out its own IP address and picking a retarded way to do it. As a result, he lost a lot of money from ad revenue for that week until he started firewalling off offending user-agents.
This kind of stuff can kill a business, you don't want any monkey with a toolkit putting together a shoddy app and breaking the network when someone needs to call 911. I applaud Apple for keeping some measure of quality control in the process.
If anyone is curious, I took screenshots of a default XP Pro install vs. a customized (for my uses) XP install, both running in Parallels with the Parallels Tools installed.
The difference is astronomical. It installs faster, boots faster, runs faster, and shuts down faster. Definitely worth the time, even just for one install.
nLite is definitely worth mentioning. I took a Windows XP Professional CD (580MB or so) and stripped out all the drivers that I never use, apps I never use, and functionality I never use, and it took it down to about 150MB. I also added in Service Pack 3, Firefox, Acrobat Reader, and drivers for my hardware, then customized it with registry tweaks beforehand (e.g. turning off the 'Welcome to Windows' page, disabling 'hide inactive notification icons', and so on), set it up to join a domain, added a new Windows theme (Royale, from MCE), and then set it up with an automated install with our company's volume key.
The end result? A tedious two-hour install procedure ('Oh, is it asking you something? Ok, just click 'Next'... greyed out? Click on the... yeah, there you go...') turned into a TEN MINUTE INSTALL. The only thing I haven't managed to do yet is to set up a USB drive as a bootable volume, to install from a flash drive to speed installation even further.
Definitely check it out if you have to do XP installs more than once a year.
One interesting thing I've noticed - your music is available for free on your website, and for sale on iTunes - but the iTunes tracks aren iTunes-plus - meaning they're lower-quality and FairPlay-encumbered. I'm not sure through which method you managed to get on iTunes (I know there are several for indie artists), but it would seem to me that this would be something you'd want to support.
One question I'm curious about - how much do you actually get from iTunes? If I like your music, I'm more likely to gift it to someone else via iTunes, or send them an iTMS link, than to send them directly to your website, since it's a lot more straightforward than deciding what your album(s) is/are worth for themselves. I know I certainly don't want a physical CD, but it would be good to know if you're getting jacked if I refer someone via iTMS.
Oh really? What about Secure Audio Path and the other draconian DRM measures in Windows. No, in that case the user whose control they're ensuring isn't you. They simply ensure control for everyone, no matter where that data is, or who's trying to use it for whatever (legal) reasons.
Your post shows a deep lack of understanding of how and where Python is used, and for what purposes. As an example, Civilzation IV is written partially in Python (the user interface, as I recall), and EVE Online has a significant portion written in Python as well. Considering that a lot of what Python does is I/O bound, and a lot more can be done in outside libraries (e.g. DirectX), using Python in game development can make things a lot easier, and a lot easier to modify down the road.
Put aside your prejudices and you may actually learn something.
Of course it's worth exploring! Just think of all the technology and advancements we've already brought back from the Gou'auld, the Asgard, and the Ancients. Naquada reactors, hyperdrive engines, beaming technology. Who knows what more might be out there!
But my experience thus far has been as follows: It doesn't matter whether you have managers as your boss or the owner of the company, they're all trying to screw you over and unless you are willing to risk being laughed at because you have such high demands you will NEVER get fair conditions on your job.
In the hopes that my commentary might add something to this point...
I've recently moved to Vancouver, and spent several months jobless trying to find something - anything - to pay the bills. I'd had a few positions, but nothing concrete.
My first job was at a company that did e-mail archiving (for SEC regulations, etc.). I was paid a 'decent' salary - essentially what I was making in Montreal before moving here. Except that the cost of living is higher out here by far. Rent plus transit was about $400/mo more than I was paying in Montreal. Still, it was a job. When I started, however, I realized what a mess the company was. The one person there capable of training me was too busy and burnt out to do so, so I spent a lot of my time asking questions that never got answered. Even once I got the idea of how to use our software, I still hadn't received access to the system to actually *do* my job. Our workflow was also preposterous: a customer would sign their contract, then fill out a web form. The form would be e-mailed to someone who would print it off and put it in a folder, and then hand it to me to put back into the computer. I kept suggesting ways in which this process could get better, until I discovered that people who had, in the past, made it better had been fired for doing so, and the system revered. Needless to say, they didn't keep me around long either.
My next position was two months later, for a software company. I got the job right when our savings ran out and my fiancée's income wasn't enough to pay the rent, so it was a godsend; still, the company seemed to have unrealistic expectations. I was hired as a survey designer, but was immediately thrown into QA, where I discovered that their software was riddled with bugs that unit testing would easily have discovered. Instead, I had to manually work through hours of testsuites, filling out complex branching surveys in minutely different ways each time, to see if they broke. After later being tasked with support, documentation writing, Access database scripting, and the like, I was told that I should write a testsuite for their new software.I should write it in C# or VB.NET, however, because they're 'better for web services stuff' than Python, the language in which I'm strongest. Being told to write something in a language that they know I don't know, rather than a language with which I'm very familiar, told me that these people don't know how to run a tech company. Watching them struggle with basic concepts, progressing forward only because of the things that Tomcat and Netbeans will do for you automatically, confirmed it for me.
Our christmas party was scheduled in October, and we and our spouses were going to the Shark Club, an apparently fancy place downtown. Then, management told us we were going, but our spouses weren't invited. Then they said we weren't going at all, but we could 'plan something on our own' (us being the office serfs). Beer and pizza was suggested. Merry effing christmas. So ok, we started to arrange for beer and pizza. Then my boss asked where we were getting the pizza from, and was told 'Panago'. Their prices are similar to Domino's or Pizza Hut take-out, but we were told that Panago was 'too expensive', and we should try [shittiest pizza place in the neighborhood] instead. After seeing that our 'Christmas Party' was going to cost less per-person than we normally spent on lunch on any given day, I knew that management had little respect for their employees.
I was offered a position at a new company, as a junior sysadmin, making a 'high forties' salary. I was, at that point, already making 'low forties', and I told the company that the small difference in salary
True. I can only think of one example, HTML, and you can always programmatically insert non-breaking spaces in that case. You can do this efficiently in four lines of Python code, or a couple more in elisp when copying to the clipboard. Or wrap it in <pre>...</pre> tags
Just the fact that assignment by reference is the default, that building data structures deeply requires no line noise, makes the program design easy to get right the first time. No "oops, need another dollar sign there". No "how do I refer to a value in a hash of lists of hashes again?" You just do it. This is definitely true, though your mention of assignment by reference reminded me of something.
I was experimenting with writing an IRC bot in Python from the ground up, opening up a socket and sending data into it (no frameworks or anything). After a while, I got fed up with killing the bot and restarting it every time I wanted to test new code (and people were getting tired of it quitting and rejoining), so eventually I came up with a solution.
I factored the bot class out into a separate module, and wrote a script that instantiated an object of the class, which then connected to the server, joined channels, etc. Then, I added functionality to the class to take all of its data structures (list of channels, list of users, and even the TCP socket itself) and pack them up into a dict, then return the dict. Finally, I added some code to import a dict and replace the data structures with the content of the dict, and then two or three lines of code to unload and reload the IRC bot module.
The result? I now have an IRC bot written in Python which allows me to modify the code live, without restarting the bot. If I want to add a new function, or add support for another command (one of the myriad numeric commands that, at this point, keeps ending up in my console), I can add it and then simply !rehash in IRC, and the bot reloads its own code, swapping out the old for the new.
Because objects are passed by reference, the socket itself moves from one instance to another, and the bot never has to disconnect. It was a rather ingenious hack, imho, was startlingly simple to implement, and was made possible by the amazing dynamicness of Python.
Ignoring the fact that your script won't work (you need $i instead of $1), I'd rather use Python.
import os, md5, time for x in xrange(8):
os.system("whois -h whois.networksolutions.com %s.com" % md5.new(str(time.time())[:8]).hexdigest())
time.sleep(1)
This is a good point, and worth highlighting. Most people I know didn't even get a DVD player until they could get one under a hundred bucks. Even then, when working at some various electronic stores/departments, I saw two things that (as a technical person) surprised me:
1. People would come into my department asking where the cassette tapes were. This was in 2001. Alternately, VHS tapes, in 2003. 2. Working at an EB in early 2004, people were still discounting the GameCube as a viable option for them because the PS2 and XBox were also DVD players - which these people didn't have. In 2004.
The format war is nearing an end, I hope, but don't expect the average consumer to jump in until there are sub-$100 players and they're not paying $45+ per disc for media. Obviously, the player price is more important, because once someone has a player, they're more likely to buy HD copies of whatever they want, be it Superman Returns or seasons of Stargate Atlantis (coming soon to a BD player near you!).
After the players are sub-$100, then people can buy a player, and start to pick and choose. They won't switch over wholesale, because I really don't need to see Hackers or The Pacifier in 1080p, regardless of what you may think of Angelina Jolie and/or Vin Diesel. They will, however, splash out for the big events - LOTR, Stargate Atlantis, Lawrence of Arabia, Bladerunner, Aliens - all the big, fancy movies whose theatre experiences you want to relive (or experience).
Of course, people are buying their favourites means only a selection of sales, but since different people have different preferences, this will splash across the board, and while the latest Mary-Kate and Ashley travesty or Britney Spears Comeback Fiasco DVD might not be worth HD-copies (or even paying for), there will be enough purchases spread across the board to start to bring prices down and let studios recoup the cost of setting up manufacturing, HD workflows, restoration, and so on.
Once that happens, discs come down in price to approach DVDs, and then, coupled with dropping prices on cheap entry-level players from unheard-of brands from Korea and Taiwan, you can achieve critical mass and DVDs can start to be phased out.
Why can't I file my pictures of cousin Larry along with my emails from and to cousin Larry in the same place?
Well, look at this for instance. For a start, for this to work properly you'd need the system to know that larry@example.com, larry324@aol.com, and c00ld00d@msn.com are actually the same person. If you want to do this with IM, add the same for MSN, AIM, and ICQ. This is doable but already implies effort, on your part. Are you going to sit for an hour creating a list linking various online identifiers to an unique identity? I'm a geek and I wouldn't.
I do this already. OS X's address book allows you to add a person, then add different methods of contacting them - multiple e-mail addresses, MSN, AIM, Yahoo, or Jabber accounts, phone numbers, addresses, and so on. Programs like Adium and iChat can access those lists and then map MSN accounts to real names, phone numbers, etc.
Example workflow: Foo Barrington sends me an e-mail from with his address, so that I can send him the frobulator he wanted. I can click on their name in the headers of the message and choose 'Add to address book.' At the bottom of his message is his signature, with his phone and fax number. When I hover my cursor over the address in the text of his message, OS X figures out it's an address and gives me the option to add it to Address Book. It pops up a preview window showing what it's going to add - the address to his address field, and the phone and fax numbers from his signature.
Later, Foo adds me to his AIM account, and now I see him in iChat. I can click on him and map him to one of the people from my address book, and suddenly I see his real name. Another app, like Skype, can pull names out of Address Book to call, and iSync can sync all his info to my cellphone.
Now the pictures present an even greater problem: They must have a tag of some sort specifying that they're of cousin Larry. You'll need to ensure every picture is adequately tagged, and that involves getting grandma to figure out how to do it, or correct every picture she sends. Then there's the issue of that some pictures are tagged "Larry", some "Larry Laffer", some "Larry S. Laffer", some "Larry Samuel Laffer", some "Lar", and a few tagged "Sparky" for the nickname he got for grabbing a live wire. Most will be completely untagged of course. And this gets more interesting if you know several people called "John Smith".
So when I sync my digital camera to my computer, and all the pictures show up in iPhoto, I can select all the ones with him in them and type 'Foo Barrington' into the comments field. If he was important enough that I be able to find this kind of correspondence (maybe if I was a casting agent and he was an actor), this would be a trivial task to do on a per-import basis (though doing this to five years worth of back-photos is a pain).
When someone gets back to me saying they want to meet with him for an audition, I can go into iCal and create an event for that under a certain calendar, and invite him to it, which e-mails him automatically. When he accepts, I get a notification, and it shows him as confirmed.
Same goes for office documents. Most people don't even know they can be tagged, and if you make them, they will be unable to come up with good tags. People designing these systems for some reason think that the kind of person that names files "invoice1.doc", "invoice2.doc", "invoice99.doc", then spends half an hour trying to figure out which was the one for Yoyodyne Corp will tag meaningfully are deluded. Good tags are even harder to come up with than a halfway decent filename.
Except that with a proper spotlight importer, the metadata that's already included in the document, as well as its contents, can be indexed, so when Foo Barrington sends me the resume that he wrote in Word, it will already have his name in the 'Author' field, which gets indexed.
So now what do we have? I can go to the Spotlight menu
But the only way to get that size a mass of volunteers is to work on a "sure thing" project with an established design that moves towards a goal everyone can already see -- to copy an established product.
Maybe it hasn't enough mass of volunteers? Make that ruby on rails, then. Keep in mind that slashcode was written in private and used for years before being open-sourced... and what great features has the community added since? Advertising? Subscriber fees? The Firehose? this new, broken comment mangement system, which never loads the new comments that I want it to? Tagging which seems to serve no purpose? Go open-source, woo.
Open source ends up copying established products because: 1) it's easier to get an audience that way. Users are lazy. 2) often there is little reason to change. there is no pressure to make people upgrade or get used to your paradigm as in closed source packages competing with each other. 1) Users will move to a better alternative when one is presented, if the cost of migration is not great. As a result, Linux has worked on two main drives: being UNIX, but bolting on hacks to work around problems instead of solving them, and playing catch-up with Windows instead of going off and adding real, innovative features. In comparison, OS X has added innovative and useful features - not necessarily their own innovations, but not copies of hackish Windows features either.
2) The argument of 'Why should we change, this solution has worked for 30 years' is idiotic, as the current solution is a) not the same as what we had 30 years ago anyway, b) not compatible with that solution, and c) not working as well as it could/should. OS X is largely as compatible with such things as Linux is, and yet it has features that Linux doesn't (or had them before Linux ever did) - Spotlight, QuickLook, Quartz, hardware compositing, and so on.
Open-source thus ends up with a staggering amount of inertia, as a result of sloth or ego, and the only impetus for change is when someone else does something that open-source was too lazy/nearsighted/uninspired to do, and someone says 'Oh yeah? I could do that too!' The problem, they don't realize, isn't that open-source can't do these things - it's that they don't, until someone else does first.
But that doesn't stop never seen before stuff to come out. See debian packaging system, iolanguage, étoilé, wagn, countless others. DTrace, proper kernel debugging, Spotlight, Java, QuickSilver, Konfabulator/Dashboard, hardware compositing, 16 bits/channel image editing, Exchange (well, proper collaboration, however reliable it is), and so on.
Last but not least, a reality check:
Linux may have the same old "ls" and "chmod" stuff you see on a vintage VAX, but the kernel is getting faster, configuring it is getting painless, and packages are growing in number. Configuring it is *getting* painless? Compared to Linux, Windows 95 was painless, so where have they been for the last 12 years? OS X is completely painless, and Vista nearly is.
On the other front there is the innovative Vista failure and the "let's put the good 'ol' macos GUI on good ol unix" Leopard. Leopard lets me get things done without screwing around trying to fix the apps that let me get things done. Unlike Linux UIs and DEs, which I've used for years, it doesn't get in my way just to let me know it's there. It also lets me open up Terminal and run bash, write some Python scripts with UNIX sockets, compile and install MySQL, and so on.
I've long said that the only thing you can do on Linux that you can't do on OS X is Linux kernel development - and with Parallels and VMWare now, that's even less true (and for that matter, is more convenient). Even proprietary software made for Linux can run in a VM and display on OS X's included X11 implementation, eliminating the overhead of a bulky XFree86 install.
CPython, the reference interpreter (and therefore the language) only requires the ANSI C standard library. Any module in the python standard library that is written in python (most are) will also work. Modules that aren't 100% python may or may not work (socket.py is an example that, I believe, needs posix-style socket support).
Jython, the python interpreter written for the java virtual machine, will, naturally, run on any system that supports java. Don't forget IronPython, which is a.NET implementation and will (should?) run anywhere that.NET will run, including in Microsoft's CLR implementation, as well as Mono. Whether this is borne out in reality, however, is a different matter, and there are a lot of behaviours people rely on in CPython which are not duplicated in IronPython (GC vs. reference counting) or Jython (all Jython strings are Unicode strings).
Even loading your own source onto the iPhone/iPod Touch requires the $99 certificate; no freebies.
I've heard it said, as an example, that only 20% of the code in Gecko is to implement a reliable, standards-compliant rendering engine, and the other 80% is to implement workarounds for (sometimes horribly) broken HTML, and recover from what should rightfully be critical errors. I'm not sure if this statistic is accurate (or, if it was when I heard it, if it still is now); however, at a previous position, our (large-scale) software product, developed over the course of the last decade, large, complex, and convoluted, had a similar statistic. Over 80% of the code that we had in our core product was there to deal with bugs in previous code, bugs in other people's products, bugs in how different vendors implemented the standards (i.e. poorly), bugs with corrupted images, and so on.
Think about that for a second; anyone can re-implement a PNG library by reading the specifications and learning how to do the math on the algorithms; there are probably people at Google who could write a complete PNG library in C inside of a week (they DO have some pretty brilliant people working for them). What they CAN'T do is go out and feed into that library all of the broken, corrupted, or just-a-little-bit-off PNG images that are out there on the web that require little tweaks and adjustments (or horrific workarounds) to process, and find all the fixes to all the glitches that end-users might see.
The extensive experience that the libpng developers have had over the lifetime of the project cannot be simply re-implemented from a textbook. THAT is why simply re-writing it is impractical, and THAT is why code re-use is a good thing. Expand that from PNG images out to every other shared library in the project, and 'not invented here' syndrome turns simple and straightforward bllet-point requirements for Android into a large-scale programming project, and makes the whole thing impractical.
Fascinating how you can make assertions about their release of a system that hasn't been released without ever having seen it, despite everyone that's played it being a huge fan of the system and the way it simplifies roleplaying. Face it, you just don't know what you're talking about, you're just bitter. Get over it.
Pretty much every platform (in this case, I'd count GNOME and KDE as 'platforms') will have a set of Human Interface Guidelines that will give advice on how to craft a usable interface that meshes well with native applications and provides a solid user experience. There's no one hard-and-fast style guide, though there are lots of examples of what NOT to do if you Google (see the User Interface Wall of Shame for one).
Choosing an email application other than Mail
Open Mail (/Applications/Mail).
[...]
Choosing a default Web browser other than Safari
Open Safari (/Applications).
[...] It should be worth noting that it is not a requirement to use Safari or Mail to change these defaults (nor the other default that both can change, namely the default feed reader for RSS/Atom feeds). Any application is capable of implementing this; many current browsers already do so, such as Shiira; it should be trivial, now that Firefox is a Cocoa application (or even before...) for Firefox to implement this exact functionality for users as well.
That is to say, it is not that Safari or Mail must to be used to change these preferences; rather it is specifically that Firefox and Thunderbird cannot (or at least, cannot through the preferences window).
Being a slashdot poster, and thus obviously a geek, I'm sure you already know the answer to that question.
Oh, a sarcasm detector. That's useful.
I'm inclined to disagree here, even just based on personal experience.
When I was making far less than I am now (around minimum wage) I was a lot more impulsive in my purchases, largely because I didn't really have a lot to spend. If I only had fifty bucks left over after bills and food, then why should I bother budgeting? My money's going to bleed away anyway, so I may as well just get what I want. I was wasting my money, but I didn't have a lot to waste.
Now that I'm making a respectable salary, I find myself being a lot more picky about what I buy - not just large purchases, but everything. When I'm at Starbucks, I don't buy snacks most of the time, because most of the snacks there I don't enjoy enough for the price. If they were a dollar less, then I wouldn't have a problem, but that dollar once a week is worth saving, now that I've got a lot more of them.
Perhaps it's something along the lines of now, money is what I have instead of what I wish I had, and now that I have it I want to keep it. Who knows.
Multiple versions is nothing new.
For another great example of this, check out Bryan Cantrill's talk on Dtrace. One of the problems that he describes having solved was fixing a huge multiuser system whose performance was orders of magnitude slower than it should have been, and no one could figure out why.
The reason? An 'orang-utan' that had written gtick2-applet (a stock ticker) that had no concept of how to do proper X programming. The application was attempting, every millisecond, to wake up, create a server-side graphics context (a very expensive operation that you should do once when your app launches, and never again), draw one pixel to it, and then destroy it. This idiotic and clueless programming cost Sun a disproportionate sum of money to work around, and then diagnose and fix.
It's exactly the same with the iPhone. One idiot writes one app that works fine for him, but as soon as twenty thousand people are running it, it's hammering the network, hammering some server somewhere, and no one can figure out why.
A guy I know runs one of those 'what is my IP' sites, and he was recently getting hammered by some Java applet. We never figured out what was doing it or why, but our suspicions run to some misbehaving app wanting to find out its own IP address and picking a retarded way to do it. As a result, he lost a lot of money from ad revenue for that week until he started firewalling off offending user-agents.
This kind of stuff can kill a business, you don't want any monkey with a toolkit putting together a shoddy app and breaking the network when someone needs to call 911. I applaud Apple for keeping some measure of quality control in the process.
If anyone is curious, I took screenshots of a default XP Pro install vs. a customized (for my uses) XP install, both running in Parallels with the Parallels Tools installed.
Default XP Install - 22 processes, commit charge 105 MB
Custom XP Install - 17 processes, commit charge 52 MB
The difference is astronomical. It installs faster, boots faster, runs faster, and shuts down faster. Definitely worth the time, even just for one install.
nLite is definitely worth mentioning. I took a Windows XP Professional CD (580MB or so) and stripped out all the drivers that I never use, apps I never use, and functionality I never use, and it took it down to about 150MB. I also added in Service Pack 3, Firefox, Acrobat Reader, and drivers for my hardware, then customized it with registry tweaks beforehand (e.g. turning off the 'Welcome to Windows' page, disabling 'hide inactive notification icons', and so on), set it up to join a domain, added a new Windows theme (Royale, from MCE), and then set it up with an automated install with our company's volume key.
The end result? A tedious two-hour install procedure ('Oh, is it asking you something? Ok, just click 'Next'... greyed out? Click on the... yeah, there you go...') turned into a TEN MINUTE INSTALL. The only thing I haven't managed to do yet is to set up a USB drive as a bootable volume, to install from a flash drive to speed installation even further.
Definitely check it out if you have to do XP installs more than once a year.
One interesting thing I've noticed - your music is available for free on your website, and for sale on iTunes - but the iTunes tracks aren iTunes-plus - meaning they're lower-quality and FairPlay-encumbered. I'm not sure through which method you managed to get on iTunes (I know there are several for indie artists), but it would seem to me that this would be something you'd want to support.
One question I'm curious about - how much do you actually get from iTunes? If I like your music, I'm more likely to gift it to someone else via iTunes, or send them an iTMS link, than to send them directly to your website, since it's a lot more straightforward than deciding what your album(s) is/are worth for themselves. I know I certainly don't want a physical CD, but it would be good to know if you're getting jacked if I refer someone via iTMS.
Your post shows a deep lack of understanding of how and where Python is used, and for what purposes. As an example, Civilzation IV is written partially in Python (the user interface, as I recall), and EVE Online has a significant portion written in Python as well. Considering that a lot of what Python does is I/O bound, and a lot more can be done in outside libraries (e.g. DirectX), using Python in game development can make things a lot easier, and a lot easier to modify down the road.
Put aside your prejudices and you may actually learn something.
Of course it's worth exploring! Just think of all the technology and advancements we've already brought back from the Gou'auld, the Asgard, and the Ancients. Naquada reactors, hyperdrive engines, beaming technology. Who knows what more might be out there!
But my experience thus far has been as follows: It doesn't matter whether you have managers as your boss or the owner of the company, they're all trying to screw you over and unless you are willing to risk being laughed at because you have such high demands you will NEVER get fair conditions on your job.
In the hopes that my commentary might add something to this point...
I've recently moved to Vancouver, and spent several months jobless trying to find something - anything - to pay the bills. I'd had a few positions, but nothing concrete.
My first job was at a company that did e-mail archiving (for SEC regulations, etc.). I was paid a 'decent' salary - essentially what I was making in Montreal before moving here. Except that the cost of living is higher out here by far. Rent plus transit was about $400/mo more than I was paying in Montreal. Still, it was a job. When I started, however, I realized what a mess the company was. The one person there capable of training me was too busy and burnt out to do so, so I spent a lot of my time asking questions that never got answered. Even once I got the idea of how to use our software, I still hadn't received access to the system to actually *do* my job. Our workflow was also preposterous: a customer would sign their contract, then fill out a web form. The form would be e-mailed to someone who would print it off and put it in a folder, and then hand it to me to put back into the computer. I kept suggesting ways in which this process could get better, until I discovered that people who had, in the past, made it better had been fired for doing so, and the system revered. Needless to say, they didn't keep me around long either.
My next position was two months later, for a software company. I got the job right when our savings ran out and my fiancée's income wasn't enough to pay the rent, so it was a godsend; still, the company seemed to have unrealistic expectations. I was hired as a survey designer, but was immediately thrown into QA, where I discovered that their software was riddled with bugs that unit testing would easily have discovered. Instead, I had to manually work through hours of testsuites, filling out complex branching surveys in minutely different ways each time, to see if they broke. After later being tasked with support, documentation writing, Access database scripting, and the like, I was told that I should write a testsuite for their new software.I should write it in C# or VB.NET, however, because they're 'better for web services stuff' than Python, the language in which I'm strongest. Being told to write something in a language that they know I don't know, rather than a language with which I'm very familiar, told me that these people don't know how to run a tech company. Watching them struggle with basic concepts, progressing forward only because of the things that Tomcat and Netbeans will do for you automatically, confirmed it for me.
Our christmas party was scheduled in October, and we and our spouses were going to the Shark Club, an apparently fancy place downtown. Then, management told us we were going, but our spouses weren't invited. Then they said we weren't going at all, but we could 'plan something on our own' (us being the office serfs). Beer and pizza was suggested. Merry effing christmas. So ok, we started to arrange for beer and pizza. Then my boss asked where we were getting the pizza from, and was told 'Panago'. Their prices are similar to Domino's or Pizza Hut take-out, but we were told that Panago was 'too expensive', and we should try [shittiest pizza place in the neighborhood] instead. After seeing that our 'Christmas Party' was going to cost less per-person than we normally spent on lunch on any given day, I knew that management had little respect for their employees.
I was offered a position at a new company, as a junior sysadmin, making a 'high forties' salary. I was, at that point, already making 'low forties', and I told the company that the small difference in salary
I was experimenting with writing an IRC bot in Python from the ground up, opening up a socket and sending data into it (no frameworks or anything). After a while, I got fed up with killing the bot and restarting it every time I wanted to test new code (and people were getting tired of it quitting and rejoining), so eventually I came up with a solution.
I factored the bot class out into a separate module, and wrote a script that instantiated an object of the class, which then connected to the server, joined channels, etc. Then, I added functionality to the class to take all of its data structures (list of channels, list of users, and even the TCP socket itself) and pack them up into a dict, then return the dict. Finally, I added some code to import a dict and replace the data structures with the content of the dict, and then two or three lines of code to unload and reload the IRC bot module.
The result? I now have an IRC bot written in Python which allows me to modify the code live, without restarting the bot. If I want to add a new function, or add support for another command (one of the myriad numeric commands that, at this point, keeps ending up in my console), I can add it and then simply !rehash in IRC, and the bot reloads its own code, swapping out the old for the new.
Because objects are passed by reference, the socket itself moves from one instance to another, and the bot never has to disconnect. It was a rather ingenious hack, imho, was startlingly simple to implement, and was made possible by the amazing dynamicness of Python.
Woo!
Ignoring the fact that your script won't work (you need $i instead of $1), I'd rather use Python.
import os, md5, time
for x in xrange(8):
os.system("whois -h whois.networksolutions.com %s.com" % md5.new(str(time.time())[:8]).hexdigest())
time.sleep(1)
This is a good point, and worth highlighting. Most people I know didn't even get a DVD player until they could get one under a hundred bucks. Even then, when working at some various electronic stores/departments, I saw two things that (as a technical person) surprised me:
1. People would come into my department asking where the cassette tapes were. This was in 2001. Alternately, VHS tapes, in 2003.
2. Working at an EB in early 2004, people were still discounting the GameCube as a viable option for them because the PS2 and XBox were also DVD players - which these people didn't have. In 2004.
The format war is nearing an end, I hope, but don't expect the average consumer to jump in until there are sub-$100 players and they're not paying $45+ per disc for media. Obviously, the player price is more important, because once someone has a player, they're more likely to buy HD copies of whatever they want, be it Superman Returns or seasons of Stargate Atlantis (coming soon to a BD player near you!).
After the players are sub-$100, then people can buy a player, and start to pick and choose. They won't switch over wholesale, because I really don't need to see Hackers or The Pacifier in 1080p, regardless of what you may think of Angelina Jolie and/or Vin Diesel. They will, however, splash out for the big events - LOTR, Stargate Atlantis, Lawrence of Arabia, Bladerunner, Aliens - all the big, fancy movies whose theatre experiences you want to relive (or experience).
Of course, people are buying their favourites means only a selection of sales, but since different people have different preferences, this will splash across the board, and while the latest Mary-Kate and Ashley travesty or Britney Spears Comeback Fiasco DVD might not be worth HD-copies (or even paying for), there will be enough purchases spread across the board to start to bring prices down and let studios recoup the cost of setting up manufacturing, HD workflows, restoration, and so on.
Once that happens, discs come down in price to approach DVDs, and then, coupled with dropping prices on cheap entry-level players from unheard-of brands from Korea and Taiwan, you can achieve critical mass and DVDs can start to be phased out.
Personally, I can't wait.
http://www.threepanelsoul.com/view.php?date=2007-11-13
Well, look at this for instance. For a start, for this to work properly you'd need the system to know that larry@example.com, larry324@aol.com, and c00ld00d@msn.com are actually the same person. If you want to do this with IM, add the same for MSN, AIM, and ICQ. This is doable but already implies effort, on your part. Are you going to sit for an hour creating a list linking various online identifiers to an unique identity? I'm a geek and I wouldn't.
I do this already. OS X's address book allows you to add a person, then add different methods of contacting them - multiple e-mail addresses, MSN, AIM, Yahoo, or Jabber accounts, phone numbers, addresses, and so on. Programs like Adium and iChat can access those lists and then map MSN accounts to real names, phone numbers, etc.
Example workflow: Foo Barrington sends me an e-mail from with his address, so that I can send him the frobulator he wanted. I can click on their name in the headers of the message and choose 'Add to address book.' At the bottom of his message is his signature, with his phone and fax number. When I hover my cursor over the address in the text of his message, OS X figures out it's an address and gives me the option to add it to Address Book. It pops up a preview window showing what it's going to add - the address to his address field, and the phone and fax numbers from his signature.
Later, Foo adds me to his AIM account, and now I see him in iChat. I can click on him and map him to one of the people from my address book, and suddenly I see his real name. Another app, like Skype, can pull names out of Address Book to call, and iSync can sync all his info to my cellphone.
Now the pictures present an even greater problem: They must have a tag of some sort specifying that they're of cousin Larry. You'll need to ensure every picture is adequately tagged, and that involves getting grandma to figure out how to do it, or correct every picture she sends. Then there's the issue of that some pictures are tagged "Larry", some "Larry Laffer", some "Larry S. Laffer", some "Larry Samuel Laffer", some "Lar", and a few tagged "Sparky" for the nickname he got for grabbing a live wire. Most will be completely untagged of course. And this gets more interesting if you know several people called "John Smith".
So when I sync my digital camera to my computer, and all the pictures show up in iPhoto, I can select all the ones with him in them and type 'Foo Barrington' into the comments field. If he was important enough that I be able to find this kind of correspondence (maybe if I was a casting agent and he was an actor), this would be a trivial task to do on a per-import basis (though doing this to five years worth of back-photos is a pain).
When someone gets back to me saying they want to meet with him for an audition, I can go into iCal and create an event for that under a certain calendar, and invite him to it, which e-mails him automatically. When he accepts, I get a notification, and it shows him as confirmed.
Same goes for office documents. Most people don't even know they can be tagged, and if you make them, they will be unable to come up with good tags. People designing these systems for some reason think that the kind of person that names files "invoice1.doc", "invoice2.doc", "invoice99.doc", then spends half an hour trying to figure out which was the one for Yoyodyne Corp will tag meaningfully are deluded. Good tags are even harder to come up with than a halfway decent filename.
Except that with a proper spotlight importer, the metadata that's already included in the document, as well as its contents, can be indexed, so when Foo Barrington sends me the resume that he wrote in Word, it will already have his name in the 'Author' field, which gets indexed.
So now what do we have? I can go to the Spotlight menu
So where's the "closed source established product" of... what you have under your nose?
Maybe it hasn't enough mass of volunteers? Make that ruby on rails, then. Keep in mind that slashcode was written in private and used for years before being open-sourced... and what great features has the community added since? Advertising? Subscriber fees? The Firehose? this new, broken comment mangement system, which never loads the new comments that I want it to? Tagging which seems to serve no purpose? Go open-source, woo. Open source ends up copying established products because:
1) it's easier to get an audience that way. Users are lazy.
2) often there is little reason to change. there is no pressure to make people upgrade or get used to your paradigm as in closed source packages competing with each other. 1) Users will move to a better alternative when one is presented, if the cost of migration is not great. As a result, Linux has worked on two main drives: being UNIX, but bolting on hacks to work around problems instead of solving them, and playing catch-up with Windows instead of going off and adding real, innovative features. In comparison, OS X has added innovative and useful features - not necessarily their own innovations, but not copies of hackish Windows features either.
2) The argument of 'Why should we change, this solution has worked for 30 years' is idiotic, as the current solution is a) not the same as what we had 30 years ago anyway, b) not compatible with that solution, and c) not working as well as it could/should. OS X is largely as compatible with such things as Linux is, and yet it has features that Linux doesn't (or had them before Linux ever did) - Spotlight, QuickLook, Quartz, hardware compositing, and so on.
Open-source thus ends up with a staggering amount of inertia, as a result of sloth or ego, and the only impetus for change is when someone else does something that open-source was too lazy/nearsighted/uninspired to do, and someone says 'Oh yeah? I could do that too!' The problem, they don't realize, isn't that open-source can't do these things - it's that they don't, until someone else does first. But that doesn't stop never seen before stuff to come out. See debian packaging system, iolanguage, étoilé, wagn, countless others. DTrace, proper kernel debugging, Spotlight, Java, QuickSilver, Konfabulator/Dashboard, hardware compositing, 16 bits/channel image editing, Exchange (well, proper collaboration, however reliable it is), and so on. Last but not least, a reality check:
Linux may have the same old "ls" and "chmod" stuff you see on a vintage VAX, but the kernel is getting faster, configuring it is getting painless, and packages are growing in number. Configuring it is *getting* painless? Compared to Linux, Windows 95 was painless, so where have they been for the last 12 years? OS X is completely painless, and Vista nearly is. On the other front there is the innovative Vista failure and the "let's put the good 'ol' macos GUI on good ol unix" Leopard. Leopard lets me get things done without screwing around trying to fix the apps that let me get things done. Unlike Linux UIs and DEs, which I've used for years, it doesn't get in my way just to let me know it's there. It also lets me open up Terminal and run bash, write some Python scripts with UNIX sockets, compile and install MySQL, and so on.
I've long said that the only thing you can do on Linux that you can't do on OS X is Linux kernel development - and with Parallels and VMWare now, that's even less true (and for that matter, is more convenient). Even proprietary software made for Linux can run in a VM and display on OS X's included X11 implementation, eliminating the overhead of a bulky XFree86 install.
Jython, the python interpreter written for the java virtual machine, will, naturally, run on any system that supports java. Don't forget IronPython, which is a