2014-03-21
A Wrinkle in Time
But, you've got this covered. You just add an offset to every stored date/time, so you know the origin time zone, and then you get the user's time zone, and voila! You can correct for time zones! Everything is going great, summer turns to fall, the leaves change, the clocks change, and it all falls apart again. Now you're storing dates in various time zones, without DST information, you're adjusting them to the user's time zone, trying to account for DST, trying to find a spot here or there where you forgot to account for offsets...
Don't fall into this trap. UTC is always the answer. It is effectively time-zone-less, as it has an offset of zero and does not observe daylight savings time. It's reliable, it's universal, it's always there when you need it, and you can always convert it to any time you need. Storing a date/time with time zone information is like telling someone your age by giving your birthday and today's date - you're dealing with additional data and additional processing with zero benefit.
When starting a project, you're going to be better off storing all dates as UTC from the get-go; it'll save you innumerable headaches later on. I think it is atrocious that .NET defaults to system-local time for dates; one of the few areas where I think Java has a clearly better design. .NET's date handling in general is a mess, but simply defaulting to local time when you call DateTime.Now encourages developers to exercise bad practices; the exact opposite of the stated goals of the platform, which is to make sure that the easy thing and the correct thing are, in fact, the same thing.
On a vaguely related note, I've found a (in my opinion) rather elegant solution for providing localized date/time data on a website, and it's all wrapped up in a tiny Gist for your use: https://gist.github.com/aprice/7846212
This simple jQuery script goes through elements with a data attribute providing a timestamp in UTC, and replaces the contents (which can be the formatted date in UTC, as a placeholder) with the date/time information in the user's local time zone and localized date/time format. You don't have to ask the user their time zone or date format.
Unfortunately it looks like most browsers don't take into account customized date/time formatting settings; for example, on my computer, I have the date format as yyyy-mm-dd, but Chrome still renders the standard US format of mm/dd/YYYY. However, I think this is a relatively small downside, especially considering that getting around this requires allowing users to customize the date format, complete with UI and storage mechanism for doing so.
2014-03-13
On Code Comments
And therein lies the rub: they shouldn't be representing the code at all. Code - clean, self-documenting code - represents itself. It doesn't need a plain-text representative to speak on its behalf unless it's poorly written in the first place.
It may sound like I'm simply suggesting aiming for the "fewer comments" end of the spectrum, but I'm not; there's still an entity that may occasionally need representation in plain text: the developer. Comments are an excellent way to describe intent, which just so happens to take a lot longer to go stale, and is often the missing piece of the puzzle when trying to grok some obscure or obtuse section of code. The code is the content; the comments are the author's footnotes, the director's commentary.
Well-written code doesn't need comments to say what it's doing - which is just as well since, as so many others have pointed out, those comments are highly likely to wind up out-of-sync with what the code is actually doing. However, sometimes - not always, maybe even not often, but sometimes - code needs comments to explain why it's doing whatever it's doing. Sure, you're incrementing Frobulator.Foo, and everybody is familiar with the Frobulator and everybody knows why Foo is important and anyone looking at the code can plainly see you're trying to increment it. But why are you incrementing it? Why are you incrementing it the way you're doing it in this case? What is the intent, separate from its execution? That's where comments can provide value.
As a side note (no pun intended), I hope we can all agree that doc comments are a separate beast entirely here. Doc comments provide meta data that can be used by source code analyzers, prediction/suggestion/auto-completion engines, API documentation generators, and the like; they provide value through some technical mechanism and are generally intended for reading somewhere else, not for reading them in the source code itself. Because of this I consider doc comments to be a completely separate entity, that just happen to be encoded in comment syntax.
My feelings on doc comments are mixed; generally speaking, I think they're an excellent tool and should be widely used to document any public API. However, there are few things in the world more frustrating that looking up the documentation for a method you don't understand, only to find that the doc comments are there but blank (probably generated or templated), or are there but so out of date that they're missing parameters or the types are wrong. This is the kind of thing that can have developers flipping desks at two in the morning when they're trying to get something done.
2014-02-06
You're Being Held Hostage and You May Not Even Know It
Your broadband provider would like to charge companies - particularly content companies - extra in order to bring you their content. Setting aside the utterly delirious reasoning behind this for the moment, let's think about this from the consumer's perspective. You're paying your ISP to provide you access to the internet - the whole thing. When you sign up for service, you're signing up for just that: access to the internet. Period. What your ISP fails to disclose, at least in any useful detail, is how they intend to shape that access.
For your $40, $50, $60 or more each month, you might get high-speed access to some things, and not to others. You don't get to know what ahead of time, or even after you sign up - the last thing your ISP wants is for you to be well-informed about your purchase in this regard. They'll do whatever they can to convince you that your service is plain, simple, high-speed access to the whole internet.
Then, in negotiations behind closed doors, they're using you as a hostage to extort money from the businesses you're a customer of. Take Netflix as an example: you pay your ISP for internet service. Netflix also has an ISP, or several, that they pay for internet service. Those ISPs have what are called "peering arrangements" that determine who, if anyone, pays, and how much, when traffic travels between their networks on behalf of their customers. This is part and parcel of what you and Netflix pay for your service. You pay Netflix a monthly fee to receive Netflix service, which you access using your ISP. Netflix uses some part of that monthly fee to pay for their own internet service.
Your ISP has gone to Netflix and said "hey, if you want to deliver high-definition video to your customers who are also my customers, you have to pay me extra, otherwise my customers which are also your customers will receive a sub-par experience, and they might cancel their Netflix account." They're using you as a bargaining chip without your knowledge or consent, in order to demand money they never earned to begin with; everyone involved is already paying their fair share for their connection to the global network, and for the interconnections between parts of that global network.
To me, when a company I do business with uses me, and degrades my experience of their product, without my knowledge or consent, that's fraud from a consumer standpoint. Whatever Netflix might think about the deal, whether Netflix is right or wrong in the matter, doesn't enter into it; I'm paying for broadband so that I can watch Netflix movies, I'm paying for Netflix so that I can watch movies over my broadband connection, and my ISP is going behind my back and threatening to make my experience worse if Netflix doesn't do what they want. Nobody asked me how I feel about it.
Of course, they could give full disclosure to their customers (though they never would), and it wouldn't matter a whole lot, because your options as a broadband consumer are extremely limited; in the majority of cases, the only viable solution is cable, and when there is competition, it comes from exactly one place: the phone company. The cable companies and phone companies are alike in their use of their customers as hostages in negotiations.
What about fiber broadband? It's a red herring - it's provided by the phone company anyway. Calling fiber competition is like saying Coke in cans competes with Coke in bottles - it's all Coke, and whichever one you buy, your money goes into Coke's pocket.
What about wireless? Wireless will never, ever be able to compete with wired service, due to simple physics. The bandwidth just isn't there, the spectrum isn't there, there's noise to contend with, and usage caps make wireless broadband a non-starter for many cases, especially streaming HD video. Besides, the majority of truly high-speed wireless service is provided by the phone companies anyway; see the previous paragraph.
Why aren't they regulated? The FCC is trying, in its own way, but there's little traction; the cable and telephone companies have the government in their collective pockets with millions of dollars of lobbying money, and We The People haven't convinced Our Government that we care enough for them to even consider turning down that money.
In the United States, we pay many, many times what people pay in much of the developed world, and we get many, many times less for what we spend. On top of that, our ISPs are using us as bargaining chips, threatening to make our already overpriced, underpowered service even worse if the companies we actually chose in a competitive market - unlike our ISPs - don't pay up. This is absolutely preposterous, it's bordering on consumer fraud, and you should be angry about it. You should be angry enough to write your congressman, your senator, the president, the FCC, and your ISP (not that the last will do you much good, but it can't hurt.)
Some excellent places to find more information:
- Why YouTube buffers: The secret deals that make—and break—online video on Ars Technica
- Sorry, Comcast and Verizon customers: RCN delivers faster Netflix on Ars Technica
- Cheapest 150Mbps broadband in big US cities costs 100% more than overseas on Ars Technica
- A Guide to the Open Internet
- What is Net Neutrality on Public Knowledge
2013-12-18
Engineers, Hours, Perks, and Pride
I wholeheartedly agree that 18-hour days are just not sustainable. It might work for a brand-new startup cranking out an initial release, understaffed and desperate to be first to market. But, at that stage, you can expect the kind of passion and dedication from a small team to put in those hours and give up their lives to build something new.
Once you've built it, though, the hours become an issue, and the playpen becomes a nuisance. You can't expect people to work 18-hour days forever, or even 12-hour days. People far smarter than I have posited that the most productive time an intellectual worker can put in on a regular basis is 4 to 6 hours per day; after that, productivity and effectiveness plummet, and it only gets worse the longer it goes on.
Foosball isn't a magical sigil protecting engineers from burn-out. Paintball with your coworkers isn't a substitute for drinks with your friends or a night in with your family. An in-house chef sounds great on paper, until you realize that the only reason they'd need to provide breakfast and dinner is if you're expected to be there basically every waking moment of your day.
Burn-out isn't the only concern, either. Engineering is both an art and a science, and like any art, it requires inspiration. Inspiration, in turn, requires experience. The same experience, day-in, day-out - interacting with the same people, in the same place, doing the same things - leaves one's mind stale, devoid of inspiration. Developers get tunnel-vision, and stop bringing new ideas to the table, because they have no source for them. Thinking outside the box isn't possible if you haven't been outside the box in months.
Give your people free coffee. Give them lunch. Give them great benefits. Pay them well. Treat them with dignity and respect. Let them go home and have lives. Let them get the most out of their day, both at work and at home. You'll keep people longer, and those people will be more productive while they're there. And you'll attract more mature engineers, who are more likely to stick around rather than hopping to the next hip startup as soon as the mood strikes them.
There's a certain pride in being up until sunrise cranking out code. There's a certain macho attitude, a one-upmanship, a competition to see who worked the longest and got the least sleep and still came back the next morning. I worked from 8am until 4am yesterday, and I'm here, see how tough I am? It's the geek's equivalent to fitness nuts talking about their morning 10-mile run. The human ego balloons when given the opportunity to endure self-inflicted tortures.
But I'm inclined to prefer an engineer who takes pride in the output, not the struggle to achieve it. I want someone who is stoked that they achieved so much progress, and still left the office at four in the afternoon. Are they slackers, compared to the guy who stayed another twelve hours, glued to his desk? Not if the output is there. It's the product that matters, and if the product is good, and gets done in time, then I'd rather have the engineer that can get it done without killing themselves in the process.
"I did this really cool thing! I had to work late into the night, but caffeine is all I need to keep me going. I kept having to put in hacks and work-arounds, but the important thing is that it's done and it works. I'm a coding GOD!" Your typical young, proud engineer. They're proud of the battle, not the victory; they're proud of how difficult it was.
"I did this really cool thing! Because I had set myself up well with past code, it was a breeze. I was amazed how little time it took. I'm a coding GOD!" That's my kind of developer. That's pride I can agree with. They're proud because of how easy it was.
This might sound like an unfair comparison at first, but think about it. When you're on a 20-hour coding bender, you aren't writing your best code. You're frantically trying to write working code, because you're trying to get it done as fast as you can. Every cut corner, every hack, every workaround makes the next task take that much longer. Long hours breed technical debt, and technical debt slows development, and slow development demands longer hours. It's a vicious cycle that can be extremely difficult to escape, especially once it's been institutionalized and turned into a badge of honor.
2013-08-04
Assumptions and Unit Tests
2013-07-04
Feature Disparity Between Web, Mobile, and Desktop
Take Evernote as an example. It's been out for Android for ages, with regular new releases offering new features and functionality. Yet there are still basic features that are not available in the mobile client, including strike-through text, horizontal rules, alignment, and font face/size changes. If you have a note with these features, and you edit the note in the Android app, you get a friendly warning that the note contains unsupported features, and the editor forces you to edit paragraph-by-paragraph, like the old and irritating Google Docs app for Android. I find this more than a little bit ridiculous; why are you adding new, nice-to-have features when basic functionality is still unsupported?
Look at Google Keep for the opposite example. The mobile app allows reordering the items in a checklist with drag-and-drop. The web app doesn't allow you to reorder items. The only way to reorder items is using cut and paste. This is something you can absolutely achieve in a web app, and they've done it before, but for some reason that one, basic, important feature is just somehow missing.
The Mint mobile app allows changing budgets, but not changing whether or not the budget surplus/deficit should roll over month-to-month, which you can do in the web app. It's most of the feature, just missing one little part that can cause frustration because if most of the feature is there, you expect the whole feature to be there.
The GitHub web app doesn't even include a git client - the closest you can get is downloading a repo, but you can't actually check out and manage a working copy.
The Google Maps app for Android doesn't allow editing your "My Maps", or to choose from (or create) alternate routes when getting directions. It also doesn't include the web version's traffic forecasting. The Blogger web app is next to useless; editing a note created on the desktop gives you a WYSIWYG editor with the plain text littered with markup, and writing a post on mobile and then looking at it on desktop shows that there's some serious inconsistencies with handling of basic formatting elements like paragraphs. Don't even get me started on the useless bundle of bytes that is the Google Analytics Android app; it's such a pathetic shadow of the web application that there's no point in even having it installed.
These seem to me like cases of failure to eat your own dog food. If there were employees - especially developers or product managers - of these companies, using these applications on each supported platform, these issues would have been solved. They're the sorts of things that look small and insignificant on a backlog until they affect you on a day-to-day basis; those little annoyances, repeated often enough, become sources of frustration.
2013-06-11
Teaching a Developer to Fish
2013-06-07
Code Patterns as Microevolution
2013-05-29
My Take on "Collective Ownership"/"Everyone is an Architect"
2013-05-03
Be Maxwell's Demon
In thermodynamics, Maxwell's Demon thought experiment is, in reality, impossible - it is purely a thought experiment. However, in software development, we're in luck: any developer can play the demon, and should, at every available opportunity.
Maxwell's demon stands between two connected systems, defeating the second law of thermodynamics by selectively allowing less-energetic particles through only in one direction, and more-energetic particles through only in the other direction, causing the two systems to tend toward opposite ends of the spectrum, rather than naturally tending toward entropy.
By doing peer reviews, you're doing exactly that; you're reducing the natural entropy in the system and preventing it from reaching its natural equilibrium by only letting the good code through, and keeping the bad code out. Over time, rather than tending toward a system where all code is average, you tend toward a system where all code is at the lowest end of the entropic spectrum.
Refactoring serves a similar, but more active role; rather than simply "only letting the good code through", you're actively seeking out the worse code and bringing it to a level that makes it acceptable to the demon. In effect, you're reducing the overall entropy of the system.
If you combine these two effects, you can achieve clean, efficient, effective source. If your review process only allows code through that is as good or better than the average, and your refactoring process is constantly improving the average, then your final code will, over time, tend toward excellence.
Without a demon, any project will be on a continuous slide toward greater and greater entropy. If you're on a development project, and it doesn't have a demon, it needs one. Why not you?
2013-04-17
Truly Agile Software Development
Note: Yes, I understand that Scrum calls prototypes "spikes". I think this is rather silly - there are already terms for prototypes, namely, "prototype" or "proof of concept". I'm all for new terms for things that don't have names, but giving new names to things that already have well-known names just seems unnecessary.
Driving Algorithm
2012-11-17
A Programmer's Comparison of Java and C#/.NET
I've been developing in Java for almost ten years, and in C# for only a few months, so this comparison may not be as thorough as it could be. If I've missed something please feel free to comment.
Java is far more portable than C# for one. I've built applications on Windows, and ported them to Linux and Mac with minimal effort. With Android running on a Java-based platform, porting to Android is made far easier. There's no fussing with Mono and the like, no making sure you don't use any API functions that are only available in .NET.
Java also has a wide array of available IDEs with excellent features, and a huge, active community. There are libraries available for just about any technology you can think of, usually more than one, such that one of the options will likely fit your specific situation.
Java's runtime generics seem to be easier to learn and work with than C#'s compile-time generics; however, compile-time generics are likely better performing. Java's overridable-by-default scheme also makes development a lot easier in many cases. While I do understand the idea behind C#'s final-by-default scheme, I prefer a language that leaves those kinds of choices up to the developer rather than enforcing good development practices through language features.
The JVM is also now expanding to support other scripting languages, including PHP, Python, Ruby, Scala, and others.
C# has some excellent language features that I would like to see in Java, however. Extension methods are extremely useful for adding functionality to classes without having to subclass, particularly useful in adding functionality to library classes. C#'s delegate features are really excellent, and beat any workaround Java has for its lack of closures for callbacks and event handlers. The upcoming Java closure functionality looks like it will still pale in comparison to C#'s delegates.
LINQ is something I would love to see come to Java; the ability to query collections like databases is extraordinarily useful and eliminates a lot of tedious code iterating over collections. I've yet to use it for querying against a database, but it seems more than adequate for that purpose and likely much friendlier than JDBC. And while porting is more complicated, Mono is a very strong platform, and there's even a Mono module for hosting web applications through Apache.
Speaking of web applications, I have no experience so far with building web applications in C# .NET, but I have done some research. Based on that research, I have to say I significantly prefer JSP/JSTL/EL over ASP.NET. I prefer the syntax, the workflow, and JSP's tag library system over ASP.NET, which reminds me a little too much of PHP or old-school JSP (pre-JSTL/EL) for my tastes.
All in all, I can't say one is superior to the other; like any development decision, it comes down to which option is best suited to the situation and the developer. If you've had the opportunity to make that choice, please leave a note in the comments and let me know what you chose and why, I'd be happy to hear it!
2011-03-31
Dynamic Playlists
2009-01-08
DO WANT
2008-06-25
XML: No, it isn't.
First, it's not extensible. It just isn't. You can't extend it. I can't extend it. No one can extend it. You know how I know? Because there aren't any extensions. Not a single one. Go ahead. Go find an extension to XML. I'd love to hear about it.
But it's just as well - there's no reason to extend it. XML defines very little; it's a syntax definition, nothing more. DTDs and Schemas are what make XML useful. They aren't extensions to XML, they're applications of XML. What's more, the DTDs and Schemas can be combined in a single document, but even they can't be extended.
Second, while it can be used as a markup language, it almost never is. XHTML is a markup language based on XML. There are a few others that are (debatably) markup languages, like DocBook, but even the likes of DocBook are more on the side of data structure definition than markup. A database file isn't markup. A Java properties file isn't markup. It's a data structure. Per Wikipedia:
A markup language is an artificial language using a set of annotations to text that describe how text is to be structured, laid out, or formatted.Does that sound like most of the XML formats you've encountered? How many XML config files have you had to deal with? Do they fit that description, even a little bit? Of course not. You don't care about the structure, layout, or formatting of the text in a config file. All you care about is getting at the particular block of text you want. So, what is XML then? Something of a generic hierarchical data file format - though I suppose GHDFF just isn't as catchy as XML.
Now, besides being aggregiously misnamed, it's also a wretched tool for nearly every purpose to which it is applied. It's a language that aims for the middle ground between human-readable and machine-readable, and while it achieves both, it does so very poorly. XML is annoying to read, tedious to write, and resource-intensive to process.
I'm not suggesting dumping XML entirely, not at all. The angle-bracket tax is a fee worth paying for actual markup - you need syntax to seperate the markup from the text. XML is a flexible and effective format for marking up text. What it isn't is an effective format for storing arbitrary data. It's usable, but nowhere near optimal. What's the solution? Something else.
Programmers have a tendency to cling to standards, to try to apply them as much as possible. "Don't reinvent the wheel," we say. And that's a perfectly reasonable mantra - but that doesn't mean all wheels are created equal. When's the last time you saw a bicycle wheel on a car? Would the world be a better place if every wheel were the same? Sure, they'd be interchangeable - but they wouldn't be anywhere near as effective.
We need to step back sometimes, and think about whether there is, or could be, a better wheel for any given situation.
More on this to come.
2007-07-30
Ultimate OS Wishlist
The ultimate operating system would feature:
• A completely vector-based UI with full transparency, allowing users to select not only a monitor resolution, but also a display DPI, so that large, high-density displays could be used to display the same size features at higher quality.
• An auto-update system that's open to all developers to use. Currently, modern OS's (Mac OS and Windows) supply a system auto-update feature that cannot be used by installed applications, forcing application developers to write their own, separate auto-update libraries.
• A bug/crash reporting system that's open to all developers to use. We sort of have this now, but it could get a whole lot better.
• A complete skinning/theming system that can be used to apply complete OS-wide interface makeovers, as well as skinning specific applications. Currently, operating systems typically require a seperate piece of software to skin the OS, and many individual applications provide a means to skin that application.
• Filesystem-level local revision control, and integrated access to remote revision control repositories. Revision control isn't just for programmers any more.
• A tightly-integrated, professional-quality Personal Information Manager (PIM), integrated into the system's clipboard and drag-and-drop functionality. Apple almost has the right idea here, except that the PIM applications themselves are dreck. It should be simple to use my computer, without any 3rd-party software, to store contacts, set reminders and appointments, create a to-do list, and so forth.
• Multiple clipboards and clipboard history.
• Solid remote command-line and remote desktop capabilities. Only *nix really has this nailed down. I want to be able to throw away my KVM in favor of my LAN.
• System self-optimization based on usage statistics. C'mon, guys, this can't be that hard. I shouldn't have to do much, if any, of my own optimization; operating systems should be smart enough to monitor how I use my PC and adjust system settings accordingly.
• Window-manager-level support for tabbed interfaces. It should be up to the user, not the developers, what windows and applications can be run in tabs rather than a slew of individual windows.
• A decent application launcher. Seriously, this is the core functionality of all operating systems - running applications. But still, with every OS I've ever used, I've had to install a 3rd-party application launcher to really get the most out of my system. I should have a customizable solution that completely eliminates the need for programs like QuickSilver, Colibri, Katapult, DragThing, and so on.
• Easy management of startup items. For crying out loud, this is still a pain in the ass on both Windows and Mac OS. Why?!?
• A cappuccino maker.
So, what's your OS wishlist? Post in the comments!
2007-07-27
Religion
Okay, time to cover religion. You've got your ideological religions - agnosticism, atheism, and apathosism. Atheists believe there is no god. Agnostics don't know if there is a god or not. And Apathosists don't care if there is or not, they'll find out when they get there. If you haven't guessed, I fall into the last category.
Then you've basically got three other types of religions - anglican, based around the Old Testament, the New Testament, or some Testament or another involving lots of guys with shabby clothing, unkempt beards, and a bit of an overzealous love for wine; and eastern, based around spending lots of time doing menial tasks or sitting very, very quietly for long periods of time to reach a state of personal enlightenment; and the Old Religions, which were mostly about farming, eating, killing, and procreating (and what else would you need in life?)
And then, of course, there are the Unitarian Universalists, who believe in stuff, and who evangelise door-to-door in comfortable shoes saying "Hello, I'm with the Unitarian Universalist Church, and I was hoping you could take a moment to hear the joys of, well, whatever you believe in, being, ah, really really good, and all." If you've ever been to a Unitarian church, you'll notice a lot of Birkenstocks and Ugg boots and other brand-name hippie footwear. In fact, as a kid, for a brief while, I went to a Unitarian youth program at Our Lady of Sensible Shoes - fantastic lot, lots of candles, cork sandals, sex ed is done every year 5th grade through high school at an anual sleepover weekend at the church (good planning...) Makes for an interesting childhood, lemme tell ya.
And Unitarian ministers are great - they all sound like announcers from NPR, or maybe subliminal tape voiceover actors from Canada. Very polite, always soothing tones, lots of talk about how pretty the trees and the sky and the flowers are. Very politically correct church, they try to keep it non-denominational - no, not easy in a church, but if it's not a challenge, it's probably not worth doing, right? Or maybe it's just not worth doing right? I always get those confused...
So anyway, and then there was the Unitarian Inquisition - "Excuse me? Ah, excuse me?" "Yes?" "Well, I was just wondering... what do you believe?" "What do you mean?" "You know, the whole god, devil, afterlife thing - what's your stance?" "Well, I'm a Pagan, as a matter of fact." "Ahhh, yes, very good. Good for you, that. Hope you're enjoying it." "Well, the orgies are nice..." "Ah, yes... Ahh.... Have some tea?" "Well, aren't you supposed to be putting me on the rack now?" "What? Oh, goodness no... that'd be terrible... we might light some candles later..." "Candles?" "Yes, candles, love the things, can't get enough of 'em. May I ask another question? Do you have a comfortable pair of shoes?"
So, yes. That's the UU Church. I also did the Old Gnostic Mass for a while, that's pretty interesting, a dozen drunken Jews in Southern California putting on a Shakesperian play set in Pagan Rome with nude women and oh, what the hell, we'll use whiskey for sacrement, can't find the wine, whiskey's better anyway, I always feel closer to God after I've had a few. "There is nothing in me that is not of the Gods." Unless you're Michael Jackson, in which case most of what's in you is synthetic anyway.
I've done pagan circles too - again with the whiskey. I find that the alternative religions tend to very quickly decide that hard liquor is much more religious than wine. And if those stale crackers are the body of Christ, I really have to worry about the guy. I understand people are supposed to taste like pork, not cardboard. He might want to have a quick chat with God about that one. "Excuse me, dad?" "Yes?" "Well, I was wondering.... why do I taste like crap?" "Ahh, well... Huh... Hadn't really thought of that... Ahhh... well, you see, it's... it's, ahh.... it's all Adam's fault, that bastard! He - he made me do it!Yes, that's it..."
So, yeah. That's religion in a nutshell for ya. If you're still having trouble choosing one, go with Apathosism, it's easier, and it lets you have a lot more fun.
2007-05-04
Wired vs. Wireless
and her argument was that wired networks seem archaic.
Now, while I can certainly understand the idea that the same cables we've been using for decades are still just fine today may be hard to swallow, but in reality, wired networking is advancing far faster than wireless.
Wireless networking, over the last decade, has gone from 11mbit (802.11b) to 54mbit (802.11g) to "up to 700mbit" (802.11n; effectively 100 - 200 mbit). This bandwidth is per airspace - multiple clients on a network, and multiple networks in the same airspace, must share the available bandwidth.
Meanwhile, wired networks have gone from 10 to 100 mbit, then to 1 gbit and now 10 gbit, all on copper cable. And each client on a wired network gets a dedicated, full-bandwidth pipe all to its own.
So, while the cables may not have changed much (cat 6 is hard to tell from cat 5 to the average person), wired networks are advancing far beyond wireless, and all the while, they provide greater reliability, security, ease of use, and power efficiency.
All in all, I'll keep my wired network.
2007-03-14
Urgent Apps - Mac Development Kit
Before we begin, I should point out that my particular development tasks typically include the administration of a MySQL database, editing PHP, Java, HTML, CSS, and JavaScript files, and operating revision control; the tools laid out here are centered around those tasks.
Now, without further ado, the list:
jEdit
jEdit calls itself "the programmer's text editor", but that's selling it short. jEdit is, to put it lightly, a god among executables. I've never seen another program come close to its level of flexibility, modularity, and customizability. The sacrifice for all this goodness is that it's a bit of a RAM-hog, particularly running under the MacOS JRE (I highly recommend updating to the 1.6 JRE available on apple's website, and completely switching over to 1.6; it provides some vast performance and footprint improvements.)
NetBeans
NetBeans is, of course, the Java IDE, unless you're one of those people that thinks that Eclipse is the Java IDE, but I'm not.
SmartSVN (payware)
The best SVN client I've seen for the Mac. Unfortunately, there aren't many good free options.
MySQL GUI Tools
The real deal, straight from the source.
Platypus
This nifty little app lets you take any shell or other script file and turn it into a Mac application package.
ArgoUML
Java-based UML designer.
Subversion
Revision control extraordinaire. Any box I do development on has a local Subversion server for anything I happen to want to keep a history for.
Trac
I've recently fallen in love with Trac, which is why it made the list. It's not exactly an application - it's a web application. However, it can be installed on a Mac, so it made the cut, and I do love it dearly. Go check out their page; the Trac site runs on Trac.
Anything I'm missing? Post in the comments!!